[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[debian-devel:01138] dpkg mini how to
たけし@mail.at-m.or.jp です
このあいだの deb の作り方を 修正してみました。
これで mini-HOWTO ぐらい?でしょうか
.deb の作り方(簡易版)
1997.06.10 mtakeshi@xxxxxxxxxxxxxxx
===================
目的
===================
ソースファイルを元に、debian パッケージすると以下のものが出来上がります。
これが最終目的です。
packagename-ver/ ソース、コンパイル
packagename-ver/debian deb用のファイルのおき場所。
deb-make すると自動的に作られる
packagename-ver/debian/tmp/{usr,etc,..} 仮のインストール先
この下にインストールされた後、
*.deb file が作られる。自動。
packagename_ver-debver.diff.gz
packagename_ver-debver.dsc
packagename_ver-debver_arch.changes
packagename_ver-debver_arch.deb
packagename_ver.orig.tar.gz
(例 : ppp-2.3/ ppp_2.3-1.diff.gz ppp_2.3-1.dsc ,..... )
( debver は、パッケージのバージョン。
ver は、プログラム自体のバージョン
arch は、i386 など、アーキテクチャを示す
)
===================
用意するもの
===================
.deb にしたい物のソース (ex. program.tar.gz)
開発パッケージ (make, gcc, perl, dpkg, m4, patch, ...)
PGP と自分の key
sudo
===================
0.作業の流れ
===================
自分のアカウントで入る
1. ソースを展開。patch 等をあてておく
2. deb-make
3. debian/* の記述。
4. dpkg-buildpackage
5. upload & mail
===================
1.ソースの展開
===================
自分の作業 directory で、ソースを展開します。(ex. program.tar.gz)
$ cd /debian (作業directoryに移動)
$ tar -zxvf program.tar.gz (source 展開)
./program2.3/README
./program2.3/Imakefile
: :
$ ls -aF
./ ../ program2.3/
このあと、日本語パッケージを作成する場合、
パッチを当てる作業が入るはずです。
$ patch -p < program-jp.patch
Humm....
:
done.
オリジナルものをパッケージにする場合は、このままです。
===========================
2.バージョン修正とdeb-make
===========================
2.1 バージョン名に program directory を改名します。
この作業は、日本語パッケージの場合か、
deb-make でパッケージ名(ディレクトリ名)として使えない文字が
使われてしまっている場合などに必要な作業です。
$ mv program2.3 program-ja-2.3
$ ls -F
program-ja-2.3/
2.2 deb-make をかけて、基本的な物を作ります
$ cd program-ja-2.3
$ deb-make
Email-Address : mtakeshi@xxxxxxxxxxxxxxx
Date used : Sun, 8 Jun 1997 01:36:25 +0900
Maintainer : takeshi
Package Name : program-ja
Version : 2.3
Debianize with these parameters? y/N y
===========================
3.debian/* の file
===========================
$ pwd
/debian/program-ja-2.3
$ ls -F
Imakefile debian/ xxx.c xxx.h
$ cd debian
$ ls -aF
./ changelog copyright inetd.conf.ex rules*
../ control crontab.ex info.ex rules.multi
README.debian control.multi diversions.ex init.d.ex
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
README.debian : このパッケージのdebに関する README
changelog : .deb に対する changelog。ソースのchangelogではない
dch(1)を使うと便利。
同じversionなら dch [text]
version-upなら dch -n [text]
control : パッケージのルールを記述
copyright : パッケージの copyright
rules : ソースを make してパッケージ化するスクリプト
preinst : dpkg -i 時に、実際にバイナリが展開される前に実行されるファイル
postinst : dpkg -i された後に実行するスクリプトを記述
prerm : dpkg -r 時に、実際にバイナリが rm される前に実行されるファイル
preinst : dpkg -r された後に実行するスクリプトを記述
crontab : crontab file
inetd.conf : 追加する inetd.conf のサービス
init.d : /etc/init.d/ の内容
docs : "/usr/doc/パッケージ名" にインストールしておきたい文書の一覧
dirs : インストール時に必要なディレクトリの一覧
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
---------------------------
3.1. control
---------------------------
3.1.1 構成
^^^^^^^^^^
自動でできたばっかりの control
Source: program-ja --------------+
Section: unknown | このブロックは
Priority: extra | 完成品の *.changes で
Maintainer: takeshi <mtakeshi@xxxxxxxxxxxxxxx> | 参照される ??
Standards-Version: 2.1.1.0 ----------+
(空行)
Package: program-ja ---------------+
Architecture: any | このブロックは
Depends: ${shlibs:Depends} | dselect に
Description: Missing | 反映される
Missing ---------------+
記述ルール
KEYWORD: 値
3.1.2 KEYWORD
^^^^^^^^^^^^^^
Source:
Section: admin,base,devel,...x11, non-free,contrib
Priority: Required/Important/Standard/Optional/Extra
Required 必須パッケージである
Important ないとシステムがうまく動作しなかったり、不便だ
Standard Linux System で標準的なもの
Optional 任意
Extra
Maintainer:
Standards-Version:
Package: パッケージ名
Architecture: i386 or alpha or m68k or sun or all
Depends: 本パッケージが動作するための、必須パッケージ名
例: Package: bind
Depends: libc5, netbase
Recommends: 本パッケージは、ここに記述されているパッケージが必要
例: Package: fvwm2
Recommends: fvwm-common
Suggests: ここに記述されるパッケージは、本パッケージと関連する
例: Packages: cgi-scripts
Suggests: perl
Conflicts: 本パッケージとここに記述されるパッケージの同居はできない
例: Package: cnews
Conflicts: inn
Replaces: 本パッケージはここに書かれているパッケージを上書きする
例: Package: elvis
Replaces: elvisnox
Provides: ここに記述しているパッケージの全てを、本パッケージは包含する
例: Package: vim
Provides: editor
Description: 簡単な説明。一行。
もうちょっと詳しい説明。
行の先頭は必ず space
一行開けたいときは
.
と書く
------------------
3.2 rules
------------------
後述の dpkg-buildpackages は、このファイルを元に、コンパイル、仮インストール、パッケージングを行う。
package=パッケージ名
build:
clean が行われた後、コンパイルに入る
clean:
ソースの TOP directory で、まず最初に実行される。
binary-indep:
binary-arch:
パッケージ作業directory/debian/tmp/ を仮の / として、インストールする。
実際に修正する部分は、
build:
binary-arch:
の所がほとんどであろう
なお、/usr/doc/packagename/ 以下におかれるファイルは、
binary-arch:
:
debstd $(package) おきたいファイル名
:
としておく
=========================
4.dpkg-buildpackage
=========================
3.までが終了したら、やっと dpkg-buildpackage を実行できる。
一般ユーザーでパッケージの用意をしていたかたは、
ここで、
$ dpkg-buildpackage -rsudo
などで、必要なときに root になるようにします。
ちなみに、dpkg-buildpackage では、
debian/rule clean (普通、make clean のとき)
debian/rule binary (debian/rule build実行済なので、
make install のとき)
のみ、-r で指定した change root するコマンドを実行してくれます。
このおかげで、パッケージングなどで root 権限が必要な状況では、
実際 root になっていることになります。
------
これを行うと、
1.コンパイル
2.バイナリ、document のインストール ( debian/tmp を / にみたてて )
3.*.diff, *.dsc, *.orig.tar.gz, *.deb の作成
が行われる。
$ pwd
/debian/program-ja-2.3
$ ls -F
Imakefile debian/ xxx.c xxx.h
$ dpkg-buildpackage -rsudo
making .....
:
install xxx DESTDIR=`pwd`/tmp/usr/X11/bin
:
なにやら、deb用のファイルを作っているらしい
:
PGP xxxxxxxxxxxx <=== PGP が起動
:
: 自分の認証フェーズを入力
なにやら、deb用のファイルを作っているらしい
:
PGP xxxxxxxxxxxx <=== もう一度 PGP が起動
:
: 自分の認証フェーズを入力
終了
$ ls ../
program-ja-2.3 program_ja-2.3-1_i386.changes
program_ja-2.3-1.diff.gz program_ja-2.3-1_i386.deb
program_ja-2.3-1.dsc program_ja-2.3.orig.tar.gz
( PGPのサインは、control ファイルに書かれた maintainer の
アカウントすることになります。
上記のように dpkg-buildpackage -rsudo でパッケージングすると
PGPサインのときは、一般ユーザーに戻っているので、
普通にサインすることができます。
PGPの設定は、事前にしておく必要があります。
)
=========================
5.upload
=========================
以上でできたファイル (*.diff.gz, *.dsc, *.changes, *.deb, *.orig.tar.gz ) を
upload します。
ftp://ftp.linux.or.jp/pub/debian/jp-devel/Incoming/private/
mail で changes をながしておしまい
以上