Opened 2 months ago

Closed 2 months ago

Last modified 2 months ago

#733 closed баг (fixed)

Signature check failed при попытке обновления через веб-интерфейс.

Reported by: san Owned by: alx
Priority: средний Milestone: 1 очередь
Component: sw Keywords:
Cc:

Description

На свежепрошитых по методике платах SW-01 несколько раз наблюдалась "странность" - при попытке обновления ПО через веб интерфейс плата говорила Signature check failed, однако если в консоли сказатьopkg update, то ответ Signature check passed.
Вот три зафиксированых случая воспроизведения.

  1. 28.06.2024 - alx обновил плату через консоль и больше проблема не проявлялась
  2. 23.08.2024 - Женя перешил плату по методике и больше проблема не проявлялась
  3. 21.01.2025 - плата в таком состоянии доступна по адресу 192.168.0.227 и с ней можно проводить эксперименты

Платы прошивались по методике разными сотрудниками(первые две Женя, третья Денис) по их словам, методику они не нарушали. Кроме этих плат, в те-же дни было прошито ещё множество плат SW-01, которые ведут себя нормально.

Консоль:

root@sw01:~# opkg update
Downloading https://repo.adc-line.ru/sw-01/ipk/all/Packages.gz.
Inflating https://repo.adc-line.ru/sw-01/ipk/all/Packages.gz.
Updated list of available packages in /var/lib/opkg/all.
Downloading https://repo.adc-line.ru/sw-01/ipk/all/Packages.sig.
Signature check passed.
Downloading https://repo.adc-line.ru/sw-01/ipk/armv5te/Packages.gz.
Inflating https://repo.adc-line.ru/sw-01/ipk/armv5te/Packages.gz.
Updated list of available packages in /var/lib/opkg/armv5te.
Downloading https://repo.adc-line.ru/sw-01/ipk/armv5te/Packages.sig.
Signature check passed.
Downloading https://repo.adc-line.ru/sw-01/ipk/at91sam9g20ek/Packages.gz.
Inflating https://repo.adc-line.ru/sw-01/ipk/at91sam9g20ek/Packages.gz.
Updated list of available packages in /var/lib/opkg/at91sam9g20ek.
Downloading https://repo.adc-line.ru/sw-01/ipk/at91sam9g20ek/Packages.sig.
Signature check passed.

Веб-интерфейс:

Downloading https://repo.adc-line.ru/sw-01/ipk/all/Packages.gz.
Inflating https://repo.adc-line.ru/sw-01/ipk/all/Packages.gz.
Updated list of available packages in /var/lib/opkg/all.
Downloading https://repo.adc-line.ru/sw-01/ipk/all/Packages.sig.
Signature check failed.
Remove wrong Signature file.
Downloading https://repo.adc-line.ru/sw-01/ipk/armv5te/Packages.gz.
Inflating https://repo.adc-line.ru/sw-01/ipk/armv5te/Packages.gz.
Updated list of available packages in /var/lib/opkg/armv5te.
Downloading https://repo.adc-line.ru/sw-01/ipk/armv5te/Packages.sig.
Signature check failed.
Remove wrong Signature file.
Downloading https://repo.adc-line.ru/sw-01/ipk/at91sam9g20ek/Packages.gz.
Inflating https://repo.adc-line.ru/sw-01/ipk/at91sam9g20ek/Packages.gz.
Updated list of available packages in /var/lib/opkg/at91sam9g20ek.
Downloading https://repo.adc-line.ru/sw-01/ipk/at91sam9g20ek/Packages.sig.
Signature check failed.
Remove wrong Signature file.

Change History (12)

comment:1 by alx, 2 months ago

Мне кажется, что я что-то уже делал для решения этой проблемы. Ты, случайно, не помнишь, что это было и где? Может тикет такой уже был?

comment:2 by alx, 2 months ago

А, кажется я вспомнил (как только отправил комментарий)! :) Там было что-то не то с форматом базы открытых ключей, не то с форматом базы trust.db - gpg в плате не понимал формат базы, созданной на хосте (потому что на хосте gpg более новой версии). И я сделал, чтобы база создавалась уже в плате. Кажется так...

Сейчас попробую посмотреть, что там с этими ключами...

Last edited 2 months ago by alx (previous) (diff)

comment:3 by alx, 2 months ago

Проверкой установлены следующие факты:

  • Файл ключей /etc/opkg/trusted.pgp в плате правильный, команда opkg-key list показывает правильный ключ, ошибок/предупреждений не выдает.
  • Перезагрузка платы на ситуацию не влияет - веб-интерфейс по-прежнему показывает плохую подпись.
  • Рестарт swd из веб-интерфейса на ситуацию не влияет - веб-интерфейс по-прежнему показывает плохую подпись.
  • После рестарта swd из консоли проверка подписей проходит успешно.
  • После перезагрузки платы восстанавливается исходное состояние - ошибка проверки подписей.

