とても便利な仮想マシンでカーネルをコンパイルしてみたい!
最近カーネル周りの記事を書いてみてるんですが、正直自分で理解しぎれていない部分が多数あります。
ソースを読むことから入ろうと思ったので試してみてますが、実際の挙動が把握できていない上にC言語もアセンブリも分からない私にはハッキリ言って敷居が高すぎる気がします。
そこでカーネルのコンパイルを自分で試すことで、その際の設定や動きを確認しながら進めることで少しでもカーネルのなんたるかを知ることに繋がれば・・・と思います。
が、手元にない我がサーバ上で試すのは怖いですしここはWin端末に入れたOracle VirtualHost上のUbuntuを使って試してみることにしました。これなら万が一失敗して起動しなくなっても仮想マシンを作り直せばすみますし、テスト環境としてはこの上ないと思います。
調べた感じでは仮にコンパイルに失敗しても起動時にブートローダが動いてる段階で使うカーネルを選べるので、最悪元のカーネルを使ってマシンを起動することは可能なようですがリモート環境のサーバでは怖くて試せませんw
よってここは仮想マシンをフル活用してみたいと思います。
まずはカーネルのソースをダウンロード
さっそくカーネルのソースをダウンロードします。今回(14'10/12現在)試すことにしたのは「3.16.5」。先日、ソースを読もうとチャレンジしたときよりもまた新しいバージョンになっています。一世代前がサーバ上にはありますが、今回は手元の仮想マシンに改めてダウンロードします。
以下のように端末上でコマンドを入力してダウンロードします。
# wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.16.5.tar.xz
サーバでダウンロードしたときは、実家の回線が光なので割りと早かったんですがWiMAX(しかもあまり電波状況はよくない僻地・・・)では10分程度かかりました。
ダウンロードしたファイルを移動して展開する
次は圧縮ファイルを展開するんですが、基本的にカーネルの保存場所は「/usr/src/」ディレクトリ以下ということなので以下のとおりファイルを移動して展開していきます。
ファイルを移動する # mv ./linux-3.16.5.tar.xz /usr/src/linux-3.16.5.tar.xz /usr/src/ディレクトリへ移動して圧縮ファイルを展開 # cd /usr/src/ /usr/src/ # tar Jxvf ./linux-3.16.5.tar.xz
これで所定の場所にカーネルのソースが展開されました。展開したディレクトリの所在を確認したら、ダウンロードした圧縮ファイルは消してしまいます。
# ls -l ./ # rm -rf ./linux-3.16.5.tar.xz
続いては実際にコンパイルに入りたいところですがその前に各種パラメータの設定を行う必要があるみたいで、しかもそれが結構長くなりそうなので今日はここまでにします。
まとめ
今日お勉強したことは
- 配布されているカーネルのソースコードを入手してコンパイルすることで、使用しているLinuxに新しいカーネルを導入できる
- 導入したカーネルはブートローダで選ぶことができる。万が一設定に失敗したら元のカーネルを使えば問題ない?
- ダウンロードできるカーネルのソースは結構古いものから最新のものまで様々
- 基本的にカーネルは「/usr/src/」ディレクトリにおくべし
- (ついでだけど)~.tar.xzで圧縮されたファイルは「tar Jxvf」で展開(~.tar.gzだと「tar zxvf」)
といったところです。
続いては実際のコンパイル作業を行いたいのですが、カーネルパラメータの設定がとても項目が多く難しそうな気配がします。
ま、失敗しても仮想マシン上の話だし、色々試してみたらいいんじゃないかと。失敗して覚えることも沢山あるでしょうから。