[[diary/Kojima]]
・make_PlamoBuild.py(その3)
PlamoBuild スクリプトの基本動作について
config を引数に実行(PlamoBuild.XXXX config)すると,
build ディレクトリを(存在していれば削除した上で)新しく作り,
ヘッダの src 行で指定したディレクトリの中身を cp -a で build ディレクトリにコピーした上で,
$patchfiles が定義されていればそれらのパッチを適用した上で,
build ディレクトリ内で configure コマンドを実行します.
configure コマンドが実行されたり,実際のビルドが行なわれるのは,
ソースコードのあるディレクトリではなく,作業用の build ディレクトリであることにご注意ください.
build を引数に実行すると,config を引数に実行して生成した build ディレクトリ内で
make を実行します.デフォルトでは,make の動作を少しでも効率化するために Dual CPU を前提に
make -j3 を実行し,3つのプロセス(2つのコンパイル用プロセス + 1 つの管理用プロセス)
を実行するようにしていますが,ソフトウェアによってはコンパイルの並列化に対応していないため,
ビルド時にエラーになることがあるので,よく分からないエラーが出た場合は make -j3 を make
にして試してみるのも手です.build/ ディレクトリには設定済みのソースコードがあるので,
build ディレクトリで make を実行すれば,並列化をやめた場合の動作をチェックすることができます.
ソースコードがコンパイルできれば package を引数に PlamoBuild スクリプトを実行します.
package を引数にすると,root 権限でパッケージを作成するかを尋ねた上で,
work ディレクトリ以下に usr/{bin,lib} 等のディレクトリを作ってそこにバイナリファイル等を
インストールし,cd work して /sbin/makepkg コマンドを実行して Plamo 用のパッケージを生成します.
PlamoBuild スクリプトは,/sbin/makepkg を実行する前に,work/usr/bin 以下のファイルを strip したり,
work/usr/share/doc 以下のドキュメントファイルを圧縮したりする等の処理を行います.
PlamoBuild スクリプトでパッケージを作成する際は,一度一般ユーザーで
(root 権限で実行するかの質問にはn と答えて)インストールテストをしてみることお勧めします
GNU の autoconf/automake に対応したソフトウェアでは,make install 時に prefix=.. で
インストール先のディレクトリを指定すれば,そのディレクトリ以下にバイナリをインストールしてくれますが,
ソフトウェアによっては,最近の風潮に合わせて configure スクリプトこそ用意しているものの,
中身は独自のスクリプトで,インストール先は /usr/local 決め打ち,なんてのもあったりしますが,
一般ユーザ権限でインストールテストしてみれば,そのようなインストール先を検出することが可能です.
一度一般ユーザーでインストールテストをしてみて,問題が無ければ root 権限でパッケージを作成しましょう.
これら一連の流れの例を紹介します.以下では anthy-9100g をパッケージにしています.
% mkdir Anthy
% mv ~/Desktop/anthy-9100g.tar.gz . (anthy-9100g.tar.gz は firefox 経由で ~/Destop にダウンロード済)
% /share/Srcs/make_PlamoBuild.py anthy-9100g.tar.gz
dirname = anthy-9100g
9100g
anthy anthy
patches: []
making PlamoBuild.anthy-9100g ...
% ./PlamoBuild.anthy-9100g config
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for gawk... gawk
..
config.status: creating config.h
config.status: executing depfiles commands
% vi PlamoBuild.anthy-9100g
url=http://sourceforge.jp/projects/anthy/downloads/37336/anthy-9100g.tar.gz # ダウンロード先を記録
...
% PlamoBuild.anthy-9100g build
make all-recursive
make[1]: ディレクトリ `/home/kojima/Anthy/build' に入ります
Making all in src-diclib
make[2]: ディレクトリ `/home/kojima/Anthy/build/src-diclib' に入ります
if /bin/sh ../libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -I.. -I../ \
-DCONF_DIR=\"/etc\" -g -O2 -W -Wall -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes \
-pedantic -Wno-long-long -MT diclib.lo -MD -MP -MF ".deps/diclib.Tpo" -c -o diclib.lo diclib.c; \
then mv -f ".deps/diclib.Tpo" ".deps/diclib.Plo"; else rm -f ".deps/diclib.Tpo"; exit 1; fi
make[2]: ディレクトリ `/home/kojima/Anthy/build' に入ります
make[2]: ディレクトリ `/home/kojima/Anthy/build' から出ます
make[1]: ディレクトリ `/home/kojima/Anthy/build' から出ます
% ./PlamoBuild.anthy-9100g package
Do you want to package as root? [y/N] n
Making install in src-diclib
make[1]: ディレクトリ `/home/kojima/Anthy/build/src-diclib' に入ります
make[2]: ディレクトリ `/home/kojima/Anthy/build/src-diclib' に入ります
..
pruning symlink in /home/kojima/Anthy/work/usr/share/man/man9
pruning symlink in /home/kojima/Anthy/work/usr/share/man/mann
Making ../anthy-9100g-i586-P1.tgz...
% ls -lR work # work 以下にインストールされたファイルの確認
...
% tar tvf anthy-9100g-i586-P1.tgz # 生成されたパッケージの確認
...
% ./PlamoBuild.anthy-9100g package
Do you want to package as root? [y/N] y
パスワード: XXXXXX
Making install in src-diclib
make[1]: ディレクトリ `/home/kojima/Anthy/build/src-diclib' に入ります
make[2]: ディレクトリ `/home/kojima/Anthy/build/src-diclib' に入ります
...
% su
パスワード: XXXX
bash-3.2# updatepkg -f anthy-9100g-i586-P1.tgz # updatepkg コマンドでパッケージのインストール
Removing package anthy...
Removing files:
--> Deleting symlink usr/lib/libanthy.so
--> Deleting symlink usr/lib/libanthy.so.0
...
--> Deleting empty directory usr/include/anthy
anthy-9100g-i586-P1 のインストール中
PACKAGE DESCRIPTION:
anthy-9100g-i586-P1 のインストールスクリプトを実行中
# rm -rf work pivot i.st i.et # 作業用のディレクトリ等の削除
以上で Plamo 用の anthy-9100g のパッケージ化が完了しました.
引数を指定せずに PlamoBuild スクリプトを実行すると、自動的に config, build, package
を指定したものとして実行し、パッケージを生成します。詳細は次回以降に後述しますが、
あらかじめインストール先の設定が必要なX11/GNOME/KDE 用以外のパッケージは、
たいてい自動生成された PlamoBuild スクリプトをそのまま利用できると思います。
Plamo Linux の場合,できるだけそれぞれのソフトウェアを素のままで使うようにしているので,
パッケージ作りも spec ファイルを書いたり deb ファイルを書くよりもはるかに簡単だと思います.
Plamo のメンテナはそれぞれ守備範囲(自分の好み :-)が偏っているので,
便利なソフトでも見落しているものがかなりあると思います.
そのようなソフトウェアはぜひパッケージ化して紹介してください.
#comment