VirtualBox on Ubuntu 12 TLS
(講師台南教網中心 kawsing)
安裝基礎實體機系統:
取用以 ubuntu 12 為核心的 twubuntu_miniserver 光碟,bios 開機畫面中按 f12 由光碟開機並安裝系統於實體機上。
安裝完進入時,帳號需按「更多」並自行輸入帳號,桌面選「openbox」介面。
安裝 pdf 讀取程式: sudo apt-get update;sudo apt-get install evince
更新軟體來源: sudo software-properties-gtk 不勾選兩個來源「私有版權 restricted」及「受版權限制 multiverse」,「源碼」選擇軟體來源為「其他」,並選到學術網路機器。再 sudo apt-get update
若 firefox 為英文版,就更新為 firefox 中文版: sudo apt-get install firefox;sudo apt-get install firefox-locale-zhan
進入 virtualbox > 設定虛擬機的存放路徑為 /home/username/VMs
創建第一台虛擬機 (母機):
抓取 TWubuntu_miniserver64V2.iso
建立 base 虛擬機(含虛擬硬碟)
記憶體調至綠色範圍中的最大量。
安裝為 linux ubuntu 64
磁碟選為 vdi 格式、動態配置、8G 大小
建立一台空主機完成 > 將 iso 光碟檔放進「虛擬 dvd」> 啟動虛擬機 > 開始安裝 twubuntu_miniserver 虛擬機
安裝完重開機後,更新軟體來源(同上述)。
再製前將上面第一台(基礎虛擬電腦 base 主機)中的 /etc/udev/rules.d/70-persistent-net.rules 移除,如此才不會再製或保留之前的 base 上的網路卡。以下列指令作:
#sudo rm -rf /etc/udev/rules.d/70-persistent-net.rules
#sudo shutdown -h now
備份請找 /home/username/VMs/base/base.vdi 備份此 vdi 檔即可。
創建第二台虛擬機 (dns 備援):
再製前將上面第一台(基礎虛擬電腦 base 主機)中的 /etc/udev/rules.d/70-persistent-net.rules 移除,如此才不會再製或保留之前的 base 上的網路卡。以下列指令作:
#sudo rm -rf /etc/udev/rules.d/70-persistent-net.rules
#sudo shutdown -h now
第一台 base 機器關機後,在 virtualbox 介面中,base 機器圖示上按右鍵 > 再製 > 選重新初始化所有網路卡的 mac 位址 (新建網卡) > 完整複製。大約五分鐘可再製一台。我取名為 sheep。
網路卡在 virtualbox 中 > 第二台主機 sheep 圖示 > 設定值 > 網路 > 由 「nat」 改為「內部網路」,再啟動虛擬機器。
ram 可調回 512 mb。
啟動後網卡在 ubuntu 介面中會看到空轉圖示。
啟動「system」>「伺服器快樂架」> 設定 wired connection 1 中的 ipv4 及 ipv6 設定 > 設定其他值 > 關閉。
#sudo dpkg-reconfigure phpmyadmin (若要重新設定 phpmyadmin 的話)
開 firefox 測試本機 ipv4 及 ipv6 的網頁及 www.yourdomain.name 有沒有出現 it works 的畫面。(此為測試 dns 及 www 服務)
關機 > 在 virtualbox 中的虛擬主機網路選「橋接模式」,以後此關閉的虛擬機就是以真實 ip 準備備援的狀態,若 dns 掛掉就臨時開啟這台 sheep 虛擬主機即可應急。
安裝第三台虛擬主機當暫時伺服器(暫時服務隨時消滅):
第一台 base 機器關機後,在 virtualbox 介面中,base 機器圖示上按右鍵 > 再製 > 選重新初始化所有網路卡的 mac 位址 (新建網卡) > 連結複製。馬上一秒後可再製一台。我取名為 temp 虛擬機器。
網路卡在 virtualbox 中 > 第二台主機 sheep 圖示 > 設定值 > 網路 > 由 「nat」 改為「內部網路」,再啟動虛擬機器。
ram 可調回 512 mb 或其他設定值。
在 /home/username/VMs/temp/snapshot/ 下可以看到增長中的 vdi 檔。
第四台虛擬機,由第三台暫時伺服器轉存為新的虛擬伺服器(非暫存用):
再製前將上面第三台(基礎虛擬電腦 base 主機)中的 /etc/udev/rules.d/70-persistent-net.rules 移除,如此才不會再製或保留之前的 base 上的網路卡。以下列指令作:
#sudo rm -rf /etc/udev/rules.d/70-persistent-net.rules
#sudo shutdown -h now
第三台 base 機器關機後,在 virtualbox 介面中,base 機器圖示上按右鍵 > 再製 > 選重新初始化所有網路卡的 mac 位址 (新建網卡) > 完整複製。大約五分鐘可再製一台。我取名為 temp1。
共享資料匣:
共用資料匣 > 共用資料夾 > 暫時性資料夾 > + 圖示 > 資料夾路徑為實體機器路徑 > 名字訂為 real-download
cd /home/username/
mkdir mountpoint-name
mount -t vboxsf real-download mountpoint-name
轉 port:
網卡要選 nat > 連接埠轉送 > + 圖示 > 主機連接埠設 8080 (此為實體機的 port) > 客體連接埠設 80 (虛擬機的 port)
以 root 權限控制檔案總管:
工具 > 以 root 權限,加上以下指令碼
gksu %s
netstat -lt -n
查看開放的 port
#sudo service ssh start
實體機 PORT 2222 轉至虛擬機的 22 port
ssh -l root ip -p 2222
第二種方式:
利用一台虛擬機最多可建 8 個網卡的特性,設虛擬機的真實 ip 22 port,綁在虛擬機私有 ip 的 22 port。
建立僅限主機介面卡。
在 virtualbox > 檔案 > 喜好設定 > 網路 > + 圖示 > 加上 vboxnet0
在虛擬機上加上第二片網卡,名稱設為 vboxnet0 ,然後開機。
第二片網卡在 ubuntu 中以 dhcp 取得 ip,開機後確認 ip。
#sudo service ssh start
簡易 V2V :
就直接下指令,將 .vdi 檔轉為 vmdk (vmware 格式) 或 vhd (微軟格式)。
在 /home/username/VMs/image 檔案匣中輸入指令:
#VBoxManage clonehd ../sheep/sheep.vdi sheep.vmdk --format vmdk
//轉 vmdk
#VBoxManage clonehd ../sheep/sheep.vdi sheep.vhd --format vhd
//轉 vhd
//指令解釋: VBoxManage clonehd 來源檔名 目的檔名 --format 格式名稱如vmdk或vhd
UUID 會改變。
原本動態硬碟只有 8g 的話,要擴充硬碟空間:
先 resize 虛擬硬碟,然後 guest os 以光碟開機,執行 gparted 指令調整磁區,guest os 重開就有更大的空間了。
在 linux 下看是 .vdi 看到真實用量。
#VBoxManage modifyhd sheep.vdi --resize 12000
//12000 為 12000 mb 的意思,擴為12 gb。
sheep 停機,叫回光碟機,以原安裝光碟 iso 開機,關掉安裝視窗,進入桌面執行終端機,輸入下列指令,會進入磁區圖形管理介面。
#sudo gparted
磁區圖形介面環境中來刪後面的磁區,將第一磁區擴充:
停用交換區(swap,sda2)
刪除sda5
刪 swap
套用
留1gb給swap使用,放到最後面。
sda1 右鍵以拉 bar 來調整大小。
調整完後,套用,再新增extended 區,再加上 swap。到最後會有 sda1 (ext4)主磁區,sda2 (extended 延伸磁區) 及 sda5 (swap)磁區。
重新開機。
備份 vdi ,並再生該 vm:
#rsync -S --progress souce.vdi target.vdi
#VBoxManage internalcommands sethduuid target.vdi
新建虛擬機器,導入 target.vdi 即可。
rsync 會先凍結 vdi 檔,再作複製,因此不能用 cp 指令,備份會失敗。
虛擬機開機後,需重設網卡,因為舊有網卡跟原本虛擬機一樣(在新的虛擬機還是第一片),新網卡是第二片,可將第一片刪掉,再設定第二片的 ip。
利用網頁介面作 vbox 管理:
下載 phpvirtualbox 最新版本。
解壓至 /var/www 下
將 /var/www/phpvirtualbox/config.php-example 改為 config.php 檔名。
編輯 config.php 檔:修改 ubuntu 實體機系統使用者名稱及密碼 username password
location 依預設值 127.0.0.1:18083
存檔。
#ps aux | grep vbox
#netstat -lt -n
啟動 apache,本機開 18083 port:
#usr/lib/virtualbox/vboxwebsrv --background -H 127.0.0.1 -p 18083
#sudo service apache2 restart
以瀏覽器連入 localhost/phpvirtualbox
輸入預設帳號 admin 密碼 admin
修改預設密碼: file > change password
安裝 floppyfw (小型 nat firewall 系統):
下載 floppyfw-3.0.15img 檔。
建立資料匣: /home/username/VMs/ffw
選用 linux 2.4,不啟動磁碟,完成新建虛擬機,有出現錯誤訊息可以不用管。
接下來建一個虛擬軟碟機。
在 vbox 中,ffw 虛擬機 > 存放裝置 > + 圖示 > 新增「軟碟控制器」 > 按軟碟控制器 > + 圖示 > 選擇軟碟機 img 檔。
序列埠要啟用。
接下來 「啟動 」虛擬機 power on。
預設帳號 root ,密碼沒有。
重開機指令: reboot
以下為 vbox 操作:
加第二片網卡,設為內部網路,啟動 floppyfw
第一片用橋接模式取得真實 ip
重開虛擬機。
以下指令在實體機中作:
sudo su
將軟碟資料掛到實體機中的一個 folder:
mount floppyfw-3.0.15.img /home/VMs/floppyfw/floppyfwfolder
修改軟碟機中的設定檔:
vi /home/VMs/floppyfw/floppyfwfolder/config
DHCP_SERVER=y
CONNECTION_TYPE=static
#CONNECTION_DHCP=DHCP
DEFAULT_GATEWAY=192.168.1.50
OUTSIDE_NAMESERVER=163.26.1.1
修改 FFW 虛擬機真、私 ip 設為 254
DES_PASSWORD=貼進來 md5 編碼的密碼,記得採用 vi 來編輯存檔。
#PASSWORD=
設完後虛擬機輸入指令 reboot 以重新開機
在 floppyfw 虛擬機中 ifconfig eth0 確認 ip 。
在 floppyfw 虛擬機中 ping 同真實網段 ip, ping tw.yahoo.com.tw 測試看有無反應。
在實體機中: vi /home/VMs/floppyfw/floppyfwfolder/firewall.ini
以下為 dhcp client 端操作:
在 vbox 中,dhcp client 虛擬機的第一片網卡用「內部網路」模式以取得與 floppyfw 虛擬機第二片網卡一樣的網段。
開機後確認第一片網卡為「自動取得 ip」,會連至 floppyfw ,floppyfw 會派發 ip 給此虛擬機的第一片網卡。
上網測試。
DNAT 設定在 firewall.ini ,功能是可以打 floppyfw 的 ip:21 ,而導向真正提供 ftp 服務的伺服器。
Tiny Core:
下載 tiny core 的 iso 檔。
linux > other linux
192mb ram
1g 硬碟
開機完可在 app 中安裝 tc-install.tcz 的程式 (apps > search) > 按 go 鍵 > 開始安裝至硬碟。
雙台備援:
以 private ip 作備援以免占用真實 ip 頻寬。
虛擬機的網卡設定是「內部網路」,即是內部網路區段但不取用真實 ip 。
gateway 用 0.0.0.0 ,設固定私有 ip 用私用網段即可。
ubuntu 編輯程式為 sudo nm-connection-editor
重設好私有 ip 先 ping 測試一下,再 ssh 看看能不能通。虛擬機的網卡設定完記得重新啟動。
利用 /opt/toos/ensshRsync.sh 作備份,請先打開此檔編輯設定值(有五、六個),再執行看看,最後用 crontab -e 來作定期備份。
公私鑰放在 /root/.hasshkey ,刪掉可再重新製作。
drbl 再生龍環境(練習架 drbl 伺服器,並將一台樣本機取出映像檔再還原至其他 client 機器):
再生龍虛擬機只要有一個虛擬網卡 (eth0) 即可,它會自己生出兩張網卡設定,第二張網卡 (eth0:0) 的網域是 192.168.100.x,兩張網卡不必在同一網段。
以 live cd 模式開機。
格式化: 利用桌面上的 gparted 以建立 sda1 分割區以供存放樣本機的映像檔。
啟動再生龍: 按桌面上的「再生龍伺服器」。
接下來設定 newtinycore 這個虛擬機:選用內部網路、256mb 以上記憶體、用網路為第一順位開機。
開機後會進入 drbl 開機選單,選第二個儲存映像檔。
映像檔會放在 /home/partimag 中,檢查
停止再生龍: 按桌面上的「停止再生龍」,完成取得樣本機的映像檔工作。
接下來將映像檔再生在其他學生機:
新增一個練習虛擬機當作其他學生機,設定網路為內部網路,設定網路開機,空硬碟,容量需跟樣本機相同或更大(不可設較少的空間)。
至 drbl 伺服器啟用再生龍,設定為 restore-disk 還原至其他機器,multicast ,clients-to-wait 設1 (因為我們只要還原一台)。
練習虛擬機開機,選用 multicast restore。
至 drbl 伺服器關閉再生龍服務。
以上功能亦可用在 P2V (實體主機虛擬化) 上,可利用 drbl 將實體機器映像檔化,再以 vbox 新增一虛擬機,用 drbl 將映像檔倒至虛擬機上即可完成工作。
android-x86 變虛擬機:
下載該 iso 檔,再 import 進 vbox 即可。
vbox 指令 (VBoxManage 必須在非 root 帳號下,普通使用者才能使用):
VBoxManage list vms (查所有的 vm)
VBoxManage list runningvms (查正在執行的 vm)
VBoxManage startvm vm-name (開啟 vm)
VBoxManage startvm vm-name -type headless (背景執行開啟 vm ,虛擬機在實體機中無 console 畫面,適合文字模式的虛擬機)
VBoxManage controlvm vm-name acpipowerbutton (啟動某 vm 的正常關機程序)
VBoxManage controlvm vm-name poweroff (將某 vm 斷電,若沒有 acpi 支援的虛擬機可以用此法)
#!/bin/bash
su username -c "VBoxManage startvm vm-name -type headless"
#虛擬機無介面(節省資源)
su username -c "VBoxManage startvm vm-name -type gui"
#虛擬機採視窗介面
chmod u+x startvm.sh (設為只有 root 可執行 chmod 744 權限)
./startvm.sh
cp *.sh /root/.
接下來將 shell 程式加到開關機的相關自動執行程式中,如下:
cd /etc/rc6.d (此為重開機執行檔案之程式連結收集處)
ln -s /root/stopvm.sh S00stopvm
cd /etc/rc0.d (此為關機執行檔案之程式連結收集處)
ln -s /root/stopvm.sh S00stopvm
vi /etc/rc.local (此為開機自動執行程式之收集處),在 exit 0 字串上面加上 /root/startvm.sh 存檔即可將 startvm.sh 加至開機程序中。
(windows 2008 的事件檢視器 1074 代碼為關機,關機 script 若有成功,再看事件檢視器有無出現此項。沒有關機錯誤訊息即成功。記得在控制台中設定按下電源鍵為關機。)
以下引用區塊引用自: http://rainstingtw.blogspot.com/2012/09/use-VBoxManage-to-control-VirtualBox.html
透過 VBoxManage 來控制 VirtualBox
在 VirtualBox 內,除了透過圖形化介面來控制我們的虛擬機器外,
也可透過下 command 的方式來控制我們的虛擬機。
這裡來紀錄一下,如何透過 VBoxManage 這個內建的 command 來控
制 VirtualBox:,以下就介紹幾個常用的:
1. How to show the VirtualBox VM info
VBoxManage showvminfo
2. How to show the VM Harddrive info
VBoxManage showhdinfo
3. How to list running VM
VBoxManage list runningvms
4. How to list available VM
VBoxManage list vms
5. How to list available VM Harddrives
VBoxManage list hdds
6. How to list available ISO’s
VBoxManage list dvds
然後這裡列出如何透過 command 來直接控制 VM:
7. How to Start VM
這裡要注意,透過在前面增加前綴字「nohup」,可以確保離開 console 後,
我們的 VM 還能在背景執行:
nohup VBoxHeadless --startvm <vmname>
8. How to pause VM
VBoxManage controlvm <vmname> pause
9. How to resume VM
VBoxManage controlvm <vmname> resume
10. How to reset VM
VBoxManage controlvm <vmname> reset
11. How to poweroff VM (hard poweroff eg. pull the plug)
VBoxManage controlvm <vmname> poweroff
12. How to send poweroff single to VM (tells VM OS to shutdown)
VBoxManage controlvm <vmname> acpipowerbutton
13. How to attach a DVD / CD to a running vm
VBoxManage controlvm <vmname> dvdattach <filename>
14. How to de-attach a DVD / CD from a running vm
VBoxManage controlvm <vmname> dvdattach none
15. How to find out the VM IP
VBoxManage guestproperty get <vmid>"/VirtualBox/GuestInfo/Net/0/V4/IP"
參考資料:
利用 kvm 的 nbd 功能,在實體機掛載備份虛擬機的磁碟,以備份其中的資料:
sudo modprobe nbd (啟動 nbd 功能)
cd /dev (進入裝置)
ls -l nb* (觀看 nbd 裝置,有十五個)
sudo kvm-nbd --connect=/dev/nbd0 /home/username/VMs/vm-name/vm-name.vdi (將虛擬硬碟掛載為本機的資料匣)
sudo fdisk -l /dev/nbd0 (看虛擬機的磁碟)
/dev/nbd0p1 為虛擬機的 sda1
mkdir mount1(作個目錄)
sudo mount /dev/nbd0p1 mount1 (掛載進來)
開始作備份 script
sudo umount mount1 (卸載)
sudo kvm-nbd -d /dev/nbd0 (退出 nbd 碟)
sudo modprobe -r nbd (退出 nbd 功能)
匯入 ova ovf 檔案之注意事項:
ping www.google.com 或 tw.yahoo.com 有dup! 回應, 是因為 https://forums.virtualbox.org/viewtopic.php?f=7&t=43090 說到網卡設定錯誤的關係,由於在匯入 ubuntu/lubuntu 虛擬機 OVA 檔的時候,勾選重新設定網卡 MAC,因此第一網卡在 VBOX 畫面中,有了 ETH0 和 ETH1 兩個設定。在 /etc/udev/rules.d/70-persistent-net.rules 這個檔案中,將 MAC address 對應錯誤的設定刪除(我發現 ETH0 為錯誤的一行,刪掉或以 # 註解掉),然後再 shutdown -r now 重開機。確認 vbox 畫面中,此虛擬機的第一網卡(bridged mode 橋接)設定為 eth1。
/etc/NetworkManager 中有 nm-connection-editor 的設定資料。
vbox 中 vm 的設定,網路卡部分 eth0 務必改為 eth1。虛擬機中則設定為 eth0 。如此才不會再發生 ping 產生 dup! 的問題。
匯入時,不要勾選重設網卡位址,匯入後再從 vbox vm 設定中更改 mac address 設定。
匯入後,更改 linux 的 hosts 資料以免登入 ssh 時造成 sudo: unable to resolve host xxxx 錯誤 http://blog.longwin.com.tw/2008/11/linux-sudo-unable-to-resolve-host-2008/ 確認 /etc/hostname 與 /etc/hosts 中的 127.0.0.1 中的第二行設定相符。
匯入 .ova 檔時,出現 internal inconsistency looking up disk image 'vmdisk1' 解法:
將 .ova 檔名改為 .tar
解壓縮該 tar 檔,將 vmdk 檔從 tar 檔裏拉出來為獨立檔案。
接著在 vbox 裏自行新增一個虛疑機器,將該 vmdk 檔設為硬碟。
將虛擬機開機即可。
VirtualBox 升級:
http://www.youtube.com/watch?v=2DfbUP2LDTk
https://www.virtualbox.org/wiki/Linux_Downloads
出現:
The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing
'/etc/init.d/vboxdrv setup'
as root. Users of Ubuntu, Fedora or Mandriva should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.
讓 virtualbox 隨著 linux 核心升級,也可以自行升級相關的 vbox 核心:
sudo apt-get install dkms
然後:
sudo /etc/init.d/vboxdrv setup
沒出現問題了,所以以下步驟沒做:
http://ubuntuforums.org/showthread.php?t=1150414&page=2
in another scenario on Ubuntu 12.1 quantal the command
sudo /etc/init.d/vboxdrv setup
have faced error and guided me to install the latest linux header so i executed the following code!
Code:
sudo apt-get install linux-headers-3.5.0-23-generic
the header version was given by the error message so don't worry ... it worked like a charm!