Skip to content

Instantly share code, notes, and snippets.

@ksmarini
Created April 16, 2026 01:06
Show Gist options
  • Select an option

  • Save ksmarini/0c215f0a815f6fd7f319ccae7325a87c to your computer and use it in GitHub Desktop.

Select an option

Save ksmarini/0c215f0a815f6fd7f319ccae7325a87c to your computer and use it in GitHub Desktop.
OPNsense Rollback Seguro
#!/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