[转贴]如何從 source 安裝 xen 2.0
原文:http://moto.debian.org.tw/viewtopic.php?p=30391發表於: 星期六 十一月 13, 2004 9:33 pm 文章主題: 如何從 source 安裝 xen 2.0 引言回覆
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/netos/xen/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/netos/xen/readmes/user/ HTML 版
download : http://sourceforge.net/project/showfiles.php?group_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 的目錄,進入這個目錄後,直接打:
代碼:
makeworld
幸運的話 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 fs/exportfs/expfs.o
LD fs/exportfs/exportfs.o
CC fs/fat/cache.o
CC fs/fat/dir.o
CC 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 IdMem(MB)CPUStateTime(s)Console
Domain-0 0 385 0r----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 IdMem(MB)CPUStateTime(s)Console
Domain-0 0 385 0r----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 IdMem(MB)CPUStateTime(s)Console
Domain-0 0 385 0r---- 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 IdMem(MB)CPUStateTime(s)Console
Domain-0 0 385 0r----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 版),裡面有很詳盡的說明。 已阅 是从维基百科p过来的???
页:
[1]