Primo giorno: script che preparano il PC di chi arriva

configura.sh (token Gitea, git, chiave SSH, nomi dei server), verifica.sh
(verde/rosso per ogni accesso), progetti.sh (scarica i repository visibili),
e un CLAUDE.md che guida la persona senza chiederle mai un segreto in chat.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Fabio
2026-09-29 17:17:15 +02:00
co-authored by Claude Opus 5.5
commit 5b028688ba
6 changed files with 454 additions and 0 deletions
Executable
+124
View File
@@ -0,0 +1,124 @@
#!/bin/bash
#
# PREPARA IL PC: token Gitea, git, chiave SSH, nomi dei server.
#
# ./configura.sh
#
# Si lancia nel proprio terminale (chiede il token Gitea con l'input
# nascosto). Si puo' rilanciare: quello che e' gia' a posto non viene toccato.
# Non crea accessi: quelli li crea un amministratore, qui si usano.
set -u
cd "$(dirname "$0")" || exit 1
. ./comune.sh
# --------------------------------------------------------------------------
titolo "1. AWS"
# --------------------------------------------------------------------------
if ! c_e aws ; then
male "AWS CLI non installata: installala e rilancia questo script."
elif IDENTITA="$(aws sts get-caller-identity --query Arn --output text 2> /dev/null)" ; then
ok "accesso AWS: ${IDENTITA##*/}"
else
attento "AWS non ancora configurato. Nel terminale:"
echo " aws configure (regione: $AWS_REGIONE)"
echo " con la chiave che crei dalla console AWS (Security credentials)."
fi
# --------------------------------------------------------------------------
titolo "2. Gitea"
# --------------------------------------------------------------------------
UTENTE="$(utente_gitea)"
if [ -n "$UTENTE" ] ; then
ok "token Gitea gia' salvato (utente $UTENTE)"
else
echo " Incolla il token Gitea (Impostazioni → Applicazioni → Genera token)."
echo " Non si vede mentre lo incolli, ed e' normale."
read -r -s -p " Token: " TOKEN ; echo
TOKEN="$(printf '%s' "$TOKEN" | tr -d '[:space:]')"
mkdir -p "$(dirname "$TOKEN_GITEA_FILE")"
chmod 700 "$(dirname "$TOKEN_GITEA_FILE")"
( umask 077 ; printf '%s\n' "$TOKEN" > "$TOKEN_GITEA_FILE" )
UTENTE="$(utente_gitea)"
if [ -n "$UTENTE" ] ; then
ok "token valido, salvato in $TOKEN_GITEA_FILE (utente $UTENTE)"
else
rm -f "$TOKEN_GITEA_FILE"
male "Gitea non accetta questo token: controlla di averlo copiato intero, o generane un altro."
fi
fi
# git: chi sei, e come si ricorda le credenziali. Il token vale anche come
# password per git: lo si scrive una volta in ~/.git-credentials.
if [ -n "$UTENTE" ] ; then
[ -n "$(git config --global user.name)" ] || git config --global user.name "$UTENTE"
if [ -z "$(git config --global user.email)" ] ; then
read -r -p " La tua email di lavoro (per i commit): " EMAIL
[ -n "$EMAIL" ] && git config --global user.email "$EMAIL"
fi
[ -n "$(git config --global credential.helper)" ] || git config --global credential.helper store
CREDENZIALI="$HOME/.git-credentials"
if ! grep -q "@$GITEA_HOST" "$CREDENZIALI" 2> /dev/null ; then
( umask 077 ; printf 'https://%s:%s@%s\n' "$UTENTE" "$(token_gitea)" "$GITEA_HOST" >> "$CREDENZIALI" )
fi
ok "git configurato ($(git config --global user.name) <$(git config --global user.email)>)"
fi
# --------------------------------------------------------------------------
titolo "3. Chiave SSH"
# --------------------------------------------------------------------------
if [ -f "$CHIAVE_SSH" ] ; then
ok "chiave gia' presente: $CHIAVE_SSH"
else
mkdir -p "$HOME/.ssh" && chmod 700 "$HOME/.ssh"
COMMENTO="${UTENTE:-$(whoami)}@oto"
ssh-keygen -q -t ed25519 -f "$CHIAVE_SSH" -C "$COMMENTO" -N "" \
&& ok "chiave creata: $CHIAVE_SSH"
fi
if [ -f "$CHIAVE_SSH.pub" ] ; then
echo
echo " Manda all'amministratore QUESTA riga (e' la parte pubblica, si puo' mandare in chat):"
echo
echo " $(cat "$CHIAVE_SSH.pub")"
echo
echo " Il file $CHIAVE_SSH, senza .pub, non esce mai da questo PC."
fi
# --------------------------------------------------------------------------
titolo "4. Nomi dei server in ~/.ssh/config"
# --------------------------------------------------------------------------
# Un blocco fra due segni, riscritto intero a ogni giro: cosi' quando cambia
# un server basta rilanciare. Un nome gia' definito fuori dal blocco non si
# tocca (e' una configurazione tua).
CONFIG="$HOME/.ssh/config"
touch "$CONFIG" && chmod 600 "$CONFIG"
INIZIO="# >>> OTO (scritto da _OTO_IT_onboard/configura.sh) >>>"
FINE_BLOCCO="# <<< OTO <<<"
# Confronto esatto, non una regex: il segno contiene "/" e "(".
FUORI="$(awk -v i="$INIZIO" -v f="$FINE_BLOCCO" '$0 == i {dentro=1; next} $0 == f {dentro=0; next} !dentro' "$CONFIG")"
BLOCCO="$INIZIO"
for VOCE in "$STAGING_NOME $STAGING_HOST" "$PRODUZIONE_NOME $PRODUZIONE_HOST" ; do
set -- $VOCE
if printf '%s\n' "$FUORI" | grep -qE "^Host[[:space:]]+$1([[:space:]]|\$)" ; then
attento "$1 e' gia' definito in $CONFIG: lo lascio com'e'"
continue
fi
BLOCCO="$BLOCCO
Host $1
HostName $2
User $UTENTE_SERVER
IdentitiesOnly yes
IdentityFile $CHIAVE_SSH
"
done
BLOCCO="$BLOCCO$FINE_BLOCCO"
{ printf '%s\n' "$FUORI" | sed -e :a -e '/^\n*$/{$d;N;ba' -e '}' ; echo ; printf '%s\n' "$BLOCCO" ; } > "$CONFIG.nuovo" \
&& mv "$CONFIG.nuovo" "$CONFIG" && chmod 600 "$CONFIG"
ok "ssh $STAGING_NOME e ssh $PRODUZIONE_NOME: configurati"
# --------------------------------------------------------------------------
titolo "Fatto"
# --------------------------------------------------------------------------
echo " Ora: importa il file della VPN, poi lancia ./verifica.sh"