#navi(FAQ-4.2) カテゴリー: アプリケーション
Plamo の世界では rpm や deb のような洗練されたパッケージ作成の仕組みは用意されていませんが,手元では PlamoBuild.template と言うビルド用のスクリプト (以下テンプートスクリプト) でたいていのパッケージを作成しています.
本稿では,このテンプレートスクリプトについて,その使い方を簡単に紹介します.
PlamoBuild.template は configure スクリプトによって環境を調べて Makefile を作成る GNU Autoconf に対応したソフトウェアを前提にしており,このタイプのソフトウェアならたいてい以下に示す先頭部分の修正のみで適用できるはずです.
逆に Autoconf にきちんと対応していないソフトウェアの場合は,多少の手作業が必要になりますので注意してください.
以下では http://prdownloads.sourceforge.net/linux-diag/sysfsutils-2.0.0.tar.gz?download からダウンロードしてきた sysfsutils-2.0.0.tar.gz というソフトウェアをパッケージ化してみます.
% mv PlamoBuild.template PlamoBuild.sysfsutils-2.0.0ビルドスクリプトはパッケージ化したいソフトウェアの一つ上のディレクトリに置いておくのが便利です.
#!/bin/sh ################### url= src= pkgbase= vers= arch= build=P1 pkg=`echo $pkgbase"-"$vers"-"$arch"-"$build".tgz"` DOCS="README ../PlamoBuild.$src" OPT_CONFIG='' ###################凝ったことをする必要が無い場合,この #### で囲った部分に必要な情報を設定するだけでビルドスクリプトは機能します.それぞれの項目の意味は以下の通りです.
url= そのソフトウェアの入手先.無くても構いませんが,記録に残しておく方が後々便利です. src= ソフトウェアのバージョン込みの名称 (/usr/share/docs 以下にドキュメントファイルを作る際に利用) pkgbase= ソフトウェアのバージョン抜きの名称 (Plamo的にはパッケージのベース名./var/log/packages 以下にはこの名称が記録される) vers= ソフトウェアのバージョン arch= アーキテクチャ名(CPUの種類)の指定 Plamo の場合,アーキテクチャ名の意味は以下の通り. i386 : ix86 系の CPU ではたいてい動くはず i586 : Pentium 以降じゃないと動かない i686 : Coppermine(PentiumIII/Celeron あたり)以降じゃないと動かない noarch : バイナリではなくテキストや設定ファイル等 build= ビルド番号.同じパッケージを作り直した時の識別用 pkg= 上記情報から生成されるパッケージのフルネーム.通常は設定不要. DOCS= ソフトウェアに含まれているドキュメントファイル群.ここで指定したファイルが /usr/share/$src 以下に格納される.ドキュメントにどのファイルを含めるかの決 まりはありませんが,最低限 README と Copyright 関係のファイルは含めるように しておきましょう. OPT_CONFIG= ./configure 実行時に --enable-gui 等,別途指定したいオプションを追加する.今回パッケージ化しようとしている sysfsutils-2.0.0 の場合は以下のように指定しました.
################### url=http://prdownloads.sourceforge.net/linux-diag/sysfsutils-2.0.0.tar.gz?download src=sysfsutils-2.0.0 pkgbase=sysfsutils vers=2.0.0 arch=i386 build=P1 pkg=`echo $pkgbase"-"$vers"-"$arch"-"$build".tgz"` DOCS="AUTHORS COPYING CREDITS ChangeLog INSTALL NEWS README TODO docs/libsysfs.txt ../PlamoBuild.$src" OPT_CONFIG='' ###################
% cd sysfsutils-2.0.0 % sh ../PlamoBuild.sysfsutils-2.0.0 sh ../PlamoBuild.sysfsutils-2.0.0 Making clean in test make[1]: Entering directory `/mnt/Srcs/S/sysfsutils-2.0.0/test' rm -f dlist_test dlist_test rm -f get_device get_devicesysfsutils-2.0.0 を展開したディレクトリに移って,一つ上の PlamoBuild.sysfsutils-2.0.0 が引数なしで実行されます.
make[1]: Leaving directory `/mnt/Srcs/S/sysfsutils-2.0.0' checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for gawk... gawk checking whether make sets $(MAKE)... yesまず ./configure が走り環境をチェックし,問題なければ必要な Makefile が生成されて make が実行されます.
make[1]: Entering directory `/mnt/Srcs/S/sysfsutils-2.0.0' Making all in lib make[2]: Entering directory `/mnt/Srcs/S/sysfsutils-2.0.0/lib' if /bin/sh ../libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -I.. -I../include -Wall -W -Wstrict-prototypes -g -O2 -MT libsysfs_la-sysfs_utils.lo -MD -MP -MF ".deps/libsysfs_la-sysfs_utils.Tpo" -c -o libsysfs_la-sysfs_utils.lo `test -f 'sysfs_utils.c' || echo './'`sysfs_utils.c; \then mv -f ".deps/libsysfs_la-sysfs_utils.Tpo" ".deps/libsysfs_la-sysfs_utils.Plo"; else rm -f ".deps/libsysfs_la-sysfs_utils.Tpo"; exit 1; fimake が終ると make install DESTDIR=`pwd`/work が実行されます.
Making install in lib make[1]: Entering directory `/mnt/Srcs/S/sysfsutils-2.0.0/lib' make[2]: Entering directory `/mnt/Srcs/S/sysfsutils-2.0.0/lib' test -z "/usr/lib" || mkdir -p -- "/mnt/Srcs/S/sysfsutils-2.0.0/work/usr/lib" /bin/sh ../libtool --mode=install /usr/bin/install -c 'libsysfs.la' ' /mnt/Srcs/S/sysfsutils-2.0.0/work/usr/lib/libsysfs.la' /usr/bin/install -c .libs/libsysfs.so.2.0.0 /mnt/Srcs/S/sysfsutils-2.0.0/work/usr/lib/libsysfs.so.2.0.0make install が終了すると,インストール済みのバイナリファイルを strip したり man pages を圧縮したりの処理が実行されます.
make[1]: Leaving directory `/mnt/Srcs/S/sysfsutils-2.0.0' compressing /mnt/Srcs/S/sysfsutils-2.0.0/work/usr/lib j:libsysfs.so j:libsysfs.so.2 j:libsysfs.so.2.0.0 stripping -g libsysfs.so.2.0.0 ranlib and stripping -g libsysfs.a compressing /mnt/Srcs/S/sysfsutils-2.0.0/work/lib compressing /mnt/Srcs/S/sysfsutils-2.0.0/work/usr/bin最後に work/ ディレクトリで /sbin/makepkg sysfsutils-2.0.0-i386-P1.tgz が実行されます.
There are symbolic links in this package. Do you want to convert the symbolic links in this package into an installation script named "/install/doinst.sh"? If you do, the symbolic links will be removed. You can get them back easily, though, by typing ... ./usr/lib/libsysfs.so ./usr/lib/libsysfs.so.2 Making sysfsutils-2.0.0-i386-P1.tgz...作成されたパッケージの内容をチェック (この時点では各ファイルの所有者は一般ユーザー kojima のまま) してみます.
% tar tvzpf work/sysfsutils-2.0.0-i386-P1.tgz tar tvzpf work/sysfsutils-2.0.0-i386-P1.tgz drwxr-xr-x kojima/users 0 2006-06-05 15:43:54 usr/ drwxr-xr-x kojima/users 0 2006-06-05 15:43:54 usr/bin/ -rwxr-xr-x kojima/users 6952 2006-06-05 15:43:54 usr/bin/dlist_test -rwxr-xr-x kojima/users 3520 2006-06-05 15:43:54 usr/bin/get_device -rwxr-xr-x kojima/users 4572 2006-06-05 15:43:54 usr/bin/get_driver -rwxr-xr-x kojima/users 4136 2006-06-05 15:43:54 usr/bin/get_moduleパッケージが正しく作成されていることを確認したら,root 権限でパッケージ作成部分 ( make install から /sbin/makepkg まで) を再実行します.
% su root's password: ******** # sh ../PlamoBuild.sysfsutils-2.0.0 package Making install in lib make[1]: Entering directory `/mnt/Srcs/S/sysfsutils-2.0.0/lib' make[2]: Entering directory `/mnt/Srcs/S/sysfsutils-2.0.0/lib'こうすれば各ファイルの所有者が root (あるいは root 以外の適切な所有者) になります.
# tar tvzpf work/sysfsutils-2.0.0-i386-P1.tgz drwxr-xr-x root/root 0 2006-06-05 15:50:12 usr/ drwxr-xr-x root/root 0 2006-06-05 15:50:13 usr/bin/ -rwxr-xr-x root/root 6952 2006-06-05 15:50:13 usr/bin/dlist_test -rwxr-xr-x root/root 3520 2006-06-05 15:50:13 usr/bin/get_device -rwxr-xr-x root/root 4572 2006-06-05 15:50:13 usr/bin/get_driver -rwxr-xr-x root/root 4136 2006-06-05 15:50:13 usr/bin/get_moduleこれで sysfsutils-2.0.0 をパッケージ化した work/sysfsutils-2.0.0-i386-P1.tgz というパッケージが完成しました.
このパッケージは /sbin/installpkg や /sbin/removepkg でインストールやアンインストールが実行できます.
PlamoBuild.template 自体は簡単なシェルスクリプトになっているので,内部でどのような処理をしているかは適宜スクリプトを読解してみてください.
また,パッケージ作成時に用いた PlamoBuild スクリプトは /usr/share/docs/ 以下の各パッケージのドキュメントにたいてい添付されていますので参考にしてください.
新しいテンプレートスクリプトと,実際の作成例として TiMidity++-2.13.2 のビルド用スクリプトは,以下のURLからダウンロードできます.
パッケージ作成の基本的な流れは,上記と大きく変わっていませんが,スクリプト内部的に以下の部分が変更されています。
[使用例] # install -D -m 644 $srcfile $destfile # install -pD -m 644 $srcfile $destfile ↓ # install2 $srcfile $destfile # install2 $srcfile $destfile ; touch -r $srcfile $destfile
$ ./Plamobuild.hoge download config build $ su # ./Plamobuild.hoge packageでパッケージが作成できるので便利です.
ちなみに,このスクリプトで作った Plamo パッケージは,同じ日であれば何度作っても (ファイルにタイムスタンプ埋め込みなどが無い限り) ,バイナリ的に同一となります.
この件に関して追加情報などありましたら、以下にどうぞ;