#!/bin/bash set -e REPO_PATH="/opt/config_repo" CONFIG_DIR="/etc/proxy-sinc" PATHS_FILE="${CONFIG_DIR}/paths.conf" AUTOMATION_FILES_SOURCE=("/usr/local/sbin/commit_configs.sh" "/usr/local/sbin/proxy-sinc-update" "/etc/systemd/system/proxy-sinc.service" "/etc/systemd/system/proxy-sinc.timer" "/usr/share/man/man8/proxy-sinc.8.gz" "${PATHS_FILE}") AUTOMATION_FILES_DEST="$REPO_PATH/_automation_scripts/" log_info() { echo "[INFO] $1"; } log_info "--- Iniciando a verificação de sincronização [$(date)] ---" if [ "$EUID" -ne 0 ]; then echo "[ERRO] O script deve ser executado como root." >&2; exit 1; fi if [ ! -d "$REPO_PATH/.git" ]; then echo "[ERRO] O diretório do repositório $REPO_PATH não é um repositório Git válido." >&2; exit 1; fi log_info "Sincronizando ficheiros de configuração definidos em $PATHS_FILE..." if [ ! -f "$PATHS_FILE" ]; then echo "[AVISO] O ficheiro de caminhos $PATHS_FILE não foi encontrado. Nenhum ficheiro de configuração foi sincronizado." else while IFS= read -r path_to_sync || [ -n "$path_to_sync" ]; do if [ -z "$path_to_sync" ] || [[ "$path_to_sync" =~ ^# ]]; then continue fi if [ -e "$path_to_sync" ]; then # Copia para a raiz do repositório rsync -avz --delete --exclude='*.swp' --exclude='*.bak' --exclude='sites-enabled/' --exclude='modules-enabled/' --exclude='/var/log/' --exclude='/var/run/' --exclude='/var/cache/' "$path_to_sync" "$REPO_PATH/" else echo "[AVISO] O caminho '$path_to_sync' definido em $PATHS_FILE não existe. A ignorar." fi done < "$PATHS_FILE" fi log_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 cd "$REPO_PATH" log_info "A verificar o status do repositório Git..." if [ -n "$(git status --porcelain)" ]; then log_info "Alterações detetadas. A preparar o commit." log_info "A puxar alterações do repositório remoto para evitar conflitos..." git pull --ff-only log_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')" log_info "A fazer o commit com a mensagem: $COMMIT_MESSAGE" git commit -m "$COMMIT_MESSAGE" log_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 log_info "Nenhuma alteração de configuração detetada. O repositório está atualizado." fi log_info "--- Verificação de sincronização concluída [$(date)] ---" exit 0