From 2f60c60336772159c0f4a7af11609038e6588bd8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Pedro=20Toledo=20Goncalves?= Date: Tue, 16 Sep 2025 21:51:48 +0000 Subject: [PATCH] Atualizar Instal-Proxy-Sinc.sh --- Instal-Proxy-Sinc.sh | 62 +++++++++++++++++++++++++++++++++----------- 1 file changed, 47 insertions(+), 15 deletions(-) diff --git a/Instal-Proxy-Sinc.sh b/Instal-Proxy-Sinc.sh index 51086f1..9a7b922 100644 --- a/Instal-Proxy-Sinc.sh +++ b/Instal-Proxy-Sinc.sh @@ -17,7 +17,8 @@ SYSTEMD_DIR="/etc/systemd/system" MAN_DIR="/usr/share/man/man8" CONFIG_DIR="/etc/proxy-sinc" PATHS_FILE="${CONFIG_DIR}/paths.conf" -UPDATE_REPO_URL="https://git.itguys.com.br/joao.goncalves/NgixProxy_Pathfinder.git" # URL para o script de atualização +# A URL para o script de atualização deve apontar para o ficheiro RAW. +UPDATE_SCRIPT_URL="https://git.itguys.com.br/joao.goncalves/NgixProxy_Pathfinder/raw/branch/main/Instal-Proxy-Sinc.sh" # --- Funções de Ajuda --- info() { echo -e "\e[32m[INFO]\e[0m $1"; } @@ -64,10 +65,10 @@ SSL_VERIFY="true" if ! git -c http.sslVerify=true ls-remote "$GIT_URL" &> /dev/null; then warn "A conexão com verificação SSL falhou. A tentar novamente sem verificação..." if ! git -c http.sslVerify=false ls-remote "$GIT_URL" &> /dev/null; then - error "Não foi possível conectar ao repositório Git. Verifique a URL, o token e a conectividade de rede." - else warn "Conexão bem-sucedida sem verificação SSL. O repositório será configurado para ignorar os erros de certificado." SSL_VERIFY="false" + else + error "Não foi possível conectar ao repositório Git. Verifique a URL, o token e a conectividade de rede." fi else info "Conexão com verificação SSL bem-sucedida." @@ -110,7 +111,6 @@ if [ ! -f "$DEPLOY_LOG_FILE" ]; then info "Registo de deploy enviado para o Gitea." fi - # --- 6. Instalar os Ficheiros do Serviço --- info "A instalar/atualizar os ficheiros do serviço..." @@ -118,7 +118,9 @@ info "A instalar/atualizar os ficheiros do serviço..." mkdir -p "$CONFIG_DIR" if [ ! -f "$PATHS_FILE" ]; then info "A criar o ficheiro de caminhos padrão em $PATHS_FILE" - echo "/etc/nginx" > "$PATHS_FILE" + echo "# Adicione aqui os caminhos completos para os ficheiros e diretórios que deseja versionar, um por linha." > "$PATHS_FILE" + echo "# Linhas que começam com '#' são ignoradas." >> "$PATHS_FILE" + echo "/etc/nginx" >> "$PATHS_FILE" echo "/etc/fail2ban" >> "$PATHS_FILE" fi @@ -137,13 +139,14 @@ 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" ]; then echo "[ERRO] O diretório do repositório $REPO_PATH não foi encontrado." >&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 + # Ignora linhas vazias e comentários if [ -z "$path_to_sync" ] || [[ "$path_to_sync" =~ ^# ]]; then continue fi @@ -151,7 +154,8 @@ else if [ -e "$path_to_sync" ]; then dest_name=$(basename "$path_to_sync") log_info "A sincronizar '$path_to_sync' para '$REPO_PATH/$dest_name/'..." - 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/$dest_name/" + # Usa rsync para copiar para uma pasta com o mesmo nome do original + 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 @@ -162,6 +166,7 @@ log_info "Sincronizando ficheiros de automação..." mkdir -p "$AUTOMATION_FILES_DEST" for file in "${AUTOMATION_FILES_SOURCE[@]}"; do if [ -f "$file" ]; then + # -R preserva a estrutura de pastas (ex: /etc/proxy-sinc/paths.conf) rsync -aR "$file" "$AUTOMATION_FILES_DEST" fi done @@ -192,12 +197,24 @@ cat > "$SCRIPT_INSTALL_DIR/proxy-sinc-update" << EOF #!/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/setup.sh" +# A URL precisa de apontar para o ficheiro RAW. +UPDATE_SCRIPT_URL="${UPDATE_REPO_URL/src\/branch\/main/raw\/branch\/main}" TEMP_SCRIPT="/tmp/setup_latest.sh" + echo "A baixar a versão mais recente do instalador de: \$UPDATE_SCRIPT_URL" -if curl -k -L "\$UPDATE_SCRIPT_URL" -o "\$TEMP_SCRIPT"; then +# Adiciona o --insecure se o repo local estiver configurado para não verificar SSL +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..." + # Executa o novo instalador. Ele irá pedir as credenciais novamente para reconfigurar. sudo "\$TEMP_SCRIPT" rm "\$TEMP_SCRIPT" echo "Atualização concluída!" @@ -251,7 +268,15 @@ Esta abordagem garante um histórico completo de todas as alterações, facilita A gestão dos ficheiros e diretórios a serem sincronizados é feita através do ficheiro de texto: .TP \fB/etc/proxy-sinc/paths.conf\fR -Este ficheiro contém a lista de caminhos absolutos a serem versionados. Adicione um caminho por linha. Linhas vazias ou que começam com '#' são ignoradas. O script irá sincronizar cada caminho para um subdiretório com o mesmo nome dentro do repositório Git. +Este ficheiro contém a lista de caminhos absolutos a serem versionados. Adicione um caminho por linha. Linhas vazias ou que começam com '#' são ignoradas. O script irá sincronizar cada caminho para a raiz do repositório Git. +.sp +Exemplo de conteúdo para \fI/etc/proxy-sinc/paths.conf\fR: +.nf +# Ficheiros e diretórios a serem versionados +/etc/nginx +/etc/fail2ban +/etc/zabbix/zabbix_agentd.d/meu_parametro.conf +.fi .SH ATUALIZAÇÃO Para atualizar o serviço e os seus scripts para a versão mais recente, execute o seguinte comando como root: .sp @@ -282,11 +307,19 @@ O diretório local onde o repositório Git é clonado. EOF # --- 7. Mover ficheiros para os locais corretos e instalar --- +# Garante que os diretórios de destino existem +mkdir -p "$SCRIPT_INSTALL_DIR" "$SYSTEMD_DIR" "$MAN_DIR" + +# Move os ficheiros +mv ./commit_configs.sh "$SCRIPT_INSTALL_DIR/" +mv ./proxy-sinc-update "$SCRIPT_INSTALL_DIR/" +mv ./proxy-sinc.service "$SYSTEMD_DIR/" +mv ./proxy-sinc.timer "$SYSTEMD_DIR/" +mv "/tmp/proxy-sinc.8" "$MAN_DIR/" + +# Define as permissões corretas chmod +x "$SCRIPT_INSTALL_DIR/commit_configs.sh" chmod +x "$SCRIPT_INSTALL_DIR/proxy-sinc-update" -# (os ficheiros de serviço já foram criados no sítio certo) -mkdir -p "$MAN_DIR" -mv "/tmp/proxy-sinc.8" "$MAN_DIR/" gzip -f "$MAN_DIR/proxy-sinc.8" info "Ficheiros instalados com sucesso." @@ -313,5 +346,4 @@ info " Para atualizar o serviço no futuro: proxy-sinc-update" info "" info "Para adicionar novos ficheiros/pastas à sincronização, edite:" info " /etc/proxy-sinc/paths.conf" -info "" - +info "" \ No newline at end of file