Debianパッケージの作成方法

Debian Package Creation Howto



1.序文

マシンに責任を持つということは、ハードウェアとソフトウェアコンポーネントの面倒を見るということです。システム管理者としての日常生活で見られるように、ソフトウェアを大量のソースファイルよりもソフトウェアパッケージとしてインストールする方がはるかに優れています。これにより、システムを適切に保守するためのコストが削減されます。

ご希望の販売代理店から入手できるパッケージは、パッケージメンテナによって検証および監視されます。彼はソフトウェアをテストし、ディストリビューションで利用可能な他のソフトウェアパッケージに適合することを確認しました。さらに、パッケージはパッケージメンテナからのGPGキーで署名されています。これにより、パッケージの整合性が保証され、パッケージが信頼できるソースからのものであることが示されます。







パッケージ形式は、Linuxディストリビューションによって異なります。選択された形式は次のとおりです。



deb

使用されるパッケージ: Debian GNU / LinuxUbuntuArmbianLinux MintKnoppix



rpm

使用されるパッケージ: RedHatFedoraCentOSOpenSuse





tgz and txz

使用されるパッケージ: Slackware

tar.xz

使用されるパッケージ: Arch Linux



このドキュメントでは、Debian GNU / Linux用のパッケージをビルドする方法について簡単に説明します。 Debianパッケージフォーマットと `deb`ベースのLinuxシステムを維持するためのツールの詳細については、Debianパッケージ管理ブックをご覧ください。 [dpmb] Debian GNU / Linuxのパッケージをビルドするには、次のドキュメントが不可欠です。

  • Debian New Maintainer’s Guide [dnmg]
  • Debian開発者リファレンス [GDR]
  • Debianパッケージチュートリアル [できる]
  • Debianポリシーマニュアル [dpm]

使用するパッケージの名前は `helloworld`で、バージョン番号は0.1です。デモンストレーションの目的で、有名なメッセージHello、world!を出力する単一のPythonスクリプトが含まれているだけです。

#!/usr/bin/python print ('Hello, world!') 

2.要件

2.1。 GPGキー

ステップ1として、GPGキーを利用できるようにします。後で、パッケージに署名するためにキーが必要になります。署名されていないパッケージは信頼できず、Debianユニバースの一部になることはできないことに注意してください。

GPGキーをまだ持っていない場合は、作成してください。以下の3つのステップに従うことができます。最初のコマンドは新しいキーを生成し、2番目のコマンドは新しいキーを別のファイルにエクスポートし、3番目のコマンドはキーを個人のキーリングに追加します。

$ gpg --gen-key $ gpg -a --output ~/.gnupg/YOUR_NAME.gpg --export 'YOUR NAME' $ gpg --import ~/.gnupg/YOUR_NAME.gpg 

作成中に、指定された名前_YOURNAME_が正しいことを確認してください。名と姓の組み合わせを使用するのが一般的です。この名前は、Debianパッケージの `control`ファイルを作成するときに、パッケージ内で完全に同じである必要があります。 GPGの詳細については、GNUプライバシーハンドブック[gph]を参照してください。

2.2。パッケージングツールチェーン

ソースコードを使用してDebianパッケージをビルドするには、システムに次のソフトウェアパッケージが必要です。

  • ビルドエッセンシャル
  • autoconf
  • オートメイク
  • autotools-dev
  • dh-make
  • debhelper
  • devscripts
  • フェイクルート
  • xutils
  • リンティアン
  • pbuilder

ユーザー `root`として、次のコマンドを使用してこれらをインストールできます。

# apt-get install build-essential autoconf automake autotools-dev dh-make debhelper devscripts fakeroot xutils lintian pbuilder 

2.3。パッケージ化するソフトウェアを準備します

パッケージをビルドするためのディレクトリを準備する必要があります。パッケージをビルドする環境を準備するためのディレクトリを作成します。

$ mkdir -p ~./build/helloworld/0.1 

次のディレクトリにある `tar.gz`圧縮アーカイブをコピーします。

$ cp helloworld-0.1.tar.gz ~./build/helloworld/0.1 

ディレクトリに移動し、パッケージを抽出します。

$ cd ~./build/helloworld/0.1 ~/build/helloworld/0.1$ tar -xzf helloworld-0.1.tar.gz 

これで、ディレクトリには、別のディレクトリにあるソースコードと圧縮アーカイブの両方が含まれます。

~/build/helloworld/0.1$ ls helloworld-0.1 helloworld-0.1.tar.gz 

3.Debianization

この時点で、Debianパッケージに固有のファイルを追加します。そのため、このステップはソフトウェアの_Debianization_と呼ばれています。これは、いくつかの単一のステップで実行されます。

3.1パッケージ構造を準備する

