ИШ обновляется через сервер лицензий вместе с bj; наглядный ход установки ИШ
- Дистрибутив ИШ — компонент выпуска igate-dist (версия = версия ИШ). В выпуск попадает только одобренный архив: deploy/release/igate-approved (версия и sha256), сборка сверяет контрольную сумму. Клиент получает его обновлением; bj-server после обновления (и при запуске) сам обновляет ИШ, если на сервере он старее; итог — событие в «Новостях». Настройки, каналы и база ИШ сохраняются, прежняя версия — в /var/backups. - Установка «с сервера» берёт самый новый проверенный дистрибутив: с образа или из обновления. С сайта НРД — только в режиме разработки. - Большие файлы: одна прежняя копия вместо пяти; предел скачивания — по размеру. - Ход установки ИШ — этапами: пройденные, текущий («идёт 0:41 · обычно до 1:30», дольше обычного — предупреждение), журнал под раскрытием; кнопка на время установки выключена. - Установщик: уникальные этапы; igate-cli и сессия ключницы с принудительным завершением (timeout -k); зависшая установка (ход не менялся 15 минут) снимается повторным запуском; служба установки — не дольше 40 минут. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
This commit is contained in:
@@ -89,15 +89,21 @@ case "$cmd" in
|
||||
echo "{\"ok\":true,\"installed\":$inst,\"version\":$(q "$(igate_version)"),\"service\":$(q "$svc"),\"engine\":$(q "$st"),\"channels\":${chans:-[]}}" ;;
|
||||
|
||||
install)
|
||||
pgrep -f "bj-igate-admin install-now" >/dev/null && err "установка ИШ уже идёт"
|
||||
if pgrep -f "bj-igate-admin install-now" >/dev/null; then
|
||||
# идёт — не мешать; но если ход не менялся 15 минут, установка зависла: снять её и начать заново
|
||||
age=$(( $(date +%s) - $(stat -c %Y "$STATUS" 2>/dev/null || echo 0) ))
|
||||
[ "$age" -gt 900 ] || err "установка ИШ уже идёт"
|
||||
systemctl stop 'bj-igate-install-*' >/dev/null 2>&1; pkill -f "bj-igate-admin install-now" 2>/dev/null; sleep 2
|
||||
fi
|
||||
file=$(j file); ver=$(j version)
|
||||
[ "$(j bundled)" = 1 ] && [ -z "$file$ver" ] && { file=$(ls /var/lib/bj/igate-dist/igate-*-amd64.zip 2>/dev/null | sort -V | tail -1); [ -n "$file" ] || err "в образе нет дистрибутива ИШ"; BJ_EXTRA="{\"file\":\"$file\"}"; }
|
||||
[ -n "$file$ver" ] || err "не указан дистрибутив ИШ (файл или версия)"
|
||||
[ -z "$file" ] || [ -f "$file" ] || err "файл дистрибутива не найден: $file"
|
||||
[[ -z "$ver" || "$ver" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] || err "версия ИШ — вида 107.0.930"
|
||||
(umask 077; printf '%s' "${BJ_EXTRA:-}" > "$PARAMS")
|
||||
echo '{"stage":"start","msg":"установка запущена"}' > "$STATUS"; chown bj:bj "$STATUS" 2>/dev/null
|
||||
systemd-run --unit="bj-igate-install-$(date +%s)" --collect /usr/local/sbin/bj-igate-admin install-now >/dev/null 2>&1 || err "не удалось запустить установку"
|
||||
echo '{"stage":"queued","msg":"установка запущена"}' > "$STATUS"; chown bj:bj "$STATUS" 2>/dev/null
|
||||
# не дольше 40 минут: что бы ни зависло, служба установки будет остановлена (ход покажет «прервалась»)
|
||||
systemd-run --unit="bj-igate-install-$(date +%s)" --collect -p RuntimeMaxSec=2400 /usr/local/sbin/bj-igate-admin install-now >/dev/null 2>&1 || err "не удалось запустить установку"
|
||||
ok "установка ИШ запущена" ;;
|
||||
|
||||
install-now)
|
||||
@@ -121,7 +127,7 @@ PY
|
||||
{ DEBIAN_FRONTEND=noninteractive apt-get update -qq && DEBIAN_FRONTEND=noninteractive apt-get install -y -qq --no-install-recommends $need; } || die "не удалось установить пакеты:$need"
|
||||
fi
|
||||
|
||||
st package "дистрибутив ИШ"
|
||||
st dist "дистрибутив ИШ"
|
||||
file=$(j file); ver=$(j version)
|
||||
if [ -z "$file" ]; then
|
||||
v=$(printf '%s' "$ver" | tr . -)
|
||||
@@ -160,7 +166,7 @@ PY
|
||||
runuser -u postgres -- psql -qtAc "select pg_reload_conf()" >/dev/null
|
||||
fi
|
||||
|
||||
st package "установка пакета ИШ"
|
||||
st install "установка пакета ИШ"
|
||||
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.*
|
||||
if [ -d "$IGATE_DIR" ]; then
|
||||
@@ -216,7 +222,8 @@ EOF
|
||||
|
||||
st schema "база ИШ: создание схемы"
|
||||
if ! psqlq -c "select to_regclass('public.parameters') is not null" | grep -q t; then
|
||||
run_as_igate_keyring "timeout 90 $IGATE_DIR/igate-cli/igate-cli --data $HOME_DIR </dev/null >/dev/null 2>&1; true"
|
||||
# -k: .NET-программа может не завершиться по SIGTERM — через 15 с принудительно (иначе ждали бы бесконечно)
|
||||
timeout -k 15 150 bash -c "$(declare -f run_as_igate_keyring); SVC_USER=$SVC_USER HOME_DIR=$HOME_DIR run_as_igate_keyring 'timeout -k 15 90 $IGATE_DIR/igate-cli/igate-cli --data $HOME_DIR </dev/null >/dev/null 2>&1; true'" || true
|
||||
psqlq -c "select to_regclass('public.parameters') is not null" | grep -q t || die "ИШ не создал схему базы (igate-cli). Журнал: $LOG"
|
||||
fi
|
||||
# Общие параметры ИШ. Обязательные для работы без графики и для bj (движок при старте, Web API на
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
107.0.930 996bcf9f8f0001dc0e73b9582a5ebc0fa05bda264bc8e8b1785d069ed07f13c3
|
||||
Reference in New Issue
Block a user