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

第38回 Plamo Linuxのビルドスクリプトとパッケージ管理ツール[その1]

この記事を読むのに必要な時間:およそ 7 分

日中は厳しい残暑が続くものの,朝晩はずいぶん涼しくなり,2台のマシンに火を入れても作業できるようになってきました。8月の上旬には非常勤講師の仕事の方も一段落したので,しばらくの間停滞していた32ビット版のパッケージ作り作業に復帰し,とりあえず32ビット版でもXfce-4.10が動く程度にはパッケージを揃えてみました。

図1 Xfce-4.10 on Plamo/32

図1 Xfce-4.10 on Plamo/32

このひと月ばかり,ずっとパッケージ作りに励んでいましたが,どれくらいパッケージを作ったかな,と思ってplamo.linet.gr.jpのそれぞれのディレクトリを調べてみたところ,

% find x86_64 -type f -user kojima -mtime -40 -name "*txz" | wc -l
367
% find x86 -type f -user kojima -mtime -40 -name "*txz" | wc -l
467

となり,800を越えるパッケージを更新していたようです。

もちろん,パッケージは「速く作る」ことよりもきちんと作ることが大事なのは言うまでもありませんが,X Window SystemやXfce,KDEといった関連するソフトウェアが多数におよぶ大規模なシステムの場合,ある程度まとめてパッケージを作らないと動作テストすらできません。

このひと月ほどの間に,64ビット環境ではKDE-4.9.0を,32ビット環境ではX11R77Xfceを動作できるようにしたので,これだけ多くのパッケージを短期間のうちに更新することになったのでしょう。

これくらいのペースでパッケージを作ろうとすると,一々手動でconfigureやmakeをしていては大変なので,ビルドスクリプトで自動化することが必須になります。

Plamo Linuxで採用しているtgz/txz形式のパッケージはrpmやdebに比べて非力ですが,その分作成するのも簡単で,最近のソフトウェアではほぼ自動的にパッケージを作成することができます。今回から何回かに分けてPlamo Linuxのビルドスクリプトとパッケージ管理システムについて解説してみましょう。

PlamoBuildスクリプトの使い方

Plamo Linuxのパッケージを作るためのビルドスクリプトは,それぞれのパッケージごとにPlamoBuild."パッケージ名-バージョン番号"という名前で,/usr/share/doc/以下の"パッケージ名-バージョン番号"ディレクトリ以下にgzip形式で圧縮して収められています。

たとえば,XfceのファイルマネジャーであるThunar-1.4.0の場合,/usr/share/doc/Thunar-1.4.0/PlamoBuild.Thunar-1.4.0.gz がビルドスクリプトです。なお,このディレクトリにはビルドスクリプト以外にも,ソースコードに添付されていたREADME等のファイルが圧縮して収められています。

$ ls /usr/share/doc/Thunar-1.4.0/
AUTHORS.gz      HACKING.gz                   README.gtkrc     TODO.gz
COPYING.LIB.gz  INSTALL.gz                   README.gz        Thunar-1.4.0-filename-order.patch.gz
COPYING.gz      NEWS.gz                      README.thunarrc
ChangeLog.gz    PlamoBuild.Thunar-1.4.0.gz*  THANKS.gz

PlamoBuildスクリプトは,完結したシェルスクリプトとして設計されているので,ビルドスクリプトからパッケージを再構築するのは簡単です。ビルドスクリプトは,downloadconfigbuildpackageの4つのコマンドを指定でき,それぞれソースコードのダウンロード,configure等の実行,コンパイル,ビルドしたファイルのパッケージ化,の処理を行います。

例として,先に見たPlamoBuild.Thunar-1.4.0.gzを用いてパッケージの再構築をしてみましょう。

まず適当なディレクトリを用意して,そこにビルドスクリプトをコピー,展開しておきます。

$ mkdir /mnt/Srcs/T/Thunar ; cd /mnt/Srcs/T/Thunar
$ cp /usr/share/doc/Thunar-1.4.0/PlamoBuild.Thunar-1.4.0.gz . 
$ gunzip PlamoBuild.Thunar-1.4.0.gz

次に,downloadを指定してこのビルドスクリプトを実行します。後述しますが,ビルドスクリプトにはソースコードの入手先が記載されているので,指定されたURLからソースコードをダウンロードし,自動的に展開します。

$ ./PlamoBuild.Thunar-1.4.0 download
--2012-09-26 15:03:38--  http://archive.xfce.org/src/xfce/thunar/1.4/Thunar-1.4.0.tar.bz2
archive.xfce.org (archive.xfce.org) をDNSに問いあわせています... 138.48.2.107
archive.xfce.org (archive.xfce.org)|138.48.2.107|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました,応答を待っています... 302 Found
場所: http://mirror.yongbok.net/X11/xfce-mirror/src/xfce/thunar/1.4/Thunar-1.4.0.tar.bz2
...
100%[======================================>] 1,915,160   25.4K/s 時間 73s     

