all repos — zion-terminal @ 14a43c5953a09c8073660d1d3e93af5218ee0ade

dotfiles

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