#!/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"