玩式草子─ソフトウェアとたわむれる日々

第5回Plamo Linux 4.71とメタ・ビルドスクリプト

前回、Plamo Linux 4.7について紹介したばかりですが、4.7のリリースに間に合わなかったパッケージや公開後にセキュリティアップデートがあったパッケージをまとめたPlamo Linux 4.71を11月の下旬に公開しました。

4.71というバージョン番号が示すように、今回の更新はメンテナンス・リリースという位置づけで、必要なパッケージを個別にアップデートしても追従できるレベルの変更です。そのため、4.7をインストールした人向けに、4.7から更新したパッケージのみをまとめてみました。

更新したパッケージはインストーラのカテゴリ分けに従って分類されているので、更新したいカテゴリのみを適用することも可能です。

更新したパッケージを確認
 % ls
 00_base/     02_x11/  05_kde/    07_tex/     09_webdb/  md5sum
 01_minimum/  03_ext/  06_gnome/  08_kernel/  README
 % ls -R
 ./00_base:
 bash-3.2.50-i586-P1.tgz               openssl-0.9.8l-i586-P1.tgz
 dhcp-3.1.3-i586-P1.tgz                readline5-5.2.14-i386-P1.tgz
 kernel-2.6.31.6_plamoSMP-i586-P1.tgz  update-4.71-noarch-P6.tgz
 openssh-5.3p1-i586-P1.tgz             update.sh*
 ./01_minimum:
 bc-1.06-i586-P3.tgz           kernel_headers-2.6.31.6_plamoSMP-i386-P1.tgz
 ...

それぞれのディレクトリには簡単なアップデート用のスクリプト(update.sh)を用意し、このスクリプトを実行すればそのディレクトリにあるパッケージが更新されるようになっています。

4.7のリリースから1ヵ月半くらいしか経っていないので、それほど大きな規模にはならないだろうとタカをくくっていたのですが、実際にまとめてみるとパッケージ数で185約1GBほどのサイズにも達していました。

パッケージ数的には細かくモジュール化されて個数が増えたxorgサーバを更新した結果、サイズ的にはptetexやKDEといった大物が更新された結果で、今回の特殊事情という部分も大きいのですが、昨今のOSS開発の活発さを改めて印象づけられることになりました。

PlamoBuildスクリプトとメタ・ビルドスクリプト

前回紹介したように、最近のソフトウェアはたいていGNUのautoconf/automakeシステムを採用しているので、テンプレート化されたPlamoBuildスクリプトを用いれば、ヘッダ部分の修正のみでほとんどの場合に対応できます。しかし、XウィンドウやGNOMEデスクトップ環境など、構成するソフトウェアが200本近い規模のシステムでは、いちいちテンプレートファイルをコピーしてヘッダ部分を修正するだけでも大変な作業になります。

一方、ヘッダ部分に必要な情報のうち、パッケージ名やバージョン番号といった情報はソースコードのファイル名等から生成できますし、README等のドキュメントファイルも、たいてい同じような名前になっているので、ソースコードに含まれているそれらしいファイルを拾えば揃えることができます。

このように考えて、最近ではPlamoBuildスクリプトを作るためのスクリプトというのを用意して、PlamoBuildスクリプトも自動生成するようにしています。

このPlamoBuildスクリプトを作るためのスクリプト(正式な名称はつけていないので、以下ではとりあえずメタ・ビルドスクリプトと称しておきます)はPythonで書いてあり、こちらから入手することができます。

メタ・ビルドスクリプト(make_PlamoBuild.py)はソースコードの書庫ファイル名(tar.gz/tar.bz2ファイル)かソースコードを展開したディレクトリ名を引数に取り、そのソースコードをビルドするために必要なPlamoBuildスクリプトを生成します。

make_PlamoBuild.pyの使い方
 % ls
 xwd-1.0.3.tar.bz2
 % /share/Srcs/make_PlamoBuild.py xwd-1.0.3.tar.bz2 
 dirname =  xwd-1.0.3
 making PlamoBuild.xwd-1.0.3 ...
 % ls 
 PlamoBuild.xwd-1.0.3*  xwd-1.0.3/  xwd-1.0.3.tar.bz2

生成されたPlamoBuildスクリプト(PlamoBuild.xwd-1.0.3)のヘッダ部はこのようになっていて、先頭のurl行(ソースコードの入手先のURL)以外の情報は自動的に生成されます。

PlamoBuildスクリプトのヘッダ部
 #!/bin/sh
 ##############################################################
 url='input sourcecode url here'
 pkgbase=xwd
 vers=1.0.3
 arch=i586
 build=P1
 src=xwd-1.0.3
 OPT_CONFIG='--build=i586-pc-linux --disable-static'
 DOCS='AUTHORS COPYING ChangeLog INSTALL NEWS README'
 patchfiles=''
 ##############################################################
 ....

生成したPlamoBuildスクリプトは、前回紹介したようにconfigやbuildを指定して段階ごとの実行もできますし、引数を指定せずに一気にパッケージ生成まで進めることも可能です。

