Main Page | 最近更改 | 編輯本頁 | 頁面歷史

可列印版 | 免責聲明 | 隱私政策

未登入
登入 | 幫助
 

VServer

出自DebianWiki

目錄

[編輯] 前言

VServer 是一種進階的 chroot 機制。 chroot 提供 processes 完全獨立的 file systems,但系統其它部份並不是獨立的。如可以看到所有 host 運行的 processes,網路位址也是跟 host 共用。

VServer 除了利用 chroot 的特性來打造一個獨立的 Linux 運行環境之外, 它還在 Linux Kernel 上動手腳,讓 VServer 在運作時彷彿真的是一台完全獨立的機器。

所以 vserver 必須和特製的 Linux Kernel 搭配運作。但還好的是目前 Debian 官方已有提供已編譯好的 linux-image-vserver,使用者不必再費心去自行編譯了。

[編輯] 事前準備

[編輯] 必須和支援 VServer 的 Kernel 搭配運作

由於 Kernel 還要加上 Patch 才能支援 VServer, 所以您可能得安裝以下套件:

kernel-patch-vserver

並自行使用 make-kpkg 指令來編譯並產生 Kernel 的 deb 套件。若是您不喜歡自行編譯 Kernel,您可以替而使用以下指令:

apt-cache search linux-image-vserver-*

來尋找 Debian 官方所提供有支援 VServer 的 Kernel。

[編輯] 安裝必需套件

而 VServer 所需的套件如下:

util-vserver

使用 apt-get 應該就能輕易安裝起來了。 另外,因為某些原因,請不要安裝 vserver-debiantools 套件。它是有名的大地雷...

[編輯] VServer 全域設定說明

VServer 的所有設定都是位於 /etc/vserver 中, 其中您可能會想要修改的是 /etc/vservers/.defaults/vdirbase, 它是一個符號連結,用來指定 VServer 子系統的安裝目錄。

由於安全上的因素,若您想要自行指定 VServer 子系統的安裝目錄, 請務必設定該目錄 barrier flag:

# 假設您的 VServer 子系統的安裝目錄為 /VServer
# 替該目錄設定 barrier flag
setattr --barrier /VServer

# 顯示該目錄的 barrier flag,其中大寫的 B 表示 barrier flag 已被設定了。
showattr -d /VServer
    ---Bui- /VServer

# 取消該目錄 barrier flag 的設定
setattr --~barrier /VServer

# 再一次顯示該目錄的 barrier flag,其中小寫的 b 表示 barrier flag 設定已被取消了。
showattr -d /VServer
    ---bui- /VServer

[編輯] 建立 chroot 環境

為了節省網路頻寬並縮短安裝時間, 我們可以利用手上已有的 Debian Sarge 安裝光碟或是 CD Image 檔來建立 chroot 環境。

[編輯] 掛載 Debian Installer CD Image

使用以下指令將 Debian Sarge 安裝光碟或是 CD Image 檔掛載在某個目錄下:

mount -o loop sarge-i386-netinst.iso /cdrom

[編輯] 建立 VServer 執行環境

使用以下指令來建立 VServer 執行環境:

# 這個 VServer 的名稱。日後將使用這個名稱來操作該 VServer
VServerName=VServer

# 這個 VServer 的 HostName
VHostName=vserver

# 和這個 VServer 搭配使用的網路介面
VInterface=eth0

# 這個 VServer 的 IP 位址和網路遮罩。
# 依個人使用經驗,在此可以使用和原生系統不同的 IP 位址
VIP=192.168.1.1
VPrefix=24

# 所使用的 Debian 版本。
# 必須和上一步中的 Debian 安裝光碟或是 CD Image 檔版本一致。
DebianVer=sarge

# 指定所使用的 Debian 安裝光碟或是 CD Image 檔的掛載目錄
# 或是指定 Debian Archiver 位址也可以
CDRomMountPoint='/cdrom'
Source="file:///$CDRomMountPoint/debian/"

