新手安裝Xentoo(Xen+Gentoo)的極速體驗(yàn)
作者:Redant 文章來(lái)源:本站原創(chuàng) 點(diǎn)擊數(shù): 980 更新時(shí)間:2006-4-26
Xen的出現(xiàn)是虛擬化技術(shù)的一大突破,操作系統(tǒng)在Xen虛擬機(jī)中運(yùn)行速度和直接在硬件上運(yùn)行速度幾乎相當(dāng),這在以前是不可能的,下面我們一起來(lái)進(jìn)入這個(gè)極速的虛擬世界……
安裝Xentoo不用深入學(xué)習(xí)Xen虛擬機(jī),只須了解一下它的運(yùn)行機(jī)制和幾個(gè)基本術(shù)語(yǔ)就足夠了:
Xen:
Xen 是在劍橋大學(xué)作為一個(gè)研究項(xiàng)目被開(kāi)發(fā)出來(lái)的,目前在GPL許可下開(kāi)源。Xen 被定義為一款 半虛擬化(paravirtualizing) VMM(虛擬機(jī)監(jiān)視器,Virtual Machine Monitor),這表示,為了調(diào)用系統(tǒng)管理程序,要有選擇地修改操作系統(tǒng),然而卻不需要修改操作系統(tǒng)上運(yùn)行的應(yīng)用程序。雖然 VMWare 等其他虛擬化系統(tǒng)實(shí)現(xiàn)了完全的虛擬化(它們不必修改使用中的操作系統(tǒng)),但它們?nèi)孕枰M(jìn)行實(shí)時(shí)的機(jī)器代碼翻譯,這會(huì)影響性能?,F(xiàn)在的Xen要為內(nèi)核打補(bǔ)丁,但是,將來(lái)的處理器能支持虛擬化,內(nèi)核也就不需要打補(bǔ)丁了。比如說(shuō),Intel的VT和AMD的Pacifica處理器都將包括這種支持。XenSource公司2005年8月在Intel開(kāi)發(fā)者論壇(IDF)上發(fā)表聲明說(shuō),它已經(jīng)利用Intel的VT-Enabled平臺(tái)和Xen技術(shù)虛擬化了Linux和Windows XP SP 2。
dom0,domU:
在Xen中,一個(gè)“系統(tǒng)管理程序”(Xen自身被稱為“系統(tǒng)管理程序”,是因?yàn)樗瓤蛻鬙S的系統(tǒng)管理代碼運(yùn)行所需的特權(quán)級(jí)還高。)運(yùn)行在0環(huán),客戶OS運(yùn)行在1環(huán),應(yīng)用程序運(yùn)行在3環(huán)。當(dāng)系統(tǒng)引導(dǎo)的時(shí)候,Xen被裝載到0環(huán)的內(nèi)存中。它在1環(huán)上啟動(dòng)修補(bǔ)過(guò)的內(nèi)核,這被稱作是domain 0(domain是指一個(gè)運(yùn)行中的虛擬機(jī),在其上有一個(gè)guest OS在執(zhí)行)。從這個(gè)domain開(kāi)始,你可以創(chuàng)建和管理更多的domain,這些domains統(tǒng)稱為domain U。目前,修補(bǔ)過(guò)的Linux內(nèi)核2.4和2.6可以作為domain 0,而物理設(shè)備驅(qū)動(dòng)程序只能運(yùn)行在特權(quán)級(jí),也就是domain 0上。
Gentoo:
Gentoo Linux 是一個(gè)基于源碼包的 Linux 系統(tǒng)。和已有的商業(yè)發(fā)行版相比,Gentoo 非常獨(dú)特。
如今的商業(yè) linux 發(fā)行版提供了一個(gè)幾乎完全自動(dòng)化的安裝過(guò)程。在自動(dòng)的硬件檢測(cè)之后,你只要回答幾個(gè)問(wèn)題,劃分硬盤(pán)就可以了。一會(huì)功夫,所有的東西就都安裝好了,你只要登陸就行了。
Gentoo 的安裝過(guò)程是基于命令行的,幾乎沒(méi)有東西是自動(dòng)完成的。大部分的設(shè)置都是通過(guò)使用編輯器手工設(shè)置配置文件完成的,安裝過(guò)程會(huì)消耗大量的時(shí)間。
Gentoo 的安裝過(guò)程可以看做是一次 Linux 的課程。你可以從中學(xué)到很多有關(guān)系統(tǒng)的知識(shí)。大量的步驟都是手工完成的,消耗了很多時(shí)間,但從此以后,你可以更好地理解你的 Linux 系統(tǒng)地工作了。
Gentoo 還使用特定地編譯器選項(xiàng)編譯程序,這些選項(xiàng)可以生成為你的 CPU 定制的優(yōu)化代碼。
除此之外,你還可以加入或去掉某些編譯特征。最終的結(jié)果就是一個(gè)符合你的需要的優(yōu)化的、個(gè)性化的系統(tǒng)。
Xentoo:
一個(gè)新創(chuàng)的詞,由Xen+Gentoo合成而來(lái),意思是運(yùn)行于Xen之上的Gentoo,在本文中,代表的是一個(gè)解決方案
那么,為什么要有Xentoo?
由于Gentoo有著上述的諸多優(yōu)點(diǎn),深受Linux愛(ài)好者喜歡,不過(guò)初學(xué)者安裝時(shí)很容易因?yàn)檎`操作導(dǎo)致硬盤(pán)的數(shù)據(jù)全軍覆沒(méi),而且還必須邊看手冊(cè)邊安裝,因此不少人用VMWare安裝Gentoo,但是VMWare本身效率不高,導(dǎo)致安裝和運(yùn)行Gentoo時(shí)會(huì)浪費(fèi)大量的時(shí)間。有一天,Linuxfans們終于忍不住了,說(shuō)要有Xentoo,于是就有了Xentoo……
完美安裝Xentoo,主要分3個(gè)階段:
第一階段:安裝Xen和dom0新內(nèi)核,測(cè)試Xen
1.1、這個(gè)安裝經(jīng)驗(yàn)主要參考
Xen Users‘ manual,在安裝Xen前必須認(rèn)真閱讀該文檔
1.2、準(zhǔn)備所需軟件:Xen二進(jìn)制安裝包:
xen-2.0.7-install-x86_32.tgz和Xen源代碼包:
xen-2.0.7-src.tgz,以及Xen User‘s manual文檔中+號(hào)軟件(安裝運(yùn)行Xen所需),*號(hào)的軟件(編譯Xen所需)(二進(jìn)制包里面包含Xen的執(zhí)行文件和修改過(guò)的Linux2.4/2.6內(nèi)核,但這些內(nèi)核只是基本配置,幾乎所有(網(wǎng)卡,聲卡,等硬件)驅(qū)動(dòng)都沒(méi)有編譯進(jìn)去.如果想真正體驗(yàn)Xen,為了使硬件得到正確驅(qū)動(dòng),應(yīng)使用源碼進(jìn)行編譯安裝)
以下是Xen User‘s manual中提到的所需軟件:
+ The iproute2 package.
+ The Linux bridge-utils (
http://bridge.sourceforge.net)
+ The Linux hotplug system (
http://linux-hotplug.sourceforge.net/)
* Twisted v1.3 或以上 (編譯xen時(shí)通過(guò)make install-twisted得到)
* Build tools (gcc v3.2.x or v3.3.x, binutils, GNU make)
* libcurl 開(kāi)發(fā)庫(kù)(libcurl-devel)
* zlib 開(kāi)發(fā)庫(kù) (zlib-dev)
* Python 開(kāi)發(fā)庫(kù) v2.2 或以上 ( python-dev)
* LATEX(用于生成文檔)
**從二進(jìn)制包安裝的,解壓后執(zhí)行install.sh安裝(它會(huì)檢測(cè)所需軟件是否齊全,否則不會(huì)安裝),完成后,跳到1.9
**以下步驟主要介紹從src安裝(2.4與2.6的安裝方式稍有不同,下面的介紹會(huì)同時(shí)針對(duì)這兩種版本的內(nèi)核)
1.3、解壓
#cd /tmp
#wget
http://www.cl.cam.ac.uk/Research/SRG/netos/xen/downloads/xen-2.0.7-src.tgz#tar -zxvf xen-2.0.7-src.tar.gz
#cd xen-2.0
1.4、閱讀xen的makefile(很簡(jiǎn)單,就幾十行,主要為了解make做了哪些工作,為下一步修改作準(zhǔn)備,如果內(nèi)核是2.6,這一步可跳過(guò))
1.5、修改Makefile,(根據(jù)需要修改,內(nèi)核為2.6的可以跳過(guò)這一步.Xen-2.0.7目前只支持linux-2.4.30,linux-2.6.11,netbsd-2.0,freebsd-5.3)
以下是針對(duì)我的redhat9,2.4內(nèi)核的修改
KERNELS ?= linux-2.6-xen0 linux-2.6-xenU
改為
KERNELS ?= linux-2.4-xen0
xen0為host os - domain 0的核心,而xenU作為guest os - domain U的核心,可以不需要任何硬件驅(qū)動(dòng)程序.
這里暫時(shí)不編譯xenU,主要是為了節(jié)省一些時(shí)間,在后面安裝Gentoo的時(shí)候直接采用Xen二進(jìn)制安裝包中預(yù)編譯好的內(nèi)核.因?yàn)槲业臋C(jī)器比較慢,編譯一次內(nèi)核要2、3個(gè)小時(shí),各位可以根據(jù)自己的實(shí)際需要決定是否編譯xenU
1.6、復(fù)制Linux內(nèi)核源碼(bz2格式)到xen-2.0目錄內(nèi)(網(wǎng)速快的可以跳過(guò)這一步,Xen會(huì)從自動(dòng)網(wǎng)上下載相應(yīng)的內(nèi)核)
1.7、使用自己的.config文件編譯內(nèi)核:(下面主要是以我的2.4.30內(nèi)核為例,對(duì)于2.6內(nèi)核原理相同,可以根據(jù)自己實(shí)際情況進(jìn)行修改)
1)、Xen內(nèi)核補(bǔ)丁程序的bug,不修改這個(gè),編譯內(nèi)核會(huì)出錯(cuò):(對(duì)于2.6內(nèi)核沒(méi)有這個(gè)bug,可以跳過(guò)這一步)
修改 linux-2.4.30-xen-sparse/mkbuildtree
找到cd ${AD}/include/asm-xen 在下面加入:
ln -sf ../asm-i386/acpi.h
ln -sf ../asm-i386/cobalt.h
ln -sf ../asm-i386/e820.h
ln -sf ../asm-i386/edd.h
ln -sf ../asm-i386/hc_sl811-hw.h
ln -sf ../asm-i386/lithium.h
ln -sf ../asm-i386/pci-direct.h
ln -sf ../asm-i386/save_state.h
ln -sf ../asm-i386/sl811-hw.h
ln -sf ../asm-i386/smpboot.h
2)、讓Xen自動(dòng)對(duì)內(nèi)核打補(bǔ)丁,并在補(bǔ)丁完畢中止程序(一定要中止程序,否則Xen會(huì)使用它默認(rèn)的defconfig,這個(gè)配置是沒(méi)有任何硬件驅(qū)動(dòng)的)
#make kernels
輸入完命令后,Xen會(huì)自動(dòng)下載內(nèi)核源碼并打補(bǔ)丁,打完補(bǔ)丁,準(zhǔn)備make內(nèi)核的時(shí)候(這時(shí)屏幕顯示一大堆config信息),按Ctrl+c中止程序.
3)、復(fù)制現(xiàn)有內(nèi)核的配置文件到 linux-2.4.30-xen0
#cp /boot/config-2.4.30 linux-2.4.30-xen0/.config
#cd linux-2.4.30-xen0
#make ARCH=xen oldconfig
期間會(huì)提示新增的有關(guān)Xen的選項(xiàng),全部都選y
4)、編譯內(nèi)核
#make ARCH=xen dep
#make ARCH=xen modules
#make ARCH=xen modules_install
#make ARCH=xen install
5)、安裝與內(nèi)核版本對(duì)應(yīng)的modutils(參考 linux-2.4.30-xen0/Documentation/Changes)
6)、TLS Libraries (這是Xen Users‘ manual 2.4.3小節(jié)中的原文,根據(jù)自己實(shí)際情況處理)
Users of the XenLinux 2.6 kernel should disable Thread Local Storage (e.g. by doing a mv /lib/tls /lib/tls.disabled) before attempting to run with a XenLinux kernel2.4. You can always reenable it by restoring the directory to its original location (i.e. mv /lib/tls.disabled /lib/tls).
The reason for this is that the current TLS implementation uses segmentation in a way that is not permissible under Xen. If TLS is not disabled, an emulation mode is used within Xen which reduces performance substantially.
We hope that this issue can be resolved by working with Linux distribution vendors to implement a minor backward-compatible change to the TLS library.
大意是使用2.6內(nèi)核的用戶需要禁止TLS(執(zhí)行這個(gè)命令 #mv /lib/tls /lib/tls.disabled),否則性能會(huì)下降
**對(duì)于2.6的內(nèi)核,可以根據(jù)上述各項(xiàng)原則相應(yīng)修改后自行配置編譯
1.8、所有修改就緒,編譯安裝Xen
Xen還需要用到3個(gè)軟件(Twisted Matrix Framework,Python Logging package,iptables),如果機(jī)器上沒(méi)有的可以用以下命令安裝:
#cd /tmp/xen-2.0
#make install-twisted;
#make install-logging;
#make install-iptables;
接下來(lái)開(kāi)始編譯安裝(我沒(méi)有l(wèi)atex,所以不編譯doc)
#make install-xen;
#make install-tools;
**注意,這里不要再執(zhí)行make kernels或make install-kernels,因?yàn)樵诘?步我們已經(jīng)手動(dòng)配置并編譯安裝了被xen修改的新內(nèi)核
1.9、修改啟動(dòng)配置 /boot/grub/grub.conf (以下是針對(duì)2.4內(nèi)核和我的128M內(nèi)存的機(jī)器的,Xen大概占了12M左右,若是2.6內(nèi)核和更大的內(nèi)存則進(jìn)行相應(yīng)修改,強(qiáng)烈推薦使用256或更多的內(nèi)存)
添加:
title Xen 2.0 / XenLinux 2.4
kernel /boot/xen-2.0.gz dom0_mem=53248
module /boot/vmlinuz-2.4-xen0 root=/dev/hda2 ro console=tty0
1.10、測(cè)試Xen,配置ttylinux
1)、下載并解壓ttylinux (
http://sf.net/projects/xen/)
#cd /tmp
#wget
http://jaist.dl.sourceforge.net/sourceforge/xen/ttylinux-xen.bz2#bzip2 -d ttylinux-xen.bz2
2)、創(chuàng)建配置文件: /etc/xen/auto/ttylinux
內(nèi)容:
kernel = "/boot/vmlinuz-2.6-xenU"
memory = 64
name = "ttylinux"
nics = 1
ip = "1.2.3.4"
disk = [‘file:/tmp/ttylinux-xen,sda1,w‘]
root = "/dev/sda1 ro"
**如果/boot里面沒(méi)有vmlinuz-2.6-xenU或vmlinuz-2.4-xenU,可以從Xen的二進(jìn)制安裝包/boot目錄中得到
3)、重新啟動(dòng),進(jìn)入XenLinux,執(zhí)行命令,創(chuàng)建domain(就是啟動(dòng)一個(gè)虛擬的ttylinux)
#xend start
#xm create /etc/xen/auto/ttylinux -c
查看xm的詳細(xì)用法:
#xm help
如果ttylinux順利啟動(dòng)進(jìn)入login界面,且能ping得到,證明第一階段的安裝基本成功了.
第二階段:安裝domU - Xentoo
這里是探討如何把Gentoo作為domU安裝到文件而不是真實(shí)分區(qū)的方法,不同于HOWTO_Xen_and_Gentoo
主要參考 <Gentoo Linux 硬盤(pán)安裝參考指南>,<Gentoo Linux x86 手冊(cè)>,<Xen Users‘ manual> - "A. Installing Xen / XenLinux on Debian"
2.1、
首先制作硬盤(pán)映像文件(root:4G,boot:32M,swap:256M),若直接安裝到硬盤(pán)分區(qū),可跳過(guò)這一步
#dd if=/dev/zero of=xentoo-root.image bs=1024k count=4000
#dd if=/dev/zero of=xentoo-swap.image bs=1024k count=256
2.2、格式化文件系統(tǒng)(若直接安裝到硬盤(pán)分區(qū),則把image文件名改為相應(yīng)的設(shè)備名)
#mkfs.ext3 xentoo-root.image
#mkswap xentoo-swap.image
2.3、掛裝分區(qū)到新建的目錄(若直接安裝到硬盤(pán)分區(qū),則把image文件名改為相應(yīng)的設(shè)備名,并且mount命令不許要loop參數(shù))
#mkdir /mnt/gentoo
#mount -o loop xentoo-root.image /mnt/gentoo
2.4、下載并解壓stage3(
http://mirror.gentoo.gr.jp/releases/x86/2005.1/stages/)放到gentoo的根也就是/mnt/gentoo (根據(jù)自己的CPU下載相應(yīng)的包)
#cd /mnt/gentoo
#wget
http://mirror.gentoo.gr.jp/releases/x86/2005.1/stages/i686/stage3-i686-2005.1.tar.bz2#tar -xvjpf stage3-i686-2005.1.tar.bz2
2.5、設(shè)置系統(tǒng)環(huán)境
#chroot /mnt/gentoo /bin/bash
添加DNS:
echo "nameserver 202.96.128.86" >> /etc/resolv.conf
echo "domain xenlinux" >> /etc/resolv.conf
修改root密碼
#passwd root
修改/etc/fstab
/dev/sda1 / ext3 errors=remount-ro 0 1
/dev/sda2 none swap sw 0 0
proc /proc proc defaults 0 0
shm /dev/shm tmpfs nodev,nosuid,noexec 0 0
退出
#exit
#umount /mnt/gentoo
2.6、創(chuàng)建xen配置文件/etc/xen/auto/xentoo (推薦使用256或更多的內(nèi)存)
kernel = "/boot/vmlinuz-2.6-xenU"
memory = 64
name = "xentoo"
nics = 1
ip = "192.168.0.3"
gateway = "192.168.0.1"
disk = [‘file:/mnt/xentoo/xentoo-root-image,sda1,w‘,‘file:/mnt/xentoo/xentoo-swap-image,sda2,w‘]
root = "/dev/sda1 ro"
**若直接安裝到硬盤(pán)分區(qū),則disk那一行改為:
disk = [‘phy:hdaX,sda1,w‘,‘phy:hdaY,sda2,w‘]
hdaX,hdaY對(duì)應(yīng)你分給Xentoo的root分區(qū)和swap分區(qū)
2.7、啟動(dòng)Xentoo
#xend start
#xm create /etc/xen/auto/xentoo -c
如無(wú)意外即可進(jìn)入Xentoo登錄界面
上述所有操作相當(dāng)于Gentoo的安裝進(jìn)行了以下步驟
# chroot /mnt/gentoo /bin/bash
# env-update
# source /etc/profile
2.8、在Xentoo中安裝必備軟件
#emerge --sync (這里我用了1h)
#emerge fvwm (fvwm最小最快,3h)
fvwm最快的配置方法:
#cp /usr/share/fvwm/system.fvwm2rc-sample-95 ~/.fvwm/.fvwm2rc
安裝與配置Gentoo不屬于本文討論范圍,請(qǐng)根據(jù)Gentoo的手冊(cè)和自己的需要進(jìn)行后續(xù)安裝
安裝完后清理垃圾文件(rm -rf /usr/portage/distfiles/*;rm -rf /var/tmp/*)
2.9、配置Xwindow
Xentoo下不能用startx,所以不要著急配置XF86Config,有幾種方法進(jìn)入X:
* forward X11 apps through ssh (connect to the domain with ssh -X, run an
xterm - it should just appear).
* Run "vncserver" in the guest, connect to it from dom0 (or any other system).
By playing with your gdm / kdm / xdm config, you can cause the vncserver to
be started automatically and display the login screen.
* Run Xnest in dom0, tell apps to connect to that instead of a local Xserver.
* Run FreeNX server in the domU, connect to it using the free (as in beer)
client from NoMachine. NX performs well and can do nifty things like
forwarding sound, printing and local filesystems (if you can figure out how
to set it up!)
在這里,以VNC為例,參考
HOWTO Xvnc terminal server進(jìn)行配置,借助VNC就能很輕松進(jìn)入圖形界面 :-)
按照文檔配置完,如果直接執(zhí)行/etc/init.d/xdm restart,還是會(huì)出錯(cuò),/var/log/xdm.log:
xf86OpenConsole: Cannot open /dev/tty0 (No such file or directory)
為什么呢?噢,原來(lái)我沒(méi)有裝kdm和gdm,所以只能用xdm了:
修改/etc/X11/xdm/Xservers:
:0 local /usr/bin/X
改為
:0 local /usr/bin/Xvnc -geometry 800x600 -depth 16
修改~/.xsession:
添加
#!/bin/bash
exec /usr/bin/fvwm
重新啟動(dòng)xdm:
#/etc/init.d/xinetd restart
#/etc/init.d/xdm restart
回到domain0,運(yùn)行
vncviewer,連接到domU即可
2.10、在Xentoo中編譯新內(nèi)核要注意的事項(xiàng)
編譯過(guò)程請(qǐng)參考
HOWTO Xen and Gentoo 編譯完成后,poweroff,回到在dom0中,把新內(nèi)核復(fù)制出來(lái),替換舊內(nèi)核
#mount -o loop xentoo-root.image /mnt/gentoo
#cp /mnt/gentoo/usr/src/linux-2.6.x.y-xen/vmlinuz /boot/vmlinuz-2.6.x.y-xenU
#umount /mnt/gentoo
修改/etc/xen/auto/xentoo:
kernel = "/boot/vmlinuz-2.6.x.y-xenU"
再次啟動(dòng)Xentoo即可
#xm create /etc/xen/auto/xentoo -c
安裝到這里基本上大功告成,可以開(kāi)始享受極速虛擬的Xentoo了……
需要說(shuō)明一下,標(biāo)題所說(shuō)的極速在安裝Gentoo的時(shí)候是體驗(yàn)不到的,由于Gentoo是基于源碼的發(fā)行版,所以安裝Gentoo是個(gè)培養(yǎng)耐心的的過(guò)程.我用emerge -p gnome看了一下,需要安裝差不多200個(gè)包,超過(guò)500M的源代碼,天哪,如果用我的PII400/128M/6.4G編譯的話,可能要花5、6天時(shí)間,所以我才安裝最小的fvwm.論運(yùn)行速度Gentoo倒是比其他發(fā)行版快不少,花點(diǎn)時(shí)間安裝還是值得的.歡迎交流寶貴意見(jiàn),作者的伊妹兒:lostfalcon@tom.com,轉(zhuǎn)載請(qǐng)注明出處.
第三階段 使Gentoo可以單獨(dú)啟動(dòng)(脫離Xen)
編譯新內(nèi)核(emerge gentoo-source),根據(jù)自己實(shí)際情況進(jìn)行配置和編譯
對(duì)于直接安裝到硬盤(pán)分區(qū),修改grub即可
對(duì)于安裝到image文件,請(qǐng)搜索相關(guān)文檔