Příkaz update a konzole bez hesla
binárka / linux (pull_request) Successful in 10s
testy / pytest (3.11) (pull_request) Successful in 1s
testy / pytest (3.12) (pull_request) Successful in 1s
testy / pytest (3.13) (pull_request) Successful in 1s
testy / pytest (3.14) (pull_request) Successful in 1s
binárka / linux (pull_request) Successful in 10s
testy / pytest (3.11) (pull_request) Successful in 1s
testy / pytest (3.12) (pull_request) Successful in 1s
testy / pytest (3.13) (pull_request) Successful in 1s
testy / pytest (3.14) (pull_request) Successful in 1s
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.
This commit is contained in:
1 parent
fc2df8d86e
commit
01d85594b2
2 files changed
+69
-2
No files matched your search
@@ -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
@@ -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"
|
||||
|
||||
Reference in new issue
Block a user