fastcgi with apache, virtualhost per user setup

Im showing a working conf for fastcgi per user virtualhost & php.ini on apache2

Googled some reference with lots of apache like putting FcgidInitialEnv into virtualhost does not work. Tested out a working conf for fastcgi with apache, virtualhost per user by suExec setup.

About installing dependencies on CentOS 6, reference below ***Remember to add the epel repo

http://ruleoftech.com/2013/using-php-fpm-with-apache-2-on-centos
http://mcdee.com.au/fastcgi-with-php-apache-centos6/
http://kuaileyongshi.blog.51cto.com/1480649/648789

Beware suexec not allow to set uid < 500 ===> you cannot use apache (CentOS) www-data(Ubuntu) in SuexecUserGroup

Just add below apache conf in /etc/httpd/conf.d/anyfilename.conf, this conf run a php wrapper by FCGIWrapper

Then the wrapper can specify which php.ini to run

<IfModule fcgid_module>
  FcgidInitialEnv PHPRC "/php"
</IfModule>

# using mod_fcgid and user specific php.ini
# You can copy this part, add user and create more virtualhost on demand
<VirtualHost *:80>
  ServerName fcgi1.keithyau.com
  DocumentRoot "/var/www/keithyau"
  SuexecUserGroup keithyau keithyau

  <Directory /var/www/keithyau>
    Options FollowSymLinks +ExecCGI
    AllowOverride All
    AddHandler fcgid-script .php
    FCGIWrapper /var/www/change-this/fcgi1/fcgi1-wrapper .php
    Order allow,deny
    Allow from all
  </Directory>
</VirtualHost>

The fcgi1-wrapper is something like this, PHPRC is the folder to contain custom php.ini you can add more settings.

  #!/bin/sh
  PHPRC=/var/www/keithyau/fcgi1
  export PHPRC
  export PHP_FCGI_MAX_REQUESTS=5000
  export PHP_FCGI_CHILDREN=8
  exec /var/www/html/fastcgi-bin/php-cgi

Screen Shot 2014-03-12 at 6.20.10 PM

 

We can config like disable_function in this php.ini. Finally, check the loaded phpinfo

VirtualBox virtualization

虛擬化是近來很熱門的一個 IT 話題. 虛擬化有以下好處
  1. 節省能源
  2. 減低硬件佔用空間
  3. 減低硬件成本 reduce hardware cost
  4. 方便硬件管理 hardware management
  5. 方便系統備份
  6. 有助伺服器轉移 Server migration
  7. 資源管理 resource management
	一般來說, 一套硬件伺服器只發揮了 5-25% 的能力, 其他的都在待機模式. Server idle time > 25%, 電力都花在待機與冷卻系統之上. 這就成了一個惡性循環. 畢竟待機跟冷卻都要花費的.

	即是說, 如果使用了虛擬技術, 硬件成本有機會減少至 ¼. 虛擬化更有助資源管理, 比如說原本 一塊 1GB的ram 卡, 只可以給一台電腦使用. 但一台電腦只有 25 % 時間需要 1GB 的 ram, 虛擬化就能夠將那 1 GB ram 其餘 75% 的時間分給不同的系統使用.

虛擬化後, 服務器實體為一個電腦檔案. 就像我們日常打開的 file.
以下是虛擬機 VirtualBox 的虛擬硬碟

因此, 我們可以隨意調動這些硬碟作伺服器轉移或備份.

這篇文章, 我將會以 VirtualBox, Vmware, XEN 作個比較

VirtualBox

	Sun xVM VirtualBox 是由德國InnoTek(已被Sun併購) 這家軟體公司出品的軟體,它提供使用者在32或64位元的 Windows、Solaris 及 Linux 作業系統上虛擬另外的機器執行其它x86的作業系統,使用者可以在 VirtualBox 上安裝並且執行 Solaris、Windows、Linux、OS/2 Warp、OpenBSD 及 FreeBSD 等系統作為客戶機操作系統[1]。在2007年1月,InnoTek以GNU通用公共许可证 (GPL)釋出VirtualBox,並提供二進位版本及開放源碼版本的程式碼。
和同性質的VMware及Virtual PC比較下,VirtualBox獨到之處包括Remote Desktop Protocol(RDP)、iSCSI及USB的支援,VirtualBox在客戶機操作系統上已可以支援USB 2.0的硬體裝置。  http://zh.wikipedia.org/wiki/VirtualBox 

