この文書は ispack の Debian パッケージ作成の手引である.
<URL:http://www.gfd-dennou.org/arch/ispack/>
より ispack.tar.gz を落してくる. 2007/10/16 の時点では, ispack-0.71 を使用した.
使用したコンパイラ毎のライブラリを作成する. パッケージ名にもちいるコンパイラ名は
ffcN Fujitsu Fortran90 compiler ver. N (N はバージョン名) ifcN Intel Fortran ver. N
である. また, FFT として FFTW2 を使用した場合には -fftw2 をつける.
生成されるパッケージ名は以下の通りである
ispack-ffcN Fujistu Fortran 使用 ispack-fftw2-ffcN Fujistu Fortran, fftw2 使用 ispack-ifcN Intel Fortran 使用 ispack-fftw2-ifcN Intel Fortran, fftw2 使用 ispack-g95 g95 を使用 ispack-fftw2-g95 g95, fftw2 を使用 ispack GNU Fortran(gfortran) を使用 ispack-fftw2 GNU Fortran(gfortran), fftw2 を使用 ispack-doc ドキュメント, サンプルプログラムを格納
gfortran, g95 については mpi 関連のライブラリを作成している. また, 及び共有ライブラリは作成していない.
パッケージ作成, 更新作業の前にパッケージ情報に引用される環境変数 EMAIL と DEBFULLNAE を適切に設定しておくこと. 例えば
$ export EMAIL=uwabami(at)gfd-dennou.org # (at) は @ に置きかえる. $ export DEBFULLNAE="Youhei SASAKI"
EMAIL, DEBFULLNAME は適宜各人の情報に合わせる.
事前に以下のパッケージが実行環境にインストールされているか確認する.
dh-make debhelper build-essential fakeroot cdbs
ソースをダウンロードして展開後, パッケージ情報を作成する. 例えば, ソー スを展開して生成されるディレクトリが ispack-0.71 であり, 作成するパッケー ジが ispack-ffcN の場合,
$ tar xvzf ispack.tar.gz $ mv ispack-0.71 ispack-ffcN-0.71 $ dh_make -m -b -f ../ispack.tar.gz --copyright=lgpl
とする. dh_make のオプションとして,
-m: マルチパッケージを生成 -f: オリジナルソースアーカイブを指定 -b: パッケージ作成に cdbs を使用する. --copyright: ライセンス. ispack は LGPL なので lgpl を指定
をつけた.
今回は不要なので, debian 内の *.ex, *.EX のついた雛形ファイルは削除して おく.
以下では使うコンパイラが ffcN(Nはバージョン番号) の場合について記述する. Source セクションは次の通りである.
Source: ispack-ffcN Section: math Priority: extra Maintainer: Youhei Sasaki <uwabami(at)gfd-dennou.org> Build-Depends: debhelper (>= 5), dpatch, cdbs, build-essential, ffc(>=N)|ffcpara(>=N) Standards-Version: 3.7.2
Package セクションはパッケージ名毎に, それぞれ
Package: ispack-ffcN Architecture: i386 Depends: Recommends: ffc(>=N), ispack-doc Description: ISPACK FORTRAN subroutine library for scientific computing This package is built with Fujitsu Fortran Compiler Ver.N Please visit http://www.gfd-dennou.org/arch/ispack/ (in Japanese). Package: ispack-fftw2-ffcN Architecture: i386 Depends: Recommends: ffc(>=N)|ffcpara(>=N), fftw-no2underscore, ispack-doc Description: ISPACK FORTRAN subroutine library for scientific computing This package is built with Fujitsu Fortran Compiler Ver.N, using fftw2 library for FFT transformation in P2PACK routines. Please visit http://www.gfd-dennou.org/arch/ispack/ (in Japanese).
とする.
ソースを落とした URL, Upstream Author を修正する. また, Copyright 以下に, 本体の COPYRIGHT をコピーする.
パッケージに含めるドキュメントファイルを記述する. ここではソース直下の以下のファイル名を記述する.
CHANGELOG README TODO
パッケージ化には cdbs を用いる. cdbs はパッケージ作成の際の一連の作業を 自動化するためのツールである. ispack は configure を用いて install する わけでは無いので, build の際にディレクトリまで指定して仮 install を行なっ ておく.
具体的には, パッケージ毎の build ルールを以下の様に定める. たとえば, ispack-ffcN については
build/ispack-ffcN:: cp debian/Mkinclude.${FC} Mkinclude mkdir -p ${FC_DESTDIR} $(MAKE) $(MAKE) static cp debian/Mkinclude Mkinclude $(MAKE) clean
とする. ${FC}, ${FC_DESTDIR} は rules 内で設定されている.
ispack-doc は
build/ispack-doc:: mkdir -p ${DOC_DESTDIR}/tex mkdir -p ${DOC_DESTDIR}/manual for i in $(DIRS) ; do \ cd $$i/doc ; \ if [ -f $$i.tex ]; then \ cp $$i.tex ../../${DOC_DESTDIR}/tex/ ; \ platex $$i.tex ; platex $$i.tex; dvipdfmx $$i.dvi ; \ rm $$i.aux $$i.log $$i.dvi ; \ mv $$i.pdf ../../${DOC_DESTDIR}/manual/ ;\ fi ; \ cd ../.. ; \ done cp -r sample ${DOC_DESTDIR} cp debian/Mkinclude Mkinclude $(MAKE) clean
としている. ${DOC_DESTDIR} は rules 内で設定している.
また, ispack-0.71 の fepack には行のインデントをタブで行なっている箇所 が存在する(次回リリースでは修正されるとの事). これを修正するためのパッ チを当てるために dptach を使っている(cdbs の rules を読み込んでいる).
パッチは debian/patches 以下に拡張子を .dpatch として置く. 実体は diff ファイルである. 新たにパッチを加えたい場合には XX_hogehoge.dpatch とし て debian/patches に置き, debian/patches/00list に内容を記述する.
パッチが正しく適応されるかは
$ debian/rules patch-stamp $ debian/rules unpatch
によって確認できる.
詳細は実ファイルを参照されたい.
ソース直下の Mkinclude を debian/Mkinclude.(コンパイラ名) へコピーし,コ ンパイラに合わせて適宜編集する. また, ドキュメント生成の際に使用するの で,本体の Mkinclude も debian/Mkinclude へコピーしておく.
バイナリとソースの両方を更新したい場合にはソース直下において
$ debuild -rfakeroot -uc -us
を実行する. その結果, 一つ上のディレクトリに
ispack-ffcN_<version>_<architecure>.deb ispack-fftw2-ffcN_<version>_<architecure>.deb ispack-ffcN_<version>.orig.tar.gz ispack-ffcN_<version>.diff.gz ispack-ffcN_<version>.changes ispack-ffcN_<version>.dsc
が生成される. また, バイナリだけを更新したい場合にはソース直下において
$ fakeroot ./debian/rules binary
とする.
既に作成したパッケージに不具合があった場合, もしくは更新する場合には,
ispack-ffcN_0.71.orig.tar.gz ispack-ffcN_0.71-1.dsc ispack-ffcN_0.71-1.diff.gz
をダウンロードしてきて
$ dpkg-source -x ispack-ffcN_0.71-1.dsc
を実行する. もしくは,
$ apt-get source ispack-ffcN (NN はパッケージの名前)
とする. これにより, debian ディレクトリを含むソースツリーが展開される.
修正するのは
を行なう. changelog の更新には
$ dch -i
を行うと良い. これによりエディタが changelog ファイルを時動的に読み込ん で起動する. この場合, 記載されるパッケージ番号が自動的に一つ上るが,コン パイラの違いによる新パッケージ生成であるから, パッケージ名とバージョン を適切に修正する.
バージョンを明示したい場合は
$ dch -v <version>
とする. ここで指定するバージョンは <ソースバージョン>-<debian パッケー ジバージョン> のようにする.
後はパッケージ作成と手順は同じである.
ソースに修正を加え changelog を更新した後は新規パッケージと同様の手 順でパッケージを生成する.
ソースが更新された場合(ここでは ispack-0.72 がリリースされたとする), 古いソースディレクトリにて
$ uupdate -u ../ispack.tar.gz -v 0.72
を実行する. これにより, 時動的にソースが更新される. 1 つ上のディレ クトリに新しいソースツリーが展開されているのでそちらへ移動し, あと は新規パッケージと同様の手順でパッケージ化する.