突然消失するかもしれないブログ

”とつきえブログ”

VMware Fusion 2.0.4でDebian Squeezeをインストール

VMware Fusion 2.0.4上のDebian 5.0 Lennyでは、apt-get installで取得したOpen VMware Toolsのパッケージをインストールすることはできるのですが、VMware用のカーネルモジュールをinsmodするとエラーが出て組み込めません。

これは、Lenny用のLinuxカーネルパッケージがビルドされているgccのバージョン4.1.3、ヘッダの環境と、Lennyのgccのバージョン4.3.3が異なるためです。

また、LinuxカーネルとOpen VMware Toolsをソースコードからビルドすれば、VMware用のカーネルモジュールをinsmodした時のエラーは出なくなるはずなのですが、Lennyの環境だとOpen VMware Toolsが要求するライブラリが古いらしく一部機能が無効になってしまいます。

Squeezeにアップグレードすれば、一部機能の制限なくOpen VMwareをコンパイルできます。

また、本家VMware社のVMware Toolsをインストールする場合でも、Linuxカーネルのソースコードからビルドする必要があるため、Linuxカーネルのビルド方法をまとめます。

 

<Debian 5.0 Lennyの仮想マシンイメージの入手方法>

Ubuntuでは、Ubuntuの公式の仮想マシンイメージが配布されていますが、Debianでは配布されていません。

そこで、VMwareが運営しているVirtual Applicance Marketplaceから、Debian 5.0 Lennyの仮想マシンイメージを入手します。

同じようなものが沢山あるので、どれでも良いと思うのですが、検索して最初の方にヒットしたものを使用しました。

Debian 5.0 Lenny GNOME Desktop | Virtual Appliance Marketplace

ググるとLINHOSTのものを使用している方を見かけたのでこれで良いかと。

ちなみに、上記の仮想マシンイメージでは、Open VMware Toolsが使える状態になっていないのが残念です。

また、VMware社のVMware Toolsは、VMwareの製品を購入しているユーザしか手に入れられないものなので組み込まれていないのも仕方ないですかね。

 

<Linuxカーネルのビルド方法>

Linuxカーネルをビルドするには、以下のサイトが参考になりますので、まず、一読されることをおすすめします。

デビアン(Debian)/カーネル再構築 – Project
ソースパッケージからのリビルド(UNIXな生活)
・Debian流Linuxカーネル構築法
http://www.foxking.org/oldsite/pc/kernel-deb.html

 

(0)ビルド環境を揃える。

Linuxカーネルをビルドするには、以下のパッケージが必要になるので、あらかじめインストールしておきます。

apt-get install kernel-packag
apt-get install build-essential libgtk2.0-dev
apt-get install libncurses-dev ncurses-dev libqt3-mt-dev
apt-get install libc6-dev
apt-get install ccache

Open VMware Toolsをビルドする時は、以下のパッケージが必要になります。必要なパッケージは、Open VMware Toolsのバージョンに依存するのであくまで参考です。

恐らく、VMware社のVMware Toolsをインストールする場合は必要ないかもしれません。

apt-get install autotools-dev libicu-dev libpam0g-dev liburiparser-dev
apt-get install libproc-dev libdumbnet-dev xorg-dev
apt-get install libgtkmm-2.4-dev
apt-get install quilt

 

(1)動作しているLinuxカーネル、ビルドに使用したgccのバージョンを調べる。

Lennyを最新の状態にアップデートすると、Linux 2.6.26でアペンドバージョンが”-2-686”になっているはずです。アペンドバージョンはDebianが独自に付加しているものです。

また、ビルドに使用したバージョンはgcc 4.1.3であることがわかります。

Linux version 2.6.26-2-686 (Debian 2.6.26-15) (dannf@debian.org) (gcc version 4.1.3 20080704 (prerelease) (Debian 4
.1.2-25)) #1 SMP Thu Mar 26 01:08:11 UTC 2009

今回は、Debian Lenny, Squeezeのデフォルトのgcc 4.3.3を使用してカーネルをビルドします。

(2)動作しているLinuxカーネルのソースコードを取得する。

以下のようにすれば、動作しているLinuxカーネルのパッケージ名がわかります。

$ dpkg -l | grep linux-image
ii  linux-image-2.6.26                   2.6.26-10.00.Custom         Linux kernel binary image for version 2.6.26
ii  linux-image-2.6.26-1-686             2.6.26-13lenny2             Linux 2.6.26 image on PPro/Celeron/PII/PIII/
ii  linux-image-2.6.26-2-686             2.6.26-15                   Linux 2.6.26 image on PPro/Celeron/PII/PIII/

apt-get source パッケージ名で、Linuxカーネルのソースコードを取得できます。

$ cd /usr/src
$ su
# apt-get source linux-image-2.6.26-2-686
# ln –s linux-2.6-2.6.26 linux

以後は、/usr/src/linux-2.6-2.6.26からシンボリックリンクをはったlinuxディレクトリで、Linuxカーネルのビルド作業を行うことになります。

ちなみに、/usr/src/linux-2.6-2.6.26のフォルダはすでにDebianのパッチが適用されたファイルが置かれています。

 

