opt/zion-terminal/bin/zion-backup (view raw)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
#!/usr/bin/env bash
# ZION TERMINAL - Backup e restauracao das configuracoes
# Cyberdeck criado por Pablo Murad em 2026
export LC_ALL=C
. /opt/zion-terminal/bin/zion-lib.sh 2>/dev/null
DEST=/opt/zion-terminal/backups
uso() {
cat <<U
Uso: zion backup cria backup datado (.tar.gz)
zion backup --restaurar ARQ restaura de um backup (pede confirmacao)
zion backup --para PEER envia o ultimo backup via rsync para um peer Tailscale
zion backup --com-chaves inclui chaves SSH privadas (exige confirmacao)
Backups em: $DEST
Por padrao NAO inclui chaves privadas.
U
}
criar() {
local ts inc tmp
ts=$(date +%Y%m%d-%H%M%S); tmp=$(mktemp -d)
inc=("opt/zion-terminal/bin" "opt/zion-terminal/config" "opt/zion-terminal/docs"
"opt/zion-terminal/assets/banner-wide.txt" "opt/zion-terminal/assets/banner-compact.txt"
"opt/zion-terminal/VERSION" "opt/zion-terminal/CREATOR"
"etc/profile.d/zzz-zion-motd.sh" "etc/profile.d/zzz-zion-aliases.sh"
"etc/systemd/system/zion-collect.service" "etc/systemd/system/zion-collect.timer")
[ -e "$HOME/.ssh/config" ] && inc+=("home/pablo/.ssh/config")
[ -e "$HOME/.tmux.conf" ] && inc+=("home/pablo/.tmux.conf")
[ -e "$HOME/.zion-tema" ] && inc+=("home/pablo/.zion-tema")
[ -e "$HOME/.bash_profile" ] && inc+=("home/pablo/.bash_profile")
if [ "$1" = "--com-chaves" ]; then
read -r -p "Incluir CHAVES PRIVADAS no backup? [s/N]: " k; [ "$k" = s ] && inc+=(home/pablo/.ssh/id_*)
fi
dpkg --get-selections > "$tmp/pacotes.txt" 2>/dev/null
local arq="$DEST/zion-backup-$ts.tar.gz"
if tar czf "$arq" --ignore-failed-read -C / "${inc[@]}" -C "$tmp" pacotes.txt 2>/dev/null; then
chmod 600 "$arq"
printf '%b Backup criado:%b %s (%s)\n' "$ZOK" "$ZR" "$arq" "$(du -h "$arq" | cut -f1)"
else
printf '%b Falha ao criar backup.%b\n' "$ZCRIT" "$ZR"; rm -f "$arq"; rm -rf "$tmp"; return 1
fi
rm -rf "$tmp"
}
case "${1:-}" in
""|--com-chaves) criar "${1:-}" ;;
--restaurar)
arq="${2:-}"; [ -r "$arq" ] || { echo "Arquivo invalido: $arq"; exit 1; }
read -r -p "Restaurar $arq sobre o sistema atual? [s/N]: " r; [ "$r" = s ] || exit 0
sudo tar xzf "$arq" -C / && echo "Restaurado. Revise e reinicie sessao se necessario." ;;
--para)
peer="${2:-}"; [ -z "$peer" ] && { echo "Informe o peer."; exit 1; }
ultimo=$(sudo ls -t "$DEST"/zion-backup-*.tar.gz 2>/dev/null | head -1)
[ -z "$ultimo" ] && { echo "Nenhum backup ainda. Rode 'zion backup' antes."; exit 1; }
echo "Enviando $ultimo -> $peer:~/"; rsync -av --progress "$ultimo" "$peer:~/" ;;
--help|-h) uso ;;
*) uso; exit 2 ;;
esac
|