# 指定沒必要安裝的套件
REMOVE_PACKAGES="sparc-utils,dhcp-client,lilo,makedev,pcmcia-cs,ppp,pppconfig,pppoe,pppoeconf,setserial,syslinux,fdutils,libpcap0,iptables,pciutils"

# 進行安裝
vserver $VServerName build -n $VServerName --hostname $VHostName --interface $VInterface:$VIP/$VPrefix -m debootstrap -- -d $DebianVer -m $Source -- --exclude=$REMOVE_PACKAGES

所以,您的指令可能會像這個樣子:

vserver VServer build -n VServer \
    --hostname vserver \
    --interface eth0:192.168.1.1/24 \
    -m debootstrap -- -d sarge -m /cdrom -- \
    --exclude="sparc-utils,dhcp-client,lilo,makedev,pcmcia-cs,ppp,pppconfig,pppoe,pppoeconf,setserial,syslinux,fdutils,libpcap0,iptables,pciutils"

等待個數分鐘,一個完整的 VServer 環境就出現了。

[編輯] 關閉不必要的 啟始/結束 Script

因為 VServer 所使用的還是 chroot 環境,所以有些開機動作,像是啟動網路、掛載磁碟分割區等等是不必要的。

所以請參考以下指令把這些 啟始/結束 Script 給刪掉:

# 指定 VServer 的 / 位址。
# 其中的 $VServerName 請參考上文中的設定。
CHROOTPATH="/etc/vservers/.defaults/vdirbase/$VServerName"

cd $CHROOTPATH/etc/rc0.d
rm K20makedev K25hwclock.sh S30urandom S31umountnfs.sh  S35networking S36ifupdown S40umountfs S90halt K89klogd

cd $CHROOTPATH/etc/rc6.d
rm K20makedev K25hwclock.sh S30urandom S31umountnfs.sh  S35networking S36ifupdown S40umountfs S90reboot K89klogd

cd $CHROOTPATH/etc/rcS.d
rm S05keymap.sh S48console-screen.sh S50hwclock.sh S40networking  S45mountnfs.sh S10checkroot.sh S02mountvirtfs
rm S30procps.sh S35mountall.sh S36mountvirtfs S39ifupdown S30checkfs.sh S18ifupdown-clean S18hwclockfirst.sh

cd $CHROOTPATH/etc/rc2.d
rm S20makedev S11klogd

[編輯] 設定 /etc/hosts 檔案

由於使用 debootstrap 所安裝的環境會沒有 /etc/hosts,所以您必須手動新增。例:

127.0.0.1	localhost.localdomain	localhost

[編輯] 系統微調

依您喜好,您還可以修改以下檔案:

以符合您的需求。

[編輯] 設定啟動時所要自動掛載的目錄

因為 VServer 所使用的還是 chroot 環境,所以在啟動 VServer 時是不該進行掛載磁碟分割區等等動作。

但,您可能會希望在啟動 VServer 時同時掛載某些目錄, 像是把主系統的 /var/cache/apt/archives 掛起來以節省磁碟空間, 那您可以修改 /etc/vservers/$VServerName/fstab 如下:

/var/cache/apt/archives	/var/cache/apt/archives	auto	rbind	0 0

它的語法和 /etc/fstab 極為類似,所以在此就不多加說明了。

[編輯] 啟動 VServer 並進行基本設定

在建立完 VServer 後,您可能會希望再設定一些像是 root 的密碼、系統時區等等, 請執行以下指令:

# 啟動這個 VServer 子系統
vserver $VServerName start

# 執行 base-config 指令
vserver $VServerName exec base-config

# 關閉這個 VServer 子系統
vserver $VServerName stop

來進入這個 VServer 子系統並執行 base-config 指令。

[編輯] 安裝 VServer 時的參考資訊

[編輯] VServer 子系統設定

在建立一個 VServer 子系統後, 因為 VServer 所使用的還是 chroot 環境, 所以您必須在外部指定這個 VServer 在啟動時所需的系統環境。

如:

設定啟動時所要掛載的磁碟機,請修改:

/etc/vservers/$VServerName/fstab

