异想天开

What's the true meaning of light, Could you tell me why

ubuntu 16.04编译Virtualbox

日期:2017-03-11 20:50:18
  
最后更新日期:2017-10-18 09:42:17
编译过程颇费周折,记录一下。
1. 安装依赖包
参考1指出需要安装如下安装包,若已经安装则忽略
[code lang="cpp"]
for i in python-pip \
libvpx-dev libvpx3 qt4-default qt4-linguist-tools \
nasm yasm \
qt5-default libqt5x11extras5 libqt5x11extras5-dev qttools5-dev-tools \
gcc g++ bcc iasl xsltproc uuid-dev zlib1g-dev libidl-dev \
libsdl1.2-dev libxcursor-dev libasound2-dev libstdc++5 \
libhal-dev libpulse-dev libxml2-dev libxslt1-dev \
python-dev libqt4-dev qt4-dev-tools libcap-dev \
libxmu-dev mesa-common-dev libglu1-mesa-dev \
linux-kernel-headers libcurl4-openssl-dev libpam0g-dev \
libxrandr-dev libxinerama-dev libqt4-opengl-dev makeself \
libdevmapper-dev default-jdk python-central \
texlive-latex-base \
texlive-latex-extra texlive-latex-recommended \
texlive-fonts-extra texlive-fonts-recommended \
ia32-libs libc6-dev-i386 lib32gcc1 gcc-multilib \
lib32stdc++6 g++-multilib ;
do
apt-get install -y $i
done
[/code]
这里的依赖包遇到一个问题,老是提示Qt 5 not found。明明我系统里面有一个Qt 5,只是环境目录不同,使用LIBRARY_PATH指定库目录和CPLUS_INCLUDE_PATH指定头文件目录, 还是提示Qt 5 not found, 后面还试了configure时指定qt目录,依然不行。继续使用系统Qt 5的安装目录,报错信息为Qt 5没有正确配置。只能卸载了Qt 5后, 重新安装后,该问题消失。

2. 下载源码
http://download.virtualbox.org/virtualbox/5.1.14/VirtualBox-5.1.14.tar.bz2
tar jxf VirtualBox-5.1.6.tar.bz2

3.配置并编译VirtualBox。想着Virtualbox既然使用Qt来做界面渲染,就取消了java的编译选项,否则需要下载java的sdk。
./configure --disable-java
source ./env.sh
kmk all
注意官网的编译选项有一个--disable-hardening,该选项猜想应该是硬编码了某些目录。比如这样编译出来的安装目录要放到/opt/Virtualbox里面,否则会出错,应该为硬编码了。

4. 编译内核模块
cd out/linux.amd64/release/bin/src
make
make install
modprobe vboxdrv

5.测试virtualbox
前面没有使用--disable-hardening,这里需要将编译后的bin目录,拷贝为/opt/Virtualbox
即:
cp -R /home/zhuangbian/VirtualBox-5.1.14/out/linux.amd64/release/bin /opt/Virtualbox
为了测试方便,后面这些步骤切换为root了。
这里还踩几个坑:
1. /opt/Virtualbox不能为软链接,刚开始是设置软链接,出现:
Failed to load R0 module /opt/VirtualBox/VMMR0.r0: Symlinks are not permitted: '/opt/VirtualBox' (VERR_SUPLIB_SYMLINKS_ARE_NOT_PERMITTED)报错。

2. Virtualbox内核模块版本
由于之前自己apt-get安装了Virtualbox,需要将之前的Virtualbox卸载掉,同时清除掉apt-get remove virtualbox-dkms,然后重新安装编译好的virtualbox内核模块即可。加载内核模块,/opt/Virtualbox//loadall.sh
/opt/Virtualbox/Virtualbox测试正常。

参考:
1. https://my.oschina.net/u/589570/blog/789045
2. https://www.virtualbox.org/wiki/Linux%20build%20instructions