パッケージのソースコード全体を保持するディレクトリに移動します。この例では、パッケージにファイル `helloworld.py`が含まれていますが、次の場合のみです。

~$ cd build/helloworld/0.1/helloworld-0.1 ~/build/helloworld/0.1/helloworld-0.1$ ls helloworld.py 

Debianパッケージに固有のファイルを追加しましょう。ツール `dh_make`が機能します。スイッチ `-e`は、指定されたアドレスを` debian / control`ファイルの `Maintainer`フィールドの電子メールアドレスとして使用します。パッケージを作成するには、代わりに独自のメールアドレスを使用してください。 GPGキーに対応するものと同じメールアドレスを使用することに注意してください。

スイッチ `-f`は、指定されたファイルを元のソースアーカイブとして使用し、現在のプログラムツリーの` program.orig`へのコピーをスキップします。

~/build/helloworld/0.1/helloworld-0.1$ dh_make -e [email protected] -f ../helloworld-0.1.tar.gz 

プロンプトで、作成するパッケージのタイプを選択するように求められます。 _singlebinary_を選択するには `s`と入力します。

Type of package: single binary, indep binary, multiple binary, library, kernel module, kernel patch? [s/i/m/l/k/n] s Maintainer name : Frank Hofmann Email-Address : [email protected] Date : Sat, 04 Nov 2017 21:16:13 +0100 Package Name : helloworld Version : 0.1 License : blank Type of Package : Single Hit to confirm: Currently there is no top level Makefile. This may require additional tuning. Done. Please edit the files in the debian/ subdirectory now. You should also check that the helloworld Makefiles install into $DESTDIR and not in / . 

これにより、 `debian`というディレクトリが作成されます。

~/build/helloworld/0.1/helloworld-0.1$ ls debian helloworld.py 

このディレクトリには、すべてのパッケージ固有のファイルが含まれています。

3.2。制御ファイルを調整します

ファイル `debian / control`は、パッケージをビルドするために必要な依存関係を保持します。コマンド `dpkg-depcheck -d。/ configure`を使用すると、必要なすべてのパッケージのリストが表示されます。この場合、Pythonはインタプリタ言語であるため、これ以上のパッケージは必要ありません。

次に、ファイル `debian / control`を編集し、パッケージ固有の値を追加する必要があります。この例では、次のようになります。

Source: helloworld Section: python Priority: optional Maintainer: Frank Hofmann < [email protected] > Build-Depends: debhelper (>= 9) Standards-Version: 3.9.5 Homepage: http://www.efho.de/ #Vcs-Git: git://anonscm.debian.org/collab-maint/helloworld.git #Vcs-Browser: http://anonscm.debian.org/?p=collab-maint/helloworld.git;a=summary Package: helloworld Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, python Description: Prints Hello World in Python Prints Hello World in Python 

3.3。著作権ファイルを調整する

ファイル `debian / copyright`には、ソフトウェアパッケージのライセンス情報が含まれています。これは、GNU Public License 2(GPLv2)を介したリリースのために準備されています。この例では、次のようになります。

Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: helloworld Source: http://www.efho.de/ Files: debian/* Copyright: 2017 Frank Hofmann < [email protected] > License: GPL-2+ This package is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. . This package 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 General Public License for more details. . You should have received a copy of the GNU General Public License along with this program. If not, see . On Debian systems, the complete text of the GNU General Public License version 2 can be found in '/usr/share/common-licenses/GPL-2'. 

3.4。変更ログファイルを調整します

著作権情報の後で、ファイル `debian / changelog`を調整する必要があります。この例では、初期リリースという情報を追加します。

helloworld (0.1-1) unstable; urgency=low * Initial release -- Frank Hofmann < [email protected] > Sat, 04 Nov 2017 21:16:13 +0100 

これまでに必要なのはこれだけです。これで、ついにパッケージをビルドできるようになりました。


4.パッケージをビルドします

パッケージをビルドするには、1つのディレクトリを上に移動して、次のコマンドを実行する必要があります。

~/build/helloworld/0.1/helloworld-0.1$ dpkg-buildpackage -rfakeroot

オプション `-rfakeroot`は、` dpkg-buildpackage`がコマンド `fakeroot`の助けを借りて特権ユーザーとしてコマンドを実行することを可能にします。これは、パッケージを準備し、ファイルとディレクトリを作成するために必要です。
上記のコマンドを実行すると、出力メッセージのリストが長くなります(ここではドイツ語環境で表示されています)。