其中的 $VServerName 為您替這個 VServer 所指定的名稱。

若要設定 IP 位址及相關參數,請修改:

/etc/vservers/$VServerName/interfaces/0/dev
/etc/vservers/$VServerName/interfaces/0/ip
/etc/vservers/$VServerName/interfaces/0/prefix

其中,0 表示第 1 個網路介面。 您也可以依此自行建立該 VServer 所會用到的網路介面。

[編輯] VServer 常用指令

VServer 提供了一些操作子系統的指令,如:

若要啟動這個 VServer 子系統,請下達:

vserver $VServerName start


若要進入這個 VServer 子系統,請下達:

vserver $VServerName enter

若要關閉這個 VServer 子系統,請下達:

vserver $VServerName stop

其它的指令請參考 vserver 的使用手冊。

[編輯] VServer 的限制

[編輯] 在 VServer 上安裝各種網路服務的注意事項

[編輯] ssh

因為 sshd 在預設上是會監聽本機所有的網路位址,所以在 VServer 子系統裡就算啟動了 sshd,使用者連上的還是 VServer 主系統的 sshd。

所以請修改 VServer 主系統的 /etc/ssh/sshd_config 如下:

# 以下 192.168.1.1 為 VServer 主系統的 IP 位址
ListenAddress 192.168.1.1

並重新啟動 sshd。

[編輯] bind

因為安全上的因素,您無法在 VServer 上啟動由 Debian 官方所提供的 bind 9。您必須重新編譯 bind 9 並在編譯的過程中加上 --disable-linux-caps 參數。若您只願使用 Debian 官方所提供的套件,請替而使用 bind 8。

[編輯] dhcp

為了讓 DHCP Server 能夠啟動,請修改 /etc/vservers/$VServerName/bcapabilities 如下:

CAP_NET_RAW

並重新啟動該 VServer 子系統。

[編輯] nfs

據報告指出,nfs-kernel-server 不可能在 VServer 上正確運行。 請替而使用 nfs-user-server。

[編輯] mono

若需要使用 binfmt-support 請照下列順序安裝

apt-get install binfmt-support
add "none /proc/sys/fs/binfmt_misc binfmt_misc defaults 0 0" to /etc/vservers/<name>/fstab
/etc/init.d/binfmt_misc restart
vserver <name> exec apt-get install binfmt-support
vserver <name> restart

[編輯] 在 VServer 裡執行 X Window

為了讓 vserver 裡也能執行 X Window,您必須進行以下設定:

[編輯] 新增必要的 /dev 裝置

為了讓 X Window 能順利啟動,您必須在 vserver 裡新增如下裝置:

HROOTPATH="/etc/vservers/.defaults/vdirbase/$VServerName"

mknod $CHROOTPATH/dev/mem c 1 1
chmod 640 $CHROOTPATH/dev/mem
chown root:kmem $CHROOTPATH/dev/mem

mknod $CHROOTPATH/dev/tty0 c 4 0
chmod 600 $CHROOTPATH/dev/tty0
chown root:tty $CHROOTPATH/dev/tty0

mknod $CHROOTPATH/dev/tty7 c 4 7
chmod 600 $CHROOTPATH/dev/tty7
chown root:tty $CHROOTPATH/dev/tty7

cd $CHROOTPATH/dev; /sbin/MAKEDEV -v input

[編輯] 修改 bcapabilities

同時,您必須在 /etc/vservers/$VServerName/bcapabilities 中新增一行:

CAP_SYS_RAWIO

[編輯] 安裝 X Window

接下來,您就按您的需求安裝 X Window 所需的各式套件了。

[編輯] 在 VServer 裡啟動 nVIDIA 的 3D 加速顯示模組

其實使用 Xorg 所提供的 nv 或 vesa 模組就能順利啟動 X Window 了, 但我們還是想要使用 nVIDIA 官方所提供的顯示模組。

為了讓您的 VServer 裡的 X Window 也能使用 nVIDIA 官方所提供的顯示模組, 您必須再完成以下步驟:

