[ 前のページ ] [ 目次 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 次のページ ]


Debian Linux カーネルハンドブック
第 4 章 - カーネル関連の一般的な作業手順


4.1 Debian カーネルソースを取得する

linux-source-version パッケージをインストールしてソースを展開するだけで Debian のカーネルソースを最新のパッチレベルで取得することができます。例えば:

     # apt-get install linux-source-3.2
     $ tar jxf /usr/src/linux-source-3.2.tar.bz2

ソースツリーがlinux-source-3.2ディレクトリに展開されます。


4.2 公式の Debian カーネルパッケージをリビルドする

全ての、または任意のカーネルパッケージは、以下の手順でビルドできます。潜在的なバグの修正をテストするために、リビルドが必要になる場合があります。


4.2.1 準備

Debian 6.0 (squeeze) 以前のバージョンでは、ソースパッケージ名 linuxlinux-2.6 に読みかえてください。

次のコマンドを実行します:

# apt-get install build-essential fakeroot
# apt-get build-dep linux

カーネルのビルド時に要求されるビルド依存がインストールされます。

$ apt-get source linux

linux-version ディレクトリに linux ソースパッケージがダウンロードされ、展開されます。このパッケージのバージョン名のリビジョンの部分 (例えば、3.2.19-1 の 1 にあたる部分) は、常にオリジナルのアップストリームカーネルに対するパッチレベルをあらわしています。

$ cd linux-version

ソースディレクトリに入ります。


4.2.1.1 必要なディスクの空きスペース

1 つのカーネルフレーバをデバッグ情報を有効にした状態でビルドするには (現在、686-paeamd64rt-686-paert-amd64s390x の設定で true になっています) パッケージディレクトリに最大で 10 GB 程度以上、/tmp (または $TMPDIR) に 300$nbsp;MB 程度以上の空き容量が必要です。

デバッグ情報を無効にした場合は、それぞれ約 2GB と 25 MB 以上必要です。デバッグ情報は debian/config/arch/definesdebug-infoの値をfalseにすることで無効にできます。

i386 または amd64 のバイナリパッケージをビルドするには、今のところ約 20 GB の空き容量がパッケージディレクトリに必要です。デバッグ情報がなかったりドライバが少ない他のアーキテクチャに必要な空き容量はこれよりも少ないでしょう。


4.2.2 簡単なパッチ適用とビルド実行

ソースパッケージには、追加のパッチを適用してビルドのプロセスを簡略化するためのスクリプトが含まれます。このスクリプトは次のコマンドで実行します:

     # apt-get install devscripts
     $ bash debian/bin/test-patches ../fix-bug123456.patch ../add-foo-driver.patch

このスクリプトにはフレーバやフィーチャセットの制御が可能なオプションが指定できます。オプションの概要を見るには、次のコマンドを実行して下さい:

     $ bash debian/bin/test-patches

場合によっては、linux-base パッケージもビルドする必要があるかもしれません:

     $ fakeroot make -f debian/rules.real install-linux-base

もし設定を変えたり変更を加えたりする必要がある場合、このスクリプトは使用せずに、次に説明する手順に従ってください。


4.2.3 パッチの適用や設定の変更

ビルドを開始する前に追加のパッチをソースに適用することができます。linux ソースパッケージには、トップディレクトリにデフォルト (フィーチャセットが無い状態) のパッチが自動的に適用されます。もし linux-2.6 ソースパッケージをフィーチャセットつきでビルドするには、まず今あるパッチを適用しましょう。

     $ fakeroot debian/rules source

パッチを適用したソースは次のディレクトリに格納されます。

Linux デフォルトのソース:

最上位の階層

フィーチャセットを含む linux ソース:

debian/build/source_featureset

linux-2.6 デフォルトのソース:

debian/build/source_arch_none

linux-2.6 のフィーチャセットを含むソース:

debian/build/source_arch_featureset

追加のパッチは正しいディレクトリにそれぞれ適用して下さい。linux ソースパッケージでは、この作業に quilt を使用することができます。

設定をビルドする前に変更するには、例えば i386 の 686-pae フレーバの場合は次のコマンドを実行します:

     $ fakeroot make -f debian/rules.gen setup_i386_none_686-pae
     $ make -C debian/build/build_i386_none_686-pae menuconfig