安裝:

virtualbox 的下載包只有約 16-22MB, 無論在 LINUX or windows 只需要下載檔案後 double click 就可以安裝.
http://www.virtualbox.org/wiki/Downloads 

請留意 virtualbox 有 puel http://www.virtualbox.org/wiki/VirtualBox_PUEL  跟 gpl http://www.virtualbox.org/wiki/GPL 兩種發行方式, puel 下的 virtualbox 才有usb over rdp 這功能.

設計:

VirtualBox 屬於虛擬桌面, 沒有 server-client 的設計, 在伺服器管理上, 沒有 Vmware 和 xen 的方便. 但反應時間快, 適合家庭用戶. 用來虛擬 windows 就最好不過. VirtualBox 的賣點在 rdp - Remote desktop protocal 和 usb over rdp , 明顯的就是針對 windows 的用戶.

VirtualBox包含一般虛擬機的快照功能, 用家可以把現時的電腦設定存下來, 日後把設定回覆到之前的狀態.

VirtualBox 的虛擬硬件不能在系統運行中加減開關. 這方面 vmware 就比較優勝.

儲存:

VirtualBox 使用 virtual disk image ( .vdi ) 作虛擬硬碟, 十分安全. 因為所有 vdi 都有 session id 鎖著, 不能在虛擬機關閉的情況下打開虛擬硬碟內的資料. 連複製硬碟時都需要用特定的程式來做. 但安全從來就是雙刃刀. 會造成很多的不便. 例如檔案備份.

網絡:

VirtualBox 的虛擬網絡使用 NAT - network address translation為主, 用家需要自行設定 NAT 以外的連接方法.
虛擬網絡分為 NAT, host interface network ( 網橋 ), internal network.

自行設定網絡時比較複雜. 這裹就示範設定 bridge network -  host interface network 的在 ubuntu linux 上的做法
  1. 先安裝 bridge-utils & uml-utilities
    	sudo apt-get install bridge-utils uml-utilities
  2. 在 /etc/rc.local 中輸入以下設定 (把 keithyau 轉成你的使用者名稱)
    1. HOST_IF="eth0"
    2. sudo modprobe tun
    3. # First disable running network (common as eth0)
    4. sudo ifconfig $HOST_IF down
    5. sudo /etc/init.d/networking stop
    6. # Create a tap device with permission for the user running vbox
    7. sudo tunctl -t tap0 -u keithyau
    8. sudo chmod 666 /dev/net/tun
    9. # 將ethx和tapx網卡界面設為混雜模式(Promiscuous)
    10. sudo ifconfig $HOST_IF 0.0.0.0 promisc
    11. # 建立新的橋接界面(bridge),並把 eth0, tap0加入bridge
    12. sudo brctl addbr br0
    13. sudo brctl addif br0 $HOST_IF
    14. # ifconfig br0 0.0.0.0 up 則Host OS 和Guest OS各自可以不同的撥接帳號來連網 )
    15. sudo dhclient br0
    16. sudo brctl addif br0 tap0
    17. sudo ifconfig tap0 up
    18. exit 0
  3. 在 virtualbox 中設定如下
  4. 重新開動虛擬機
支援:

現時 virtualbox 的支援不算很充足, 除了 windows 和 linux 的虛擬化外, 虛擬其他系統都錯漏百出. 特別在 bsd 系統. 在 windows 亦經常出現不穩定情況. 因此, 還有很多改進空間.

Vmware:

相信vmware 是最多用家的虛擬機. Vmware 其實是一間軟件公司的名稱. 發行以下產品

	VMware工作站
	VMware Fusion
	VMware Player
	VMware伺服器
	VMware架構
	VMware ACE
	VMware Lab Manager
	VMware Converter
	Vmware Server

其中最普及的相信是以 EULA 免費發行的 vmware server, 在免費軟件中為最容易使用的虛擬機. 新手多數會以 vmware 入門, 因為 vmware 的虛擬硬碟 ( vmdk ) 可以轉為其他硬碟如 img, vdi. 令使用者不需要重新安裝系統.

安裝

Vmware 的安裝包較大, 約有 150 MB. 在 windows 下載後 doule click 就可以安裝. 在 Linux 安裝的話, 不同的 Linux 安裝的方法有些少不同. 都是一些程式錯誤問題.

