#!/bin/bash # Gitea theme manager — installa o ripristina homepage + favicon custom. # DA ESEGUIRE COME ROOT SUL VPS (o con sudo). # # Uso: # bash gitea_theme.sh install # applica la homepage moderna + favicon # bash gitea_theme.sh rollback # torna allo stato iniziale # bash gitea_theme.sh # come "install" set -euo pipefail CUSTOM_DIR="${CUSTOM_DIR:-/var/lib/gitea/custom}" SRC_DIR="$(cd "$(dirname "$0")" && pwd)/custom" STATE_FILE="$CUSTOM_DIR/.gitea-theme-state" MODE="${1:-install}" case "$MODE" in install|rollback) : ;; *) echo "Uso: $0 [install|rollback]"; exit 2 ;; esac if [ "$(id -u)" != "0" ]; then echo "ERRORE: devi eseguire questo script come root (o sudo)." exit 1 fi # ---------------------------------------------------------------- verifica echo "==> Modalità: $MODE" echo "==> Custom dir: $CUSTOM_DIR" # ---------------------------------------------------------------- install install_theme() { STAMP="$(date +%Y%m%d-%H%M%S)" BACKUP_DIR="${CUSTOM_DIR}/.backup-${STAMP}" if [ ! -d "$SRC_DIR" ]; then echo "ERRORE: cartella sorgente '$SRC_DIR' non trovata (script in cartella sbagliata?)." exit 1 fi # 1) Backup delle eventuali personalizzazioni esistenti HAD_PREV=no if [ -e "$CUSTOM_DIR/templates/home.tmpl" ] || [ -e "$CUSTOM_DIR/public/assets/img" ]; then HAD_PREV=yes mkdir -p "$BACKUP_DIR" for p in templates/home.tmpl public/assets/img; do if [ -e "$CUSTOM_DIR/$p" ]; then mkdir -p "$BACKUP_DIR/$(dirname "$p")" cp -a "$CUSTOM_DIR/$p" "$BACKUP_DIR/$p" echo "==> Backup salvato: $BACKUP_DIR/$p" fi done else echo "==> Nessuna personalizzazione precedente, niente da salvare." fi # 2) Copia dei nuovi file mkdir -p "$CUSTOM_DIR/templates" "$CUSTOM_DIR/public/assets/img" cp "$SRC_DIR/templates/home.tmpl" "$CUSTOM_DIR/templates/home.tmpl" cp "$SRC_DIR/public/assets/img/"* "$CUSTOM_DIR/public/assets/img/" echo "==> File copiati:" ls -l "$CUSTOM_DIR/templates/home.tmpl" ls -l "$CUSTOM_DIR/public/assets/img/" # 3) Permessi corretti (il processo gitea gira come utente gitea) chown -R gitea:gitea "$CUSTOM_DIR" echo "==> Permessi impostati (gitea:gitea)." # 4) Stato per il rollback { echo "installed_at=$STAMP" echo "backup_dir=$BACKUP_DIR" echo "had_custom=$HAD_PREV" } > "$STATE_FILE" echo "==> Stato rollback salvato in $STATE_FILE" } # ---------------------------------------------------------------- rollback rollback_theme() { # 1) Leggi lo stato di installazione (se esiste) BACKUP_DIR="" HAD_PREV=no if [ -f "$STATE_FILE" ]; then source "$STATE_FILE" 2>/dev/null || true echo "==> Stato trovato: installato $installed_at, backup=${backup_dir:-nessuno}, precedente=$had_custom" fi # 2) Rimuovi i file del tema rm -f "$CUSTOM_DIR/templates/home.tmpl" rm -rf "$CUSTOM_DIR/public/assets/img" echo "==> File del tema rimossi (home.tmpl e assets/img)." # 3) Ripristina l'eventuale personalizzazione precedente dal backup if [ "$HAD_PREV" = "yes" ] && [ -n "${BACKUP_DIR:-}" ] && [ -d "$BACKUP_DIR" ]; then echo "==> Ripristino personalizzazione precedente da $BACKUP_DIR" if [ -f "$BACKUP_DIR/templates/home.tmpl" ]; then mkdir -p "$CUSTOM_DIR/templates" cp -a "$BACKUP_DIR/templates/home.tmpl" "$CUSTOM_DIR/templates/home.tmpl" fi if [ -d "$BACKUP_DIR/public/assets/img" ]; then mkdir -p "$CUSTOM_DIR/public/assets/img" cp -a "$BACKUP_DIR/public/assets/img/." "$CUSTOM_DIR/public/assets/img/" fi fi # 4) Rimuovi lo stato e le cartelle eventualmente vuote rm -f "$STATE_FILE" rmdir "$CUSTOM_DIR/public/assets/img" "$CUSTOM_DIR/public/assets" "$CUSTOM_DIR/public" 2>/dev/null || true rmdir "$CUSTOM_DIR/templates" 2>/dev/null || true echo "==> Stato rollback pulito." # 5) Permessi chown -R gitea:gitea "$CUSTOM_DIR" 2>/dev/null || true } # ---------------------------------------------------------------- esegui if [ "$MODE" = "install" ]; then install_theme else rollback_theme fi # ---------------------------------------------------------------- restart+verify systemctl restart gitea sleep 6 echo "==> Stato servizio: $(systemctl is-active gitea)" if [ "$MODE" = "install" ]; then echo "==> Verifica asset (favicon/logo):" curl -sk -o /dev/null -w " /assets/img/favicon.svg -> %{http_code}\n" https://127.0.0.1/assets/img/favicon.svg 2>/dev/null || true curl -sk -o /dev/null -w " /assets/img/logo.svg -> %{http_code}\n" https://127.0.0.1/assets/img/logo.svg 2>/dev/null || true fi echo "" echo "FATTO ($MODE). Ricarica https://git.zomas.net (Ctrl+Shift+R per bypassare la cache)."