如何從 source 安裝 xen 2.0

常言道:『飲水思源』,在 Open Source 的世界裡,我們常常需要別人的幫助,但是在您有所心得的時候請記得分享給大家,『幫助人是快樂的喔』。歡迎您在使用 debian 的過程中的任何心得分享給大家。

如何從 source 安裝 xen 2.0

文章louie » 週六 11月 13, 2004 9:33 pm

Xen 是一個 Virtual Machine Monitor (VMM),是類似 user mode linux 的東西,目前 guest OS 可跑 linux2.4、linux2.6,netbsd2.0,而 freebsd 也即將完成,效能上可比 user mode linux 好上很多,基本上是滿接近原來機器的效能。

home page : http://www.cl.cam.ac.uk/Research/SRG/ne ... index.html
FAQ : http://www.cl.cam.ac.uk/Research/SRG/netos/xen/faq.html
user's manual : http://www.cl.cam.ac.uk/Research/SRG/ne ... dmes/user/ HTML 版
download : http://sourceforge.net/project/showfile ... p_id=86024

下載 xen-2.0-src.tgz,至於為什麼要安裝 source,為何不直接使用 binary ? 因為有些驅動程式並不包含在 binary 的 kernel 中,所以才要自行 compile kernel。以下安裝的環境是 debian sarge。

要能成功的 compile 得先裝好一堆 packages, 官方的 FAQ 中寫道:
To build Xen, XenLinux and documentation from source you will need:
make, gcc, libc6-dev, zlib1g-dev, python, python-dev, python-twisted, bridge- utils, iproute, libcurl3, libcurl3-dev, bzip2, module-init-tools, latex, latex2html, and transfig.

首先裝上:
iproute
python2.3-twisted
bridge-utils
以上三個 packages 是安裝 xen binary package 時需要的。

要安裝 source 還得再裝以下:
gcc 要 3.2 以上
make bzip2
libc6-dev
libcurl3 libcurl3-dev
zlib1g-dev
python2.3 python2.3-dev

要製作文件得要以下 packages:(debian sarge 中似乎找不到 latex 這個 package)
latex2html
transfig
tgif

將 source 解開後,會產生一個 xen-2.0 的目錄,進入這個目錄後,直接打:
代碼: 選擇全部
 make  world

幸運的話 compile 成功之後再
代碼: 選擇全部
 make install

在 make 當中會到 kernel.org 去抓 linux-2.6.9.tar.bz2 (預設 compile 的核心為 2.6, 若要用 2.4 核心請修改 Makefile 中的第 13 行 KERNELS 或 make linux24)回來解開,patch 後套用內定的 kernel config 來 compile kernel,若是原本就有 kernel.org 的 2.6.9 核心,將之放在 xen-2.0 的目錄中即可,就不用重新去抓一次 35M 的核心。接著若直接打 make world 的話,編出來的核心還是會原來的 xen binary package 一樣,少了很多 driver,因此我們不打 make world,將步驟分解,一步步來,以達到我們的需求。

make world 在 Makefile 中的設定等於以下指令:

make clean
make kdelete
make xen
make tools
make kernels
make docs

只要上面那些 packages 都裝好了之後,
代碼: 選擇全部
make xen
make tools
make docs

正常情況下都不會有問題,我們將重點放在 make kernels

代碼: 選擇全部
 make kernels

一開始先做 make kernels, 會自動下載完 kernel,解開壓縮檔,patch xen 的修正檔,讀取預設的 kernel config 完成後,開始 compile 核心時,會看到螢幕出現:
CC [M] fs/exportfs/expfs.o
LD [M] fs/exportfs/exportfs.o
CC [M] fs/fat/cache.o
CC [M] fs/fat/dir.o
CC [M] fs/fat/file.o

這種訊息,代表開始在 compile 核心了,此時先按 Ctrl-c 將它停掉,因為我們要設定自己的核心。
代碼: 選擇全部
cd linux-2.6.9-xen0/
make ARCH=xen menuconfig (或是 xconfig、gconfig 等等)

經過測試發現不能加入軟碟機(不管是編入核心或是模組),否則就無法成功的編譯出核心,另外 intel-agp 無法正常使用,一掛上就卡住,CPU 飆到 99%,還有竟然沒有 MTRR 好選,不曉得是那裡沒弄好。

設定好核心後是存在 .config 中,將 .config 放到 xen-2.0/dist/install/boot 中即可
代碼: 選擇全部
cd ..
mkdir -p dist/install/boot
cp   linux-2.6.9-xen0/.config   dist/install/boot/config-2.6.9-xen0
make kernels

