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:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user