2011-06-09 tdpkg

Материал из YourcmcWiki
Перейти к: навигация, поиск
м
м
Строка 1: Строка 1:
Нашёл клёвую штуку для дебиановского dpkg — ускорятор его работы с базой данных пакетов '''<a href="http://lethalman.hostei.com/tdpkg.html">tdpkg</a>''' !
+
Нашёл клёвую штуку для дебиановского 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 или <a href="http://fallabs.com/tokyocabinet/">TokyoCabinet</a> (последняя — это «правильный BDB»).
+
Так вот, некто придумал хак — засунуть в LD_PRELOAD библиотеку, которая лично обращения к /var/lib/dpkg/info/ будет подменять на чтения нормальной базы данных — SQLite или [http://fallabs.com/tokyocabinet/ TokyoCabinet] (последняя — это «правильный BDB»).
  
Ускоряет ситуацию это, надо сказать, просто в разы — база читается за 1-2 секунды. Вообще-то, конечно, dpkg это должен делать сам, но раз пока этого никто не написал…
+
Ускоряет ситуацию это, надо сказать, просто в разы — база читается за 1-2 секунды. Вообще-то, конечно, dpkg это должен уметь сам, но раз пока никто не написал…
  
В общем ставим, прописываем {{cmd|alias dpkg="sudo LD_PRELOAD=.../libtdpkg.so dpkg"}} и {{cmd|alias apt-get="sudo LD_PRELOAD=.../libtdpkg.so dpkg"}} аналогично, и радуемся жизни.
+
В общем ставим, прописываем {{cmd|alias dpkg{{=}}"sudo LD_PRELOAD{{=}}.../libtdpkg.so dpkg"}} и {{cmd|alias apt-get{{=}}"sudo LD_PRELOAD{{=}}.../libtdpkg.so dpkg"}} аналогично, и радуемся жизни.
  
UPD: ещё желателен <a href="http://svn.yourcmc.ru/viewvc.py/vitalif/trunk/scripts/tdpkg.c.diff?revision=1268&amp;view=co">мой патчик</a>, убирает мусор с STDERR и добавляет плюс один хак, чтобы tdpkg работал с последними dpkg, которые любят делать <tt>ioctl(FIGETBSZ)</tt>.
+
UPD: ещё нужно применить [{{SVN|vitalif/trunk/scripts/tdpkg.c.diff|co}} мой патчик], убирает мусор с STDERR и добавляет плюс один хак, чтобы tdpkg работал с последними dpkg, которые любят делать <tt>ioctl(FIGETBSZ)</tt>.
 
{{wl-publish: 2011-06-09 00:29:00 +0400 | VitaliyFilippov }}
 
{{wl-publish: 2011-06-09 00:29:00 +0400 | VitaliyFilippov }}

Версия 22:55, 8 сентября 2011

Нашёл клёвую штуку для дебиановского dpkg — ускорятор его работы с базой данных пакетов tdpkg !

Просто каким-то дурацким образом dpkg хранит базу в тыщщах мелких файлов в /var/lib/dpkg/info/, без какого-либо индекса ВООБЩЕ. В итоге, когда установлено 4500 пакетов, как у меня, первый запуск сильно тупит, потому что читает все эти тыщщи файлов в кэш (секунд 30-40 занимает легко).

Так вот, некто придумал хак — засунуть в LD_PRELOAD библиотеку, которая лично обращения к /var/lib/dpkg/info/ будет подменять на чтения нормальной базы данных — SQLite или TokyoCabinet (последняя — это «правильный BDB»).

Ускоряет ситуацию это, надо сказать, просто в разы — база читается за 1-2 секунды. Вообще-то, конечно, dpkg это должен уметь сам, но раз пока никто не написал…

В общем ставим, прописываем alias dpkg="sudo LD_PRELOAD=.../libtdpkg.so dpkg" и alias apt-get="sudo LD_PRELOAD=.../libtdpkg.so dpkg" аналогично, и радуемся жизни.

UPD: ещё нужно применить мой патчик, убирает мусор с STDERR и добавляет плюс один хак, чтобы tdpkg работал с последними dpkg, которые любят делать ioctl(FIGETBSZ).