From a34fea80eda8e3940a5aa11e7b74ee9c1da43651 Mon Sep 17 00:00:00 2001 From: zuevav Date: Tue, 6 Oct 2026 19:16:26 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9A=D0=BB=D1=8E=D1=87:=20=D1=81=D0=BB=D1=83?= =?UTF-8?q?=D0=B6=D0=B1=D0=B0=20=D0=BA=D0=BB=D1=8E=D1=87=D0=B5=D0=B9=20?= =?UTF-8?q?=D0=92=D0=B0=D0=BB=D0=B8=D0=B4=D0=B0=D1=82=D1=8B=20=D0=B7=D0=B0?= =?UTF-8?q?=D0=BF=D1=83=D1=81=D0=BA=D0=B0=D0=B5=D1=82=D1=81=D1=8F=20=D0=BD?= =?UTF-8?q?=D0=B0=D0=B4=D1=91=D0=B6=D0=BD=D0=BE=20=E2=80=94=20=D1=81=D0=BF?= =?UTF-8?q?=D1=80=D0=B0=D0=B2=D0=BE=D1=87=D0=BD=D0=B8=D0=BA=20=D1=81=D0=BE?= =?UTF-8?q?=D0=B1=D0=B8=D1=80=D0=B0=D0=B5=D1=82=D1=81=D1=8F,=20=D0=BA?= =?UTF-8?q?=D0=B0=D0=BA=20=D0=BD=D0=B0=20=D0=90=D1=81=D1=82=D1=80=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit На .29 ключ с флешки не загружался ни у root (пересборка справочника: «Ошибка загрузки ключа ЭП»), ни у igate (подпись: «Не найден ключ ЭП»), хотя флешка смонтирована и ключ виден; на рабочем сервере та же проверка подписи — OK. Перезапуск службы ключей (vdcrysvc, init-скрипт vdmkdev) мог молча не сработать на свежем сервере: юнит появляется только после daemon-reload, а init-скрипт не понимает restart. Теперь: daemon-reload, enable, restart (или stop/start), проверка, что vdcrysvc работает; после неудачной подписи — перезапуск службы и повтор. В диагностике — состояние службы ключей. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi --- deploy/linux/sbin/bj-keymedia-install | 36 +++++++++++++++++++-------- 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/deploy/linux/sbin/bj-keymedia-install b/deploy/linux/sbin/bj-keymedia-install index 821b1ad..7b50ff0 100755 --- a/deploy/linux/sbin/bj-keymedia-install +++ b/deploy/linux/sbin/bj-keymedia-install @@ -45,6 +45,21 @@ attach_keymedia(){ } KEYMEDIA_UUID="" +# keysvc_restart — служба ключей Валидаты (vdcrysvc, init-скрипт vdmkdev): без неё ключ с носителя не +# загружается — ни для пересборки справочника (как на Астре), ни для подписи ИШ. На свежем сервере простой +# «systemctl restart vdmkdev» мог молча не сработать: юнит systemd появляется только после daemon-reload, а +# init-скрипт понимает лишь start/stop (restart — ошибка). Служба включается и при загрузке сервера. +keysvc_restart(){ + systemctl daemon-reload >/dev/null 2>&1 + systemctl enable vdmkdev.service >/dev/null 2>&1 + if ! systemctl restart vdmkdev.service >/dev/null 2>&1; then + /etc/init.d/vdmkdev stop >/dev/null 2>&1; /etc/init.d/vdmkdev start >/dev/null 2>&1 + fi + for _ in 1 2 3 4 5; do pgrep -x vdcrysvc >/dev/null && break; sleep 1; done + pgrep -x vdcrysvc >/dev/null || { /etc/init.d/vdmkdev start >/dev/null 2>&1; sleep 2; } + sleep 1 +} + if [ "$ACTION" = "restart-ish" ]; then systemctl restart igate.service >/dev/null 2>&1 || systemctl restart igate-svc >/dev/null 2>&1 || true echo '{"ok":true,"action":"restart-ish"}'; exit 0 @@ -213,7 +228,7 @@ fi [ -n "$TARGET_DEV" ] && attach_keymedia "$TARGET_DEV" # ---- зарегистрировать ключевой носитель (vdmkdev читает ключ с флешки) ---- -systemctl restart vdmkdev.service >/dev/null 2>&1 || /etc/init.d/vdmkdev restart >/dev/null 2>&1 || true +keysvc_restart sleep 2 # ---- ПЕРЕСОБРАТЬ совместимый справочник на флешке (архивный gdbm malformed) ---- @@ -314,17 +329,18 @@ keydiag(){ # что видит ИШ: смонтирована ли ключев local m v m=$(findmnt -rn -o SOURCE,FSTYPE "$DEFAULT_KEYMEDIA" 2>/dev/null | grep -v autofs | head -1) v=$(runuser -u igate -- env HOME=/var/lib/igate sh -c 'ls -1L "$HOME"/.Validata/vdkeys/*/*.vdk "$HOME"/.Validata/vdkeys/*.vdk 2>/dev/null' | xargs -r -n1 basename | tr '\n' ' ') - KEYDIAG="флешка в $DEFAULT_KEYMEDIA: ${m:-не смонтирована}; ключи, видимые ИШ: ${v:-нет}" + KEYDIAG="флешка в $DEFAULT_KEYMEDIA: ${m:-не смонтирована}; ключи, видимые ИШ: ${v:-нет}; служба ключей Валидаты (vdcrysvc): $(pgrep -x vdcrysvc >/dev/null && echo работает || echo 'не запущена')" } if [ "$IGATE_RES" = connected ] || [ "$IGATE_RES" = pending-channel ]; then - if ! keysign && [ -n "$TARGET_DEV" ] && [ -b "$TARGET_DEV" ] && \ - [ -z "$(findmnt -rn -o FSTYPE "$DEFAULT_KEYMEDIA" 2>/dev/null | grep -v autofs)" ]; then - # автомонтирование не сработало — смонтировать флешку напрямую (только чтение, под igate) и проверить ещё раз - FT=$(blkid -s TYPE -o value "$TARGET_DEV" 2>/dev/null) - systemctl stop "$(systemd-escape -p --suffix=automount "$DEFAULT_KEYMEDIA")" 2>/dev/null; umount "$DEFAULT_KEYMEDIA" 2>/dev/null - case "$FT" in vfat|exfat|ntfs*) MO="ro,uid=$(id -u igate),gid=$(id -g igate),fmask=0133,dmask=0022" ;; *) MO="ro" ;; esac - mkdir -p "$DEFAULT_KEYMEDIA"; mount -o "$MO" "$TARGET_DEV" "$DEFAULT_KEYMEDIA" 2>/dev/null - systemctl restart vdmkdev.service >/dev/null 2>&1; sleep 2 + if ! keysign; then + if [ -n "$TARGET_DEV" ] && [ -b "$TARGET_DEV" ] && [ -z "$(findmnt -rn -o FSTYPE "$DEFAULT_KEYMEDIA" 2>/dev/null | grep -v autofs)" ]; then + # автомонтирование не сработало — смонтировать флешку напрямую (только чтение, под igate) + FT=$(blkid -s TYPE -o value "$TARGET_DEV" 2>/dev/null) + systemctl stop "$(systemd-escape -p --suffix=automount "$DEFAULT_KEYMEDIA")" 2>/dev/null; umount "$DEFAULT_KEYMEDIA" 2>/dev/null + case "$FT" in vfat|exfat|ntfs*) MO="ro,uid=$(id -u igate),gid=$(id -g igate),fmask=0133,dmask=0022" ;; *) MO="ro" ;; esac + mkdir -p "$DEFAULT_KEYMEDIA"; mount -o "$MO" "$TARGET_DEV" "$DEFAULT_KEYMEDIA" 2>/dev/null + fi + keysvc_restart # служба ключей заново видит носитель keysign fi [ "$KEYCHECK" = ok ] || keydiag