Vine Linux 用の VirtualBox 1.5.4 rpm パッケージを作ってみる
私は VMware Player を愛用していますが,Mac OS X 上でも VirtualBox が使えるということで,Vine Linux 用に rpm パッケージを作ってみたくなった.
VirtualBox_1.5.4_Linux_x86.run から VirtualBox-1.5.4-0vlmp1.i386.rpm を作ってみました.デフォルトの VirtualBox_1.5.4_Linux_x86.run と異なる点は,次の 3 点です:
- VirtualBox_1.5.4_Linux_x86.run の展開先を /usr/lib/virtualbox で rpm としてまとめた.
- デフォルトのインストール先 /opt/VirtualBox-1.5.4 を /usr/lib/virtualbox へ変更した.
- /etc/vine-release を /etc/readhat-release へシンボリックリンクしなくても良いようにした.
早い話,nosrc.rpm を作りました:VirtualBox-1.5.4-0vlmp1.nosrc.rpm on so-net.
以下は単なる私のめもですので,無視ってください!
なお先人の知恵として,以下のサイトを参考にしました.
VirtualBox を Vine Linux にインストール:日々のあしあと:So-netブログ
VirtualBox のインストール方法:日々のあしあと:So-netブログ
VirtualBox のインストール方法 (2):日々のあしあと:So-netブログ
VirtualBox を 1.5.2 にアップデート:日々のあしあと:So-netブログ
VirtualBox の VM を一発起動:日々のあしあと:So-netブログ
VirtualBox-1.5.4_27034_fedora8-1.i586.rpm の解析
まずは Fedora の rpm の解析をしてみる.VirtualBox-1.5.4_27034_fedora8-1.i586.rpm をインストールしようとするも…,
# rpm -ivh VirtualBox-1.5.4_27034_fedora8-1.i586.rpm エラー: 依存性の欠如: libcrypto.so.6 は VirtualBox-1.5.4_27034_fedora8-1.i586 に必要とされています libstdc++.so.6 は VirtualBox-1.5.4_27034_fedora8-1.i586 に必要とされています libstdc++.so.6(CXXABI_1.3) は VirtualBox-1.5.4_27034_fedora8-1.i586 に必要とされています libstdc++.so.6(CXXABI_1.3.1) は VirtualBox-1.5.4_27034_fedora8-1.i586 に必要とされています libstdc++.so.6(GLIBCXX_3.4) は VirtualBox-1.5.4_27034_fedora8-1.i586 に 必要とされています rtld(GNU_HASH) は VirtualBox-1.5.4_27034_fedora8-1.i586 に必要とされています
と文句を言われたので,強制的にインストールしてみる.
# rpm -ivh --nodeps VirtualBox-1.5.4_27034_fedora8-1.i586.rpm 準備中... ########################################### [100%] 1:VirtualBox ########################################### [100%] Creating group 'vboxusers'. VM users must be member of that group! No precompiled module for this kernel found -- trying to build one. Messages emitted during module compilation will be logged to /var/log/vbox-install.log. Success! /etc/init.d/vboxdrv: Unknown system /etc/init.d/vboxdrv: line 88: begin: command not found /etc/init.d/vboxdrv: line 123: succ_msg: command not found
インストール自体は一応成功したが…,
$ rpm -qi VirtualBox-1.5.4_27034_fedora8 Name : VirtualBox Relocations: (not relocatable) Version : 1.5.4_27034_fedora8 Vendor: innotek GmbH Release : 1 Build Date: 2007年12月29日 20時13分09秒 Install Date: 2008年01月14日 17時40分51秒 Build Host: tinderdeb.intra-innotek.de Group : Applications/System Source RPM: VirtualBox-1.5.4_27034_fedora8-1.src.rpm Size : 38091371 License: VirtualBox Personal Use and Evaluation License (PUEL) Signature : (none) URL : http://www.virtualbox.org/ Summary : Powerful PC virtualization solution Description : VirtualBox is a powerful PC virtualization solution allowing you to run a wide range of PC operating systems on your Linux system. This includes Windows, Linux, FreeBSD, DOS, OpenBSD and others. VirtualBox comes with a broad feature set and excellent performance, making it the premier virtualization software solution on the market.
インストール後に走っている処理(%post)で問題があるみたい./etc/init.d/vboxdrv: Unknown system と言われているので,Vine Linux のディストリビューション名を認識していないみたい.そこで…,
# ln -s /etc/vine-release /etc/redhat-release
とすれば良いっぽい.実際に…,
# rpm -e VirtualBox-1.5.4_27034_fedora8 # rpm -ivh --nodeps VirtualBox-1.5.4_27034_fedora8-1.i586.rpm 準備中... ########################################### [100%] 1:VirtualBox ########################################### [100%] Creating group 'vboxusers'. VM users must be member of that group! No precompiled module for this kernel found -- trying to build one. Messages emitted during module compilation will be logged to /var/log/vbox-install.log. Success! #
となり,うまく %post が走ってくれる.んで,裏で何が走っているのか覗いてみると…,
$ rpm -q --scripts VirtualBox-1.5.4_27034_fedora8 preinstall scriptlet (using /bin/sh): # XXX remove old modules from previous versions find /lib/modules -name "vboxdrv\.*" 2>/dev/null|xargs rm -f 2> /dev/null postinstall scriptlet (using /bin/sh): LOG="/var/log/vbox-install.log" # remove old cruft if [ -f /etc/init.d/vboxdrv.sh ]; then echo "Found old version of /etc/init.d/vboxdrv.sh, removing." rm /etc/init.d/vboxdrv.sh fi if [ -f /etc/init.d/virtualbox ]; then echo "Found old version of /etc/init.d/virtualbox.sh, removing." rm /etc/init.d/virtualbox [ -f /sbin/rcvirtualbox ] && rm -f /sbin/rcvirtualbox fi rm -f /etc/vbox/module_not_compiled # install udev rule if [ -d /etc/udev/rules.d ]; then udev_out=`udevinfo -V 2> /dev/null` udev_ver=`expr "$udev_out" : '[^0-9]*\([0-9]*\)'` if [ "$udev_ver" = "" -o "$udev_ver" -lt 55 ]; then echo 'KERNEL="vboxdrv", NAME="vboxdrv", OWNER="root", GROUP="vboxusers", MODE="0660"' \ > /etc/udev/rules.d/60-vboxdrv.rules else echo 'KERNEL=="vboxdrv", NAME="vboxdrv", OWNER="root", GROUP="vboxusers", MODE="0660"' \ > /etc/udev/rules.d/60-vboxdrv.rules fi fi # XXX SELinux: allow text relocation entries if [ -x /usr/bin/chcon ]; then chcon -t texrel_shlib_t /usr/lib/VBox* > /dev/null 2>&1 chcon -t texrel_shlib_t /usr/lib/VRDPAuth.so > /dev/null 2>&1 chcon -t texrel_shlib_t /usr/lib/virtualbox/components/VBox*.so > /dev/null 2>&1 chcon -t java_exec_t /usr/lib/virtualbox/VirtualBox chcon -t java_exec_t /usr/lib/virtualbox/VBoxSDL chcon -t java_exec_t /usr/lib/virtualbox/VBoxVRDP fi # create users groups echo echo "Creating group 'vboxusers'. VM users must be member of that group!" echo groupadd -f vboxusers 2> /dev/null /sbin/chkconfig --add vboxdrv /sbin/chkconfig --add vboxnet if [ ! -f /lib/modules/`uname -r`/misc/vboxdrv.ko ]; then # compile problem cat << EOF No precompiled module for this kernel found -- trying to build one. Messages emitted during module compilation will be logged to $LOG. EOF if ! /usr/share/virtualbox/src/build_in_tmp install > /var/log/vbox-install.log 2>&1; then cat << EOF Compilation of the kernel module FAILED! VirtualBox will not start until this problem is fixed. Please consult $LOG to find out why the kernel module does not compile. Most probably the kernel sources are not found. Install them and execute /etc/init.d/vboxdrv setup as root. EOF touch /etc/vbox/module_not_compiled else cat << EOF Success! EOF rm -f /etc/vbox/module_not_compiled fi fi if lsmod | grep -q "vboxdrv[^_-]"; then /etc/init.d/vboxdrv stop || true fi if [ ! -f /etc/vbox/module_not_compiled ]; then depmod -ae /etc/init.d/vboxdrv start > /dev/null fi /etc/init.d/vboxnet start > /dev/null preuninstall scriptlet (using /bin/sh): if [ "$1" = 0 ]; then /sbin/service vboxnet stop > /dev/null /sbin/chkconfig --del vboxnet /sbin/service vboxdrv stop > /dev/null /sbin/chkconfig --del vboxdrv rm -f /etc/udev/rules.d/60-vboxdrv.rules rm -f /etc/vbox/license_agreed rm -f /etc/vbox/module_not_compiled fi postuninstall scriptlet (using /bin/sh): if [ "$1" -ge 1 ]; then /sbin/service vboxdrv restart > /dev/null 2>&1 /sbin/service vboxnet restart > /dev/null 2>&1 fi
postinstall でカーネルモジュールのコピーもしているが,Vine Linux で走っているカーネル用に vboxdrv.ko をビルドして入れてくれているので,問題ないっぽい.
$ find /lib/modules/ | grep vbox /lib/modules/2.6.23.1-49.fc8/misc/vboxdrv.ko /lib/modules/2.6.23.8-63.fc8/misc/vboxdrv.ko /lib/modules/2.6.16-0vl76.28/misc/vboxdrv.ko
VirtualBox-1.5.4_27034_fedora8 の MANIFEST は以下の通り.
$ rpm -ql VirtualBox-1.5.4_27034_fedora8 /etc/rc.d/init.d/vboxdrv /etc/rc.d/init.d/vboxnet /etc/vbox /lib/modules /lib/modules/2.6.23.1-49.fc8 /lib/modules/2.6.23.1-49.fc8/misc /lib/modules/2.6.23.1-49.fc8/misc/vboxdrv.ko /lib/modules/2.6.23.8-63.fc8 /lib/modules/2.6.23.8-63.fc8/misc /lib/modules/2.6.23.8-63.fc8/misc/vboxdrv.ko /usr/bin /usr/bin/VBox /usr/bin/VBoxAddIF /usr/bin/VBoxDeleteIF /usr/bin/VBoxManage /usr/bin/VBoxSDL /usr/bin/VBoxTAP /usr/bin/VBoxTunctl /usr/bin/VBoxVRDP /usr/bin/VirtualBox /usr/lib/VBoxDD.so /usr/lib/VBoxDD2.so /usr/lib/VBoxDDU.so /usr/lib/VBoxKeyboard.so /usr/lib/VBoxREM.so /usr/lib/VBoxRT.so /usr/lib/VBoxSharedClipboard.so /usr/lib/VBoxSharedFolders.so /usr/lib/VBoxVMM.so /usr/lib/VBoxVRDP.so /usr/lib/VBoxXML.so /usr/lib/VBoxXPCOM.so /usr/lib/VRDPAuth.so /usr/lib/virtualbox /usr/lib/virtualbox/VBoxDD2GC.gc /usr/lib/virtualbox/VBoxDD2R0.r0 /usr/lib/virtualbox/VBoxDDGC.gc /usr/lib/virtualbox/VBoxDDR0.r0 /usr/lib/virtualbox/VBoxManage /usr/lib/virtualbox/VBoxSDL /usr/lib/virtualbox/VBoxSVC /usr/lib/virtualbox/VBoxVRDP /usr/lib/virtualbox/VBoxXPCOMIPCD /usr/lib/virtualbox/VMMGC.gc /usr/lib/virtualbox/VMMR0.r0 /usr/lib/virtualbox/VirtualBox /usr/lib/virtualbox/components /usr/lib/virtualbox/components/VBoxC.so /usr/lib/virtualbox/components/VBoxSVCM.so /usr/lib/virtualbox/components/VBoxXPCOMBase.xpt /usr/lib/virtualbox/components/VBoxXPCOMIPCC.so /usr/lib/virtualbox/components/VirtualBox_XPCOM.xpt /usr/lib/virtualbox/kchmviewer /usr/lib/virtualbox/tstVMM /usr/share/applications /usr/share/applications/VirtualBox.desktop /usr/share/doc/VirtualBox-1.5.4_27034_fedora8 /usr/share/doc/VirtualBox-1.5.4_27034_fedora8/LICENSE /usr/share/doc/VirtualBox-1.5.4_27034_fedora8/License-1.4.html /usr/share/doc/VirtualBox-1.5.4_27034_fedora8/UserManual.pdf /usr/share/doc/VirtualBox-1.5.4_27034_fedora8/VirtualBox.chm /usr/share/doc/VirtualBox-1.5.4_27034_fedora8/VirtualBoxAPI.chm /usr/share/pixmaps /usr/share/pixmaps/VBox.png /usr/share/virtualbox (以下省略)
これで VirtualBox_1.5.4_Linux_x86.run から rpm パッケージを作る足掛かりができたかね!?
VirtualBox_1.5.4_Linux_x86.run の解析
こちらも展開して中身を覗いてみると…,
$ bash VirtualBox_1.5.4_Linux_x86.run --target /tmp/vbox Creating directory /tmp/vbox Verifying archive integrity... All good. Uncompressing VirtualBox for Linux installation........ VirtualBox Version 1.5.4 (Sat Dec 29 08:50:14 CET 2007) installation This program must be run with administrator privileges. Aborting $ cd /tmp/vbox $ ls LICENSE deffiles* routines.sh* vboxnet.sh* VirtualBox.tar.bz2 install.sh* vboxdrv.sh*
となっていました.deffiles は VirtualBox.tar.bz2 の MANIFEST で,残りのスクリプトは,install.sh で通常実行されるもので,ディストリの判定も /etc/hogehoge-release でやっています.なので,/etc/redhat-release なところを,/etc/vine-release に置換するか,/etc/vine-release の分岐を追加すれ良いですね*1.
実際に VirtualBox_1.5.4_Linux_x86.run を用いてデフォルトでインストールをしてみます.
!!!NOTE: Keeping the symbolic link /etc/redhat-release -> /etc/vine-release If you need, run "rpm -e VirtualBox-1.5.4_27034_fedora8". # bash VirtualBox_1.5.4_Linux_x86.run (or # bash install.sh) Verifying archive integrity... All good. Uncompressing VirtualBox for Linux installation........ VirtualBox Version 1.5.4 (Sat Dec 29 08:50:14 CET 2007) installation Installing VirtualBox to /opt/VirtualBox-1.5.4 VirtualBox has been installed successfully. You will find useful information about using VirtualBox in the user manual /opt/VirtualBox-1.5.4/UserManual.pdf and in the user FAQ http://www.virtualbox.org/wiki/User_FAQ We hope that you enjoy using VirtualBox. #
デフォルトだと /opt/VirtualBox-1.5.4 に入ってしまうんですね.Solaris とか昔のシステムっぽい階層構造を久しぶりにみました.これが正しいっていう方も….これは,install.sh に INSTALLATION_DIR="/opt/VirtualBox-1.5.4" とあるので,
# INSTALLATION_DIR="/usr/share/VirtualBox" bash VirtualBox_1.5.4_Linux_x86.run
とかすると,良い感じ!?になってくれるかな.
/etc/redhat-release の判定により,然るべきところへ入るようなので,VirtualBox-1.5.4_27034_fedora8-1.i586.rpm と同じスクリプトにもディレクトリ構成にもできない*2.しかしながら,Adobe Reader のような all-in-one な構成で,/etc/vine-release を見るように改造してみることに決めた.