Ubuntu Weekly Recipe

第278回 Ubuntuカーネルとの付き合い方

この記事を読むのに必要な時間:およそ 8 分

カーネルのサポート期間

Ubuntuのmainコンポーネントに含まれるパッケージは,LTSで5年,LTSでないものだと9ヵ月サポートされます。Ubuntuカーネルは基本的にmainコンポーネントに属することになるので,上記と同じサポート期間となるのですが,LTSについては一部例外が存在します。

まずGAカーネルについては,⁠最新のバージョンのみ5年サポート」です。⁠カーネルとパッケージのバージョン」で説明したように,カーネルのABIが変更されるとカーネルのパッケージ名が変更されます。このとき,5年サポートの対象になるのは,ABIが更新された後のパッケージのみとなります。

たとえば,Ubuntu 12.04 LTSの現在の最新版は,2013年6月6日にリリースされた「3.2.0-48」で,その前のバージョンは2013年5月29日にリリースされた「3.2.0-45」になります。この2つのパッケージのサポート期間を,apt-cacheコマンドで確認してみましょう。

$ apt-cache show linux-image-3.2.0-48-generic | grep Supported
Supported: 5y
$ apt-cache show linux-image-3.2.0-45-generic | grep Supported
Supported: 18m

次にHWEカーネルについては,⁠元になったリリースのサポート期間に準じる」ことになります。12.10のカーネルである,linux-image-generic-lts-quantalはLTSであっても18ヵ月のサポートです注13⁠。最新のHWEカーネルを指定するlinux-image-hwe-genericは5年サポート表示になっていますが,これは将来的に指定する先がlinux-image-generic-lts-quantalからより新しいカーネルへと切り替わることが見込まれているためです。

$ apt-cache show linux-image-generic-lts-quantal | grep Supported
Supported: 18m
$ apt-cache show linux-image-hwe-generic | grep Supported
Supported: 5y

このように古くなったカーネルはたとえLTSのリポジトリに存在していても,サポート期間がLTSではないパッケージと同じになります。また,原則としてセキュリティパッチは新しいカーネルのみに適用されるので,古いカーネルを使い続けることは避けるようにしましょう。

注13)
HWEカーネルはポイントリリースの標準カーネルになる都合上,実際は次のLTSである14.04のリリースまでサポート対象になるかもしれません。また,14.04以降のLTSではGAカーネルのサポート期間を短くして,自動的にHWEに切り替えるという話もあります。

メインラインカーネルとの違い

Ubuntuカーネルは,上流であるLinuxのメインラインカーネルにUbuntu独自のパッチを適用したり,Ubuntuで必要となるようなconfigオプションを変更したものです。では,メインラインカーネルとはどのように異なっているのでしょうか。カーネルチームのドキュメントには,リリースごとのUbuntu独自の変更点(Ubuntu Delta)が一覧としてまとまっています。

たとえば13.04の場合リリース直前の状態だと全体で521個のパッチがあたっており,そのうちカーネルのソースコードを変更するパッチ(SAUCEパッチ)は290個でした注14⁠。カーネルコンフィグも,リリースごとにレビューを行なっています

注14)
「SAUCE」はカーネルに対する変更,⁠no-up」はアップストリームで却下された変更,などUbuntuカーネルのコミットログには,いくつかの書式が存在します。リリースごとの変更点を読むうえでも参考になりますので,Ubuntu Deltaのページにあるパッチの種類一覧には一通り目を通しておいたほうが良いでしょう。

問題に遭遇したら

Ubuntuを使っていると,Ubuntuカーネルに起因する問題に遭遇することがあるかもしれません。現象や要因がある程度絞りこめているのであれば,不具合として報告しましょう。

$ ubuntu-bug linux

いくつかの質問に答えると,現在の環境の情報が収集され,Webブラウザが立ち上がり注15⁠,Webフォームからタイトルと概要を入力することで報告完了です注16⁠。

Webフォームでは似たようなタイトルの不具合がリストアップされるので,報告済みかどうか確認しましょう。また,あらかじめGoogleを使って,⁠キーワード site:bugs.launchpad.net」と検索しておくと,報告済みの内容や運が良ければ解決策も含めて見つかるかもしれません。

不具合の概要は,⁠再現手順(How to reproduce⁠⁠期待される動作(Expected result⁠⁠実際に起こった動作(Actual result⁠⁠」などを明示するようにしましょう。

もしカーネルがクラッシュした場合は,/var/crashにクラッシュダンプが残っていることがあります。それも併せて送信すると,より解決が近くなります。

$ apport-collect -p linux (チケット番号)

最後の「チケット番号」は,ubuntu-bugコマンドで登録したチケット番号を指定します。

もし,自力で問題を解決したい場合は,クラッシュダンプの解析方法や,ケースごとの参考文献のリストカーネルのバージョンを切り替えつつ問題を絞り込む手順などが参考になるでしょう。

注15)
サーバの場合はw3mが使われます。w3mがないとレポートの送信に失敗します。
注16)
ubuntu-bugもapport-collectも,ハードウェア情報や各種ログ,クラッシュダンプの場合はダンプファイルなどの情報をサーバに送信します。それが本当に送信して良い情報かどうかは各自で判断するようにしてください。どちらのコマンドも送信する前に送信データをローカルにapportの形式で保存できます。apport-unpackコマンドを使えば中身を確認できるので,まずはどんなデータが送られるか見ておくと良いでしょう。

カーネルに関する情報

今回説明した内容のほとんどは,Kernel情報のページもしくはKernelチームのページに掲載されています。Ubuntuカーネルについて調べたいことがあれば,まずはこれらのページを訪れると良いでしょう。さらに,カーネルチームは定期的にミーティングを行い,その結果をKernelチームのML(流量多め)ブログに報告しています。

Ubuntuカーネルのソースコードは,他のUbuntuプロジェクトと異なり,アップストリームに合わせてgitで管理されています。数多くのプロジェクトが表示されますが,公式のUbuntuカーネルは「ubuntu/ubuntu-コードネーム.git」なので,すぐに見つかるでしょう。もし,自分でカーネルをビルドしたい場合は,このリポジトリとドキュメントを参考にチャレンジしてみてください。

著者プロフィール

柴田充也(しばたみつや)

Ubuntu Japanese Team Member。数年前にLaunchpad上でStellariumの翻訳をしたことがきっかけで,Ubuntuの翻訳にも関わるようになりました。