QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 918|回复: 2

[转贴]如何從 source 安裝 xen 2.0

[复制链接]
发表于 2005-9-2 00:17:37 | 显示全部楼层 |阅读模式
原文: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

要製作文件得要以下 packagesdebian 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 版),裡面有很詳盡的說明。
发表于 2005-9-2 13:43:45 | 显示全部楼层
已阅
回复

使用道具 举报

发表于 2005-9-2 21:43:27 | 显示全部楼层
是从维基百科p过来的???
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-19 19:39 , Processed in 0.046324 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表