diff --git a/README.md b/README.md index 77044e5..03d9048 100644 --- a/README.md +++ b/README.md @@ -150,14 +150,32 @@ MEMORY=1024 STORAGE=local-zfs PORT=8080 bash -c "$(curl -fsSL ...)" | `PORT` | `8000` | | `UNPRIVILEGED`, `OSVERSION` | `1`, `13` | | `NESTING` | `1` — systemd v Debianu 13 ho potřebuje | +| `AUTOLOGIN` | `1` — konzole ve webu Proxmoxu bez hesla | | `VERSION` | poslední vydání | -Aktualizace na novější vydání je ten samý příkaz s číslem kontejneru: +Aktualizace na novější vydání se dá spustit dvěma způsoby. Buď zevnitř +kontejneru, kde na to stačí jedno slovo: + +```bash +update +``` + +Nebo z uzlu Proxmoxu tím samým příkazem s číslem kontejneru: ```bash CTID=123 MODE=update bash -c "$(curl -fsSL ...)" ``` +Obojí vymění binárku za poslední vydání a službu restartuje; databáze zůstává. +Příkaz `update` si přitom obnoví i sám sebe — instalátor bere z větve `main`, +takže jede na nejnovější verzi skriptu, ne na té, se kterou se instalovalo. + +Do konzole kontejneru se dostaneš přímo z webu Proxmoxu, **žádné jméno ani +heslo se nezadává** — kontejner root heslo nemá a konzole se přihlašuje sama. +Nová práva to nikomu nedává: kdo se dostane do webu Proxmoxu, má root na uzlu +tak jako tak. Komu se to nezdá, vypne to přes `AUTOLOGIN=0` a do kontejneru +pak leze přes `pct enter `. + Podoba je odkoukaná od [community-scripts.org](https://community-scripts.org), ale nic z jejich frameworku se nestahuje — jejich `build.func` si instalační skript hledá natvrdo ve vlastním repozitáři, takže mimo něj nefunguje. diff --git a/deploy/pve-kostky.sh b/deploy/pve-kostky.sh index d7ecffb..c374108 100755 --- a/deploy/pve-kostky.sh +++ b/deploy/pve-kostky.sh @@ -37,6 +37,7 @@ PORT="${PORT:-8000}" UNPRIVILEGED="${UNPRIVILEGED:-1}" OSVERSION="${OSVERSION:-13}" NESTING="${NESTING:-1}" +AUTOLOGIN="${AUTOLOGIN:-1}" # konzole ve webu Proxmoxu bez hesla VERSION="${VERSION:-}" # prázdné = poslední vydání # --- výpisy ------------------------------------------------------------------ @@ -173,6 +174,53 @@ systemctl daemon-reload systemctl enable --quiet --now kostky ok "Služba běží" +# --- konzole v rozhraní Proxmoxu -------------------------------------------- + +if [ "${AUTOLOGIN:-1}" = "1" ]; then + msg "Nastavuji konzoli" + # Kontejner nemá root heslo, takže by se do konzole ve webu Proxmoxu + # nedalo dostat. Autologin to řeší stejně, jako to dělají community-scripts. + # Nová práva to nikomu nedává — kdo má web Proxmoxu, má root na uzlu tak + # jako tak. + mkdir -p /etc/systemd/system/container-getty@1.service.d + cat > /etc/systemd/system/container-getty@1.service.d/override.conf <<'GETTY' +[Service] +ExecStart= +ExecStart=-/sbin/agetty --autologin root --noclear --keep-baud tty%I 115200,38400,9600 $TERM +GETTY + systemctl daemon-reload + systemctl restart container-getty@1.service 2>/dev/null || true + ok "Konzole se přihlásí sama" +fi + +# --- příkaz update ---------------------------------------------------------- + +# Instalátor si necháme, ať je z čeho aktualizovat. Když se skript pouští +# rourou, soubor neexistuje a zůstane ten z minula. +if [ -f "$0" ]; then + install -m 755 "$0" "$HOME_DIR/install.sh" +fi + +cat > /usr/bin/update </dev/null \\ + && bash "\$NOVY" instalator > "\$NOVY.in" 2>/dev/null \\ + && bash -n "\$NOVY.in" 2>/dev/null; then + install -m 755 "\$NOVY.in" "$HOME_DIR/install.sh" +fi +rm -f "\$NOVY" "\$NOVY.in" + +exec env PORT="$PORT" GITEA="$GITEA" REPO="$REPO" bash "$HOME_DIR/install.sh" +UPDATE +chmod 755 /usr/bin/update +ok "Aktualizovat půjde příkazem: update" + msg "Čekám, až začne odpovídat" for _ in $(seq 30); do curl -fsS -o /dev/null "http://127.0.0.1:$PORT/" 2>/dev/null && break @@ -199,7 +247,7 @@ install_into() { rm -f "$tmp" pct exec "$ctid" -- env PORT="$PORT" GITEA="$GITEA" REPO="$REPO" \ - VERSION="$VERSION" bash /root/kostky-install.sh + VERSION="$VERSION" AUTOLOGIN="$AUTOLOGIN" bash /root/kostky-install.sh } address_of() { @@ -218,6 +266,7 @@ hotovo() { echo -e " Zadávání z telefonu: \e[1;32mhttp://${ip}:${PORT}/\e[0m" echo echo -e " \e[2mDatabáze: /var/lib/kostky/dice.db (uvnitř kontejneru)" + echo -e " Aktualizace: v konzoli kontejneru napiš update" echo -e " Log: pct exec $ctid -- journalctl -u kostky -f" echo -e " Konzole: pct enter $ctid" echo -e " Zrušit: pct stop $ctid && pct destroy $ctid\e[0m"