#navi(FAQ-4.2) カテゴリー: アプリケーション

Plamo Linux 的パッケージ作成方法

2006-06-18 (日) 18:10:39投稿
登録者: Plamodocs Project

Plamo の世界では rpm や deb のような洗練されたパッケージ作成の仕組みは用意されていませんが,手元では PlamoBuild.template と言うビルド用のスクリプト (以下テンプートスクリプト) でたいていのパッケージを作成しています.
本稿では,このテンプレートスクリプトについて,その使い方を簡単に紹介します.

PlamoBuild.template は configure スクリプトによって環境を調べて Makefile を作成る GNU Autoconf に対応したソフトウェアを前提にしており,このタイプのソフトウェアならたいてい以下に示す先頭部分の修正のみで適用できるはずです.
逆に Autoconf にきちんと対応していないソフトウェアの場合は,多少の手作業が必要になりますので注意してください.

事前準備 (テンプレートスクリプトの入手 )

  1. テンプレートスクリプトの入手
    テンプレートスクリプトは ftp://plamo.linet.gr.jp/pub/Plamo-src/admin/PlamoBuild.template からダウンロードできますので,適宜ダウンロードしておいてください.
  2. パッケージ化したいソフトウェアの入手と展開,事前チェック
    パッケージ化したいソフトウェアをダウンロードして適当なディレクトリで展開しておきます.展開した時にでも,そのソフトウェアが Autoconf に対応しているか ( configure スクリプトが含まれているか ) ,./configure が正しく実行できるか (必要な環境が揃 っているか) を確認しておく方がいいでしょう.
    もしヘッダファイルやライブラリ等が不足しているようならば,まずそれら必要なファイルを含んだパッケージを作るところから始めましょう.

実際の作成方法

以下では http://prdownloads.sourceforge.net/linux-diag/sysfsutils-2.0.0.tar.gz?download からダウンロードしてきた sysfsutils-2.0.0.tar.gz というソフトウェアをパッケージ化してみます.

  1. ビルドスクリプトの準備
    何というソフトウェアを作るためのスクリプトかが一目で分るようにテンプレートスクリプトを元にパッケージ化したいソフトウェア用のビルドスクリプトを用意します.
    % mv PlamoBuild.template PlamoBuild.sysfsutils-2.0.0
    ビルドスクリプトはパッケージ化したいソフトウェアの一つ上のディレクトリに置いておくのが便利です.
    mv の場合 PlamoBuild.template は PlamoBuild.sysfsutils-2.0.0 と変更されますので cp を使い,元の PlamoBuild.template はそのままの名称で残しておく方法を採っても構いません.
  2. ビルドスクリプトの修正
    エディタ等で 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=''
    ###################
  3. ビルドスクリプトの実行
    PlamoBuild スクリプトは config と build, package の 3 つの引数を取ります.引数を指定しない場合は config, build, package が順番に実行されます.
    引数として config を指定すると ./configure スクリプトを実行するところまでで終了します.
    build を指定するとmake を実行し,package を指定すると make install DESTDIR=`pwd`/work で現在のディレクトリの work/ 以下にファイルをインストールした上で work ディレクトリで /sbin/makepkg を実行してパッケージを作成します.
    ソフトウェアによってはインストール時の DESTDIR= の指定を受けつけない場合があるので,一度上記過程を一般ユーザーで実行し,問題なくパッケージが作成されることを確認した上で (この段階ではパッケージ内のファイルの所有者は一般ユーザー) root になっ てパッケージを再度作る (ファイルの所有者が root 等の正しい権限になる) のがいいでしょう.
    以下,実際に実行される様子を順を追って説明します.
    % 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_device
    sysfsutils-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; fi
    make が終ると 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.0
    make 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

ちなみに,このスクリプトで作った Plamo パッケージは,同じ日であれば何度作っても (ファイルにタイムスタンプ埋め込みなどが無い限り) ,バイナリ的に同一となります.


この件に関して追加情報などありましたら、以下にどうぞ;



トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2021-12-17 (金) 16:35:40