41d33fefad
- Одобрен дистрибутив ИШ 110.0.997 (deploy/release/igate-approved): клиенты получают его компонентом igate-dist, bj-server обновляет ИШ сам (igateAutoUpgrade) после применения обновления. Проверено на 28: установка 107.0.930 → 110.0.997 штатным bj-igate-admin, каналы сохранены, круг #M2MHR → #M2MTH с НРД TEST3 и приём ответа поллером bj — работают. - Бэкап перед установкой/обновлением ИШ стал полным: кроме /opt/nsd/igate и дампа базы — данные /var/lib/igate (без флешки с ключом и кэша), юнит, обёртка запуска, версия. Раньше откатиться было нечем: igate-dist.zip перезаписывается новой версией. - bj-igate-admin rollback / rollback-now: возврат программы, данных и базы ИШ из последнего бэкапа (pg_restore от postgres — с мандатными метками Astra). После отката пришедшая версия не ставится автоматически (/var/lib/bj/igate-autoupgrade-skip), следующая — снова да. Проверено на 28: 110.0.997 → 107.0.930 за 40 с, обмен с НРД работает. - «Шлюз НРД»: кнопка «Откатить ИШ к <версия>», когда есть полная резервная копия. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
55 lines
3.8 KiB
Bash
Executable File
55 lines
3.8 KiB
Bash
Executable File
#!/bin/bash
|
|
# bj-keymedia-worker — демон обработки запросов установки ключа (host namespace).
|
|
REQDIR=/var/lib/bj/keymedia-requests
|
|
getf(){ python3 -c "import json;print(json.load(open('$1')).get('$2',''))" 2>/dev/null; }
|
|
process_one(){
|
|
local req="$1" id res action staging profile tdev tmnt extra chan out
|
|
id=$(basename "$req" .req); res="$REQDIR/$id.res"
|
|
action=$(getf "$req" action); staging=$(getf "$req" staging); profile=$(getf "$req" profile)
|
|
tdev=$(getf "$req" target_dev); tmnt=$(getf "$req" target_mnt); extra=$(getf "$req" extra); chan=$(getf "$req" channel)
|
|
rm -f "$req"
|
|
case "$action" in
|
|
quikexport-*) out=$(BJ_EXTRA="$extra" /usr/local/sbin/bj-quikexport-admin "${action#quikexport-}" "$staging" 2>&1) ;;
|
|
component-install) out=$(/usr/local/sbin/bj-component-install "$staging" 2>&1) ;;
|
|
# интеграционный шлюз НРД: состояние, установка, канал контура (TEST3 | боевой); параметры — JSON в extra
|
|
igate-status|igate-install|igate-contour|igate-share|igate-rollback) out=$(BJ_EXTRA="$extra" /usr/local/sbin/bj-igate-admin "${action#igate-}" 2>&1) ;;
|
|
# датчик случайных чисел Валидаты: проверка и сеанс «двигайте мышью» (движения — из мастера bj)
|
|
rng-status|rng-start|rng-cancel) out=$(/usr/local/sbin/bj-validata-rng "${action#rng-}" 2>&1) ;;
|
|
# системные настройки сервера: серверы времени (NTP)
|
|
system-ntp|system-tz) out=$(BJ_EXTRA="$extra" /usr/local/sbin/bj-system-admin "${action#system-}" 2>&1) ;;
|
|
# резервное копирование и восстановление (настройки bj → bj-backup-admin); параметры — JSON в extra
|
|
backup-config|backup-test|backup-run|backup-list|backup-verify|backup-restore) out=$(BJ_EXTRA="$extra" /usr/local/sbin/bj-backup-admin "${action#backup-}" 2>&1) ;;
|
|
# Перезапуск службы модуля из админки. Список закрытый: чужую службу
|
|
# (и сам этот демон) отсюда тронуть нельзя.
|
|
unit-restart)
|
|
case "$extra" in
|
|
bj-server|bj-npr|bj-quikexport|bj-lk|bj-crypto|igate)
|
|
systemctl reset-failed "$extra" >/dev/null 2>&1
|
|
if err=$(systemctl restart "$extra" 2>&1); then
|
|
out="{\"ok\":true,\"output\":\"перезапущено: $extra\"}"
|
|
else
|
|
err=$(printf '%s' "$err" | tr -d '"\\' | tr '\n' ' ')
|
|
out="{\"ok\":false,\"error\":\"$extra: $err\"}"
|
|
fi ;;
|
|
*) out="{\"ok\":false,\"error\":\"недопустимая служба\"}" ;;
|
|
esac ;;
|
|
unit-disable|unit-enable)
|
|
# службы модулей по лицензии: модуль сняли с лицензии — остановить и отключить, вернули — включить
|
|
case "$extra" in
|
|
bj-npr|bj-quikexport|bj-lk)
|
|
if [ "$action" = unit-disable ]; then err=$(systemctl disable --now "$extra" 2>&1); else systemctl reset-failed "$extra" >/dev/null 2>&1; err=$(systemctl enable --now "$extra" 2>&1); fi
|
|
if [ $? -eq 0 ]; then out="{\"ok\":true,\"output\":\"$action: $extra\"}"
|
|
else err=$(printf '%s' "$err" | tr -d '"\\' | tr '\n' ' '); out="{\"ok\":false,\"error\":\"$extra: $err\"}"; fi ;;
|
|
*) out="{\"ok\":false,\"error\":\"недопустимая служба\"}" ;;
|
|
esac ;;
|
|
*) out=$(BJ_TARGET_DEV="$tdev" BJ_TARGET_MNT="$tmnt" BJ_EXTRA="$extra" BJ_CHANNEL="$chan" /usr/local/sbin/bj-keymedia-install "$action" "$staging" "$profile" 2>&1) ;;
|
|
esac
|
|
printf '%s' "$out" > "$res.tmp"; chown bj:bj "$res.tmp" 2>/dev/null
|
|
mv -f "$res.tmp" "$res"
|
|
}
|
|
shopt -s nullglob
|
|
while true; do
|
|
for req in "$REQDIR"/*.req; do process_one "$req"; done
|
|
sleep 1
|
|
done
|