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

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

    <bug>
          <bug_id>21793</bug_id>
          
          <creation_ts>2009-09-30 19:59:08 +0400</creation_ts>
          <short_desc>/etc/cron.{daily,weekly}/makewhatis</short_desc>
          <delta_ts>2012-06-20 12:22:09 +0400</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>4</classification_id>
          <classification>Development</classification>
          <product>Sisyphus</product>
          <component>man</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>major</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Valery Inozemtsev">shrek</reporter>
          <assigned_to name="Alexey Gladkov">legion</assigned_to>
          <cc>aen</cc>
    
    <cc>asy</cc>
    
    <cc>dd1email</cc>
    
    <cc>ldv</cc>
    
    <cc>mike</cc>
    
    <cc>sem</cc>
    
    <cc>voins</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>100522</commentid>
    <comment_count>0</comment_count>
    <who name="Valery Inozemtsev">shrek</who>
    <bug_when>2009-09-30 19:59:08 +0400</bug_when>
    <thetext>совершенно не понятен тайный смысл ежедневного запуска по крону makewhatis. операция это ресурсоемкая и не быстрая. и самое место ей в постинстал пакетов с манами (к тому же оно там есть), например
$ rpmquery --scripts man-pages</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100534</commentid>
    <comment_count>1</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2009-09-30 22:57:36 +0400</bug_when>
    <thetext>Не blocker и даже не critical, всё же работает, только не всегда очень быстро.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100537</commentid>
    <comment_count>2</comment_count>
    <who name="Valery Inozemtsev">shrek</who>
    <bug_when>2009-09-30 23:03:05 +0400</bug_when>
    <thetext>скорость не объясняет тайного смысла этой работы</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100538</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2009-09-30 23:40:37 +0400</bug_when>
    <thetext>(В ответ на комментарий №2)
&gt; скорость не объясняет тайного смысла этой работы

Валер, я же тебе рассказывал зачем так было сделано. man-страницы есть не только в man-pages{,-ru,-uk}... они в многих пакетах, но (как ты правильно заметил) эта операция длинная, то в %post-скриптах пакетов её вызывать очень дорого. Поэтому в те далёкие времена был сделан аналог триггеров. Разница в том, что программы ставят руками и маны тоже. Поэтому cron.

Вот то что makewhatis не умеет обновлять индекс, а пересоздаёт его каждый раз снова это действительно очень плохо.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100542</commentid>
    <comment_count>4</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2009-10-01 01:00:36 +0400</bug_when>
    <thetext>/etc/cron.daily/makewhatis, который запускает &quot;makewhatis -u&quot;, выполняется достаточно быстро, поскольку он просто делает find.  Запуск &quot;makewhatis -u&quot; при желании можно завернуть в триггер.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100543</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2009-10-01 01:26:53 +0400</bug_when>
    <thetext>(В ответ на комментарий №4)
&gt; /etc/cron.daily/makewhatis, который запускает &quot;makewhatis -u&quot;, выполняется
&gt; достаточно быстро, поскольку он просто делает find.  Запуск &quot;makewhatis -u&quot; при
&gt; желании можно завернуть в триггер.

Способ соединения довольно суровый:

[ ! -s &quot;$destdir/whatis&quot; ] || cat &quot;$destdir/whatis&quot; &gt;&gt; &quot;$TMPFILE&quot;
tr -s &apos;\n&apos; &lt; &quot;$TMPFILE&quot; | LC_COLLATE=C sort -u &gt; &quot;$destdir/whatis&quot;

