Atualizar Instal-Proxy-Sinc.sh
This commit is contained in:
parent
5e0a3ae12c
commit
2f60c60336
|
|
@ -17,7 +17,8 @@ SYSTEMD_DIR="/etc/systemd/system"
|
||||||
MAN_DIR="/usr/share/man/man8"
|
MAN_DIR="/usr/share/man/man8"
|
||||||
CONFIG_DIR="/etc/proxy-sinc"
|
CONFIG_DIR="/etc/proxy-sinc"
|
||||||
PATHS_FILE="${CONFIG_DIR}/paths.conf"
|
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 ---
|
# --- Funções de Ajuda ---
|
||||||
info() { echo -e "\e[32m[INFO]\e[0m $1"; }
|
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
|
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..."
|
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
|
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."
|
warn "Conexão bem-sucedida sem verificação SSL. O repositório será configurado para ignorar os erros de certificado."
|
||||||
SSL_VERIFY="false"
|
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
|
fi
|
||||||
else
|
else
|
||||||
info "Conexão com verificação SSL bem-sucedida."
|
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."
|
info "Registo de deploy enviado para o Gitea."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
# --- 6. Instalar os Ficheiros do Serviço ---
|
# --- 6. Instalar os Ficheiros do Serviço ---
|
||||||
info "A instalar/atualizar 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"
|
mkdir -p "$CONFIG_DIR"
|
||||||
if [ ! -f "$PATHS_FILE" ]; then
|
if [ ! -f "$PATHS_FILE" ]; then
|
||||||
info "A criar o ficheiro de caminhos padrão em $PATHS_FILE"
|
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"
|
echo "/etc/fail2ban" >> "$PATHS_FILE"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
@ -137,13 +139,14 @@ log_info() { echo "[INFO] $1"; }
|
||||||
|
|
||||||
log_info "--- Iniciando a verificação de sincronização [$(date)] ---"
|
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 [ "$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..."
|
log_info "Sincronizando ficheiros de configuração definidos em $PATHS_FILE..."
|
||||||
if [ ! -f "$PATHS_FILE" ]; then
|
if [ ! -f "$PATHS_FILE" ]; then
|
||||||
echo "[AVISO] O ficheiro de caminhos $PATHS_FILE não foi encontrado. Nenhum ficheiro de configuração foi sincronizado."
|
echo "[AVISO] O ficheiro de caminhos $PATHS_FILE não foi encontrado. Nenhum ficheiro de configuração foi sincronizado."
|
||||||
else
|
else
|
||||||
while IFS= read -r path_to_sync || [ -n "$path_to_sync" ]; do
|
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
|
if [ -z "$path_to_sync" ] || [[ "$path_to_sync" =~ ^# ]]; then
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
|
|
@ -151,7 +154,8 @@ else
|
||||||
if [ -e "$path_to_sync" ]; then
|
if [ -e "$path_to_sync" ]; then
|
||||||
dest_name=$(basename "$path_to_sync")
|
dest_name=$(basename "$path_to_sync")
|
||||||
log_info "A sincronizar '$path_to_sync' para '$REPO_PATH/$dest_name/'..."
|
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
|
else
|
||||||
echo "[AVISO] O caminho '$path_to_sync' definido em $PATHS_FILE não existe. A ignorar."
|
echo "[AVISO] O caminho '$path_to_sync' definido em $PATHS_FILE não existe. A ignorar."
|
||||||
fi
|
fi
|
||||||
|
|
@ -162,6 +166,7 @@ log_info "Sincronizando ficheiros de automação..."
|
||||||
mkdir -p "$AUTOMATION_FILES_DEST"
|
mkdir -p "$AUTOMATION_FILES_DEST"
|
||||||
for file in "${AUTOMATION_FILES_SOURCE[@]}"; do
|
for file in "${AUTOMATION_FILES_SOURCE[@]}"; do
|
||||||
if [ -f "$file" ]; then
|
if [ -f "$file" ]; then
|
||||||
|
# -R preserva a estrutura de pastas (ex: /etc/proxy-sinc/paths.conf)
|
||||||
rsync -aR "$file" "$AUTOMATION_FILES_DEST"
|
rsync -aR "$file" "$AUTOMATION_FILES_DEST"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
@ -192,12 +197,24 @@ cat > "$SCRIPT_INSTALL_DIR/proxy-sinc-update" << EOF
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
set -e
|
set -e
|
||||||
echo "A procurar por atualizações para o serviço Proxy-Sinc..."
|
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"
|
TEMP_SCRIPT="/tmp/setup_latest.sh"
|
||||||
|
|
||||||
echo "A baixar a versão mais recente do instalador de: \$UPDATE_SCRIPT_URL"
|
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"
|
chmod +x "\$TEMP_SCRIPT"
|
||||||
echo "Instalador baixado com sucesso. A executar a atualização..."
|
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"
|
sudo "\$TEMP_SCRIPT"
|
||||||
rm "\$TEMP_SCRIPT"
|
rm "\$TEMP_SCRIPT"
|
||||||
echo "Atualização concluída!"
|
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:
|
A gestão dos ficheiros e diretórios a serem sincronizados é feita através do ficheiro de texto:
|
||||||
.TP
|
.TP
|
||||||
\fB/etc/proxy-sinc/paths.conf\fR
|
\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
|
.SH ATUALIZAÇÃO
|
||||||
Para atualizar o serviço e os seus scripts para a versão mais recente, execute o seguinte comando como root:
|
Para atualizar o serviço e os seus scripts para a versão mais recente, execute o seguinte comando como root:
|
||||||
.sp
|
.sp
|
||||||
|
|
@ -282,11 +307,19 @@ O diretório local onde o repositório Git é clonado.
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
# --- 7. Mover ficheiros para os locais corretos e instalar ---
|
# --- 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/commit_configs.sh"
|
||||||
chmod +x "$SCRIPT_INSTALL_DIR/proxy-sinc-update"
|
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"
|
gzip -f "$MAN_DIR/proxy-sinc.8"
|
||||||
info "Ficheiros instalados com sucesso."
|
info "Ficheiros instalados com sucesso."
|
||||||
|
|
||||||
|
|
@ -313,5 +346,4 @@ info " Para atualizar o serviço no futuro: proxy-sinc-update"
|
||||||
info ""
|
info ""
|
||||||
info "Para adicionar novos ficheiros/pastas à sincronização, edite:"
|
info "Para adicionar novos ficheiros/pastas à sincronização, edite:"
|
||||||
info " /etc/proxy-sinc/paths.conf"
|
info " /etc/proxy-sinc/paths.conf"
|
||||||
info ""
|
info ""
|
||||||
|
|
||||||
Loading…
Reference in New Issue