LinuCレベル2 201試験の出題範囲「2.01.4 Linuxカーネルのコンパイル」の技術的内容についての解説をまとめました。
重要度 2 概要 Linuxカーネルの特定の機能を必要に応じて取り込んだり無効化するために、カーネルを適切に構成できる。また、必要に応じてLinuxカーネルをコンパイルし、新しいカーネルに変更点を書き込み、initrdイメージを作成し、新しいカーネルをインストールできる。 詳細 /usr/src/linux//usr/src/linux/.configカーネルの MakefileKernel 2.6.x、3.x、4.x、5.x のmakeのターゲット。all, config, xconfig, menuconfig, gconfig, oldconfig, mrproper, bzImage, modules, modules_install, rpm-pkg, binrpm-pkg, deb-pkgカーネル構成をカスタマイズする。新しいカーネルおよび適切なカーネルモジュールを構築する。/lib/modules/kernel-version/, gzip, bzip2新しいカーネルおよび必要なモジュールをインストールする。module tools, depmodブートマネージャが新しいカーネルおよび関連付けられたファイルを探せるようにする。モジュールの構成ファイルDKMS を使用してカーネルのモジュールをコンパイルする。dkmsinitrd を構成する。Dracut,mkinitrd, mkinitramfs

ソースからのカーネルのビルドとインストール
makeコマンドの概要
| makeコマンド | 意味 |
|---|---|
| make config | 対話的に(質問形式で)設定を行う |
| make menuconfig | ターミナル上のGUIで設定を行う |
| make xconfig | X上のGUIで設定を行う |
| make defconfig | デフォルト状態の設定ファイルを作る |
| make oldconfig | 現在のカーネルの設定を引き継ぐ |
| make cloneconfig | (oldconfigと同じ) |
| make allyesconfig | すべての設定項目にyesを設定する |
| make allnoconfig | ほとんどの設定項目にnoを設定する |
| make randconfig | 設定項目にランダムな値を設定する |
| make clean | 設定ファイルを除いて一時ファイル等を削除 |
| make mrproper | 設定ファイルを含めて一時ファイル等を削除 |
| makeコマンド | 意味 |
|---|---|
| make all | カーネルとモジュールをビルド |
| make install | ビルドしたカーネルをインストール |
| make modules | カーネルモジュールをビルド |
| make modules_install | カーネルモジュールをインストール |
| make rpm | ビルド後にrpmパッケージ化 |
| make rpm-pkg | ソースを含むrpmパッケージを作る |
| make binrpm-pkg | バイナリrpmパッケージを作る |
| make deb-pkg | Debianパッケージを作る |
FHS(FileSystem Hierarchy Standard)の概要
FHS(FileSystem Hierarchy Standard)は、Linuxのディレクトリ構成を定めた基準仕様のことです。例えば、/etcディレクトリに対して設定ファイルを保存しておくことにするなど、Linuxのディレクトリをどのように使うかという基準がFHSです。FHSの Hierarchy は階層を意味します。
「FHS」は、Linux(などのUNIX系OS)の標準的なディレクトリ構成を定めた標準仕様です。たとえば「/etcディレクトリには設定ファイルを置きましょう」など、ディレクトリの名前や構成、ファイルの名前などについての「標準」です。

/usr/src の概要
/usr/src/ は、カーネルのソースやビルドに必要なファイル・ディレクトリが保存されているディレクトリです。
「/usr/src」ディレクトリには、「プログラムのソースコード」が置かれます。カーネルのコンパイルを行う際に、ダウンロードしたカーネルのソースコードをこのディレクトリの下に配置したことがある、という経験のある方も多いのではないでしょうか。もちろん、Linuxカーネルだけでなく、インターネットなどから入手したソフトウェアをソースコードからコンパイルする場合、このディレクトリに配置することが慣例になっています。

初期RAMディスク
初期 RAM ディスクは、システム起動時に仮の環境としてまずメモリ上にファイルシステムを展開し、そこでカーネルを動作させてから本来のファイルシステムをルートにマウントし直す、といった段階的なブートを実現する機能のことです。
初期RAMディスクは、Linux起動時に以下のような順番で動作します。
- 電源投入
- BIOS/UEFIの起動
- ブートローダ(GRUB,GRUB2..)
- カーネル(vmlinuz)とinitramfs(初期RAMディスク)の読み込み
- カーネルの実行
- initramfs(初期RAMディスク)の実行
- initの実行(SysVinit,Systemd..)
初期RAMディスクのイメージファイル形式は2種類あります。initrd 形式と initramfs 形式です。
初期 RAM ディスクイメージの作成方法
初期 RAM ディスクイメージの作成方法を解説します。
mkinitrdコマンド と mkinitramfsコマンド
initrd 形式はマウント可能なファイルシステムイメージを gzip 圧縮したものです。
なので、gzip -d や gunzip コマンドで gzip を解凍した後、mount でマウントを行えば、イメージ内のディレクトリ・ファイルを参照することができます。
ただし、イメージファイルをマウントするためには、マウントオプションでループバック形式であることを伝える必要があります。これを行うためには mount -o loop のようにオプションを指定します。
initramfs 形式のイメージは cpio アーカイブを gzip 圧縮したものです。
initramfs 形式の初期 RAM ディスクイメージをgunzip コマンドで解凍した後、cpio コマンドでアーカイブからファイルへの書き出しを行えば、イメージ内のディレクトリ・ファイルを参照することができます。
DKMS(Dynamic Kernel Module Support)の概要
DKMS(Dynamic Kernel Module Support)は、カーネルと独立して自動的にカーネルモジュールを更新するための機能です。
参考資料
本記事を作成するために使用した参考資料を掲載します。
