Portageのメタデータにsqliteを使ってみる

Portageのマニュアルを眺めていたら気づいた。


日本語のマニュアルはバージョンが古いぜ……


そりゃまぁメンテのペースが違うから当たり前なんだけど。
# portage のマニュアルの英語版は 2.1.7 で日本語版は 2.0.51 だった。


書きたいのはそれじゃなくて、久々に英語のマニュアルを見ていたらこんな記述が。

modules
This file can be used to override the metadata cache implementation.
In practice, portdbapi.auxdbmodule is the only variable that the user will want to override.

from portage manual 2.1.7

キャッシュのデータ形式をコントロールできるよ っていうふうに読める。ちなみに、日本語の方には modules に関する記述はないです。よくわからないのでぐぐってみた。


上は結構前に書かれた記事です。てことはずいぶん前から知られていたことらしいですねー。面白そうなのでやってみます。


(注) 最近のバージョンだとやる必要ないかも?

sqliteのバージョンを確認する

うちでは確か入っていると思うのですが、一応確認してみます。

$ emerge -p sqlite

These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild   R   ] dev-db/sqlite-3.6.22-r2

入ってますか? 入ってます。

pysqliteのバージョンを確認する

これも必要らしいので確認しておきます。

$ emerge -p pysqlite

These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild  N    ] dev-python/pysqlite-2.5.6  USE="-examples"

入ってないですね。入れておきます。

$ sudo emerge -v pysqlite

/etc/portage/modules の編集

参考にさせてもらっている記事に従って記述しておきます。

$ sudo nano -w /etc/portage/modules

portdbapi.auxdbmodule = cache.sqlite.database       ←1行追加

ちなみに参考記事にもありますが、この modules というファイルは普通に使っている限りは存在しないようです。私の場合にも存在していませんでしたので、今回が新規作成です。

キャッシュの再構築

キャッシュを削除 & 再構築します。最近の portage では FEATURES 変数も直してあげないとダメです。

In addition, if you're using a Portage version later than sys-apps/portage-2.1.6.4 you'll need to add metadata-transfer to FEATURES:


というわけで、 /etc/make.conf の FEATURES に書き加えます。

$ sudo nano -w /etc/make.conf
...
FEATURES="${FEATURES} metadata-transfer"
...


その後、キャッシュを再構築します。

$ sudo emerge --metadata


結構かかります。


終わったら、とりあえずどんなのが出来ているか見てみます。

$ ls -l /var/cache/edb/dep/usr/
合計 30948
drwxrwsr-x 3 root portage     4096 2010-03-25 10:53 local
drwxrwsr-x 2 root portage     4096 2010-03-25 10:53 portage
−rw-rw-r-- 1 root portage 31642624 2010-03-25 11:04 portage.sqlite


でかっ! でも前はそのしたの portage 以下にたくさんファイルがあったっけ。

使ってみる

参考元のサイトにならって、 emerge world の時間を測ってみました。


適用前

real    1m52.921s
user    0m42.110s
sys     0m3.040s


適用後

real    0m43.307s
user    0m41.670s
sys     0m0.800s


十分じゃね?(笑) うちの非力な鯖マシンにはこれだけでもありがたいです。必要なディスクスペースが小さくなる (らしい) ってのもいいですね。この調子で全部のマシンに導入してみようかなぁ。