[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debian-devel:00564] HOW TO MAKE deb package



やなぎはらです。

ここ2、3日で行ったパッケージ作成作業をもとに
『deb パッケージの作成方法』をちょっとだけまとめてみました。

第一回は、controlファイルの編集までです。

浮かんだままキーボードを叩いたので、意味が分からない所も
あるかも知れませんので、みなさんどんどん御感想をおっしゃってくださいね。

============================================

deb パッケージの作り方   V0.1 (簡易バージョン)
							1997/02/06
							柳原 良亮
							yochi@xxxxxxxxxxx

0. はじめに

  Debian GNU/Linux のパッケージ(.deb)の作り方を説明していきます。
  ここでは、実際にskkパッケージを作成した手順を振り返りながら、
説明していきたいと思います。debパッケージの作成方法についての詳細な
情報は dpkg-devパッケージに添付されている policy.html と programm-
er.html を参照してください。


1. deb-makeの実行

  まずオリジナルソースを適当なディレクトリに展開します。このとき
日本語パッチなどが存在している場合、この段階でパッチをあてます。
もし、パッチをあてた場合、オリジナルソースディレクトリに .orig と
いうサフィックスを持ったファイルが出き上がるので、これらのファイルを
削除します。
  ソースファイルの用意ができたら、ソースが展開されたディレクトリ名を
確認してください。ディレクトリ名は "<package>-<version>" の形式に
なっていなければなりません。現在 skk-9.4.29 のパッケージを作ろうと
しているのでディレクトリ名は、"skk-9.4.29" であるべきです。ソース
ファイルを展開した時点で形式に会わないディレクトリ名だった場合、適当に
修正してください。
  ソースファイルのディレクトリに移動し( $cd skk-9.4.29 )、deb-makeコマ
ンドを実行します。deb-makeコマンドを実行すると、パッケージ作成に用いら
れる情報が表示され、これから作成するパッケージのタイプを尋ねてきます。

--
Email-Address           : yochi@xxxxxxxxxxx
Date used               : Thu, 6 Feb 1997 01:26:30 +0900
Maintainer              : Yoshiaki Yanagihara
Package Name            : skk
Version                 : 9.4.29

