diff --git a/_automation_scripts/etc/proxy-sinc/paths.conf b/_automation_scripts/etc/proxy-sinc/paths.conf new file mode 100644 index 0000000..8a4c2a8 --- /dev/null +++ b/_automation_scripts/etc/proxy-sinc/paths.conf @@ -0,0 +1,4 @@ +# Adicione aqui os caminhos completos para os ficheiros e diretórios que deseja versionar, um por linha. +# Linhas que começam com '#' são ignoradas. +/etc/nginx +/etc/fail2ban diff --git a/_automation_scripts/usr/local/sbin/commit_configs.sh b/_automation_scripts/usr/local/sbin/commit_configs.sh index 9a255ee..5286cf7 100755 --- a/_automation_scripts/usr/local/sbin/commit_configs.sh +++ b/_automation_scripts/usr/local/sbin/commit_configs.sh @@ -1,40 +1,60 @@ #!/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") +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/" -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..." + +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 -echo "[INFO] Sincronização de ficheiros concluída." + cd "$REPO_PATH" -echo "[INFO] A verificar o status do repositório Git..." +log_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..." + 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 - echo "[INFO] A adicionar alterações ao stage..." + 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')" - echo "[INFO] A fazer o commit com a mensagem: $COMMIT_MESSAGE" + log_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)..." + 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 - echo "[INFO] Nenhuma alteração de configuração detetada. O repositório está atualizado." + log_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)] ---" +log_info "--- Verificação de sincronização concluída [$(date)] ---" exit 0 diff --git a/_automation_scripts/usr/local/sbin/proxy-sinc-update b/_automation_scripts/usr/local/sbin/proxy-sinc-update new file mode 100755 index 0000000..5851317 --- /dev/null +++ b/_automation_scripts/usr/local/sbin/proxy-sinc-update @@ -0,0 +1,27 @@ +#!/bin/bash +set -e +echo "A procurar por atualizações para o serviço Proxy-Sinc..." +UPDATE_SCRIPT_URL="https://git.itguys.com.br/joao.goncalves/NgixProxy_Pathfinder/raw/branch/main/Instal-Proxy-Sinc.sh" +TEMP_SCRIPT="/tmp/setup_latest.sh" + +echo "A baixar a versão mais recente do instalador de: $UPDATE_SCRIPT_URL" + +SSL_VERIFY_FLAG="" +if [ -d "/opt/config_repo/.git" ]; then + if [ "$(cd /opt/config_repo && git config --get http.sslVerify)" == "false" ]; then + SSL_VERIFY_FLAG="--insecure" + echo "[AVISO] A usar o modo inseguro para baixar a atualização devido à configuração do repositório." + fi +fi + +if curl $SSL_VERIFY_FLAG -L "$UPDATE_SCRIPT_URL" -o "$TEMP_SCRIPT"; then + chmod +x "$TEMP_SCRIPT" + echo "Instalador baixado com sucesso. A executar a atualização..." + sudo "$TEMP_SCRIPT" + rm "$TEMP_SCRIPT" + echo "Atualização concluída!" +else + echo "ERRO: Falha ao baixar o script de atualização." >&2 + exit 1 +fi +exit 0 diff --git a/_automation_scripts/usr/share/man/man8/proxy-sinc.8.gz b/_automation_scripts/usr/share/man/man8/proxy-sinc.8.gz index a8099e7..11a08ac 100644 Binary files a/_automation_scripts/usr/share/man/man8/proxy-sinc.8.gz and b/_automation_scripts/usr/share/man/man8/proxy-sinc.8.gz differ