Compare commits

14 Commits
main ... 2026

Author SHA1 Message Date
严浩
367a37f29b fix(apt-install): 注释掉环境变量输出和不必要的日志文件内容 2025-12-21 00:37:47 +08:00
严浩
25e856045b feat(apt-install): 添加自动更新软件源功能并优化安装过程 2025-12-21 00:32:33 +08:00
严浩
6a8e1ddd7e fix(apt-install): 在临时日志文件中添加环境变量输出以便于调试 2025-12-21 00:14:12 +08:00
严浩
6d8bf16d74 fix(apt-install): 更新安装命令以确保不安装推荐包 2025-12-21 00:11:06 +08:00
严浩
d9bcc2ed3c fix(apt-install): 修复安装命令以确保不安装推荐包 2025-12-21 00:10:38 +08:00
严浩
bd4601bd3f fix(apt-install): 修复日志文件输出方式以确保完整记录更新和安装过程 2025-12-21 00:08:07 +08:00
严浩
b3c7a18685 fix(apt-install): 修复环境变量设置以确保依赖包正确下载和安装 2025-12-21 00:03:55 +08:00
严浩
d6f205dc25 fix(apt-install): 修复临时日志文件权限设置 2025-12-20 23:56:32 +08:00
严浩
0215ed05f0 fix(apt-install): 修复下载依赖的环境变量设置 2025-12-20 23:49:37 +08:00
严浩
9d9e332929 feat(apt-install): 添加缓存安装脚本以优化软件包安装过程 2025-12-20 23:16:53 +08:00
严浩
cb3bf21429 docs(watchtower): 添加关于 watchtower 替代方案的说明链接 2025-12-20 20:47:06 +08:00
严浩
50f55436c1 feat(watchtower): 添加 --api-version=1.44 参数 2025-12-20 20:29:00 +08:00
严浩
e54912db77 docs(surge-teardown): 更新使用说明以支持进程替换方式运行脚本 2025-12-19 23:35:53 +08:00
严浩
00ad43f721 feat(surge): 添加 surge-teardown-all.sh 脚本以撤销所有部署 2025-12-19 23:31:50 +08:00
3 changed files with 159 additions and 0 deletions

3
1.sh
View File

@@ -211,6 +211,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 +227,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)

View 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
View 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 "所有部署已撤销。"