Type of Package (S=Single Binary, M=Multi-Binary, L=Library, X=Abort? s/m/l/x 
--

パッケージが一つでいい場合は "s"、複数のパッケージを作成する場合は "m"、
ライブラリパッケージを作成する場合は "l" を入力します。skk は一つのパッ
ケージなので、 "s" を入力します。
  この問に答えると、deb-makeコマンドは現状のソース一式をオリジナルソー
スとして保存するために、パッケージのディレクトリに ".orig" というサッ
フィクスをつけたディレクトリを作成し、そこにコピーを取ります。skk の場
合、skk-9.4.29.orig というディレクトリが作成されるわけです。deb-makeコ
マンドはカレントディレクトリに "debian" というサブディレクトリを作成し、
その配下にバッケージングに必要な最低限のサンプルファイルを作成してくれ
ます。これらのファイルはパッケージ名、バージョンや作成時刻などが反映さ
れています。
  
  
2. パッケージング・ファイルの編集

  deb-makeによって作成された debian 配下のファイルを編集していきます。
最低限編集しなければいけないファイルは "README.debian", "changelog",
"control", "copyright", "dirs", "rules" です。この他にもサンプルとして
いくつかのファイルが用意されますが、必要無ければ編集する必要はありませ
ん。簡単にこれらのファイルの説明をしておきます。

README.debian
	Debian GNU/Linux のパッケージを作成した際の注意などを
	記述しておきます。

changelog
	debパッケージの作成/修正履歴を記述していきます。

control
	debパッケージを作成するために必要な情報を記述します。
	このファイルの編集が非常に重要になります。

copyright
	パッケージングしようとしているアプリケーションの著作権、
	再配布の有無などを記載します。大抵ソースファイルの中に
	書かれていたり、著作権のことについて記述したファイルが
	用意されていることが多いので、それらの内容をコピーして
	記述する。

dirs
	パッケージのインストールに必要なディレクトリを羅列します。

rules
	パッケージを作成するための makefile です。構文は makefile と
	同じです。パッケージの作成に最適なように内容を編集します。
	configure や Imakefile を利用するパッケージの場合、比較的
	ファイルの編集が少なくて済むように書かれています。

2.1 control ファイルの編集

  control ファイルは、deb-make 実行後次のような内容になっているはずで
す。

-----
Source: skk
Section: unknown
Priority: extra
Maintainer: Yoshiaki Yanagihara <yochi@xxxxxxxxxxx>
Standards-Version: 2.1.2.2

Package: skk
Architecture: any
Depends: ${shlibs:Depends}
Description: Missing
 Missing
-----

まず、"Section:" を編集します。セクションは、パッケージの分類を行うた
めに用いられます。Debian-1.3 で指定可能なセクションは次のとおりです。

	admin/base/comm/devel/doc/editors/electronics/games
	graphics/hamradio/interpreters/libs/mail/math/misc
	net/news/otherosfs/shells/sound/tex/text/utils/web/x11

skk はmule/Nemacs用の FEP ですので、utils セクションにします。
  "Priority" は、そのパッケージの重要性を示す物です。現在指定可能な
"Priority"は、次の5つです。

   required	システムに欠かすことのできないパッケージの場合
		これを指定します。

   important	Unix互換システムに存在するようなもの

   standard	よくわかりません。(_O_)

   optional	ユーザが必要だと思った時にインストールすればよいもの。

   extra	Priorityの高いパッケージと衝突するようなパッケージ。
		
skk は、"optional" にしました。
  "Architecture"は、バイナリの物件を含んでいるパッケージは必ず "any"、
シェルスクリプトやPerlスクリプト、elisp、データだけのパッケージは 
"all" を指定します。
  "Depends" は、そのパッケージがどのパッケージに依存関係を持つかを
表すための属性です。ここをきちんと書かないと Debian の特徴ともいえる
パッケージの依存チェック機能が正しく動作しません。shared library パッ
ケージとの依存関係は "${shlib:Depends}" の部分があとで必要なパッケージ
名に変換されるので特に記述する必要がありませんが、ときどきパッケージを
作成してみると依存しているはずの shared library が含まれているパッケー
ジの名前が入っていないことがあります。そのばあい、debian/shlibs.local
ファイルを作成してローカルに依存関係を追加するようにします。
shlibs.localファイルの形式は、次のようになります。例として kinput2 パッ
ケージのものを使います。

-----
libcanna	1	canna (>=3.5b2-0)
libcanna16	1	canna (>=3.5b2-0)
-----

kinput2-cannaパッケージは libcanna16.so.1 をリンクしますので、
libcanna16.so.1 が含まれているcannaパッケージが事前にインストールされ
ていないとコマンドを起動時にエラーになってしまいます。shlibs.local ファ
イルにこうして記述しておくことで先程の "${shlib:Depends}" の置換処理の
際にこのファイルに書かれた内容も反映されるのです。
  また、shared library だけでなくコマンドなどに依存する場合もあります
ので、そうした場合は手作業で依存パッケージ名を追加する必要があります。
skk は、mule コマンドまたは Nemacs コマンド上で動作するので、これらの
パッケージに依存することになります。依存パッケージを追加する場合は、
"," で区切ります。また論理和を用いて依存パッケージを指定することもでき
ます。記述方法としてはパッケージ名を "|" でつなぎます。では、skk の
"Depends:" 行を編集してみましょう。

-----
Depends: ${shlibs:Depends}, mule | nemacs
-----

これで mule または nemacs パッケージがインストールされていない状態では 
skk パッケージのインストールは失敗するようになります。
  "Description:" 行はパッケージの簡単な説明を記述しておく所です。ここ
に記述した内容は dpkg -l コマンドなどで表示されます。説明は必ず1行で
記述しないといけませんのでできるだけ簡潔に記述します。また、
"Description:"の次の行からはパッケージに関する詳細説明を記述できます。
ソースファイルのREADMEなどに記載されているパッケージの説明をコピーした
りしてください。詳細説明の部分では空行を利用することは許されていません
ので、空行の変わりに "." だけを記述した行を使用してください。
  これまでの説明から skk パッケージの control ファイルを作成すると次の
ようになります。

-----
Source: skk
Section: utils
Priority: optional
Maintainer: Yoshiaki Yanagihara <yochi@xxxxxxxxxxx>
Standards-Version: 2.1.2.2

Package: skk
Architecture: any
Depends: ${shlibs:Depends}, emacs | mule
Description: Simple Kana to Kanji conversion program
 SKK is a very fast and efficient Japanese input system
 written entirely in emacs lisp and runs under Nemacs
 (which is a Japanese version of GNU Emacs), under Mule
 (which is a Multi-lingual version of GNU Emacs) and under
 Demacs.
-----


=====================================================

...... 今日はこのへんで。 次回をおたのしみに。


+---------------------------------------------------------+
 Yoshiaki Yanagihara		E-mail: yochi@xxxxxxxxxxx           
					yosiaki@debian.org
 Debian JP Project
 [Japanese] http://www.linux.or.jp/~yochi/debian-jp.html
 [English ] http://www.linux.or.jp/~yochi/debian-jp-e.html