Bug 21796 - %post -p /etc/cron.daily/makewhatis
Summary: %post -p /etc/cron.daily/makewhatis
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: man-pages (show other bugs)
Version: unstable
Hardware: all Linux
: P3 blocker
Assignee: placeholder@altlinux.org
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2009-09-30 20:51 MSD by Valery Inozemtsev
Modified: 2009-10-16 19:17 MSD (History)
11 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Valery Inozemtsev 2009-09-30 20:51:52 MSD
с каких это пор у нас принято вызывать кроновские скрипты из post? у меня давно сделано # rm -f /etc/cron.*/makewhatis ибо эта ежедневная ересь мне не нужна, в результате каждая установка man-pages обламывается
Comment 1 Slava Semushin 2009-10-01 09:38:55 MSD
А что предлагается взамен? Просто вызывать /usr/sbin/makewhatis -u?
Comment 2 solo 2009-10-01 22:10:20 MSD
(В ответ на комментарий №1)
> А что предлагается взамен? Просто вызывать /usr/sbin/makewhatis -u?

  Думаю более правельный вариант.
Comment 3 Sergey Y. Afonin 2009-10-02 00:08:52 MSD
А если класть в cron.hourly скрипт с названием, скажем, makewhatis_once, который завершается командой "rm -f $0" ?
Comment 4 Michael Shigorin 2009-10-05 03:19:30 MSD
Также замечено, что скрипт вполне может завершаться с ненулевым кодом возврата и уже потому если его и запускать из %post, то исключительно с заглушкой (||:).
Comment 5 Sergey Y. Afonin 2009-10-05 19:41:27 MSD
(In reply to comment #4)

Так это blocker тогда... Кстати,  ещё, как вариант:
/usr/sbin/makewhatis -u &

В общем я к тому, что не нужна такая пауза при установке пакета.
Comment 6 led 2009-10-05 19:47:33 MSD
(В ответ на комментарий №5)
> (In reply to comment #4)
> 
> Так это blocker тогда... Кстати,  ещё, как вариант:
> /usr/sbin/makewhatis -u &

Тогда уж "как вариант" - запуск mklocatedb после установки/удаления каждого пакета. Зачем это нужно?
Comment 7 Slava Semushin 2009-10-05 19:57:40 MSD
(В ответ на комментарий №5)
> (In reply to comment #4)
> 
> Так это blocker тогда...

Согласно http://www.altlinux.org/BugSeverityPolicy, ошибка с серьёзностью blocker "ломает не связанное с данным ПО (или даже всю систему), вызывает серьёзные потери данных, создаёт дыру в безопасности при установке пакета". В долгом выполнении постустановочного скрипта нет ничего опасного и он не ломает другое ПО. По этой причине я считаю, что это не blocker, а скорее minor (возможно, normal).
Comment 8 Valery Inozemtsev 2009-10-05 20:04:31 MSD
apt-get после такого облома работать перестает. достаточно для "ломает всю систему"?
Comment 9 Sergey Y. Afonin 2009-10-05 20:07:32 MSD
(In reply to comment #7)

>  По этой причине я считаю, что это не blocker, а скорее minor 

про "долго" - это попутный ворос. Главное - это то, что Шигорин в #4 написал.
Comment 10 Sergey Y. Afonin 2009-10-05 20:10:28 MSD
(In reply to comment #6)

> Тогда уж "как вариант" - запуск mklocatedb после установки/удаления каждого
> пакета. Зачем это нужно?

Я не занимался анализом ситуации на тему "зачем". Это пусть мантейнер думает. А вот вопрс "как" мне интересен.
Comment 11 Slava Semushin 2009-10-05 20:15:49 MSD
(В ответ на комментарий №8)
> apt-get после такого облома работать перестает. достаточно для "ломает всю
> систему"?

К сожалению, нет, так как система в которой удален файл /etc/cron.daily/makewhatis не является типичной. Если так мешает этот скрипт, то можно его сделать пустым ;) Тогда и апгрейд будет работать и makewhatis не будет долго выполняться.
Comment 12 Valery Inozemtsev 2009-10-05 20:19:06 MSD
к сожалению да, т.к. для /etc/cron.daily/makewhatis совершенно нормально выход с 1, что дает тот же результат что и его отсутствие
Comment 13 Slava Semushin 2009-10-05 20:25:50 MSD
(В ответ на комментарий №12)
> к сожалению да, т.к. для /etc/cron.daily/makewhatis совершенно нормально выход
> с 1, что дает тот же результат что и его отсутствие

Согласно коду с 1 он выходит, только если уже запущен и его пытаются запускать вновь. На моей машине этого ни разу не было, возможно, что на системах с несколькими процессорами это имеет место быть.

Валер, я могу добавить ||: в %post, это тебя устроит?

Выносить вызов makewhatis из скрипта не хочется, по той причине, что там есть дополнительная логика (например, скрипт не запускается при установке системы и при установке в хашере) и её придётся тогда тоже за собой тащить, а по пути есть шанс что-нибудь сломать :(

Если основные претензии к тому что makewhatis долго выполняется, то это уже пожелание к пакету man, чтобы ускорить выполнение этого скрипта.
Comment 14 Michael Shigorin 2009-10-05 20:29:28 MSD
(In reply to comment #13)
> Валер, я могу добавить ||: в %post, это тебя устроит?
Меня вот -- да.

> Выносить вызов makewhatis из скрипта не хочется, по той причине, что там есть
> дополнительная логика (например, скрипт не запускается при установке системы и
> при установке в хашере) и её придётся тогда тоже за собой тащить, а по пути
> есть шанс что-нибудь сломать :(
Ввиду bug #21838 предлагаю завернуть в проверку с опосредованием имени скрипта через переменную, чтоб не ругалось при отсутствии makewhatis и не тащило содержащий его пакет.
Comment 15 Slava Semushin 2009-10-05 20:32:17 MSD
(В ответ на комментарий №14)
> Ввиду bug #21838 предлагаю завернуть в проверку с опосредованием имени скрипта
> через переменную, чтоб не ругалось при отсутствии makewhatis и не тащило
> содержащий его пакет.

Вроде такого?

MAKEWHATIS=/etc/cron.daily/makewhatis
if [ -x "$MAKEWHATIS" ]; then
    $MAKEWHATIS || :
fi
Comment 16 Michael Shigorin 2009-10-05 20:35:44 MSD
(In reply to comment #15)
> Вроде такого?
Почти -- эта конструкция может вернуть non-zero при невыполнении теста, и если будет последней в %post -- то rpm сочтёт процесс завершившимся с ошибкой.  Обычно либо инвертируют тест/действие ([ ! -x ] || ...), ну или можно и if заткнуть:

MAKEWHATIS=/etc/cron.daily/makewhatis
if [ -x "$MAKEWHATIS" ]; then
    $MAKEWHATIS || :
fi || :
Comment 17 Sergey Y. Afonin 2009-10-05 20:39:04 MSD
А, всё-таки, почему бы & не использовать ? Результат-то не важен, пусть в фоне шуршит и не тормозит процесс установки.
Comment 18 Valery Inozemtsev 2009-10-05 20:39:49 MSD
%post
[ -n "$DURING_INSTALL" ] || su -l cacheman -s /bin/sh -c '/usr/sbin/makewhatis -u' ||:

это простой вариан, можно еще добавить lock файл
Comment 19 led 2009-10-05 20:41:10 MSD
Нужно отделить мух от котлет и признать, что скрипт для cron и post-script - это разные вещи, и не пытать на^Wобмануть судьбу и не "скрещивать ежа с ужом"
Comment 20 Slava Semushin 2009-10-05 20:44:10 MSD
(В ответ на комментарий №18)
> %post
> [ -n "$DURING_INSTALL" ] || su -l cacheman -s /bin/sh -c '/usr/sbin/makewhatis
> -u' ||:
> 
> это простой вариан, можно еще добавить lock файл

Надо ещё учесть переменную $FAKEROOTKEY (см. bug #11488)
Comment 21 Valery Inozemtsev 2009-10-05 20:50:41 MSD
[ -n "$DURING_INSTALL" -o -n "$FAKEROOTKEY" ] ||
Comment 22 Valery Inozemtsev 2009-10-05 21:07:12 MSD
%post
if [ -z "$DURING_INSTALL" -o -z "$FAKEROOTKEY" ]; then
  su -l cacheman -s /bin/sh -c '/usr/sbin/makewhatis -u' ||:
fi

вот тебе практически окончательный вариант
Comment 23 Alexey Gladkov 2009-10-05 22:47:06 MSD
Я очень прошу: не вызывайте makewhatis из %post вообще. Это в корне не правильное решение... не важно с какой обвязкой вокруг этой утилиты это делается.

База whatis строится/обновляется из другого места.

Если так хочется иметь обновлённую базу whatis прямо немедленно после установки rpm пакета, содержащего man-страницы, то лучше придумать триггер для rpm. Но в _любом_ случае обновление базы это не забота пакета с man-страницами.
Comment 24 Michael Shigorin 2009-10-06 01:46:28 MSD
(In reply to comment #23)
> Если так хочется иметь обновлённую базу whatis прямо немедленно после установки
> rpm пакета, содержащего man-страницы, то лучше придумать триггер для rpm.
Это тоже да, но вроде уже прозвучало же? (насколько понимаю, предложенный кусочек кода лучше как раз закинуть в posttrans filetrigger в пакете man)
Comment 25 Alexey Gladkov 2009-10-06 01:53:25 MSD
(В ответ на комментарий №24)
> Это тоже да, но вроде уже прозвучало же? (насколько понимаю, предложенный
> кусочек кода лучше как раз закинуть в posttrans filetrigger в пакете man)

Возможно проглядел, если прозвучало, то отлично.

В любом случае, в контексте этой баги, НЕ нужно вызывать makewhatis вообще никаким образом из этого пакета а равно и из других пакетов с манами.
Comment 26 Slava Semushin 2009-10-06 09:29:39 MSD
(В ответ на комментарий №23)
> Я очень прошу: не вызывайте makewhatis из %post вообще.

Это можно будет сделать когда в rpm появится соответствующий триггер. Вопрос в том когда он появится?
Comment 27 Alexey Gladkov 2009-10-06 13:53:50 MSD
(В ответ на комментарий №26)
> Это можно будет сделать когда в rpm появится соответствующий триггер. Вопрос в
> том когда он появится?

Это нужно сделать безотносительно того, когда появится триггер.
Comment 28 Slava Semushin 2009-10-06 13:57:55 MSD
(В ответ на комментарий №27)
> Это нужно сделать безотносительно того, когда появится триггер.

У нас вызов makewhatis уже несколько лет как во всех man-pages используется и я не вижу причины почему не стОит подождать ещё неделю-другую/месяц-два до появления триггеров.
Comment 29 Alexey Gladkov 2009-10-06 14:32:17 MSD
(В ответ на комментарий №28)
> У нас вызов makewhatis уже несколько лет как во всех man-pages используется и я
> не вижу причины почему не стОит подождать ещё неделю-другую/месяц-два до
> появления триггеров.

Несколько лет во всех man-pages занимались не своим делом. Я не вижу причин этим пакетам продолжать это делать. Как подтверждение - сама эта бага.
Comment 30 Sergey Y. Afonin 2009-10-06 15:03:44 MSD
А можно, пока, добавить ||: ? Снимем blocker и продолжайте спокойно спорить. :-)
Comment 31 Valery Inozemtsev 2009-10-06 15:12:33 MSD
не можно, ибо не нужно
Comment 32 Slava Semushin 2009-10-11 19:28:59 MSD
Господа, завышение важности бага, в данном случае, не ускорит решение проблемы.
Comment 33 Valery Inozemtsev 2009-10-11 19:33:08 MSD
да нет, оно blocker, т.к. легко загоняет apt в нерабочее состояние
Comment 34 Slava Semushin 2009-10-11 19:48:41 MSD
(В ответ на комментарий №22)
> %post
> if [ -z "$DURING_INSTALL" -o -z "$FAKEROOTKEY" ]; then
>   su -l cacheman -s /bin/sh -c '/usr/sbin/makewhatis -u' ||:
> fi
> 
> вот тебе практически окончательный вариант

Только здесь не -o a -a, т.к. обе переменные должны быть пустыми.

Сделаю в следующей сборке, чтобы наконец уже закрыть этот баг.

Когда появятся триггеры -- уберу совсем.
Comment 35 Valery Inozemtsev 2009-10-11 19:59:45 MSD
(В ответ на комментарий №34)
> (В ответ на комментарий №22)
> > %post
> > if [ -z "$DURING_INSTALL" -o -z "$FAKEROOTKEY" ]; then
> >   su -l cacheman -s /bin/sh -c '/usr/sbin/makewhatis -u' ||:
> > fi
> > 
> > вот тебе практически окончательный вариант
> 
> Только здесь не -o a -a, т.к. обе переменные должны быть пустыми.

да нет, там -o, а не -a
 
> Сделаю в следующей сборке, чтобы наконец уже закрыть этот баг.

сколько раз нужно еще повторить что вызывать makewhatis вообще не нужно что бы Вы это поняли?
 
> Когда появятся триггеры -- уберу совсем.

их кто то обещал?
Comment 36 Slava Semushin 2009-10-11 20:08:41 MSD
(В ответ на комментарий №35)
> (В ответ на комментарий №34)
> > (В ответ на комментарий №22)
> > > %post
> > > if [ -z "$DURING_INSTALL" -o -z "$FAKEROOTKEY" ]; then
> > >   su -l cacheman -s /bin/sh -c '/usr/sbin/makewhatis -u' ||:
> > > fi
> > > 
> > > вот тебе практически окончательный вариант
> > 
> > Только здесь не -o a -a, т.к. обе переменные должны быть пустыми.
> 
> да нет, там -o, а не -a

Поясни, пожалуйста, почему?
 
> сколько раз нужно еще повторить что вызывать makewhatis вообще не нужно что бы
> Вы это поняли?

Мне не нужно повторять, я это понял. Но пока нет триггеров, если убрать ручной вызов makewhatis, то маны перестанут индексироваться и apropos/whatis перестанут работать. Поэтому до появления триггеров, я не буду убирать вызов makewhatis. Сейчас я могу заменить вызов кроновского скрипта на код, приведённый выше, который ты предложил. Тебя это устроит?

> > Когда появятся триггеры -- уберу совсем.
> 
> их кто то обещал?

Нет. Пока нет. Скоро я повешу баг и будем уже решать с legion@-ом эту проблему. (Но это будет уже другая проблема и другой баг.)
Comment 37 Valery Inozemtsev 2009-10-11 20:21:17 MSD
(В ответ на комментарий №36)
> > да нет, там -o, а не -a
> 
> Поясни, пожалуйста, почему?

DURING_INSTALL и FAKEROOTKEY решают разные задачи и используются в совершенно разных местах
 
> > сколько раз нужно еще повторить что вызывать makewhatis вообще не нужно что бы
> > Вы это поняли?
> 
> Мне не нужно повторять, я это понял. Но пока нет триггеров, если убрать ручной
> вызов makewhatis, то маны перестанут индексироваться и apropos/whatis
> перестанут работать.

см. https://bugzilla.altlinux.org/show_bug.cgi?id=21793

> Поэтому до появления триггеров, я не буду убирать вызов
> makewhatis. Сейчас я могу заменить вызов кроновского скрипта на код,
> приведённый выше, который ты предложил. Тебя это устроит?

возможно это устроит apt

> > > Когда появятся триггеры -- уберу совсем.

man-pages-ru я давно вынес, видимо придется избавиться и от этого
Comment 38 Michael Shigorin 2009-10-12 23:43:01 MSD
(In reply to comment #36)
> Мне не нужно повторять, я это понял. Но пока нет триггеров, если убрать ручной
> вызов makewhatis, то маны перестанут индексироваться и apropos/whatis
> перестанут работать.
Ну почему -- cron-скрипт пока есть, когда-то да отработает.

> Поэтому до появления триггеров, я не буду убирать вызов makewhatis.
Убери, пожалуйста -- это исправит больше, чем сломает.

Сейчас есть риск сломать apt (я тоже напоролся), а пользователи apropos должны быть достаточно сообразительны, чтоб при крайней нужде и руками его запустить (или перекронить, или сделать наконец этот файлтриггер).

2 shrek: тебе действительно охота быть местным Al Viro?
Comment 39 Repository Robot 2009-10-16 19:12:03 MSD
man-pages-3.23-alt2 -> sisyphus:

* Fri Oct 16 2009 Slava Semushin <php-coder@altlinux> 3.23-alt2

- Don't call makewhatis after installation (Closes: #21796)
- Added explicit Conflicts with libcint-devel (noted by repocop)