bac55cbdfd
Поскольку Интеграционный шлюз НРД (ИШ) официально работает только на Astra Linux SE 1.6/1.7 (RPM-версии нет, дистрибутив только .deb для Debian-based), мигрируем инфраструктуру с РЕД ОС на Astra. Это заодно проверит «чистую» установку с нуля. deploy/astra/install.sh — установщик bj-server для свежей Astra ВМ: - проверка ОС (Astra Linux SE) - apt-зависимости (curl, git, podman, podman-compose, postgresql-client) - скачивание Go 1.24+ с go.dev, если нет - системный пользователь bj + каталоги /opt/bj /var/lib/bj /var/log/bj - git clone репо в /opt/bj/src - go build бинарника /opt/bj/bj-server - podman-compose up -d postgres + накат всех миграций - systemd unit с безопасными ограничениями (NoNewPrivileges, ProtectSystem=strict, ReadWritePaths только нужные, PrivateTmp) - автозапуск + проверка systemctl is-active - финальная подсказка с URL'ами deploy/astra/install-validata.sh — установщик Валидата CSP: - ищет .deb пакеты в dist/validata/ или принимает путь аргументом - если пакетов нет — печатает текст письма для запроса дистрибутива у НРД (soed@nsd.ru) или МБ (pki@moex.com) - dpkg -i + apt-get install -f для зависимостей - проверка установки в /opt/Validata* deploy/astra/install-ish.sh — установщик ИШ: - ищет igate_*_amd64.deb в стандартных местах (dist/ish/, ~/Downloads и т.п.) - проверяет наличие Валидаты (предупреждает если нет) - dpkg -i igate_*.deb - подсказывает следующие шаги (запуск GUI, настройка БД и канала WSL) deploy/astra/migrate-from-redos.sh — экспорт со старой РЕД ОС ВМ: - pg_dump БД bj (через podman exec или напрямую) - копия ~/.bj/setup.json (ищется в нескольких стандартных путях) - последние 7 дней логов из /var/log/bj и journalctl - meta.txt с версиями ОС/пакетов - README.md с инструкциями восстановления на новой ВМ - итоговый тарбол /tmp/bj-migration-YYYY-MM-DD-HHMM.tar.gz deploy/astra/healthcheck.sh — проверка после установки: - 8 разделов: ОС, пользователь/каталоги, systemd, HTTP, PostgreSQL, Валидата, ИШ, сетевые порты - цветной вывод OK/WARN/FAIL для каждого пункта deploy/astra/README.md — пошаговая инструкция миграции из 8 этапов: - подготовка (Astra ВМ, доступ root, запрос Валидаты у НРД) - экспорт со старой ВМ - install.sh на новой ВМ - restore БД и настроек - healthcheck - install-validata.sh + импорт сертификатов УЦ МБ - install-ish.sh + настройка канала WSL - первый тест с роботом MOEX МОСТ - раздел «что НЕ переносится автоматически» - раздел «откат» (старая ВМ работает до подтверждения миграции) REPORT.md обновлён: - общая готовность 72% → 75% - готовность к роботу 85% → 88% - новая строка «Установщик/мигратор на Astra Linux: 100% ✅» - «Установка ИШ на наш стенд» поднялась с 0% до 30%
135 lines
5.1 KiB
Bash
Executable File
135 lines
5.1 KiB
Bash
Executable File
#!/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" <<EOF
|
||
# Миграция bj-server с РЕД ОС на Astra Linux
|
||
|
||
Дамп создан: $(date)
|
||
Источник: $(hostname) ($(hostname -I | awk '{print $1}'))
|
||
|
||
## Файлы
|
||
|
||
- \`bj.sql\` — дамп PostgreSQL базы bj (схемы fansy + m2m_core)
|
||
- \`setup.json\` — настройки bj-server (DSN, IGW URL, и т.п.)
|
||
- \`logs/\` — последние логи bj-server
|
||
- \`meta.txt\` — версии ОС, пакетов
|
||
|
||
## Восстановление на Astra Linux
|
||
|
||
\`\`\`bash
|
||
# 1. На новой ВМ — ставим bj-server
|
||
sudo bash deploy/astra/install.sh
|
||
|
||
# 2. Восстанавливаем БД
|
||
podman exec -i bj-postgres psql -U bj -d bj < bj.sql
|
||
|
||
# 3. Восстанавливаем настройки
|
||
sudo cp setup.json /var/lib/bj/.bj/setup.json
|
||
sudo chown bj:bj /var/lib/bj/.bj/setup.json
|
||
sudo chmod 0600 /var/lib/bj/.bj/setup.json
|
||
|
||
# 4. Перезапуск
|
||
sudo systemctl restart bj-server
|
||
\`\`\`
|
||
|
||
## Что НЕ переносится автоматически
|
||
|
||
- Сертификаты КриптоПро CSP (\`/var/opt/cprocsp/keys/$USER/\`)
|
||
— это нормально, на Astra Linux будет другая СКЗИ (Валидата CSP)
|
||
- \`/opt/cprocsp/\` (КриптоПро CSP)
|
||
— на Astra нужна Валидата вместо КриптоПро
|
||
EOF
|
||
|
||
# ---- Финал ----
|
||
log "5/5: создание архива $OUT_TAR"
|
||
tar -czf "$OUT_TAR" -C "$(dirname "$OUT_DIR")" "$(basename "$OUT_DIR")"
|
||
rm -rf "$OUT_DIR"
|
||
|
||
echo
|
||
echo "================================================================"
|
||
echo " Экспорт готов"
|
||
echo "================================================================"
|
||
echo " Архив: $OUT_TAR"
|
||
echo " Размер: $(du -h "$OUT_TAR" | awk '{print $1}')"
|
||
echo
|
||
echo " Перенести на новую Astra Linux ВМ:"
|
||
echo " scp $OUT_TAR user@<astra-ip>:/tmp/"
|
||
echo
|
||
echo " На Astra Linux распаковать и читать README.md:"
|
||
echo " cd /tmp"
|
||
echo " tar -xzf $(basename "$OUT_TAR")"
|
||
echo " cat $(basename "$OUT_DIR")/README.md"
|
||
echo "================================================================"
|