トップ 追記

毎日が反省会

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|

2011-12-28

_ Berlios からの移動

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


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-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-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-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-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-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-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-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-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を参照するツールとして使ってみてはいかがでしょうか。