feat(apt-install): 添加自动更新软件源功能并优化安装过程
This commit is contained in:
@@ -6,6 +6,8 @@
|
|||||||
# =================配置区域=================
|
# =================配置区域=================
|
||||||
# 自定义缓存目录
|
# 自定义缓存目录
|
||||||
CACHE_DIR=${APT_CACHE_DIR:-"/vscode/apt-cache"}
|
CACHE_DIR=${APT_CACHE_DIR:-"/vscode/apt-cache"}
|
||||||
|
# 自动更新间隔 (秒),默认 24 小时
|
||||||
|
UPDATE_INTERVAL=${APT_UPDATE_INTERVAL:-86400}
|
||||||
# =========================================
|
# =========================================
|
||||||
|
|
||||||
START_TIME=$(date +%s)
|
START_TIME=$(date +%s)
|
||||||
@@ -43,13 +45,33 @@ if [ ! -d "$CACHE_DIR/partial" ]; then
|
|||||||
$SUDO mkdir -p "$CACHE_DIR/partial"
|
$SUDO mkdir -p "$CACHE_DIR/partial"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "🔄 更新软件源..."
|
# 检查上次更新时间
|
||||||
# 自动更新源
|
LAST_UPDATE_FILE="/var/lib/apt/periodic/update-success-stamp"
|
||||||
$SUDO apt-get update >> "$LOG_FILE" 2>&1
|
NOW=$(date +%s)
|
||||||
if [ $? -ne 0 ]; then
|
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 "❌ 更新失败,详细日志:"
|
echo "❌ 更新失败,详细日志:"
|
||||||
cat "$LOG_FILE"
|
cat "$LOG_FILE"
|
||||||
exit 1
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 2. 第一步:只下载,不安装 (Download Only)
|
||||||
|
cat "$LOG_FILE"
|
||||||
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 2. 第一步:只下载,不安装 (Download Only)
|
# 2. 第一步:只下载,不安装 (Download Only)
|
||||||
@@ -83,7 +105,15 @@ echo "✅ 依赖下载/缓存完成。"
|
|||||||
# 再次运行 install,指向同一个缓存目录。
|
# 再次运行 install,指向同一个缓存目录。
|
||||||
# apt 会检测到目录里已经有对应的 .deb 文件(且哈希值匹配),就会直接使用缓存,跳过下载。
|
# apt 会检测到目录里已经有对应的 .deb 文件(且哈希值匹配),就会直接使用缓存,跳过下载。
|
||||||
echo "🚀 开始安装..."
|
echo "🚀 开始安装..."
|
||||||
$SUDO env DEBIAN_FRONTEND=noninteractive apt-get install --no-install-recommends -y \
|
|
||||||
|
# 尝试使用 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" \
|
-o Dir::Cache::archives="$CACHE_DIR" \
|
||||||
$PACKAGES >> "$LOG_FILE" 2>&1
|
$PACKAGES >> "$LOG_FILE" 2>&1
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user