(3)Linuxカーネルをビルドする。

# cd /usr/src/linux-2.6-2.6.26

ゴミが含まれているかもしれませんので、make-kpkg cleanでパッケージを初期化します。ビルドに失敗した場合などでパッケージを初期化する際に使用します。

# make-kpkg clean

いよいよビルドを実行します。

# time CONCURRENCY_LEVEL=4 MAKEFLAGS="CC=ccache gcc" make-kpkg –append-to-version "-9-686" –initrd kernel-image

make-kpkgコマンドが、カーネルをビルドするためのDebianのコマンドです。

–append-to-versionで、既存のカーネルパッケージとパッケージ名がぶつからないように指定します。既存のカーネルパッケージとぶつかってしまった場合、上書きされてしまいます。

生成されたカーネルイメージに不具合があった場合、Linuxが起動できなくなってしまうため、別名にしておいた方が無難です。

環境変数CONCURRENCY_LEVELで、並列コンパイル数を指定します。ここでは4を指定しているので、最大で4並列でコンパイルされます。

また、ccasheコマンドを指定することにより、gccのコンパイル結果がキャッシュされ、並列コンパイルとあわせて高速化が期待できます。

ちなみに、カーネルパッケージ以外のビルドを行う場合は、以下のコマンドをじっこうすることで、自動でパッケージをソースコードからビルドすることができます。

dpkg-buildpackage -rfakeroot -uc -b

 

(4)生成されたカーネルパッケージをインストールする。

生成されたパッケージは、/usr/srcに生成されていますので、これをdpkg –iでインストールします。

# dpkg –i /usr/src/linux-image-2.6.26-9-686_2.6.26-9-686-10.00.Custom_i386.deb

ここで注意事項があります。kernel-package 12.013から、Linuxカーネルイメージ起動時に必要なinitrdイメージが自動では生成されなくなったようです。

例えば、この場合だと、/boot/initrd.img-2.6.26-9-686が作成されていないことがあるので、きちんと生成されているかどうかを必ず確認する必要があります。

Debianでは、デフォルトではext3ファイルシステムのドライバがデフォルトではカーネルモジュールとして生成され、Linuxカーネルイメージには静的に組み込まれていません。もし、initrdイメージがないと、ext3カーネルモジュールなどが含まれたinitrdイメージを読み込むことができず、Linuxカーネル起動時にpanic(パニック)してしまい、起動不能になってしまいます。

ですので、以下の対策を行います。

Debian/カーネルの再構築 – blogn.hirokasa.jp::Linux

どうやら下記でオチがついたようだ。
kernel-package 12.013 から、postinst時にupdate-initramfsが実行されない。
よって

cp /usr/share/doc/kernel-package/examples/etc/kernel/postinst.d/initramfs /etc/kernel/postinst.d/

で以前と同様になる。

また、上記でもうまくinitrdイメージが自動で生成されなかった場合は、Linuxカーネルイメージのパッケージインストール後、手動で生成することもできます。

# cd /boot
# mkinitramfs -o initrd.img-2.6.26-9-686 /lib/modules/2.6.26-9-686

initrd-tools が廃止され,initramfs-tools が推奨になりました

の情報によると、mkinitrdコマンドが廃止されたようなので、mkinitramfsという新しいコマンドを使用します。

initrd イメージを作成するコマンドは,mkinitrd から mkinitramfs に変更になりました.

 

ちなみに、カーネルのビルドには、Core2Duo 2.4GHz 2GBメモリのVMware Fusion 2.0.4の環境で、1時間弱かかりました。

real    52m45.226s
user    38m53.378s
sys     7m19.071s

 

<VMware Toolsをインストール方法>

(0)VMware Toolsのバージョンを確認する。

VMware Fusion 2.0.4で提供されいている、VMware Toolsの最新のバージョンは、VMwareTools-7.9.3-159196.tar.gzです。

(1)VMware Toolsのソースコードを展開してビルドする。

今回は、Debian Lenny, Squeezeのデフォルトのgcc 4.3.3を使用してカーネルをビルドしていますので、VMware Toolsをインストールするときも、gcc 4.3.3を使用します。これは、VMware Toolsのカーネルモジュールをビルドするgccのバージョンとカーネルをビルドしたgccのバージョンをあわせるためです。

gccのバージョンがあっていないと、VMware Toolsのカーネルもージュールをinsmodするときに、「フォーマットが違う・・・」など怒られて、カーネルに組み込めませんので注意が必要です。

# tar xvfz VMwareTools-7.9.3-159196.tar.gz
# cd vmware-tools-distrib
# perl vmware-install.pl

vmware-install.plはrootユーザで実行する必要があります。後はいつもどおり質問にこたえていくだけです。

なにかエラーが出たら、ビルドに必要なパッケージが不足している可能性があるので、指摘されたとおり不足しているパッケージをインストールします。

(2)ビルドされたカーネルモジュールを確認する。

# cd /lib/modules/2.6.26-9-686/misc
# ls –al

