1. 程式人生 > >CentOS minimal 上安裝 VirtualBox 虛擬機器自啟動

CentOS minimal 上安裝 VirtualBox 虛擬機器自啟動

VirtualBox 4.3 可以配置為自動啟動虛擬機器。下面步驟是在 CentOS 6.5 x86 64位系統上的實施,用的是 minimal 版本,使主機成為 Headless PC (無頭主機,即沒有顯示器,沒有鍵盤滑鼠等),在此主機系統上接上網線,安裝 VitrualBox,並建立幾個虛擬機器。經過配置後,實現主機上電啟動後,同時自動啟動幾個虛擬機器系統(虛擬的 Windows 2003,Ubuntu 等系統)

1. 安裝宿主系統

首先在硬體主機上安裝 CentOS 6.5 minimal x86_64。從官網下載 ISO 檔案,完成系統安裝。作為 VirtualBox 的宿主,不執行其它服務,選擇 Minimal 版本,裝完只有幾百 M 大小,比其它版本或系統動輒幾個 G 的系統,真是輕巧多了。

1.1 啟動網絡卡
預設安裝完成後,系統只開了一個 lo 的本機網路介面,物理網絡卡驅動後,預設是關閉的,需要修改配置檔案來開啟
使用 ifconfig 檢視,只能看到一個 lo,但用 ifconfig -a 可以看到其它網絡卡,如果還是看不到,則網絡卡系統不認識,沒有驅動,需要先安裝驅動
修改配置檔案:
# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
NM_CONTROLLED="yes"
ONBOOT=no
HWADDR=A4:BA:DB:37:F1:04
TYPE=Ethernet
BOOTPROTO=dhcp

將 ONBOOT=no 改為 ONBOOT=yes

預設的 IP 地址是 DHCP,如果要改為靜態地址,如下:
DEVICE="eth0"
NM_CONTROLLED="yes"
ONBOOT=yes
HWADDR=A4:BA:DB:37:F1:04
TYPE=Ethernet
BOOTPROTO=static
NAME="System eth0"
UUID=5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03
IPADDR=192.168.1.44
NETMASK=255.255.255.0
使用靜態地址,還需要繼續配置閘道器及 DNS
# vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=centos6
GATEWAY=192.168.1.1
重新啟動網路介面,使上面的配置修改生效
# service network restart
繼續配置 DNS
# vi /etc/resolv.conf
nameserver 8.8.8.8      # Replace with your nameserver ip
nameserver 192.168.1.1  # Replace with your nameserver ip

(注:不同的網絡卡裝置,在系統中的名稱會有不同,如上面的是 eth0,有的則是 p3p1, p3p2 等,後者可能是千兆網絡卡)

1.2 配置防火牆
在後面,我們建立的虛擬機器在 Command-Line 模式下,沒有 GUI,如果要安裝如 Windows 之類的圖形作業系統,需要使用遠端桌面來連線操作,因此需要開啟遠端桌面連線的埠。
# vi /etc/sysconfig/iptables
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3389 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
上面的示例中,我們增加了一行,打開了 VRDP 預設的埠 3389
重啟防火牆,讓剛才的配置生效
# service iptables restart

1.3 掛載 CDROM

比如要安裝 Windows2003 的虛擬機器,需要有 Windows2003 的安裝光碟,如果你是使用物理光碟,就要掛載到 CentOS 中。
建立掛載點
# mkdir /mnt/cdrom
掛載 CDROM
# mount /dev/cdrom /mnt/cdrom
檢視 cdrom
# df -h
Filesystem                    Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root   14G  1.6G   12G  13% /
tmpfs                         246M     0  246M   0% /dev/shm
/dev/sda1                     485M   54M  407M  12% /boot
/dev/sr0                      626M  626M     0 100% /mnt/cdrom

(注:引數 -h 表示 human,以 M,G 為單位顯示。其中 /dev/cdrom 實際指向的是 /dev/sr0,與光碟機插在哪個介面上有關)

1.4 掛載 ntfs 格式的移動儲存裝置
你也有可能將安裝光碟的 ISO 檔案存放在行動硬碟上,而且很有可能是 NTFS 格式的。在掛載之前,則需要安裝 ntfs-3g 來支援。
在官方的軟體倉庫中,沒有 ntfs-3g,這裡推薦使用 EPEL 第三方軟體倉庫。
# cd /tmp
# wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
# rpm -Uvh epel-release-6*.rpm
# ls /etc/yum.repos.d/
CentOS-Base.repo       CentOS-Media.repo  epel.repo
CentOS-Debuginfo.repo  CentOS-Vault.repo  epel-testing.repo

