月別アーカイブ: 2013年12月

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

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

git-builpackageを使う(Debian/Ubuntu JP Advent Calendar 2013)

これはDebian/Ubuntu JP Advent Calendar 2013 11日目の記事です。

Debianではパッケージを管理する際に、オリジナルのソースコードの上にdebianというディレクトリを作成し、その下にDebian固有のパッケージングに関する情報を記録してゆくようになっています。

かつてはこのファイルの管理はそう大変なことではありませんでした。しかし現在のDebianはoldstable, stable, testing, unstableという4つ(場合によってはexperimentalを含めた5つ)のdistributionを同時に管理しなければなりません。こうなると、やはりバージョンコントロールシステムが使いたくなるところです。

そのためのパッケージのひとつがgit-buildpackageです。名前の通りSCMにgitを使います。この記事ではその解説を行います。他にもsvnやcvs, bzrに対応したものがありますが、それぞれ設計思想から異なるのでここでは触れません。個人的にはsvn-buildpackageも使ってはいます。

ソースコードのインポート

一番最初に行うのは、すでにあるdeb用ソースコード一式のインポートです。これにはgit-import-dscコマンド(あるいはgit-import-dscs)を使います。

$ dget http://ftp.jp.debian.org/debian/pool/main/h/hello/hello_2.6-1.dsc
$ t$ git-import-dsc hello_2.6-1.dsc
gbp:info: No git repository found, creating one.
Initialized empty Git repository in /home/knok/git/test/hello/.git/
gbp:info: Tag upstream/2.6 not found, importing Upstream tarball
gbp:info: Version '2.6-1' imported under 'hello'

これでパッケージ名(この場合hallo)のディレクトリが作成され、そこがgitリポジトリになります

$ cd hello
$ git tag
debian/2.6-1
upstream/2.6

このようにインポートされたdebianバージョンとupstreamのタグが作成されます。内容を更新し、新しいバージョンをリリースする際には同様に新しいdebianバージョンのtagを生成することになります。

変更

適当に変更をしてみます。このあたりは普通のgitリポジトリを扱うのと変わりはありません。

$ dch --nmu

テストビルド

修正をコミットする前にテストビルドをするには、git-buildpackage build –git-ignore-newを実行します。–git-ignore-newオプション以外はdebuildと同じです。

$ git-buildpackage --git-ignore-new -uc -us
(略)
$ ls ..
hello                        hello_2.6-1.1_amd64.build    hello_2.6-1.dsc
hello-2.6                    hello_2.6-1.1_amd64.changes  hello_2.6.orig.tar.gz
hello_2.6-1.1.debian.tar.gz  hello_2.6-1.1_amd64.deb
hello_2.6-1.1.dsc            hello_2.6-1.debian.tar.gz

問題がなければ、親ディレクトリにパッケージと各種ファイルが生成されます。これでよいと思ったら普通にgit commitしましょう。

リリース向けビルド

リリース用のビルドは–git-tagオプションを付けることでできます

$ git-buildpackage --git-tag -uc -us
(略)
$ git tag
debian/2.6-1
debian/2.6-1.1
upstream/2.6

新しく作ったdebian versionのタグができていることが確認できます。

参考

PackagingWithGit (Debian Wiki)

HTMLタグを含むpoファイルからプレーンテキストにまで加工して形態素解析にかけてみてtypo等を見つける (Doc-ja Advent Calendar 2013)

これはDoc-ja Advent Calendar 2013 5日目の記事です。

www.gnu.orgでは、現在GNU website Japanese Translation Teamにてチーム体制でwebの翻訳を進めています。実態はほとんどgniibeさん一人で、私は今のところ翻訳チェックぐらいしかできていませんが…

gnu.orgのwebはメッセージの中にHTMLタグも含んだ状態で、poファイルによって管理されています。レビューをする上では、なかなか扱いにくい形式です。

そこで、私は一度poから日本語訳文のテキストを生成し、もう少し見やすくした状態でレビューをしています。この記事では、その方法を紹介します

$ msgfmt file.po
$ msgunfmt --no-wrap message.mo | grep msgstr |
sed -e 's/^msgstr //' -e 's/$//' | 
sed -e 's/^"/<p>/' -e 's/"$//' |
w3m -T text/html | lv

さらに、結果を形態素解析にかければ、若干typo等が見つけやすくなります

$ mecab file.txt
:
(中略)
JavaScript      名詞,固有名詞,組織,*,*,*,*
の      助詞,連体化,*,*,*,*,の,ノ,ノ
ライセンス・ウェブ・ラベル      名詞,一般,*,*,*,*,*
の      助詞,連体化,*,*,*,*,の,ノ,ノ
ため    名詞,非自立,副詞可能,*,*,*,ため,タメ,タメ
の      助詞,連体化,*,*,*,*,の,ノ,ノ
ページ  名詞,一般,*,*,*,*,ページ,ページ,ページ
を      助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
あなた  名詞,代名詞,一般,*,*,*,あなた,アナタ,アナタ
の      助詞,連体化,*,*,*,*,の,ノ,ノ
サイト  名詞,一般,*,*,*,*,サイト,サイト,サイト
に      助詞,格助詞,一般,*,*,*,に,ニ,ニ
追加    名詞,サ変接続,*,*,*,*,追加,ツイカ,ツイカ
しま    名詞,一般,*,*,*,*,しま,シマ,シマ
EOS
す      名詞,一般,*,*,*,*,す,ス,ス
。      記号,句点,*,*,*,*,。,。,。
:
(以下略)

今時の形態素解析器はできるだけ細かく分解する方向の実装・辞書が多いので、KAKASIなどを使った方がよいかもしれません。