これはディストリビューション/パッケージマネージャー 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 <knok@daionet.gr.jp> 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を活用してゆきましょう。