株式会社クリアコード > ククログ

ククログ


Debianパッケージの作り方と公開方法: groongaを例にして

注: Debianデベロッパーが書いた文章ではありません。Debianデベロッパーになりたい方はDebianが公式に配布している文書の方をお勧めします。

Web上にはいくつかDebianパッケージの作り方を説明しているページがありますが、はじめてDebianパッケージを作る場合には情報不足のものが多いです。例えば、古めの文書でCDBSを使っていなかったり、「あとは適当に修正して…」などと手順の一部が省略されている文書が多いです。

ここでは、全文検索エンジン兼カラムストアのgroongaを例にしてDebianパッケージの作り方を説明します。ここで説明するのは、1つのソースから1つのパッケージを作成するのではなく、1つのソースから複数のパッケージを作成する方法です。この方法は、ライブラリの場合に多く用いられます。

また、aptitudeでインストールできる形で公開する方法もざっくりと紹介します。ここで作成するDebianパッケージは以下のようにインストールすることができます。

Debian/GNU Linux lenny

以下の内容の/etc/apt/sources.list.d/groonga.listを作成

deb http://packages.clear-code.com/debian/ lenny main
deb-src http://packages.clear-code.com/debian/ lenny main

インストール:

% sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 1C837F31
% sudo aptitude update
% sudo aptitude -V -D -y install groonga libgroonga-dev
Debian/GNU Linux sid

以下の内容の/etc/apt/sources.list.d/groonga.listを作成

deb http://packages.clear-code.com/debian/ unstable main
deb-src http://packages.clear-code.com/debian/ unstable main

インストール:

% sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 1C837F31
% sudo aptitude update
% sudo aptitude -V -D -y install groonga libgroonga-dev
Ubuntu 8.04 LTS Hardy Heron

注: Ubuntu本家のuniverseセクションもインストール対象としておくこと

以下の内容の/etc/apt/sources.list.d/groonga.listを作成

deb http://packages.clear-code.com/ubuntu/ hardy universe
deb-src http://packages.clear-code.com/ubuntu/ hardy universe

インストール:

% sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 1C837F31
% sudo aptitude update
% sudo aptitude -V -D -y install groonga libgroonga-dev
Ubuntu 9.10 Karmic Koala

注: Ubuntu本家のuniverseセクションもインストール対象としておくこと

以下の内容の/etc/apt/sources.list.d/groonga.listを作成

deb http://packages.clear-code.com/ubuntu/ karmic universe
deb-src http://packages.clear-code.com/ubuntu/ karmic universe

インストール:

% sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 1C837F31
% sudo aptitude update
% sudo aptitude -V -D -y install groonga libgroonga-dev

それでは、まずはパッケージの作り方です。

パッケージの作り方

dh_makeを利用する方法が紹介されていることが多いですが、dh_makeではたくさんのファイルが生成されるため、はじめてパッケージを作成する場合はとまどってしまいます。そのため、ここでは手動でパッケージを作成する方法を紹介します。

構成

