.

.

東京エリア Debian 勉強会
Debian Package ハンズオン.

岩松 信洋 iwamatsu@debian.or.jp
IRC nick: iwamatsu

2008 年 03 月 01 日.

.
..

AgendaAgenda今回の目的発表
Debian Package を作成する前の準備
今回の生贄プログラムが動作を確認する
Debian Package の雛形を作る
debian/control ファイルの編集
debian/changelog ファイルの編集
debian/copyright ファイルの編集
debian/rules ファイルを編集する
Debian Package の作成
Debian Package のテスト
本日のまとめ終わりに質疑応答

今回の目的シングルバイナリの DebianPackage が作成できるようになること。

DebianPackageを作成する
前の準備以下の環境変数を設定しておくと便利。
DEBFULLNAME の設定
Debian Package のメンテナ名
DEBEMAIL の設定
Debain Package メンテナンス用のメールアドレス

$ cat ˜/.bashrc--略-export DEBFULLNAME="Nobuhiro Iwamatsu"
export DEBEMAIL=iwamatsu@nigauri.org--略-$ source ˜/.bashrc

必要なパッケージ
最低限必要な必要なパッケージは以下の通り。
devscripts
debhelper
lintian/linda
gcc
binutils
libc6-dev
dh-make

あると便利なパッケージ
apt-file
pbuilder今回の生贄

sl====___________________D _| |_______/\__I_I_____===__|_________|(_)--- |H\________/ ||=|___ ___|
/
| |
H | |
|
|
||_| |_||| |H |__--------------------| [___] ||| ________|___H__/__|_____/[][]˜\_______|||/ ||-----------I_____I [][] [] D|=======|___/ =| o |=-˜˜\ /˜˜\ /˜˜\ /˜˜\ ____Y___________|_|/-=|___|||||||||_____/˜\___/\_/\__/ \__/ \__/ \__/\_/

プログラムが動作を確認する

まず、プログラムが動作するか確認しましょう。

$ tar -xf sl.tar$ cd sl$ makecurses.h がないため、コンパイルに失敗しました。

