Compare commits
17 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b78d7a3782 | ||
|
|
b3b5bf1ed8 | ||
|
|
efcc19e914 | ||
|
|
367a37f29b | ||
|
|
25e856045b | ||
|
|
6a8e1ddd7e | ||
|
|
6d8bf16d74 | ||
|
|
d9bcc2ed3c | ||
|
|
bd4601bd3f | ||
|
|
b3c7a18685 | ||
|
|
d6f205dc25 | ||
|
|
0215ed05f0 | ||
|
|
9d9e332929 | ||
|
|
cb3bf21429 | ||
|
|
50f55436c1 | ||
|
|
e54912db77 | ||
|
|
00ad43f721 |
8
1.sh
8
1.sh
@@ -3,8 +3,8 @@
|
|||||||
# ...
|
# ...
|
||||||
#
|
#
|
||||||
# 使用方法:
|
# 使用方法:
|
||||||
# URL="https://git.1-h.cc/Scripts/Linux/raw/branch/main/1.sh"; curl -fsSL "$URL" | bash
|
# URL="https://git.1-h.cc/Scripts/Linux/raw/branch/2026/1.sh"; curl -fsSL "$URL" | bash
|
||||||
# URL="https://git.1-h.cc/Scripts/Linux/raw/branch/main/1.sh"; wget -q -O - "$URL" | bash
|
# URL="https://git.1-h.cc/Scripts/Linux/raw/branch/2026/1.sh"; wget -q -O - "$URL" | bash
|
||||||
|
|
||||||
set -e # 遇到错误即退出
|
set -e # 遇到错误即退出
|
||||||
trap 'echo "Error on line $LINENO"' ERR
|
trap 'echo "Error on line $LINENO"' ERR
|
||||||
@@ -62,6 +62,7 @@ sysctl_config() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
SYSCTL_SETTINGS=(
|
SYSCTL_SETTINGS=(
|
||||||
|
"vm.swappiness=10"
|
||||||
"vm.overcommit_memory=1"
|
"vm.overcommit_memory=1"
|
||||||
"net.core.rmem_max=16777216"
|
"net.core.rmem_max=16777216"
|
||||||
"net.core.wmem_max=16777216"
|
"net.core.wmem_max=16777216"
|
||||||
@@ -211,6 +212,8 @@ EOF
|
|||||||
}
|
}
|
||||||
|
|
||||||
start_watchtower() {
|
start_watchtower() {
|
||||||
|
# [Goodbye containrrr/watchtower!](https://github.com/containrrr/watchtower/discussions/2135)
|
||||||
|
# https://github.com/nicholas-fedor/watchtower
|
||||||
print_green "###################"
|
print_green "###################"
|
||||||
print_green "#### watchtower ###"
|
print_green "#### watchtower ###"
|
||||||
print_green "###################"
|
print_green "###################"
|
||||||
@@ -225,6 +228,7 @@ start_watchtower() {
|
|||||||
WATCHTOWER_ARGS+=(--cleanup)
|
WATCHTOWER_ARGS+=(--cleanup)
|
||||||
# WATCHTOWER_ARGS+=(--remove-volumes)
|
# WATCHTOWER_ARGS+=(--remove-volumes)
|
||||||
WATCHTOWER_ARGS+=(--rolling-restart)
|
WATCHTOWER_ARGS+=(--rolling-restart)
|
||||||
|
WATCHTOWER_ARGS+=(--api-version=1.44)
|
||||||
|
|
||||||
if [ "$WATCHTOWER_RUN_ONCE" = true ]; then
|
if [ "$WATCHTOWER_RUN_ONCE" = true ]; then
|
||||||
WATCHTOWER_ARGS+=(--run-once)
|
WATCHTOWER_ARGS+=(--run-once)
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
# 功能:更新软件包、清理缓存、检查服务状态
|
# 功能:更新软件包、清理缓存、检查服务状态
|
||||||
#
|
#
|
||||||
# 使用方法:
|
# 使用方法:
|
||||||
# URL="https://git.1-h.cc/Scripts/Linux/raw/branch/main/alpine/upgrade.sh"; wget -q -O - "$URL" | bash
|
# URL="https://git.1-h.cc/Scripts/Linux/raw/branch/2026/alpine/upgrade.sh"; wget -q -O - "$URL" | bash
|
||||||
|
|
||||||
cat <<EOF > /etc/apk/repositories
|
cat <<EOF > /etc/apk/repositories
|
||||||
http://dl-cdn.alpinelinux.org/alpine/latest-stable/main
|
http://dl-cdn.alpinelinux.org/alpine/latest-stable/main
|
||||||
|
|||||||
@@ -101,7 +101,7 @@ docker_exec() {
|
|||||||
set -- "$@" --shell="$EXEC_SHELL"
|
set -- "$@" --shell="$EXEC_SHELL"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
curl -fsSL "https://Git.1-H.CC/Scripts/Linux/raw/branch/main/docker-exec-via-sock.sh" | sh -s -- "$@"
|
curl -fsSL "https://git.1-h.cc/Scripts/Linux/raw/branch/2026/docker-exec-via-sock.sh" | sh -s -- "$@"
|
||||||
}
|
}
|
||||||
|
|
||||||
while [ "$#" -gt 0 ]; do
|
while [ "$#" -gt 0 ]; do
|
||||||
@@ -305,7 +305,7 @@ printf '\n' >&2
|
|||||||
log "数据库备份完成"
|
log "数据库备份完成"
|
||||||
|
|
||||||
log "正在调用远程清理脚本,前缀为 '$BACKUP_PREFIX',目录为 $BACKUP_DIR"
|
log "正在调用远程清理脚本,前缀为 '$BACKUP_PREFIX',目录为 $BACKUP_DIR"
|
||||||
if ! curl -fsSL "https://Git.1-H.CC/Scripts/Linux/raw/branch/main/database-dump-cleanup.sh" | \
|
if ! curl -fsSL "https://git.1-h.cc/Scripts/Linux/raw/branch/2026/database-dump-cleanup.sh" | \
|
||||||
sh -s -- --prefix="$BACKUP_PREFIX" --dir="$BACKUP_DIR"; then
|
sh -s -- --prefix="$BACKUP_PREFIX" --dir="$BACKUP_DIR"; then
|
||||||
log "清理脚本失败"
|
log "清理脚本失败"
|
||||||
fi
|
fi
|
||||||
|
|||||||
2
debian/upgrade.sh
vendored
2
debian/upgrade.sh
vendored
@@ -3,7 +3,7 @@
|
|||||||
# ...
|
# ...
|
||||||
#
|
#
|
||||||
# 使用方法:
|
# 使用方法:
|
||||||
# URL="https://git.1-h.cc/Scripts/Linux/raw/branch/main/debian/upgrade.sh"; curl -fsSL "$URL" | bash
|
# URL="https://git.1-h.cc/Scripts/Linux/raw/branch/2026/debian/upgrade.sh"; curl -fsSL "$URL" | bash
|
||||||
|
|
||||||
# 设置非交互式环境变量
|
# 设置非交互式环境变量
|
||||||
export DEBIAN_FRONTEND=noninteractive
|
export DEBIAN_FRONTEND=noninteractive
|
||||||
|
|||||||
121
devcontainer/apt-install-with-cache.sh
Normal file
121
devcontainer/apt-install-with-cache.sh
Normal file
@@ -0,0 +1,121 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#-------------------------------------------------------------------------------------------------------------
|
||||||
|
# curl -fsSL https://Git.1-H.CC/Scripts/Linux/raw/branch/2026/devcontainer/apt-install-with-cache.sh | sudo bash -s -- git vim curl
|
||||||
|
#-------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# =================配置区域=================
|
||||||
|
# 自定义缓存目录
|
||||||
|
CACHE_DIR=${APT_CACHE_DIR:-"/vscode/apt-cache"}
|
||||||
|
# 自动更新间隔 (秒),默认 24 小时
|
||||||
|
UPDATE_INTERVAL=${APT_UPDATE_INTERVAL:-86400}
|
||||||
|
# =========================================
|
||||||
|
|
||||||
|
START_TIME=$(date +%s)
|
||||||
|
trap 'echo "⏱️ 总耗时: $(($(date +%s) - $START_TIME))秒"' EXIT
|
||||||
|
|
||||||
|
# 确定是否需要 sudo
|
||||||
|
SUDO=""
|
||||||
|
if [ "$EUID" -ne 0 ]; then
|
||||||
|
SUDO="sudo"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 检查是否有参数传入
|
||||||
|
if [ $# -eq 0 ]; then
|
||||||
|
echo "用法: $0 <package1> <package2> ..."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
PACKAGES="$@"
|
||||||
|
|
||||||
|
# 创建临时日志文件
|
||||||
|
LOG_FILE=$(mktemp)
|
||||||
|
$SUDO chmod 666 "$LOG_FILE"
|
||||||
|
# env >> "$LOG_FILE"
|
||||||
|
|
||||||
|
echo "----------------------------------------"
|
||||||
|
echo "📦 缓存目录: $CACHE_DIR"
|
||||||
|
echo "📝 日志文件: $LOG_FILE"
|
||||||
|
echo "🎯 目标软件包: $PACKAGES"
|
||||||
|
echo "----------------------------------------"
|
||||||
|
|
||||||
|
# 1. 准备缓存目录结构
|
||||||
|
# apt 需要在 archive 目录下有一个 partial 子目录,否则会报错
|
||||||
|
if [ ! -d "$CACHE_DIR/partial" ]; then
|
||||||
|
echo "Creating cache directory..."
|
||||||
|
$SUDO mkdir -p "$CACHE_DIR/partial"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 检查上次更新时间
|
||||||
|
LAST_UPDATE_FILE="/var/lib/apt/periodic/update-success-stamp"
|
||||||
|
NOW=$(date +%s)
|
||||||
|
SHOULD_UPDATE=true
|
||||||
|
|
||||||
|
if [ -f "$LAST_UPDATE_FILE" ]; then
|
||||||
|
LAST_UPDATE=$(stat -c %Y "$LAST_UPDATE_FILE" 2>/dev/null || stat -f %m "$LAST_UPDATE_FILE" 2>/dev/null)
|
||||||
|
if [ $((NOW - LAST_UPDATE)) -lt $UPDATE_INTERVAL ]; then
|
||||||
|
echo "⏩ 软件源在 $(( (NOW - LAST_UPDATE) / 60 )) 分钟前已更新,跳过 update..."
|
||||||
|
SHOULD_UPDATE=false
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$SHOULD_UPDATE" = true ]; then
|
||||||
|
echo "🔄 更新软件源..."
|
||||||
|
# 自动更新源
|
||||||
|
$SUDO apt-get update >> "$LOG_FILE" 2>&1
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "❌ 更新失败,详细日志:"
|
||||||
|
cat "$LOG_FILE"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 2. 第一步:只下载,不安装 (Download Only)
|
||||||
|
# -o Dir::Cache::archives="$CACHE_DIR" 告诉 apt 把包下载到我们指定的目录
|
||||||
|
# --download-only 告诉 apt 只下载依赖包,不要解压安装
|
||||||
|
echo "⬇️ 正在检查并下载依赖..."
|
||||||
|
$SUDO env DEBIAN_FRONTEND=noninteractive apt-get install --no-install-recommends -y --download-only \
|
||||||
|
-o Dir::Cache::archives="$CACHE_DIR" \
|
||||||
|
$PACKAGES >> "$LOG_FILE" 2>&1
|
||||||
|
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "❌ 下载依赖失败,详细日志:"
|
||||||
|
cat "$LOG_FILE"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 检查缓存命中情况
|
||||||
|
if grep -q "Need to get 0 B" "$LOG_FILE"; then
|
||||||
|
echo "♻️ 缓存命中:无需下载"
|
||||||
|
elif grep -q "Need to get" "$LOG_FILE"; then
|
||||||
|
# 尝试提取下载大小,格式通常为 "Need to get XX MB of archives."
|
||||||
|
DOWNLOAD_INFO=$(grep "Need to get" "$LOG_FILE")
|
||||||
|
echo "⬇️ 缓存未命中:$DOWNLOAD_INFO"
|
||||||
|
else
|
||||||
|
echo "ℹ️ 无需下载(可能已安装)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "✅ 依赖下载/缓存完成。"
|
||||||
|
|
||||||
|
# 3. 第二步:安装 (Install)
|
||||||
|
# 再次运行 install,指向同一个缓存目录。
|
||||||
|
# apt 会检测到目录里已经有对应的 .deb 文件(且哈希值匹配),就会直接使用缓存,跳过下载。
|
||||||
|
echo "🚀 开始安装..."
|
||||||
|
|
||||||
|
# 尝试使用 eatmydata 加速安装 (如果可用)
|
||||||
|
APT_CMD="apt-get"
|
||||||
|
if command -v eatmydata >/dev/null 2>&1; then
|
||||||
|
APT_CMD="eatmydata apt-get"
|
||||||
|
echo "⚡️ 启用 eatmydata 加速"
|
||||||
|
fi
|
||||||
|
|
||||||
|
$SUDO env DEBIAN_FRONTEND=noninteractive $APT_CMD install --no-install-recommends -y \
|
||||||
|
-o Dir::Cache::archives="$CACHE_DIR" \
|
||||||
|
$PACKAGES >> "$LOG_FILE" 2>&1
|
||||||
|
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
echo "🎉 安装成功!"
|
||||||
|
else
|
||||||
|
echo "❌ 安装失败,详细日志:"
|
||||||
|
cat "$LOG_FILE"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
35
surge-teardown-all.sh
Executable file
35
surge-teardown-all.sh
Executable file
@@ -0,0 +1,35 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#-------------------------------------------------------------------------------------------------------------
|
||||||
|
# 使用方法:
|
||||||
|
# export SURGE_TOKEN="你的 Surge Token"
|
||||||
|
# 使用“进程替换”方式运行脚本: 这种方式不会占用 stdin,脚本可以正常进行交互:
|
||||||
|
# URL="https://git.1-h.cc/Scripts/Linux/raw/branch/2026/surge-teardown-all.sh"; bash <(curl -fsSL "$URL")
|
||||||
|
#-------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
echo "正在获取 Surge 部署列表..."
|
||||||
|
domains=$(bunx surge list | sed 's/\x1b\[[0-9;]*m//g' | grep -E '\.surge\.sh' | awk '{print $1}')
|
||||||
|
|
||||||
|
if [ -z "$domains" ]; then
|
||||||
|
echo "未找到 Surge 部署。"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "发现以下需要撤销的部署:"
|
||||||
|
echo "$domains"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
read -p "确定要撤销所有部署吗?(y/N): " confirm
|
||||||
|
if [[ $confirm != [yY] && $confirm != [yY][eE][sS] ]]; then
|
||||||
|
echo "操作已取消。"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "正在撤销所有部署..."
|
||||||
|
echo "$domains" | while read -r domain; do
|
||||||
|
if [ -n "$domain" ]; then
|
||||||
|
echo "正在撤销: $domain"
|
||||||
|
bunx surge teardown "$domain"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "所有部署已撤销。"
|
||||||
@@ -3,14 +3,14 @@
|
|||||||
# ...
|
# ...
|
||||||
#
|
#
|
||||||
# 使用方法:
|
# 使用方法:
|
||||||
# URL="https://git.1-h.cc/Scripts/Linux/raw/branch/main/upgrade.sh"; curl -fsSL "$URL" | bash
|
# URL="https://git.1-h.cc/Scripts/Linux/raw/branch/2026/upgrade.sh"; curl -fsSL "$URL" | bash
|
||||||
|
|
||||||
if [ -f /etc/debian_version ]; then
|
if [ -f /etc/debian_version ]; then
|
||||||
SYSTEM_TYPE="debian"
|
SYSTEM_TYPE="debian"
|
||||||
source <(curl -fsSL git.1-h.cc/Scripts/Linux/raw/branch/main/debian/upgrade.sh)
|
source <(curl -fsSL git.1-h.cc/Scripts/Linux/raw/branch/2026/debian/upgrade.sh)
|
||||||
elif [ -f /etc/alpine-release ]; then
|
elif [ -f /etc/alpine-release ]; then
|
||||||
SYSTEM_TYPE="alpine"
|
SYSTEM_TYPE="alpine"
|
||||||
source <(curl -fsSL git.1-h.cc/Scripts/Linux/raw/branch/main/alpine/upgrade.sh)
|
source <(curl -fsSL git.1-h.cc/Scripts/Linux/raw/branch/2026/alpine/upgrade.sh)
|
||||||
else
|
else
|
||||||
echo "不支持的系统类型"
|
echo "不支持的系统类型"
|
||||||
exit 1
|
exit 1
|
||||||
|
|||||||
Reference in New Issue
Block a user