=begin
= ispack の deb パッケージ作成・管理の手引
#* 小高正嗣, 佐々木洋平
# * 2009/03/02 (佐々木 洋平) 更新
# * 2007/10/17 (佐々木 洋平) RD 化, コンパイラ毎にソースを分割
# * 2007/10/16 (佐々木 洋平) RD 化, ソースの再構築, 文書の修正
# * 2005/05/10 (小高 正嗣) 新規作成
== この文書について
この文書は (()) の
Debian パッケージ作成の手引である.
== ソースダウンロード先
(())
より 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 は適宜各人の情報に合わせる.
== deb パッケージ化: 初めての場合
=== 事前インストールパッケージ
事前に以下のパッケージが実行環境にインストールされているか確認する.
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 のついた雛形ファイルは削除して
おく.
==== control の編集
以下では使うコンパイラが ffcN(Nはバージョン番号) の場合について記述する.
Source セクションは次の通りである.
Source: ispack-ffcN
Section: math
Priority: extra
Maintainer: Youhei Sasaki
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).
とする.
==== copyright
ソースを落とした URL, Upstream Author を修正する.
また, Copyright 以下に, 本体の COPYRIGHT をコピーする.
==== docs
パッケージに含めるドキュメントファイルを記述する.
ここではソース直下の以下のファイル名を記述する.
CHANGELOG
README
TODO
==== rules
パッケージ化には 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
ソース直下の Mkinclude を debian/Mkinclude.(コンパイラ名) へコピーし,コ
ンパイラに合わせて適宜編集する. また, ドキュメント生成の際に使用するの
で,本体の Mkinclude も debian/Mkinclude へコピーしておく.
=== パッケージ作成
バイナリとソースの両方を更新したい場合にはソース直下において
$ debuild -rfakeroot -uc -us
を実行する. その結果, 一つ上のディレクトリに
ispack-ffcN__.deb
ispack-fftw2-ffcN__.deb
ispack-ffcN_.orig.tar.gz
ispack-ffcN_.diff.gz
ispack-ffcN_.changes
ispack-ffcN_.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 ディレクトリを含むソースツリーが展開される.
=== 使用するコンパイラを変える場合
修正するのは
* control
* ソース名, パッケージ名, Description のコンパイラ名の変更
* rules
* FC 変数
* changelog の更新
を行なう. changelog の更新には
$ dch -i
を行うと良い. これによりエディタが changelog ファイルを時動的に読み込ん
で起動する. この場合, 記載されるパッケージ番号が自動的に一つ上るが,コン
パイラの違いによる新パッケージ生成であるから, パッケージ名とバージョン
を適切に修正する.
バージョンを明示したい場合は
$ dch -v
とする. ここで指定するバージョンは <ソースバージョン>- のようにする.
後はパッケージ作成と手順は同じである.
=== パッケージの不具合
ソースに修正を加え changelog を更新した後は新規パッケージと同様の手
順でパッケージを生成する.
== ソースが更新された場合.
ソースが更新された場合(ここでは ispack-0.72 がリリースされたとする),
古いソースディレクトリにて
$ uupdate -u ../ispack.tar.gz -v 0.72
を実行する. これにより, 時動的にソースが更新される. 1 つ上のディレ
クトリに新しいソースツリーが展開されているのでそちらへ移動し, あと
は新規パッケージと同様の手順でパッケージ化する.
== 参考文献
* やまだ あきら, 鵜飼 文敏, 2006: 『入門 Debian パッケージ』, 技術評論社, ISBN: 4-7741-2768-X
* 旧版 TEBIKI.ispack_deb.txt