#!/bin/bash set -e REPO_PATH="/opt/config_repo" NGINX_SOURCE="/etc/nginx" FAIL2BAN_SOURCE="/etc/fail2ban" 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_DEST="$REPO_PATH/_automation_scripts/" 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 [ ! -d "$REPO_PATH" ]; then echo "ERRO CRÍTICO: O diretório do repositório $REPO_PATH não foi encontrado." >&2; exit 1; fi echo "[INFO] Sincronizando ficheiros de configuração..." rsync -avz --delete --exclude='*.swp' --exclude='*.bak' --exclude='sites-enabled/' --exclude='modules-enabled/' --exclude='/var/log/' --exclude='/var/run/' --exclude='/var/cache/' "$NGINX_SOURCE/" "$REPO_PATH/nginx/" 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..." mkdir -p "$AUTOMATION_FILES_DEST" for file in "${AUTOMATION_FILES_SOURCE[@]}"; do if [ -f "$file" ]; then rsync -aR "$file" "$AUTOMATION_FILES_DEST" fi done echo "[INFO] Sincronização de ficheiros concluída." cd "$REPO_PATH" echo "[INFO] A verificar o status do repositório Git..." if [ -n "$(git status --porcelain)" ]; then echo "[INFO] Alterações detetadas. A preparar o commit." echo "[INFO] A puxar alterações do repositório remoto para evitar conflitos..." git pull --ff-only echo "[INFO] A adicionar alterações ao stage..." git add . 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" git commit -m "$COMMIT_MESSAGE" echo "[INFO] A enviar as alterações para o Gitea (git push)..." git push origin main echo "[SUCESSO] As alterações foram enviadas para o repositório remoto!" else echo "[INFO] Nenhuma alteração de configuração detetada. O repositório está atualizado." fi echo "--- Verificação de sincronização concluída com sucesso [$(date)] ---" exit 0