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

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

    <bug>
          <bug_id>36579</bug_id>
          
          <creation_ts>2019-04-10 09:15:02 +0300</creation_ts>
          <short_desc>В момент обновления пакета systemd иногда происходит перезагрузка системы</short_desc>
          <delta_ts>2024-05-19 18:07:06 +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>systemd</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>P3</priority>
          <bug_severity>blocker</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>34231</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Sergey Y. Afonin">asy</reporter>
          <assigned_to name="Alexey Shabalin">shaba</assigned_to>
          <cc>aen</cc>
    
    <cc>arseny</cc>
    
    <cc>iv</cc>
    
    <cc>junior</cc>
    
    <cc>ldv</cc>
    
    <cc>mike</cc>
    
    <cc>rider</cc>
    
    <cc>shaba</cc>
    
    <cc>vsu</cc>
    
    <cc>yukh</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>180701</commentid>
    <comment_count>0</comment_count>
    <who name="Sergey Y. Afonin">asy</who>
    <bug_when>2019-04-10 09:15:02 +0300</bug_when>
    <thetext>Есть два подтверждённых случая и один вероятный.

Обновление p8 -&gt; sisyphus (до 241-alt3):
https://lists.altlinux.org/pipermail/devel/2019-March/207479.html

Обновление в рамках sisyphus (до 241-alt4):
https://lists.altlinux.org/pipermail/sisyphus/2019-April/367833.html

Вероятный случай:
https://lists.altlinux.org/pipermail/devel/2019-March/207482.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180702</commentid>
    <comment_count>1</comment_count>
    <who name="Anton Farygin">rider</who>
    <bug_when>2019-04-10 09:31:34 +0300</bug_when>
    <thetext>Да, это очень серьёзная проблема. Но мы пока не умеем её воспроизводить.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180728</commentid>
    <comment_count>2</comment_count>
    <who name="Anton Farygin">rider</who>
    <bug_when>2019-04-10 17:30:14 +0300</bug_when>
    <thetext>Проблема найдена и будет исправлена - рестарт pid 1 надо перенести в файлтриггер.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180729</commentid>
    <comment_count>3</comment_count>
    <who name="Anton Farygin">rider</who>
    <bug_when>2019-04-10 17:31:57 +0300</bug_when>
    <thetext>Дим, может быть нам вообще перенести всю работу с перезапуском приложений из post-скриптов в файлтриггеры ?

