Debianでbackportsにパッケージを登録する(ディストリビューション/パッケージマネージャー Advent Calendar 2013)

Pocket

これはディストリビューション/パッケージマネージャー Advent Calendar 2013 17日目の記事です。

Debianの安定版(stable)と呼ばれるものは、一度リリースされると致命的なバグやセキュリティに問題がない限り、ソフトウェアのメジャーバージョンが上がることはありません。またリリース間隔が不定期なため、状況によっては古いソフトウェアを使い続けることになります。これはメリットであり、デメリットでもあります。

安定板でも新しいパッケージを使いたい、という要望に応えたものがbackportsです。かつてはwww.backports.orgで非公式サービスとして提供されていましたが、現在では公式なものとして扱われています。

どのようにしてbackportsにパッケージをアップロードするのかは、http://backports.debian.org/Contribute/に基本的にはすべて記述されています。ここでは実体験を交えて説明します。

ACL(Access Contorol List)への追加リクエスト

Debian開発者であれば、backportsのACLに自分のIDを追加してもらうだけでアップロードができるようになります。ACLの追加は自力ではできないので、RT(Request Tracker)にチケットを作成してリクエストをします。

チケットの作成はメールで行います。backports@rt.debian.orgあてに”Debian RT”という文字列を含んだメールを送ることで、その内容がチケットになります。以下は私が出したメールの例です

From: NOKUBI Takatsugu <knok@daionet.gr.jp>
To: backports@rt.debian.org
Subject: Debian RT : Add my id in backports ACL.
Date: Wed, 20 Nov 2013 16:32:40 +0900
User-Agent: Wanderlust/2.15.9 (Almost Unreal) SEMI/1.14.6 (Maruoka)
 FLIM/1.14.9 (Gojō) APEL/10.8 Emacs/23.4 (i486-pc-linux-gnu)
 MULE/6.0 (HANACHIRUSATO)

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

I want to upload some packages to backports, add my ID please.
My OpenPGP ID is 9C0C1404.

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.12 (GNU/Linux)
Comment: Processed by Mailcrypt 3.5.9 <http://mailcrypt.sourceforge.net/>

iQIVAwUBUoxllrBmYuycDBQEAQiICw//TomD1dHchZulTDyFdFMIeG+0Ml8HzsyP
S0oyeeQ2AHQTOFpyaje83tLTYj1q60OLI1nWoVPLsUXFNgIJkOIZR1fLYOTXDiW7
9JQpB1QEat8INEKyjKEq++4tO7AqaeKQu65CbdDALiTm8Z9GlhgRYLpYftE5JwWH
OpXnejM7FmDzK5LLSKCDm3jhezAvPh+ONzpLjpTTpvgffdRkWWHKAv057L7Uzpru
utnpM4WEzVRqB7HyJa053C+Y2S+8dl4m0eR868k3cLqrVvFKWtQ6oNyTFDJ8TXzh
AkAaJAM7uDuhz2Mm1uVglc7Py9I/rrbpcLCZ/MmYVYcfrUBhAch9F5rssrjJZXNX
TKNgoZxbF/ahrZXTLEgnr7fAAkq/lr16rNuvQuKcWMwIlBs7M6NGtIwFmsf+Ox3T
UvRQJtMP2KstZR0tZfyjR37RPvYp2Q9O/fRpE5a7yuPE49380nG+gyg3HG64+yIh
ezfsfywwvsjkw2XvWijaS1Fo26MY5ixeV64mU++ryo+/lm83KEydod7Hsp6jTrHG
vXru7g8Dwn4soQ9H5Q++xhINGnH/XGA2dNbhF/3C2DRDrB/BMX+Cb5CjF6bRQnDD
xpX7AN3/CSp2gbiDEZywvLvfObHvfY/IqAHnaNPN/WZXp77xw8+OeexfacmoSALU
/qPuT455XPE=
=zBAV
-----END PGP SIGNATURE-----

backportsに関する情報を得るために、debian-backports MLも購読しておきましょう。

さて、チケットを作って待つこと一週間、何も動きがありませんでした。催促の意味を込めて、次のようなメールをMLに投げました。

From: NOKUBI Takatsugu &lt;knok@daionet.gr.jp&gt;
To: debian-backports@lists.debian.org
Subject: Want to upload mikutter for wheezy
Date: Thu, 28 Nov 2013 16:11:50 +0900

I consider to upload mikutter for wheezy-backports.

