作業ディスクの準備が出来たので早速カーネルを構築します。
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
さーってどうすっかな・・・