目次
linux-source-version
パッケージをインストールしてソースを展開するだけで Debian のカーネルソースを最新のパッチレベルで取得することができます。例えば:
#
apt-get install linux-source-4.3
$
tar xaf /usr/src/linux-source-4.3.tar.xz
ソースツリーがlinux-source-4.3
ディレクトリに展開されます。
全ての、または任意のカーネルパッケージは、以下の手順でビルドできます。潜在的なバグの修正をテストするために、リビルドが必要になる場合があります。
次のコマンドを実行します:
#
apt-get install build-essential
fakeroot
#
apt-get build-dep linux
カーネルのビルド時に要求されるビルド依存がインストールされます。
$
apt-get source linux
linux
ソースパッケージをダウンロードし、linux-
ディレクトリにツリー展開します。このパッケージのバージョン名のリビジョンの部分
(例えば、3.2.19-1 の 1 にあたる部分) は、常にオリジナルのアップストリームカーネルに対するパッチレベルをあらわしています。
version
$
cd
linux-version
ソースディレクトリに入ります。
Building binary packages for a single kernel flavour requires up to 10 GB
space in the package directory and 300 MB in /tmp
(or
$TMPDIR
).
デバッグ情報を無効にした場合は、それぞれ約 2GB と 25 MB 以上必要です。デバッグ情報は
debian/config/
の
arch
/definesdebug-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 ソースパッケージには、トップディレクトリにデフォルト (フィーチャセットが無い状態) のパッチが自動的に適用されます。
パッチを適用したソースは次のディレクトリに格納されます。
最上位の階層
debian/build/source_
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 nconfig
パッチまたは変更した設定が、カーネルの型定義を変更する場合、 ABI 名を変更する必要があるかもしれません。「ABI 名」を参照して下さい。
可能な全てのアーキテクチャ用にパッケージをビルドする場合は次のコマンドを実行して下さい:
$
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
_real
を 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
カーネルチームがまだリリースしていない開発バージョンのカーネルイメージをビルドするには、次のコマンドを実行します:
#
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
Debian パッケージをチェックアウトします。dist
には、wheezy
や sid
(unstable)
などのディストリビューションのコードネームが入ります。アップストリームのリリース候補版をベースにした最新のバージョンを入手したい場合はtrunk
からチェックアウトして下さい。数百メガバイトのデータをダウンロードするのでご注意ください。
$
apt-get source -d linux
linux のアップストリームのソース (と最新の Debian パッチ) をダウンロードします。ビルドしようとしているバージョンによって APT のバージョン選択を上書きするか、かわりにpeople.debian.orgから tarball をダウンロードする必要があります。
$
cd linux
$
debian/rules orig
アップストリームのソースを展開し、Debian のパッケージとマージします。
$
debian/rules debian/control
現在ビルドすることができる様々なカーネルフレーバの定義にもとづいて、Debian パッケージの control ファイルを生成します。
$
fakeroot debian/rules
target
「公式の Debian カーネルパッケージをリビルドする」 で説明したバイナリパッケージをビルドします。
まず、新しいアップストリームバージョンの変更履歴を追加します。新しいバージョンがリリース候補版なら、バージョン文字列の
-rc
を ~rc
に変更して下さい。(Debian
のパッケージでは、サフィックス~
がプレリリース用に使われています )
'orig' tarball はgenorig.pyスクリプトによって生成されます。このスクリプトは tarball、オプションのパッチ、または kernel.org の git リポジトリへのパスを引数にとります。まず、必要なツールがインストールされているか確認します:
#
apt-get install unifdef
tarball が手元にある場合は次のようなコマンドを実行します:
$
debian/bin/genorig.py ../linux-4.3.tar.xz ../patch-4.4-rc1.xz
git リポジトリが手元にある場合は、そのディレクトリ名を引数に渡します:
$
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-4.3
$
tar xaf /usr/src/linux-source-4.3.tar.xz
$
cd linux-source-4.3
次に、カーネルの設定が必要になります。つまり、カーネルのオプションを設定しどのドライバを含めるか、ビルトインにするか外部モジュールにするか、などを決めなければなりません。カーネルのビルド機構は多くのターゲットに対応しており、異なる設定用フロントエンドを起動することができます。たとえばコンソールベースのメニュー形式の設定画面は、次のコマンドで起動でます:
$
make nconfig
nconfig
のかわりに config
(テキストベースの 1
行ずつ設定を行うフロントエンド) や、 xconfig
(グラフィカルな設定フロントエンド)
なども利用できます。古い設定ファイルは .config
ファイルとしてトップディレクトリに配置し、設定するターゲットの起動コマンドを実行するか (なにかを設定し直す場合)、make
oldconfig コマンドを実行する (設定を保持する場合)
ことで再利用できます。フロントエンドによっては、正常に動作するためにライブラリやユーティリティをインストールする必要があるかもしれないことに注意して下さい。例えば、menuconfig
フロントエンドは執筆時点では
libncurses5-dev パッケージとして提供されている
ncurses
ライブラリが必要です。
CONFIG_DEBUG_INFO オプションが無効化されている場合は (「必要なディスクの空きスペース」 参照) ビルドに必要な空きディスクスペースは少なく済みます。デバッグ情報は、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 を生成し (詳細は 7章起動用RAMイメージ (initramfs) アーカイブの管理 を参照)、 新規でインストールしたカーネルがデフォルトとなるようにブートローダを設定します。このコマンドが問題無く完了したら、
#
shutdown -r now
コマンドで再起動すると新しいカーネルで起動します。
ブートローダとその設定方法に関しての詳細は man lilo、man
lilo.conf、man
grub、などのコマンドでそれぞれのドキュメントを参照してください。ドキュメントは
/usr/share/doc/
ディレクトリから探すこともできます。package
package
には関連するパッケージ名を指定してください。
www.kernel.orgとそのミラーで配布されている 素 ("pristine" = 訳注: 原始の、汚されていない、の意) ("vanilla" と呼ばれることもあります) のカーネルソースからビルドすることは、デバッグやより新しいカーネルのバージョンが必要な場面で役に立ちます。その方法は、カーネルソースの入手方法のみが違います。Debian パッケージからカーネルソースを入手するかわりに、素のカーネルソースをブラウザでダウンロードしてくるか、wget で次のように取得します: follows:
$
wget https://kernel.org/pub/linux/kernel/v4.x/linux-4.3.tar.xz
アーカイブの整合性はそれぞれの暗号化シグネチャを検証することで確認できます。
$
wget https://kernel.org/pub/linux/kernel/v4.x/linux-4.3.tar.sign
コマンドを実行し、次のコマンドを実行してください。(gnupg パッケージがインストールされていなければなりません)
$
unxz -c linux-4.3.tar.xz | gpg --verify linux-4.3.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 xaf linux-4.3.tar.xz
$
cd linux-4.3
展開されたカーネルツリー (linux-3.4
ディレクトリ)
の設定をする準備ができました。手始めに、すでにある設定ファイルを使うと良いでしょう。
$
cp /boot/config-3.2.0-2-686-pae ./.config
設定フロントエンドのどれかを使い (make oldconfig、make config、make nconfig、などで起動します) 設定が完了したら、すでに説明した 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 つのステップ (ビルドとインストール)
は次のコマンドで 1 つにまとめることもできます:
#
m-a auto-install squashfs
で 1 つにまとめることもできます。その他のオプションと使い方について、もっと詳しく知りたい場合は、module-assistant のドキュメント (man module-assistant) を参照してください。
とても稀なケースではありますが、カーネルモジュールのパッケージをアップストリームのソースからビルドする必要があるかもしれません。その場合、モジュールをビルドするためのパッケージに付属しているドキュメントの指示に従って下さい。もしビルドプロセスの途中で現在使用中のカーネルに合わせたカーネルヘッダを含むディレクトリを指定しなければならない場合、Debian
の 素のカーネルのディレクトリは
/usr/src/linux-headers-
で、linux-headers-uname
uname
パッケージによって提供されます。ここでの uname
は uname
-r
コマンドの出力結果です。もし独自でカスタマイズしたカーネルを使っている場合は、オリジナルのビルドツリーを手元に置いておくと良いでしょう。ビルドツリー外にあるモジュールをビルドする際にも役立ちます。