PlamoBuildスクリプトの実行例
 % ./PlamoBuild.xwd-1.0.3
 configure: WARNING: unrecognized options: --disable-static
 checking for a BSD-compatible install... /usr/bin/install -c
 checking whether build environment is sane... yes
 checking for a thread-safe mkdir -p... /bin/mkdir -p
 ...
 make[1]: ディレクトリ `/home/kojima/Test/build' に入ります
   CC     clientwin.o
   CC     dsimple.o
 ...
 make[1]: ディレクトリ `/home/kojima/Test/build' から出ます
 Do you want to package as root? [y/N] n
 make[1]: ディレクトリ `/home/kojima/Test/build' に入ります
 ...
 pruning symlink in /home/kojima/Test/work/usr/share/man/mann
 Making ../xwd-1.0.3-i586-P1.tgz...
 
 % ls
 PlamoBuild.xwd-1.0.3*  i.et  pivot/  xwd-1.0.3/             xwd-1.0.3.tar.bz2
 build/                 i.st  work/   xwd-1.0.3-i586-P1.tgz

メタ・ビルドスクリプトでは、ファイル名等から生成できないソースコードの入手先は空欄にしていますが、この部分はブラウザやFTPクライアントでダウンロードしたURLをcut&pasteすればいいので、PlamoBuildスクリプト作成の手間はずいぶん省けます。

メタ・ビルドスクリプトのオプション機能

Plamo Linuxの場合、ほとんどのバイナリファイルのインストール先は/usr以下ですが、ソフトウェアによっては専用のインストール先(Xの場合は/usr/X11R7、KDEの場合は/opt/kde等)を指定しなければならない場合もあります。そのような指定は configure 時の--prefix=...オプションで指定するため、PlamoBuildスクリプトの時点で設定する必要があり、メタ・ビルドスクリプトでもこれらを設定するためのオプションを用意しています。

メタ・ビルドスクリプトのオプション
 % /share/Srcs/make_PlamoBuild.py -h
 Usage:
 /share/Srcs/make_PlamoBuild.py : make PlamoBuild script for archive file or source tree(directory)

 /share/Srcs/make_PlamoBuild.py [-hv] [-t type] 
           -h, --help : help(show this message)
           -v, --verbose : verbose(not implemented yet)
           -u, --url= : source code url(need citation)
           -t, --type= : select script type. Script types are follows:
                 X : for X11 package(set --prefix to /usr/X11R7 )
                 KDE : for KDE package(set --prefix to /opt/kde)
                 local : for local installation(set --prefix to /usr/local)
                   otherwise --prefix is /usr
   archive_file is a source archive in tar.gz or tar.bz2 format
   directory is a source code directory
  example:  /share/Srcs/make_PlamoBuild.py myprogs.tar.bz2
            /share/Srcs/make_PlamoBuild.py mycode_directory

上記例に示したように-t Xと指定すれば configure 時に--prefix=/usr/X11R7が渡され、-t KDEと指定すれば--prefix=/opt/kdeが渡されるようにビルドスクリプトに設定されます。

-t localは configure 時に --prefix==... を渡さないための指定で、configureスクリプトのデフォルト値である/usr/localがインストール先になります。/usr/local は正規のパッケージのインストール先としてはふさわしくありませんが、公式のパッケージと明確に区別できるので、個人用のパッケージのインストール先としては便利でしょう。

-uオプションはソースコードの入手先のURLを指定するオプションで、

-u 'ftp://ftp.x.org/pub/X11R7.5/src/xserver/xorg-server-1.7.1.tar.bz2'

のように入手先のURLを指定してやれば、ビルドスクリプトのurl行に反映されます。

メタ・ビルドスクリプトはPythonで書いているので、 XウィンドウやGNOMEデスクトップ環境のように大量のソフトウェアを扱う場合は、スクリプト内に直接入手先を記載してしまう方が便利でしょう。たとえば、X11R75の場合はスクリプト内に

url = 'ftp://ftp.x.org/pub/X11R7.5/src/everything/' + filename + '-' + vers + '.tar.bz2'

のような行を追加して、url行も自動生成するようにしました。

ソースコードによっては何らかの修正(パッチ)が必要な場合もあります。そのような場合、ソースコードの書庫ファイル(tar.gzかtar.bz2ファイル)を置いたのと同じディレクトリにdiffpatchという拡張子を持つファイル(XXX.diff 等)を置いておけば、それらはソースコードに対するパッチと解釈され、PlamoBuildスクリプトのpatchfiles=..行に取り込まれます。

なお、パッチファイルは圧縮していないプレーンテキストで、 patch -p1(先頭のディレクトリを1つ省いて適用する)で適用できる形式にしておく必要があります。

メタ・ビルドスクリプトの制限

現在のメタ・ビルドスクリプトでは、xxx-1.0.tar.bz2という書庫ファイルを展開すれば、ソースコードはソフトウェア名とバージョンをハイフンでつないだディレクトリ(xxx-1.0/)に展開されることを仮定しています。そのため、書庫ファイル名とソースコードの展開先が一致しない場合(たとえばxxx-1.0.tar.bz2を展開すると xxx/というディレクトリにソースコードが展開される、など)は正しくソースコードを見つけることができません。そのような場合は展開済みのソースコードのあるディレクトリ名(今回の例では xxx/)を引数に指定して実行してください。

また、そのようなソースコードではビルドスクリプトのヘッダ部にあるパッケージ名やバージョン番号が正しく設定されないため、手動で設定してやる必要があります。


メタ・ビルドスクリプトはPlamoBuildスクリプトを簡便に作るための裏方として作ったスクリプトなので、例外条件等への対応はあまり丁寧ではありませんが、GNU autoconf/automakeを採用しているパッケージではたいてい使えるので、Plamo Linux用のパッケージを初めて作る人にも便利なツールでしょう。

最初にも述べましたが、最近のOSSの世界はすさまじく広がっている一方で、Plamo Linuxのメンテナは常に不足しています。メンテナが見落している面白そうなソフトウェアがあれば、前回紹介したテンプレートスクリプトや今回紹介したメタ・ビルドスクリプトでパッケージ化して紹介してください。少々マニアックなものでもcontrib以下に含めることは可能ですし、広くニーズがありそうなものならばplamo以下に収録してデフォルトでインストール対象にすることも可能です。

Plamo Linuxでは、皆さまの参加を常にお待ちしています。

おすすめ記事

記事・ニュース一覧