独自のDebパッケージやaptリポジトリを作ってみよう 3ページ

独自のパッケージを一から作成する

 以上は既存のパッケージを修正・改造する場合の例であったが、続いては独自のパッケージを一から作る場合の手順についても簡単に解説しておこう。

 パッケージの作成には、先に説明した下記の4つのファイルが必要だ。

  • rules
  • control
  • changelog
  • copyright

 このうち、controlやchangelog、copyrightといったファイルについては、先に解説したとおりのフォーマットで作成するパッケージに合わせたものを作成すればよい。しかし、rulesファイルについては、パッケージ化するソフトウェアやファイルのビルド方法によってその内容が大きく異なる。そこで、以下ではビルドは不要でファイルを特定のディレクトリにインストールするだけのシンプルなパッケージと、configureを使ってビルドを行うソフトウェアの2つについて、rulesファイルの例を挙げて説明しよう。

 なお、以下ではrulesファイルの作成を簡素化するため、rulesファイル作成支援ツールであるCDBS(Common Debian Build System)を利用している。この場合、controlファイルのBuild-Depends項目に「cdbs」および「debhelper」を追加しておく必要がある(CDBSはバイナリパッケージのビルド支援ツールであるdebhelperを利用するため)。

ファイルを特定のディレクトリにインストールするだけのパッケージを作る

 それでは、まずは/etc/apache2/sites-enabledディレクトリ以下に「example.conf」という設定ファイルをインストールするだけのパッケージの作成について説明しよう。パッケージ名は「example-siteconfig」とし、またバージョンは0.1とする。今回は「example-siteconfig」というディレクトリを作成し、そこにインストールする設定ファイルやパッケージ作成用の各種ファイルを配置する。具体的には、以下のようなファイルとディレクトリを用意することとなる。

example-siteconfig/example.conf
example-siteconfig/debian/rules
example-siteconfig/debian/control
example-siteconfig/debian/changelog
example-siteconfig/debian/copyright

 さて、このパッケージの情報を記述したcontrolファイルは以下のようになる。

Source: example-siteconfig
Maintainer: Hiromichi Matsushima <hylom@example.com>
Build-Depends: cdbs, debhelper
Standards-Version: 3.9.4

Package: example-siteconfig
Architecture: all
Description: config files for apache2 to use example web site
 Config files for apache2 to use example Web sites.
 This package installs config files to /etc/apache2/sites-enabled
 directory.

 このパッケージはアーキテクチャに依存しない設定ファイルのみが含まれるので、「Architecture」には「all」を指定している。

 また、rulesファイルは以下のようになる。

#!/usr/bin/make -f
#

include /usr/share/cdbs/1/rules/debhelper.mk  ←CDBSの設定ファイルをインクルードする

install/example-siteconfig::
        install -pd $(DEB_DESTDIR)/etc/apache2/sites-enabled
        install -pm 644 example.conf $(DEB_DESTDIR)/etc/apache2/sites-enabled/

 CDBSを利用する場合、「install/<パッケージ名>::」がそのパッケージをインストールする際に実行されるターゲットとなる。また、インストール先としては「$(DEB_DESTDIR)」に続けてファイルの実際のインストール先を指定する。この例の場合、まず「install -pd」コマンドでインストール先ディレクトリである「/etc/apache2/sites-enabled」を作成し、続いて「install -pm」コマンドでこのディレクトリに「644」というパーミッションでexample.confというファイルをインストールするよう指定している。

 また、changelogファイルは以下のとおりだ。

example-siteconfig (0.1-1) unstable; urgency=low

  * Initial Release

 -- Hiromichi Matsushima <hylom@example.com>  Sat, 06 Jul 2013 20:58:11 +0900

 このファイル中に記載されているバージョン番号がパッケージのバージョン番号として使われるため、バージョン番号の指定には注意しよう。今回は「バージョン0.1」の「1回目のリリース」という意味で「0.1-1」という番号を指定している。

 そのほか、ライセンスなどを記述したcopyrightファイルと、インストールする設定ファイルであるexample.confを適宜用意する。

 以上のファイルがそろったら、example-siteconfigディレクトリでdebuildコマンドを実行すると、パッケージが作成される。

