2013年7月1日月曜日

VMware上のlinuxでカーネルの再構築 その2 ビルドしちゃうよ編

作業ディスクの準備が出来たので早速カーネルを構築します。

3.8からHyper-V用のballoonドライバが入っているのですが、ちょっと試しにつっこんでみたところ、これにはちょっと問題がありました。

というのも確かに管理画面から見ると拡張RAMに対応してそうに見えるのですが、いくら最大値を設定していても起動時のメモリより多い方向には自動動的割り当てが走りません。これが出来るのは3.10からとの事。

で、丁度昨日(2013/6/30)に3.10の正式版がリリースされている様なのでせっかくなのでこいつを入れてみます。

まずはビルド用の前準備(開発環境とカーネルの設定、パッケージ作成に必要なものをそろえる)


$ sudo aptitude install build-essential
$ sudo aptitude install ncurses-dev
$ sudo aptitude install kernel-package


ソースは3.10の物をkernel.orgから落としてきて・・・


$ cd /usr/src
<ソースをコピーしておいて>
$ sudo tar Jxvf linux-3.10.tar.xz


展開します。必要なのか分からないけどlinuxという名前でリンクを作成。


$ sudo ln -s linux-3.10 linux


さぁ作業開始です


$ cd linux
$ sudo make mrproper
$ sudo make defconfig
$ sudo make menuconfig


ここでカーネルの構成を設定するのですが以下のポイントで設定しています


  • 初期状態だと不要だと思うけど全部設定を消す
  • 初期設定を揃える?為にdefconfigを設定してから開始
  • Hyper-Vに関連する部分は全て有効に


最終的な目標はHyper-V用の不要なドライバーを完全カットして、かつチューニングされたカーネルなわけですが、知識が足りていな過ぎて何をどう削ったらいいのかさっぱりわからない状況。

ヘルプを見るとなんとなくalldefconfig(デフォルト設定)をベースに設定すべきな気がするけど、試しにやってみたらドライバだけではなくカーネル系も殆ど何も無い状況になってしまって流石に設定ダルイ気がしたので・・・とりあえずdefconfigベースにしました。

で、問題はHyper-V関連の設定。このmenuconfigは依存関係のある物はコアの物を有効にすると初めて項目が現れる様なので手順通りにやらないと設定できません。とりあえずHyper-V関連は以下の手順で良いと思いますがチューニングという意味では色々足りなかったり多かったりするはず。今後煮つめていきます。



Processor type and features  --->
  [*] Linux guest support  --->
    [*] Enable paravirtualization code


にチェックするとHyper-Vの項目の設定が出来る様になるので(厳密にはparavirtualization codeはいらないかも)


Device Drivers  --->
  Microsoft Hyper-V guest support  --->
    <*> Microsoft Hyper-V client drivers
    <*>   Microsoft Hyper-V Utilities driver
    <*>   Microsoft Hyper-V Balloon driver


なんとなくHyper-V系の設定を一式ビルトインで設定

ここまで設定すると


Device Drivers  --->
  HID support  --->
    Special HID drivers  --->
      <M> Microsoft Hyper-V mouse driver


Device Drivers  --->
  Graphics support  --->
    -*- Support for frame buffer devices  --->
      <M> Microsoft Hyper-V Synthetic Video support


Device Drivers  --->
  [*] Network device support  --->
    <*> Microsoft Hyper-V virtual network driver



この辺を選べるようになるので設定する。基本サーバとして使う場合はネットワークは必須、HIDとVideoは多分いらないでしょう。

defconfigにここだけ設定したらとりあえずカーネルを作ってみます。

単純にビルド、自分のマシンに入れる場合はmake installで良いのですが、今回はここで作成したものをHyper-V上のdebianに入れるのが最終目標なのでmake-kpkgを使います。


$ time sudo make-kpkg kernel_image


これで「linux-image-3.10.0_3.10.0-10.00.Custom_amd64.deb」みたいなカーネルのインストール用パッケージが一つ下の階層(/usr/src)に作成されます。頭のtimeはビルド時間を測る為の物。本当は--revisionとか名前は何かつけるべきなんだろうけど今回は省略(というか長い名前ついてしまってビビったのでちょっと研究してから・・・)

これを入れて早速チェックしたんですが


$ scp linux-image-3.10.0_3.10.0-10.00.Custom_amd64.deb <username>@<host>:/home/<username>


とかやって入れたいマシンにコピーして、そのマシンにつないでから


$ sudo dpkg -i linux-image-3.10.0_3.10.0-10.00.Custom_amd64.deb


とかやって入れてやるとブートローダの設定までしてくれちゃうので再起動します。

が・・・


CentOS6.4やKernel3.8+balloonの時と同じで起動メモリ以上は自動的に増えねぇ・・・orz


さーってどうすっかな・・・


1 件のコメント:

  1. 今日、Gentooのstableにkernel 3.10が降りてきてHyper-V回りでハマはまっていたのですが
    このmenuconfigのセッティング例のおかげで、無事解決出来ました。

    ありがとうございました。

    返信削除