3月版 Linusの片腕、Andrewの夢は「結合テストを楽に」
上川純一
日本ヒューレット・パッカード株式会社
コンサルティング・インテグレーション統括本部
2008/3/31
linux-kernelメーリングリスト(以下LKML)かいわいで起きるイベントを毎月お伝えする、Linux Kernel Watch。2008年2月のLKMLでどんなことが起きたのか見てみましょう。
diffstatが長過ぎる!
Linusは2月もLinuxカーネルの開発を順調に進めていました。2月10日にリリースされた2.6.25-rc1は、特に大きなリリースでした。2.6.24のリリースとマージウィンドウの再開を待ち望んでいたパッチが大量にたまっていたためか、Linusによると、パッチの容量は11Mbytesに達したそうです。
続く2.6.25-rc2のリリースで、Linusは変更概要のまとめ方に新しい方式を導入しました。これまではdiffstatの出力を使っていたのですが、gitに「dirstat」という機能を追加し、そちらを利用するようにしたのです。
関連記事: | |
2005年5月版 BitKeeperからgitへ、ソースコード管理ツール大変更 http://www.atmarkit.co.jp/flinux/rensai/watch2005/watch05a.html |
diffstatを使ってファイル単位で変更量を見ると、あまりに詳細過ぎ、全体としてどれが変わったのかを把握するのが困難になっていました。そもそもLinux Kernelのリリースごとのdiffstatが長過ぎるという問題もありました。
|
これに対しdirstatは、ディレクトリごとにどれくらいの変更が行われたかをまとめて出すことで、大まかな変更履歴の把握を可能にします。dirstatは、Git 1.5.5の新機能としてマージされました。
|
リリース管理を効率化する新しい動き:linux-next
Linux Kernelのリリース管理体制にも新しい動きがありました。
最近、Andrew Mortonの-mmツリーのリリース間隔が長くなってきました。この問題点と解決策を、Andrew Morton本人が「Andrew's Dream」として提示したところ、Stephen Rothwellがそれを実装すべく立候補したのです。
Andrew Mortonは手動で-mmツリーを管理していましたが、ソースコードレベルで変更の衝突(コンフリクト)が多発しており、マージ作業に要する時間が長引くようになっていました。また、開発者たちが単体でのテストは行っても、相互にマージした結果までテストしなくなってきているという悩みもありました。最終的にLinusのツリーとしてリリースされるまで、変更の相互作用については十分テストされていなかったのです。
現状を打開するため、「多くの部分を自動化し、より頻繁に、例えば毎日マージした結果をリリースし、その結果を自動テストなどの方法で継続的にテストするべきだ」というのがAndrew Mortonの提案でした。
このプロセスでテストを通らないパッチについては、自動的にマージ対象外になるなどの措置を取り、さらに、一定期間マージ対象に入らなかったものは次のLinusのツリーのマージウィンドウでもマージされないという体制とすることで、品質やテスト状況を改善するインセンティブになることを狙っています。
2月14日、バレンタインを祝うかのようにlinux-next Gitリポジトリが颯爽(さっそう)と登場しました。
Stephen Rothwellによると、このGitリポジトリのstableブランチはLinusのツリーです。そして、このGitリポジトリのmasterブランチは、次のマージウィンドウに向けて開発が進んでいる、各メンテナのツリーの最新版を自動的にマージした結果ということです。マージ対象はGitやquiltで公開されているものを半自動的に取得しています。これまでのところコンフリクトもあまり起こらず、順調な滑り出しのようです。
linux-next Gitリポジトリほぼ毎日リリースできており、最初の対象は6ツリーだけだったのが、3月20日現在で50のツリーをマージするまでになっています。
自動コンパイルの仕組みも用意され、多くのアーキテクチャ用にクロスビルドできることが確認されています。マージウィンドウを経て初めてほかのパッチとの相互作用が確認されていたというそれまでの問題点も改善されたので、フィードバックのサイクルが短くなります。今後の開発に良い影響があるといいですね。
なお、linux-next Gitリポジトリのmasterブランチは、Linusのツリーに対して頻繁にrebase(注)されているのでご注意を。
注:Git用語で、異なるリビジョンをベースにある変更を適用すること。この例では、毎回Linusの最新版がベースになり、それに対してマージしていることを指す。前回チェックアウトしたlinux-nextと次にチェックアウトしたlinux-nextとでは履歴がつながらないので注意 |
それから、「このツリーはどうやって追跡したらよいのか」という質問が出たところ、Chris Wedgwoodが、LinusのGitツリーをチェックアウトした後でリモートブランチとして管理すればよいと小技を披露しました。
$ git remote add linux-next git://git.kernel.org/pub/scm/linux/kernel/git/sfr/linux-next.git |
以上の操作で、このツリーをリモートブランチ「linux-next/master」として取得することができます。後は普通のリモートブランチとして操作すれば大丈夫です。
|
参考: | |
linux-next Gitリポジトリ git://git.kernel.org/pub/scm/linux/kernel/git/sfr/linux-next.git |
|
マージされているツリーの一覧 linux-nextツリーの「Next/Trees」ファイル |
|
linux-nextツリーのウェブページ http://linux.f-seidel.de/linux-next/ |
|
linux-nextツリーのビルドの結果サマリページ http://kisskb.ellerman.id.au/kisskb/branch/9/ |
1/2 |
|
||||
|
連載 Linux Kernel Watch |
Linux Squareフォーラム Linuxカーネル関連記事 |
連載:Linux Kernel Watch(連載中) Linuxカーネル開発の現場ではさまざまな提案や議論が交わされています。その中からいくつかのトピックをピックアップしてお伝えします |
|
連載:Linuxファイルシステム技術解説 ファイルシステムにはそれぞれ特性がある。本連載では、基礎技術から各ファイルシステムの特徴、パフォーマンスを検証する |
|
特集:全貌を現したLinuxカーネル2.6[第1章] エンタープライズ向けに刷新されたカーネル・コア ついに全貌が明らかになったカーネル2.6。6月に正式リリースされる予定の次期安定版カーネルの改良点や新機能を詳しく解説する |
|
特集:/procによるLinuxチューニング[前編] /procで理解するOSの状態 Linuxの状態確認や挙動の変更で重要なのが/procファイルシステムである。/procの概念や/procを利用したOSの状態確認方法を解説する |
|
特集:仮想OS「User
Mode Linux」活用法 Linux上で仮想的なLinuxを動かすUMLの仕組みからインストール/管理方法やIPv6などに対応させるカーネル構築までを徹底解説 |
|
Linuxのカーネルメンテナは柔軟なシステム カーネルメンテナが語るコミュニティとIA-64 Linux IA-64 LinuxのカーネルメンテナであるBjorn Helgaas氏。同氏にLinuxカーネルの開発体制などについて伺った |
|
|
- 【 pidof 】コマンド――コマンド名からプロセスIDを探す (2017/7/27)
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、コマンド名からプロセスIDを探す「pidof」コマンドです。 - Linuxの「ジョブコントロール」をマスターしよう (2017/7/21)
今回は、コマンドライン環境でのジョブコントロールを試してみましょう。X環境を持たないサーバ管理やリモート接続時に役立つ操作です - 【 pidstat 】コマンド――プロセスのリソース使用量を表示する (2017/7/21)
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、プロセスごとのCPUの使用率やI/Oデバイスの使用状況を表示する「pidstat」コマンドです。 - 【 iostat 】コマンド――I/Oデバイスの使用状況を表示する (2017/7/20)
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、I/Oデバイスの使用状況を表示する「iostat」コマンドです。
|
|