я в диалоге с Claude полностью восстановил работоспособность системы и исправил ошибки возникшие в процессе обновления из-за его прерывания, что позволило избежать переустановки системы и другого ПО и восстановления конфигурации, хорошо что я не стал слушать вашего инженера, еще раз убедился что варенбоард деайвайщики безответствееые, попробую загрузить сюда резюме моего чата с Clude
Подведи итоги и суммаризируй наш с тобой диалог. Из-за чего призошел первоначальный сбой в процедуре обновления? Виной этого сбоя была ошибка заложенная в скрипте wb-release --update-debian-release? Опиши как была проведена диагностика сбоя и какие действия мы предприняли для его исправления? Как была проведена диагностика корректности обновления после восстановления от сбоя?
Итоги
Контроллер Wiren Board 7 успешно переведён с Debian 11 (bullseye) на Debian 13.7 (trixie). Прерванное обновление оставило систему в полуобновлённом состоянии, и её удалось восстановить без перепрошивки.
Причина первоначального сбоя
wb-release --update-debian-release запустил apt-get dist-upgrade со сменой suite на trixie. Из лога видно, что apt распаковал новые libzstd1, libblkid1 и libacl1, собранные под glibc 2.34-2.38, а новый libc6 ещё не был установлен. Старая glibc 2.31 осталась. tar линкуется с libacl.so.1, поэтому он перестал запускаться, и dpkg-deb не смог распаковать ни один следующий пакет, включая сам libc6. Получился замкнутый круг. Следом сломались systemctl, apt-mark и Python-модуль systemd, поэтому скрипт не смог ни откатиться, ни перезапуститься.
Была ли это ошибка в скрипте
Утверждать это я не могу, потому что код скрипта не видел. Известно следующее:
В журнале apt команда запущена с -o APT::Immediate-Configure=0, --force-confold и --allow-downgrades. Параметр Immediate-Configure=0 отключает немедленную настройку пакетов и может быть причиной неудачного порядка, но это моё предположение, а не доказанный факт.
Debian официально поддерживает обновление только на один релиз за раз, а здесь был прямой переход 11 → 13. Это ещё один возможный фактор.
Зависимость libacl1 → libc6 (>= 2.38) обычная, а не Pre-Depends, поэтому apt формально мог распаковать её раньше libc6.
Скрипт откатил источники на bullseye, но систему в рабочее состояние вернуть не смог. Кроме того, повторные запуски в нестабильном состоянии удалили openssh-*, nfs-common и task-wb-base-system.
Разумно передать разработчикам Wiren Board логи этого перехода и вывод /var/log/apt/history.log.
Диагностика сбоя
Я разобрал лог: нашёл первую ошибку (libacl1 требует GLIBC_2.38) и цепочку падений за ней. Затем по ls /var/cache/apt/archives/ выяснил, что в кэше есть все пакеты trixie, включая libc6, а старых библиотек bullseye нет. Это изменило план: вместо отката я пошёл вперёд, к новой glibc.
Исправление
Написали скрипт на Python, который распаковывает .deb без tar и подменяет файлы атомарно через rename. Через него положили libc6 2.41 из кэша. После этого ожили tar, systemctl, импорт systemd и sshd.
Привели базу dpkg в соответствие с файлами: dpkg -i для gcc-14-base, libgcc-s1, locales, libc6, libc-bin, затем libc-l10n и dpkg --configure -a. Ошибки --dry-run по libcrypt1 и PAM были ложным срабатыванием симуляции: она не учитывает замену соседних пакетов.
Вы отключили watchdog, зашли по консоли и перезапускали скрипт, пока он не завершился. Система обновилась до trixie, после перезагрузки почти всё заработало.
Не работал SSH. По dpkg -l и apt/history.log выяснилось, что openssh-server, openssh-client и openssh-sftp-server находились в состоянии rc, то есть были удалены. Дело было не в масках. Мы переустановили их из trixie (sshd -t проверил старый конфиг) и запустили службу.
Watchdog вы вернули сами.
Проверка корректности после восстановления
Версия системы: /etc/debian_version показывает 13.7, os-release показывает trixie, wb-release показывает wb-2609, target wb7/trixie. Ядро осталось 5.10.35-wb182, как и должно быть для WB7.
Состояние пакетов: dpkg --audit пуст, apt-get -f install -s предлагает 0 изменений, apt-get -s autoremove ничего не хочет удалять. Остатков bullseye осталось немного: libssl1.1, libsepol1, dnsutils и часть пакетов в состояниях rc и ri.
Источники: основной репозиторий Wiren Board и зеркала Debian указывают на trixie. Исключение составляет Docker, он всё ещё bullseye.
Службы: systemctl --failed пуст, nginx, mosquitto, wb-mqtt-serial, wb-rules, wb-mqtt-db, wb-mqtt-gpio работают. Список замаскированных юнитов выглядит штатно: ssh.service больше не замаскирован.
Обновления: оставалось 10 обновлений безопасности nginx, они установились.
Журнал ошибок: разобран. Сообщения ядра с -517 и ошибки wb-rules в первые секунды после загрузки связаны с порядком старта. «All groups are disabled» у mbgate, opcua и iec104 говорит только о ненастроенных службах.
Чистка: симуляция apt-get purge для оставшихся пакетов bullseye чистая, затрагиваются только устаревшие библиотеки.
Что осталось
Выполнить purge остатков bullseye (симуляция уже чистая).
Сравнить новые конфиги *.dpkg-new и *.dpkg-dist (wb-hardware.conf, mosquitto.conf, knxd.conf и другие) с вашими: из-за --force-confold обновления в них не применились.
Решить судьбу Docker-репозитория для bullseye: перевести на trixie или удалить.
Сделать резервную копию конфигов.
Передать лог сбоя разработчикам Wiren Board.