以前做过一个流控设备,基于CentOS系统,加载自定义的核心内核模块进行包过滤、识别、分流等功能。当时的版本“母鸡”是在VMWare里面建立的一个虚拟机,存储设备每次就是往CF卡里面复制一个镜像。
后来核心模块引擎出问题,需要让“宝岛”公司调试模块的,竟然让我把虚拟机镜像文件发到海峡对岸。我说,CentOS本来是谁都可以下载的,告诉对方我们用的哪个内核版本就可以,对方编译后就是我们现在用的环境。但领导说,还是把镜像发过去吧。。。
我用一个周末发送过去了,使用的是FTP断点续传;对岸拿到镜像文件后说无非打开,因为没有VMWare,只有VirtualBox。我们赶紧告诉对方,可以安装一个VMWare,有短期免费版本,或者下一个绿色版本。对岸传来一声冷笑。
这个事情不了了之,耽误了时间。开始追查为什么传文件花了这么多时间,为什么要传一个镜像文件过去,不只是传一个内核文件过去之类。
最后,结论是我自作主张,传了4G左右的镜像文件过去。
因为以前发生的这个事情,我对搞这个系统发布的母鸡很抵触,不想弄。
正好我笔记本上编译了一个公司系统的测试环境,前后编译了三次,花了一个多月;先后遇到boost编译、fftw编译、多线程支持、nlopt、64bit和32bit兼容等问题,经过反复折腾终于可以用了。
这周给新员工培训,在这个测试环境做做演示,还是非常方便的。那晓得,培训后,要求我给每个人编译一个环境,我头直接大了。
决定使用VirtualBox编译一个母鸡镜像,然后下蛋。
考虑到大家的笔记本有Windows系统,而我的是Fedora20系统;可能有的是32位,有的是64位。我下了一个i686的Virtualbox。
安装后无法启动,报错:
The VirtualBox kernel modules do not match this version of VirtualBox.
原因就是我笔记本是64位的操作系统,而安装了一个32位的VirtualBox,出现了模块不匹配问题。
64bit的VirtualBox启动后,安装了Fedora20.之所有安装Fedora20,而不是CentOS,是因为我不想重新编译测试环境的几个binary,如果虚拟机继续使用同一个系统,我宿主机上的bianry直接拷贝过去就能用了。
有时候启动虚拟机会报错挂载失败之类的,只需要重新执行命令:
sudo /etc/init.d/vboxdrv setup
重新启动虚拟机就行了。
如果要把binary文件放到虚拟机中,要么是ssh传递,但我设置的是共享文件夹,必须先安装增强功能,方法:
cd /run/media/ubx/VBOXADDITIONS_4.3.6_91406/sudo yum distro-syncsudo yum -y kernel-devel kernel-headers dkms gcc gcc-c++sudo yum -y install kernel-devel kernel-headers dkms gcc gcc-c++sudo ./VBoxLinuxAdditions.run
其实已经自动挂载共享文件夹到/media/sf_Share/,但用户组信息要root查看。
采用命令:
sudo mount -t vboxsf Share Linux_Share
这个地方“Share”是在宿主机器的目录,不写dirname,只写basenamne;而Linux_Share是要挂载到的目录
系统安装好后,陆续安装各种软件包和链接库,主要遇到的问题是:
系统是64位的,安装软件包默认只安装64位的版本,没有安装i686版本bianry许多地方需要使用32位的库
报错信息:
bash: /usr/local/bin/rar: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directoryerror while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory
解决方法:
sudo yum -y install glibc.i686sudo yum -y install zlib.i686sudo yum -y install libstdc++.so.6
由于用户信息是二进制文件,虽然是二进制文件,但直接编辑二进制文件还是会暴露用户信息;这种情况下,二进制和明文每啥区别。花了很多时间去用binary删掉用户信息,后来干脆使用Web前端批量删除了。
拿给别人用的时候,发现都是Win8系统,由于采用了UEFI固件,为了加快启动速度,默认是禁用了BIOS设置的。
进入Win8-【设置】-【常规】-【立即重启】-【疑难】-【UEFI固件】-【重启】,重启后直接进入BIOS,激活“虚拟化技术”。
因为进入了BIOS,顺便激活了UEFI固件之外的启动项,难怪说Win8想不让人装Linux双系统是办不到的!
虚拟机支持快照功能,我建立几个快照后,发布镜像的时候直接把VDI磁盘文件拷贝过去,发现里面的内容总是最近的一个快照内容,目前机器的里面的新东西在磁盘里面是没有的。
新建快照就会把新内容存到VDI磁盘文件里面,应该是我没有仔细阅读VirtualBox的文档所致,但也不想花时间去看。
在virtualbox中建立一个端口转换,比如宿主机ip是192.168.1.128,则在virtualbox设置网络里面选择NAT,并新建端口转换:
宿主机ip 宿主机端口 虚拟机ip 虚拟机ssh默认端口192.168.1.128 2222 10.0.1.25 22
在虚拟机开启ssh服务在宿主机执行ssh 192.168.1.128 -p 2222,则可以ssh登录虚拟机,从而获得一个更好操作的终端环境其它网络服务也是一个道理,进行端口转换即可,注意虚拟机要开启端口、宿主机不要防火墙关闭了端口即可
VirtualBox文档算是很齐全的,使用体验也不错,”母鸡下蛋”的过程有点疼而已;另外,我总觉的不会有几个人真的用这个虚拟机的,尽耽误我时间。
作者简介:
朱春来(Leslie Zhu),金融工程师,毕业于西安电子科技大学, 喜欢历史,喜欢编程. 日常在GNU/Linux环境下进行C/C++、Python开发,对Common Lisp、Node.js、金融等感兴趣。可以通过邮箱(pythonisland@gmail.com)联系他,或者直接在他的个人主页上留言.
访问朱春来(Leslie Zhu)的个人主页(http://lesliezhu.github.com)