この文書は netcdf library の debian パッケージ作成の手引である.
netcdf ライブラリの GNU コンパイラ版は公式パッケージとして提供されてい る. この文書では, Intel Fortran Compiler, Fujitsu Fortran & C Compiler そして g95 を用いて作成したライブラリパッケージ作成と更新について記述 している.
使用したコンパイラ毎にライブラリを用意するため, パッケージ名は
netcdf-(コンパイラ名)
とする. コンパイラ名は
ffcN Fujitsu Fortran90 compiler ver. N (N はバージョン名) ifcN Intel fortran ver. N g95 G95
とする.
以下では ffcN を用いることを想定し記述している.
パッケージ作成, 更新作業の前にパッケージ情報に引用される環境変数 EMAIL と DEBFULLNAE を適切に設定しておくこと. 例えば
$ export EMAIL=uwabami(at)gfd-dennou.org # (at) は @ に置きかえる. $ export DEBFULLNAE="Youhei SASAKI"
EMAIL, DEBFULLNAME は適宜各人の情報に合わせる.
事前に以下のパッケージが実行環境にインストールされているか確認する.
dh-make debhelper cdbs build-essential fakeroot
ソースをダウンロードして展開後, パッケージ情報を作成する. 例えば, ソー スを展開して生成されるディレクトリが netcdf-3.6.2 であり, 作成するパッ ケージが netcdf-ffcN-3.6.2 の場合,
$ tar xvzf netcdf.tar.gz $ mv netcdf-3.6.2 netcdf-ffcN-3.6.2 $ cd netcdf-ffcN-3.6.2 $ dh_make -s -b -f ../netcdf.tar.gz
とする. dh_make のオプションとして,
-s: シングルバイナリの生成 -f: オリジナルソースアーカイブを指定 -b: パッケージ作成に cdbs を使用する.
を指定した.
今回は不要なので, debian 内の *.ex, *.EX のついた雛形ファイルは削除して おく.
以下では使うコンパイラが ffcN(Nはバージョン番号) の場合について記述する. Source セクションは次の通りである.
Source: netcdf-ffcN Section: math Priority: optional Build-Depends: debhelper(>=5.0), cdbs, ffc(>=5.0)|ffcpara(>=5.0), autotools-dev, build-essential Maintainer: Youhei SASAKI <uwabami(at)gfd-dennou.org> Standards-Version: 3.7.2
また, Package セクションは以下の通りである.
Package: netcdf-ffcN Architecture: any Recommends: netcdfg-dev, netcdf-doc, netcdf-bin Suggests: ffc (>=5.0) | ffcpara (>=5.0) Depends: ${shlibs:Depends} Description: NetCDF static library build with Fujitsu Fortran&C compiler ver.5. Alternative developer's package of NetCDF. This package provides NetCDF static libraries for Fujitsu Fortran&C compiler.
ソースを落とした URL, Upstream Author を修正する. また, Copyright 以下に, 本体の COPYRIGHT をコピーする.
パッケージに含めるドキュメントファイルを記述する. ここではソース直下の以下のファイル名を記述する.
README VERSION RELEASE_NOTES
パッケージ化には cdbs を用いる. cdbs はパッケージ作成の際の一連の作業を 自動化するためのツールである. netcdf は autotools を使用するパッケージ であるから,
DEB_CONFIGURE_SCRIPT_ENV DEB_MAKE_CLEAN_TARGET DEB_MAKE_CHECK_TARGET
を指定している.
また, install ルールにおいて必要な静的ライブラリを除いて不要な生成物を 削除している. 具体的には
install/netcdf-ffcN:: mv $(DEB_DESTDIR)/usr/lib/libnetcdf.a $(DEB_DESTDIR)/usr/lib/libnetcdf-$(EXT).a rm -f $(DEB_DESTDIR)/usr/lib/libnetcdf.la rm -f $(DEB_DESTDIR)/usr/lib/libnetcdf_c++.a rm -f $(DEB_DESTDIR)/usr/lib/libnetcdf_c++.la rm -fr $(DEB_DESTDIR)/usr/bin/ rm -fr $(DEB_DESTDIR)/usr/include/ rm -fr $(DEB_DESTDIR)/usr/share/
DEB_DESTDIR は install ルール実行時に自動的に生成される為明示的に指定す る必要は無い.
詳細は実ファイルを参照されたい.
バイナリとソースの両方を更新したい場合にはソース直下において
$ debuild -rfakeroot -uc -us
を実行する. その結果, 一つ上のディレクトリに
netcdf-ffcN_<version>.diff.gz netcdf-ffcN_<version>.dsc netcdf-ffcN_<version>_i386.build netcdf-ffcN_<version>_i386.changes netcdf-ffcN_<version>_i386.deb netcdf-ffcN_3.6.2.orig.tar.gz
が生成される. また, バイナリだけを更新したい場合にはソース直下において
$ fakeroot ./debian/rules binary
とする.
既に作成したパッケージに不具合があった場合, もしくは更新する場合には,
netcdf-ffcN_<version>.diff.gz netcdf-ffcN_<version>.dsc netcdf-ffcN_3.6.2.orig.tar.gz
をダウンロードしてきて
$ dpkg-source -x netcdf-ffcN_<version>.dsc
を実行する. もしくは,
$ apt-get source netcdf-ffcN
とする. これにより, debian ディレクトリを含むソースツリーが展開される.
変更すべき点は
を行なう. changelog の更新には
$ dch -i
を行うと良い. これによりエディタが changelog ファイルを時動的に読み込ん で起動する. この場合, 記載されるパッケージ番号が自動的に一つ上るが,コン パイラの違いによる新パッケージ生成であるから, パッケージ名とバージョン を適切に修正する.
バージョンを明示したい場合は
$ dch -v <version>
とする. ここで指定するバージョンは <ソースバージョン>-<debian パッケー ジバージョン> のようにする.
後はパッケージ作成と手順は同じである.
ソースに修正を加え changelog を更新した後は新規パッケージと同様の手順 でパッケージを生成する.
ソースが更新された場合(ここでは netcdf-3.6.3 がリリースされたとする), 古いソースディレクトリにて
$ uupdate -u ../netcdf.tar.gz -v 3.6.3
を実行する. これにより, 時動的にソースが更新される. 1 つ上のディレ クトリに新しいソースツリーが展開されているのでそちらへ移動し, あと は新規パッケージと同様の手順でパッケージ化する.