目次
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 15 GB
space in the package directory and 300 MB in /tmp
(or
$TMPDIR
).
Building with debug info disabled requires about 2 GB and 25 MB
respectively. You can disable debug info by changing the value of
debug-info
to false
in
debian/config/defines
(or
debian/config/
in older package versions).
arch
/defines
Building all binary packages for i386 or amd64 currently requires about 50 GB space in the package directory. Other architectures with fewer drivers will require less space.
ソースパッケージには、追加のパッチを適用してビルドのプロセスを簡略化するためのスクリプトが含まれます。このスクリプトは次のコマンドで実行します:
#
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://salsa.debian.org/kernel-team/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
The kernel now needs to be configured, that is you have to set the kernel options and select the drivers which are going to be included, either as built-in, or as external modules.
It is possible to reuse an old configuration file by placing it as a
.config
file in the top-level directory. Alternately,
you can use the default configuration for the architecture (make
defconfig) or generate a configuration based on the running kernel
and the currently loaded modules (make localmodconfig).
If you reuse a Debian kernel config file, you may need to disable module signing (scripts/config --disable MODULE_SIG) or enable signing with an ephemeral key (scripts/config --set-str MODULE_SIG_KEY certs/signing_key.pem). The build will use less time and disk space (see 「必要なディスクの空きスペース」) if debug information is disabled (scripts/config --disable DEBUG_INFO). Debuginfo is only needed if you plan to use binary object tools like crash, kgdb, and SystemTap on the kernel.
The kernel build infrastructure offers a number of targets, which invoke different configuration frontends. For example, one can use console-based menu configuration by invoking the command
$
make nconfig
Instead of nconfig
one can use
oldconfig
(text-based line-by-line configuration
frontend) or xconfig
(graphical configuration frontend).
Note that different frontends may require different additional libraries and
utilities to be installed to function properly. For example, the
nconfig
frontend requires the ncurses
library, which at time of writing is provided by the
libncurses5-dev package.
設定プロセスの終了後、変更または新規に作成されたカーネルの設定は トップレベルディレクトリの .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
The unpacked kernel tree (in linux-4.3
) can now be
configured and built, in the same way described in the previous section.
カーネルモジュールのなかには、アップストリームや 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
コマンドの出力結果です。もし独自でカスタマイズしたカーネルを使っている場合は、オリジナルのビルドツリーを手元に置いておくと良いでしょう。ビルドツリー外にあるモジュールをビルドする際にも役立ちます。