2004-11-30

packages & distfilesサーバーの構築

packagesサーバーとは

portsを管理するときに、いちいちソースからコンパイルをするのは時間がかかります。 そこでpackagesを代表ホスト1台で作成して、他のホストはそのpackagesをインストールすることにします。

packagesサーバーにはCPUやHDDの速度が速いマシンを選択するのが良いでしょう。

packagesディレクトリを用意する

mkdir -p /usr/ports/packages

/etc/make.conf

DEPENDS_TARGET=package 
FORCE_PACKAGE=yes

p5-FreeBSD-Portindex

portindex参照。

net/cvsup-mirror

portsツリーの同期をするために多数のホストでcvsupを使用するのであれば、packagesサーバーをcvsupミラーサーバーとして設定することで外部へのトラフィックをへらすことが出来ます。

あらかじめfastest_cvsup -c jpでホストから一番速いcvsupサーバーを探しておきます。

次にcvsup-mirrorをインストールします。

#portinstall net/cvsup-mirror

インストールの段階で対話的に設定していくことでcvsupサーバーが稼動します。 /etc/crontabに更新スクリプトが追加されるので、rootのcrontab -eに設定を移動することにします。 また普段の更新はupdate.sh -sで-sオプションをつけることで負荷を減らすことが出来ます。 この例では8時と20時に-s付きで更新して、週に1度だけupdate.shをするように設定しています。

crontab

1   8,20    *   *   0-5 /usr/local/etc/cvsup/update.sh -s \
> /dev/null
1   20  *   *   6   /usr/local/etc/cvsup/update.sh -s \
> /dev/null
1   8   *   *   6   /usr/local/etc/cvsup/update.sh \
> /dev/null

ccacheを使う

ccache参照。 ccacheを使用するとビルドに失敗するportsは/usr/local/etc/pkgtools.confのMAKE_ARGSにNOCCACHE=yを指定しておく。

毎日実行すること

  • portindexで/usr/ports/INDEXの生成
  • portsdb -uで/usr/ports/INDEX.dbの生成
  • portupgrade -aFでアップデートされたportsのdistfilesをfetchしておく
  • portupgrade -apでアップデートされたportsのビルド
  • portsclean -DPで古いdistfilesとpackagesの削除

INDEXとINDEX.dbを圧縮する

bzip2で圧縮して転送ファイルサイズを減らします。

cd /usr/ports
/usr/bin/bzip2 -fk /usr/ports/INDEX.db
/usr/bin/bzip2 -fk /usr/ports/INDEX

www/apache2でpackagesを公開する

Webサーバーとしてapache2をインストールする。

#portinstall www/apache2

/usr/local/etc/apache2/httpd.confにディレクティブを追加する。

/usr/local/etc/apache2/httpd.conf

Alias /ports/ "/usr/ports/"
<Directory "/usr/ports">
    Options Indexes MultiViews
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

クライアントを設定する

INDEXとINDEX.dbをfetchする。スクリプトファイルにしてperiodicやcrontabから自動実行してもよい。

cd /usr/ports
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.bz2 > /dev/null && \
/usr/bin/bunzip2 -f INDEX.bz2

/etc/make.confに下記のように設定する。ports.example.jpはpackagesサーバーのホスト名に変えること。

/usr/local/etc/pkgtools.confのPKG_SITESの項目にもpackagesサーバーのホスト名を追加しておく。

/etc/make.conf

MASTER_SITE_OVERRIDE=http://ports.example.jp/ports/distfiles/${DIST_SUBDIR}/

/usr/local/etc/pkgtools.conf

PKG_SITES = [
'http://ports.example.jp/ports/',
    pkg_site_mirror(),
]

クライアント側のアップデート

portupgrade -PP hogehogeでpackagesサーバーで作られたバイナリpackageを使用してアップデートできます。(hogehogeには実際のports名を指定してください) INDEX.dbをfetchして更新してあると、portversion -vL=でアップデートされたportsを確認できます。

参考にした資料

  • FreeBSD Press No.10

更新日 $Date: 2004/12/22 18:03:41 $

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

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

writeback message: