#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.
Вот три зафиксированых случая воспроизведения.
- 28.06.2024 - alx обновил плату через консоль и больше проблема не проявлялась
- 23.08.2024 - Женя перешил плату по методике и больше проблема не проявлялась
- 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 , 2 months ago
comment:2 by , 2 months ago
А, кажется я вспомнил (как только отправил комментарий)! :) Там было что-то не то с форматом базы открытых ключей, не то с форматом базы trust.db - gpg в плате не понимал формат базы, созданной на хосте (потому что на хосте gpg более новой версии). И я сделал, чтобы база создавалась уже в плате. Кажется так...
Сейчас попробую посмотреть, что там с этими ключами...
comment:3 by , 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 , 2 months ago
Экспериментально установлено, что добавление в стартовый скрипт swd строки
HOME=/home/root
чинит проверку подписей. Почему, пока не понимаю, и что с этим знанием делать, я тоже пока не знаю...
Наверное просто добавлю это в стартовый скрипт и забуду. :)
comment:5 by , 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 , 2 months ago
Честно говоря, я в тупике. Я не представляю, что я могу сделать в этой ситуации. Изучать исходники gnupg в попытках понять, почему создался пустой файл - мне кажется имеет близкие к нулю шансы на успех.
Вопрос к создателю тикета - есть какие-то мысли/предложения?
Мне приходит в голову лишь тупо обновить пакет до более новой версии в надежде, что что-нибудь починится...
comment:8 by , 2 months ago
Replying to san:
У меня каких-то идей нет...
Тогда предлагаю следующее: перед выполнением opkg update веб-сервер будет проверять наличие и размер файла $HOME/.gnupg/trustdb.gpg, и если размер равен нулю, удалять его. Устроит ли тебя такой вариант решения по этому тикету? Заранее могу сказать, что он ничего не гарантирует, так как по единственному случаю нельзя делать вывод обо всех...
follow-up: 12 comment:10 by , 2 months ago
Устроит ли тебя такой вариант решения по этому тикету? Заранее могу сказать, что он ничего не гарантирует, так как по единственному случаю нельзя делать вывод обо всех...
Т.к. вариантов лучше не предвидится, то устроит)
Появилась ещё одна плата, на которой баг воспроизвёлся, можешь проверить на ней решение - она доступна по адресу 192.168.0.226
comment:12 by , 2 months ago
Replying to san:
Появилась ещё одна плата, на которой баг воспроизвёлся, можешь проверить на ней решение - она доступна по адресу 192.168.0.226
Спасибо, я уже проверил в "Нижнем самурае" - мне так удобнее.
Мне кажется, что я что-то уже делал для решения этой проблемы. Ты, случайно, не помнишь, что это было и где? Может тикет такой уже был?