[編輯] 新增 nVIDIA 顯示模組專用裝置

HROOTPATH="/etc/vservers/.defaults/vdirbase/$VServerName"

mknod $CHROOTPATH/dev/nvidia0 c 195 0
chown 660 $CHROOTPATH/dev/nvidia0
chown root:video $CHROOTPATH/dev/nvidia0

mknod $CHROOTPATH/dev/nvidia1 c 195 1
chown 660 $CHROOTPATH/dev/nvidia1
chown root:video $CHROOTPATH/dev/nvidia1

mknod $CHROOTPATH/dev/nvidia2 c 195 2
chown 660 $CHROOTPATH/dev/nvidia2
chown root:video $CHROOTPATH/dev/nvidia2

mknod $CHROOTPATH/dev/nvidia3 c 195 3
chown 660 $CHROOTPATH/dev/nvidia3
chown root:video $CHROOTPATH/dev/nvidia3

mknod $CHROOTPATH/dev/nvidiactl c 195 255
chown 660 $CHROOTPATH/dev/nvidiactl
chown root:video $CHROOTPATH/dev/nvidiactl

[編輯] 再度修改 bcapabilities

請再修改 /etc/vservers/$VServerName/bcapabilities 如下:

CAP_IPC_LOCK
CAP_IPC_OWNER
CAP_SYS_RAWIO
CAP_SYS_ADMIN
CAP_NET_ADMIN
CAP_NET_RAW
CAP_MKNOD

[編輯] 修改 vprocunhide-files

請再將以下兩行:

/proc/mtrr
/proc/bus/

加入 /usr/lib/util-vserver/defaults/vprocunhide-files 中, 並重新啟動 /etc/init.d/util-vserver。

注意:

新增這兩行可能會產生安全上的疑慮。
不過我們還是當作不知道好了...

[編輯] 在 VServer 裡安裝 nVIDIA 相關套件

為了能在 VServer 裡啟動 nVIDIA 模組,您還必須安裝以下 nVIDIA 相關套件:

nvidia-kernel-common 
nvidia-kernel
nvidia-glx   

其中的 nvidia-kernel 套件可由 nvidia-kernel-source 套件產生。

由於講解如何由 nvidia-kernel-source 建立 deb 套件已超出本文範圍,所以在此我們就偷懶一下吧...

[編輯] 在 VServer 裡啟動 ATI 的 3D 加速顯示模組

[編輯] 設定 X Window 的使用權限

請使用以下指令來設定哪些使用者可以啟動 X Window:

dpkg-reconfigure x11-common

此時設定為【Anyone】。

[編輯] 啟動 X Window

接下來,您只要鍵入 startx 就能進入 X Window 了。

[編輯] 故障排除

[編輯] 在開機時自動啟動特定的 VServer

如果您想讓某個 VServer 子系統在開機時自動啟動,請重新執 util-vserver 的 debconf 設定:

dpkg-reconfigure util-vserver

並在以下問題:

If you choose this option and add the word 'default' to /etc/vservers/<vserver-name>/apps/init/mark
then those vservers will be started and stopped in the regular system boot sequence.
If you do not choose this option,
then you will need to manually start each vserver by running 'vserver <vserver-name> start'.                                     
                                                                                                                         
Automatically handle the starting and stopping of Vserver guests?

裡回答【Yes】。

您可以依上文中的指示,將

default

寫入 /etc/vservers/<vserver-name>/apps/init/mark 中, 之後這些 VServer 子系統就會在開機時啟動了。

[編輯] 參考資訊

取自"http://wiki.debian.org.tw/index.php/VServer"

本頁面已經被瀏覽13,157次。 這頁的最後修訂在 2007年12月20日 (星期四) 02:51。 本站的全部文本內容在GNU Free Documentation License 1.2之條款下提供。


[Main Page]
Main Page
社區
近期活動
最近更改
隨機頁面
幫助
贊助

編輯本頁
討論本頁
頁面歷史
鏈入頁面
鏈出更改

特殊頁面
錯誤報告