Или надо что-то делать с порядком обновления пакетов.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180730</commentid>
    <comment_count>4</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2019-04-10 17:44:30 +0300</bug_when>
    <thetext>(In reply to comment #3)
&gt; Дим, может быть нам вообще перенести всю работу с перезапуском приложений из
&gt; post-скриптов в файлтриггеры ?

Нам нужно минимизировать пребывание служб в неконсистентном состоянии во время обновления.

Какие-то можно безболезненно перенести, какие-то могут сильно пострадать от такого переноса.

Я не вижу универсального правила.

&gt; Или надо что-то делать с порядком обновления пакетов.

Например?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180731</commentid>
    <comment_count>5</comment_count>
    <who name="Sergey Y. Afonin">asy</who>
    <bug_when>2019-04-10 17:50:24 +0300</bug_when>
    <thetext>(In reply to comment #2)

&gt; Проблема найдена и будет исправлена - рестарт pid 1 надо перенести в
&gt; файлтриггер.

А нужен ли вообще рестарт pid 1? Что-то как-то странно получить перезагрузку даже после всего обновления, штатно. Или по задумке рестарт pid 1 должен без перезагрузки происходить? Если да, то можно, но тогда вопрос следующий - а с чего перезагрузка? Другой баг?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180732</commentid>
    <comment_count>6</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2019-04-10 17:56:09 +0300</bug_when>
    <thetext>(In reply to comment #5)
&gt; 
&gt; А нужен ли вообще рестарт pid 1?

Да, в этом есть некоторый смысл.
При обновлении SysVinit тоже происходит pid 1 re-exec, можете проверить по логам.
Просто там это обычно происходит без каких-либо шероховатостей.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180734</commentid>
    <comment_count>7</comment_count>
    <who name="Sergey Vlasov">vsu</who>
    <bug_when>2019-04-10 18:36:39 +0300</bug_when>
    <thetext>(В ответ на комментарий №4)
&gt; Нам нужно минимизировать пребывание служб в неконсистентном состоянии во время
&gt; обновления.

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

В некоторых дистрибутивах в попытках решить проблему обновления дошли даже до https://www.freedesktop.org/software/systemd/man/systemd.offline-updates.html (да, в GUI это выглядит именно как оповещение «Перезагрузите компьютер, чтобы установить важные обновления»).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180735</commentid>
    <comment_count>8</comment_count>
    <who name="Anton Farygin">rider</who>
    <bug_when>2019-04-10 18:44:00 +0300</bug_when>
    <thetext>(В ответ на комментарий №4)
&gt; (In reply to comment #3)
&gt; &gt; Или надо что-то делать с порядком обновления пакетов.
&gt; 
&gt; Например?

У нас очерёдность обновления выстраивается как-то так, что в момент перезапуска pid 1 состояние системы не позволяет это сделать корректно. К сожалению, эта ошибка очень тяжело воспроизводится и точно сказать что именно не так с порядком - невозможно. У /sbin/init слишком много зависимостей, много что может пойти не так:
$ ldd /sbin/init
        linux-vdso.so.1 (0x00007fff04025000)
        libc.so.6 =&gt; /lib64/libc.so.6 (0x00007f9adc228000)
        libsystemd-shared-241.so =&gt; /lib/systemd/libsystemd-shared-241.so (0x00007f9adbf9c000)
        librt.so.1 =&gt; /lib64/librt.so.1 (0x00007f9adbf92000)
        libseccomp.so.2 =&gt; /lib64/libseccomp.so.2 (0x00007f9adbf49000)
        libselinux.so.1 =&gt; /lib64/libselinux.so.1 (0x00007f9adbf1e000)
        libmount.so.1 =&gt; /lib64/libmount.so.1 (0x00007f9adbcc6000)
        libpam.so.0 =&gt; /lib64/libpam.so.0 (0x00007f9adbab5000)
        libaudit.so.1 =&gt; /lib64/libaudit.so.1 (0x00007f9adba8c000)
        libkmod.so.2 =&gt; /lib64/libkmod.so.2 (0x00007f9adba73000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f9adc58d000)
        libcap.so.2 =&gt; /lib64/libcap.so.2 (0x00007f9adba6b000)
        libacl.so.1 =&gt; /lib64/libacl.so.1 (0x00007f9adba60000)
        libcryptsetup.so.12 =&gt; /lib64/libcryptsetup.so.12 (0x00007f9adba08000)
        libgcrypt.so.20 =&gt; /lib64/libgcrypt.so.20 (0x00007f9adb8e7000)
        libip4tc.so.0 =&gt; /lib64/libip4tc.so.0 (0x00007f9adb8dd000)
        libidn2.so.0 =&gt; /lib64/libidn2.so.0 (0x00007f9adb8be000)
        liblzma.so.5 =&gt; /lib64/liblzma.so.5 (0x00007f9adb892000)
        liblz4.so.1 =&gt; /lib64/liblz4.so.1 (0x00007f9adb874000)
        libblkid.so.1 =&gt; /lib64/libblkid.so.1 (0x00007f9adb626000)
        libpthread.so.0 =&gt; /lib64/libpthread.so.0 (0x00007f9adb603000)
        libpcre.so.3 =&gt; /lib64/libpcre.so.3 (0x00007f9adb5bc000)
        libdl.so.2 =&gt; /lib64/libdl.so.2 (0x00007f9adb5b7000)
        libz.so.1 =&gt; /lib64/libz.so.1 (0x00007f9adb59a000)
        libcrypto.so.1.1 =&gt; /lib64/libcrypto.so.1.1 (0x00007f9adb2cd000)
        libuuid.so.1 =&gt; /lib64/libuuid.so.1 (0x00007f9adb0c4000)
        libdevmapper.so.1.00 =&gt; /lib64/libdevmapper.so.1.00 (0x00007f9adb06a000)
        libargon2.so.1 =&gt; /lib64/libargon2.so.1 (0x00007f9adb061000)
        libjson-c.so.2 =&gt; /lib64/libjson-c.so.2 (0x00007f9adae56000)
        libgpg-error.so.0 =&gt; /lib64/libgpg-error.so.0 (0x00007f9adae34000)
        libunistring.so.2 =&gt; /lib64/libunistring.so.2 (0x00007f9adacb2000)
        libudev.so.1 =&gt; /lib64/libudev.so.1 (0x00007f9adac8a000)
        libm.so.6 =&gt; /lib64/libm.so.6 (0x00007f9adaaf4000)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180736</commentid>
    <comment_count>9</comment_count>
    <who name="Anton Farygin">rider</who>
    <bug_when>2019-04-10 18:49:18 +0300</bug_when>
    <thetext>(В ответ на комментарий №7)
&gt; 
&gt; С другой стороны, если перезапуск выполняется сразу после обновления пакета
&gt; службы, неконсистентное состояние может возникнуть позже, если по каким-то
&gt; причинам другой пакет, используемый службой, обновляется хоть и в этой же
&gt; транзакции, но позже. Подобная ситуация может сложиться, например, при выносе
&gt; плагинов в отдельные подпакеты, или из-за особенностей локальной конфигурации
&gt; службы. Причём такая неконсистентность уже не исправится автоматически, а
&gt; сохранится либо до ручного перезапуска службы, либо до перезагрузки.

Я не так давно эту проблему чинил в apache и php - в некоторых случаях порядок обновления пакетов выстраивался так, что основная служба обновлялась раньше модулей и перезапуск сервиса был в момент неконсистентного состояния системы.

Перенос рестарта в файлтриггер решил эту проблему.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180737</commentid>
    <comment_count>10</comment_count>
    <who name="Sergey Y. Afonin">asy</who>
    <bug_when>2019-04-10 20:01:43 +0300</bug_when>
    <thetext>(In reply to comment #6)

&gt; Просто там это обычно происходит без каких-либо шероховатостей.

Что-то пишут про &quot;systemctl daemon-reexec&quot;. Или как раз это и делалось, но что-то пошло не так?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180738</commentid>
    <comment_count>11</comment_count>
    <who name="Sergey Y. Afonin">asy</who>
    <bug_when>2019-04-10 20:18:21 +0300</bug_when>
    <thetext>(In reply to comment #2)

&gt; Проблема найдена и будет исправлена - рестарт pid 1 надо перенести в
&gt; файлтриггер.

Мысль посетила. И что получится? Про reboot при обновлении вообще я высказался уже, что это плохо. Но ещё же и технические детали. Во-первых, могут выполниться не все триггеры, если systemd решит перегрузить ОС, хотя, наверное, можно как-то системдшный триггер последним выполнить. Во-вторых, а как же возможный после триггеров rpm --rebuilddb? Хотя, наверное, там можно сделать паузу, потом проверить, не пошла ли система в перезагрузку. Но как-то всё надёжным не выглядит.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180740</commentid>
    <comment_count>12</comment_count>
    <who name="Anton Farygin">rider</who>
    <bug_when>2019-04-10 20:37:19 +0300</bug_when>
    <thetext>перезапуск pid 1 это не reboot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180741</commentid>
    <comment_count>13</comment_count>
    <who name="Sergey Y. Afonin">asy</who>
    <bug_when>2019-04-10 20:43:48 +0300</bug_when>
    <thetext>(In reply to comment #12)

&gt; перезапуск pid 1 это не reboot.

Баг вообще-то именно про reboot. Или перезагрузка - просто последствие несвоевременного перезапуска, а в нормальной жизни её не должно было случиться никогда?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180745</commentid>
    <comment_count>14</comment_count>
    <who name="Alexey Shabalin">shaba</who>
    <bug_when>2019-04-10 21:32:26 +0300</bug_when>
    <thetext>(В ответ на комментарий №13)
&gt; (In reply to comment #12)
&gt; 
&gt; &gt; перезапуск pid 1 это не reboot.
&gt; 
&gt; Баг вообще-то именно про reboot. Или перезагрузка - просто последствие
&gt; несвоевременного перезапуска, а в нормальной жизни её не должно было случиться
&gt; никогда?

Ну естественно, никто не планировал жёстко перегружать компьютер целиком.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180749</commentid>
    <comment_count>15</comment_count>
    <who name="Sergey Y. Afonin">asy</who>
    <bug_when>2019-04-10 22:22:18 +0300</bug_when>
    <thetext>(In reply to comment #14)

&gt; Ну естественно, никто не планировал жёстко перегружать компьютер целиком.

Что у нас никто не планировал - это я практически не сомневаюсь. :-) Я про сам systemd. Хотелось бы понять, что это именно сбой, а не предусмотренное поведение при перезапуске, пусть и в каких-то очень редких случаях. А то ещё окажется, что они там считают это нормальным.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180750</commentid>
    <comment_count>16</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2019-04-10 22:25:53 +0300</bug_when>
    <thetext>(In reply to comment #15)
&gt; (In reply to comment #14)
&gt; 
&gt; &gt; Ну естественно, никто не планировал жёстко перегружать компьютер целиком.
&gt; 
&gt; Что у нас никто не планировал - это я практически не сомневаюсь. :-) Я про сам
&gt; systemd. Хотелось бы понять, что это именно сбой,

Это авария во время pid 1 re-exec, у systemd такое иногда бывает.
У pid 1 из sysvinit такого не бывает, но он немного попроще. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180751</commentid>
    <comment_count>17</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2019-04-10 22:33:05 +0300</bug_when>
    <thetext>(In reply to comment #7)
&gt; (В ответ на комментарий №4)
&gt; &gt; Нам нужно минимизировать пребывание служб в неконсистентном состоянии во время
&gt; &gt; обновления.
&gt; 
&gt; С другой стороны, если перезапуск выполняется сразу после обновления пакета
&gt; службы, неконсистентное состояние может возникнуть позже, если по каким-то
&gt; причинам другой пакет, используемый службой, обновляется хоть и в этой же
&gt; транзакции, но позже. Подобная ситуация может сложиться, например, при выносе
&gt; плагинов в отдельные подпакеты, или из-за особенностей локальной конфигурации
&gt; службы. Причём такая неконсистентность уже не исправится автоматически, а
&gt; сохранится либо до ручного перезапуска службы, либо до перезагрузки.

Мы можем попробовать разделить все службы на 2 категории:
- те, которые нормально переносят долгое обновление, перезапуск которых можно отложить на окончание транзакции (хотя тут возникают вопросы с порядком перезапуска), например, pid 1;
- те, которые плохо переносят долгое обновление, которые нужно остановить в начале обновления (например, так сделано у нас в postfix) и запустить снова по окончании обновления.

Для упорядочивания перезапуска можно сохранять какую-нибудь информацию для файлтриггера в %post пакетов.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180759</commentid>
    <comment_count>18</comment_count>
    <who name="Michael Shigorin">mike</who>
    <bug_when>2019-04-11 13:31:34 +0300</bug_when>
    <thetext>(В ответ на комментарий №16)
&gt; Это авария во время pid 1 re-exec, у systemd такое иногда бывает.
&gt; У pid 1 из sysvinit такого не бывает, но он немного попроще. :)
&quot;Ты выглядишь так несовременно рядом со мной&quot; (ц)

// подпишусь-ка и я</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181017</commentid>
    <comment_count>19</comment_count>
    <who name="Anton Farygin">rider</who>
    <bug_when>2019-04-19 15:21:58 +0300</bug_when>
    <thetext>в p8 это уже исправлено.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181023</commentid>
    <comment_count>20</comment_count>
    <who name="Sergey Y. Afonin">asy</who>
    <bug_when>2019-04-19 16:54:49 +0300</bug_when>
    <thetext>(In reply to comment #19)

&gt; в p8 это уже исправлено.

В смысле re-exec в триггер перенесён?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181024</commentid>
    <comment_count>21</comment_count>
    <who name="Anton Farygin">rider</who>
    <bug_when>2019-04-19 16:55:24 +0300</bug_when>
    <thetext>да</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182528</commentid>
    <comment_count>22</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2019-06-18 16:18:21 +0300</bug_when>
    <thetext>Каков текущий статус этой темы?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182529</commentid>
    <comment_count>23</comment_count>
    <who name="Anton Farygin">rider</who>
    <bug_when>2019-06-18 16:19:24 +0300</bug_when>
    <thetext>В p8 исправление есть, в Sisyphus не знаю.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182531</commentid>
    <comment_count>24</comment_count>
    <who name="Alexey Shabalin">shaba</who>
    <bug_when>2019-06-18 16:32:13 +0300</bug_when>
    <thetext>В Сизифе тоже исправлено.</thetext>
  </long_desc>
      
      

    </bug>

</bugzilla>