41 lines
2.3 KiB
Bash
Executable File
41 lines
2.3 KiB
Bash
Executable File
#!/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
|