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` |
|
| `PORT` | `8000` |
|
||||||
| `UNPRIVILEGED`, `OSVERSION` | `1`, `13` |
|
| `UNPRIVILEGED`, `OSVERSION` | `1`, `13` |
|
||||||
| `NESTING` | `1` — systemd v Debianu 13 ho potřebuje |
|
| `NESTING` | `1` — systemd v Debianu 13 ho potřebuje |
|
||||||
|
| `AUTOLOGIN` | `1` — konzole ve webu Proxmoxu bez hesla |
|
||||||
| `VERSION` | poslední vydání |
|
| `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
|
```bash
|
||||||
CTID=123 MODE=update bash -c "$(curl -fsSL ...)"
|
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),
|
Podoba je odkoukaná od [community-scripts.org](https://community-scripts.org),
|
||||||
ale nic z jejich frameworku se nestahuje — jejich `build.func` si instalační
|
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.
|
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}"
|
UNPRIVILEGED="${UNPRIVILEGED:-1}"
|
||||||
OSVERSION="${OSVERSION:-13}"
|
OSVERSION="${OSVERSION:-13}"
|
||||||
NESTING="${NESTING:-1}"
|
NESTING="${NESTING:-1}"
|
||||||
|
AUTOLOGIN="${AUTOLOGIN:-1}" # konzole ve webu Proxmoxu bez hesla
|
||||||
VERSION="${VERSION:-}" # prázdné = poslední vydání
|
VERSION="${VERSION:-}" # prázdné = poslední vydání
|
||||||
|
|
||||||
# --- výpisy ------------------------------------------------------------------
|
# --- výpisy ------------------------------------------------------------------
|
||||||
@@ -173,6 +174,53 @@ systemctl daemon-reload
|
|||||||
systemctl enable --quiet --now kostky
|
systemctl enable --quiet --now kostky
|
||||||
ok "Služba běží"
|
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"
|
msg "Čekám, až začne odpovídat"
|
||||||
for _ in $(seq 30); do
|
for _ in $(seq 30); do
|
||||||
curl -fsS -o /dev/null "http://127.0.0.1:$PORT/" 2>/dev/null && break
|
curl -fsS -o /dev/null "http://127.0.0.1:$PORT/" 2>/dev/null && break
|
||||||
@@ -199,7 +247,7 @@ install_into() {
|
|||||||
rm -f "$tmp"
|
rm -f "$tmp"
|
||||||
|
|
||||||
pct exec "$ctid" -- env PORT="$PORT" GITEA="$GITEA" REPO="$REPO" \
|
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() {
|
address_of() {
|
||||||
@@ -218,6 +266,7 @@ hotovo() {
|
|||||||
echo -e " Zadávání z telefonu: \e[1;32mhttp://${ip}:${PORT}/\e[0m"
|
echo -e " Zadávání z telefonu: \e[1;32mhttp://${ip}:${PORT}/\e[0m"
|
||||||
echo
|
echo
|
||||||
echo -e " \e[2mDatabáze: /var/lib/kostky/dice.db (uvnitř kontejneru)"
|
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 " Log: pct exec $ctid -- journalctl -u kostky -f"
|
||||||
echo -e " Konzole: pct enter $ctid"
|
echo -e " Konzole: pct enter $ctid"
|
||||||
echo -e " Zrušit: pct stop $ctid && pct destroy $ctid\e[0m"
|
echo -e " Zrušit: pct stop $ctid && pct destroy $ctid\e[0m"
|
||||||
|
|||||||
Reference in new issue
Block a user