$ tar -xf sl.tar$ cd sl$ makemake
cc -O -o sl sl.c -lcurses -ltermcap
sl.c:30:20: error: curses.h: No such file or directo
sl.c: In function ’my_mvaddstr’:sl.c:42: error: ’ERR’ undeclared (first use in thissl.c:42: error: (Each undeclared identifier is repor........

curses.h を持った Debian Package が必要です。どのファイ
ルがどのパッケージじよってインストールされるのか、調べるには apt-file を使うと便利です。

# sudo apt-file update$ apt-file search /usr/include/curses.hlibncurses5-dev: usr/include/curses.hlibncueses5-dev パッケージをインストールして再度コンパイルしましょう。

# apt-get update# apt-get install libncurses5-dev$ makemake
cc -O -o sl sl.c -lcurses -ltermcap.......

コンパイルが通ったので、動作テストをしましょう。

% ./slDebianPackageの雛形を作る

ディレクトリにバージョンがない場合はバージョンが付いたディレクトリ名に変更します。Debian Package の雛形を作成するには、dh make コマンドを使います。

$ tar -xf sl.tar$ mv sl sl-0.0.0$ cd sl-0.0.0$ dh_makeiwamatsu@chimagu:˜/sl-0.0.0$ dh_make
Type of package: single binary, multiple binary,library, kernel module or cdbs?
[s/m/l/k/b]

s: 一つの実行バイナリを提供するパッケージ
m: 2 つ以上の実行バイナリを提供するパッケージ
l: ライブラリ用パッケージ
k: カーネルモジュール用パッケージ
b: cdbs を使ったパッケージ

$ dh_make
Type of package: single binary, multiple binary,library, kernel module or cdbs?
[s/m/l/k/b] sMaintainer name : Nobuhiro Iwamatsu
Email-Address: iwamatsu@nigauri.org
Date: Thu, 21 Feb 2008 15:46:57 +0900
Package Name: sl
Version: 0.0.0
License: blank
Type of Package : SingleHit <enter> to confirm:

$ dh_make
Type of package: single binary, multiple binary,library, kernel module or cdbs?
[s/m/l/k/b] sMaintainer name : Nobuhiro Iwamatsu
Email-Address: iwamatsu@nigauri.org
Date: Thu, 21 Feb 2008 15:46:57 +0900
Package Name: slVersion: 0.0.0
License: blank
Type of Package : Single
Hit <enter> to confirm:
Could not find sl_0.0.0.orig.tar.gz
Either specify an alternate file to use with -f,or add --createorig to create one.

xxx.orig.tar.gz がないと、エラーになります。
–createorig オプションを加えて dh make を実行しましょう。

$ dh_make --createorig

dh make 実行後、debian ディレクトリが作成されます。

$ ls ./debian/
README.Debian control
dirs emacsen-remove.ex
init.d.lsb.ex manpage.xml.ex
mogeri.doc-base.EX
preinst.ex
watch.exchangelog copyrightdocs
emacsen-startup.ex manpage.1.ex
menu.expostinst.ex
prerm.excompatcron.d.ex
emacsen-install.ex
init.d.ex
manpage.sgml.ex sl-default.ex
postrm.ex
rules*.ex / *.EX はサンプルなので削除します。

$ rm -rf ./debian/*.ex$ rm -rf ./debian/*.EX最低限必要な debian ディレクトリ以下にあるファイルは以下の通りです。。
README.Debian –Package の README

control – Package の説明、ビルドに必要な情報など
dirs – Package で利用するディレクトリを記述
changelog – Package の変更履歴
copyright – Package のコピーライト
docs – ドキュメントファイル一覧
rules – Package 作成用のスクリプト (Makefile)compat – debhelper のバージョンdebian/control
ファイルの編集Source: sl
Section: game
Priority: extra
Maintainer: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
Build-Depends: debhelper (>= 5),libncurses5-dev
Standards-Version: 3.7.2
Package: slArchitecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}
Description: Key type correction software
Key type correction software for ’ls’ command.

debian/changelo
ファイルの編集

次に Debian の Changelog を編集しましょう。編集するには、dch コマンドを使います。

$ dchsl (0.0.0-1) unstable; urgency=low* Initial release-- Nobuhiro Iwamatsu <iwamatsu@nigauri.org> \Sun, 24 Feb 2008 01:01:53 +0900

debian/copyrigh
ファイルの編集This package was debianized by \Nobuhiro Iwamatsu <iwamatsu@nigauri.org> on
Thu, 21 Feb 2008 16:13:47 +0900.
It was downloaded from http://www.is.titech.ac.jp/˜toyoda/
Upstream Author:
Toyoda Masashi <toyoda@is.titech.ac.jp>
Copyright:Copyright 1993,1998 Toyoda Masashi (toyoda@is.titech.ac.jp)
License:Everyone is permitted to do anything on this program
including copying,modifying, and improving, unless you try to pretend thatyou wrote it.
i.e., the above copyright notice has to appear in all copies.
THE AUTHOR DISCLAIMS ANY RESPONSIBILITY WITH REGARD TO
THIS SOFTWARE.
The Debian packaging is \(C) 2008, Nobuhiro Iwamatsu <iwamatsu@nigauri.org> andis licensed under the GPL, see ‘/usr/share/common-licenses/GPL’.
# Please also look if there are files or directories which have a# different copyright/license attached and list them here.

めんどくさいので、コピー。

実際は、ソフトウェアの著作権を持っている人に連絡をとり、ライセンスを確認する必要があります。

debian/rules
ファイルを編集する

debian/rules はです。

Debian Package を作成する Makefile

configure ターゲット
build ターゲット
clean ターゲット
install ターゲット

今回はシンプルなプログラムなので、変更する必要はありません。

とりあえずPackage を作成する

Debian Package を作る時は、debuild コマンドを使います。

$ debuild -us -uc-us ソースパッケージに GPG サインをしない-uc *.changes ファイルに GPG サインをしない$ debuild -us -uc
fakeroot debian/rules clean
dh_testdir
dh_testrootrm -f build-stamp configure-stamp# Add here commands to clean up after the \build process.
/usr/bin/make clean
make[1]: ディレクトリ ‘/tmp/sl-0.0.0’ に入ります
make[1]: *** ターゲット ‘clean’ を make するルール \がありません. 中止.
make[1]: ディレクトリ ‘/tmp/sl-0.0.0’ から出ます
make: *** [clean] エラー 2
debuild: fatal error at line 1239:
fakeroot debian/rules clean failed

Makefile の修正

図 rules ファイルと Makefile の関係図今の Makefile

CC=cc
CFLAGS=-O
sl: sl.c sl.h$(CC) $(CFLAGS) -o sl sl.c -lcurses -ltermcap# $(CC) $(CFLAGS) -o sl sl.c -lcurses

修正後

CC=cc
CFLAGS=-O
BINDIR?=/usr/games/ <--- インストール先を追加
BINDIR : 実行バイナリがインストールされるディレクトリ

修正後

install: <-- install ターゲットを追加
install -d ${DESTDIR}${BINDIR}
install -m 755 sl ${DESTDIR}${BINDIR}
clean:<-- clean ターゲットを追加
rm -rf sl
DESTDIR: Debian Package のインストールされる TOP
ディレクトリ再 度 Debian Package を作成

$ debuild -us -uc......
dh_shlibdeps
dh_gencontrol
dpkg-gencontrol: warning: unknown substitution varia
dh_md5sums
dh_builddebdpkg-deb: building package ‘sl’ in ‘../sl_0.0.0-1_i3
dpkg-genchanges
dpkg-genchanges: including full source code in uploa
dpkg-buildpackage (debuild emulation): full upload (Now running lintian...
W: sl: binary-without-manpage sl
Finished running lintian.

DebianPackageのテスト

pbuilder
最低限の Debian system から、パッケージを作成するためのツール。

$ sudo /usr/sbin/pbuilder build sl_0.0.0-1.dsc
piuparts
Debian Package の インストール/アンインストールのチェックをするためのツール。

本日のまとめまずは、ソフトウェアが動作するか確認する
dh make コマンド でパッケージの雛形を作成する
debuild コマンド でパッケージ作成

ライセンスやコピーライトの確認をすること
lintian/linda で パッケージのチェックインストールして動作確認まで行う
アンインストールの確認も忘れずに情報源Debian Project / Debian JP Project Website

http://www.debain.org
http://www.debain.or.jp
東京エリア Debian 勉強会
http://tokyodebian.alioth.debian.org
Debian Policy

http://www.debian.org/doc/debian-policy/
Debian 新メンテナガイド
http://www.debian.org/doc/manuals/
maint-guide/index.ja.html

終わりに

今年の Debian 勉強会では、毎月様々な Debian Pakcage の作成方法をみなさんに伝授します。
データだけの DebianPackage 作成方法
VCS を使った Debian Package の作成方法

ライブラリの Debian Package 作成方法などなど

質疑応答