パッチまたは変更した設定が、カーネルの型定義を変更する場合、 ABI 名を変更する必要があるかもしれません。ABI 名, 第 5.2.1 節を参照して下さい。


4.2.4 パッケージを一度にビルドする

可能な全てのアーキテクチャ用にパッケージをビルドする場合は次のコマンドを実行して下さい:

     $ fakeroot debian/rules binary

アーキテクチャ依存の全てのパッケージをビルドする場合は次のコマンドを実行して下さい:

     $ fakeroot debian/rules binary-arch

全てのアーキテクチャ非依存のパッケージをビルドする場合は次のコマンドを実行して下さい:

     $ fakeroot debian/rules binary-indep

4.2.5 特定のフレーバのためにパッケージをビルドする

例えば、 i386アーキテクチャで 686-pae フレーバだけのバイナリパッケージをビルドする場合は次のコマンドを実行して下さい:

     $ fakeroot debian/rules source
     $ fakeroot make -f debian/rules.gen binary-arch_i386_none_686-pae

このコマンド内でのターゲットの指定方法は以下の書式で汎化されています: target_arch_featureset_flavour 追加のフィーチャセットが不要な場合、featuresetnone で置き変えます。このコマンドは linux イメージとカーネルヘッダパッケージをビルドします。場合によっては linux-headers-version-common バイナリパッケージが必要かもしれません。次のコマンドでビルドできます:

     $ fakeroot debian/rules source 
     $ fakeroot make -f debian/rules.gen binary-arch_i386_none_real

このコマンドのターゲットは次の書式で汎化されています: target_arch_featureset_real


4.3 Debian カーネルパッケージの開発用バージョンをビルドする

Debian 6.0 (squeeze) 以前のバージョンでは、ソースパッケージ名 linuxlinux-2.6 に読みかえてください。

カーネルチームがまだリリースしていない開発バージョンのカーネルイメージをビルドするには、次のコマンドを実行します:

# apt-get install build-essential fakeroot rsync git
# apt-get build-dep linux

最後の 2 つのコマンドはカーネルのビルドプロセス中に必要なビルド依存をインストールします。

$ git clone -b dist --single-branch https://anonscm.debian.org/git/kernel/linux.git

This will check out the Debian packaging. dist is normally the distribution codename such as wheezy or sid (unstable). For the very latest version, usually based on an upstream release candidate, use master. Note that this will download several hundred megabytes of data.

$ apt-get source -d linux

This will download the linux upstream source (and the last released Debian patches). Depending on which version you are trying to build, you might need to override APT's version selection or download a tarball from people.debian.org instead.

$ cd linux
$ debian/rules orig

アップストリームのソースを展開し、Debian のパッケージとマージします。

$ debian/rules debian/control

現在ビルドすることができる様々なカーネルフレーバの定義にもとづいて、Debian パッケージの control ファイルを生成します。

$ fakeroot debian/rules target

公式の Debian カーネルパッケージをリビルドする, 第 4.2 節 で説明したバイナリパッケージをビルドします。


4.4 orig tarball をより新しいアップストリームの tarball から生成する

まず、新しいアップストリームバージョンの変更履歴を追加します。新しいバージョンがリリース候補版なら、バージョン文字列の -rc~rc に変更して下さい。(Debian のパッケージでは、サフィックス~がプレリリース用に使われています)

The 'orig' tarball is generated by the genorig.py script. It takes either a tarball and optional patch from kernel.org, or a git repository. First ensure you have the necessary tools installed:

     # apt-get install unifdef

Then if you have a tarball, run a command such as:

     $ python debian/bin/genorig.py ../linux-3.4.tar.bz2 ../patch-3.5-rc1.bz2

Or if you have a git repository, pass the name of its directory:

     $ python debian/bin/genorig.py ~/src/linux

どちらを実行した場合にも、../orig/linux_3.5~rc1.orig.tar.xzのようなファイルが生成されます。この tarball を次のコマンドで Debian パッケージに統合します:

     $ debian/rules orig

4.5 Debian カーネルソースからカスタムカーネルをビルドする

このセクションでは "Debian way" でカスタムカーネルをビルドするための可能な限りシンプルな手順を紹介します。カーネルの設定やビルドプロセスにある程度の知識があることを前提とします。もし、そうでない場合はカーネルドキュメンテーションと素晴らしいオンラインのリソースに目を通しましょう。

