6e503433d4
Переосмысление установщика по фидбеку: установщик должен делать чистую
установку «с нуля», а не миграцию. От пользователя требуется одна
команда и больше ничего:
curl -sSL https://.../install.sh | sudo bash
deploy/astra/install.sh переписан:
- 9 чётких этапов с прогресс-индикатором (секунды от старта)
- Авто-определение ОС: Astra SE → официально, Astra CE/Debian → warn,
Ubuntu → ask, остальные → fail
- Авто-скачивание дистрибутива ИШ (~120 МБ) с old.nsd.ru
- Авто-установка ИШ через dpkg (но если упадёт — это OK, продолжаем)
- НЕинтерактивный режим (--yes) для CI/автоматизации
- Финальная сводка с URL'ами + список ручных шагов
- Дефолтный setup.json создаётся сразу, чтоб bj-server понимал DSN
- ProtectSystem=strict, ReadWritePaths только нужные, PrivateTmp в
systemd unit'е
deploy/astra/migrate-from-redos.sh → переименован в import-data.sh
и стал ОПЦИОНАЛЬНЫМ (для тех кто переезжает с действующего стенда).
Главный путь — чистая установка через install.sh.
deploy/astra/README.md перетряхнут:
- TL;DR с одной командой в самом верху
- Объяснение Astra SE vs Astra CE vs Debian (платное/бесплатное)
- 5 скриптов вместо 6
- Раздел «что произойдёт после установки» — режим эмуляции, что
осталось руками
- 10-этапный путь от чистой ВМ до прохождения теста с роботом MOEX МОСТ
REPORT.md обновлён: установщик описан как «одна команда» вместо
«миграция», % готовности не изменился (но качество улучшилось).
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 "================================================================"
|