|
|
|
@@ -86,7 +86,9 @@ case "$cmd" in
|
|
|
|
|
'deponent',(select value from parameters p where p.chanel_id=c.id and p.name='repositoryCode'),
|
|
|
|
|
'dir',(select value from parameters p where p.chanel_id=c.id and p.name='dir')) order by c.id),'[]') from channels c" 2>/dev/null || echo "[]")
|
|
|
|
|
fi
|
|
|
|
|
echo "{\"ok\":true,\"installed\":$inst,\"version\":$(q "$(igate_version)"),\"service\":$(q "$svc"),\"engine\":$(q "$st"),\"channels\":${chans:-[]}}" ;;
|
|
|
|
|
rb=""; BK=$(cat /var/backups/ish-last-backup.txt 2>/dev/null)
|
|
|
|
|
[ -n "$BK" ] && [ -s "$BK/version" ] && [ -s "$BK/opt-nsd-igate.tar.gz" ] && [ -s "$BK/igate-db.dump" ] && [ -s "$BK/var-lib-igate.tar.gz" ] && rb=$(cat "$BK/version")
|
|
|
|
|
echo "{\"ok\":true,\"installed\":$inst,\"version\":$(q "$(igate_version)"),\"service\":$(q "$svc"),\"engine\":$(q "$st"),\"rollback\":$(q "$rb"),\"channels\":${chans:-[]}}" ;;
|
|
|
|
|
|
|
|
|
|
install)
|
|
|
|
|
if pgrep -f "bj-igate-admin install-now" >/dev/null; then
|
|
|
|
@@ -173,7 +175,11 @@ PY
|
|
|
|
|
BK=/var/backups/ish-$(date +%Y%m%d-%H%M%S); mkdir -p "$BK"
|
|
|
|
|
tar czf "$BK/opt-nsd-igate.tar.gz" -C "$(dirname "$IGATE_DIR")" "$(basename "$IGATE_DIR")" 2>/dev/null
|
|
|
|
|
runuser -u postgres -- pg_dump -Fc "$DB" > "$BK/igate-db.dump" 2>/dev/null
|
|
|
|
|
echo "$BK" > /var/backups/ish-last-backup.txt; echo "резервная копия прежнего ИШ: $BK"
|
|
|
|
|
# для отката: данные ИШ (без флешки с ключом и кэша), юнит, обёртка запуска, версия
|
|
|
|
|
tar czf "$BK/var-lib-igate.tar.gz" --exclude="${HOME_DIR#/}/keymedia" --exclude="${HOME_DIR#/}/.cache" -C / "${HOME_DIR#/}" 2>/dev/null
|
|
|
|
|
cp -a "$UNIT" "$BK/" 2>/dev/null; cp -a "$UNIT.d" "$BK/" 2>/dev/null; cp -a "$WRAPPER" "$BK/" 2>/dev/null
|
|
|
|
|
igate_version > "$BK/version"
|
|
|
|
|
echo "$BK" > /var/backups/ish-last-backup.txt; echo "резервная копия прежнего ИШ $(cat "$BK/version"): $BK"
|
|
|
|
|
fi
|
|
|
|
|
echo "igate igate/service boolean false" | debconf-set-selections
|
|
|
|
|
echo "igate igate/shortcut boolean false" | debconf-set-selections
|
|
|
|
@@ -253,6 +259,49 @@ SQL
|
|
|
|
|
case "$(j file)" in /var/lib/bj/igate-upload/*) rm -f "$(j file)" ;; esac # загруженный архив больше не нужен (с образа — остаётся)
|
|
|
|
|
st done "ИШ $(igate_version) установлен и работает; дальше — канал контура (TEST3 или боевой)" ;;
|
|
|
|
|
|
|
|
|
|
rollback)
|
|
|
|
|
pgrep -f "bj-igate-admin (install|rollback)-now" >/dev/null && err "установка или откат ИШ уже идёт"
|
|
|
|
|
BK=$(cat /var/backups/ish-last-backup.txt 2>/dev/null)
|
|
|
|
|
[ -n "$BK" ] && [ -s "$BK/version" ] && [ -s "$BK/var-lib-igate.tar.gz" ] || err "нет полной резервной копии прежнего ИШ — откатить нельзя"
|
|
|
|
|
echo '{"stage":"queued","msg":"откат запущен"}' > "$STATUS"; chown bj:bj "$STATUS" 2>/dev/null
|
|
|
|
|
systemd-run --unit="bj-igate-rollback-$(date +%s)" --collect -p RuntimeMaxSec=1800 /usr/local/sbin/bj-igate-admin rollback-now >/dev/null 2>&1 || err "не удалось запустить откат"
|
|
|
|
|
ok "откат ИШ к $(cat "$BK/version") запущен" ;;
|
|
|
|
|
|
|
|
|
|
rollback-now)
|
|
|
|
|
LOG=/var/log/bj-igate-install.log; : > "$LOG"
|
|
|
|
|
st() { python3 - "$STATUS" "$1" "$2" "$LOG" <<'PY'
|
|
|
|
|
import json,sys,datetime
|
|
|
|
|
tail=open(sys.argv[4],errors='replace').read()[-1500:]
|
|
|
|
|
json.dump({"at":datetime.datetime.now().astimezone().isoformat(timespec="seconds"),"stage":sys.argv[2],"msg":sys.argv[3],"log":tail},open(sys.argv[1],"w"),ensure_ascii=False)
|
|
|
|
|
PY
|
|
|
|
|
chown bj:bj "$STATUS" 2>/dev/null; echo "== $2" >> "$LOG"; }
|
|
|
|
|
die() { st error "$1"; exit 1; }
|
|
|
|
|
exec >>"$LOG" 2>&1
|
|
|
|
|
BK=$(cat /var/backups/ish-last-backup.txt 2>/dev/null); old=$(cat "$BK/version" 2>/dev/null); cur=$(igate_version)
|
|
|
|
|
[ -n "$old" ] || die "нет резервной копии прежнего ИШ"
|
|
|
|
|
st stop "остановка ИШ $cur"
|
|
|
|
|
systemctl stop igate >/dev/null 2>&1 || true
|
|
|
|
|
pkill -9 -u "$SVC_USER" -f igate-svc 2>/dev/null; pkill -9 -u "$SVC_USER" -f Xvfb 2>/dev/null; rm -f /tmp/CoreFxPipe_NSD.IGate.*
|
|
|
|
|
st files "возврат программы и данных ИШ $old"
|
|
|
|
|
rm -rf "$IGATE_DIR" && tar xzf "$BK/opt-nsd-igate.tar.gz" -C "$(dirname "$IGATE_DIR")" || die "не распаковалась программа ИШ из $BK"
|
|
|
|
|
find "$HOME_DIR" -mindepth 1 -maxdepth 1 ! -name keymedia ! -name .cache -exec rm -rf {} + 2>/dev/null
|
|
|
|
|
tar xzf "$BK/var-lib-igate.tar.gz" -C / || die "не распаковались данные ИШ из $BK"
|
|
|
|
|
[ -f "$BK/$(basename "$UNIT")" ] && cp -a "$BK/$(basename "$UNIT")" "$UNIT"
|
|
|
|
|
[ -d "$BK/$(basename "$UNIT").d" ] && { rm -rf "$UNIT.d"; cp -a "$BK/$(basename "$UNIT").d" "$UNIT.d"; }
|
|
|
|
|
[ -f "$BK/$(basename "$WRAPPER")" ] && cp -a "$BK/$(basename "$WRAPPER")" "$WRAPPER"
|
|
|
|
|
st db "возврат базы ИШ"
|
|
|
|
|
runuser -u postgres -- dropdb --if-exists "$DB" && runuser -u postgres -- createdb -O "$SVC_USER" "$DB" || die "не пересоздана база ИШ"
|
|
|
|
|
runuser -u postgres -- pg_restore -d "$DB" "$BK/igate-db.dump" || true
|
|
|
|
|
psqlq -c "select to_regclass('public.parameters') is not null" | grep -q t || die "база ИШ не восстановилась из $BK/igate-db.dump"
|
|
|
|
|
# пришедший с обновлением дистрибутив больше не ставить сам (иначе bj вернёт версию сразу); новая версия — снова автоматически
|
|
|
|
|
dv=$(python3 -c "import json;print(json.load(open('/var/lib/bj/.bj/components.json')).get('igate-dist',{}).get('version',''))" 2>/dev/null)
|
|
|
|
|
[ -n "$dv" ] && { printf '%s
|
|
|
|
|
' "$dv" > /var/lib/bj/igate-autoupgrade-skip; chown bj:bj /var/lib/bj/igate-autoupgrade-skip 2>/dev/null; }
|
|
|
|
|
st start "запуск ИШ $old"
|
|
|
|
|
systemctl daemon-reload; systemctl restart igate || die "служба igate не запустилась"
|
|
|
|
|
wait_engine 120 || die "ИШ $old запущен, но движок не перешёл в Running за 2 минуты. Журнал ИШ: $DATA_DIR/logs-svc/log.txt"
|
|
|
|
|
st done "ИШ откатан с $cur к $old и работает" ;;
|
|
|
|
|
|
|
|
|
|
contour)
|
|
|
|
|
contour=$(j contour); crypto=$(j crypto); dep=$(j deponent); prof=$(j profile)
|
|
|
|
|
crypto=${crypto:-gost}
|
|
|
|
|