簡單地就一下在 Linux 安裝的做法:
  1.  下載檔案包, 後解壓 tar -zxvf <你的檔名>
  2.  cd <你的檔名>
  3. vmware 可能需要核心編釋, 所以需要安裝 kernel header files
    1. sudo apt-get install linux-headers-'uname -r'
    2. sudo apt-get install build-essential
  4. sudo ./vmware-install.pl
  5. 跟vmware指示去做
設計

Vmware server 屬於 server-client 設計, 有平台 vmware-server-console 讓使用者直接控制虛擬系統. 反應時間較 VirtualBox 慢. 但穩定性比較好. 除  vmware-server-console, 使用者可以選用比較輕便的 vmware player 來打開虛擬機.

硬碟

Vmware server 的虛擬硬碟叫 vmdk, 沒有 virtualbox ( .vdi ) 的保安程度與 session id. 用起來比較方便.
除使用 vmdk 外, Vmware server可以直接使用實體硬碟, 增加伺服器速度. 安裝系統的時侯, 可以選擇用多個檔案來儲存一個 virtual hard disk. 這樣有助虛擬機的運行速度.

網絡

Vmware 的虛擬網絡有 bridge, private 和 NAT. 在 vmware 使用 bridge 很方便, 只需要在以下介面做少少更改就可以了.

用 bridge 的時侯, 如果需要 host 和 虛擬機一同上網的話, 需要一個路由器支持. 否則, 因為 isp 只會供應一個 ip 的關係, 只有一個系統可以上網.

支援

相對上,  vmware 的錯誤比較少. 可能是使用群較大的關係.

vmware 公司的vCenter Converter http://www.vmware.com/products/converter/  能夠把安裝在實體硬件上的 windows虛擬化.

XEN:

安裝