lrwxrwxrwx 1 root root    40 2009-06-07 23:00 vmblock.ko -> /lib/modules/2.6.26-9-686/misc/vmblock.o
-rw-r–r– 1 root root 18408 2009-06-07 23:00 vmblock.o
lrwxrwxrwx 1 root root    37 2009-06-07 23:01 vmci.ko -> /lib/modules/2.6.26-9-686/misc/vmci.o
-rw-r–r– 1 root root 34430 2009-06-07 23:01 vmci.o
lrwxrwxrwx 1 root root    39 2009-06-07 22:57 vmhgfs.ko -> /lib/modules/2.6.26-9-686/misc/vmhgfs.o
-rw-r–r– 1 root root 46680 2009-06-07 22:57 vmhgfs.o
lrwxrwxrwx 1 root root    41 2009-06-07 22:56 vmmemctl.ko -> /lib/modules/2.6.26-9-686/misc/vmmemctl.o
-rw-r–r– 1 root root 11093 2009-06-07 22:56 vmmemctl.o
lrwxrwxrwx 1 root root    39 2009-06-07 23:01 vmsync.ko -> /lib/modules/2.6.26-9-686/misc/vmsync.o
-rw-r–r– 1 root root  7171 2009-06-07 23:01 vmsync.o
lrwxrwxrwx 1 root root    39 2009-06-07 22:57 vmxnet.ko -> /lib/modules/2.6.26-9-686/misc/vmxnet.o
-rw-r–r– 1 root root 20468 2009-06-07 22:57 vmxnet.o
lrwxrwxrwx 1 root root    38 2009-06-07 23:01 vsock.ko -> /lib/modules/2.6.26-9-686/misc/vsock.o
-rw-r–r– 1 root root 38029 2009-06-07 23:01 vsock.o

vmblock.o  vmci.o  vmhgfs.o  vmmemctl.o  vmsync.o  vmxnet.o  vsock.oの7つのモジュールが作成されていればOKです。(実験的なモジュールもインストールしています)

(3)X11の設定を変更する。

VMware Toolsをインストールしても、Debian Lenny, SqueezeではなぜかマウスがゲストOSとホストOS間でシームレスな移動ができません。

そこで、下記の情報を参考に不足しているmdetectパッケージの追加と、/etc/X11/xorg.confを修正します。

 

ポイントとしては、以下の3つです。

・VMware Toolsのマウスを使用するには、X11のvmmouseというドライバが必要である。

・vmmouseを認識するには、vmmouse_detectから呼ばれるmdetectというコマンドが必要である。

・/etc/X11/xorg.confのvmmouseの設定のところに、optionで、「CorePointer」の指定が必要である。

 

・[Linux] Ubuntu 9.04 Jaunty Jackalope を VMWare Player で動かすとマウス統合が動かない問題の解決法
http://d.hatena.ne.jp/methane/20090408/1239164932

原因は、 xserver-xorg-input-vmmouse が マウスが vmmouse かどうかを判定するのに vmmouse_detect というコマンドを使っているんだけど、そのコマンドが存在しないこと。

・VMWARE ToolsをDebian(lenny)にインストール
http://www.posttips.net/main/getpage.php?id=1228093883_1235533081

Section "InputDevice"
        Identifier      "VMware Mouse"
        Driver          "vmmouse"
        Option          "CorePointer"
        Option          "Device" "/dev/input/mice"
        Option          "Emulate3Buttons"       "true"
        Option          "ZAxisMapping"  "4 5"
EndSection

 

<再起動して動作を確認する>

システムを再起動して、DebianとVMware Toolsが正常に動作していることを確認します。

VMware Toolsが正常に動作していれば、

・ゲストOSとホストOS間でシームレスな移動ができる。

・ゲストOSとホストOS間でファイルのドラッグアンドドロップができる。

・ゲストOSとホストOS間でファイル共有ができる。(Debian側では、/mnt/hgfsディレクトリが共有フォルダになります。)

今回は、二日間、DebianとVMware Toolsにかかりっきりになってしまいましたが、いろいろと勉強になりました。

<おまけ>

DebianのLinuxカーネルイメージでは、デフォルトで準仮想化(パラバーチャ来ぜーション、paravirtualization)が有効になっていますので、以下のサイトを参考に、.vmxファイルに「vmi.present = "TRUE"」を追記すれば、準仮想化環境で、Debianを使用することができるようになります。

・VMware Fusionで準仮想化環境を利用する
http://toshi3.cocolog-nifty.com/blog/2007/09/vmware_fusion_5fc4.html

.vmxファイル

vmi.present = "TRUE"

準仮想化環境で使用すると、LinuxのI/Oのオーバーヘッドが軽減され、性能が向上します。

 

<他、参考にさせて頂いたサイト>

・Linuxカーネルのビルド関連

VMwareでLinuxカーネルのデバッグ – より良い環境を求めて

・VMware Toolsのビルド関連

兩儀.com – VMware fusionへのubuntu 8.04 のインストール (xubuntu 8.04でも確認済み)

lenny と VMware Tools

Software/LinuxKernel – Debian GNU/Linux スレッドテンプレ

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。