Příkaz update a konzole bez hesla #14

Merged
david-spacil merged 1 commits from agents/claude/update-v-kontejneru into main 2026-08-22 23:51:56 +02:00
2 changed files with 69 additions and 2 deletions

No files matched your search

+19 -1
View File
@@ -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 <ctid>`.
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.
+50 -1
View File
@@ -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 <<UPDATE
#!/usr/bin/env bash
# Aktualizace počitadla na poslední vydání. Stačí napsat: update
set -euo pipefail
# Nejdřív zkusíme obnovit i samotný instalátor, kdyby se mezitím zlepšil.
# Bez sítě nebo při změněné adrese se použije ten uložený.
NOVY=\$(mktemp)
if curl -fsSL "$GITEA/$REPO/raw/branch/main/deploy/pve-kostky.sh" -o "\$NOVY" 2>/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"