設定XEN 伺服器在三者之中最為複習. 而且必需安裝在unix 系統之上. 常用的系統 ( host ) 為 Linux, FreeBSD. 以 ubuntu linux 為例示範一下
  1. sudo apt-get install ubuntu-xen-server
  2. sudo apt-get remove network-manager
  3. sudo apt-get install vncviewer
  4. sudo vi /etc/xen/xend-config.sxp //一般程況不用更動
    1. (network-script network-bridge) // 自動打開網橋
    2. (vif-script vif-bridge) //自動打開虛擬網卡
  5. 以xen-tool 製作Debian linux 虛擬系統 ( para-virtualization )
    1. sudo xen-create-image --hostname=系統名稱 --size=虛擬硬碟大小 --swap=128Mb --ide \
    2. --ip=地址 --netmask=255.255.255.0 --gateway=閘道 --force \
    3. --dir=/home/xen --memory=內存分配 --arch=i386 --kernel=/boot/vmlinuz-2.6.24-19-xen \
    4. --initrd=/boot/initrd.img-2.6.24-19-xen --install-method=debootstrap --dist=etch \
    5. --mirror=http://ftp.tw.debian.org/debian/ --passwd
  6. /boot/initrd.img-2.6.24-19 跟xen 的版本不同而改變
  7. 製作 windows 虛擬系統 ( HVM-virtualization )
    1. sudo dd if=/dev/zero of=硬碟地址(以.img 為檔案類型) bs=1M count=1524
    2. 1 count = 1 bs, 以上來說就是1.5 GB
    3. 製作以下設定檔 (/etc/xen/虛擬系統名稱.cfg)
      1. kernel = '/usr/lib/xen/boot/hvmloader'
      2. builder = 'hvm'
      3. memory = '256'
         # 內存分配
      4. device_model='/usr/lib/xen/bin/qemu-dm'
      5. # Disks
      6. disk = [ 'tap:aio:/home/xen/domains/winxp/disk.img,ioemu:hda,w',
        #虛擬硬碟地址
      7. 'phy:/dev/scd0,hdc:cdrom,r' ]
        #使用實體光碟機
      8. cdrom='/dev/scd0'
         #實體光碟機名稱
      9. # Hostname
      10. name = 'winxp'
         #虛擬系統名稱
      11. # Networking
      12. vif = ['type=ioemu, bridge=xenbr0']
      13. # Behaviour
      14. boot='d'
      15. vnc=1
      16. vncconsole=1
      17. ne2000=0
      18. sdl=0
      19. serial='pty'
      20. usbdevice='tablet'
    4. sudo xm create /etc/xen/虛擬系統名稱.cfg
    5. sudo vncviewer localhost
    6. 正常地安裝 windows
    		
    
    設計
    
    XEN 本身不算是一個虛擬機. 其實 UNIX / LINUX  本身已經有虛擬的能力 ( jails / chroot / zone ). XEN 的工作就是管理監察這些已有的虛擬能力. 跟我們一般使用的 LINUX 內核不同, 虛擬化需要特有的 xen-kernel. 
    
    XEN 分別有兩種虛擬技術. Para-virtualization 半虛擬化.半虛擬化在 xen vm monitor 之下, 會輪流共享硬體,因此,每個虛擬系統都是直接與host 內核連接. 造到極佳的效能. 速度上, 可以說跟 host 沒有大分別.
    
    (本圖轉載自http://it20.info/blogs/main/archive/2007/06/17/25.aspx )
    
    xen hvm 就是說 full-virtualization 全虛擬化.  全虛擬化會製作一些虛擬硬體,分給不同的虛擬系統. 因此, 可支援的系統較多, 但效能較低.
    
    Vmware 上的 full virtualization
    
    硬碟
    
    Xen 使用  .img 作虛擬硬碟. 可以直接從外部更改虛擬硬碟內容.方法為
    1. sudo mount -o loop 你的img檔 /mnt
    2. cd /mnt
    3. ls
    img 檔就像我們常用的 cd 檔. 在三種虛擬硬碟中, 安全性為最低的一種. 因為任何人得到這個虛擬硬碟就可以知道內容. 但可以直接跟外部溝通, 所以最大彈性.
    
    網絡
    
    XEN 的網絡安裝主要為 bridge, 除最簡單的bridge 方法 ( 可參考 virtualbox 的bridge 方法 ), 用家需要用linux networking 的知識來製作其他功能. 如source routing, nat, one-to-one nat, iptables.
    
    支援
    
    XEN不像vmware / virtualbox, 沒有大財團的支持, 靠的都是 community support, 即是說用Google 找答案吧.
    
    在技術轉移方面,以xen 作基礎製作 xen_server 的公司critix, 支援客戶的 vmware 虛擬系統轉換成xen 的系統.
    
    VirtualBox, Vmware, XEN 在各方面的對照表
    5 = highest
    VirtualBox
    Vmware
    XEN HVM
    XEN para-virtualization
    反應時間
    User Response time
    4
    3
    2
    5
    虛擬硬碟
    .vdi
    .vmdk
    .img
    .img
    虛擬網絡
    NAT, bridge (self-define)
    NAT, bridge (pre-define)
    bridge (self-define)
    bridge (self-define)
    穩定性 stability
    2 4 3 5
    虛擬硬件支援
    4 5 3 2
    錯誤最少
    2 4 3 3
    程式大小
    2 5 4 4
    安全性
    4 3 2 2
    技術支援
    4 5 3 3
    效能
    4 3 3 5

    淺談網頁服務器群的設計 (A group of web server)

    前陣子, 在師兄那邊聽了一個他的經驗, 一間寄存公司其中一個網頁服務器壞了的經驗.

    話說一個裝有 800 客戶的網頁服務器只用 raid 5 作備份, 沒有備份服務器 (HA / heartbeat)的低成本制作,
    某天一下子死掉兩個硬碟. 之後的 18 小時, 客戶服務部就 ...
    
    在 HSBC 中學得的服務器管理知識, 告訴我任何作實戰 production 的服務器必需有備份,
    而且是能夠在 15 分鐘內回復的備份. 不過, 現實情況是一些中小型機構, 沒有兩倍的成本去做備份.
    所以回復時間在 18-24小時內都可以接受.
    
    現時中小企的 IT 成本, 軟件比硬件高得多. 所以如果選用開源軟件,
    再買一個 HKD $3000 的小服務器就安全得多了.
    
    本文是以一個案例作介紹以虛擬技術把服務器模組化, 令備份 / 資源調動時方便得多.
    那我師兄的故事, 如果是我的話怎樣處理 ? 先發現問題所在
    
    問題 1: 裝有 800 客戶的服務器沒有虛擬化, 在救援 / 備份時造成不便
    問題 2: 沒有備用服務器, 服務器停止的 18 小時中客戶服務部的開支比買一個小型服務器更高
    問題 3: 除 raid 5 以外, 沒有資料備份. 原因可能是沒有虛擬化令備份程序複雜
    
    所以根本問題是服務器的設計, 與技術人員的能耐無關 !
    
    解決方法: 沒有人說備份服務器的比例一定是 1:1 的, 以一部備份多部 production 亦可.
    因成本與客戶要求而定, 備份服務器不一定要有 raid, 不一定要有足夠的計算能力 (cpu power / cpw).
    因此, 一部 HKD $3000 的服務器, 只要能夠作備份就足夠有餘了. 
    
    但出現的問題是, 
    
    1) 如果我把所有客戶的資料都備份, 資源需求很大. 這時可考慮 rsync, rsync 是增加式資料備份,
    只備份已更改 / 新增檔案
    
    以下是 rysnc 的示範, 在linux備份服務器輸入:
    sudo rsync -avl --delete --exclude=/不包括的資料夾1 --exclude=/不包括的資料夾2 
    來源地址:/要備份的資料夾 /本地儲存資料的位置
    
    2) CPU 已經用來服務客人了, 怎樣做備份
    這時需要 at 指令 / crontab, 可以設定只在特定時間作備份. 以前在 HSBC 時, 備份會在股市收市後進行.
    以 at command 作示範
    
    at 1900     ← 意思是當天下午 7:00
    > 備份指令 (如以上的 rsync)
    > 完成後 CTRL + D
    
    除此之外, 把服務器虛擬化, 有些選擇是把服務器放到一個 img 檔案中.
    這樣, 備份時把整個 img 檔案備份就能佔用較小資源.
    
    3) 出事了, 怎樣啟動備用服務器 ?
    
    你可以選用 HA (high availability) 設計, 並以 heartbeat 啟動, 這樣就可以作即時回復. 但成本較高.
    在這文中不作詳談. 一般來說, 可以手動. 但先要為服務器作一個好的設計.

    以下是一個網頁服務器群的設計

    所謂服務器模組化就是一個服務器只作一種服務. 以前的日子, 成本會很高. 但在虛擬化之下就不算問題. 參考虛擬化制作: http://www.yubis.net/blog/keith/summary-virtualbox-vmware-xen-351?page=2

    在服務器模組化出名的有 MICROSOFT VIRTUAL SERVER, 但使用 xen 的話更好. 在使用服務器群時會出現一個重大問題. 就是同一種服務不能有兩個服務器, 因為同一個 ip 地址 不能用同一個 port. 例如 port 80, 路由器只能指向一個服務器. 這時, 模組化就會不攻自破.

    以下是一個解決方法

    web_server_group1

    上圖中有兩個網頁服務器. External 是給客人用的. 但如果想把公司的網頁都用同一個 ip 地址放出去, 那就要 proxy 服務器的幫助. 先在 External 中開動 apache 的 proxy modules

    # a2enmod proxy*

    #/etc/init.d/apache2 restart

    例如公司的網頁是 abc.xyz.org, 那分別在 dns 服務器, External & Internal 中加上圖中的設定, abc.xyz.org 就可以提供服務了.

    以上說的與師兄的案例有什麼關連 ?

    試把圖中 internal web server 當成師兄故事中所死掉的服務器, 那不就把 External 中的設定改一下, 由 死掉的服務器指向備份中的服務器就成了嗎 ? 同樣方法可以加上更多的網頁服務器  !

    A summary of VirtualBox, VMware, XEN 虛擬機的比較

    虛擬化是近來很熱門的一個 IT 話題. 虛擬化有以下好處
    1. 節省能源
    2. 減低硬件佔用空間
    3. 減低硬件成本 reduce hardware cost
    4. 方便硬件管理 hardware management
    5. 方便系統備份
    6. 有助伺服器轉移 Server migration
    7. 資源管理 resource management

    一般來說, 一套硬件伺服器只發揮了 5-25% 的能力, 其他的都在待機模式. Server idle time > 25%, 電力都花在待機與冷卻系統之上. 這就成了一個惡性循環. 畢竟待機跟冷卻都要花費的. 即是說, 如果使用了虛擬技術, 硬件成本有機會減少至 ¼. 虛擬化更有助資源管理, 比如說原本 一塊 1GB的ram 卡, 只可以給一台電腦使用. 但一台電腦只有 25 % 時間需要 1GB 的 ram, 虛擬化就能夠將那 1 GB ram 其餘 75% 的時間分給不同的系統使用. 虛擬化後, 服務器實體為一個電腦檔案. 就像我們日常打開的 file. 以下是虛擬機 VirtualBox 的虛擬硬碟 screenshot-vdi-file-browser3 因此, 我們可以隨意調動這些硬碟作伺服器轉移或備份. 這篇文章, 我將會以 VirtualBox, Vmware, XEN 作個比較

    VirtualBox

    Sun xVM VirtualBox 是由德國InnoTek(已被Sun併購) 這家軟體公司出品的軟體,它提供使用者在32或64位元的 Windows、Solaris 及 Linux 作業系統上虛擬另外的機器執行其它x86的作業系統,使用者可以在 VirtualBox 上安裝並且執行 Solaris、Windows、Linux、OS/2 Warp、OpenBSD 及 FreeBSD 等系統作為客戶機操作系統[1]。在2007年1月,InnoTek以GNU通用公共许可证 (GPL)釋出VirtualBox,並提供二進位版本及開放源碼版本的程式碼。 和同性質的VMware及Virtual PC比較下,VirtualBox獨到之處包括Remote Desktop Protocol(RDP)、iSCSI及USB的支援,VirtualBox在客戶機操作系統上已可以支援USB 2.0的硬體裝置。 http://zh.wikipedia.org/wiki/VirtualBox

    安裝:

    virtualbox 的下載包只有約 16-22MB, 無論在 LINUX or windows 只需要下載檔案後 double click 就可以安裝. http://www.virtualbox.org/wiki/Downloads 請留意 virtualbox 有 puel http://www.virtualbox.org/wiki/VirtualBox_PUEL 跟 gpl http://www.virtualbox.org/wiki/GPL 兩種發行方式, puel 下的 virtualbox 才有usb over rdp 這功能.

    設計:

    VirtualBox 屬於虛擬桌面, 沒有 server-client 的設計, 在伺服器管理上, 沒有 Vmware 和 xen 的方便. 但反應時間快, 適合家庭用戶. 用來虛擬 windows 就最好不過. VirtualBox 的賣點在 rdp – Remote desktop protocolusb over rdp , 明顯的就是針對 windows 的用戶. VirtualBox包含一般虛擬機的快照功能, 用家可以把現時的電腦設定存下來, 日後把設定回覆到之前的狀態.

    screenshot-virtualbox-ose-state

    VirtualBox 的虛擬硬件不能在系統運行中加減開關. 這方面 vmware 就比較優勝.

    儲存:

    VirtualBox 使用 virtual disk image ( .vdi ) 作虛擬硬碟, 十分安全. 因為所有 vdi 都有 session id 鎖著, 不能在虛擬機關閉的情況下打開虛擬硬碟內的資料. 連複製硬碟時都需要用特定的程式來做. 但安全從來就是雙刃刀. 會造成很多的不便. 例如檔案備份.

    網絡:

    VirtualBox 的虛擬網絡使用 NAT – network address translation為主, 用家需要自行設定 NAT 以外的連接方法. 虛擬網絡分為 NAT, host interface network ( 網橋 ), internal network.

    1. screenshot-winxp-network-settings

    自行設定網絡時比較複雜. 這裹就示範設定 bridge network – host interface network 的在 ubuntu linux 上的做法

    1. 先安裝 bridge-utils & uml-utilities sudo apt-get install bridge-utils uml-utilities
    2. 在 /etc/rc.local 中輸入以下設定 (把 keithyau 轉成你的使用者名稱)
      1. HOST_IF=”eth0″
      2. sudo modprobe tun
      3. # First disable running network (common as eth0)
      4. sudo ifconfig $HOST_IF down
      5. sudo /etc/init.d/networking stop
      6. # Create a tap device with permission for the user running vbox
      7. sudo tunctl -t tap0 -u keithyau
      8. sudo chmod 666 /dev/net/tun
      9. # 將ethx和tapx網卡界面設為混雜模式(Promiscuous)
      10. sudo ifconfig $HOST_IF 0.0.0.0 promisc
      11. # 建立新的橋接界面(bridge),並把 eth0, tap0加入bridge
      12. sudo brctl addbr br0
      13. sudo brctl addif br0 $HOST_IF
      14. # ifconfig br0 0.0.0.0 up 則Host OS 和Guest OS各自可以不同的撥接帳號來連網 )
      15. sudo dhclient br0
      16. sudo brctl addif br0 tap0
      17. sudo ifconfig tap0 up
      18. exit 0
    3. 在 virtualbox 中設定如下screenshot-winxp-hostint

    4. 重新開動虛擬機

    支援:

    現時 virtualbox 的支援不算很充足, 除了 windows 和 linux 的虛擬化外, 虛擬其他系統都錯漏百出. 特別在 bsd 系統. 在 windows 亦經常出現不穩定情況. 因此, 還有很多改進空間.

    VMware:

    相信vmware 是最多用家的虛擬機. Vmware 其實是一間軟件公司的名稱. 發行以下產品 VMware工作站

    VMware Fusion
    VMware Player
    VMware伺服器
    VMware架構
    VMware ACE
    VMware Lab Manager
    VMware Converter
    Vmware Server

    其中最普及的相信是以 EULA 免費發行的 vmware server, 在免費軟件中為最容易使用的虛擬機. 新手多數會以 vmware 入門, 因為 vmware 的虛擬硬碟 ( vmdk ) 可以轉為其他硬碟如 img, vdi. 令使用者不需要重新安裝系統. 安裝 Vmware 的安裝包較大, 約有 150 MB. 在 windows 下載後 doule click 就可以安裝. 在 Linux 安裝的話, 不同的 Linux 安裝的方法有些少不同. 都是一些程式錯誤問題. 簡單地就一下在 Linux 安裝的做法:

    1. 下載檔案包, 後解壓 tar -zxvf <你的檔名>
    2. cd <你的檔名>
    3. vmware 可能需要核心編釋, 所以需要安裝 kernel header files
      1. sudo apt-get install linux-headers-‘uname -r’
      2. sudo apt-get install build-essential
    4. sudo ./vmware-install.pl
    5. 跟vmware指示去做

    設計

    Vmware server 屬於 server-client 設計, 有平台 vmware-server-console 讓使用者直接控制虛擬系統. 反應時間較 VirtualBox 慢. 但穩定性比較好. 除 vmware-server-console, 使用者可以選用比較輕便的 vmware player 來打開虛擬機.

    硬碟

    Vmware server 的虛擬硬碟叫 vmdk, 沒有 virtualbox ( .vdi ) 的保安程度與 session id. 用起來比較方便. 除使用 vmdk 外, Vmware server可以直接使用實體硬碟, 增加伺服器速度. 安裝系統的時侯, 可以選擇用多個檔案來儲存一個 virtual hard disk. 這樣有助虛擬機的運行速度.

    網絡

    Vmware 的虛擬網絡有 bridge, private 和 NAT. 在 vmware 使用 bridge 很方便, 只需要在以下介面做少少更改就可以了. 用 bridge 的時侯, 如果需要 host 和 虛擬機一同上網的話, 需要一個路由器支持. 否則, 因為 isp 只會供應一個 ip 的關係, 只有一個系統可以上網.

    screenshot-virtual-machine-settings

    支援

    相對上, vmware 的錯誤比較少. 可能是使用群較大的關係. vmware 公司的vCenter Converter http://www.vmware.com/products/converter/ 能夠把安裝在實體硬件上的 windows虛擬化.

    XEN:

    安裝 設定XEN 伺服器在三者之中最為複習. 而且必需安裝在unix 系統之上. 常用的系統 ( host ) 為 Linux, FreeBSD. 以 ubuntu linux 為例示範一下

    1. sudo apt-get install ubuntu-xen-server
    2. sudo apt-get remove network-manager
    3. sudo apt-get install vncviewer
    4. sudo vi /etc/xen/xend-config.sxp //一般程況不用更動
      1. (network-script network-bridge) // 自動打開網橋
      2. (vif-script vif-bridge) //自動打開虛擬網卡
    5. 以xen-tool 製作Debian linux 虛擬系統 ( para-virtualization )
      1. sudo xen-create-image –hostname=系統名稱 –size=虛擬硬碟大小 –swap=128Mb –ide \
      2. –ip=地址 –netmask=255.255.255.0 –gateway=閘道 –force \
      3. –dir=/home/xen –memory=內存分配 –arch=i386 –kernel=/boot/vmlinuz-2.6.24-19-xen \
      4. –initrd=/boot/initrd.img-2.6.24-19-xen –install-method=debootstrap –dist=etch \
      5. –mirror=http://ftp.tw.debian.org/debian/ –passwd
    6. /boot/initrd.img-2.6.24-19 跟xen 的版本不同而改變
    7. 製作 windows 虛擬系統 ( HVM-virtualization )
      1. sudo dd if=/dev/zero of=硬碟地址(以.img 為檔案類型) bs=1M count=1524
      2. 1 count = 1 bs, 以上來說就是1.5 GB
      3. 製作以下設定檔 (/etc/xen/虛擬系統名稱.cfg)
        1. kernel = ‘/usr/lib/xen/boot/hvmloader’
        2. builder = ‘hvm’
        3. memory = ‘256’ # 內存分配
        4. device_model=’/usr/lib/xen/bin/qemu-dm’
        5. # Disks
        6. disk = [ ‘tap:aio:/home/xen/domains/winxp/disk.img,ioemu:hda,w’, #虛擬硬碟地址
        7. ‘phy:/dev/scd0,hdc:cdrom,r’ ] #使用實體光碟機
        8. cdrom=’/dev/scd0′ #實體光碟機名稱
        9. # Hostname
        10. name = ‘winxp’ #虛擬系統名稱
        11. # Networking
        12. vif = [‘type=ioemu, bridge=xenbr0’]
        13. # Behaviour
        14. boot=’d’
        15. vnc=1
        16. vncconsole=1
        17. ne2000=0
        18. sdl=0
        19. serial=’pty’
        20. usbdevice=’tablet’
      4. sudo xm create /etc/xen/虛擬系統名稱.cfg
      5. sudo vncviewer localhost
      6. 正常地安裝 windows

    設計

    XEN 本身不算是一個虛擬機. 其實 UNIX / LINUX 本身已經有虛擬的能力 ( jails / chroot / zone ). XEN 的工作就是管理監察這些已有的虛擬能力. 跟我們一般使用的 LINUX 內核不同, 虛擬化需要特有的 xen-kernel. XEN 分別有兩種虛擬技術. Para-virtualization 半虛擬化.半虛擬化在 xen vm monitor 之下, 會輪流共享硬體,因此,每個虛擬系統都是直接與host 內核連接. 造到極佳的效能. 速度上, 可以說跟 host 沒有大分別.

    hypervisorcomparison-xen(本圖轉載自http://it20.info/blogs/main/archive/2007/06/17/25.aspx )

    xen hvm 就是說 full-virtualization 全虛擬化. 全虛擬化會製作一些虛擬硬體,分給不同的虛擬系統. 因此, 可支援的系統較多, 但效能較低.

    vmware Vmware 上的 full virtualization

    硬碟

    Xen 使用 .img 作虛擬硬碟. 可以直接從外部更改虛擬硬碟內容.方法為

    1. sudo mount -o loop 你的img檔 /mnt

    2. cd /mnt

    3. ls

    img 檔就像我們常用的 cd 檔. 在三種虛擬硬碟中, 安全性為最低的一種. 因為任何人得到這個虛擬硬碟就可以知道內容. 但可以直接跟外部溝通, 所以最大彈性.

    網絡

    XEN 的網絡安裝主要為 bridge, 除最簡單的bridge 方法 ( 可參考 virtualbox 的bridge 方法 ), 用家需要用linux networking 的知識來製作其他功能. 如source routing, nat, one-to-one nat, iptables.

    支援

    XEN不像vmware / virtualbox, 沒有大財團的支持, 靠的都是 community support, 即是說用Google 找答案吧. 在技術轉移方面,以xen 作基礎製作 xen_server 的公司critix, 支援客戶的 vmware 虛擬系統轉換成xen 的系統.

    VirtualBox, Vmware, XEN 在各方面的對照表


    5 = highest VirtualBox Vmware XEN HVM XEN para-virtualization
    反應時間
    User Response time
    4 3 2 5
    虛擬硬碟 .vdi .vmdk .img .img
    虛擬網絡 NAT, bridge (self-define) NAT, bridge (pre-define) bridge (self-define) bridge (self-define)
    穩定性 stability 2 4 3 5
    虛擬硬件支援 4 5 3 2
    錯誤最少 2 4 3 3
    程式大小 2 5 4 4
    安全性 4 3 2 2
    技術支援 4 5 3 3
    效能 4 3 3 5

    有任何虛擬化上的討論, 歡迎留言/ 交流一下 ! msn: funnykeith@msn.com

    https://keithyau.wordpress.com