以上奇怪的步驟就是為了要取得 .config 來供我們編出自己的核心,只要將 .config 放至 dist/install/boot/ 並改名為 linux-2.6.9-xen0,再來都可按照標準程序來,compile 好的東西都會放在 dist/install 目錄底下。等一切完成後,我們就有 2.6.9-xen0(給 host OS 或 guest OS 用的) 及 2.6.9-xenU(僅能用在 guest OS) 的核心了。

在一切都順利的完成後,檢查一下 dist 錄中的東西,看看有沒有少了什麼,如 boot 底下的核心或 lib/modules 中的 modules,沒問題的話,直接安裝。
代碼: 選擇全部
make install

下一步是將新編好的核心加到 grub 中(lilo 不支援)

title Xen 2.0 / XenLinux 2.6.9
kernel /boot/xen.gz dom0_mem=200000 console=vga
module /boot/vmlinuz-2.6.9-xen0 root=/dev/hda7 ro console=tty0

其中的 dom0_mem 是 domain0(host OS)的記憶大小(以 k 為單位),另外還要再保留一些給 xen 使用,賸下的才是給 guest OS。

在重新開機之前還得做一個步驟:
代碼: 選擇全部
mv /lib/tls /lib/tls.disable

這裡的 tls 是 Thread Local Storage,必須 disable,這樣 xen 的 kernel 才不會出現警告,但是對於原本的系統會造成什麼問題小弟也不清楚。

重新開機後,先手動將 xend 給跑起來,/etc/init.d/xend start
這時用 xm 這個指令來查詢
代碼: 選擇全部
xm list
Name              Id  Mem(MB)  CPU  State  Time(s)  Console
Domain-0           0      385    0  r----  13106.9

可看到目前 Domain-0 已經正常運作,接著我們可以建立另一個 domain。

