CentOS 5.x 上的 Linux-VServer
<<TableOfContents: execution failed [Argument "maxdepth" must be an integer value, not "[1]"] (see also the log)>>
|
CentOS 的开发者花费很多时间及功夫来确保 CentOS 是稳定的,并适用于生产环境内。采用 VServer 意味着使用不受支持的内核。它除了影响 KVM 仿真多个处理器的能力外,本作者未发现有其它问题。这并不等于你不会遇上问题,因此请自行承担下面带来的风险。 |
这个 wiki 上有另一篇文章更详尽地解释采用不受支持的内核的风险。如果你准备在生产设备上使用 VServer,请先 阅读它。
尽管如此,VServer 的人们当然也在它们的内核上花了不少功夫。本作者在测试的机器上执行了各款的程序,而除了 KVM-qemu 的 smp 问题外,并没有遇到其它问题。最重要的一点就是 CentOS 的开发者只能官方地支持 CentOS 的内核。
Linux-VServer 与一个 FreeBSD 监狱非常相似。它并不像 VirtualBox 或 VMware 般是台虚拟机器,反而更像一个复杂的 chroot 环境。它可以在执行网页服务器等程序时加入略外一层保障。你可以为客端系统设置资源应用的上限。按缺省值,它会动态地分享主机的内存及处理器,并以接近原生的速度运行。
VServer 的网页内备有一篇文章解释不同的虚拟化方式,以及在一页里列出它在哪些情况下是个好的选择。
这个网站备有大量文档。这篇文章的不少篇幅来自该处。
1. 准备安装
进行安装前,主机上必须先完成数件事情。简单来说:新增 yum 软件库、下载内核、及修改主机的某些设置。
1.1. 新增 yum 软件库
在 /etc/yum/repos.d 内置立一个新文件。VServer 的 wiki 文章称它为 dhozac-verser.repo。这个文件的内容有 {{{[dhozac-vserver] name=Linux-VServer related packages for CentOS $releasever - $basearch baseurl=http://rpm.hozac.com/dhozac/centos/$releasever/vserver/$basearch gpgkey=http://rpm.hozac.com/conf/keys/RPM-DHOZAC-GPG-KEY}}}
本篇 wiki 推荐你在进行任何动作前先更新 yum。
yum update yum
请留意自 12 月底,dhozac 这个软件库经常不能被运用。在这个情况下
baseurl=http://rpm.hozac.com/dhozac/centos/$releasever/vserver/$basearch
可以临时被替换为
baseurl=http://mirror.fubra.com/rpm.hozac.com/dhozac/centos/$releasever/vserver/$basearch
1.2. 取得 VServer 内核
下一步是要取得 vs 内核。它的版本比 CentOS 所采用的更要新,因此只要执行
yum update kernel kernel-devel
便会下载 VServer 的内核,截至本文是 2.6.22.19-vs2.3.0.34.1。kernel-devel 这个 rpm 对重建或许会有帮助,否则你也许不需要它。安装时一个新的项目将会自动被加进 grub。
2. 更改主机设置
假若读者拥有任何第三方的模块,它们必须针对新的内核被重新创建。截至本文,支持渐趋流行的 Realtek 内置网络适配器的 r8168 模块是其中之一。(这个情况应该在上游供应者的下个版本会有所改善,它大概会在 2008 年 6 月中旬被引进 CentOS。)假若你采用 rpmforge 的 dkms 版本,事情就相当简单。
当新版内核被安装后,它在 /lib/modules 内会有一个新的目录。为了方便输入,现时的 2.6.18-53.1.19.e15 版的 CentOS 内核将会被缩写成 2.6.18,而 VServer 的内核将会被缩写成 2.6.22-vs。请在 /lib/modules 内使用真实的名称,而不是这里的缩写。
r8168 这个模块将会在 /lib/modules/2.6.18/extras 之内。请将它复制到新内核的 /lib/modules 位置,然后执行 depmod。
{{{cd /lib/modules cp 2.6.19/extras/r8168.ko 2.6.22-vs/extras depmod 2.6.22-vs}}}
这个模式应该适用于任何 dkms 模块。
至于 NVidia,或任何从该生产商的网站下载的模块,它们很可能都须要在引导新内核后重建。因此,假若相关的模块是为网络卡而设,在重新开机前请确定已经下载了所需的文件。
在安装前的另一个考虑,就是你若果要以 ssh 来访问虚拟客端系统,你必须编辑主机的 /etc/ssh/sshd_config 文件。它的缺省值是在所有地址聆听。然而,客端系统将会拥有自己的地址,因此请编辑主机的 sshd_config 令它只在自己(主机)的地址上聆听。请修改 /etc/ssh/sshd_config 内这一行
#ListenAddress 0.0.0.0
删除 # 号来去掉它的注释,然后将 ListenAddress 改为主机的 IP。假如主机的 IP 位置是 192.168.1.80,这一行便成为
ListenAddress 192.168.1.80
接着重新引导 ssh。
/etc/init.d/sshd restart
安装一些应用客端系统时所需的组件。
yum install util-vserver{,-core,-lib,-sysv,-build}
在 /etc/init.d 内将会有个新的项目。请将 vprocunhide 及 util-vserver 设置为开机时引导。(这一步在安装时可能已经完成。) {{{chkconfig util-vserver on chkconfig vprocunhide on}}}
用新的内核重新开机。
3. 安装客端系统
VServer 在关于创建客端系统的文档内提供了数个方法。在这个样例中,我们将会安装一台 CentOS 客端系统。就 CentOS 来说,利用范本及采用 yum 是最简单的两个方法。
现时已经有一个范本可用来安装最基本的 CentOS。你可以从 sandio.net 下载映像并采用范本这个方法。截至本文,现时只备有 32 位元的范本作为 CentOS 5.x 映像。
采用这个方法时请将范本,一个 tar.bz2 映像,存储在某处。(VServer 的文档以 /vservers/.templates 为例。)请勿将它解压,因该文件会在创建过程中被直接应用。
这个范本亦可以应用在其它系统上。譬如你在 Fedora 上安装了 VServer 的内核,你亦可以创建一台 CentOS 客端系统。
在下列样例中,我们将客端系统命名为 vcentos。它的本地是 example.com。请将所有 vcentos 改为你的服务器的名称,并以你的域名代替 example.com。这个指令必须在同一行内输入。(视乎划面尺寸及解像度,很多浏览器会将它显示为数行。)
{{{vserver vcentos build -m template --hostname vcentos.example.com --interface eth0:192.168.1.70/24 -- -d centos5 -t /vservers/.templates/centos-5-i686-2007-07-14.tar.bz2}}}
3.0.1. 解释
vserver vcentos。客端系统去掉本地的名称。请把它改为你选择给客端系统的名称。
build -m template。-m 代表「方法」。在这个例子里,要以范本的方法进行创建。
--hostname。客端系统的完整机名,连同域名在内。
--interface eth0:192.168.1.70/24。客端系统的网络界面及 IP 地址。它应该与主机位于同一个子网络。在这个样例里,我们采用典型的 192.168.1.0/24 子网络。(对于那些不熟识这个写法的人,它与意思等同一个 255.255.255.0 的子网掩码。)
-- -d centos5。-- 是一个分隔符号,接着是你的发行版本的名称。如果你下载了一个 Fedora 8 的映像,你应该用 -d fedora8。
这个 -- 并非错字。build 这个指令分为不同部份,而它们是以 -- 隔开的。等一部份是基本选项的设置,在这个例子中包括开头一切至 --interface。第二部份以 -- 隔开,所提供的是发行版本,以及在这个例子的范本位置。
-t /vservers/.templates/centos-5-i686-2007-07-14.tar.bz2。-t 代表要应用的范本,因此请列出范本的全路径。
3.0.2. 通过 yum 进行安装
若要安装 64 位元的 CentOS 客端系统(只可在 64 位元主机上进行),请以 yum 的方法进行安装。
{{{vserver vcentos build -m yum --hostname vcentos.example.com --interface eth0:192.168.1.70/24 -- -d centos5}}}
这样做会进行最细小的安装,当中只包括基本系统、gcc 及少数其它东西。
要安装 Fedora 8 的客端系统,请将 -d 的值改为 f8。一个可用的发行版本清单已经收录在 /usr/lib/util-vserver/distributions。(在 64 位元主机上,这个清单位于 /usr/lib64/util-vserver/distributions。)
4. 设置客端系统
4.1. 组件管理
刚安装好的客端系统属最小的系统。假若你以范本来创建它,最基本的指令都应该全备,但如果你利用 yum 来创建它,less、which、passwd 及 vi 等指令都不存在。你可以从主机或在客端系统内管理组件。
要从主机管理组件,请使用 vyum 指令。它的语法是
vyum <servername> -- install <package_name>
譬如说我们要在客端系统上安装 passwd 这个指令
vyum vcentos -- install passwd
你会看见一个典型的对话框,用来显示将会被下载的组件,并要求你确认。输入 y 或 yes 后,你将会看见被些组件被安装。
对于通过 yum 创建的系统,就算它们不在运行中依然可以应用这个指令。
然而,假若组件的名称不正确,例如你错误输入 vi 而要是 vim-minimal 或 vim-enhanced,除了看不见典型的 yum 对话框外,你不会收到任何关于失败的通知。它可能会短暂地停顿,然后便返回指令符。假如你看不见典型的 yum 对话框,那么该组件便没有被安装。若果你提供了错误的组件名称,你或许会看见典型的 yum 对话框以 Nothing to do 这个信息来结束,但这并非必然。
如果你以 yum 安装方法来创建了一台客端系统,然后想在客端系统内管理组件,你首先要安装 yum 及 vyum。接着请执行
{{{verserver pkgmgmt internalize. vyum vcentos -- install yum vserver vcentos pkgmgmt internalize}}}
如果 yum 未被正确地安装,pkgmgmt 这个指令会汇报错误。
假若客端系统是从范本所创建的,以上的步骤都是不必要的。
5. 进一步的设置
客端系统的文件都放置在 /etc/vserver/vcentos/vdir。你可以在引导服务器前编辑它们。(请记得 vcentos 是我们的样例服务器名称,你应该改用你的服务器名称。)
引导客端系统。
vserver vcentos start
请进入你的服务器作进一步的设置
vserver vcentos enter
你将会被放在一个指令提示元。缺省的安装里没有 /etc/shadow,因此你不能更改 root 的密码。要解决这个问题,假设你已利用 vyum 安装了 passwd 这个指令(或者 yum,在已安装了 yum 的客端系统),请执行
pwconv
如此 /etc/shadow 这个文件便会被创建。你现在可以通过正常做法为 root 设置一个密码。
若然你计划通过 ssh 访问客端系统,(缺省不会在客端上安装 —— 你需要安装 openssh-server 及客户端),客端系统上的 /etc/pam.d/sshd 必须被修改。请遵从 VServer 常见问题集,在 CentOS 及 Fedora 客端系统上将 /etc/pam.d/sshd 档内的最后一行注释掉。它的内容是 session required pam_loginuid.so
请在行首加入 # 符号将它注释掉。
此刻,你可以一如其它 CentOS 系统般设置你的客端系统。举个例说,如果你是要通过 VServer 为你的网页服务器加上额外一层保障,现在你便可以安装 httpd 并在设置客端系统上的相关文件。
6. 在主机引导时执行 VServer
要在你的主机引导时引导缺省的 vserver 客端系统,请先启用 /etc/init.d/vserver-default 这个脚本。
chkconfig vserver-default on
接着进到 /etc/vservsers/vcentos/apps/init。(请以你的服务器名称替换 vcentos。)
echo default > mark
换句话说,你会创建一个名为 mark 的文件,当中包含 default 这个单字。下次你引导主机系统时,名叫 vcentos 的 Vserver 客端系统亦会引导。
这是一个颇简单的介绍。你亦可执行多台机器、限制一台机器所应用的资源、与及其它事情。我们推荐读者浏览 VServer 的网页来取得更多信息。
(这篇文章的原稿已收录在 http://home.roadrunner.com/~computertaijutsu/vserver.html)
Translation of revision 12