Debian カーネルのソースからカスタムカーネル (オフィシャルパッケージで使われている設定とは違う設定のカーネル) をビルドするための最も簡単な方法は linux-source パッケージと make deb-pkg ターゲットを使うことです。まず、カーネルツリーの準備をします。

     # apt-get install linux-source-3.2
     $ tar xjf /usr/src/linux-source-3.2.tar.bz2
     $ cd linux-source-3.2

次に、カーネルの設定が必要になります。つまり、カーネルのオプションを設定しどのドライバーを含めるか、ビルトインにするか外部モジュールにするか、などを決めなければなりません。カーネルのビルド機構は多くのターゲットに対応しており、異なる設定用フロントエンドを起動することができます。たとえばコンソールベースのメニュー形式の設定画面は次のコマンドで起動できます。

     $ make menuconfig

menuconfig のかわりに config (テキストベースで 1 行毎に設定を行うフロントエンド) または xconfig (グラフィカルな設定フロントエンド) なども利用できます。古い設定ファイルは .config ファイルとしてトップディレクトリに配置し、設定するターゲットの起動コマンドを実行するか (なにかを設定し直す場合)、make oldconfig コマンドを実行する (設定を保持する場合) ことで再利用できます。フロントエンドによっては、正常に動作するためにライブラリやユーティリティをインストールする必要があるかもしれないことに注意して下さい。例えば、menuconfigフロントエンドは執筆時点では libncurses5-dev パッケージとして提供されている ncurses ライブラリが必要です。

CONFIG_DEBUG_INFO オプションが無効化されている場合は (必要なディスクの空きスペース, 第 4.2.1.1 節 参照) ビルドに必要な空きディスクスペースは少なく済みます。デバッグ情報は、crash、kgbd、SystemTap のようなカーネル上のバイナリオブジェクトツールを使わない場合は不要です。

     $ scripts/config --disable DEBUG_INFO

設定プロセスの終了後、変更または新規に作成されたカーネルの設定はトップレベルディレクトリの .config ファイルとして保存されます。ビルドの開始には次のコマンドを使用します。

     $ make clean
     $ make deb-pkg

生成されたカスタムカーネルパッケージ linux-image-3.2.19_3.2.19-1_i386.deb (ファイル名にはカーネルのバージョンとビルド番号が反映されます) がツリーのトップレベルの 1 つ上の階層に生成されます。このファイルは他のパッケージと同様に、 dpkg コマンドでインストールできます。

      
     # dpkg -i ../linux-image-3.2.19_3.2.19-1_i386.deb

このコマンドはカーネルを展開し、もし必要であれば initrd を生成し (詳細は 起動用RAMイメージ (initramfs) アーカイブの管理, 第 7 章 を参照) 新規でインストールしたカーネルがデフォルトとなるようにブートローダを設定します。このコマンドが問題無く完了したら

     # shutdown -r now

コマンドで再起動すると新しいカーネルで起動します。

ブートローダとその設定方法に関しての詳細は man liloman lilo.confman grub、などのコマンドでそれぞれのドキュメントを参照してください。ドキュメントは /usr/share/doc/package ディレクトリから探すこともできます。 packageには関連するパッケージ名を指定してください。


4.6 "pristine" なカーネルソースからカスタムカーネルをビルドする

Building a kernel from the "pristine" (also sometimes called "vanilla") kernel source, distributed from www.kernel.org and its mirrors, may be occasionally useful for debugging or in the situations when a newer kernel version is desired. The procedure differs only in obtaining the kernel source: instead of unpacking the kernel source from Debian packages, the "pristine" source is downloaded using your favourite browser or using wget, as follows:

      
     $ wget http://kernel.org/pub/linux/kernel/v3.x/linux-3.4.tar.bz2

アーカイブの整合性はそれぞれの暗号化シグネチャを検証することで確認できます。

      
     $ wget http://kernel.org/pub/linux/kernel/v3.x/linux-3.4.tar.sign

コマンドを実行し、次のコマンドを実行してください。(gnupg パッケージがインストールされていなければなりません)

     $ bunzip2 -c linux-3.4.tar.bz2 | gpg --verify linux-3.4.tar.sign -