設定檔 /etc/xen/woody (可直接由 /etc/xen/xmexample1 拷貝來用
-------------------------------------------------------
# 設定 guest OS 的核心
kernel = "/boot/vmlinuz-2.4.27-xenU"
#kernkl = "/boot/vmlinuz-2.6.9-xenU"

#ramdisk = "/boot/initrd.gz"

# 記憶體大小(以 M 為單位)
memory = 64
name = "woody"
#cpu = -1 # leave to Xen to pick
#nics=1
#vif = [ 'mac=aa:00:00:00:00:11, bridge=xen-br0' ]

# guest OS 裡的硬碟(只能有一行 disk,若要有二個以上的硬碟,逗號隔開)
# 下面這行代表使用實體的 hdc1 來當作 guest OS 中的 hda1,模式為可讀寫(r 表示唯讀)
disk = [ 'phy:hdc1,hda1,w' ]
# 下面這行代表使用 /xen/sarge.xen 這個檔案來當成 guest OS 中的 sda1, 使用 /xen/ swap 為 guest OS 中的 sdb1,可讀寫。
#disk = [ 'file:/home/ftp/pub/vm/xen/sarge.xen,sda1,w','file:/home/ftp/pub/vm/swap,sdb1,w' ]

# 除了支援實體硬碟(phy:)及檔案(file:)之外,xen 還可用 lvm 的 volume,或是 nfs
# disk = [ 'phy:vg/lvm1,hda1,w' ]

# 網路的部份 xen 是採用 bridge 的方式。
# 可將 ip 寫在本設定檔中或是這裡不要設,直接從 guest OS 裡設定(小弟發現某些時候由這裡設 ip,進入 guest OS 後網路並沒有起來,只好直接從 guest OS 裡去設了)
#dhcp="dhcp"
# ip address
ip="192.168.5.1"
# Set netmask.
netmask="255.255.255.0"
# Set default gateway.
gateway="192.168.5.254"
# Set the hostname.
#hostname= "vm%d" % vmid

# 此處旳 hda1 要配合上面的 disk 中的裝置名稱
# Set root device.
root = "/dev/hda1 ro"
#root = "/dev/sda1 ro"

# Root device for nfs.
#root = "/dev/nfs"
# The nfs server.
#nfs_server = '169.254.1.0'
# Root directory on the nfs server.
#nfs_root = '/full/path/to/root/directory'
-----------------------------------------------------------

要建立 guest OS 中的作業系統,最方便的就是用 debootstrap。也可以直接拿 user mode linux 的 guest OS 來用。可到 user-mode-linux.sourceforge.net 去抓 user mode linux 預先安裝好的 fedora、mandrake、slackware 回來用,很方便的,記得抓回來後,先 mount 起來,修改 guest OS 的 /etc/fstab,才不會開不了機。
如果是自己手動安裝,假設要用的是 Fedora Core 3,先用光碟開機,將她裝在另一個分割區中(例如 /dev/hdc1),裝好後再開回原來的 debian 中,將 disk 設成 disk = [ 'phy:hdc1,hdc1,w' ,root = "/dev/hdc1 ro" 即可。

設定檔好了之後,使用 xm 這個指令來管理 guest OS :(每個指令用法可用 xm help 'command' 來查詢)
代碼: 選擇全部
xm help

call           Call xend api functions.
help           Print help.

Commands related to consoles:

console        Open a console to a domain.
consoles       Get information about domain consoles.

Commands on domains:

balloon        Set the domain's memory footprint using the balloon driver.
create         Create a domain.                         建立一個 guest OS
destroy        Terminate a domain immediately.          立刻結束一台機器(不正常關機
)
domid          Convert a domain name to a domain id.
domname        Convert a domain id to a domain name.
list           List information about domains.          顯示目前所有機器的狀況
maxmem         Set domain memory limit.
migrate        Migrate a domain to another machine.
pause          Pause execution of a domain.
pincpu         Pin a domain to a cpu.
restore        Create a domain from a saved state.      將休眠的機器叫起來
save           Save domain state (and config) to file.  將某台機器目前狀態存下來   (休眠 hibernation,會存成一個檔案,容量為這台機器的記憶體大小)
shutdown       Shutdown a domain.                       關機(正常關機程序)
unpause        Unpause a paused domain.

Commands related to the xen host (node):

dmesg          Read or clear Xen's message buffer.
info           Get information about the xen host.      顯示 domain0 的狀態
log            Print the xend log.

Comands controlling scheduling:

atropos        Set atropos parameters.
bvt            Set BVT scheduler parameters.
bvt_ctxallow   Set the BVT scheduler context switch allowance.
rrobin         Set round robin slice.

Commands related to virtual block devices:

vbd-create     Create a new virtual block device for a domain   動態加入硬碟
vbd-destroy    Destroy a domain's virtual block device          卸下硬碟
vbd-list       List virtual block devices for a domain.

Commands related to virtual network interfaces:

vif-list       List virtual network interfaces for a domain.

Try '/usr/sbin/xm help CMD' for help on CMD

代碼: 選擇全部
xm create woody

xm list
Name              Id  Mem(MB)  CPU  State  Time(s)  Console
Domain-0           0      385    0  r----  13213.5
woody              4       63    0  -----      2.4    9601

可看到目前另一個 domain(woody) 也跑起來了。
代碼: 選擇全部
xencons localhost 9601

連到 domain 的 console 或是用
代碼: 選擇全部
telnet localhost 9601

也行,要從 console 中退出,可按 Ctrl + ]。

代碼: 選擇全部
xm info
system                 : Linux
host                   : eagle.test.org.tw
release                : 2.6.9-xen0
version                : #1 Tue Nov 9 02:15:08 CST 2004
machine                : i686
cores                  : 1
hyperthreads_per_core  : 1
cpu_mhz                : 334
memory                 : 511
free_memory            : 64

上面的 free_memory 代表可以給 guest OS 用的記憶體(賸下64M)

我們可以動態調整 Domain-0 以外的 domain 記憶體大小,如目前 woody 是用 64M,執行
代碼: 選擇全部
xm balloon woody 48

代碼: 選擇全部
xm list
Name              Id  Mem(MB)  CPU  State  Time(s)  Console
Domain-0           0      385    0  r----   1435.7
woody              1       47    0  -b---     14.4    9601

變成了 48M

也可以直接由 guest OS 來調整自己的記憶體大小,檔案在 /proc/xen/memory_target
代碼: 選擇全部
expr 64 \* 1024 \* 1024
67108864

echo "67108864" > /proc/xen/memory_target
Reclaim 16MB from xen. Domain now has 64MB


由 domain-0 來看,記憶體又變回 64M。

代碼: 選擇全部
xm list
Name              Id  Mem(MB)  CPU  State  Time(s)  Console
Domain-0           0      385    0  r----  13213.5
woody              4       63    0  -----      2.4    9601


目前 xen 並沒有支援 cow(Copy On Write) 的功能。
而在 guest OS 要啟動 GUI 的話,和 user mode linux 一樣,採用 xnest 即可,或是直接用 ssh X11 forwarding。

xen 目前只能在 x86 機器上跑,而且只支援 P6 以上的 CPU,也支援基本的 Hyper Threading

有在用 user mode linux 的人,可以試試看 xen,絕對不會讓您失望的。

目前在 debian sid 中有包 xen 1.2,但 2.0 還沒進入。

另外,在 /etc/init.d/ 中除了有 xend 之外,還有一個 xendomains 的 script,是開機時用來自動啟動 guest OS 及關機前關閉 guest OS 的 script,只要將 guest OS 的設定檔做個連結到 /etc/xen/auto 目錄中即可,別忘了用 update-rc.d 將 xend 及 xendomains 加到各個 runlevel 中,才會自動啟動及關閉。

在我們 make docs 之後,/usr/share/doc/xen 目錄中有 xen 的 manual(有 html、pdf、ps 版),裡面有很詳盡的說明。
louie
快樂的大學生
快樂的大學生
 
文章: 593
註冊時間: 週一 9月 09, 2002 7:58 pm

re:如何從 source 安裝 xen 2.0

文章訪客 » 週日 11月 14, 2004 12:16 am

之前有試用一下 xen, 真的很好用~
訪客
 

re:如何從 source 安裝 xen 2.0

文章Tetralet » 週三 11月 24, 2004 11:59 am

好奇問一個笨問題...

我想,用 chroot 似乎就能做到和 xen 類似的效果,
雖然 chroot 的受限較多,
如:必須使用 Host OS 的所有系統資訊,像是 Kernel、IP Address、/proc...
但比較起來使用 chroot 是比較不需要那麼傷腦筋的...

請問一下,
xen 和 chroot 的差別僅止於此嗎?
時間並不能治療我心中的疼痛
南方的春天說什麼也溫暖不了我冰冷的血

誦唱大復活咒文,今天的 Tetralet 又在唧唧喳喳了 重生!
Tetralet
俺是博士
俺是博士
 
文章: 3078
註冊時間: 週四 11月 28, 2002 3:02 pm

re:如何從 source 安裝 xen 2.0

文章louie » 週六 11月 27, 2004 2:57 pm

我想差最多的是 xen 能跑 netbsd,freebsd 等等吧 :-D

應該要這麼說,chroot 和 user mode linux 的差別在那 ??????
另外,就我所知,有些 daemon 對 chroot 的支援不好,而 user mode linux 及 xen 就沒有這個問題,因為等於是另一個 OS 了。(事實上我也不是很清楚,如有錯誤,請各位不吝指正)。
louie
快樂的大學生
快樂的大學生
 
文章: 593
註冊時間: 週一 9月 09, 2002 7:58 pm

re:如何從 source 安裝 xen 2.0

文章阿信 » 週六 11月 27, 2004 8:21 pm

hi...各位先進們,最近也在用 chroot 作 package maintainance,但 chroot 環境無法進行 kernel debug(這是當然的),而不曉得 user mode linux或是xen是否能完成這個需求。因為 vmware 的效能並不是很高... :-(
頭像
阿信
版面大總管
版面大總管
 
文章: 4756
註冊時間: 週二 9月 03, 2002 11:58 pm
來自: 台灣 - 嘉義

re:如何從 source 安裝 xen 2.0

文章damon » 週日 11月 28, 2004 5:53 pm

以阿信長輩的財力...嗯
另外一台跟現在用的一樣等級的機器應該不是什麼問題才對 8-)
damon
活潑的高中生
活潑的高中生
 
文章: 358
註冊時間: 週二 9月 10, 2002 5:42 pm

re:如何從 source 安裝 xen 2.0

文章阿信 » 週日 11月 28, 2004 7:25 pm

:-o ...小弟一直是很節儉的...年末快到要節儉好過年...

好像離題了...XD
頭像
阿信
版面大總管
版面大總管
 
文章: 4756
註冊時間: 週二 9月 03, 2002 11:58 pm
來自: 台灣 - 嘉義

文章axa » 週三 12月 07, 2005 12:56 am

:finger1:

挖~~~太好了... 我之前也po了一篇 gentoo on xen的文章

有興趣的話,參考一下吧

http://forums.gentoo.org.tw/viewtopic.php?t=43721
Turst & Unique...
axa
可愛的小學生
可愛的小學生
 
文章: 8
註冊時間: 週五 5月 02, 2003 3:32 pm


回到 share

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 1 位訪客