groongaはライブラリとgroongaのデータベースを管理するコマンドで構成されています。この場合、Debianでは以下のように複数のパッケージに分解します。

  • libXXX: ライブラリを使用しているソフトウェアを実行するために必要なファイルを提供するパッケージ。/usr/lib/libXXX.soなどを提供する。
  • libXXX-dev: ライブラリを使用しているソフトウェアをビルドするために必要なファイルを提供するパッケージ。/usr/include/XXX/*.hなどを提供することが多い。libXXXに依存する。
  • XXX: (ライブラリではなく)コマンドを提供するパッケージ。libXXXに依存する。

groongaの場合は以下のようなパッケージを作成することとします。

  • libgroonga: /usr/lib/libgroonga.soを提供。
  • libgroonga-dev: /usr/include/groonga/*.hと/usr/lib/pkgconfig/groonga.pcを提供。
  • groonga: /usr/bin/groongaを提供。
ソースのファイル名

Debianパッケージを作成する場合にはじめにつまずくポイントがファイルやディレクトリの名前付けの規則です。今回は現時点での最新リリースgroonga 0.1.5を利用するので、それを例にして説明します。

まず、元のソースをダウンロードし、展開します。

% cd /tmp
% wget http://groonga.org/files/groonga/groonga-0.1.5.tar.gz
% tar xvzf groonga-0.1.5.tar.gz
groonga-0.1.5/
...

この状態ではDebianの名前付け規則から外れています。規則に合わせるためには以下のようにします。

% mv groonga-0.1.5.tar.gz groonga_0.1.5.orig.tar.gz

つまり、以下のような構成にする必要があります。

.
|--- groonga-0.1.5/
|    |...
|    ...
+--- groonga_0.1.5.orig.tar.gz

一般化するとこうです*1

  • ソースのディレクトリ名: #{パッケージ名}-#{バージョン}
  • ソースのアーカイブ名: #{パッケージ名}_#{バージョン}.orig.tar.gz
debian/

ソースの準備ができたら、ソースを展開したディレクトリの直下にdebian/ディレクトリを作成します。Debianパッケージ用のファイルはこのディレクトリの下に置きます。

% cd groonga-0.1.5
% mkdir debian/

このような構成になります。

.
|--- groonga-0.1.5/
|    |--- debian/
|    |    |...
|    |...
|    ...
+--- groonga_0.1.5.orig.tar.gz

今回のパッケージ作成に必要なファイルは以下の通りです。それぞれ順番に説明します。

  • debian/control
  • debian/rules
  • debian/copyright
  • debian/changelog
debian/control

debian/controlにはパッケージ全体の情報と個々のパッケージの情報を書きます。

まず、パッケージ全体の情報です。

Source: groonga
Priority: optional
Maintainer: Kouhei Sutou <kou@clear-code.com>
Build-Depends: debhelper (>= 5), cdbs, autotools-dev, libmecab-dev
Standards-Version: 3.7.3
Homepage: http://groonga.org/

それぞれ以下のような意味です。

Source
パッケージの元になるソースの名前
Priority
パッケージの優先度。自作パッケージはoptional。
Maintainer
パッケージメンテナー
Build-Depends
パッケージを生成するときに利用するパッケージ。debhelperとcdbsは必須。groongaはAutotoolsMeCabを利用しているため、auttools-devとlibmecab-devも加えている。
Standards-Version

パッケージが準拠しているDebianポリシーマニュアルのバージョン。現在の最新バージョンは3.8.3。

3.7.3を指定しているのはUbuntu 8.04 LTS Hardy Heron用にもパッケージを作成するため。Hardyの時点ではバージョンが3.7.3だった。

Homepage
パッケージのWebサイト。ソースが入手できるようなサイト。

次に、個々のパッケージの情報を書きます。ここでは、libgroonga-devパッケージを例にして説明します。他のlibgroonga, groongaパッケージは後で示します。

Package: libgroonga-dev
Section: libdevel
Architecture: any
Depends: ${misc:Depends}, ${shlibs:Depends}, libgroonga (= ${binary:Version})
Description: Development files to use groonga as a library
 Groonga is an open-source fulltext search engine and column store.
 It lets you write high-performance applications that requires fulltext search.
 .
 This package provides header files to use groonga as a library.

それぞれ以下のような意味です。

Package
パッケージ名
Section
パッケージが属するセクション。Debian公式のセクションはDebianポリシーマニュアル - 2.4 セクションにある。libgroongaは「lib」、libgroonga-devは「libdevel」、groongaは「database」に属することにする。
Architecture
ビルド可能なマシンアーキテクチャ。スクリプト言語のソースなどアーキテクチャに依存しない場合は「all」を指定する。どのアーキテクチャでもビルドできるときは「any」を指定する。
Depends

依存しているパッケージ。「${misc:Depends}」、「${shlibs:Depends}」はビルドされたファイルから自動的に検出された依存パッケージに置換される。/usr/bin/dh_*を見ると、他にも「${python:Depends}」などがあるよう。

「libgroonga (= ${binary:Version})」とバージョン指定付きで明示的にlibgroongaを指定しているのは、異なるバージョンのgroongaパッケージを使用しないようにするため。同じソースから生成したパッケージではバージョンまで指定しておく方が無難。

Description
パッケージの説明。1行目は短い説明を書き、2行目以降により詳細な説明を書く。2行目以降は先頭に1文字空白を入れることに注意。「.」だけの行は空行になる。

libgroonga, groongaパッケージも含んだdebian/controlは以下のようになります。それぞれのパッケージについての記述は空行で区切ります。

Source: groonga
Priority: optional
Maintainer: Kouhei Sutou <kou@clear-code.com>
Build-Depends: debhelper (>= 5), cdbs, autotools-dev, libmecab-dev
Standards-Version: 3.7.3
Homepage: http://groonga.org/

Package: libgroonga-dev
Section: libdevel
Architecture: any
Depends: ${misc:Depends}, ${shlibs:Depends}, libgroonga (= ${binary:Version})
Description: Development files to use groonga as a library
 Groonga is an open-source fulltext search engine and column store.
 It lets you write high-performance applications that requires fulltext search.
 .
 This package provides header files to use groonga as a library.

Package: libgroonga
Section: libs
Architecture: any
Depends: ${misc:Depends}, ${shlibs:Depends}
Description: Library files for groonga.
 Groonga is an open-source fulltext search engine and column store.
 It lets you write high-performance applications that requires fulltext search.
 .
 This package provides library files.

Package: groonga
Section: database
Architecture: any
Depends: ${misc:Depends}, ${shlibs:Depends}, libgroonga (= ${binary:Version})
Description: An open-source fulltext search engine and column store.
 It lets you write high-performance applications that requires fulltext search.
 .
 This package provides 'groonga' command.
debian/rules

debian/rulesにはパッケージの作り方を書きます。CDBS(Common Debian Build System)を使うとよくある処理をより簡潔に書くことができます。

groongaはAutotoolsを使っているのでCDBSのAutotools用のファイルを読み込みます。

1
2
3
4
#!/usr/bin/make -f

include /usr/share/cdbs/1/rules/debhelper.mk
include /usr/share/cdbs/1/class/autotools.mk

最初の行をみるとわかる通り、debian/rulesはMakefileと同じ書式を使います。

続いて、各パッケージで作成するディレクトリを指定します。変数の名前は「DEB_INSTALL_DIRS_#{パッケージ名}」となります。

1
2
3
4
5
6
7
8
9
10
DEB_INSTALL_DIRS_groonga =                        \
        /usr/bin                                \
        /usr/share/groonga

DEB_INSTALL_DIRS_libgroonga =                        \
        /usr/lib

DEB_INSTALL_DIRS_libgroonga-dev =                \
        /usr/include/groonga                        \
        /usr/lib/pkgconfig

groongaパッケージでは/usr/bin/groongaをインストールするので、/usr/binを指定する、libgroonga-devパッケージでは/usr/include/groonga/groonga.hをインストールするので/usr/include/groongaを指定するといった具合です。

最後にそれぞれのパッケージにどのファイルを含めるかを指定します。ターゲットの名前は「install/#{パッケージ名}」となります。ターゲットの後の「:」がふたつなのは実行する処理を追加しているためです。GNU makeの「::」の挙動について詳しく知りたい場合はGNU makeのinfoのDouble-Colon Rulesのところを読んでください。

1
2
3
4
5
6
7
8
9
10
11
12
13
install/groonga::
        cp -ar debian/tmp/usr/bin/* debian/groonga/usr/bin/
        cp -ar debian/tmp/usr/share/groonga/* \
          debian/groonga/usr/share/groonga/

install/libgroonga::
        cp -ar debian/tmp/usr/lib/libgroonga* debian/libgroonga/usr/lib/

install/libgroonga-dev::
        cp -ar debian/tmp/usr/include/groonga/* \
          debian/libgroonga-dev/usr/include/groonga/
        cp -ar debian/tmp/usr/lib/pkgconfig/* \
          debian/libgroonga-dev/usr/lib/pkgconfig/

ビルドしたファイルはdebian/tmp/以下にインストールされます。インストールされたファイルをcpでそれぞれのパッケージに振り分けています。通常はdh_movefilesを使うようなのですがinstall/libgroongaで使っているようなワイルドカードが使えないようなのでcpを使っています。

debian/rules全体はこうなります。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#!/usr/bin/make -f

include /usr/share/cdbs/1/rules/debhelper.mk
include /usr/share/cdbs/1/class/autotools.mk

DEB_INSTALL_DIRS_groonga =                        \
        /usr/bin                                \
        /usr/share/groonga

DEB_INSTALL_DIRS_libgroonga =                        \
        /usr/lib

DEB_INSTALL_DIRS_libgroonga-dev =                \
        /usr/include/groonga                        \
        /usr/lib/pkgconfig

install/groonga::
        cp -ar debian/tmp/usr/bin/* debian/groonga/usr/bin/
        cp -ar debian/tmp/usr/share/groonga/* \
          debian/groonga/usr/share/groonga/

install/libgroonga::
        cp -ar debian/tmp/usr/lib/libgroonga* debian/libgroonga/usr/lib/

install/libgroonga-dev::
        cp -ar debian/tmp/usr/include/groonga/* \
          debian/libgroonga-dev/usr/include/groonga/
        cp -ar debian/tmp/usr/lib/pkgconfig/* \
          debian/libgroonga-dev/usr/lib/pkgconfig/
debian/copyright

debian/copyrightにはソースの作者・ライセンスとパッケージの作者・ライセンス情報を書きます。ソースの作者・ライセンス情報はソースの中にある情報を利用します。groongaの場合はAUTHORSファイルに作者がリストされていました。著作権者の情報はソースのヘッダーファイルに、ライセンスの情報はCOPYINGにありました。

パッケージのライセンスはGPLv3+にしました。

This package was debianized by Kouhei Sutou <kou@clear-code.com> on
Thu, 15 Jan 2010 14:52:04 +0000.

It was downloaded from <http://groonga.org/>

Upstream Author(s):

    Daijiro MORI <morita at razil. jp>
    Tasuku SUENAGA <a at razil. jp>
    Yutaro Shimamura <yu at razil. jp>
    Kouhei Sutou <kou at cozmixng. org>
    Kazuho Oku <kazuhooku at gmail. com>
    Moriyoshi Koizumi <moriyoshi at gmail. com>

Copyright:

    Copyright(C) 2009-2010 Brazil

License:

    This library is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 2.1 of the License.

    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.

The Debian packaging is (C) 2010, Kouhei Sutou <kou@clear-code.com> and
is 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/changelog

debian/changelogには変更履歴を書きます。パッケージのバージョンはこのファイルから抽出されるのでパッケージのバージョンを上げた場合はこのファイルに追記することを忘れてはいけません。

debian/changelogに変更履歴を追記するための専用のコマンドdchがあるので、それを利用します。-vオプションで新しいバージョンを指定します。

% dch -v 0.1.5

例えば、以下のように書きます。

groonga (0.1.5) unstable; urgency=low

  * New upstream release

 -- Kouhei Sutou <kou@clear-code.com>  Mon, 18 Jan 2010 17:58:31 +0900

これでパッケージに必要な情報はできあがりました。

パッケージのビルド

パッケージをビルドするにはソースディレクトリで以下のコマンドを実行します。

[groonga-0.1.5]% debuild -us -uc

-usは.dscファイルにGPGでサインしないオプションで、-ucは.changesファイルにGPGでサインしないオプションです。

パッケージ作成を試行錯誤しているときは毎回ソースをビルドするのは面倒なものです。そのときは以下のように-ncオプションを指定すると、ビルド前にmake cleanを実行しなくなるのでビルドしなおさなくなります。

[groonga-0.1.5]% debuild -us -uc -nc

パッケージの作成が成功するとトップディレクトリにパッケージが作成されます。

.
|--- groonga-0.1.5/
|    |--- debian/
|    |    |...
|    |...
|    ...
|--- groonga_0.1.5.orig.tar.gz
|--- groonga_0.1.5.diff.gz
|--- groonga_0.1.5.dsc
|--- groonga_0.1.5_amd64.build
|--- groonga_0.1.5_amd64.changes
|--- groonga_0.1.5_amd64.deb
|--- libgroonga-dev_0.1.5_amd64.deb
+--- libgroonga_0.1.5_amd64.deb

生成したパッケージはdpkgでインストールできます。

[groonga-0.1.5]% sudo dpkg -i ../*groonga*.deb

aptitude用に公開する方法

Debianパッケージを作るとインストールが楽になりますが、dpkgでインストールしている場合は依存関係を自動的に解決してくれません。依存関係を自動的に解決するためにはAPTリポジトリを作る必要があります。

ただし、用意するのはわりと面倒です。1つのDebian/Ubuntuのバージョン・アーキテクチャ向けであればまだ頑張ろうかという気にはなれますが、複数のバージョン・アーキテクチャをサポートする場合は嫌になることでしょう。

ここでは、Cuttermilter managerで使用しているDebianパッケージ作成からAPTリポジトリの更新を自動化しているスクリプトを紹介します。これらのスクリプトはCutterのリポジトリ などで公開されています。環境依存の部分があるので、利用する場合は自分の環境用に変更して利用してください。ライセンスはGPLv3+としますので、ライセンスの範囲内で自由に利用してください。

ただし、以下の説明はかなりざっくりとしているので気になる方は自分でスクリプトをみてください。

Debianパッケージ作成の自動化

複数のバージョン・アーキテクチャをサポートする場合、それぞれの環境ごとのDebianパッケージを作成することが大変です。ここで紹介するスクリプトではDebian GNU/Linux sid (x86_64)の環境にchroot環境を作って、すべて同じマシン上で作成します。複数のマシンで作成してもよいのですが、そうするとOSのインストールやsshの設定などが面倒になります。

pbuilderを使うことも多いようですが、その環境の中にシェルで入って確認したいこともあるので、常にchroot環境を持っていた方が便利です*2

Cutterの場合はchroot環境内で以下のビルドスクリプトを実行しています。単純なコマンドの羅列なので説明は省略します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#!/bin/sh

VERSION=1.1.0

sudo aptitude -V -D update && sudo aptitude -V -D -y safe-upgrade
sudo aptitude install -y subversion devscripts debhelper cdbs autotools-dev \
    intltool gtk-doc-tools libgtk2.0-dev libgoffice-0-{6,8}-dev \
    libgstreamer0.10-dev libsoup2.4-dev

mkdir -p ~/work/c
if [ -d ~/work/c/cutter ]; then
    cd ~/work/c/cutter
    svn up
else
    cd ~/work/c
    svn co https://cutter.svn.sourceforge.net/svnroot/cutter/cutter/trunk cutter
fi

cd ~/work/c
rm -rf cutter-${VERSION}
tar xfz cutter_${VERSION}.orig.tar.gz
cd cutter-${VERSION}

mkdir debian
cp -rp ../cutter/debian/* debian/

if dpkg -l libgoffice-0-8-dev > /dev/null 2>&1; then
    :
else
    sed -i'' -e 's/libgoffice-0-8/libgoffice-0-6/g' debian/control
fi

debuild -us -uc

そして、このビルドスクリプトを各chroot環境内で実行するために以下のようなMakefileを使っています。Debian GNU/Linuxのlennyとsid、UbuntuのHardyとKarmicのパッケージを作成します。また、それぞれi386用とamd64用を生成するので8種類のパッケージを作成することになります。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
VERSION = 1.1.0
SERVER_PATH = ktou,cutter@web.sourceforge.net:/home/groups/c/cu/cutter/htdocs
DISTRIBUTIONS = debian ubuntu
CHROOT_BASE = /var/lib/chroot
ARCHITECTURES = i386 amd64
CODES = lenny unstable hardy karmic

update:
        for code_name in $(CODES); do                                                \
          target=$${code_name}-$${architecture};                                \
          case $${code_name} in                                                        \
          lenny|unstable)                                                        \
            distribution=debian;                                                \
            section=main;                                                        \
            ;;                                                                        \
          *)                                                                        \
            distribution=ubuntu;                                                \
            section=main;                                                        \
            ;;                                                                        \
          esac;                                                                        \
          (cd $${distribution};                                                        \
           mkdir -p dists/$${code_name}/$${section}/source;                        \
           for architecture in $(ARCHITECTURES); do                                \
             mkdir -p dists/$${code_name}/$${section}/binary-$${architecture};        \
           done;                                                                \
           apt-ftparchive generate generate-$${code_name}.conf;                        \
           rm -f dists/$${code_name}/Release*;                                        \
           apt-ftparchive -c release-$${code_name}.conf                                \
             release dists/$${code_name} > /tmp/Release;                        \
           mv /tmp/Release dists/$${code_name};                                        \
           gpg --sign -ba -o dists/$${code_name}/Release{.gpg,};                \
          );                                                                        \
        done

upload: update
        for distribution in $(DISTRIBUTIONS); do                \
          (cd $${distribution};                                        \
           rsync -avz --exclude .svn --delete                        \
             dists pool $(SERVER_PATH)/$${distribution};        \
          );                                                        \
        done

download:
        for distribution in $(DISTRIBUTIONS); do                        \
          (cd $${distribution};                                                \
           rsync -avz $(SERVER_PATH)/$${distribution}/pool/ pool;        \
          );                                                                \
        done

build:
        for architecture in $(ARCHITECTURES); do                                \
          for code_name in $(CODES); do                                                \
            target=$${code_name}-$${architecture};                                \
            case $${code_name} in                                                \
            lenny|unstable)                                                        \
              distribution=debian;                                                \
              section=main;                                                        \
              ;;                                                                \
            *)                                                                        \
              distribution=ubuntu;                                                \
              section=main;                                                        \
              ;;                                                                \
            esac;                                                                \
            build_dir=$(CHROOT_BASE)/$$target/home/$$USER/work/c;                \
            pool_dir=$$distribution/pool/$$code_name/$$section/c/cutter;        \
            mkdir -p $$build_dir;                                                \
            cp ../cutter-$(VERSION).tar.gz                                        \
              $$build_dir/cutter_$(VERSION).orig.tar.gz &&                        \
            sudo su -c                                                                \
              "chroot $(CHROOT_BASE)/$$target su - $$USER" < build-deb.sh;        \
            mkdir -p $$pool_dir;                                                \
            cp -p $$build_dir/*cutter*_$(VERSION)* $$pool_dir;                        \
          done;                                                                        \
        done

細かい内容は省略しますが、以下のように使用します。準備が大変です。

% sudo mkdir -p /var/lib/chroot/
% sudo su -c 'debootstrap --arch i386 lenny /var/lib/chroot/lenny-i386'
% sudo su -c 'debootstrap --arch amd64 lenny /var/lib/chroot/lenny-amd64'
% sudo su -c 'debootstrap --arch i386 sid /var/lib/chroot/sid-i386'
% sudo su -c 'debootstrap --arch amd64 sid /var/lib/chroot/sid-amd64'
% sudo su -c 'debootstrap --arch i386 hardy /var/lib/chroot/hardy-i386'
% sudo su -c 'debootstrap --arch amd64 hardy /var/lib/chroot/hardy-amd64'
% sudo su -c 'debootstrap --arch i386 karmic /var/lib/chroot/karmic-i386'
% sudo su -c 'debootstrap --arch amd64 karmic /var/lib/chroot/karmic-amd64'
% sudo vim /etc/fstab
proc   /var/lib/chroot/lenny-i386/proc    proc   defaults 0 0
devpts /var/lib/chroot/lenny-i386/dev/pts devpts defaults 0 0
sysfs  /var/lib/chroot/lenny-i386/sys     sysfs  defaults 0 0
...
% sudo mount -a
...それぞれのchroot環境に入って作業用ユーザを作成し、sudo可能にする...

準備ができたら以下のコマンドでパッケージがビルドできます。

% cd /tmp
% svn export https://cutter.svn.sourceforge.net/svnroot/cutter/cutter/trunk/apt
% wget http://downloads.sourceforge.net/cutter/cutter-1.1.0.tar.gz
% cd apt
% make build

成功すると*/pool/*/main/c/cutter/以下に.debが生成されています。

% ls */pool/*/main/c/cutter/*.deb
debian/pool/lenny/main/c/cutter/cutter-bin_1.1.0-1_i386.deb
debian/pool/lenny/main/c/cutter/cutter-doc_1.1.0-1_i386.deb
...

この状態でAPTリポジトリを作成できます。

% make update

GPGでサインしようとするのであらかじめGPGの設定を行っておいてください。APTリポジトリの作成に関する設定はdebian/*.confとubuntu/*.confです。環境に合わせて変更してください。

Makefileの中にはuploadというターゲットがあります。このターゲットを使うとupdateで作成したAPTリポジトリをsf.netのWebサーバにrsyncでアップロードできます。

まとめ

groongaを例にしてDebianパッケージの作成方法を説明しました。ついでに、APTリポジトリの公開方法もざっくりと紹介しました。

Debianパッケージの作り方やAPTリポジトリの公開方法は、必要な人はあまりいないかもしれませんが、groongaのDebianパッケージを必要としている人はそれよりもいそうな気がします。もしよかったら使ってみてください。

*1 tar.gzではなくtar.bz2などでもOKです。

*2 そもそもpbuilderは複数の環境を切り替えてビルドすることができるのでしょうか。環境を作り直さなければいけない気がします。

2010-01-18

«前の記事: あしたのオープンソース研究所: GStreamer 最新記事 次の記事: 告知: LOCAL DEVELOPER DAY &#39;10/Winter: メールフィルタの作り方 - Rubyで作るmilter»
タグ:
年・日ごとに見る
2008|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|