$ debuild -us -uc
This package has a Debian revision number but there does not seem to be
an appropriate original tar file or .orig directory in the parent directory;
(expected one of example-siteconfig_0.1.orig.tar.gz, example-siteconfig_0.1.orig.tar.bz2,
example-siteconfig_0.1.orig.tar.lzma,  example-siteconfig_0.1.orig.tar.xz or example-siteconfig.orig)
continue anyway? (y/n) y  ←「y」を入力してEnterを押す
 dpkg-buildpackage -rfakeroot -D -us -uc
dpkg-buildpackage: source package example-siteconfig
dpkg-buildpackage: source version 0.1-1
 
 

 なお、アップストリームのソースアーカイブがないため確認メッセージが表示されるが、こちらは無視して「y」を入力して進めて構わない。

configureやbuildが必要なパッケージを作る

 続いて、ソースコードからのビルドが必要なパッケージを作るためのrulesファイルについても説明しておこう。UNIX/Linux向けの一般的なソフトウェアでは、まずconfigureコマンドを使って設定を行い、続いてmakeコマンドでビルドを実行し、最後にmake installコマンドでファイルをインストールする、といった作業でインストールを行うのが一般的だ。このようなプログラムをDebパッケージ化する場合、以下のようなrulesファイルを用意すれば良い。

#!/usr/bin/make -f
#

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

clean::
        -$(MAKE) distclean

configure/<パッケージ名>::
        ./configure --prefix=/usr

build/<パッケージ名>::
        $(MAKE)

install/<パッケージ名>::
        $(MAKE) install DESTDIR=$(CURDIR)/debian/<パッケージ名>

 ここで、実際のrulesファイル内では「<パッケージ名>」の部分は作成するパッケージ名に置き換えて使用する。CDBSを利用する場合、「configure/<パッケージ名>::」というターゲットでconfigureなどのビルド前に実行すべき作業を、「build/<パッケージ名>::」というターゲットでmakeなどのビルド作業を、「install/<パッケージ名>::」というターゲットでインストール作業を指定する。なお、インストール先には「$(CURDIR)/debian/<パッケージ名>」を指定する。

 ソースディレクトリ(configureファイルが格納されているディレクトリ)以下にdebianディレクトリを作成し、このrulesファイルとcontrolファイルやchangelogファイル、copyrightファイルを格納したうえでソースディレクトリでdebuildコマンドを実行すれば、パッケージが作成される。

aptの独自リポジトリを作成する

 最後に、先のような手順で作成した独自のDebパッケージを公開するための独自リポジトリの作成方法について説明しよう。

 apt-get向けの独自リポジトリを作成するには、apt-ftparchiveコマンドを利用する。たとえば、「/var/www/debian」ディレクトリに公開したいパッケージが格納されている場合、このディレクトリで以下のようにapt-ftparchiveコマンドを実行すれば良い。

$ apt-ftparchive packages . | gzip > Packages.gz

 ここで作成された「Packages.gz」ファイルが、パッケージ情報を格納したファイルとなる。なお、パッケージについてはサブディレクトリに格納されていても問題ない。

独自リポジトリを利用する

 作成した独自リポジトリからapt-getコマンドなどを使ってパッケージをインストールできるようにするには、/etc/apt/sources.list.dディレクトリ以下に設定ファイルを作成し、そこに追加するリポジトリ情報を記述する必要がある。たとえば、作成したaptリポジトリが「http://example.com/debian/」というディレクトリとして公開されている場合、/etc/apt/sources.list.dディレクトリ内に「example.com.list」といったようなファイルを作成し、以下のような内容を記述すれば良い。

deb http://example.com/debian ./

Debパッケージ作成のハードルは高いが、慣れてしまえば運用の手間を簡略化可能

 このようにDebパッケージの作成にはやや面倒な手順が必要だが、その代わり実行できる処理の自由度は非常に高い。ソフトウェア本体だけでなく、設定ファイルなどの配布も可能なので、うまく利用することでサーバーのデプロイや運用の際の作業負荷を大きく軽減できるだろう。うまく活用してほしい。

 なお、Debianは歴史の古いLinuxディストリビューションの1つであり、そのパッケージシステムであるdpkgも長い歴史を持つ。そのため、さまざまな支援ツールが作られており、使用するツールによってパッケージの作成手順などもやや異なる場合がある。今回はその中でも、現時点で広く使われていると思われるものを紹介したが、パッケージによってはこれ以外の手段で作成されている場合もあるので、既存パッケージを改造する場合などはrulesファイルなどを各自確認してほしい。