# 表題 dcl debian パッケージ作成の手引 # # 履歴 2000/11/02 竹広真一 for ver.5.2 # 2000/11/14 竹広真一 for ver.5.2-2 # 2001/11/20 竹広真一 for ver.5.2-4, dcl-util として demo,dvlop を分割 # 2004/11/15 小高正嗣 # 2005/07/14 小高正嗣 「dcl-5.3 debian パッケージ作成の手引」を改変 # 2005/07/20 小高正嗣 for ver.5.3.1 ■ ソースのダウンロード先 http://www.gfd-dennou.org/arch/dcl/ ■ インストール先ディレクトリ構成 複数の Fortran コンパイラによるバイナリを共存させるため, インストー ル先ディレクトリには - (ハイフン)以下にコンパイラ名を示す拡張子を付 ける. /usr/lib/dcl-(バージョン名)-(コンパイラ名)/bin 以下にインストールさ れるコマンドは /usr/bin 以下にシンボリックリンクをはり, update-alternatives コマンドを用いて切替えることができるようにする. /usr/lib/dcl-5.3.1-XX/lib/ libdcl531f77.a 置場 dclbase/ カラーマップ等の置場 include/ *.h の置場 bin/ dclfrt などのコマンド置場 /usr/lib/libf77dcl53.a --> /usr/lib/dcl-5.3.1-XX/lib/libf77dcl53.a /usr/bin/dclfrt --> /usr/lib/dcl-5.3.1-XX/bin/dclfrt dclcc --> /usr/lib/dcl-5.3.1-XX/bin/dclcc dclconfig --> /usr/lib/dcl-5.3.1-XX/bin/dclconfig /usr/share/doc/dcl-5.3.1-XX/ README などのドキュメント置場 拡張子の一覧を以下に示す ffcX Linux 対応 Fujitsu Fortran & C Package ver.X ifcX Intel Fortran90 コンパイラ ver.X g77 GNU Fortran77 コンパイラ (g77) 以下では ffc5 を用いることを想定する. 他のコンパイラを用いた場合も ほぼ同様の手順でよい. ■ 環境変数の設定 パッケージ情報に引用される環境変数 EMAIL と DEBFULLNAE を設定する. $ export EMAIL=odakker@hoge $ export DEBFULLNAE="Masatsugu Odaka" ■ 事前インストールパッケージ 事前に以下のパッケージが実行環境にインストールされているか確認する. deb パッケージ化関連ツール dh-make dpkg-dev fakeroot devscripts dcl の依存パッケージ woody: libgtk1.2 libgtk1.2-dev (pkg-config を使えるようにする) imlib-base imlib1 imlib-dev gdk-imlib-dev gdk-imlib1 sarge: libgtk2.0 libgtk2.0-dev (pkg-config を使えるようにする) imlib-base imlib1 ■ debian パッケージ作成の手順: 初めての場合 1) ソースをダウンロードして展開後, ソースのディレクトリ名を <パッケージ名> - <バージョン名> に変更する. 名前に使える文字列は "a-z0-9","+","-" である. 大文字は 使えないことに注意. 今回の場合ソースツリー名が dcl-5.3.1.tar.gz となっているので, dcl-ffc5-5.3.1 などとする. ffc5 の部分は適宜置き換える. 2) パッケージ情報の作成 次にパッケージ情報の雛型を作成する. $ dh_make -s ここでは single パッケージとしておく. これにより, ソースアーカイ ブトップディレクトリに debian ディレクトリが作成される. 編集するファイルは以下の通り ・control パッケージ名などのパッケージ情報を記載する. コンパイラ毎に拡張子 をつけて別ファイルとして管理する. パッケージ名などのパッケージ情報を記載する. コンパイラの種類毎に control.(コンパイラ名を示す拡張子) というファイルを用意する. 初期状態は以下のようになっている. Source: dcl Section: Priority: optional Maintainer: ODAKA Masatsugu > Build-Depends: debhelper (>> 3.0.0) Standards-Version: 3.5.2 Package: dcl Architecture: any Depends: ${shlibs:Depends} Description: Package: dcl-doc Architecture: all Description: Documentation for dcl これを以下のように変更する. ソースとパッケージ名: 一部ファイルをコンパイラ非依存の dcl-util パッケージに分割する. - ffc5 の場合 Source: dcl-ffc5 Package: dcl-ffc5 Package: dcl-util セクションを指定. Section: math 依存関係 - ffc5 の場合 Depends: ${shlibs:Depends}, xlibs-dev (>=4.1.0) Suggests: ffc (=5.0) | ffcpara (=5.0), libgtk2.0-0, libgtk2.0-dev 依存パッケージのバージョン名パッケージ作成環境にあわせて適宜変更 する. ・copyright ライセンス規定を記述する. 詳細は実ファイルを参照. ・changelog パッケージの更新履歴を記述する. これも詳細は実ファイルを参照. ・docs, dcl-util.docs パッケージに含めるドキュメントファイルを記述する. ここでは ソース直下の以下のファイル名を記述する - docs: CHECK CREDITS HISTORY INSATLL IMG_dclclr.png IMG_g2pk01.png IMG_g2pk02.png IMG_umpack.png NOTE README README_clrmap README_gt2dlib README_itr51 README_umfmap - dcl-utils.docs: README_pslib ・rules パッケージ化を行うための Makefile. configure にオプションを加え, インストール時にシンボリックリンクを作成する. - ヘッダ部: 以下を追加 !-------------------------------------------------------------- EXT=g77 FC=g77 CC=gcc FFLAGS= PACKAGE=dcl-$(EXT) UTILPACKAGE=dcl-util PREFIXLIB=dcl-5.3.1-$(EXT) !-------------------------------------------------------------- - config.status: エントリ !-------------------------------------------------------------- ... dh_testdir (export CC=$(CC) ; export FC=$(FC) ; export FFLAGS='$(FFLAGS)' ; ./configure --prefix=/usr/lib/$(PREFIXLIB)) !-------------------------------------------------------------- - clean: エントリ !-------------------------------------------------------------- ... # Add here commands to clean up after the build process. -$(MAKE) distclean -test -r /usr/share/misc/config.sub && \ cp -f /usr/share/misc/config.sub config.sub -test -r /usr/share/misc/config.guess && \ cp -f /usr/share/misc/config.guess config.guess !-------------------------------------------------------------- - install: エントリ インストール先ディレクトリ名を変更 !-------------------------------------------------------------- ... # Add here commands to install the package into debian/dcl. $(MAKE) install prefix=$(CURDIR)/debian/dcl-$(EXT)/usr/lib/$(PREFIXLIB) dh_movefiles --sourcedir=debian/dcl-$(EXT) !-------------------------------------------------------------- - binary-indep: エントリ dcl-util をパッケージ化する手順を追加 !-------------------------------------------------------------- ... dh_installdirs -p$(UTILPACKAGE) -Pdebian/dcl-util usr/bin (cd dvlop/pslib && $(MAKE) install prefix=../../debian/dcl-util/usr) # 古い pslib を一時退避 mv dvlop/pslib . mv dvlop/old-pslib . dh_installdocs -p$(UTILPACKAGE) -Pdebian/dcl-util demo dvlop # 古い pslib を戻す. mv pslib dvlop mv old-pslib dvlop dh_installdeb -p$(UTILPACKAGE) -Pdebian/dcl-util dpkg-gencontrol -isp -p$(UTILPACKAGE) -Pdebian/dcl-util chown -R root.root debian/dcl-util chmod -R go=rX debian/dcl-util dpkg --build debian/dcl-util .. - binary-arch:エントリ 各種コマンドのリンクをはる. !-------------------------------------------------------------- ... dh_link usr/lib/dcl-5.2-ffc/bin/dclfrt usr/bin/dclfrt \ usr/lib/dcl-5.2-ffc/bin/dclcc usr/bin/dclcc \ usr/lib/dcl-5.2-ffc/bin/dcldate usr/bin/dcldate \ usr/lib/dcl-5.2-ffc/bin/dclexec usr/bin/dclexec \ usr/lib/dcl-5.2-ffc/bin/dcltone usr/bin/dcltone \ usr/lib/dcl-5.2-ffc/bin/dclver usr/bin/dclver \ usr/lib/dcl-5.2-ffc/bin/dclclr usr/bin/dclclr \ usr/lib/dcl-5.2-ffc/bin/dcldbs usr/bin/dcldbs \ usr/lib/dcl-5.2-ffc/bin/dclfont usr/bin/dclfont \ usr/lib/dcl-5.2-ffc/bin/dclpara usr/bin/dclpara \ usr/lib/dcl-5.2-ffc/bin/dcltrf usr/bin/dcltrf \ usr/lib/dcl-5.2-ffc/bin/repsl usr/bin/repsl usr/lib/$(PREFIXLIB)/bin/dclps2kdraw usr/bin/dclps2kdraw.$(EXT) \ usr/lib/$(PREFIXLIB)/bin/dclpscat usr/bin/dclpscat.$(EXT) \ usr/lib/$(PREFIXLIB)/bin/dclpsfix usr/bin/dclpsfix.$(EXT) \ usr/lib/$(PREFIXLIB)/bin/dclpsfont usr/bin/dclpsfont.$(EXT) \ usr/lib/$(PREFIXLIB)/bin/dclpsmargin usr/bin/dclpsmargin.$(EXT) \ usr/lib/$(PREFIXLIB)/bin/dclpsmerge usr/bin/dclpsmerge.$(EXT) \ usr/lib/$(PREFIXLIB)/bin/dclpsnup usr/bin/dclpsnup.$(EXT) \ usr/lib/$(PREFIXLIB)/bin/dclpsrmcm usr/bin/dclpsrmcm.$(EXT) \ usr/lib/$(PREFIXLIB)/bin/dclpsrot usr/bin/dclpsrot.$(EXT) \ usr/lib/$(PREFIXLIB)/bin/dclpsselect usr/bin/dclpsselect.$(EXT) \ usr/lib/$(PREFIXLIB)/bin/dclpsseperate usr/bin/dclpsseperate.$(EXT) \ usr/lib/$(PREFIXLIB)/bin/dclpsunrot usr/bin/dclpsunrot.$(EXT) \ usr/lib/$(PREFIXLIB)/bin/dclpsline usr/bin/dclpsline.$(EXT) ... !-------------------------------------------------------------- ・postinst, prerm スクリプト パッケージのインストール前後に行う作業を記述する. ここでは update-alternatives コマンドによるシンボリックリンクの作成 を行う. 詳細は実ファイルを参照. 3) Makefile の修正 ・src/env2 以下の dcl のコマンド類をコンパイルする手順に インストール済の dclfrt が使われている. debian 用に直接 $(FC) を起動するように変更. ・dvlop/ pslib のツールをインストールするために Makefile を修正. - root ディレクトリの DIRSINST に dvlop を追加. - dvlop/Makefile の install エントリを修正. DIRSINST を定義, サブディレクトリに渡すコマンドを make archive -> make install に変更 ※注) dcl-5.3.1 では pslib は src/env2 以下に取り込まれた 4) パッケージ化 ソース直下のディレクトリにて $ dpkg-buildpackage -rfakeroot を実行する. その結果, 一つ上のディレクトリに dcl-ffc5_5.3.1-X.diff.gz dcl-ffc5_5.3.1-X.dsc dcl-ffc5_5.3.1-X_i386.changes dcl-ffc5_5.3.1-X_i386.deb dcl-ffc5_5.3.1.orig.tar.gz が作成される. ■ deb パッケージ化: 再パッケージ化する場合 既に作成したパッケージに不具合があり, 再パッケージ化する場合, dcl-ffc5_5.3.1-X.diff.gz dcl-ffc5_5.3.1-X.dsc dcl-ffc5_5.3.1.orig.tar.gz をダウンロードして $ dpkg-source -x dcl-ffc5_5.3.1-X.dsc を実行する. または /etc/apt/sources.list を正しく設定し $ apt-get source dcl-ffc5 とする. これにより, debian ディレクトリを含むソースツリーが復元 できる. ソース直下に移動後, $ dch -i を行う. これによりエディタが changelog ファイルを時動的に読み込んで 起動する. 記載されるパッケージ番号も時動的に 1 つ繰り上がる. バージョンを明示したい場合は $ dch -v とする. ここで指定するバージョンは <ソースバージョン>- のようにする. あとは新規パッケージと同様の手順でパッケージ化する. ■ deb パッケージ化: ソースが更新された場合. ソースが更新された場合(ここでは dcl-5.4 がリリースされたとする), 古いソースディレクトリにて $ uupdate -u dcl-5.4.tar.gz を実行する. これにより, 時動的にソースが更新される. 1 つ上のディレ クトリに新しいソースツリーが展開されているのでそちらへ移動し, あと は新規パッケージと同様の手順でパッケージ化する. うまくいかないときは, 古いソースツリー内の debian ディレクトリを新 しいソースツリーの debian ディレクトリへコピーし, 新しいソースツリー 直下で, $ dch -i などとする. あとは新規パッケージと同様の手順でパッケージ化する. ■ 参考文献 Josip Rodin 著, 八田真行, 佐野武俊 訳, 2002: debian 新メンテナガイド ver 1.2, http://www.jp.debian.org/doc/manuals/maint-guide/index.ja.html