ほとまるブログ

おっぱいアニメ愛好家のブログ (゚∀゚)o彡゜おっぱい!おっぱい!

VirtualBoxのビルド

はじめに

前回、カーネルのバージョンを2.6.32-5から2.6.38.3に上げたら、VirtualBoxが起動しなくなった。
試しに、ソースからビルドしてみるです。

目的

VirtualBox(x86_64)版をソースからビルドして、利用可能な状況にする

環境

Debian squeeze r.6.0.1 amd64 (自前ビルドカーネル: 2.6.38.3)

ダウンロード

http://www.virtualbox.org/wiki/Downloads からダウンロード

$ wget http://download.virtualbox.org/virtualbox/4.0.6/VirtualBox-4.0.6.tar.bz2
$ tar xf VirtualBox-4.0.6.tar.bz2
$ cd VirtualBox-4.0.6_OSE/

必要なパッケージ

足りないパッケージを一つずつ入れたので、トライ&エラー部分は省略
実は後でここに手順が書いてあることに気づいたw
( http://www.virtualbox.org/wiki/Linux%20build%20instructions ) ここの手順はすごく重要!!!

時間を無駄にした・・・まぁ何事も勉強ですから

$ sudo apt-get install bin86 bcc iasl libxml2-dev libxslt1-dev libidl-dev libcrypto++-dev
$ sudo apt-get install libssl-dev libcurl4-openssl-dev libpng12-dev libsdl1.2-dev 
$ sudo apt-get install libxcursor-dev libxinerama-dev libxrandr-dev libxmu-dev libqt4-dev
$ sudo apt-get install python2.6-dev libcap-dev gcc-multilib makeself

コンフィグ

$ ./configure --disable-hardening
Checking for environment: Determined build machine: linux.amd64, target machine: linux.amd64, OK.
Checking for kBuild: found, OK.
Checking for gcc: found version 4.4.5, OK.
Checking for as86: found version 0.16.17, OK.
Checking for bcc: found version 0.16.17, OK.
Checking for iasl: found version 20100528, OK.
Checking for xslt: found, OK.
Checking for mkisofs: found genisoimage 1.1.11 (Linux), OK.
Checking for pthread: found, OK.
Checking for libxml2: found version 2.7.8, OK.
Checking for libxslt: found version 1.1.26, OK.
Checking for libIDL: found version 0.8.14, OK.
Checking for ssl: found version OpenSSL 0.9.8o 01 Jun 2010, OK.
Checking for libcurl: found version 7.21.0, OK.
Checking for zlib: found version 1.2.3.4, OK.
Checking for libpng: found version 1.2.44, OK.
Checking for SDL: found version 1.2.14, OK.
Checking for X libraries: found, OK.
Checking for Xcursor: found, OK.
Checking for Xinerama: found, OK.
Checking for Xrandr: found, OK.
Checking for Xmu: found, OK.
Checking for Mesa / GLU: found version 1.2, OK.
Checking for Qt4: found version 4.6.3, OK.
Checking for Qt4 devtools: found version 4.6.3, OK.
Checking for Python support: found version 2.6.6, OK.
Checking for Java support: OK.
Checking for PulseAudio: found version 0.9.21 API version 12, OK.
Checking for static stc++ library: found, OK.
Checking for Linux kernel sources: found version 2.6.38, OK.
Checking for ALSA: found version 1.0.23, OK.
Checking for libcap library: found, OK.
Checking for compiler.h: compiler.h not found, OK.
Checking for 32-bit support: OK.
Checking for makeself: found version 2.1.5, OK.

Successfully generated 'hoge/VirtualBox-4.0.6_OSE/AutoConfig.kmk' and 'hoge/VirtualBox-4.0.6_OSE/env.sh'.
Source 'hoge/VirtualBox-4.0.6_OSE/env.sh' once before you start to build VBox:

  source hoge/VirtualBox-4.0.6_OSE/env.sh
  kmk

To compile the kernel modules, do:

  cd ./out/linux.amd64/release/bin/src
  make


  +++ WARNING +++ WARNING +++ WARNING +++ WARNING +++ WARNING +++ WARNING +++
  Hardening is enabled which means that the VBox binaries will not run from
  the binary directory. The binaries have to be installed suid root and some
  more prerequisites have to be fulfilled which is normally done by installing
  the final package. For development, the hardening feature can be disabled
  by specifying the --disable-hardening parameter. Please never disable that
  feature for the final distribution!
  +++ WARNING +++ WARNING +++ WARNING +++ WARNING +++ WARNING +++ WARNING +++

Enjoy!

出力された手順とwikiの手順は、微妙に違う。wikiの手順が多分正しい。エラーが発生するけど、下の「足りない...」と「PDF...」を参照

$ source ./env.sh
$ kmk all

足りないパッケージ

実はパッケージが足りずエラーが発生するので、これもインストールした。
環境によっては必要ないと思われるので、エラーが出たら一つずつ入れましょう

$ sudo apt-get install libpam0g-dev openjdk-6-jdk g++-multilib

PDFマニュアルは作らないw

PDFも自分で作らないとダメなんですかねぇ・・・読まないPDFマニュアルのために何百MBもパッケージをインストールするのは無駄なような気がしてw
マニュアルを作成するMakefileコメントアウトした

$ vi Makefile.kmk 
- include $(PATH_SUB_CURRENT)/doc/manual/Makefile.kmk
+ # include $(PATH_SUB_CURRENT)/doc/manual/Makefile.kmk

旧バージョンのVirtualBoxOSEは、apt-getでインストールしたのでapt-getで削除

$ sudo apt-get remove virtualbox-ose

インストール

$ cd ./out/linux.amd64/release/bin/src
$ make
$ sudo make install
$ cd ..

で、どこにインストールされたんだよw

$ ls /lib/modules/2.6.38.3/misc/
vboxdrv.ko  vboxnetadp.ko  vboxnetflt.ko

モジュールロード

$ sudo modprobe vboxdrv
$ lsmod |grep vboxdrv
vboxdrv              1747745  0 

http://www.virtualbox.org/wiki/Linux%20build%20instructions の手順に従って、オーナーとパーミッションを変更

$ sudo su
# for f in VirtualBox VBoxHeadless VBoxSDL VBoxBFE VBoxNetDHCP VBoxNetAdpCtl; do
  chown root.root $f
  chmod 4511 $f
done
# exit

起動してみる

$ ./VirtualBox

起動したけど、旧バージョンの設定が読み込めないようなので、新しくVMを追加した。今まで使ってたHDDイメージは、

$ sudo find / -name "*.vdi"

で探した。

試しにXPのイメージをマウントして起動したら、深刻なエラーが発生した。多分旧バージョンで中断状態だったのが原因だと思う。これはまた別の話なので、別の機会に・・・

ビルドファイルの移動

ビルドした位置が、いつもの作業場所だったのでそれらしい場所に移動する
out/linux.amd64/release/bin を /usr/local 辺りにコピーする

$ sudo cp -rp bin/ /usr/local/virtualbox
$ /usr/local/virtualbox/VirtualBox 
/usr/local/virtualbox/VirtualBox: error while loading shared libraries: VBoxVMM.so: cannot open shared object file: No such file or directory

エラー出るし

$ cd /usr/local/virtualbox
$ ./VirtualBox

だと起動するぽい
VirtualBoxの起動オプションに、カレントディレクトリを指定するものがあればいいんだけど分からないorz
何かいい方法があると思うが、疲れて来たので起動スクリプト書いて逃げるw

$ vi ~/bin/vbox.sh
+ #!/bin/sh
+ cd /usr/local/virtualbox/ && /usr/local/virtualbox/VirtualBox 
$ chmod +x ~/bin/vbox.sh 
$ vbox.sh

起動しました。今回はここで終わり。wikiの手順の存在に早く気づいて入れば、ここまで苦労しなかったはず・・・
情報戦に負けたということで、疲れたよ

カーネルヘッダーのインストール(おまけ)

wikiの必要パッケージには、カーネルヘッダーも含まれてる
2.6.38.3カーネルをビルドしたときは、ヘッダーは作らなかったのでとりあえずインストールしておく
前回作業したディレクトリに移動してビルド
※FYI → http://d.hatena.ne.jp/hotomaru/20110423/1303534214

$ fakeroot make-kpkg --revision=20110423a kernel-headers
$ cd ..
$ sudo dpkg -i linux-headers-2.6.38.3_20110423a_amd64.deb