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

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

    <bug>
          <bug_id>35405</bug_id>
          
          <creation_ts>2018-09-17 18:27:23 +0300</creation_ts>
          <short_desc>запуск триггеров навсегда отключается  при запуске apt-get install через ssh</short_desc>
          <delta_ts>2022-09-01 15:29:20 +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>rpm</component>
          <version>unstable</version>
          <rep_platform>all</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>regression, usability</keywords>
          <priority>P3</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>42201</dependson>
          <blocked>34231</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Sheplyakov">asheplyakov</reporter>
          <assigned_to name="placeholder@altlinux.org">placeholder</assigned_to>
          <cc>aen</cc>
    
    <cc>asy</cc>
    
    <cc>at</cc>
    
    <cc>avm</cc>
    
    <cc>boyarsh</cc>
    
    <cc>darktemplaralt</cc>
    
    <cc>evg</cc>
    
    <cc>glebfm</cc>
    
    <cc>imz</cc>
    
    <cc>inger</cc>
    
    <cc>iv</cc>
    
    <cc>lav</cc>
    
    <cc>ldv</cc>
    
    <cc>mike</cc>
    
    <cc>placeholder</cc>
    
    <cc>rider</cc>
    
    <cc>vt</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>174205</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Sheplyakov">asheplyakov</who>
    <bug_when>2018-09-17 18:27:23 +0300</bug_when>
    <thetext>Исходное состояние: машина ALT p8 (для определенности K workstation), для определенности назовем ее farhost

Действия:

1) Заменяем репозиторий на Sisyphus

   ssh root@farhost &quot;find /etc/apt/sources.list.d -type f -name &apos;*.list&apos; | xargs -n1 sed -re &apos;s;^([#]*\s*rpm)\s+[[][^]]+[]](.*)$;\1 \2;&apos; -re &apos;s;p8/branch/;Sisyphus/;&apos; -i&quot;

2) обновляем apt &amp; rpm

  ssh root@farhost &apos;apt-get update &amp;&amp; apt-get install -y rpm&apos;


Ожидаемый результат: либо

а) корректное обновление пакетов apt, rpm, и их зависимостей, 
б) какая-нибудь ошибка (выход с статусом != 0, желательно с более-менее понятным сообщением)

Наблюдаемый результат:

Обновление apt, rpm, и их зависимостей завершается нормально (apt-get выходит с кодом 0), однако остается файл   /var/lib/rpm/delay-posttrans-filetriggers. В результате при дальнейшей установке и/или обновлении пакетов не выполняется ни один filetrigger, в результате чего нарушается работоспособность обновленных/установленных пакетов (не обновляются альтернативы, не запускается ldconfig при установке библиотек с нетривиальными /etc/ld.so.conf.d/*.conf, и т.п.)

Предполагаемая причина:

apt-get install не ждет, пока завершится отложенное выполнение триггеров, а отложенное выполнение триггеров болезненно реагирует на SIGHUP


Костыль:

ssh root@farhost &apos;apt-get install -y rpm &amp;&amp; sleep 15&apos;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>174206</commentid>
    <comment_count>1</comment_count>
    <who name="Aleksei Nikiforov">darktemplaralt</who>
    <bug_when>2018-09-17 18:28:58 +0300</bug_when>
    <thetext>А screen или tmux на удалённой машине помогает?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>174209</commentid>
    <comment_count>2</comment_count>
    <who name="Alexey Sheplyakov">asheplyakov</who>
    <bug_when>2018-09-17 18:44:38 +0300</bug_when>
    <thetext>&gt; А screen или tmux на удалённой машине помогает?

Вопрос не понят.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>174213</commentid>
    <comment_count>3</comment_count>
    <who name="Anton Farygin">rider</who>
    <bug_when>2018-09-17 19:31:07 +0300</bug_when>
    <thetext>Это, наверное, ещё происходит при конфигурации с systemd ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>174214</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Sheplyakov">asheplyakov</who>
    <bug_when>2018-09-17 19:36:02 +0300</bug_when>
    <thetext>&gt; Это, наверное, ещё происходит при конфигурации с systemd?

Да.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>174215</commentid>
    <comment_count>5</comment_count>
    <who name="Anton Farygin">rider</who>
    <bug_when>2018-09-17 19:41:25 +0300</bug_when>
    <thetext>В systemd есть настройка - прибивать пользовательские процессы после закрытия сеанса.
KillUserProcesses=no

https://www.freedesktop.org/software/systemd/man/logind.conf.html

попробуйте выставить в это значение, скорее всего поможет.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>174216</commentid>
    <comment_count>6</comment_count>
    <who name="Alexey Sheplyakov">asheplyakov</who>
    <bug_when>2018-09-17 19:53:48 +0300</bug_when>
    <thetext>&gt; В systemd есть настройка - прибивать пользовательские процессы после закрытия
сеанса.

Дык и без systemd есть масса ситуаций, к примеру, 

apt-get -y dist-upgrade &amp;&amp; shutdown -r now

(тут даже и по ssh ходить не надо).

Ошибка в том, что apt выходит раньше, чем завершается обновление, а не в том, что злой systemd что-то там убивает. Причем проявляется эта ошибка совершенно в неожиданных ситуациях, &quot;на ровном месте&quot;.

P.S. А костыль я и сам придумал (&amp;&amp; sleep 10)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>174236</commentid>
    <comment_count>7</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2018-09-18 09:34:26 +0300</bug_when>
    <thetext>Это apt или rpm не ждёт завершения файлтриггеров?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>174237</commentid>
    <comment_count>8</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2018-09-18 09:37:05 +0300</bug_when>
    <thetext>или речь идёт исключительно об обновлении пакета rpm?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>174238</commentid>
    <comment_count>9</comment_count>
    <who name="Anton Farygin">rider</who>
    <bug_when>2018-09-18 09:38:49 +0300</bug_when>
    <thetext>После запуска apt get dist-upgrade файлтриггеры rpm выполняются в фоновом режиме.

Кто там из них не ждёт - непонятно. скорее всего rpm/librpm.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>174245</commentid>
    <comment_count>10</comment_count>
    <who name="Ivan A. Melnikov">iv</who>
    <bug_when>2018-09-18 12:18:00 +0300</bug_when>
    <thetext>&gt; Ошибка в том, что apt выходит раньше, чем завершается обновление.

Это не баг, это фича^{tm}. Не сдержусь и распишу подробности.

Файлтриггеры намеренно откладываются[1][2] чтобы они выполнялись после перестроения базы rpm; а это может происходить только после того, как apt, использующий rpm как библиотеку, завершит работу.

[1]: http://git.altlinux.org/gears/r/rpm.git?p=rpm.git;a=blob;f=alt/rpm.spec;h=925462302b2cceaf05cdd10416385061c65e1394#l358
[2]: http://git.altlinux.org/gears/r/rpm.git?p=rpm.git;a=blob;f=scripts/postupdate.in;h=519efcfa1d5670809fedb60b318efe7a5b7ae925

Так что их вообще никто не ждёт, и ждать их некому (кроме пользователя), и это как бы by design.

Проблемы же тут видятся две, и хотелось бы посмотреть на них отдедельно.

Во-первых, пользователь, похоже, может красиво запороть себе систему невинно выглядящим `apt-get dist-upgrade &amp;&amp; reboot`, если в этом dist-upgrade обновился rpm.

Во-вторых, чтобы вывести систему из этого состояния необходимы нетривиальные действия вроде запуска /usr/lib/rpm/postupdate вручную.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>174247</commentid>
    <comment_count>11</comment_count>
    <who name="Anton Farygin">rider</who>
    <bug_when>2018-09-18 12:43:58 +0300</bug_when>
    <thetext>пример с ssh выглядит более реалистичным.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>174287</commentid>
    <comment_count>12</comment_count>
    <who name="Alexey Sheplyakov">asheplyakov</who>
    <bug_when>2018-09-19 14:19:09 +0300</bug_when>
    <thetext>&gt; пример с ssh выглядит более реалистичным.

Мне удалось &quot;вступить&quot; в оба варианта на практике.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>174288</commentid>
    <comment_count>13</comment_count>
    <who name="Alexey Sheplyakov">asheplyakov</who>
    <bug_when>2018-09-19 14:27:51 +0300</bug_when>
    <thetext>Более изящный костыль:

sudo systemd-run --service-type=forking --wait apt-get install -y rpm

systemd запускает &quot;временный&quot; сервис и дожидается, пока не выйдут все процессы-потомки (благодаря --service-type=forking)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>174301</commentid>
    <comment_count>14</comment_count>
    <who name="Michael Shigorin">mike</who>
    <bug_when>2018-09-19 16:41:29 +0300</bug_when>
    <thetext>Приколачивать rpm к systemd из-за корявости systemd -- это даже не костыль...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>174302</commentid>
    <comment_count>15</comment_count>
    <who name="Anton Farygin">rider</who>
    <bug_when>2018-09-19 16:46:12 +0300</bug_when>
    <thetext>Нет, конечно корявость systemd тут не при чём. Он позволяет исправить архитектуру обновления apt + rpm. 
Ведь при apt-get -y dist-upgrade &amp;&amp; reboot 
systemd может и не быть.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>174303</commentid>
    <comment_count>16</comment_count>
    <who name="Michael Shigorin">mike</who>
    <bug_when>2018-09-19 16:50:18 +0300</bug_when>
    <thetext>Уход в фон был, как мне кажется, сделан из соображений удобства человека -- тогда уж разумней переделать на синхрон и всё.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>174304</commentid>
    <comment_count>17</comment_count>
    <who name="Anton Farygin">rider</who>
    <bug_when>2018-09-19 16:52:27 +0300</bug_when>
    <thetext>если это возможно. я не вижу много удобств в фоновом выполнении скриптов после установки - мало ли что вылезет в них плохого. Как отработать код возврата ?

Сталкивался уже с ситуацией, когда один кривой скрипт в filetrigger ломает запуск всех остальных.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>174306</commentid>
    <comment_count>18</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2018-09-19 16:53:48 +0300</bug_when>
    <thetext>(In reply to comment #16)
&gt; Уход в фон был, как мне кажется, сделан из соображений удобства человека --

Уход в фон был сделан для того, чтобы дождаться завершения всех пользователей старой базы данных.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>174307</commentid>
    <comment_count>19</comment_count>
    <who name="Anton Farygin">rider</who>
    <bug_when>2018-09-19 16:55:11 +0300</bug_when>
    <thetext>Это для перестройки базы. а для filetrigger ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>174308</commentid>
    <comment_count>20</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2018-09-19 17:02:29 +0300</bug_when>
    <thetext>(In reply to comment #19)
&gt; Это для перестройки базы.

Да, и это сейчас происходит при каждом обновлении пакета rpm.

&gt; а для filetrigger ?

Обычно файлтриггеры выполняются синхронно по окончании транзакции.

Выполнение файлтриггеров откладывается и происходит в фоне только в одном случае - при обновлении пакета rpm с 4.0.4:

%triggerpostun -- rpm &lt;= 4.0.4
touch /var/lib/rpm/delay-posttrans-filetriggers</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175222</commentid>
    <comment_count>21</comment_count>
    <who name="Sergey Y. Afonin">asy</who>
    <bug_when>2018-10-23 10:14:27 +0300</bug_when>
    <thetext>(In reply to comment #5)

&gt; В systemd есть настройка - прибивать пользовательские процессы после закрытия
&gt; сеанса.
&gt; KillUserProcesses=no

На всякий случай о моменте, когда оно началось, и почему:
https://lists.altlinux.org/pipermail/sisyphus/2018-April/366620.html

&quot;Теперь значение по умолчанию default-kill-user-processes=true&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175364</commentid>
    <comment_count>22</comment_count>
    <who name="Alexey Sheplyakov">asheplyakov</who>
    <bug_when>2018-10-28 19:54:55 +0300</bug_when>
    <thetext>&gt; На всякий случай о моменте, когда оно началось, и почему:
https://lists.altlinux.org/pipermail/sisyphus/2018-April/366620.html

Вызывающе неверная информация.

Проблема в том, что apt выходит раньше, чем завершаются триггеры. Именно поэтому

apt-get dist-upgrade -y &amp;&amp; shutdown -r now

оставляет систему в &quot;интересном&quot; состоянии

P.S. Подход &quot;во всем виноват systemd&quot; не позволяет ничего понять (не говоря уж об исправлении)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175365</commentid>
    <comment_count>23</comment_count>
    <who name="Sergey Y. Afonin">asy</who>
    <bug_when>2018-10-28 20:24:14 +0300</bug_when>
    <thetext>(In reply to comment #22)

&gt; Проблема в том, что apt выходит раньше, чем завершаются триггеры. Именно
&gt; поэтому

Нет, проблема в том, что systemd прибивает процессы, когда это, скажем так, не очень нужно. Или очень не нужно.

&gt; apt-get dist-upgrade -y &amp;&amp; shutdown -r now

А что же не &quot;... &amp;&amp; reboot -f&quot; то сразу.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175366</commentid>
    <comment_count>24</comment_count>
    <who name="Sergey Y. Afonin">asy</who>
    <bug_when>2018-10-28 20:33:05 +0300</bug_when>
    <thetext>(In reply to comment #22)

&gt; P.S. Подход &quot;во всем виноват systemd&quot; не позволяет ничего понять (не говоря уж
&gt; об исправлении)

По-моему тут всё разобрано и совершенно понятно. И, кстати, этот баг - явный кандидат на WONTFIX, так как единственное решение - это kill-user-processes=no ввиду того, что и базу перестраивать, и триггреры исполнять после обновления 4.0.4 &gt; 4.13 надо после завершения rpm. Но сделать этого нельзя ввиду того, рази чего было сделано true.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175374</commentid>
    <comment_count>25</comment_count>
    <who name="Alexey Sheplyakov">asheplyakov</who>
    <bug_when>2018-10-29 14:48:01 +0300</bug_when>
    <thetext>&gt; единственное решение - это kill-user-processes=no

проблема в том, что apt выходит раньше, чем завершаются триггеры, потому пользователь (или скрипт, запущенный пользователем), не может определить, когда обновление завершилось и можно безопасно запустить следующее действие (например, reboot). apt вынужден выходить до запуска триггеров по причине тупости librpm. Более подробно изложено в https://bugzilla.altlinux.org/show_bug.cgi?id=35405#c10

&gt; этот баг - явный кандидат на WONTFIX

Сколько ярлыков ни приклей, проблема не перестанет от этого существовать: обновление может легко и без видимых причин запороть систему, и как ее потом выводить из этого состояния -- совершенно не очевидно.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175393</commentid>
    <comment_count>26</comment_count>
    <who name="Sergey Y. Afonin">asy</who>
    <bug_when>2018-10-30 10:41:46 +0300</bug_when>
    <thetext>(In reply to comment #25)

&gt; apt вынужден выходить до запуска триггеров по причине тупости librpm.
&gt; Более подробно изложено в comment #10

Я, вообще-то, умею читать. И там написно, что это - не баг.

&gt; &gt; этот баг - явный кандидат на WONTFIX
&gt; 
&gt; Сколько ярлыков ни приклей, проблема не перестанет от этого существовать:
&gt; обновление может легко и без видимых причин запороть систему, и как ее потом
&gt; выводить из этого состояния -- совершенно не очевидно.

Автоматическое обновление. Но автоматическое обновление всегда опасно и само по себе. Надо просто отдавать себе в этом отчёт. А в скрипте, на самом деле, и перестроение базы можно отследить, и работу триггеров. ps в помощь, что называется.

В качестве рекомендации, &quot;&amp;&amp; reboot&quot; я бы вообще никогда не советовал. Всегда надо посмотреть, что там как прошло, рестарт сервисов и т.п.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175394</commentid>
    <comment_count>27</comment_count>
    <who name="Anton Farygin">rider</who>
    <bug_when>2018-10-30 10:44:40 +0300</bug_when>
    <thetext>Я согласен с тем, что обновление должно уметь проходить в автоматическом режиме и для этого было бы отлично иметь инструмент, отслеживающий окончания процесса обновления.

По идее, если отменить запуск filetrigger в background, то должно стать легче.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175403</commentid>
    <comment_count>28</comment_count>
    <who name="Alexey Sheplyakov">asheplyakov</who>
    <bug_when>2018-10-30 15:12:52 +0300</bug_when>
    <thetext>&gt; А в скрипте, на самом деле, и перестроение базы можно отследить, и работу триггеров. ps в помощь, что называется.

Автоматизация 80 lvl. Вам не стыдно?

&gt; В качестве рекомендации, &quot;&amp;&amp; reboot&quot; я бы вообще никогда не советовал. Всегда
надо посмотреть, что там как прошло, рестарт сервисов и т.п.

То есть Вы утверждаете, что apt-rpm -- настолько ненадежный инструмент, что результат его работы нужно всегда проверять вручную?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175405</commentid>
    <comment_count>29</comment_count>
    <who name="Alexey Sheplyakov">asheplyakov</who>
    <bug_when>2018-10-30 15:44:01 +0300</bug_when>
    <thetext>А почему, собственно, apt&apos;у обязательно нужно завершиться для перестройки rpmdb?

$ git grep -n rpmtsOpenDB
apt-pkg/rpm/rpmhandler.cc:405:   if (rpmtsOpenDB(Handler, O_RDONLY) != 0)
apt-pkg/rpm/rpmpm.cc:802:   if (rpmtsOpenDB(TS, O_RDWR) != 0)
apt-pkg/rpm/rpmsystem.cc:263:   if (rpmtsOpenDB(ts, O_RDONLY))

$ git grep -e &apos;rpmtsCloseDB&apos; |wc -l
0

А потому, что он умеет открывать rpmdb, но не умеет ее закрывать.

P.S. Жду новых удивительных историй о том, что это не баг, и о том, что завершения триггеров можно дождаться с помощью ps</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175418</commentid>
    <comment_count>30</comment_count>
    <who name="Sergey Y. Afonin">asy</who>
    <bug_when>2018-10-30 19:22:06 +0300</bug_when>
    <thetext>(In reply to comment #28)

&gt; То есть Вы утверждаете, что apt-rpm -- настолько ненадежный инструмент, что
&gt; результат его работы нужно всегда проверять вручную?

Я, наверное, открою страшную тайну, но я скажу. Нет ни одного способа проверить, что произвольный пакет обновился на 100% хорошо. Ни у одного пакетного менеджера, ни в одном дистрибутиве.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175565</commentid>
    <comment_count>31</comment_count>
    <who name="Ivan A. Melnikov">iv</who>
    <bug_when>2018-11-06 13:00:23 +0300</bug_when>
    <thetext>(In reply to comment #29)
[...]
&gt; $ git grep -e &apos;rpmtsCloseDB&apos; |wc -l
&gt; 0

TIMTOWDI. Try `git grep rpmtsFree`.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>214372</commentid>
    <comment_count>32</comment_count>
    <who name="Ivan Zakharyaschev">imz</who>
    <bug_when>2022-09-01 15:24:50 +0300</bug_when>
    <thetext>(In reply to Alexey Sheplyakov from comment #29)
&gt; А почему, собственно, apt&apos;у обязательно нужно завершиться для перестройки
&gt; rpmdb?
&gt; 
&gt; $ git grep -n rpmtsOpenDB
&gt; apt-pkg/rpm/rpmhandler.cc:405:   if (rpmtsOpenDB(Handler, O_RDONLY) != 0)
&gt; apt-pkg/rpm/rpmpm.cc:802:   if (rpmtsOpenDB(TS, O_RDWR) != 0)
&gt; apt-pkg/rpm/rpmsystem.cc:263:   if (rpmtsOpenDB(ts, O_RDONLY))
&gt; 
&gt; $ git grep -e &apos;rpmtsCloseDB&apos; |wc -l
&gt; 0
&gt; 
&gt; А потому, что он умеет открывать rpmdb, но не умеет ее закрывать.
&gt; 
&gt; P.S. Жду новых удивительных историй о том, что это не баг, и о том, что
&gt; завершения триггеров можно дождаться с помощью ps

(In reply to Ivan A. Melnikov from comment #31)
&gt; (In reply to comment #29)
&gt; [...]
&gt; &gt; $ git grep -e &apos;rpmtsCloseDB&apos; |wc -l
&gt; &gt; 0
&gt; 
&gt; TIMTOWDI. Try `git grep rpmtsFree`.

Сейчас в apt-0.5.15lorg2-alt79 есть обёртки над основным процессом, которые выполняют в конце действия из POST_UPDATE_SCRIPT -- туда rpm их запишет (например, перестройку базы данных, я так думаю, с последующим запуском отложенных триггеров).

Мне кажется, что лучше будет это сделать не с помощью обёрток, а внутри функций apt в те моменты по завершении транзакций, когда база данных rpm закрывается. Там, надеюсь, будет ясно, что apt работает с один экземпляром &quot;системного пакетного менеджера&quot; и не будет сомнений, что кто-то ещё держит базу открытой.

В случае apt-shell это будет более правильный подход, потому что он позволяет делать транзакции многократно.

Также это сработает для клиентов libapt (таких как packagekit, synaptic, etc.), которые сами напрямую базу данных rpm не открывают, конечно, т.е. всё нам интересное может контролировать libapt.</thetext>
  </long_desc>
      
      

    </bug>

</bugzilla>