可以看到,除了 CentOS,多了兩個 epel 的 repo,第三方軟體倉庫就已經可以用了,如果要嘗試測試版軟體,開啟 epel-testing.repo,將裡面的 enabled = 0 改為 enabled = 1

# yum install ntfs-3g

用上面簡單的命令即完成 ntfs-3g 的安裝

將行動硬碟插入 USB 口,檢視一下裝置:
# fdisk -l
在列出來的清單中,可以看到 USB 盤的裝置名稱,如:/dev/sdc1 等。用 mount 來進行掛載:
# mkdir /mnt/usb
# mount -t ntfs-3g /dev/sdc1 /mnt/usb
# ls /mnt/usb/
要移除硬碟:
# umount /mnt/usb

2. 準備 VirtualBox 使用者

我們使用普通使用者來管理及建立虛擬機器,而不是 root 使用者。如果你沒有普通使用者,通過下面命令來建立,這裡我們建立一個 vmuser 的普通使用者,組也為 vmuser
# groupadd vmuser# useradd -d /home/vmuser -m -g vmuser -s /bin/bash vmuser
  為新使用者建立登入密碼
# passwd vmuser
  然後用這個使用者登入

3. 安裝 VirtualBox
安裝 VirtualBox 需要 root 許可權,因此要執行
# su
更新你的 linux 核心
# yum install kernel
更新完成後,必須重啟電腦
# reboot
用普通使用者登入後,再轉為 root
$ su
接下來安裝 VirtualBox 4.3 的依賴包
# yum groupinstall 'Development Tools'
# yum install SDL kernel-devel kernel-headers dkms
安裝下載工具 wget
# yum install wget
下一步下載並註冊 VirtualBox 的 rpm 公鑰
# wget -q http://download.virtualbox.org/virtualbox/debian/oracle_vbox.asc
# rpm --import oracle_vbox.asc
# rm -f oracle_vbox.asc
現在我們開啟 VirtualBox 的 RHEL 軟體倉庫(CentOS 是從 RedHat 衍生出來的 Linux 版本)
# cd /etc/yum.repos.d/
# wget http://download.virtualbox.org/virtualbox/rpm/rhel/virtualbox.repo
(注:如果是 Fedora 系統,將上面下載地址中的 rhel 改為 fedora,你也可以取地址前面部分,直接在網站上瀏覽,找找看有哪些系統被支援軟體倉庫)
在軟體倉庫中搜索並安裝最新的 VirtualBox 版本
# yum search virtualbox
VirtualBox-3.2.x86_64 : Oracle VM VirtualBox
VirtualBox-4.0.x86_64 : Oracle VM VirtualBox
VirtualBox-4.1.x86_64 : Oracle VM VirtualBox
VirtualBox-4.2.x86_64 : Oracle VM VirtualBox
VirtualBox-4.3.x86_64 : Oracle VM VirtualBox
用下面這條簡單的命令來安裝
# yum install VirtualBox-4.3.x86_64
VirtualBox 4.3 核心包有 72M,如果在安裝時,下載失敗,可以重複執行安裝命令,yum install 會斷點續傳,不用擔心下載失敗問題
從 4.0 版本開始,VirtualBox 提供擴充套件包,提供遠端桌面連線(VRDP),USB執行等功能。因為我們接下來需要 VRDP 功能來安裝管理虛擬機器系統。
下載並安裝擴充套件包(具體下載地址請到官方網站的下載頁面檢視)
# cd /tmp
# wget http://download.virtualbox.org/virtualbox/4.3.6/Oracle_VM_VirtualBox_Extension_Pack-4.3.6-91406.vbox-extpack
# VBoxManage extpack install Oracle_VM_VirtualBox_Extension_Pack-4.3.6-91406.vbox-extpack
(注:請確認下載最新版本)
現在,將要執行 VirtualBox 的使用者新增到組 vboxusers 中(這裡,我們建立的使用者是 vmuser)
# /usr/sbin/usermod -G vboxusers vmuser
好了,現在已經完成安裝了。
輸入
# exit

退出 root 使用者,返回到普通使用者

4. 在命令列字元模式下使用 VirtualBox
4.1 建立一個虛擬機器