検証に成功した場合、次に示すような出力を得ることができます。

     gpg: Signature made Mon 21 May 2012 01:48:14 AM CEST using RSA key ID 00411886
     gpg: Good signature from "Linus Torvalds <torvalds@linux-foundation.org>"
     gpg: WARNING: This key is not certified with a trusted signature!
     gpg:          There is no indication that the signature belongs to the owner.
     Primary key fingerprint: ABAF 11C6 5A29 70B1 30AB  E3C4 79BE 3E43 0041 1886

検証が済んだら、次のコマンドでアーカイブを展開しましょう。

     $ tar xjf linux-3.4.tar.bz2
     $ cd linux-3.4

展開されたカーネルツリー (linux-3.4 ディレクトリ) の設定をする準備ができました。手始めに、すでにある設定ファイルを使うと良いでしょう。

     $ cp /boot/config-3.2.0-2-686-pae ./.config

設定フロントエンドのどれかを使い (make oldconfigmake configmake menuconfig、などで起動します) 設定が完了したら、すでに説明した make deb-pkg ターゲットを使い、ビルドを開始できます。


4.7 ツリーの外にあるカーネルモジュールをビルドする

カーネルモジュールのなかには、アップストリームや Debian カーネルソースには含まれずに、サードパーティのソースパッケージとして提供されているものがあります。ツリー外のカーネルモジュールの中でも特に有名なものは、Debian カーネル用にビルドしたモジュールの、バイナリの Debian パッケージが提供されている場合があります。例えば linux-image-3.2.0-2-686-pae パッケージからインストールした、Debian カーネル 3.2.0-2-686-pae を使っていて (uname -r コマンドでバージョンの確認ができます) squashファイルシステムを使いたくなった場合は、そのために必要なバイナリのカーネルモジュールを提供している squashfs-modules-3.2.0-2-686-pae パッケージをインストールするだけで利用可能になります。

残念ながら使いたいモジュールのバイナリパッケージがアーカイブにない場合でも、カーネルモジュールのソースパッケージが Debian アーカイブにある可能性もあります。パッケージ名の最後に -source とついているパッケージは、このようなパッケージの典型例です。例えば squashfs-sourcethinkpad-sourcert2x00-source などがありますが、他にも多数あります。これらのパッケージには、Debian 化したカーネルモジュールのソースコードが含まれています。ビルドには module-assistant パッケージのmodule-assistant (または m-a) スクリプトを使うと便利です。Debian 化したソースからカーネル 3.2.0-2-686-pae (uname -rコマンドの返答値) 用のカスタムバイナリモジュールパッケージをビルドする場合の大まかな流れを説明します。

まず、ビルドしたいモジュールに適切なカーネルヘッダをインストールします。

     # apt-get install linux-headers-3.2.0-2-686-pae

ソースを含んでいるパッケージをインストールします。

     # apt-get install squashfs-source

module-assistant (または m-a) を実行し、ビルドをします。

     # m-a build squashfs

Debian パッケージがビルドされ、/usr/src に配置されます。いつも通り dpkg -i でインストールすることもできます。最後の 2 つのステップ (ビルドとインストール) は、

     # m-a auto-install squashfs

で 1 つにまとめることもできます。その他のオプションと使い方について、もっと詳しく知りたい場合は、module-assistant のドキュメント (man module-assistant) を参照してください。

とても稀なケースではありますが、カーネルモジュールのパッケージをアップストリームのソースからビルドする必要があるかもしれません。その場合、モジュールをビルドするためのパッケージに付属しているドキュメントの指示に従って下さい。もしビルドプロセスの途中で現在使用中のカーネルに合わせたカーネルヘッダを含むディレクトリを指定しなければならない場合、Debian の 素のカーネルのディレクトリは /usr/src/linux-headers-uname で、linux-headers-uname パッケージによって提供されます。ここでの unameuname -r コマンドの出力結果です。もし独自でカスタマイズしたカーネルを使っている場合は、オリジナルのビルドツリーを手元に置いておくと良いでしょう。ビルドツリー外にあるモジュールをビルドする際にも役立ちます。


[ 前のページ ] [ 目次 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 次のページ ]


Debian Linux カーネルハンドブック

version 1.0.16, Fri 14 Aug 12:53:11 CEST 2015

The Debian Kernel Handbook Project