59fc774f08
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
109 lines
5.7 KiB
Bash
Executable File
109 lines
5.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# upgrade-ish.sh — автоматическое обновление ПО «Интеграционный шлюз НРД» (igate)
|
|
# на Astra Linux (amd64). Конфигурация ИШ живёт в PostgreSQL и ПЕРЕЖИВАЕТ
|
|
# обновление — пакет заменяет только бинарники в /opt/nsd/igate.
|
|
#
|
|
# Дистрибутив — .deb с сайта НРД (стабильный URL, без авторизации):
|
|
# https://www.nsd.ru/media/integratsionnyj-shlyuz/<ver>/igate-<ver>-amd64.zip
|
|
# (внутри igate_<ver>_amd64.deb) + <...>-amd64sgn.zip (отделённая подпись).
|
|
#
|
|
# ⚠️ TEST3: миграция параметров канала WSL утилитой igate-mig НЕ предусмотрена
|
|
# (см. obnovlenie107.pdf). Параметры канала WSL для TEST3 обновляются вручную
|
|
# или нашим configure-ish.sql. Пароли БД у нас через trust — миграция паролей
|
|
# в защищённое хранилище ОС не обязательна.
|
|
#
|
|
# Использование:
|
|
# sudo ./upgrade-ish.sh /путь/к/igate-107-0-930-amd64.zip [/путь/к/...sgn.zip]
|
|
#
|
|
set -euo pipefail
|
|
|
|
ZIP="${1:?укажите путь к igate-*-amd64.zip}"
|
|
SGN="${2:-}"
|
|
SVC_USER="igate"
|
|
IGATE_DIR="/opt/nsd/igate"
|
|
STAMP="$(date +%Y%m%d-%H%M%S)"
|
|
WORK="$(mktemp -d)"
|
|
trap 'rm -rf "$WORK"' EXIT
|
|
|
|
log(){ echo -e "\n=== $* ==="; }
|
|
|
|
[ "$(id -u)" = 0 ] || { echo "нужен root (sudo)"; exit 1; }
|
|
|
|
log "1/8 Распаковка дистрибутива"
|
|
unzip -o -q "$ZIP" -d "$WORK"
|
|
DEB="$(ls "$WORK"/*.deb 2>/dev/null | head -1)"
|
|
[ -n "$DEB" ] || { echo "в архиве нет .deb"; exit 1; }
|
|
echo "пакет: $(basename "$DEB") версия: $(dpkg-deb -f "$DEB" Version)"
|
|
|
|
if [ -n "$SGN" ]; then
|
|
log "2/8 Подпись дистрибутива приложена: $(basename "$SGN")"
|
|
echo "(проверку подписи выполняет средство НРД/Валидата — файл сохранён рядом)"
|
|
else
|
|
log "2/8 Файл подписи не передан — пропуск"
|
|
fi
|
|
|
|
log "3/8 Бэкап текущей установки и конфига сервиса"
|
|
if [ -d "$IGATE_DIR" ]; then
|
|
tar czf "/var/backups/igate-$STAMP.tar.gz" -C "$(dirname "$IGATE_DIR")" "$(basename "$IGATE_DIR")" 2>/dev/null || true
|
|
echo "бэкап: /var/backups/igate-$STAMP.tar.gz"
|
|
fi
|
|
# Наш drop-in (WorkingDirectory=/var/lib/igate, User=igate) — сохраняем для восстановления.
|
|
DROPIN="/etc/systemd/system/igate.service.d"
|
|
[ -d "$DROPIN" ] && cp -a "$DROPIN" "$WORK/dropin-backup" && echo "drop-in сохранён"
|
|
|
|
log "4/8 Остановка сервиса igate"
|
|
systemctl stop igate 2>/dev/null || true
|
|
# GUI и служба не должны работать одновременно с одной БД.
|
|
pkill -u "$SVC_USER" -f '/opt/nsd/igate/igate/igate' 2>/dev/null || true
|
|
|
|
log "5/8 Preseed debconf (без интерактива) и установка пакета"
|
|
# postinst спрашивает igate/service (регистрация сервиса) и igate/shortcut.
|
|
echo "igate igate/service boolean true" | debconf-set-selections
|
|
echo "igate igate/shortcut boolean false" | debconf-set-selections
|
|
# postinst использует logname → в неинтерактиве может падать; задаём SUDO_USER.
|
|
export DEBIAN_FRONTEND=noninteractive
|
|
if ! dpkg -i "$DEB"; then
|
|
echo "dpkg сообщил об ошибке — пробуем довести зависимости"
|
|
apt-get -f install -y || true
|
|
fi
|
|
|
|
log "6/8 Восстановление нашего drop-in и пользователя сервиса"
|
|
# Пакет мог перезаписать igate.service (User=<id устанавливающего>, WD=/home).
|
|
mkdir -p "$DROPIN"
|
|
if [ -d "$WORK/dropin-backup" ]; then
|
|
cp -a "$WORK/dropin-backup/." "$DROPIN/"
|
|
else
|
|
cat > "$DROPIN/override.conf" <<EOF
|
|
[Service]
|
|
User=$SVC_USER
|
|
WorkingDirectory=/var/lib/igate
|
|
EOF
|
|
fi
|
|
# На случай, если postinst выставил числовой User= в основном юните — приведём к igate.
|
|
sed -i "s/^User=.*/User=$SVC_USER/" /etc/systemd/system/igate.service 2>/dev/null || true
|
|
systemctl daemon-reload
|
|
|
|
log "7/8 Запуск сервиса и проверка"
|
|
systemctl start igate
|
|
sleep 6
|
|
STATE="$(curl -s http://localhost:8090/api/admin/engine/state 2>/dev/null || true)"
|
|
VER="$(grep -oE '"igate/[0-9.]+"' "$IGATE_DIR/igate/igate.deps.json" 2>/dev/null | head -1)"
|
|
echo "engine/state: ${STATE:-нет ответа}"
|
|
echo "версия: ${VER:-неизвестно}"
|
|
|
|
log "8/8 Готово"
|
|
cat <<EOF
|
|
Дальнейшие шаги (TEST3, вручную либо через configure-ish.sql):
|
|
• параметры канала WSL для TEST3 миграцией НЕ переносятся — применить наш
|
|
configure-ish.sql (channels/parameters переживают обновление, но сверить);
|
|
• при ошибке «Сертификат издателя не найден» — пересобрать профиль
|
|
Справочника сертификатов (Валидата);
|
|
• для M2M включить: флаг «M2M переводы», fetchInterval=00:00:10,
|
|
время ожидания перед отправкой=00:00:01, папка ERRORS, автоуведомления
|
|
о приёме транзита, ignorePackageDirectoryStructure=True;
|
|
• config.xml businessLine=MOST — в bj: Настройка → НРД → «ИШ 107.0.0.904+».
|
|
Откат: systemctl stop igate && rm -rf $IGATE_DIR &&
|
|
tar xzf /var/backups/igate-$STAMP.tar.gz -C $(dirname "$IGATE_DIR") &&
|
|
systemctl start igate
|
|
EOF
|