Предварительный вывод - различие в поведении opkg вызвано различием окружения стартового скрипта, который запускает swd при загрузке платы, и окружения сеанса пользователя при входе через ssh и логин.

Переменные окружения на момент старта swd такие:

ARGS=''
CONSOLE='/dev/console'
DAEMON='/usr/sbin/swd'
DESC='SW daemon'
HOME='/'
IFS=' 	
'
INIT_VERSION='sysvinit-2.86'
NAME='swd'
OPTIND='1'
PATH='/bin:/usr/bin:/sbin:/usr/sbin'
PIDFILE='/var/run/swd.pid'
PPID='261'
PREVLEVEL='N'
PS1='\w \$ '
PS2='> '
PS4='+ '
PWD='/'
RUNLEVEL='5'
TERM='linux'
VERBOSE='no'
previous='N'
runlevel='5'

На первом подозрении - переменные PATH и HOME.

comment:4 by alx, 2 months ago

Экспериментально установлено, что добавление в стартовый скрипт swd строки

HOME=/home/root

чинит проверку подписей. Почему, пока не понимаю, и что с этим знанием делать, я тоже пока не знаю...

Наверное просто добавлю это в стартовый скрипт и забуду. :)

comment:5 by alx, 2 months ago

В каналоге /.gnupg обнаружены следующие файлы:

root@sw01:~# ls -la /.gnupg/
drwx------    2 root     root           688 Jan 21 14:49 .
-rw-r--r--    1 root     root            16 Jan 21 06:24 .#lk0xea1c0.sw01.325
-rw-r--r--    1 root     root            16 Jan 21 06:24 .#lk0xec440.sw01.325
-rw-r--r--    1 root     root            16 Jan 21 06:24 .#lk0xec6d8.sw01.325
drwxrwxr-x   17 root     root          1248 Jan 21 06:24 ..
-rw-------    1 root     root           543 Jan 21 06:24 pubring.gpg
-rw-------    1 root     root             0 Jan 21 06:24 pubring.gpg~
-rw-------    1 root     root             0 Jan 21 06:24 secring.gpg
-rw-------    1 root     root             0 Jan 21 06:24 trustdb.gpg

Необычным выглядит наличие неудаленных лок-файлов и пустой файл trustdb.gpg.

Экспериментально установлено, что после удаления пустого файла trustdb.gpg проверка подписей начинает работать, при этом создается нормальный (непустой) файл trustdb.gpg.

По какой причине файл trustdb.gpg оказался пустым, для меня пока загадка. Наличие неудаленных лок-файлов наводит на мысль о том, что по каким-то причинам процесс gpg был убит в процессе работы...

comment:6 by alx, 2 months ago

Честно говоря, я в тупике. Я не представляю, что я могу сделать в этой ситуации. Изучать исходники gnupg в попытках понять, почему создался пустой файл - мне кажется имеет близкие к нулю шансы на успех.

Вопрос к создателю тикета - есть какие-то мысли/предложения?

Мне приходит в голову лишь тупо обновить пакет до более новой версии в надежде, что что-нибудь починится...

comment:7 by san, 2 months ago

У меня каких-то идей нет...

in reply to:  7 comment:8 by alx, 2 months ago

Replying to san:

У меня каких-то идей нет...

Тогда предлагаю следующее: перед выполнением opkg update веб-сервер будет проверять наличие и размер файла $HOME/.gnupg/trustdb.gpg, и если размер равен нулю, удалять его. Устроит ли тебя такой вариант решения по этому тикету? Заранее могу сказать, что он ничего не гарантирует, так как по единственному случаю нельзя делать вывод обо всех...

comment:9 by alx, 2 months ago

In 2460/sw:

В стартовый скрипт добавлена установка переменной HOME
See #733.

comment:10 by san, 2 months ago

Устроит ли тебя такой вариант решения по этому тикету? Заранее могу сказать, что он ничего не гарантирует, так как по единственному случаю нельзя делать вывод обо всех...

Т.к. вариантов лучше не предвидится, то устроит)

Появилась ещё одна плата, на которой баг воспроизвёлся, можешь проверить на ней решение - она доступна по адресу 192.168.0.226

comment:11 by alx, 2 months ago

Resolution: fixed
Status: newclosed

In 2469/sw:

Веб-сервер перед выполнением opkg update проверяет размер файла
~/.gnupg/trustdb.gpg, и если его размер равен 0, удаляет файл.
Closes #733.

in reply to:  10 comment:12 by alx, 2 months ago

Replying to san:

Появилась ещё одна плата, на которой баг воспроизвёлся, можешь проверить на ней решение - она доступна по адресу 192.168.0.226

Спасибо, я уже проверил в "Нижнем самурае" - мне так удобнее.

Note: See TracTickets for help on using tickets.