[ 前のページ ] [ 目次 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 次のページ ]
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ディレクトリに展開されます。
全ての、または任意のカーネルパッケージは、以下の手順でビルドできます。潜在的なバグの修正をテストするために、リビルドが必要になる場合があります。
Debian 6.0 (squeeze) 以前のバージョンでは、ソースパッケージ名 linux を linux-2.6 に読みかえてください。
次のコマンドを実行します:
カーネルのビルド時に要求されるビルド依存がインストールされます。
linux-version ディレクトリに linux ソースパッケージがダウンロードされ、展開されます。このパッケージのバージョン名のリビジョンの部分 (例えば、3.2.19-1 の 1 にあたる部分) は、常にオリジナルのアップストリームカーネルに対するパッチレベルをあらわしています。
ソースディレクトリに入ります。
1 つのカーネルフレーバをデバッグ情報を有効にした状態でビルドするには (現在、686-pae、amd64、rt-686-pae、rt-amd64、s390x の設定で true になっています) パッケージディレクトリに最大で 10 GB 程度以上、/tmp (または $TMPDIR) に 300$nbsp;MB 程度以上の空き容量が必要です。
デバッグ情報を無効にした場合は、それぞれ約 2GB と 25 MB 以上必要です。デバッグ情報は debian/config/arch/definesの debug-infoの値をfalseにすることで無効にできます。
i386 または amd64 のバイナリパッケージをビルドするには、今のところ約 20 GB の空き容量がパッケージディレクトリに必要です。デバッグ情報がなかったりドライバが少ない他のアーキテクチャに必要な空き容量はこれよりも少ないでしょう。
ソースパッケージには、追加のパッチを適用してビルドのプロセスを簡略化するためのスクリプトが含まれます。このスクリプトは次のコマンドで実行します:
# 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
もし設定を変えたり変更を加えたりする必要がある場合、このスクリプトは使用せずに、次に説明する手順に従ってください。
ビルドを開始する前に追加のパッチをソースに適用することができます。linux ソースパッケージには、トップディレクトリにデフォルト (フィーチャセットが無い状態) のパッチが自動的に適用されます。もし linux-2.6 ソースパッケージをフィーチャセットつきでビルドするには、まず今あるパッチを適用しましょう。
$ fakeroot debian/rules source
パッチを適用したソースは次のディレクトリに格納されます。
最上位の階層
debian/build/source_featureset
debian/build/source_arch_none
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 節を参照して下さい。
可能な全てのアーキテクチャ用にパッケージをビルドする場合は次のコマンドを実行して下さい:
$ fakeroot debian/rules binary
アーキテクチャ依存の全てのパッケージをビルドする場合は次のコマンドを実行して下さい:
$ fakeroot debian/rules binary-arch
全てのアーキテクチャ非依存のパッケージをビルドする場合は次のコマンドを実行して下さい:
$ fakeroot debian/rules binary-indep
例えば、 i386アーキテクチャで 686-pae フレーバだけのバイナリパッケージをビルドする場合は次のコマンドを実行して下さい:
$ fakeroot debian/rules source $ fakeroot make -f debian/rules.gen binary-arch_i386_none_686-pae
このコマンド内でのターゲットの指定方法は以下の書式で汎化されています: target_arch_featureset_flavour 追加のフィーチャセットが不要な場合、featureset を none で置き変えます。このコマンドは linux イメージとカーネルヘッダパッケージをビルドします。場合によっては linux-headers-version-common バイナリパッケージが必要かもしれません。次のコマンドでビルドできます:
$ fakeroot debian/rules source $ fakeroot make -f debian/rules.gen binary-arch_i386_none_real
このコマンドのターゲットは次の書式で汎化されています: target_arch_featureset_real
Debian 6.0 (squeeze) 以前のバージョンでは、ソースパッケージ名 linux を linux-2.6 に読みかえてください。
カーネルチームがまだリリースしていない開発バージョンのカーネルイメージをビルドするには、次のコマンドを実行します:
最後の 2 つのコマンドはカーネルのビルドプロセス中に必要なビルド依存をインストールします。
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.
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.
アップストリームのソースを展開し、Debian のパッケージとマージします。
現在ビルドすることができる様々なカーネルフレーバの定義にもとづいて、Debian パッケージの control ファイルを生成します。
公式の Debian カーネルパッケージをリビルドする, 第 4.2 節 で説明したバイナリパッケージをビルドします。
まず、新しいアップストリームバージョンの変更履歴を追加します。新しいバージョンがリリース候補版なら、バージョン文字列の -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
このセクションでは "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 lilo、man lilo.conf、man grub、などのコマンドでそれぞれのドキュメントを参照してください。ドキュメントは /usr/share/doc/package ディレクトリから探すこともできます。 packageには関連するパッケージ名を指定してください。
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 oldconfig、make config、make menuconfig、などで起動します) 設定が完了したら、すでに説明した make deb-pkg ターゲットを使い、ビルドを開始できます。
カーネルモジュールのなかには、アップストリームや 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-source、thinkpad-source、rt2x00-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 パッケージによって提供されます。ここでの uname は uname -r コマンドの出力結果です。もし独自でカスタマイズしたカーネルを使っている場合は、オリジナルのビルドツリーを手元に置いておくと良いでしょう。ビルドツリー外にあるモジュールをビルドする際にも役立ちます。
[ 前のページ ] [ 目次 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 次のページ ]
Debian Linux カーネルハンドブック
version 1.0.16, Fri 14 Aug 12:53:11 CEST 2015