dpkg-buildpackage: Quellpaket helloworld dpkg-buildpackage: Quellpaket helloworld dpkg-buildpackage: Quellversion 0.1-1 dpkg-buildpackage: Quelldistribution unstable dpkg-buildpackage: Quellen geändert durch Frank Hofmann < [email protected] > dpkg-buildpackage: Host-Architektur amd64 dpkg-source --before-build helloworld-0.1 fakeroot debian/rules clean dh clean dh_testdir dh_auto_clean dh_clean dpkg-source -b helloworld-0.1 dpkg-source: Information: Quellformat 3.0 (quilt) wird verwendet dpkg-source: Information: helloworld wird unter Benutzung des existierenden ./helloworld_0.1.orig.tar.gz gebaut dpkg-source: Information: helloworld wird in helloworld_0.1-1.debian.tar.xz gebaut dpkg-source: Information: helloworld wird in helloworld_0.1-1.dsc gebaut debian/rules build dh build dh_testdir dh_auto_configure dh_auto_build dh_auto_test fakeroot debian/rules binary dh binary dh_testroot dh_prep dh_auto_install dh_installdocs dh_installchangelogs dh_perl dh_link dh_compress dh_fixperms dh_strip dh_makeshlibs dh_shlibdeps dh_installdeb dh_gencontrol dpkg-gencontrol: Warnung: Feld Depends von Paket helloworld: unbekannte Substitutionsvariable ${shlibs:Depends} dh_md5sums dh_builddeb dpkg-deb: Paket helloworld wird in ../helloworld_0.1-1_amd64.deb gebaut. dpkg-genchanges <../helloworld_0.1-1_amd64.changes dpkg-genchanges: kompletter Quellcode beim Hochladen hinzufügen dpkg-source --after-build helloworld-0.1 dpkg-buildpackage: Alles hochzuladen (Originalquellen enthalten) signfile helloworld_0.1-1.dsc Sie benötigen eine Passphrase, um den geheimen Schlüssel zu entsperren. Benutzer: 'Frank Hofmann (Hofmann EDV) < [email protected] > ' 4096-Bit RSA Schlüssel, ID D431AC07, erzeugt 2014-09-05 

4.1。パッケージの検証

おめでとうございます—あなたはDebianパッケージの構築に成功しました–そうです!それでは、パッケージを詳しく見てみましょう。ここで、 `lintian`が登場します。このツールは、Debianパッケージが満たさなければならない厳格なルールに対する違反を見つけるために、パッケージを検証します。

テストを実行するには、次のコマンドを入力します。

lintian helloworld_0.1-1_amd64.deb 

このツールは、ルール違反だけでなく、スペルミスや間違った文字も検出します。スイッチ `–pedantic`は、` lintian`に通常よりもはるかに重要であるように要求します。以下に示すように、 `lintian`は少し不機嫌で、3つの警告と1つのエラーを発見しました。

最初の警告を除いて、私たちは簡単に `lintian`を幸せにし、ルールセットに従ってパッケージの内容を調整することができます。警告 `new-package-should-close-itp-bug`は、ITPパッケージに対するバグレポートがないことを意味します(ITPは_パッケージを意図した_を意味します)。通常のDebianパッケージの場合、このソフトウェアのパッケージ化を開始する予定であることを他の人に通知するために、パッケージITPのバグトラッカーにバグレポートを送信する必要があります。

4.2。警告: `readme-debian-contains-debmake-template

ファイル `README.Debian`は、このパッケージに関する追加のメモを保持することを目的としています。 `dh_make`は私たちのためにこのファイルを作成しました:

helloworld for Debian --------------------- -- Frank Hofmann < [email protected] > Sat, 04 Nov 2017 21:16:13 +0100 

この例では追加情報がないため、ファイルを削除できます。

4.3。警告: `description-starts-with-leading-spaces`

この警告は、ファイル `debian / control`内のパッケージの長い説明が複数のスペースで始まるために発生します。 1つのスペースを削除するとすぐに、警告は消えます。

4.4。エラー: `description-synopsis-is-duplicated`

各パッケージには、 `debian / control`に短い説明と長い説明の両方が必要です。このエラーは、両方の説明が同一であるために発生します。より長い説明を拡張するとすぐに、エラーはなくなります。


5.リンクとリファレンス

-[ddr]アンドレアス・バース、アダム・ディ・カルロ、ラファエル・ヘルツォーク、ルーカス・ヌスバウム、クリスチャン・シュワルツ、イアン・ジャクソン: Debian開発者リファレンス
– [dnmg] Josip Rodin, Osamu Aoki: Debian New Maintainer’s Guide
-[dpmb] Axel Beckert、Frank Hofmann: Debianパッケージ管理ブック
-[dpm] Debianポリシーマニュアル
- [できる] Debianパッケージチュートリアル
– [gph] GNUプライバシーハンドブック
– [lushpaiPackage] Alex Lushpai: ソースからdebianパッケージを作成する方法


6.謝辞

著者は感謝したいと思います アクセルベッカートGerold Rupprecht 彼らのサポート、そしてこの記事を準備している間の批評家のために。