常用的命令是 VBoxManage,你可以加 --help 引數來檢視幫助,也可以在官方手冊的第8單檢視詳細說明:
http://www.virtualbox.org/manual/ch08.html
$ VBoxManage --help


建立一個 Windows2003 虛擬機器。加引數 --register 直接註冊到虛擬機器列表
$ VBoxManage createvm --name "Windows2003" --register --ostype Windows2003
接下來設定記憶體為 1024M,開啟 acpi,設定啟動項,以及橋接到主機的 p3p1 物理網絡卡上
$ VBoxManage modifyvm "Windows2003" --memory 1024 --acpi on --boot1 dvd --nic1 bridged --bridgeadapter1 p3p1
下一步是建立一個虛擬機器硬碟,分配 10G 空間,預設動態增長檔案大小
$ cd /home/vmuser/Virtual\ VMs/Windows2003/
$ VBoxManage createhd --filename Windows2003_CN.vdi --size 10000
新增一個 IDE 控制器,然後將虛擬硬碟新增到 IDE 的第一個介面,並作為主裝置
$ VBoxManage storagectl “Windows2003" --name "IDE Controller" --add ide
$ VBoxManage storageattach "Windows2003" --storagectl "IDE Controller" --port 0 --device 0 --type hdd --medium Windows2003_CN.vdi
新增一個 IDE 光碟機,並指定光碟映像
$ VBoxManage storageattach "Windows2003" --storagectl "IDE Controller" --port1 --device 0 --type dvddrive --medium /mnt/usb/windows2003.iso


你也可以從其它電腦上覆制現成的 vdi 檔案,只要將 --medium Windows2003_CN.vdi 改為你複製過來的 VDI 檔案即可。
同樣,你也可以從其它電腦上覆制整個虛擬機器,只要將它註冊到虛擬機器列表即可。
如:
$ VBoxManage registervm /home/Virtual\ VMs/myvm/myvm.vbox
這裡,vbox檔案是一個 xml 格式的配置檔案,複製時,保持檔案相對位置不變。
複製過來的檔案,有可能無法啟動,如網絡卡橋接模式,繫結的物理網絡卡通常不在當前的宿主機網絡卡列表中,這時只要開啟 vbox 檔案,找到 bridge 配置項,將網絡卡名稱改為當前宿主機上的網絡卡名稱就可以了。
BTW,大部分的 VBoxManage 命令最終就是修改這個 vbox 檔案。


現在你可以用下面的命令來檢視剛才建立的虛擬機器
$ VBoxManage showvminfo Windows2003


4.2 用 Headless 方式啟動虛擬機器
$ VBoxHeadless --startvm Windows2003
預設,會開啟 VRDP,埠為 3389,這時,就可以用標準的 VRDP 客戶端來連線虛擬機器進行系統安裝及管理了。
在命令列,按 Ctrl + Z,可以將虛擬機器任務掛機。
$ jobs
可以看到掛起的任務,我們用 bg + 任務號,將它轉為後臺執行
$ bg 1
這時,你輸入下面命令,可以檢視當前在執行的虛擬機器
$ VBoxManage list runningvms
"Windows2003" {7eee7d4b-ef1b-4dc7-8d08-dab2b6531646}
顯示了執行中的虛擬機器名稱及 UUID 列表


關閉虛擬機器:
$ VBoxManage controlvm Windows2003 --acpipowerbutton

$ VBoxManage controlvm Windows2003 --poweroff
前者相當於按一下電源按鈕,系統開始關閉處理,後者相當於直接撥電源線


4.3 掛載 USB 裝置
首先要啟用 USB 支援,並開啟 USB 2.0 增強
$ VBoxManage modifyvm Windows2003 --usb on --usbehci on
接入 USB 裝置,檢視 USB 列表
$ VBoxManage list usbhost
Host USB Devices:UUID:               1af60eb8-0cad-4bf9-89b1-edae0c38e97b
VendorId:           0x05ac (05AC)
ProductId:          0x8510 (8510)
Revision:           128.37 (12837)
Port:               0
USB version/speed:  2/2
Manufacturer:       Apple Inc.
Product:            FaceTime HD Camera (Built-in)
SerialNumber:       CCGCBM05XJDWC8C0
Address:            sysfs:/sys/devices/pci0000:00/0000:00:0b.0/usb1/1-1//device:/dev/vboxusb/001/002
Current State:      Busy
 接下來,用 usbfilter 命令來新增
