fix: docker-install skip installed packages and suspend needrestart

Avoid upgrading already-installed packages and restarting unrelated
services on Ubuntu 24.04, where apt-pinvoke -m u overrides NEEDRESTART_MODE.
This commit is contained in:
2026-08-29 14:37:36 +08:00
parent d6eee6465b
commit c95a1d70b1
+32 -7
View File
@@ -25,6 +25,29 @@ dotfile_help_requested "${1:-}" && dotfile_show_help
set -e
# Ubuntu 24.04 的 apt hook 给 needrestart 传 -m u(强制重启服务),会覆盖
# NEEDRESTART_MODE;只有 NEEDRESTART_SUSPEND 能让 hook 直接跳过。
apt_get() {
sudo env DEBIAN_FRONTEND=noninteractive NEEDRESTART_SUSPEND=1 apt-get "$@"
}
pkg_installed() {
[ "$(dpkg-query -W -f='${Status}' "$1" 2>/dev/null)" = "install ok installed" ]
}
# 只补缺,不升级已装包。已全部装好则不调用 apt,避免触发 needrestart。
apt_get_install() {
local missing=()
local pkg
for pkg in "$@"; do
pkg_installed "$pkg" || missing+=("$pkg")
done
if [ ${#missing[@]} -eq 0 ]; then
return 0
fi
apt_get install -y --no-install-recommends --no-upgrade "${missing[@]}"
}
detect_distro() {
if [ ! -f /etc/os-release ]; then
echo "[ERROR] 未检测到 /etc/os-release,无法识别系统"
@@ -51,14 +74,16 @@ detect_distro() {
}
remove_conflicting_packages() {
local pkg
for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do
sudo apt-get remove -y $pkg 2>/dev/null || true
pkg_installed "$pkg" || continue
apt_get remove -y "$pkg" || true
done
}
install_prerequisites() {
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg lsb-release
apt_get update
apt_get_install ca-certificates curl gnupg lsb-release
}
add_user_to_docker_group() {
@@ -96,8 +121,8 @@ install_docker_cn() {
echo "deb [arch=$(dpkg --print-architecture) signed-by=${keyring}] ${repo_base} \
${CODENAME} stable" | sudo tee /etc/apt/sources.list.d/docker.list >/dev/null
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
apt_get update
apt_get_install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
add_user_to_docker_group
}
@@ -115,8 +140,8 @@ install_docker_intl() {
${CODENAME} stable" |
sudo tee /etc/apt/sources.list.d/docker.list >/dev/null
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
apt_get update
apt_get_install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
add_user_to_docker_group
}