Created
April 16, 2026 01:06
-
-
Save ksmarini/0c215f0a815f6fd7f319ccae7325a87c to your computer and use it in GitHub Desktop.
OPNsense Rollback Seguro
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/bin/sh | |
| #============================================================ | |
| # OPNsense Rollback Seguro | |
| #------------------------------------------------------------ | |
| # Modo web (principal): ./opnsense-rollback.sh web | |
| # Modo SSH: ./opnsense-rollback.sh ssh | |
| #============================================================ | |
| MODE="${1:-web}" | |
| CONFIG_BACKUP="/conf/config.xml.backup-$(date +%Y%m%d%H%M%S)" | |
| TIMEOUT=300 # 5 minutos | |
| echo "[1/4] Fazendo backup..." | |
| cp /conf/config.xml "$CONFIG_BACKUP" | |
| echo " Backup: $CONFIG_BACKUP" | |
| echo "[2/4] Iniciando rollback em $((TIMEOUT/60)) minutos..." | |
| echo " Modo: $MODE" | |
| echo " (Voce tem $((TIMEOUT/60)) minutos para confirmar)" | |
| do_rollback() { | |
| echo "" | |
| echo "==========================================" | |
| echo "TEMPO ESGOTADO — REVERTENDO ALTERACOES" | |
| echo "==========================================" | |
| cp "$CONFIG_BACKUP" /conf/config.xml | |
| /usr/local/opnsense/scripts/system/healthctl.py reload | |
| echo "REVERTIDO para: $CONFIG_BACKUP" | |
| rm -f /tmp/rollback.pid | |
| exit 0 | |
| } | |
| if [ "$MODE" = "web" ]; then | |
| # Modo interface web — usa nohup para sobreviver ao SSH | |
| nohup sh -c "( sleep $TIMEOUT && do_rollback )" > /tmp/rollback.log 2>&1 & | |
| ROLLBACK_PID=$! | |
| echo $ROLLBACK_PID > /tmp/rollback.pid | |
| echo "" | |
| echo "[3/4] ROLLBACK ATIVO EM BACKGROUND" | |
| echo " PID: $ROLLBACK_PID (salvo em /tmp/rollback.pid)" | |
| echo " Log: /tmp/rollback.log" | |
| echo "" | |
| echo "Acesse a interface web e faca suas alteracoes." | |
| echo "Quando confirmar:" | |
| echo " kill \$(cat /tmp/rollback.pid)" | |
| echo "" | |
| else | |
| # Modo SSH — processo no mesmo shell | |
| ( sleep $TIMEOUT && do_rollback ) & | |
| ROLLBACK_PID=$! | |
| echo "" | |
| echo "[3/4] ROLLBACK ATIVO" | |
| echo " PID: $ROLLBACK_PID" | |
| echo " Ctrl+C ou 'kill $ROLLBACK_PID' para confirmar" | |
| echo "" | |
| # Espera pelo rollback ou interrupcao | |
| wait $ROLLBACK_PID 2>/dev/null | |
| ROLLBACK_STATUS=$? | |
| if [ $ROLLBACK_STATUS -eq 0 ]; then | |
| # Tempo esgotou — rollback aconteceu | |
| exit 0 | |
| else | |
| # Interrompido — confirmacao | |
| echo "[4/4] Rollback interrompido. Salvando..." | |
| /usr/local/opnsense/scripts/system/healthctl.py reload | |
| echo "SUCESSO — CONFIGURACAO APLICADA" | |
| exit 0 | |
| fi | |
| fi |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment