Summary: | /etc/cron.{daily,weekly}/makewhatis | ||
---|---|---|---|
Product: | Sisyphus | Reporter: | Valery Inozemtsev <shrek> |
Component: | man | Assignee: | Alexey Gladkov <legion> |
Status: | CLOSED FIXED | QA Contact: | qa-sisyphus |
Severity: | major | ||
Priority: | P3 | CC: | aen, asy, dd1email, ldv, mike, sem, voins |
Version: | unstable | ||
Hardware: | all | ||
OS: | Linux |
Description
Valery Inozemtsev
2009-09-30 19:59:08 MSD
Не blocker и даже не critical, всё же работает, только не всегда очень быстро. скорость не объясняет тайного смысла этой работы (В ответ на комментарий №2) > скорость не объясняет тайного смысла этой работы Валер, я же тебе рассказывал зачем так было сделано. man-страницы есть не только в man-pages{,-ru,-uk}... они в многих пакетах, но (как ты правильно заметил) эта операция длинная, то в %post-скриптах пакетов её вызывать очень дорого. Поэтому в те далёкие времена был сделан аналог триггеров. Разница в том, что программы ставят руками и маны тоже. Поэтому cron. Вот то что makewhatis не умеет обновлять индекс, а пересоздаёт его каждый раз снова это действительно очень плохо. /etc/cron.daily/makewhatis, который запускает "makewhatis -u", выполняется достаточно быстро, поскольку он просто делает find. Запуск "makewhatis -u" при желании можно завернуть в триггер. (В ответ на комментарий №4) > /etc/cron.daily/makewhatis, который запускает "makewhatis -u", выполняется > достаточно быстро, поскольку он просто делает find. Запуск "makewhatis -u" при > желании можно завернуть в триггер. Способ соединения довольно суровый: [ ! -s "$destdir/whatis" ] || cat "$destdir/whatis" >> "$TMPFILE" tr -s '\n' < "$TMPFILE" | LC_COLLATE=C sort -u > "$destdir/whatis" мне кажется проще сделать -newer $destdir/whatis и не сортировать whatis каждый день (кто такое только придумал?!), даже если он не изменился. (In reply to comment #5) > (В ответ на комментарий №4) > > /etc/cron.daily/makewhatis, который запускает "makewhatis -u", выполняется > > достаточно быстро, поскольку он просто делает find. Запуск "makewhatis -u" при > > желании можно завернуть в триггер. > > Способ соединения довольно суровый: > > [ ! -s "$destdir/whatis" ] || cat "$destdir/whatis" >> "$TMPFILE" > tr -s '\n' < "$TMPFILE" | LC_COLLATE=C sort -u > "$destdir/whatis" > > мне кажется проще сделать -newer $destdir/whatis и не сортировать whatis каждый > день (кто такое только придумал?!), даже если он не изменился. Можно сделать -cnewer, можно выкинуть tr и просто написать LC_COLLATE=C sort -u -o "$TMPFILE" "$TMPFILE" с последующим cmp. Хотя, с другой стороны, эта часть и так быстро работает, зачем её улучшать? Жалуются ведь на makewhatis без -u. (В ответ на комментарий №6) > Можно сделать -cnewer, можно выкинуть tr и просто написать LC_COLLATE=C sort -u > -o "$TMPFILE" "$TMPFILE" с последующим cmp. Проще всего, если $TMPFILE пуст не делать sort вообще. > Хотя, с другой стороны, эта часть и так быстро работает, зачем её улучшать? Если программа не эффективна в некоторых режимах, то это не значит, что её не нужно улучшать. > Жалуются ведь на makewhatis без -u. Можно добавить этот ключ, можно перенести эту команду в триггер, чтобы выполнение производилось только при установке новых страниц, но я бы хотел поднять более радикальный вопрос: нужен ли whatis вообще ? Из общения с разными разработчиками я понял, что этим (почти?) никто не пользуется. Я не против улучшать и поддерживать полезную функциональность, но никому не нужную ... > /etc/cron.daily/makewhatis, который запускает "makewhatis -u", выполняется
> достаточно быстро, поскольку он просто делает find.
find, сам по себе, может выполняться долго. У меня этот процесс тоже не торопится. А где он, кстати, ищет ? Точно только в mandir ?
(В ответ на комментарий №8) > find, сам по себе, может выполняться долго. У меня этот процесс тоже не > торопится. А где он, кстати, ищет ? Точно только в mandir ? Да. for mandir in $manpath; do ... for i in $SECTIONS; do ... (In reply to comment #7) > нужен ли whatis вообще ? См. bug #21838 (В ответ на комментарий №10) > См. bug #21838 Этот FR не содержит ответ на мой вопрос. По-моему, закрыть этот FR достаточно, чтоб вопрос не стоял перед тобой. :) Говоря за себя -- очень редко, но пользуюсь. Сейчас документацию (в т.ч. man-pages) всё равно обычно изучаю сперва через прицел поисковика. (В ответ на комментарий №12) > По-моему, закрыть этот FR достаточно, чтоб вопрос не стоял перед тобой. :) Я от проблем не бегу. Если есть проблема с производительностью, то её нужно решать. > Говоря за себя -- очень редко, но пользуюсь. Сейчас документацию (в т.ч. > man-pages) всё равно обычно изучаю сперва через прицел поисковика. Это подтверждает моё мнение о том, что эта ущербная база бесполезна. Я бы вообще выкинул whatis куда подальше в том виде в котором это есть сейчас. Для тех у кого нет интернета, но кому хочется поискать по тексту манов, я могу сделать скрипт, позволяющий делать рекурсивный поиск по текстам man-страниц. Это не сложно. Даже лучше есть -- индексаторы. (В ответ на комментарий №14) > Даже лучше есть -- индексаторы. Именно. И они хранят данные более эффективно. Лёш, давай хоть cronjob заремарим?.. а то пока обсуждаем, народ продолжает мучиться: http://lists.altlinux.org/pipermail/antique/2011-March/000972.html BTW могу обкатать предложения в 5.1, если в сизифе всё так сложно. Неожиданная мысль: может вместо распиливания сделать управлялку в /etc/sysconfig ? Я бы лучше отпилил -- не надо, не добавляешь в дистрибутив (или rpm -e) и всё. Но если по каким-либо соображениям это претит -- то хоть ручку, просто к ней придётся громоздить ещё хук/installer-feature. Я немного переделал 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 > Это довольно много, но все равно это лучше, чем постоянное пересоздание базы
> каждый день (у меня это занимает 8-9 минут).
А, ну да, там же -u в daily, это довольно быстро. Так что не каждый день, а каждую неделю. Но не суть, все равно лучше файлтриггер, чем по крону, зато база будет актуальной.
> apt-get install --reinstall man-pages занимает у меня примерно 3-4 минуты.
После оптимизации, предложенной ldv@, время сократилось до полутора минут. Быстрее сделать уже проблематично.
Думаю, приемлемо. ping 2legion@: Алексей, что думаете о предложении sem@ ? man-1.6f-alt13 -> sisyphus: * Wed Jun 20 2012 Alexey Gladkov <legion@altlinux> 1.6f-alt13 - Replace makewhatis with ALT-specific script and move whatis in subpackage (ALT#21793) (thx Mikhail Efremov). Коллеги, спасибо! Ур-ра! :) |