fix pve9
This commit is contained in:
parent
2203b24bdd
commit
5aedc07b3c
103
vm/docker-vm.sh
103
vm/docker-vm.sh
@ -456,6 +456,7 @@ else
|
|||||||
if [ "$INSTALL_MODE" = "direct" ]; then INSTALL_MODE="firstboot"; else INSTALL_MODE="direct"; fi
|
if [ "$INSTALL_MODE" = "direct" ]; then INSTALL_MODE="firstboot"; else INSTALL_MODE="direct"; fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# ---------- PVE8: Direct install into image via virt-customize ----------
|
||||||
# ---------- PVE8: Direct install into image via virt-customize ----------
|
# ---------- PVE8: Direct install into image via virt-customize ----------
|
||||||
if [ "$INSTALL_MODE" = "direct" ]; then
|
if [ "$INSTALL_MODE" = "direct" ]; then
|
||||||
msg_info "Injecting Docker directly into image (${CODENAME}, $(basename "$DOCKER_BASE"))"
|
msg_info "Injecting Docker directly into image (${CODENAME}, $(basename "$DOCKER_BASE"))"
|
||||||
@ -468,7 +469,14 @@ if [ "$INSTALL_MODE" = "direct" ]; then
|
|||||||
--run-command "apt-get update -qq" \
|
--run-command "apt-get update -qq" \
|
||||||
--run-command "apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin" \
|
--run-command "apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin" \
|
||||||
--run-command "systemctl enable docker" \
|
--run-command "systemctl enable docker" \
|
||||||
--run-command "systemctl enable qemu-guest-agent" >/dev/null
|
--run-command "systemctl enable qemu-guest-agent"
|
||||||
|
|
||||||
|
# ensure PATH in the guest for root (non-login shells, qm terminal, etc.)
|
||||||
|
--run-command "sed -i 's#^ENV_SUPATH.*#ENV_SUPATH PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin#' /etc/login.defs || true" \
|
||||||
|
--run-command "sed -i 's#^ENV_PATH.*#ENV_PATH PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin#' /etc/login.defs || true" \
|
||||||
|
--run-command "printf 'PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\n' >/etc/environment" \
|
||||||
|
--run-command "grep -q 'export PATH=' /root/.bashrc || echo 'export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin' >> /root/.bashrc" \
|
||||||
|
>/dev/null
|
||||||
msg_ok "Docker injected into image"
|
msg_ok "Docker injected into image"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -476,46 +484,97 @@ fi
|
|||||||
if [ "$INSTALL_MODE" = "firstboot" ]; then
|
if [ "$INSTALL_MODE" = "firstboot" ]; then
|
||||||
msg_info "Preparing first-boot Docker installer (${CODENAME}, $(basename "$DOCKER_BASE"))"
|
msg_info "Preparing first-boot Docker installer (${CODENAME}, $(basename "$DOCKER_BASE"))"
|
||||||
mkdir -p firstboot
|
mkdir -p firstboot
|
||||||
cat >firstboot/firstboot-docker.sh <<EOSH
|
cat >firstboot/firstboot-docker.sh <<'EOSH'
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
set -e
|
set -euxo pipefail
|
||||||
|
|
||||||
LOG=/var/log/firstboot-docker.log
|
LOG=/var/log/firstboot-docker.log
|
||||||
exec >>"\$LOG" 2>&1
|
exec >>"$LOG" 2>&1
|
||||||
|
|
||||||
export DEBIAN_FRONTEND=noninteractive
|
mark_done() {
|
||||||
apt-get update -qq
|
mkdir -p /var/lib/firstboot
|
||||||
apt-get install -y ca-certificates curl gnupg qemu-guest-agent apt-transport-https software-properties-common lsb-release
|
date > /var/lib/firstboot/docker.done
|
||||||
|
}
|
||||||
|
|
||||||
install -m 0755 -d /etc/apt/keyrings
|
retry() {
|
||||||
curl -fsSL ${DOCKER_BASE}/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
|
local tries=$1; shift
|
||||||
chmod a+r /etc/apt/keyrings/docker.gpg
|
local n=0
|
||||||
echo "deb [arch=\$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] ${DOCKER_BASE} ${CODENAME} stable" >/etc/apt/sources.list.d/docker.list
|
until "$@"; do
|
||||||
|
n=$((n+1))
|
||||||
|
if [ "$n" -ge "$tries" ]; then return 1; fi
|
||||||
|
sleep 5
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
apt-get update -qq
|
wait_network() {
|
||||||
apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
|
# DNS + HTTPS reachability
|
||||||
sed -i 's#^ENV_SUPATH.*#ENV_SUPATH PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin#' /etc/login.defs || true
|
retry 30 getent hosts deb.debian.org || retry 30 getent hosts archive.ubuntu.com
|
||||||
sed -i 's#^ENV_PATH.*#ENV_PATH PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin#' /etc/login.defs || true
|
retry 30 bash -c 'curl -fsS https://download.docker.com/ >/dev/null'
|
||||||
printf 'PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\n' >/etc/environment
|
}
|
||||||
grep -q 'export PATH=' /root/.bashrc || echo 'export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin' >> /root/.bashrc
|
|
||||||
|
|
||||||
systemctl enable --now qemu-guest-agent || true
|
fix_path() {
|
||||||
systemctl enable --now docker
|
sed -i 's#^ENV_SUPATH.*#ENV_SUPATH PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin#' /etc/login.defs || true
|
||||||
|
sed -i 's#^ENV_PATH.*#ENV_PATH PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin#' /etc/login.defs || true
|
||||||
|
printf 'PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\n' >/etc/environment
|
||||||
|
grep -q 'export PATH=' /root/.bashrc || echo 'export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin' >> /root/.bashrc
|
||||||
|
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
|
||||||
|
}
|
||||||
|
|
||||||
mkdir -p /var/lib/firstboot
|
main() {
|
||||||
date > /var/lib/firstboot/docker.done
|
export DEBIAN_FRONTEND=noninteractive
|
||||||
|
|
||||||
|
wait_network
|
||||||
|
|
||||||
|
# Distro erkennen -> Codename + Docker-Repo
|
||||||
|
. /etc/os-release
|
||||||
|
CODENAME="${VERSION_CODENAME:-bookworm}"
|
||||||
|
case "$ID" in
|
||||||
|
ubuntu) DOCKER_BASE="https://download.docker.com/linux/ubuntu" ;;
|
||||||
|
debian|*) DOCKER_BASE="https://download.docker.com/linux/debian" ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Basispakete mit Retries
|
||||||
|
retry 10 apt-get update -qq
|
||||||
|
retry 5 apt-get install -y ca-certificates curl gnupg qemu-guest-agent apt-transport-https lsb-release software-properties-common
|
||||||
|
|
||||||
|
# Docker GPG + Repo
|
||||||
|
install -m 0755 -d /etc/apt/keyrings
|
||||||
|
curl -fsSL "${DOCKER_BASE}/gpg" | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
|
||||||
|
chmod a+r /etc/apt/keyrings/docker.gpg
|
||||||
|
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] ${DOCKER_BASE} ${CODENAME} stable" > /etc/apt/sources.list.d/docker.list
|
||||||
|
|
||||||
|
retry 10 apt-get update -qq
|
||||||
|
retry 5 apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
|
||||||
|
|
||||||
|
systemctl enable --now qemu-guest-agent || true
|
||||||
|
systemctl enable --now docker
|
||||||
|
|
||||||
|
# PATH sicherstellen
|
||||||
|
fix_path
|
||||||
|
|
||||||
|
# Erfolg validieren
|
||||||
|
command -v docker >/dev/null
|
||||||
|
systemctl is-active --quiet docker
|
||||||
|
|
||||||
|
mark_done
|
||||||
|
}
|
||||||
|
main
|
||||||
EOSH
|
EOSH
|
||||||
chmod +x firstboot/firstboot-docker.sh
|
chmod +x firstboot/firstboot-docker.sh
|
||||||
|
|
||||||
cat >firstboot/firstboot-docker.service <<'EOUNIT'
|
cat >firstboot/firstboot-docker.service <<'EOUNIT'
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=First boot: install Docker & QGA
|
Description=First boot: install Docker & QGA
|
||||||
After=network-online.target
|
After=network-online.target cloud-init.service
|
||||||
Wants=network-online.target
|
Wants=network-online.target
|
||||||
ConditionPathExists=!/var/lib/firstboot/docker.done
|
ConditionPathExists=!/var/lib/firstboot/docker.done
|
||||||
|
StartLimitIntervalSec=0
|
||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
Type=oneshot
|
Type=oneshot
|
||||||
ExecStart=/usr/local/sbin/firstboot-docker.sh
|
ExecStart=/usr/local/sbin/firstboot-docker.sh
|
||||||
|
Restart=on-failure
|
||||||
|
RestartSec=10s
|
||||||
RemainAfterExit=no
|
RemainAfterExit=no
|
||||||
|
|
||||||
[Install]
|
[Install]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user