#!/bin/bash # migrate-from-redos.sh — экспорт состояния со старой ВМ (РЕД ОС 10.10.10.22) # для переноса на новую Astra Linux ВМ. # # Запускать на СТАРОЙ ВМ (РЕД ОС). Создаст архив /tmp/bj-migration-YYYY-MM-DD.tar.gz # с: # - дампом БД (pg_dump на оба схема: fansy.* и m2m_core.*) # - содержимым ~bj/.bj/setup.json (или ~/.bj/setup.json для dev) # - логами /var/log/bj/ (за последние 7 дней) # - списком установленных пакетов (для справки) # # Архив надо перенести на новую ВМ (scp/rsync), там распаковать и натравить # на install-astra.sh с флагом --import=/path/to/archive.tar.gz (TODO). set -euo pipefail OUT_DIR="/tmp/bj-migration-$(date +%Y-%m-%d-%H%M)" OUT_TAR="${OUT_DIR}.tar.gz" mkdir -p "$OUT_DIR" log() { echo -e "\033[1;34m[migrate-export]\033[0m $*"; } warn() { echo -e "\033[1;33m[migrate-export WARN]\033[0m $*" >&2; } # ---- 1. Дамп БД ---- log "1/5: дамп PostgreSQL" DSN="${BJ_PG_DSN:-postgres://bj:bj_dev@127.0.0.1:5432/bj?sslmode=disable}" if podman ps --format '{{.Names}}' 2>/dev/null | grep -qx bj-postgres; then log " через podman exec bj-postgres" podman exec bj-postgres pg_dump -U bj -d bj --clean --if-exists > "$OUT_DIR/bj.sql" \ || warn " pg_dump упал — проверь контейнер bj-postgres" else log " напрямую pg_dump" pg_dump "$DSN" --clean --if-exists > "$OUT_DIR/bj.sql" \ || warn " pg_dump упал — проверь DSN" fi [ -f "$OUT_DIR/bj.sql" ] && log " размер дампа: $(du -h "$OUT_DIR/bj.sql" | awk '{print $1}')" # ---- 2. Конфигурация ---- log "2/5: ~/.bj/setup.json" for candidate in /var/lib/bj/.bj/setup.json ~/.bj/setup.json /root/.bj/setup.json; do if [ -f "$candidate" ]; then cp "$candidate" "$OUT_DIR/setup.json" log " скопировано из $candidate" break fi done # ---- 3. Логи ---- log "3/5: логи за 7 дней" mkdir -p "$OUT_DIR/logs" if [ -d /var/log/bj ]; then find /var/log/bj -type f -mtime -7 -exec cp {} "$OUT_DIR/logs/" \; 2>/dev/null || true fi journalctl -u bj-server --since "7 days ago" --no-pager > "$OUT_DIR/logs/journal.log" 2>/dev/null || true # ---- 4. Пакеты, версии (для справки) ---- log "4/5: метаинформация" { echo "=== ОС ===" cat /etc/os-release 2>/dev/null || echo "no os-release" echo echo "=== uname ===" uname -a echo echo "=== Установленные RPM (только наши пакеты) ===" rpm -qa 2>/dev/null | grep -iE "cprocsp|crypto|postgresql|podman|go" || true echo echo "=== Версия bj-server ===" /opt/bj/bj-server --version 2>/dev/null || echo "не определена" echo echo "=== Дата создания дампа ===" date } > "$OUT_DIR/meta.txt" # ---- 5. README ---- cat > "$OUT_DIR/README.md" <:/tmp/" echo echo " На Astra Linux распаковать и читать README.md:" echo " cd /tmp" echo " tar -xzf $(basename "$OUT_TAR")" echo " cat $(basename "$OUT_DIR")/README.md" echo "================================================================"