平衡点
2009/02/20
_ Debian パッケージ作成環境の構築
先日, 念願の 64bit 環境を手に入れたので, 野良パッケージ作成様の環境を構築した. 母艦は Core2Quad の Debian GNU/Linux 5.0(lenny), amd64. ここに amd64,i386 の pbuild 環境を構築する. 作成する野良パッケージは, 主に地球流体電脳倶楽部 で公開しているソフトウェア群.本家に上げたいのだけれども, ライセンスの確認(あんまり問題無さそう)とFortran コンパイラの問題ので, とりあえずは保留.
必要なソフトウェアの導入
クリーンな依存関係の test/clean な build 環境を提供するためのパッケージとして,Debian にはpbuilder がある. これを導入する. で, pbuilder では環境を固めた base.tgz を展開し chroot しているのだけれど, これを少し高速化するためのパッケージとしてcowdancer がある.これらを導入する.
環境構築
cowbuilder の設定
以下に書く内容は非常に ad hoc. 今ドキュメントを眺めてみると, もうちょっと賢いやりかたはある.
64bit 版(amd64)の base.cow を作成する. ここでは /var/cache/pbuilder/lenny-amd64.cow に置くことにする.
$ sudo cowbuilder --create \ --distribution lenny \ --basepath /var/cache/pbuilder/lenny-amd64.cow
32bit 版(x86)の base cow は /var/cache/pbuilder/lenny-i386.cow に作成
$ sudo cowbuilder --create \ --distribution lenny \ --basepath /var/cache/pbuilder/lenny-i386.cow \ --debootstrapopts --arch --debootstrapopts i386
初期設定として, それぞれに電脳サーバの apt-line と GPG Key を追加しておく.
$ sudo -s # HOME=/root cowbuilder --login --save-after-login
login できるのだけれども base system しか無いので vi が無い.面倒なので cowbuilder がハードリンクを貼った先(/var/cache/pbuilder/build/pid.cow) を修正する
追加した apt-line は電脳サーバの apt-line と localhost の apt-line.最初は deb file:// としていたのだけれども, pbuilder/cowbuilder は chroot しているので親のファイルが見えない. しょうがないから localhost 閲覧限定で httpd(apache) を上げて, そこから取得することにする.
追加した apt-line は以下の通り.
# GPG key: AEE995F4 deb ftp://www.gfd-dennou.org/arch/cc-env/debian-dennou/ lenny/ deb-src http://www.gfd-dennou.org/arch/cc-env/debian-dennou/ lenny/ deb http://localhost/debian/ ./ deb-src http://localhost/debian/ ./
あとは GPG key の追加. これは cowbuilder で login した shell で apt-key を実行して追加する.
apache の設定
pbuilder/cowbuilder から参照できるようにlocal に httpd を立ち上げて, 作成したパッケージが apt で取得できるようにする.その後で /etc/apache2/sites-available/pbuild を作成して以下の内容を追記.
$ sudo aptitude install apache2 $ cat /etc/apache2/sites-available/pbuild <VirtualHost *:80> Alias /pbuild/ "/var/cache/pbuilder/result/" <Directory "/var/cache/pbuilder/result/"> Options Indexes MultiViews FollowSymLinks AllowOverride None Order deny,allow Deny from all Allow from 127.0.0.0/255.0.0.0 ::1/128 </Directory> </VirtualHost> $ sudo a2ensite pbuild
これで pbuilder/cowbuilder の chroot 環境でもhttp://localhost/pbuild が見えるようになる.
スクリプトの準備
パッケージの構築には以下のスクリプトを使用(( .pbuildrc で設定できる項目もあるけど )).
電脳サーバではパッケージを pool スタイルで管理していない((パッケージ名のディレクトリに置いてある))ので, パッケージ名のディレクトリを作成し, そこに結果を置くことにする.
あと, 作成したパッケージを apt で http://localhost/pbuild から取得できるように作成したパッケージを/var/cache/pbuilder/result/ にハードリンクして, apt-ftparchive を実行している(mkaptline, 実体は apt-ftparchive + 鍵署名).
# source: bash #!/bin/bash set -e PWD=$(pwd) DENNOU_PKG_NAME=`echo $@ | awk -F_ '{print $1}'` RESULTDIR=$HOME/pbuild/result/$DENNOU_PKG_NAME [ -d $RESULTDIR ] || mkdir -p $RESULTDIR DISTLIST=$(ls -d /var/cache/pbuilder/*.cow) CONFIG=$DENNOU_PKG_NAME.pbuilderrc cat << EOF > $HOME/pbuild/$CONFIG BUILDRESULT=$RESULTDIR/ EOF for CHROOTDIR in $DISTLIST do ARCH=$(basename $(basename $CHROOTDIR | cut -d'-' -f2) .cow) sudo cowbuilder --update --basepath $CHROOTDIR sudo cowbuilder --build \ --basepath $CHROOTDIR \ --configfile $CONFIG \ --debootstrapopts --arch \ --debootstrapopts $ARCH $@ done sudo ln $RESULTDIR/* /var/cache/pbuilder/result/ rm -f $HOME/pbuild/$CONFIG $HOME/bin/mkaptline
結果
そんな訳で電脳 Ruby 謹製品 Debian Packageの更新は終了. 今迄amd64 のパッケージは人に頼んでいたのだけれど, それもできるようになった.
あとは spml に必要なライブラリ ですか...
うーん. gfortran がきちんと動くようになってくれれば, 本家に入れられるのに...