Debian パッケージ作成環境の構築

先日, 念願の 64bit 環境を手に入れたので, 野良パッケージ作成様の環境を構築した.

母艦は Core2QuadDebian GNU/Linux 5.0(lenny), amd64. ここに amd64,i386 の pbuild 環境を構築する. 作成する野良パッケージは, 主に地球流体電脳倶楽部 で公開しているソフトウェア群.

本家に上げたいのだけれども, ライセンスの確認(あんまり問題無さそう)とFortran コンパイラの問題*1ので, とりあえずは保留.

必要なソフトウェアの導入

クリーンな依存関係の 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 に作成*2

 $ 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 が無い*3.面倒なので cowbuilder がハードリンクを貼った先(/var/cache/pbuilder/build/pid.cow) を修正する*4

追加した 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 が見えるようになる.

スクリプトの準備

パッケージの構築には以下のスクリプトを使用*5.

電脳サーバではパッケージを pool スタイルで管理していない*6ので, パッケージ名のディレクトリを作成し, そこに結果を置くことにする.

あと, 作成したパッケージを apt で http://localhost/pbuild から取得できるように作成したパッケージを/var/cache/pbuilder/result/ にハードリンクして, apt-ftparchive を実行している(mkaptline, 実体は apt-ftparchive + 鍵署名).

#!/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 がきちんと動くようになってくれれば, 本家に入れられるのに...

*1:gfortran は f90 のコンパイラとしてはまだまだ使いモンにならない

*2:分けなくても良いのかもしれないけれど

*3:nano はある

*4: もしかして, /var/cache/pbuilder/*.cow を修正するのと同じ?

*5: .pbuildrc で設定できる項目もあるけど

*6:パッケージ名のディレクトリに置いてある