<?xml version="1.0" encoding="UTF-8" ?>

<bugzilla version="5.2"
          urlbase="https://bugzilla.altlinux.org/"
          
          maintainer="jenya@basealt.ru"
>

    <bug>
          <bug_id>40519</bug_id>
          
          <creation_ts>2021-07-17 12:21:33 +0300</creation_ts>
          <short_desc>syskeeper RPM::Pre-Install-Pkgs hook fails on massive APT updates</short_desc>
          <delta_ts>2023-08-11 16:23:01 +0300</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>4</classification_id>
          <classification>Development</classification>
          <product>Sisyphus</product>
          <component>syskeeper</component>
          <version>unstable</version>
          <rep_platform>all</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>CLOSED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P5</priority>
          <bug_severity>major</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Nikolay A. Fetisov">naf</reporter>
          <assigned_to name="Nikolay A. Fetisov">naf</assigned_to>
          <cc>naf</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>200627</commentid>
    <comment_count>0</comment_count>
      <attachid>9520</attachid>
    <who name="Nikolay A. Fetisov">naf</who>
    <bug_when>2021-07-17 12:21:33 +0300</bug_when>
    <thetext>Created attachment 9520
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:
&quot;xargs| (if [ -x /usr/sbin/syskeeper ]; then /usr/sbin/syskeeper; fi)&quot;;

Хотя в этом случае xargs также завершится с ошибкой, вида
xargs: echo: terminated by signal 13
, но syskeeper нормально отработает, RPM::Pre-Install-Pkgs завершится успешно,
и APT пойдёт дальше обновлять систему.


И, проблема сейчас затрагивает и M90P, и M80P. И обновления их до Sisyphus.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>231255</commentid>
    <comment_count>1</comment_count>
    <who name="Repository Robot">repository-robot</who>
    <bug_when>2023-08-11 16:23:01 +0300</bug_when>
    <thetext>syskeeper-0.11-alt2 -&gt; sisyphus:

 Fri Aug 11 2023 Nikolay A. Fetisov &lt;naf@altlinux&gt; 0.11-alt2
 - fix SIGPIPE in the RPM::Pre-Install-Pkgs hook (Closes: 40519)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>9520</attachid>
            <date>2021-07-17 12:21:33 +0300</date>
            <delta_ts>2021-07-17 12:21:33 +0300</delta_ts>
            <desc>Fix syskeeper hook to avoid SIGPIPE on STDIN buffer overflow</desc>
            <filename>syskeeper-0.11-apt_hook.patch</filename>
            <type>text/plain</type>
            <size>450</size>
            <attacher name="Nikolay A. Fetisov">naf</attacher>
            
              <data encoding="base64">LS0tIGFwdC9hcHQuY29uZi5kL3N5c2tlZXBlci5jb25mLm9yaWcgIDIwMjEtMDYtMjYgMTU6NTM6
NTcuMDI3NzQwNjYyICswMzAwCisrKyBhcHQvYXB0LmNvbmYuZC9zeXNrZWVwZXIuY29uZiAgICAg
ICAyMDIxLTA3LTE3IDEwOjQ4OjI2LjIyODc4NDcyNCArMDMwMApAQCAtMSwyICsxLDIgQEAKLVJQ
TTo6UHJlLUluc3RhbGwtUGtncyB7ICJpZiBbIC14IC91c3Ivc2Jpbi9zeXNrZWVwZXIgXTsgdGhl
biAvdXNyL3NiaW4vc3lza2VlcGVyOyBmaSI7IH07CitSUE06OlByZS1JbnN0YWxsLVBrZ3MgeyAi
eGFyZ3N8IChpZiBbIC14IC91c3Ivc2Jpbi9zeXNrZWVwZXIgXTsgdGhlbiAvdXNyL3NiaW4vc3lz
a2VlcGVyOyBmaSkiOyB9OwogUlBNOjpQb3N0LUludm9rZSAgICAgIHsgImlmIFsgLXggL3Vzci9z
YmluL3N5c2tlZXBlciBdOyB0aGVuIC91c3Ivc2Jpbi9zeXNrZWVwZXI7IGZpIjsgfTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>