мне кажется проще сделать -newer $destdir/whatis и не сортировать whatis каждый день (кто такое только придумал?!), даже если он не изменился.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100544</commentid>
    <comment_count>6</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2009-10-01 01:35:46 +0400</bug_when>
    <thetext>(In reply to comment #5)
&gt; (В ответ на комментарий №4)
&gt; &gt; /etc/cron.daily/makewhatis, который запускает &quot;makewhatis -u&quot;, выполняется
&gt; &gt; достаточно быстро, поскольку он просто делает find.  Запуск &quot;makewhatis -u&quot; при
&gt; &gt; желании можно завернуть в триггер.
&gt; 
&gt; Способ соединения довольно суровый:
&gt; 
&gt; [ ! -s &quot;$destdir/whatis&quot; ] || cat &quot;$destdir/whatis&quot; &gt;&gt; &quot;$TMPFILE&quot;
&gt; tr -s &apos;\n&apos; &lt; &quot;$TMPFILE&quot; | LC_COLLATE=C sort -u &gt; &quot;$destdir/whatis&quot;
&gt; 
&gt; мне кажется проще сделать -newer $destdir/whatis и не сортировать whatis каждый
&gt; день (кто такое только придумал?!), даже если он не изменился.

Можно сделать -cnewer, можно выкинуть tr и просто написать LC_COLLATE=C sort -u -o &quot;$TMPFILE&quot; &quot;$TMPFILE&quot; с последующим cmp.
Хотя, с другой стороны, эта часть и так быстро работает, зачем её улучшать?
Жалуются ведь на makewhatis без -u.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100546</commentid>
    <comment_count>7</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2009-10-01 02:14:27 +0400</bug_when>
    <thetext>(В ответ на комментарий №6)
&gt; Можно сделать -cnewer, можно выкинуть tr и просто написать LC_COLLATE=C sort -u
&gt; -o &quot;$TMPFILE&quot; &quot;$TMPFILE&quot; с последующим cmp.

Проще всего, если $TMPFILE пуст не делать sort вообще.

&gt; Хотя, с другой стороны, эта часть и так быстро работает, зачем её улучшать?

Если программа не эффективна в некоторых режимах, то это не значит, что её не нужно улучшать.

&gt; Жалуются ведь на makewhatis без -u.

Можно добавить этот ключ, можно перенести эту команду в триггер, чтобы выполнение производилось только при установке новых страниц, но я бы хотел поднять более радикальный вопрос: нужен ли whatis вообще ?

Из общения с разными разработчиками я понял, что этим (почти?) никто не пользуется. Я не против улучшать и поддерживать полезную функциональность, но никому не нужную ...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100568</commentid>
    <comment_count>8</comment_count>
    <who name="Sergey Y. Afonin">asy</who>
    <bug_when>2009-10-01 12:25:15 +0400</bug_when>
    <thetext>&gt; /etc/cron.daily/makewhatis, который запускает &quot;makewhatis -u&quot;, выполняется
&gt; достаточно быстро, поскольку он просто делает find. 

find, сам по себе, может выполняться долго. У меня этот процесс тоже не торопится. А где он, кстати, ищет ? Точно только в mandir ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100583</commentid>
    <comment_count>9</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2009-10-01 13:40:46 +0400</bug_when>
    <thetext>(В ответ на комментарий №8)
&gt; find, сам по себе, может выполняться долго. У меня этот процесс тоже не
&gt; торопится. А где он, кстати, ищет ? Точно только в mandir ?

Да.

for mandir in $manpath; do
...
   for i in $SECTIONS; do
...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100840</commentid>
    <comment_count>10</comment_count>
    <who name="Michael Shigorin">mike</who>
    <bug_when>2009-10-05 20:13:42 +0400</bug_when>
    <thetext>(In reply to comment #7)
&gt; нужен ли whatis вообще ?
См. bug #21838</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100861</commentid>
    <comment_count>11</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2009-10-05 22:19:11 +0400</bug_when>
    <thetext>(В ответ на комментарий №10)
&gt; См. bug #21838

Этот FR не содержит ответ на мой вопрос.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100863</commentid>
    <comment_count>12</comment_count>
    <who name="Michael Shigorin">mike</who>
    <bug_when>2009-10-05 22:33:56 +0400</bug_when>
    <thetext>По-моему, закрыть этот FR достаточно, чтоб вопрос не стоял перед тобой. :)

Говоря за себя -- очень редко, но пользуюсь.  Сейчас документацию (в т.ч. man-pages) всё равно обычно изучаю сперва через прицел поисковика.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100865</commentid>
    <comment_count>13</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2009-10-05 22:53:08 +0400</bug_when>
    <thetext>(В ответ на комментарий №12)
&gt; По-моему, закрыть этот FR достаточно, чтоб вопрос не стоял перед тобой. :)

Я от проблем не бегу. Если есть проблема с производительностью, то её нужно решать.

&gt; Говоря за себя -- очень редко, но пользуюсь.  Сейчас документацию (в т.ч.
&gt; man-pages) всё равно обычно изучаю сперва через прицел поисковика.

Это подтверждает моё мнение о том, что эта ущербная база бесполезна.
Я бы вообще выкинул whatis куда подальше в том виде в котором это есть сейчас.

Для тех у кого нет интернета, но кому хочется поискать по тексту манов, я могу сделать скрипт, позволяющий делать рекурсивный поиск по текстам man-страниц. Это не сложно.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100873</commentid>
    <comment_count>14</comment_count>
    <who name="Michael Shigorin">mike</who>
    <bug_when>2009-10-06 01:47:24 +0400</bug_when>
    <thetext>Даже лучше есть -- индексаторы.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100875</commentid>
    <comment_count>15</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2009-10-06 01:53:58 +0400</bug_when>
    <thetext>(В ответ на комментарий №14)
&gt; Даже лучше есть -- индексаторы.

Именно. И они хранят данные более эффективно.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119491</commentid>
    <comment_count>16</comment_count>
    <who name="Michael Shigorin">mike</who>
    <bug_when>2011-03-26 11:07:04 +0300</bug_when>
    <thetext>Лёш, давай хоть cronjob заремарим?.. а то пока обсуждаем, народ продолжает мучиться: http://lists.altlinux.org/pipermail/antique/2011-March/000972.html