$ VBoxManage usbfilter add 0 --target "Windows2003" --name "myusbdevice" --action ignore --serialnumber CCGCBM05XJDWC8C0
這裡用的是 USB 裝置序列號來新增,有些 USB 裝置沒有序列號,那還可以用 productid, product 等來進行選擇裝置


完成 USB 掛載後,啟動 Windows 系統,就可以看到找到新裝置了。


5. 自啟動設定
5.1 設定自啟動的兩個環境變數。

$ su
# vi /etc/default/virtualbox
新增下面兩行:
VBOXAUTOSTART_DB=/etc/vbox
VBOXAUTOSTART_CONFIG=/etc/vbox/vboxauto.conf


5.2 配置啟動使用者
# vi /etc/vbox/vboxauto.conf
新增下面內容:
default_policy = deny
vmuser= {
allow = true
}

(注:將 vmuser 替換成你實際的使用者,這個使用者加入了vboxusers組,用來操作 VBoxManage 的使用者)

5.3 修改 vbox 目錄許可權
# chgrp vboxusers /etc/vbox
# chmod 1775 /etc/vbox
# exit
完成以上操作後,退出 root,返回普通使用者
5.4 設定dbpath屬性
$ VBoxManage setproperty autostartdbpath /etc/vbox
$ VBoxManage list systemproperties
...
Autostart database path:         /etc/vbox

5.5 指定虛擬機器自動啟動

$ VBoxManage modifyvm Windows2003 --autostart-enabled on --autostop-type acpishutdown
$ ls /etc/vbox
可以看到生成了以使用者名稱開始的兩個檔案
vmuser.start   vmuser.stop

5.6 重啟 vboxauto 服務

$su
# service vboxautostart-service stop
# service vboxautostart-service start


好了,重啟主機,虛擬機器已經自動運行了,用 VDRP 客戶端直接連線即可。


6. 其它
6.1 掛載 GuestAddition.iso,安裝客戶機增強工具

$ VBoxManage storageattach "Windows2003" --storagectl "IDE Control" --port 1 --device 0 --type dvddrive --medium emptydrive
$ VBoxManage storageattach "Windows2003" --storagectl "IDE Control" --port 1 --device 0 --type dvddrive --medium additions
這樣在虛擬機器裡就可以看到增強工具光碟了。
注意,必須先 emptydrive 後,才能載入 addtions。


6.2. 顯式指定 VRDP
$ VBoxManage modifyvm "Windows2003" --vrde on --vrdeport 3389
$ VBoxManage showvminfo "Windows2003"
設定後,你可以檢查虛擬機器的設定狀態。


6.3 檢視宿主系統性能
$ top
系統佔用還是非常低的。




參考資料:
#1: Chapter 8. VBoxManage
https://www.virtualbox.org/manual/ch08.html
#2: creating a virtual machine on a headless server
https://www.virtualbox.org/manual/ch07.html#idp51975936
#3: How to set your VM to auto start at system startup in VirtualBox 4.2 on Ubuntu 12.04
http://yakupkorkmaz.info/?p=191
#4: Linux檢視CPU和記憶體使用情況
http://www.cnblogs.com/xd502djj/archive/2011/03/01/1968041.html
#5: VBoxHeadless - Running Virtual Machines With VirtualBox 4.2 On A Headless Fedora 18 Server
http://www.howtoforge.com/vboxheadless-running-virtual-machines-with-virtualbox-4.2-on-a-headless-fedora-18-server
#6: Creating and Configuring Headless VMs in VirtualBox
http://vmetc.com/2008/07/12/creating-and-configuring-headless-vms-in-virtualbox/
#7: CTRL-Z和CTRL-C區別?
http://www.linuxsir.org/bbs/thread20600.html
#8: Installing RHEL EPEL Repo on Centos 5.x or 6.x
http://www.rackspace.com/knowledge_center/article/installing-rhel-epel-repo-on-centos-5x-or-6x
#9: How Do I Access or Mount Windows/USB NTFS Partition in RHEL/CentOS/Fedora
http://www.tecmint.com/how-do-i-access-or-mount-windows-ntfs-partition-in-linux/
#10: CentOS 6 minimal VirtualBox eth0
http://www.viqsoft.com/blog/-/blogs/centos-6-minimal-virtualbox-eth0
#11: How To Configure Static IP On CentOS 6
https://gist.github.com/fernandoaleman/2172388
#12: Centos下設定VNC為3389埠
http://yuky1327.iteye.com/blog/1743816