2011-06-09 tdpkg
м (Новая страница: «Нашёл клёвую штуку для дебиановского dpkg — ускорятор его работы с базой данных пакетов '''<a...») |
м |
||
(не показаны 3 промежуточные версии этого же участника) | |||
Строка 1: | Строка 1: | ||
− | Нашёл клёвую штуку для дебиановского dpkg — ускорятор его работы с базой данных пакетов ''' | + | Нашёл клёвую штуку для дебиановского dpkg — ускорятор его работы с базой данных пакетов '''[http://lethalman.hostei.com/tdpkg.html tdpkg]''' ! |
− | Просто каким-то дурацким образом dpkg хранит базу в тыщщах мелких файлов в <tt>/var/lib/dpkg/info/</tt>, без какого-либо индекса ВООБЩЕ. В итоге, когда установлено 4500 пакетов, как у меня, первый запуск сильно тупит, потому что читает все эти тыщщи файлов (секунд 30-40 занимает легко). | + | Просто каким-то дурацким образом dpkg хранит базу в тыщщах мелких файлов в <tt>/var/lib/dpkg/info/</tt>, без какого-либо индекса ВООБЩЕ. В итоге, когда установлено 4500 пакетов, как у меня, первый запуск сильно тупит, потому что читает все эти тыщщи файлов в кэш (секунд 30-40 занимает легко). |
− | Так вот, некто придумал хак — засунуть в LD_PRELOAD библиотеку, которая лично обращения к /var/lib/dpkg/info/ будет подменять на чтения нормальной базы данных — SQLite или | + | Так вот, некто придумал хак — засунуть в LD_PRELOAD библиотеку, которая лично обращения к /var/lib/dpkg/info/ будет подменять на чтения нормальной базы данных — SQLite или [http://fallabs.com/tokyocabinet/ TokyoCabinet] (последняя — это «правильный BDB»). |
− | Ускоряет ситуацию это, надо сказать, просто в разы — база читается за 1-2 секунды. Вообще-то, конечно, dpkg это должен | + | Ускоряет ситуацию это, надо сказать, просто в разы — база читается за 1-2 секунды. Вообще-то, конечно, dpkg это должен уметь сам, но раз пока никто не написал… |
− | В общем ставим, прописываем | + | В общем ставим, прописываем в <tt>~/.bashrc</tt> следующие строчки, и радуемся жизни: |
+ | <pre> | ||
+ | alias dpkg="sudo LD_PRELOAD=<path_to_libtdpkg>/libtdpkg.so dpkg" | ||
+ | alias apt-get="sudo LD_PRELOAD=<path_to_libtdpkg>/libtdpkg.so apt-get" | ||
+ | </pre> | ||
− | UPD: ещё | + | UPD: ещё нужно применить [{{SVN|vitalif/trunk/scripts/tdpkg.c.diff|co}} мой патчик], убирает мусор с STDERR и добавляет плюс один хак, чтобы tdpkg работал с последними dpkg, которые любят делать <tt>ioctl(FIGETBSZ)</tt>. |
− | {{wl-publish: 2011- | + | {{wl-publish: 2011-06-09 00:29:00 +0400 | VitaliyFilippov }} |
Текущая версия на 22:57, 8 сентября 2011
Нашёл клёвую штуку для дебиановского dpkg — ускорятор его работы с базой данных пакетов tdpkg !
Просто каким-то дурацким образом dpkg хранит базу в тыщщах мелких файлов в /var/lib/dpkg/info/, без какого-либо индекса ВООБЩЕ. В итоге, когда установлено 4500 пакетов, как у меня, первый запуск сильно тупит, потому что читает все эти тыщщи файлов в кэш (секунд 30-40 занимает легко).
Так вот, некто придумал хак — засунуть в LD_PRELOAD библиотеку, которая лично обращения к /var/lib/dpkg/info/ будет подменять на чтения нормальной базы данных — SQLite или TokyoCabinet (последняя — это «правильный BDB»).
Ускоряет ситуацию это, надо сказать, просто в разы — база читается за 1-2 секунды. Вообще-то, конечно, dpkg это должен уметь сам, но раз пока никто не написал…
В общем ставим, прописываем в ~/.bashrc следующие строчки, и радуемся жизни:
alias dpkg="sudo LD_PRELOAD=<path_to_libtdpkg>/libtdpkg.so dpkg" alias apt-get="sudo LD_PRELOAD=<path_to_libtdpkg>/libtdpkg.so apt-get"
UPD: ещё нужно применить мой патчик, убирает мусор с STDERR и добавляет плюс один хак, чтобы tdpkg работал с последними dpkg, которые любят делать ioctl(FIGETBSZ).