alterado para aceitar comitts com e sem ssl / nome do comitter auto preenchido

This commit is contained in:
João Pedro Toledo Goncalves 2025-09-15 17:31:48 +00:00
parent 674b1da20b
commit 9376d24474
1 changed files with 31 additions and 29 deletions

View File

@ -1,11 +1,11 @@
#!/bin/bash #!/bin/bash
# ============================================================================== # ==============================================================================
# INSTALADOR DO SERVIÇO PROXY-SINC (VERSÃO COM AUTENTICAÇÃO) # INSTALADOR DO SERVIÇO PROXY-SINC (VERSÃO AVANÇADA)
# #
# Autor: A sua IA Assistente & Equipa de Infraestrutura iT Guys # Autor: A sua IA Assistente & Equipa de Infraestrutura iT Guys
# Descrição: Este script instala e configura o serviço de versionamento # Descrição: Instala e configura o serviço de versionamento automático, com
# automático, usando um Token de Acesso do Gitea para autenticação. # autenticação por Token, gestão de SSL e identidade de commit automática.
# ============================================================================== # ==============================================================================
set -e set -e
@ -15,8 +15,6 @@ REPO_DIR="/opt/config_repo"
SCRIPT_INSTALL_DIR="/usr/local/sbin" SCRIPT_INSTALL_DIR="/usr/local/sbin"
SYSTEMD_DIR="/etc/systemd/system" SYSTEMD_DIR="/etc/systemd/system"
MAN_DIR="/usr/share/man/man8" MAN_DIR="/usr/share/man/man8"
CREDENTIALS_DIR="/etc/proxy-sinc"
CREDENTIALS_FILE="${CREDENTIALS_DIR}/credentials.conf"
# --- Funções de Ajuda --- # --- Funções de Ajuda ---
info() { echo -e "\e[32m[INFO]\e[0m $1"; } info() { echo -e "\e[32m[INFO]\e[0m $1"; }
@ -36,33 +34,35 @@ apt-get update > /dev/null
apt-get install -y git rsync > /dev/null apt-get install -y git rsync > /dev/null
info "Dependências satisfeitas." info "Dependências satisfeitas."
# --- 2. Configuração das Credenciais --- # --- 2. Configuração das Credenciais e do Repositório ---
info "Configurando a autenticação para o Gitea..." info "Configurando a autenticação para o Gitea..."
mkdir -p "$CREDENTIALS_DIR"
# Pede as informações ao utilizador # Pede as informações ao utilizador
read -p "Por favor, insira a URL HTTPS do seu repositório Gitea: " GIT_URL read -p "Por favor, insira a URL HTTP ou HTTPS do seu repositório Gitea: " GIT_URL
read -p "Por favor, insira o seu NOME DE UTILIZADOR do Gitea: " GITEA_USERNAME read -p "Por favor, insira o seu NOME DE UTILIZADOR do Gitea: " GITEA_USERNAME
read -s -p "Por favor, insira o seu TOKEN DE ACESSO do Gitea (ficará oculto): " GITEA_TOKEN read -s -p "Por favor, insira o seu TOKEN DE ACESSO do Gitea (ficará oculto): " GITEA_TOKEN
echo "" echo ""
read -p "O seu servidor Gitea usa um certificado SSL auto-assinado ou inválido? (s/n): " SSL_VERIFY_CHOICE
# Verifica se os campos foram preenchidos # Verifica se os campos foram preenchidos
if [ -z "$GIT_URL" ] || [ -z "$GITEA_USERNAME" ] || [ -z "$GITEA_TOKEN" ]; then if [ -z "$GIT_URL" ] || [ -z "$GITEA_USERNAME" ] || [ -z "$GITEA_TOKEN" ]; then
error "Todos os campos (URL, Utilizador, Token) são obrigatórios." error "Todos os campos (URL, Utilizador, Token) são obrigatórios."
fi fi
# Extrai o domínio da URL para construir a nova URL com autenticação # Extrai o protocolo e o caminho da URL para construir a nova URL com autenticação
# Ex: de 'https://git.itguys.com.br/joao.goncalves/repo.git' extrai 'git.itguys.com.br/joao.goncalves/repo.git' GIT_PROTOCOL=$(echo "$GIT_URL" | grep -o '^https\?://')
GIT_DOMAIN_PATH=$(echo "$GIT_URL" | sed -e 's|https://||') GIT_DOMAIN_PATH=$(echo "$GIT_URL" | sed -e 's|https\?://||')
AUTH_GIT_URL="https://${GITEA_USERNAME}:${GITEA_TOKEN}@${GIT_DOMAIN_PATH}" AUTH_GIT_URL="${GIT_PROTOCOL}${GITEA_USERNAME}:${GITEA_TOKEN}@${GIT_DOMAIN_PATH}"
# Pede os dados para os commits # Gera a identidade para os commits automaticamente
read -p "Insira o NOME para os commits (ex: Servidor Proxy Pathfinder): " GIT_COMMIT_NAME SERVER_HOSTNAME=$(hostname -f)
read -p "Insira o EMAIL para os commits (ex: proxy@itguys.com.br): " GIT_COMMIT_EMAIL GIT_COMMIT_NAME="$SERVER_HOSTNAME"
GIT_COMMIT_EMAIL="${SERVER_HOSTNAME}@itguys.com.br"
info "O autor dos commits será definido como: $GIT_COMMIT_NAME <$GIT_COMMIT_EMAIL>"
# --- 3. Clonar o Repositório e Configurar o Remoto --- # --- 3. Clonar o Repositório e Configurar ---
if [ -d "$REPO_DIR" ]; then if [ -d "$REPO_DIR" ]; then
warn "O diretório do repositório $REPO_DIR já existe. A verificar a configuração do remoto..." warn "O diretório do repositório $REPO_DIR já existe. A reconfigurar..."
cd "$REPO_DIR" cd "$REPO_DIR"
git remote set-url origin "$AUTH_GIT_URL" git remote set-url origin "$AUTH_GIT_URL"
info "URL do remoto 'origin' atualizada com as novas credenciais." info "URL do remoto 'origin' atualizada com as novas credenciais."
@ -74,17 +74,23 @@ else
git remote set-url origin "$AUTH_GIT_URL" git remote set-url origin "$AUTH_GIT_URL"
fi fi
# Configura o nome e email para os commits DENTRO deste repositório # Configura o nome, email e verificação SSL DENTRO deste repositório
git config user.name "$GIT_COMMIT_NAME" git config user.name "$GIT_COMMIT_NAME"
git config user.email "$GIT_COMMIT_EMAIL" git config user.email "$GIT_COMMIT_EMAIL"
if [[ "$SSL_VERIFY_CHOICE" == "s" || "$SSL_VERIFY_CHOICE" == "S" ]]; then
info "A desativar a verificação de certificado SSL para este repositório."
git config http.sslVerify false
else
git config http.sslVerify true
fi
info "Repositório configurado com sucesso." info "Repositório configurado com sucesso."
# --- 4. Instalar os Ficheiros do Serviço --- # --- 4. Instalar os Ficheiros do Serviço ---
info "A instalar os ficheiros do serviço..." info "A instalar os ficheiros do serviço..."
# (O conteúdo dos ficheiros .sh, .service, .timer e .8 são gerados aqui, como antes) # (O script commit_configs.sh é gerado aqui. Ele não precisa de alterações,
# ... [O script continua a gerar os outros ficheiros como na sua versão anterior] ... # pois o git irá ler a configuração local que acabámos de definir.)
# A única diferença é que o script commit_configs.sh agora não precisa de se preocupar com a autenticação.
cat > ./commit_configs.sh << 'EOF' cat > ./commit_configs.sh << 'EOF'
#!/bin/bash #!/bin/bash
@ -92,8 +98,7 @@ set -e
REPO_PATH="/opt/config_repo" REPO_PATH="/opt/config_repo"
NGINX_SOURCE="/etc/nginx" NGINX_SOURCE="/etc/nginx"
FAIL2BAN_SOURCE="/etc/fail2ban" FAIL2BAN_SOURCE="/etc/fail2ban"
# Adicionamos os ficheiros de automação e credenciais ao versionamento AUTOMATION_FILES_SOURCE=("/usr/local/sbin/commit_configs.sh" "/etc/systemd/system/proxy-sinc.service" "/etc/systemd/system/proxy-sinc.timer" "/usr/share/man/man8/proxy-sinc.8.gz")
AUTOMATION_FILES_SOURCE=("/usr/local/sbin/commit_configs.sh" "/etc/systemd/system/proxy-sinc.service" "/etc/systemd/system/proxy-sinc.timer" "/usr/share/man/man8/proxy-sinc.8.gz" "/etc/proxy-sinc/credentials.conf")
AUTOMATION_FILES_DEST="$REPO_PATH/_automation_scripts/" AUTOMATION_FILES_DEST="$REPO_PATH/_automation_scripts/"
echo "--- Iniciando a verificação de sincronização de configurações [$(date)] ---" echo "--- Iniciando a verificação de sincronização de configurações [$(date)] ---"
if [ "$EUID" -ne 0 ]; then echo "ERRO CRÍTICO: O script deve ser executado como root." >&2; exit 1; fi if [ "$EUID" -ne 0 ]; then echo "ERRO CRÍTICO: O script deve ser executado como root." >&2; exit 1; fi
@ -103,16 +108,13 @@ rsync -avz --delete --exclude='*.swp' --exclude='*.bak' --exclude='sites-enabled
rsync -avz --delete --exclude='*.swp' --exclude='*.bak' --exclude='/var/log/' --exclude='/var/run/' "$FAIL2BAN_SOURCE/" "$REPO_PATH/fail2ban/" rsync -avz --delete --exclude='*.swp' --exclude='*.bak' --exclude='/var/log/' --exclude='/var/run/' "$FAIL2BAN_SOURCE/" "$REPO_PATH/fail2ban/"
echo "[INFO] Sincronizando ficheiros de automação..." echo "[INFO] Sincronizando ficheiros de automação..."
mkdir -p "$AUTOMATION_FILES_DEST" mkdir -p "$AUTOMATION_FILES_DEST"
# Copia os ficheiros de automação, mas com uma verificação de existência
for file in "${AUTOMATION_FILES_SOURCE[@]}"; do for file in "${AUTOMATION_FILES_SOURCE[@]}"; do
if [ -f "$file" ]; then if [ -f "$file" ]; then
rsync -aR "$file" "$AUTOMATION_FILES_DEST" # -R preserva a estrutura de pastas rsync -aR "$file" "$AUTOMATION_FILES_DEST"
fi fi
done done
echo "[INFO] Sincronização de ficheiros concluída." echo "[INFO] Sincronização de ficheiros concluída."
cd "$REPO_PATH" cd "$REPO_PATH"
# Adiciona um ficheiro .gitignore para nunca guardar o token no repositório
echo "_automation_scripts/etc/proxy-sinc/credentials.conf" > .gitignore
echo "[INFO] A verificar o status do repositório Git..." echo "[INFO] A verificar o status do repositório Git..."
if [ -n "$(git status --porcelain)" ]; then if [ -n "$(git status --porcelain)" ]; then
echo "[INFO] Alterações detetadas. A preparar o commit." echo "[INFO] Alterações detetadas. A preparar o commit."
@ -120,7 +122,7 @@ if [ -n "$(git status --porcelain)" ]; then
git pull --ff-only git pull --ff-only
echo "[INFO] A adicionar alterações ao stage..." echo "[INFO] A adicionar alterações ao stage..."
git add . git add .
COMMIT_MESSAGE="[Auto-Sync] Atualização das configurações - $(date +'%Y-%m-%d %H:%M:%S')" COMMIT_MESSAGE="[Auto-Sync] Atualização das configurações em $(hostname -f) - $(date +'%Y-%m-%d %H:%M:%S')"
echo "[INFO] A fazer o commit com a mensagem: $COMMIT_MESSAGE" echo "[INFO] A fazer o commit com a mensagem: $COMMIT_MESSAGE"
git commit -m "$COMMIT_MESSAGE" git commit -m "$COMMIT_MESSAGE"
echo "[INFO] A enviar as alterações para o Gitea (git push)..." echo "[INFO] A enviar as alterações para o Gitea (git push)..."
@ -166,7 +168,7 @@ Para ver os logs: \fBjournalctl -u proxy-sinc.service\fR
.B proxy-sinc .B proxy-sinc
é um serviço de sistema que automatiza o controlo de versões de ficheiros de configuração críticos. A cada minuto, ele executa um script que sincroniza os diretórios de configuração do Nginx e do Fail2ban para um repositório Git local. Se forem detetadas alterações, ele cria um commit com um timestamp e envia as alterações para um repositório Git remoto (Gitea). é um serviço de sistema que automatiza o controlo de versões de ficheiros de configuração críticos. A cada minuto, ele executa um script que sincroniza os diretórios de configuração do Nginx e do Fail2ban para um repositório Git local. Se forem detetadas alterações, ele cria um commit com um timestamp e envia as alterações para um repositório Git remoto (Gitea).
.PP .PP
A autenticação com o Gitea é feita através de um Token de Acesso, que é configurado durante a instalação e guardado de forma segura no sistema. A autenticação com o Gitea é feita através de um Token de Acesso, e a identidade do committer é definida automaticamente com o hostname do servidor. A verificação de certificados SSL pode ser desativada durante a instalação para uso com servidores Gitea internos.
.SH CONFIGURAÇÃO .SH CONFIGURAÇÃO
Os ficheiros principais deste serviço estão localizados nos seguintes caminhos: Os ficheiros principais deste serviço estão localizados nos seguintes caminhos:
.TP .TP