#!/usr/bin/env bash # setup.brundia.com — avvio breve del bootstrap setup-server-linux, release congelata v0.7.0. # # curl -fsSL https://setup.brundia.com | bash # # Da eseguire nel terminale SSH dell'amministratore di un server NUOVO (utente normale nel gruppo sudo, # non root, senza sudo davanti). Equivale al comando ufficiale della guida 0.7.0: # # curl -fsSL https://raw.githubusercontent.com/filippobrundia/setup-server-linux/v0.7.0/install.sh \ # | bash -s -- --configura --profilo docker # # con due controlli in più: l'impronta di install.sh è fissata qui sotto e install.sh riceve --sha256 con # l'impronta pubblicata dell'archivio della release. Il software arriva solo da GitHub, tag v0.7.0: questo # file non segue nuove release. Conferme, sudo, firewall, riavvio e prerequisiti restano quelli di install.sh. # # Solo controllo (scarica e verifica install.sh, non avvia nulla): # curl -fsSL https://setup.brundia.com | bash -s -- --verifica # # Tutto il codice è dentro main(), chiamata sull'ultima riga: se il download si interrompe a metà, bash non # esegue nessun comando. main() { set -euo pipefail local TAG=v0.7.0 local URL=https://raw.githubusercontent.com/filippobrundia/setup-server-linux/$TAG/install.sh local INSTALL_SHA256=3ad136586e4c269101ec3cbc091c7478a6e5357e70d817097f5e0ee5e5608a63 local ARCHIVE_SHA256=bbafce791853b7b6b71ca3e8b087d9080b5094058797bff6eeb86ea074c38a8d local PROTO='=https' local VERIFICA=0 TMP GOT c stop() { echo "STOP (setup.brundia.com): $*" >&2; exit 3; } case $# in 0) ;; 1) [ "$1" = --verifica ] || stop "opzione non prevista: $1 (per altre scelte usare il comando GitHub completo della guida 0.7.0)" VERIFICA=1 ;; *) stop "troppe opzioni (unica ammessa: --verifica)" ;; esac [ "$(id -u)" != 0 ] || stop "eseguire come utente amministratore normale, non come root e senza sudo davanti" for c in curl sha256sum mktemp; do command -v "$c" >/dev/null || stop "manca il comando $c"; done if [ "$VERIFICA" = 0 ] && ! { : /dev/null; then stop "serve un terminale interattivo (/dev/tty): avviare da una sessione SSH con terminale, non da cron o da 'ssh host comando' senza -t" fi TMP=$(mktemp -d) trap "rm -rf '$TMP'" EXIT # espansa subito: TMP è locale e all'uscita non esiste più echo "== setup.brundia.com: scarico install.sh $TAG da GitHub" curl -fsSL --proto "$PROTO" -o "$TMP/install.sh" "$URL" || stop "download di install.sh non riuscito ($URL)" GOT=$(sha256sum "$TMP/install.sh" | cut -d' ' -f1) [ "$GOT" = "$INSTALL_SHA256" ] || stop "install.sh non corrisponde alla release $TAG (impronta $GOT): non avvio nulla" echo " install.sh verificato: $GOT" if [ "$VERIFICA" = 1 ]; then echo "VERIFICA OK: verrebbe eseguito install.sh --configura --profilo docker --sha256 $ARCHIVE_SHA256" return 0 fi echo "== avvio install.sh $TAG --configura --profilo docker (archivio atteso $ARCHIVE_SHA256)" bash "$TMP/install.sh" --configura --profilo docker --sha256 "$ARCHIVE_SHA256"