From 01d85594b2ccc78e00b1c6f966d466bf75ff917a Mon Sep 17 00:00:00 2001 From: gitea-actions Date: Sat, 22 Aug 2026 23:19:49 +0200 Subject: [PATCH] =?UTF-8?q?P=C5=99=C3=ADkaz=20update=20a=20konzole=20bez?= =?UTF-8?q?=20hesla?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Dvě věci, které se u community-scripts čekají a chyběly. V kontejneru je nově /usr/bin/update, takže aktualizace je jedno slovo. Sám si přitom obnoví i instalátor z main, aby nejel napořád na té verzi skriptu, se kterou se instalovalo. Cesta z uzlu (MODE=update) zůstává. A konzole: kontejner schválně nemá root heslo, jenže pak se do konzole ve webu Proxmoxu nedalo dostat — uživatel žádné přihlašovací údaje nezná a ani nemá odkud. Autologin přes container-getty@1 to řeší přesně tak, jak to dělají community-scripts. Nová práva to nikomu nedává, kdo má web Proxmoxu, má root na uzlu tak jako tak. Vypíná se AUTOLOGIN=0. --- README.md | 20 ++++++++++++++++- deploy/pve-kostky.sh | 51 +++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 69 insertions(+), 2 deletions(-) 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" -- 2.47.3