トップ 最新 追記

毎日が反省会

rss
2007|04|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|10|11|12|
2012|01|02|03|06|07|08|09|10|11|12|
2013|02|03|04|

2011-12-01

_ [Debian] Debian JP Advent Calendar 2011を作ったった!

なんかたくさんやっているのでDebian JP Advent Calendar 2011を作ったった。

みんな書きましょう。

_ [Debian][Debian JP Advent Calendar 2011] apt-rdepends を使っていいのは小学生まで

あるパッケージに依存しているパッケージを出力するにはapt-rdependsを使えば楽チンです。 例えば、libpng12-0 に依存しているパッケージを出力するには以下のように実行します。
$ apt-rdepends -r libpng12-0
libpng12-0
  Reverse Depends: 3depict (>= 0.0.7-1)
  Reverse Depends: aaphoto (>= 0.41-1)
  Reverse Depends: abiword (>= 2.9.1-0.2)
.....
簡単に使えますが、応用できないのが apt-rdepends の欠点だと思います。 例えば、そのバイナリパッケージのソースパッケージは何だ?と言った場合にチェックできないのです。 このようなときにはdctrl-toolsに含まれているgrep-dctrlを使うとより細かい情報を取得できます。
$ grep-dctrl -F Depends libpng12-0 -s Source -s Package /var/lib/apt/lists/*_Packages | sort | uniq 
Package: 3depict
Package: aaphoto
Package: abiword
.....
apt-rdepends を使っている人はgrep-dctrlに切りかえましょう。 apt-rdependsを使っていいのは小学生までです。

2011-12-02

_ [Debian][Debian JP Advent Calendar 2011] apt-mark 使ったパッケージのhold と unhold

パッケージを特定のバージョンからアップデートしたくない時にパッケージのholdを行います。 例えば、chromium-browser を hold したい場合は以下のようにします。
$ sudo sh -c "echo chromium-browser hold | dpkg --set-selections"
$ dpkg -l | grep chromium-browser
hi  chromium-browser                      14.0.835.202~r103287-1            Chromium browser - transitional dummy package
そして、hold を解除したいときには以下のようにします。
$ sudo sh -c "echo chromium-browser install | dpkg --set-selections"
$ dpkg -l | grep chromium-browser
ii  chromium-browser                      14.0.835.202~r103287-1            Chromium browser - transitional dummy package
以前までは dpkg のみでこの操作ができたのですが、最近はapt-markコマンドで操作できるようになりました。
パッケージのholdは以下のように、
$ sudo apt-mark hold chromium-browser
chromium-browser set on hold.
$ dpkg -l | grep chromium-browser
hi  chromium-browser                      14.0.835.202~r103287-1            Chromium browser - transitional dummy package
そして、hold (unhold)を解除したいときには以下のようにします。
$ sudo apt-mark unhold chromium-browser
Canceled hold on chromium-browser.
$ dpkg -l | grep chromium-browser
ii  chromium-browser                      14.0.835.202~r103287-1            Chromium browser - transitional dummy package
操作するときには作業マシンにあるパッケージ管理情報を操作するのでroot権限が必要なことに注意です。 そして上記では hold の情報をかくにんするために、dpkg コマンドを使っていますが、apt-mark showhold を使うと、hold しているパッケージの一覧を出力します。
$ apt-mark showhold
chromium
chromium-browser
chromium-browser-inspector
chromium-inspector
apt-mark を使うと今までコマンドが短く、そして簡単にパッケージのhold、unhold ができるようになります。ぜひ使ってみてください。

2011-12-04

_ [Debian][Debian JP Advent Calendar 2011] debfoster で作業環境の初期状態を管理する

例えば、chroot を使っていてその中に最低限のパッケージをインストールしていたとします。この最低限というのは、base システムだけだったり、baseシステムからパッケージを削ったり、追加したり使う人によって様々です。そしてchroot 内でいろいろパッケージをビルドしたり、パッケージのテストをします。 パッケージのテストなどをやっている場合、さらにパッケージが追加されてしまうこともあります。この時に初期状態に戻す場合はどのようにされていますか。 よく使う方法は初期状態のパッケージリストを保持しておいて、後で差分をチェックしてパッケージを削除するなどです。 しかし、debfoster を使えば簡単に初期状態に戻してくれます。また、インタラクティブに特定のパッケージを残すこともできます。 使い方を見てみましょう。 初期の状態で debfoster パッケージをインストールし、debfosterを実行します。 実行すると、このパッケージは保持するか?と聞かれますので全て Yes で答えます。
$ sudo  apt-get install debfoster
$ sudo debfoster
Keep lv? [Ynpsiuqx?], [H]elp:
その後、いろいろ作業します。パッケージが追加されるわけです。 そして初期状態に戻したい場合には、再度 debfoster を実行します。 そのファイルを初期のパッケージ一覧として保持するか聞かれますので、しない場合には n (No) を選択します。全てのパッケージの質問が終わると保持しないパッケージは削除されます。
$ sudo debfoster
Keep gcc-4.6? [Ynpsiuqx?], [H]elp:
上記の場合、パッケージ一個づつについて聞かれるのでパッケージが100個あると100回聞かれます。完全に初期状態に戻したい場合には -f オプションをつけて実行します。
$ sudo debfoster -f 

このように debfoster を使うと簡単に作業環境を初期状態にできます。 いままで独自に管理していた人はつかってみてはどうでしょうか。

_ [Git][] Gitによるバージョン管理という本を執筆しました

今更感(10月末に発売しています)がありますが、Gitによるバージョン管理という本を執筆しました。
当初は FLOSS開発者 である 上川さん、前田さん、私で頑張っていましたが、途中からRuby界隈で活躍されている小川さんに入っていただき、FLOSS寄りの話だったところにWeb系の話も入り当初より内容が柔らかくなりました。
内容としましては、書籍の紹介にもありますように、Gitを使っていて実際によく出会う状況やワークフローを例に、基本的な使い方からその先まで、場面に応じた使い方を解説しています。Gitは使っている人の環境、知識によって使い方が大きく変わるので、どのように使うのがいいのかわからない人が多いと思います。この本を読めばその辺の疑問がある程度解消されると思います。
もし書店で見かけたときは手に取っていただけると幸いです。 何かご質問とかありましたら、当本のサポートページがありますので、そちらにお願いします。

2011-12-05


2011-12-06

_ [Debian][Debian/Ubuntu JP Advent Calendar 2011] dget でソースパッケージが展開できない問題を回避する

ある場所、例えば mentors.debian.net に置いてあるソースパッケージをdget コマンドで取ってきたらソースパッケージが展開できないということがあります。 大抵は、debian-keyring パッケージがインストールされていない場合が多いのですが、インストールしても解消されない場合があります。
$ dget http://mentors.debian.net/debian/pool/main/t/tomahawk/tomahawk_0.4.3-1.dsc
......
tomahawk_0.4.3-1.dsc:
dscverify: tomahawk_0.4.3-1.dsc failed signature check:
gpg: 2011年12月04日 02時10分15秒 JSTにDSA鍵ID DD783BD9で施された署名
gpg: 署名を検査できません: 公開鍵が見つかりません
Validation FAILED!!
キーリングに登録されていないパッケージメンテナによって署名されている場合や、野良パッケージの場合です。 このような場合、自分で鍵束を作って ~/.devscripts の DSCVERIFY_KEYRINGS に指定します。
DSCVERIFY_KEYRINGS="~/.gnupg/sponsor.gpg"
Debian Developer がパッケージをスポンサーアップロードするとき、この問題に直面することがあるのでDebian Developerになる方は覚えておきましょう。もちろん、他の場合にも有効です。あと鍵はちゃんと確認するようにしましょう。 ちなみに鍵束の作り方は以下のとおりです。
$ gpg --keyserver $KEYSERVER --no-default-keyring --keyring $KEYRING --recv-key $key_id

2011-12-07

_ [Debian][Debian/Ubuntu JP Advent Calendar 2011] dlocate パッケージを使ってファイルやパスがどのパッケージに含まれているものなのか確認する

ファイルやパスがどのパッケージに含まれているものなのか確認する場合、dpkg -S を使うのが一般的だと思います。
しかしこの dpkg -S, 遅いんですね。遅いて言ってもちょっと待たされる程度ですが。私は dpkg -S の代わりに dlocate コマンドを使っています。 dlocate は dlocate パッケージで提供されています。
とりあえず time で計測した結果を書いておきます。けっこう違うものですね。

dpkg -S の場合:
$ time dpkg -S dlocate
dlocate: /usr/share/doc/dlocate/README.Debian
dlocate: /usr/share/man/man1/dlocate.1.gz
dlocate: /etc/bash_completion.d/dlocate-completion
dlocate: /etc/cron.daily/dlocate
dlocate: /etc/default/dlocate
dlocate: /usr/share/doc/dlocate/changelog.gz
dlocate: /usr/share/doc/dlocate
dlocate: /usr/sbin/update-dlocatedb
dlocate: /usr/bin/dlocate
dlocate: /usr/share/man/man8/update-dlocatedb.8.gz
dlocate: /usr/share/doc/dlocate/copyright
dlocate: /var/lib/dlocate
 
real	0m0.610s
user	0m0.508s
sys	0m0.096s

dlocate の場合:
$ dlocate -S dlocate
dlocate: /usr/bin/dlocate
dlocate: /usr/sbin/update-dlocatedb
dlocate: /usr/share/doc/dlocate
dlocate: /usr/share/doc/dlocate/README.Debian
dlocate: /usr/share/doc/dlocate/copyright
dlocate: /usr/share/doc/dlocate/changelog.gz
dlocate: /usr/share/man/man1/dlocate.1.gz
dlocate: /usr/share/man/man8/update-dlocatedb.8.gz
dlocate: /var/lib/dlocate
dlocate: /etc/bash_completion.d/dlocate-completion
dlocate: /etc/default/dlocate
dlocate: /etc/cron.daily/dlocate
 
real	0m0.041s
user	0m0.024s
sys	0m0.008s

2011-12-11

_ [Debian/Ubuntu JP Advent Calendar 2011][Debian] cowbuilder/pbuilder でbaseイメージを分けて使う

パッケージメンテナにとって必須ツールの一つであるcowbuilder/pbuilderですが、 baseイメージを分けて使うこともできます。例えば、experiemntal 用のイメージ、oldstable用のイメージなどです。 baseイメージを指定して実行するには--basepath オプションを使います。 まず、cowbuilder でexperimental向けのイメージを/var/cache/pbuilder/base-experimental.cowとして作成するには、 以下のように実行します。
# cowbuilder --create --distribution experimental --debootstrap debootstrap --basepath /var/cache/pbuilder/base-experimental.cow
作成された /var/cache/pbuilder/base-exp.cow を使って pbuilder を実行する場合には、~/.pbuilderrc に「PDEBUILD_PBUILDER=cowbuilder」を追記した後に、以下のように実行します。
$ pbuilder -- --basepath /var/cache/pbuilder/base-experimental.cow
このようにディストリビューションやデバッグターゲット毎にbaseイメージを構築することができるので、apt-line を変更する必要もなくなりライブラリ等が混ざる心配もなくなります。

2011-12-12

_ [子供] 電車は転職できない

子供がなんか歌を口ずさんでいるので何歌っているのかなと思ったら、 「電車は転職できない」だった。

2011-12-13

_ [Debian/Ubuntu JP Advent Calendar 2011][Debian] パッケージで使っているパッチシステムを確認する

パッケージで使っているパッチシステムを確認する場合どうしていますか?debian/rules を見たり debian/control の依存関係を見たり、方法はいくつかあります。しかしこれらの方法はエディタを立ち上げる必要があり、目視やgrepで qulit などの単語をチェックする必要があります。非常に面倒です。しかし、what-patch コマンドを使うと使っているパッチシステムをチェックして表示してくれます。
quilt の場合:
$ cd uim-1.7.1
$ what-patch
quilt
dpatch の場合:
$ cd fbterm-1.7
$ what-patch
dpatch
今までファイルを見て確認してきた人は what-patch を使うようにしてみてはいかがでしょうか。このコマンドは devscripts パッケージに含まれています。
ちなみに今週末行われる東京エリアDebian勉強会では パッチシステムの quilt を使ったDebianパッケージメンテナンス方法についての話があります。興味のある方はどうぞ。

2011-12-14

_ [Debian/Ubuntu JP Advent Calendar 2011][debian] mk-build-deps を使ってパッケージのビルドに必要パッケージをインストール、アンインストールする。

パッケージをビルドするときは pbuilder を使う事が多いですが、パッケージのデバッグを行うときには自分の普段使っている環境にビルド依存パッケージをインストールすると思います。この時多くのパッケージがインストールされますが、ビルド完了後には必要のないものまでインストールされた状態になります。 既に必要ないパッケージは削除したいですよね。インストールログを見て一つづつパッケージを削除してもいいのですが、一度に行いたいものです。 このような時に devscripts パッケージで提供されている mk-build-deps コマンドを使うと、容易にパッケージのビルドに必要なパッケージをインストール、アンインストールできます。

mk-build-deps コマンドはパッケージのビルドに必要なパッケージに依存したパッケージを作ります。例えば、gobject-introspection-1.31.0 パッケージをビルドする際に必要なパッケージに依存したパッケージを作成するには、debian ディレクトリがあるディレクトリに移動し、 mk-build-deps コマンドを実行します。実行すると gobject-introspection-build-deps_1.0_all.deb というパッケージがカレントディレクトリに作成されます。
gobject-introspection-1.31.0$ mk-build-deps
Use of uninitialized value $fullname in concatenation (.) or string at /usr/bin/equivs-build line 210.
dh_testdir
dh_testroot
dh_prep
dh_testdir
dh_testroot
dh_install
dh_installdocs
dh_installchangelogs
dh_compress
dh_fixperms
dh_installdeb
dh_gencontrol
dh_md5sums
dh_builddeb
dpkg-deb: building package `gobject-introspection-build-deps' in `../gobject-introspection-build-deps_
1.0_all.deb'.
   
The package has been created.
Attention, the package has been created in the current directory,
not in ".." as indicated by the message above!
gobject-introspection-1.31.0$ ls
AUTHORS                   NEWS          giscanner
CONTRIBUTORS              README        gobject-introspection-1.0.pc
COPYING                   TODO          gobject-introspection-1.0.pc.in
COPYING.GPL               acinclude.m4  gobject-introspection-build-deps_1.0_all.deb
COPYING.LGPL              aclocal.m4    gobject-introspection-no-export-1.0.pc
.......
作成された gobject-introspection-build-deps_1.0_all.deb をインストールします。インストールすると必要なパッケージがないことがわかります。APT でインストールしていない(できない)ので、依存関係は解消されません(別途リポジトリを作ればAPTでもインストールできます)。依存が解消されてないパッケージをインストールするために apt-get install -f を実行します。
gobject-introspection-1.31.0$ sudo dpkg -i gobject-introspection-build-deps_1.0_all.deb
Selecting previously unselected package gobject-introspection-build-deps.
(Reading database ... 189103 files and directories currently installed.)
Unpacking gobject-introspection-build-deps (from gobject-introspection-build-deps_1.0_all.deb) ...
dpkg: dependency problems prevent configuration of gobject-introspection-build-deps:
 gobject-introspection-build-deps depends on libglib2.0-dev (>= 2.29.7); however:
  Version of libglib2.0-dev on system is 2.28.8-1.
dpkg: error processing gobject-introspection-build-deps (--install):
 dependency problems - leaving unconfigured
Errors were encountered while processing:
 gobject-introspection-build-deps
gobject-introspection-1.31.0$ sudo apt-get install -f 
......
インストールできたら、あとは debuild を使ってパッケージをビルドします。 ビルドする前に gobject-introspection-build-deps_1.0_all.deb を消しておくことを忘れないようにしましょう。
gobject-introspection-1.31.0$ rm gobject-introspection-build-deps_1.0_all.deb
gobject-introspection-1.31.0$ debuild
パッケージがビルドできたら、gobject-introspection-build-deps_1.0_all.deb をアンストールします。アンインストールすると、gobject-introspection-1.31.0 のビルドに必要だったパッケージも一緒にアンインストールされます。
gobject-introspection-1.31.0$ sudo apt-get purge gobject-introspection-build-deps

mk-build-deps を使ってパッケージのビルドに必要パッケージをインストール、アンインストールする方法をを紹介しました。mk-build-deps には アーキテクチャ別や、build-indeps 用の指定などもできるようになっています。ビルド用のパッケージ管理に困っていた方は使ってみてはいかがでしょうか。

2011-12-16

_ [Debian/Ubuntu JP Advent Calendar 2011][Debian] DEP3 形式のパッチで debian/changelog を更新する

最近は Debian で提供されているパッチファイルにはDEP3形式のヘッダを付加しましょうという話があります。このヘッダには誰が作成したパッチを誰がどこから持ってきたのか、作成したのか、既にアップストリームにマージされているのか、などの情報があります。変更内容などもこのヘッダに書かれています。 パッチをDebianパッケージに取り込んだ場合、そのことをdebian/changelogに書くのですが、コピペしてchangelog形式に直すのはよくありません。このときには dep3changelog コマンドを使います。 dep3changelog に 適用したパッチを指定すると、debian/changelog に追記してくれます。
例えば、以下のような DEP3 形式のパッチを作成したとします。
$ cat debian/patches/patch-test.patch
Description: Fix widget frobnication speeds
 Frobnicating widgets too quickly tended to cause explosions.
Forwarded: http://lists.example.com/2010/03/1234.html
Author: John Doe 
Applied-Upstream: 1.2, http://bzr.example.com/frobnicator/trunk/revision/123
Last-Update: 2010-03-29
.......
このパッチを dep3changelog に指定して実行します。 実行した後にdebian/changelog を見ると以下のような changelog が追記されます。
$ dep3changelog debian/patches/patch-test.patch
$ cat debian/changelog
hoge (0.0.1-2) unstable; urgency=low
  
  * ./debian/patches/19_uim_can_work_with_libgcroot_0.2.2.patch: Fix
    widget frobnication speeds.  Thanks to John Doe .
 
 -- Nobuhiro Iwamatsu   Sat, 17 Dec 2011 16:29:42 +0900
dep3changelog コマンドは dch コマンドのオプションを使えます。この場合 -- の後にオプション指定する必要があります。 例えば、Debian バージョンをインクリメントしたい場合には以下のように実行します。
$ dep3changelog debian/patches/patch-test.patch -- -i

今回はDEP3フォーマットのpatchファイルからchangelogを編集する方法を紹介しました。DEP3フォーマットを使っていてコピペしていた人はdep3changelog を使いましょう。
本日のツッコミ(全2件) [ツッコミを入れる]

_ yy_y_ja_jp [s/deb3changelog/dep3changelog/g]

_ iwamatsu [直しました。どもです。]


2011-12-17

_ [Debian/Ubuntu JP Advent Calendar 2011][Debian] Debian Package の changelog を取得する

パッケージのインストール前にパッケージのChangelogやNEWSを参照したい場合があります。apt-listchanges を使えば可能ですが、APT でインストールを実行した後にしか参照できません。(もちろんChnangelogを見てインストールをキャンセルできます。)
インストールの実行もせずにパッケージのChangelogを参照したい場合には今まではWeb(http://packages.qa.debian.org) を参照する必要がありましたが、最近のAPTには 「apt-get changelog」 コマンドがあり、これで最新のChangelog のみを取得し、参照することができます。 「apt-get changelog」 コマンドに参照したいパッケージ名を指定し実行します。 例えば、dpkg の場合は以下のように実行します。
取得が完了すると、実行環境で指定されているページャが起動し、Changelogの内容を表示します。
$ apt-get changelog dpkg
取得:1 Changelog for dpkg (http://packages.debian.org/changelogs/pool/main/d/dpkg/dpkg_1.16.1.2/changelog) [398 kB]
398 kB を 2秒 で取得しました (138 kB/s)
<- ページャが起動
dpkg (1.16.1.2) unstable; urgency=medium
 
  [ Raphaël Hertzog ]
  * Fix another typo to correctly set DEB_*_ARCH_BITS in architecture.mk.
  * Set urgency to medium as changes are minor, and it should migrate
    quickly in case 1.16.2 comes soon.
 
  [ Jonathan Nieder ]
  * Update dpkg-buildflags(1) to note that the processor option
    -D_FORTIFY_SOURCE=2 is set in CPPFLAGS now instead of CFLAGS and
    CXXFLAGS. Closes: #646073
 
.....
「apt-get changelog 」コマンドは今まで http://packages.qa.debian.org を参照したり、apt-listchanges を使っていた人にとって少しだけ手間を無くすためのコマンドです。手軽にパッケージのChangelogを参照するツールとして使ってみてはいかがでしょうか。

2011-12-18

_ [Debian/Ubuntu JP Advent Calendar 2011][Debian] debsecan で Debian のセキュリティ情報を管理する

Debian のセキュリティ情報を管理はどうしていますか。cron で apt 回しているから大丈夫です(キリッ、という人いるでしょうし、更新がちゃんとされているかサーバ毎に更新管理をしている人もいるかもしれません。
debsecan パッケージを使うと、発行されているCVEを取得・管理できます。今回は debsecanパッケージの簡単な使い方を紹介します。
インストールはいつものようにAPTで行います。
$ sudo apt-get install debsecan
「debsecan」 を実行すると、発行されているCVEを取得し、出力します。
$ debsecan | tail 
CVE-2011-1529 libkrb5-3 (remotely exploitable, low urgency)
CVE-2011-1530 libkrb5-3 (remotely exploitable, medium urgency)
CVE-2011-4151 libkrb5-3 (remotely exploitable, low urgency)
CVE-2011-2686 ruby1.8-dev (remotely exploitable, low urgency)
CVE-2011-2705 ruby1.8-dev (remotely exploitable, low urgency)
CVE-2011-3009 ruby1.8-dev (remotely exploitable, medium urgency)
CVE-2011-3624 ruby1.8-dev (low urgency)
CVE-2011-2748 dhcp3-server (remotely exploitable, high urgency)
CVE-2011-2749 dhcp3-server (remotely exploitable, high urgency)
CVE-2011-4539 dhcp3-server (remotely exploitable, low urgency)
既に修正されたCVEがあり、表示させたくない場合場合には 「--add-whitelist」 オプションで対象のCVE番号を指定し、ホワイトリストに登録します。
$ sudo debsecan --add-whitelist CVE-2011-1530
$ debsecan | tail
CVE-2011-1528 libkrb5-3 (remotely exploitable, low urgency)
CVE-2011-1529 libkrb5-3 (remotely exploitable, low urgency)
CVE-2011-4151 libkrb5-3 (remotely exploitable, low urgency)
CVE-2011-2686 ruby1.8-dev (remotely exploitable, low urgency)
CVE-2011-2705 ruby1.8-dev (remotely exploitable, low urgency)
CVE-2011-3009 ruby1.8-dev (remotely exploitable, medium urgency)
CVE-2011-3624 ruby1.8-dev (low urgency)
CVE-2011-2748 dhcp3-server (remotely exploitable, high urgency)
CVE-2011-2749 dhcp3-server (remotely exploitable, high urgency)
CVE-2011-4539 dhcp3-server (remotely exploitable, low urgency)
ホワイトリストに登録されているCVEは「--show-whitelist」オプションで確認できます。
$ debsecan --show-whitelist
CVE-2011-1530 (all packages)
「--suite」オプションでチェックしたいコードネームを指定し、CVE修正状況を確認できます。lenny の場合は以下のように実行します。fixedとなっているものは既に修正されたものです。以下の出力結果から libkrb5-3 以外はまだ修正されていないことが分かります。
$ debsecan --suite=lenny | tail
CVE-2011-1528 libkrb5-3 (fixed, remotely exploitable, low urgency, obsolete)
CVE-2011-1529 libkrb5-3 (fixed, remotely exploitable, low urgency, obsolete)
CVE-2011-4151 libkrb5-3 (fixed, remotely exploitable, low urgency, obsolete)
CVE-2011-2686 ruby1.8-dev (remotely exploitable, low urgency)
CVE-2011-2705 ruby1.8-dev (remotely exploitable, low urgency)
CVE-2011-3009 ruby1.8-dev (remotely exploitable, medium urgency)
CVE-2011-3624 ruby1.8-dev (low urgency)
CVE-2011-2748 dhcp3-server (remotely exploitable, high urgency, obsolete)
CVE-2011-2749 dhcp3-server (remotely exploitable, high urgency, obsolete)
CVE-2011-4539 dhcp3-server (remotely exploitable, low urgency, obsolete)
今回は Debian のセキュリティ管理ツールである debsecan の簡単な使い方を紹介しました。サーバ管理をされている方や自身でCVEを管理している方は使ってみてはいかがでしょうか。

2011-12-19

_ [Debian/Ubuntu JP Advent Calendar 2011][Debian] どのパッケージがディスクスペースを取っているか確認する

たまにどのパッケージがディスクスペースを取っているか確認したい時があります。たまにですが。
この時にはパッケージデータベースをパースしてもいいのですが、「debian-goodies」パッケージで提供されている「dpigs」 を使うと簡単に確認できます。 私の環境では以下の結果になりました。
$ dpigs
289860 libopenvrml-dev
255818 gcc-mingw-w64
255300 texlive-latex-extra-doc
246049 ghc
239780 openjdk-6-doc
222988 texlive-fonts-extra
163613 mingw-w64-dev
123800 libreoffice-core
110886 locales-all
108020 qt4-doc
一番ディスクスペースを取っているのはlibopenvrml-devでした。はい、私がメンテナンスしているパッケージです.....。

2011-12-20

_ [Debian/Ubuntu JP Advent Calendar 2011][Debian] ABIやAPIの変更に伴い、新しいパッケージ依存に移行中のパッケージをチェックする

バイナリベースディストリビューションである Debian はあるライブラリのABIが変わるとそのライブラリにリンクしているパッケージは再ビルドされる必要があります。これはABIが変わるので、最ビルドしないとライブラリとリンクできないからです。

例えばopenssl 0.9.8 では libssl0.9.8 パッケージで libssl.so.0.9.8 を提供しています。 libssl0.9.8 パッケージに依存している(libssl.so.0.9.8 にリンクしている)パッケージがあったとして、 Debian の openssl パッケージが openssl 1.0.0 (libssl.so.1.0.0)に移行したとします。 libssl0.9.8 パッケージに依存している パッケージは libssl.so.0.9.8 がなくなってしまうのでライブラリをさがすことができず、動作しなくなるわけです。 よって再ビルドして、libssl.so.1.0.0 とリンクできるようにします。

Debianではこれらの移行作業は自動的に行われており、リリースチームがコントロールしています。移行に必要なパッケージがある場合には移行したい旨をBTSに登録し、リリースチームの判断を仰ぎます。依存しているパッケージが問題なく(再ビルドのみで)移行できるかなどのチェックが行われます。問題ない場合にはリリースチームが unstable へのアップロードを許可するので、アップロードされることをトリガーにして、依存しているパッケージの再ビルドが行われます。これはbinNMU と言われ、binNMU されたパッケージは +b1 や +b2 などがDebianバージョンに付加されます。

この移行状況がどうなっているのか確認するためのページがあり、http://release.debian.org/transitions/にあります。パッケージ、アーキテクチャ毎に進行状況が分かります。また、移行申請が出ているパッケージは user がusers=release.debian.org@packages.debian.org で、transition タグの付いたバグで検索できます。 ライブラリパッケージのメンテナンスをしている人にとっては重要なページなので覚えておくと良いと思います。

2011-12-21

_ [Debian/Ubuntu JP Advent Calendar 2011][Debian] getbuildlog を使ってパッケージビルドログを取得する

パッケージメンテナはDebianパッケージのバグに対して対応する必要があります。 よく見かけるのがFTBFS(Fails To Build From Source)バグです。Debianではビルドのログを管理しているので(全てではありませんが)、過去のビルドログ、最新のビルドログを参照することができます。参照する場合、buildd.debian.org からも取得できますが、「getbuildlog」コマンドを使うと、サーバからビルドログを取得してくれるので、ローカルでも参照できるようになります。「getbuildlog」コマンドは devscripts パッケージに含まれています。まずは 「devscripts」パッケージをインストールします。
$ sudo apt-get install devscripts
次にビルドログを取得してみます。 「getbuildlog」を実行するときのオプションは ソースパッケージ名、 パッケージバージョン、 取得したいアーキテクチャ名 の順に指定します。最新のビルドログを取得したい場合には「パッケージバージョン」に「last」を指定します。 helloパッケージのi386最新ビルドログを取得したい場合には以下のように実行します。
$ getbuildlog hello last i386
--2011-12-24 06:36:04--  http://buildd.debian.org/status/fetch.php?pkg=hello&arch=i386&ver=2.7-2&stamp=1312458021&raw=1
(中略)
2011-12-21 06:36:09 (48.3 KB/s) - `hello_2.7-2_i386.log' へ保存終了 [73674]
取得したファイルの内容を見てみると、helloパッケージのi386最新ビルドログが取得されていることがわかります。
$ head hello_2.7-2_i386.log
 
sbuild (Debian sbuild) 0.61.0 (23 Feb 2011) on murphy.debian.org
 
╔══════════════════════════════════════════════════════════════════════════════╗
║ hello 2.7-2 (i386)                                         04 Aug 2011 11:39 ║
╚══════════════════════════════════════════════════════════════════════════════╝
 
Package: hello
Version: 2.7-2
Source Version: 2.7-2
「getbuildlog」 コマンドで注意しないといけないのは、パッケージメンテナがアップロードしたCPUアーキテクチャのビルドログが取得できないということです。これはDebianではいまのところアップロードするときにビルドログは付加されないためです。ソースビルドが実現されると全てのアーキテクチャのビルドログが見れるようになるでしょう。
今回は 「getbuildlog」コマンド を使ってパッケージビルドログを取得する方法を紹介しました。buildd.debian.orgにいって参照していた人は 「getbuildlog」コマンドに切り替えてみてはいかがでしょうか。

2011-12-22

_ [Debian/Ubuntu JP Advent Calendar 2011][debian] debian-refcard パッケージと Debian チートシート

Deabinを使っていて「あれ?APT で○○をしたいときはどうやるんだっけ?」などと悩んだことはありませんか。普段は他のディストリビューションを使っていると、作法などがわからなくて困ることがあると思います。 脊髄反射で「manを見ろ!」とうのは簡単ですがどのman分からない事があります。概要が書いてあるリファレンスやチートシートがあると便利ですよね。
Debian では「debian-refcard」パッケージがあり Debian特有の操作方法などが載った簡単なリファレンスが提供されています。pdf で提供されていますので、evince などのビューアで見ることができます。
$ sudo apt-get udate ; sudo apt-get install debian-refcard
$ evince /usr/share/doc/debian-refcard/refcard-ja-a4.pdf.gz
今回は Debian の簡単なリファレンスが提供されている 「debian-refcard」を紹介しました。年末年始は「debian-refcard」を読んでDebianライフをお楽しみください。また、APTのチートシートが Debian勉強会有志によって作成されているようなので、こちらもどうぞ。

2011-12-23

_ [Debian/Ubuntu JP Advent Calendar 2011][Debian] rc-alert / popbugs コマンドを使ってシステムにインストールされているRCバグを確認する

自分が使っているパッケージにどれぐらいのRCバグがあり、どんな状況なのかチェックしたい場合があります。このような場合には「devscripts」パッケージに含まれる「rc-alert」か、「debian-goodies」 パッケージに含まれる「popbugs」使うと便利です。
最初に「rc-alert」の簡単な使い方について説明します。 まず、「devscripts」 パッケージをインストールします。
$ sudo apt-get install devscripts
そして「rc-alert」を実行します。インターネット上からデータを取得し表示します。
$ rc-alert
Package: apt
Bug:     558784
Title:   apt: re-adds removed keys
Flags:   [       I] (lenny-ignore or squeeze-ignore)
Dists:   [STUE] (stable, testing, unstable, experimental)
 
Package: apt
Bug:     633351
Title:   apt: Hash Sum mismatch
Flags:   [        ] (none)
Dists:   [E] (experimental)
 
Package: apt
Bug:     649451
Title:   hard-coded gzip-only support in apt-cdrom
Flags:   [        ] (none)
Dists:   [S] (stable
.....
rc-alertにはいくつかのオプションが用意されています。例えばデータをキャッシュしたい場合には、「--cache」オプション、testing ディストリビューションで影響するRCバグだけを出力したい場合には「--include-dists T」をつけて実行します (Tは"T"esting の T です。U は Unstable, S は Stable, O は Old stable )。

次に「popbugs」の使い方について説明します。 まず、「debian-goodies」 と 「popularity-contest」 パッケージをインストールします。 popularity-contest が必要なのはパッケージバグデータ収集に popularity-contest のデータを使うためです。 popularity-contest インストール時に Debian Popularity Contest に参加するように設定してくれると嬉しいのですが、参加しない設定でも動作させることができます。
$ sudo apt-get install debian-goodies popularity-contest
次に popularity-contest を使ってデータを収集します。 root 権限が必要なので以下のように実行するとよいでしょう。
$ sudo sh -c "popularity-contest > /var/log/popularity-contest"
コマンドが完了したら、「popbugs」を実行します。 実行するとブラウザが起動し、popbugsによって生成されたWebページが表示されます。
$ popbugs
......
ここで表示されるWebページを見て「これどっかで見たことある」と思った人は普段からRCバグに興味があるか、バグトラッキング大好きっ子だと思います。これはDebianの Release-critical bugs statusと同じページです。 このサイトは 「popbugs」で生成されていたのです。へぇへぇへぇ。
今回は 「rc-alert」 / 「popbugs」 コマンドを使ってシステムにインストールされているRCバグを確認する方法を紹介しました。これを使うと 年末年始の RCバグ潰しが捗ることでしょう。

2011-12-24

_ [Debian/Ubuntu JP Advent Calendar 2011][Debian] クロスコンパイル環境を構築する

Debian では組込向けの環境を整備している Emdebian というプロジェクトがあります。このプロジェクトでは クロス開発を行うためのパッケージも提供しており、クロスコンパイル環境を容易に構築することができます。
まず、クロスコンパイル用パッケージを提供しているリポジトリを apt-line に追加します。
$ sudo sh -c "echo deb http://www.emdebian.org/debian/ squeeze main >> /etc/apt/sources.list"
次に、emdebian-archive-keyringパッケージをインストールします。 このパッケージにはEmdebianのリポジトリを検証するための鍵束が含まれていて、インストールされていない場合リポジトリに行われている署名の検証を行うことができません。
$ sudo apt-get install emdebian-archive-keyring
emdebian-archive-keyring パッケージがインストールできたら、「apt-get upgrade」でリポジトリ情報を更新します。これで Emdebian で提供されているパッケージを利用できるようになります。
$ sudo apt-get update
では、クロスコンパイル用のパッケージをインストールしてみます。クロスコンパイルに必要なパッケージは emdebian-toolchain-Debianアーキテクチャ名 というメタパッケージで一度にインストールできるようになっています。今回は例としてarmel 向けのクロスコンパイラ環境を構築してみます。以下のように実行します。
$ apt-cache show emdebian-toolchain-armel
Package: emdebian-toolchain-armel
Source: meta-armel
Version: 0.1
Architecture: all
Maintainer: Debian Embedded Maintainers 
Installed-Size: 32
Depends: g++-4.4-arm-linux-gnueabi, gcc-4.4-arm-linux-gnueabi, binutils-arm-linux-gnueabi, linux-libc-dev-armel-cross
Homepage: http://www.emdebian.org
Priority: optional
Section: embedded
Filename: pool/main/m/meta-armel/emdebian-toolchain-armel_0.1_all.deb
Size: 1814
SHA256: 8207b600f1b0fc150a4248dbd9b3cab87fabc47c58fc0ea134f8adb9ad0526d5
SHA1: bbbe401b9c004ef7625557089196b0f1e76403fc
MD5sum: 48456fb8c53a7bb6541dc49e3f8dc8dc
Description: the Emdebian Cross Toolchain Environment, base applications
 Emdebian Cross Toolchain Environment is the powerful, integrated, and
 easy-to-use Free Software framework for cross building applications.
 .
 This metapackage is to ease the installation of cross toolchain packages, it
 pulls in the core parts of Cross Toolchains
% sudo apt-get install emdebian-toolchain-armel
インストールしたarmel 向けクロスコンパイラを使って簡単なプログラムをコンパイルし、file コマンドで ファイルの種類を確認してみます。実行はできませんが、arm用のバイナ リが作成されることが分かります。
$ echo 'int main() { printf("hello armel\n"); return 0; }' | \
  arm-linux-gnueabi-gcc -xc -w - 
}
$ file a.out
a.out: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked \
    (uses shared libs), for GNU/Linux 2.6.18, not stripped 
今回は Debian で クロスコンパイル環境を構築する方法を説明しました。Debianは他のディストリビューションと比べて容易にクロスコンパイル環境を構築できます。またDebianの資産を有効に活用できるようにもなっています(これはDebian勉強会資料を参照してください)。Linuxを組込向けに使われている方は Debianをぜひ使ってみてください。

2011-12-25

_ メリークリスマス

ヒャッハー!メリークリスマス。

子供が生まれてからクリスマスプレンゼントをあげる立場になったわけですが、子供のいる方々は何をプレンゼントしましたか?私は去年、2カラー先生をプレゼントしました。けっこう使って、日々絵を描くのが上手になっています。これは良い買い物でした。

今年のプレゼントはけっこう大変で、入手困難なものを要求されました(入手できるのだけど、買ったら数万円する)。困ったなぁと思っていたら丁度似たようなものが限定発売されたのでネット通販でゲットすることができました。便利な世の中になりましたね。

_ [Debian JP Advent Calendar 2011][Debian] dcmd を使ってパッケージリストを抽出し、その一覧を処理する

作成したDebianパッケージをどこかのサーバに全部コピーしたい場合とかたまに有ります。複数台ある場合にはパッケージリポジトリを作ってそこからインストールできるようにしますが、そこまでやる必要ない場合などは、パッケージをコピーして dpkg でインストールすることが多いと思います。コピーするときにはパッケージ一覧をコピー&ペーストしたり、シェルスクリプトでワンライナーでささっと書いてコピーしたりやり方は様々ですが今回は dcmd を使った方法を紹介します。 dcmd は「devscripts」 パッケージで提供されています。インストールされていない場合にはインストールします。
$ sudo apt-get install devscripts
では、早速使ってみます。changes からパッケージ一覧を取得するには 「dcmd」に changes ファイルを指定します。以下のように dsc, orig.tar.gz, debiain.tar.gz, deb, changes の一覧が出力されます。
$ dcmd mozc_1.3.931.102-1_amd64.changes
mozc_1.3.931.102-1.dsc
mozc_1.3.931.102.orig.tar.gz
mozc_1.3.931.102-1.debian.tar.gz
ibus-mozc_1.3.931.102-1_amd64.deb
scim-mozc_1.3.931.102-1_amd64.deb
uim-mozc_1.3.931.102-1_amd64.deb
emacs-mozc_1.3.931.102-1_amd64.deb
emacs-mozc-bin_1.3.931.102-1_amd64.deb
mozc-server_1.3.931.102-1_amd64.deb
mozc-utils-gui_1.3.931.102-1_amd64.deb
mozc_1.3.931.102-1_amd64.changes
Debianパッケージだけを出力したい場合には「--deb」をオプションとして指定します。
$ dcmd --deb mozc_1.3.931.102-1_amd64.changes
ibus-mozc_1.3.931.102-1_amd64.deb
scim-mozc_1.3.931.102-1_amd64.deb
uim-mozc_1.3.931.102-1_amd64.deb
emacs-mozc_1.3.931.102-1_amd64.deb
emacs-mozc-bin_1.3.931.102-1_amd64.deb
mozc-server_1.3.931.102-1_amd64.deb
mozc-utils-gui_1.3.931.102-1_amd64.deb
その他、dsc ファイルのみの場合は「--dsc」、changes ファイルのみは「--changes」、アーキテクチャ非依存の Debian パッケージのみの場合は「--indepudeb」をオプションとして指定します。その他いくつかのオプションがあります。またこのファイル一覧は dsc ファイルを指定することもできます。この場合には以下のような出力になります。
$ dcmd  mozc_1.3.931.102-1.dsc
mozc_1.3.931.102.orig.tar.gz
mozc_1.3.931.102-1.debian.tar.gz
mozc_1.3.931.102-1.dsc
$ dcmd --deb mozc_1.3.931.102-1.dsc
mozc_1.3.931.102-1.dsc: binary packages not found
これだけでは単に changes ファイルや dsc ファイルからファイルを抽出し、出力しているだけです。しかし dcmd にはこのファイル一覧をコマンドに入力として設定できます。例えば、これらをどこかのサーバに SCP でコピーしたいとします。そのような場合には以下のように実行します。
$ dcmd scp mozc_1.3.931.102-1_amd64.changes mimigah:~/work/sbuild-daily-chacker/mozc/ 
mozc_1.3.931.102-1.dsc                                                                                                                            100% 1396     1.4KB/s   00:00    
mozc_1.3.931.102.orig.tar.gz                                                                                                                      100%   73MB   2.4MB/s   00:31    
mozc_1.3.931.102-1.debian.tar.gz                                                                                                                  100%   38KB  38.5KB/s   00:00    
ibus-mozc_1.3.931.102-1_amd64.deb                                                                                                                 100%  316KB 316.3KB/s   00:00    
scim-mozc_1.3.931.102-1_amd64.deb                                                                                                                 100%  588KB 588.1KB/s   00:00    
uim-mozc_1.3.931.102-1_amd64.deb                                                                                                                  100%  348KB 348.0KB/s   00:00    
emacs-mozc_1.3.931.102-1_amd64.deb                                                                                                                100%   26KB  26.3KB/s   00:00    
emacs-mozc-bin_1.3.931.102-1_amd64.deb                                                                                                            100%  286KB 285.6KB/s   00:00    
mozc-server_1.3.931.102-1_amd64.deb                                                                                                               100%   13MB   2.6MB/s   00:05    
mozc-utils-gui_1.3.931.102-1_amd64.deb                                                                                                            100% 1024KB   1.0MB/s   00:00    
mozc_1.3.931.102-1_amd64.changes   
今回は「devscripts」で提供されている dcmd について紹介しました。いままでコピー&ペーストしていたりや毎回ワンライナーを書いていた人は使ってみてはいかがでしょうか。

2011-12-28

_ Berlios からの移動

Berlios のサービスが今年で終わってしまうので、各種データをバックアップし他のサービスに移行する必要がある。Berlios に ちゃんとバックアップ方法が載っていた。