2012-09-26 15:04:53 (25.5 KB/s) - `Thunar-1.4.0.tar.bz2' へ保存完了 [1915160/1915160]

Thunar-1.4.0/
Thunar-1.4.0/plugins/
Thunar-1.4.0/plugins/thunar-sendto-email/
Thunar-1.4.0/plugins/thunar-sendto-email/thunar-sendto-email.desktop.in.in
...
Thunar-1.4.0/acinclude.m4
Thunar-1.4.0/README
$ ls
PlamoBuild.Thunar-1.4.0*  Thunar-1.4.0/  Thunar-1.4.0.tar.bz2

次にconfigを指定してビルドスクリプトを実行し,コンパイルするための準備作業を行います。ソースコードにパッチをあてる場合,この段階でパッチファイルが適用されるので,ビルドスクリプトと同じディレクトリにパッチファイルを用意しておく必要があります。Thunar-1.4.0の場合は,日本語等の非ラテン語のファイル名が正しい順番に表示されない問題を修正するパッチが公開されており,このパッチファイルもビルドスクリプトと同じ/usr/share/doc/Thunar-1.4.0/ディレクトリに保存されているので,ソースコードと同じディレクトリに用意しておきます。

$ cp /usr/share/doc/Thunar-1.4.0/Thunar-1.4.0-filename-order.patch.gz .
$ gunzip Thunar-1.4.0-filename-order.patch.gz

なお,パッチファイルの有無についてもビルドスクリプトに記載されており,詳細については後述します。

ビルドスクリプトの引数にconfigを指定して実行すると,64ビット版の場合はbuild/,32ビット版の場合はbuild32/というディレクトリを作成し,ダウンロードしてきたソースコードをコピーして,パッチファイルを適用した上でconfigureを実行します。

$ ./PlamoBuild.Thunar-1.4.0 config
patching file thunar/thunar-file.c
patching file thunar/thunar-file.h
patching file thunar/thunar-file.c
checking build system type... x86_64-unknown-linux-gnu
checking host system type... x86_64-unknown-linux-gnu
...
* Trash Panel Applet:                 yes
* User Customizable Actions:          yes
* Wallpaper support:                  yes
$

次にbuildを指定して実際のコンパイル作業を行います。

$ ./PlamoBuild.Thunar-1.4.0 build
make  all-recursive
make[1]: ディレクトリ `/mnt2/Srcs/T/Thunar/build' に入ります
Making all in icons
...
ITMRG  Thunar-folder-handler.desktop
rm Thunar-folder-handler.desktop.in Thunar.desktop.in Thunar-bulk-rename.desktop.in
make[2]: ディレクトリ `/mnt2/Srcs/T/Thunar/build' から出ます
make[1]: ディレクトリ `/mnt2/Srcs/T/Thunar/build' から出ます
$

最後にpackageを指定して,作成したバイナリファイルをパッケージ化します。packageを指定すると,まず「root権限でパッケージを作成するかどうか」を問われます。実際にインストールするパッケージを作る際は,インストールするファイルのuidやパーミッションを正しく設定するためにroot権限が必要になりますが,試しに作成してみる場合は一般ユーザのままでも構いません。

$ ./PlamoBuild.Thunar-1.4.0 package
Do you want to package as root? [y/N] 
Making install in icons
make[1]: ディレクトリ `/mnt2/Srcs/T/Thunar/build/icons' に入ります
Making install in 16x16
...
pruning symlink in /mnt2/Srcs/T/Thunar/work/usr/share/man/mann
basename:Thunar
version:1.4.0
arch:x86_64
build:P4
ext:txz

以上の操作でThunar-1.4.0のx86_64環境用パッケージが作成できました。

$ ls -l *txz
-rw-r--r-- 1 kojima users 955,932  9月 27日  08:01 Thunar-1.4.0-x86_64-P4.txz

作成したパッケージは,インストールすべきファイルやディレクトリをtar形式に固めてxzで圧縮しているだけなので,tarコマンドだけで内容一覧が表示できます。

$ tar tvf Thunar-1.4.0-x86_64-P4.txz
drwxr-xr-x kojima/users      0 2012-09-27 09:00:00 usr/
drwxr-xr-x kojima/users      0 2012-09-27 09:00:00 usr/share/
drwxr-xr-x kojima/users      0 2012-09-27 09:00:00 usr/share/icons/
...
drwxr-xr-x kojima/users      0 2012-09-27 08:01:11 install/
-rw-r--r-- kojima/users    285 2012-09-27 09:00:00 install/doinst.sh

PlamoBuildスクリプトは,引数を指定せずに起動すればconfig, build, packageの順に実行するので,ソースコードやパッチファイルなどをあらかじめ用意しておけば,ほぼ自動的にパッケージが作成できます。このビルドスクリプトのおかげで,最初に述べたようなパッケージの大量生産が可能だったわけです。

著者プロフィール

こじまみつひろ

Plamo Linuxとりまとめ役。もともとは人類学的にハッカー文化を研究しようとしていたものの,いつの間にかミイラ取りがミイラになってOSSの世界にどっぷりと漬かってしまいました。最近は田舎に隠棲して半農半自営な生活をしながらソフトウェアと戯れています。

URLhttp://www.linet.gr.jp/~kojima/Plamo/index.html

コメント

コメントの記入