I already open a ticket(#4782) to add my key in the ACL, but I don't
have any response about a week.
I tried to find the status of RT, but I can't login rt.debian.org.

Can I get a good way to resolve this situation?

するとすぐACLに追加され、チケットはresolvされました。これでdebian/changelogのdistributionの項目に”wheezy-backports”などとしたパッケージを通常のincomingサーバーにアップロードすれば、backportsに登録されるようになります。

Debian開発者ではない人がアップロードをしたい場合は、sponsorを探す必要があります。debian-backports MLでsponsorを募集してみましょう。アップロード先にはhttp://mentors.debian.net/等を利用しましょう。

パッケージの作成

いよいよパッケージのbackportをやります。まず対象となるソフトのソースを入手しましょう。

$ dget http://ftp.jp.debian.org:/debian/pool/main/m/mikutter/mikutter_0.2.2.1430+dfsg-1.dsc

dgetはdpkg-sourceまで実行してソースコードを展開してくれるので、次はdebian/changelogを更新します。dchには親切にも–bpoというbackportsのポリシーに合わせてバージョン番号を上げる機能がついているので、これを使います。

$ cd /mikutter-0.2.2.1430+dfsg
$ dch --bpo

これで自動生成されるエントリーは以下のようになります。wheezyのdchはデフォルトでsqueeze向けのbpo情報を埋め込みます。

mikutter (0.2.2.1430+dfsg-1~bpo60+1) squeeze-backports; urgency=low

  * Rebuild for wheezy-backports.
  *

 -- NOKUBI Takatsugu <knok@daionet.gr.jp>  Thu, 05 Dec 2013 14:57:25 +0900

今回はwheezy向けにパッケージを作るので、バージョンとディストリビューションを修正します。

mikutter (0.2.2.1430+dfsg-1~bpo72+1) wheezy-backports; urgency=low

  * Rebuild for squeeze-backports.

 -- NOKUBI Takatsugu <knok@daionet.gr.jp>  Thu, 05 Dec 2013 14:57:25 +0900

bpo60+1をbpo+72と、現在のwheezyのバージョン番号に合わせました。ディストリビューションもsqueeze-backportsからwheezy-backportsに変えました。

さて、実際にビルドしてみましょう。ビルドには、きれいな(純粋にwheezyのパッケージだけで構成された)環境の利用が推奨されています。pbuilder等の利用を検討しましょう。pbuilderの使い方については、今回ここでは行いません。

$ debuild -F
$ cd ..
$ sudo pbuilder --build mikutter_0.2.2.1430+dfsg-1~bpo72+1.dsc

上記の例では、まず実環境でビルドしてdscファイルを生成し、それをもとにpbuilderでビルドを行っています。これでビルドに成功すれば、晴れて完成です。

足りないパッケージも作る

完成に見えたこのbackports用パッケージですが、実はこれだけではwheezyで動きません。mikutterのビルド自体はwheezyでできるのですが、インストールしてみといくつかのパッケージがwheezyに存在しないため、エラーになります。

$ sudo dpkg -i mikutter_0.2.2.1430+dfsg-1\~bpo72+1_all.deb
以前に未選択のパッケージ mikutter を選択しています。
(データベースを読み込んでいます ... 現在 403670 個のファイルとディレクトリがインストールされています。)
(mikutter_0.2.2.1430+dfsg-1~bpo72+1_all.deb から) mikutter を展開しています...
dpkg: 依存関係の問題により mikutter の設定ができません:
 mikutter は以下に依存 (depends) します: ruby-oauth ...しかし:
  パッケージ ruby-oauth はまだインストールされていません。
 mikutter は以下に依存 (depends) します: ruby-addressable ...しかし:
  パッケージ ruby-addressable はまだインストールされていません。
 mikutter は以下に依存 (depends) します: ruby-memoize ...しかし:
  パッケージ ruby-memoize はまだインストールされていません。
 mikutter は以下に依存 (depends) します: ruby-hmac ...しかし:
  パッケージ ruby-hmac はまだインストールされていません。
 mikutter は以下に依存 (depends) します: ruby-typed-array ...しかし:
  パッケージ ruby-typed-array はまだインストールされていません。
$ sudo apt-get -f install
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
依存関係を解決しています ... 完了
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
  ruby-addressable ruby-oauth
これを削除するには 'apt-get autoremove' を利用してください。
以下の特別パッケージがインストールされます:
  ruby-addressable ruby-oauth
以下のパッケージは「削除」されます:
  mikutter
以下のパッケージが新たにインストールされます:
  ruby-addressable ruby-oauth
アップグレード: 0 個、新規インストール: 2 個、削除: 1 個、保留: 0 個。
1 個のパッケージが完全にインストールまたは削除されていません。
97.7 kB のアーカイブを取得する必要があります。
この操作後に 6,614 kB のディスク容量が解放されます。
続行しますか [Y/n]? 

ruby-addressableとruby-oauthはwheezyにもあるようですが。残りは存在しないようです。足りないパッケージを同様にしてbackport化しましょう。

$ dget http://ftp.jp.debian.org/debian/pool/main/r/ruby-memoize/ruby-memoize_1.3.1-2.dsc
$ dget http://ftp.jp.debian.org/debian/pool/main/r/ruby-hmac/ruby-hmac_0.4.0-4.dsc
$ dget http://ftp.jp.debian.org/debian/pool/main/r/ruby-typed-array_0.1.2-1.dsc

debuildを実行するときには、-Fオプションを忘れないようにしましょう。初回のアップロード時にはupstreamのソースコードも必要だからです。

一通りのパッケージをインストールし、動作することが確認できたら、いよいよアップロードです。

$ dput mikutter_0.2.2.1430+dfsg-1\~bpo72+1_i386.changes
$ dput ruby-hmac_0.4.0-4\~bpo72+1_i386.changes
$ dput ruby-memoize_1.3.1-2\~bpo72+1_i386.changes
$ dput ruby-typed-array_0.1.2-1\~bpo72+1_i386.changes

stableが大好きな皆さんはbackportsを活用してゆきましょう。