BTW могу обкатать предложения в 5.1, если в сизифе всё так сложно.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119502</commentid>
    <comment_count>17</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2011-03-26 18:07:16 +0300</bug_when>
    <thetext>Неожиданная мысль: может вместо распиливания сделать управлялку в /etc/sysconfig ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119509</commentid>
    <comment_count>18</comment_count>
    <who name="Michael Shigorin">mike</who>
    <bug_when>2011-03-26 20:03:11 +0300</bug_when>
    <thetext>Я бы лучше отпилил -- не надо, не добавляешь в дистрибутив (или rpm -e) и всё.
Но если по каким-либо соображениям это претит -- то хоть ручку, просто к ней придётся громоздить ещё хук/installer-feature.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127888</commentid>
    <comment_count>19</comment_count>
    <who name="Mikhail Efremov">sem</who>
    <bug_when>2011-12-22 21:35:43 +0400</bug_when>
    <thetext>Я немного переделал makewhatis и научил его удалять записи из базы.
Также добавил файлтриггер и распилил man на man-base и man-whatis.
apt-get install --reinstall man-pages занимает у меня примерно 3-4 минуты.
Это довольно много, но все равно это лучше, чем постоянное пересоздание базы каждый день (у меня это занимает 8-9 минут). К тому же пакеты с таким большим количеством манов обновляются редко, в обычных пакетах их все-таки немного.
Ну и база будет актуальна сразу после установки пакета, а не наследующий день, что тоже приятно. А кому это не надо - снесут man-whatis вместе с триггером.
При установке же этого пакета запустится создание базы, что не быстро. Но это один раз, обновления быстрее.
Предлагаю собрать это и закрыть, наконец, эту багу и #21838.
Правда, еще придется выкинуть makewhatis из %post тех пакетов man-pages-*, где это еще не сделано. Но это тривиально.

http://git.altlinux.org/people/sem/packages/man.git?p=man.git;a=shortlog;h=refs/heads/makewhatis-reworked</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127889</commentid>
    <comment_count>20</comment_count>
    <who name="Mikhail Efremov">sem</who>
    <bug_when>2011-12-22 21:46:07 +0400</bug_when>
    <thetext>&gt; Это довольно много, но все равно это лучше, чем постоянное пересоздание базы
&gt; каждый день (у меня это занимает 8-9 минут).

А, ну да, там же -u в daily, это довольно быстро. Так что не каждый день, а каждую неделю. Но не суть, все равно лучше файлтриггер, чем по крону, зато база будет актуальной.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127937</commentid>
    <comment_count>21</comment_count>
    <who name="Mikhail Efremov">sem</who>
    <bug_when>2011-12-26 17:37:08 +0400</bug_when>
    <thetext>&gt; apt-get install --reinstall man-pages занимает у меня примерно 3-4 минуты.

После оптимизации, предложенной ldv@, время сократилось до полутора минут. Быстрее сделать уже проблематично.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127944</commentid>
    <comment_count>22</comment_count>
    <who name="Michael Shigorin">mike</who>
    <bug_when>2011-12-26 18:44:34 +0400</bug_when>
    <thetext>Думаю, приемлемо.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131949</commentid>
    <comment_count>23</comment_count>
    <who name="Mikhail Efremov">sem</who>
    <bug_when>2012-06-19 18:58:38 +0400</bug_when>
    <thetext>ping</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131962</commentid>
    <comment_count>24</comment_count>
    <who name="AEN">aen</who>
    <bug_when>2012-06-20 01:33:28 +0400</bug_when>
    <thetext>2legion@: Алексей, что думаете о предложении sem@ ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131963</commentid>
    <comment_count>25</comment_count>
    <who name="Repository Robot">repository-robot</who>
    <bug_when>2012-06-20 02:50:35 +0400</bug_when>
    <thetext>man-1.6f-alt13 -&gt; sisyphus:

* Wed Jun 20 2012 Alexey Gladkov &lt;legion@altlinux&gt; 1.6f-alt13
- Replace makewhatis with ALT-specific script and move whatis in
  subpackage (ALT#21793) (thx Mikhail Efremov).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131964</commentid>
    <comment_count>26</comment_count>
    <who name="AEN">aen</who>
    <bug_when>2012-06-20 02:53:40 +0400</bug_when>
    <thetext>Коллеги, спасибо!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131968</commentid>
    <comment_count>27</comment_count>
    <who name="Michael Shigorin">mike</who>
    <bug_when>2012-06-20 12:22:09 +0400</bug_when>
    <thetext>Ур-ра! :)</thetext>
  </long_desc>
      
      

    </bug>

</bugzilla>