Linux Letter Logo

こちらのサイトを参考にして、Linuxカーネルをソースからコンパイル・再構築してみました。

カーネルのダウンロード

The Linux Kernel Archives

上記のサイトからLinuxカーネルを入手します。

the linux kernel archives

仮想マシンの設定

仮想マシンの容量をデフォルトの20GBにするとコンパイル時に容量が足りなくなるので、40GBに変更しておく。

再構築したカーネルで起動する際に1GBのRAMでは足りなくなったが、あとから用意に変更可能なので変更しなくてもよし。

 

カーネルの設定

ダウンロードしたカーネルを展開した後、カーネルの設定を行います。

# cd linux-4.12.7
# make menuconfig

参考にしたサイトではmenuconfigコマンドを利用していましたが、他にも利用できるコマンドはいくつかあるようです。

make config CUIで質問に答えていく
make menuconfig CUIでメニューから選択していく
make xconfig GUIでX(KDE)で操作
make gconfig GUIでX(GNOME)で操作
※CUIならmake menuconfigが良いらしい。

menuconfigコマンドを実行するとエラーで中断。

root@ubuntu:/home/hiyosi/ダウンロード/linux-4.12.7# make menuconfig
  HOSTCC  scripts/basic/fixdep
 *** Unable to find the ncurses libraries or the
 *** required header files.
 *** 'make menuconfig' requires the ncurses libraries.
 *** 
 *** Install ncurses (ncurses-devel) and try again.
 *** 
scripts/kconfig/Makefile:201: ターゲット 'scripts/kconfig/dochecklxdialog' のレシピで失敗しました
make[1]: *** [scripts/kconfig/dochecklxdialog] エラー 1
Makefile:548: ターゲット 'menuconfig' のレシピで失敗しました
make: *** [menuconfig] エラー 2

ライブラリが足りないようで”ncurses-devel”のインストールをしてみますが該当するライブラリが見つからず。

$ sudo apt-get install ncurses-dev

こちらを参考にパッケージ名を”ncurses-dev”にしてコマンドを通したところ解決しました。

“make menuconfig”を実行すると、CUIで詳細な設定ができる画面が表示されます。

Linux Kernel menuconfig

今回はデフォルト設定のままconfigファイルを”save”して”exit”しました。

コンパイル

先程保存したconfigファイルの情報を元に、Linuxカーネルのソースファイルをコンパイルします。

カーネル本体

まず、カーネル本体?をコンパイルします。

root@ubuntu:/home/hiyosi/ダウンロード/linux-4.12.7# make

scripts/sign-file.c:25:30: fatal error: openssl/opensslv.h: そのようなファイルやディレクトリはありません
compilation terminated.
scripts/Makefile.host:107: ターゲット 'scripts/sign-file' のレシピで失敗しました
make[1]: *** [scripts/sign-file] エラー 1
Makefile:562: ターゲット 'scripts' のレシピで失敗しました
make: *** [scripts] エラー 2

makeコマンドでコンパイルすると、”fatal error: openssl/opensslv.h: そのようなファイルやディレクトリはありません”と表示され、致命的なエラーで中断されました。

openssl/opensslv.hというヘッダファイルがないのが問題らしい。

こちらのサイトを参考にして、ヘッダファイルをインストールします。

$ sudo apt install libssl-dev

makeコマンドが正常に実行され、ソースファイルがコンパイルされました。

モジュール

次にモジュールをコンパイルします。

# make modules

モジュールのインストールも行います。

# make modules_install

インストール

いよいよカーネルをインストールします。

# make install

このコマンドで/bootに新しいファイルがいくつか追加され、ブートローダのgrubの設定ファイルもデフォルトで書き換えられるようです。

再起動

再起動を実行して新しいLinuxカーネルを立ち上げます。

# reboot

 

新しいLinuxカーネルで立ち上げるとカーネルパニックが発生してフリーズしました。

Linux カーネルパニック

-- [ end kernel panic - not syncing : Out of memory and no killable processes...

今回は仮想マシンのRAMの割り当てを1GBから2GBに変更したところ、Linuxカーネルが起動しました。

仮想マシン RAM 2GB

 

新しいカーネルが起動後、unameコマンドでカーネルのバージョンを確認します。

Linuxカーネルの再構築

// カーネル変更前
$ uname -r
4.4.0-21-generic

// カーネル変更後
# uname -r
4.12.7

カーネルのバージョンが変わったことを確認できました。

終わりに

分かりやすいサイトを参考にしたので多少のエラーはありましたが、比較的簡単にLinuxカーネルを再構築することができました。

自分で触れるような小さな変更などから始めてみようと思います。

 

Linuxカーネルをソースからコンパイル・再構築する
Tagged on:     

コメントを残す