Created attachment 9520 [details] Fix syskeeper hook to avoid SIGPIPE on STDIN buffer overflow Для syskeeper-0.11-alt1 для крупных обновлений системы (где-то от 700 пакетов), в ходе работы syskeeper в обработчике RPM::Pre-Install-Pkgs возникает ошибка, блокирующая работу APT: # apt-get dist-upgrade .... 1179 будет обновлено, 1 новых установлено, 3 пакетов будет заменено, 2 пакетов будет удалено и 4 не будет обновлено. Необходимо получить 0B/1058MB архивов. После распаковки потребуется дополнительно 26,6MB дискового пространства. Продолжить? [Y/n] Y E: Ошибка записи - write (32 Обрыв канала) E: Ошибка выполнения скрипта if [ -x /usr/sbin/syskeeper ]; then /usr/sbin/syskeeper; fi # Согласно apt.conf(5), для RPM::Pre-Install-Pkgs APT передаёт в обработчик список файлов устанавливаемых пакетов, в виде полных путей в /var/cache/apt/archives, построчно, через запись в STDIN. Текущие версии APT в имена файлов добавляют DistTag - итог получается достаточно длинный, порядка 80-100 байт на имя устанавливаемого пакета. При вызове RPM::Pre-Install-Pkgs запускается /usr/sbin/syskeeper, далее APT начинает передавать в STDIN список пакетов. syskeeper STDIN не читает, размер буфера канала, насколько понимаю, 64k. Если список достаточно большой - буфер выбирается, и syskeeper завершается по SIGPIPE. Т.к. вызов RPM::Pre-Install-Pkgs при этом выдаёт ошибку - APT аварийно завершает dist-upgrade до начала собственно обновления пакетов. Лимит сейчас получается порядка 600-700 пакетов. Более крупные обновления невозможны. Как вариант решения - можно пойти путём аналогичным etckeeper, запускать syskeeper в subshell: "xargs| (if [ -x /usr/sbin/syskeeper ]; then /usr/sbin/syskeeper; fi)"; Хотя в этом случае xargs также завершится с ошибкой, вида xargs: echo: terminated by signal 13 , но syskeeper нормально отработает, RPM::Pre-Install-Pkgs завершится успешно, и APT пойдёт дальше обновлять систему. И, проблема сейчас затрагивает и M90P, и M80P. И обновления их до Sisyphus.
syskeeper-0.11-alt2 -> sisyphus: Fri Aug 11 2023 Nikolay A. Fetisov <naf@altlinux> 0.11-alt2 - fix SIGPIPE in the RPM::Pre-Install-Pkgs hook (Closes: 40519)