2004-11-29

p5-FreeBSD-Portindexを使う

portindexとは?

portindexはportsdb -Uの代替コマンドです。 以前はcd /usr/ports && make index(/usr/ports/Tools/make_indexを実行しています)やportsdb -Uが/usr/ports/INDEXを生成するコマンドでした。 ファイル生成の高速化のためにportindexが開発されたようです。

なぜportindexを使うのか?

portsの管理のためにsysutils/portupgradeを使用している人は多いと思います。 portupgradeはportsの情報を認識するため、INDEXからINDEX.dbというデータベースを生成します。/usr/ports/INDEXというテキストファイルは、そのまま検索などの用途に使用するには非効率なためです。 INDEXを生成するにはportsdb -Uというコマンドを使います。しかし、コマンドを実行するたびに毎回/usr/ports以下を全てスキャンするので、かなり時間がかかります。 そこでcvsupでアップデートされたportsツリーだけを指定して、高速にデータベースを更新するportindexが作られました。

使わなくても何とかなる?

http://www.FreeBSD.org/ports/INDEX.bz2が24時間サイクルで更新されているそうです。 通常は下記のように

# cd /usr/ports
# make fetchindex

すれば問題は無いでしょう。 /etc/make.confなどにMASTER_SITE_INDEXを設定することでwww.FreeBSD.org以外のホストを指定することも可能です。

インストール

portsからインストールします。

# cd /usr/ports/sysutils/p5-FreeBSD-Portindex
# make install clean
# rehash

portupgradeを使っているのであれば

# portinstall sysutils/p5-FreeBSD-Portindex

でも構いません。

初期データベースを作成します。高速なマシンでも数時間ほどかかるようです。

# cache-init

初期データベースが作られれば、あとは更新されたportsだけをcache-updateコマンドでアップデートすれば一瞬でデータベースを更新できます。

設定

/etc/daily.localやcrontab -eや/usr/local/etc/periodic/daily/999.portindexなどにスクリプトを記入します。 /etc/make.confでcvsupする設定が出来ている場合は

cd /usr/ports && script /tmp/cvsup.out make update

でも構いません。 /usr/sup/ports-supfileのSUPHOSTは設定して置いてください。 portupgradeのpkgtools.confで

ENV['PORTS_INDEX'] ||= ENV['PORTSDIR'] + '/INDEX.local'

などとローカルINDEXを指定している場合はportindexの引数をあわせて変更してください。

#!/bin/sh -f
#
cd /usr/ports
script /tmp/cvsup.out \
        /usr/local/bin/cvsup -g -L2  \
        /usr/sup/ports-supfile
/usr/local/bin/cache-update -i /tmp/cvsup.out
/usr/local/bin/portindex -o /usr/ports/INDEX
/usr/local/sbin/portsdb -u
#/usr/bin/bzip2 -fk /usr/ports/INDEX.db
#/usr/bin/bzip2 -fk /usr/ports/INDEX

bzip2で圧縮することは、1台のホストでINDEXを生成して他ホストへ転送する場合に有用です。

/usr/portsをApacheで公開する

生成するホストをports.example.jpとした場合、Apacheなどで/usr/ports/を公開します。 /usr/local/etc/apache/http.confで

Alias /ports "/usr/ports"
<Directory "/usr/ports">
    Options None
    AllowOverride None
    Order allow,deny
    Allow from 192.168.1.0/24
    Allow from 192.168.2.0/24
    Deny from All
</Directory>

というディレクティヴを指定して公開します。AllowはLANの環境に合わせて制限してください。

/usr/portsを直接公開したくないのであれば/etc/make.confで

PACKAGES=   /usr/local/www/ports/
DISTDIR=    /usr/local/www/ports/distfiles

と指定することで、ビルドしたpackagesとdistfilesをどこに保存するか指定できる。 その場合はhttpd.confのディレクティヴを

Alias /ports "/usr/local/www/data/ports"
<Directory "/usr/local/www/data/ports">
    Allow from All
</Directory>

などと指定する。

各ホストのINDEXの更新

各ホストは

# cd /usr/ports
# make update
# fetch http://ports.example.jp/ports/INDEX.db.bz2 \
# > /dev/null && /usr/bin/bunzip2 -f INDEX.db.bz2
# fetch http://ports.example.jp/ports/INDEX.local.bz2 \
# > /dev/null && /usr/bin/bunzip2 -f INDEX.local.bz2

というスクリプトを実行することでINDEXなどが更新できます。

参考

FreeBSD::Portindex

Permanent link | Trackback | | このエントリーを含むはてなブックマーク livedoor Clip View blog reactions del.icio.us

otsune posted at 13:03 in
WriteBacks
TrackBack ping me at
http://www.otsune.com/bsd/tips/portindex.
Post a comment

writeback message: