想要保持系統的穩定又能有新奇的玩意兒可以測試,那麼 linux-vserver 似乎是最佳的選擇了。

vserver 是一種強化的 chroot 環境,透過內容切換的方式實作出與 host OS 完全獨立的 Linux 環境。由於 Un*x 是一種檔案導向的作業系統,以 chroot 進行的檔案系統分離就已經具有相當程度的獨立性,而 linux-vserver 則進一步在 Linux 核心上動手腳,讓各個 vserver 環境能完全地獨立出來,就好像真的是不同的伺服器一樣。

linux-vserver 計畫:「你可能會想,虛擬伺服器看起來很酷,但大概不是對所有人都有用吧。!」vserver 真的很有用,對一般 (Debian 的) 使用者來說,它至少可以讓系統更加強固穩定:安裝 host OS 作 container,再使用 vserver 進行日常工作。至於眾多亂搞系統的愛好者,更是容易理解 vserver 的好處。

有了 vserver,我們就可以採取以下的系統管理模式:

  1. 安裝基本的 stable:用穩定版的 Debain,處理基本的磁碟、網路等等管理作業;避免系統因為上游套件的一點問題而無法使用 (或不方便使用)。
  2. 在 stable 上安裝 linux-vserver。
  3. 在 vserver 裡工作:
    • vserver 裡面安裝的軟體,不會影響 host OS。
    • 儘量測試新東西;怎麼玩,系統都不會壞。
    • 用 vserver 提供網路服務;即使被 hacked-in,也只是隨時可以清除重來的 vserver 出問題。

非常好用。因此我寫了這篇文章,介紹如何在 Debian 下使用 vserver。大家都應該花點時間來了解一下這個棒技術,你不會後悔的。

安裝使用 sarge (Debian 3.1r0a) 的 vserver

在 Debian 裡面有三個相關的套件:kernel-patch-vserver, util-vserver, vserver-debiantoolslinux-vserver 本身以核心修補的形式發行,可以套用在 Debian 的 2.6.8, 2.6.11 和 2.6.12 (我測試過的) 核心上面 (也支援 2.4 的核心),所以 kernel-patch-vserver 這個套件是一定要安裝的。

util-vserver 是一組用來管理 vserver 的工具程式集,也需要安裝;vserver-debiantools 則是 Debian 特定的工具程式集。一般來說三個套件我們都會安裝:

$ apt-get -t sid kernel-patch-vserver util-vserver vserver-debiantools

因為 sarge 裡的 vserver-debiantools 還有問題,所以得用 unstable 裡新的 vserver 相關套件。

當然還需要取得核心原始碼:

$ apt-get -t sid linux-source-2.6.12
$ mkdir /usr/src/work; cd /usr/src/work
$ tar xfj /usr/src/linux-source-2.6.12.tar.bz2
$ mv linux-source-2.6.12 linux-source-2.6.12vserver

2.6.12 核心可以用 gcc-4.0 編譯,舊 (<=2.6.11) 核心則要用 gcc-3.3。如果系統 gcc 的版本不一樣,那在 make-kpkg 之前加上 MAKEFLAGS="CC=gcc-3.3" 即可。我會在 make-kpkg 之前先組態一下:

$ make menuconfig

Note

別忘了先裝 libncurses5-dev。也別忘了 kernel-package (提供 make-kpkg) 和 dpkg-dev

然後用 (參考 [4]):

$ make-kpkg --rootcmd fakeroot --revision custom01 --added-patches vserver --append-to-version +vserver --initrd --config menuconfig binary-arch

--added-patches vserver 會在編譯之前把 vserver 修補上去 (修補檔放在 /usr/src/patches 裡面),然後再 menuconfig 以確認 vserver 相關的組態 (--config menuconfig)。最後編譯,完成之後會在上一層目錄裡 (/usr/src/work) 產生:

kernel-headers-2.6.12+vserver_custom01_i386.deb
kernel-image-2.6.12+vserver_custom01_i386.deb

兩個檔案,用 dpkg -i 安裝後,修改 boot loader (lilo/grub) 即可使用。用 patched kernel 重新開機後,系統就具備 linux-vserver 的能力,可以用 util-vservervserver-debiantools 套件管理 vserver。

調整 host OS

vserver 還不完美;尤其它是配合 content-switching 的 chroot 環境,仍有許多程式需要調整配合。ssh 幾乎安裝在所有系統上,所以一定要調整它。

ssh 預設會監聽系統上所有的通訊埠,這個行為與 vserver 的運作相衝突。如果不改變此行為,那麼所有連往 vserver 的 ssh 連線都會被 host OS 上的 sshd 攔下來,讓 vserver 的 sshd 失效。我們要把 host OS 的 /etc/ssh/sshd_config 的這一行:

#ListenAddress 0.0.0.0

改為

ListenAddress 69.90.134.201 # host OS 的 IP,可多行

然後重新啟動 ssh server。如果 host OS 上有其它伺服器的話,也需要作類似的修改。

建立 vserver

我們可以用 utils-vserver 提供的總管工具 vserver 來建立 vserver (請參考 [5]):

$ REMOVE_PACKAGES="sparc-utils,dhcp-client,lilo,makedev,pcmcia-cs,ppp,\
pppconfig,pppoe,pppoeconf,setserial,syslinux,fdutils,libpcap0,\
iptables,pciutils"

$ vserver cosmos build -m debootstrap --hostname cosmos \
--interface eth0:192.168.200.1/24 -- \
-d sarge -- --exclude=$REMOVE_PACKAGES

Note

這個動作會去抓取所需的套件,用 debootstrap 安裝 base system;如果 apt 來源慢的話,就會花點時間。

cosmos 是 vserver 的名字,請隨便取你喜歡的。這樣建出來的 vserver 是採用 vserver2 的設定模式,與 legacy 設定模式不同。vserver-debiantools 裡的 newvserver 似乎會建立 legacy 設定模式的 vserver,但我並沒有確認。vserver2 設定模式的說明應該要參考大花頁 [3],我先警告,它很花。

所有 vserver 的組態都放在 /etc/vservers 之下;各 vserver 預設的目錄結構位於 /var/lib/vserver

為 vserver 作基本組態

啟動與進入 vserver

作到這裡,已經可以用:

$ vserver cosmos start

啟動 cosmos vserver,而

$ vserver cosmos enter

則會把我們帶進 cosmos。

移掉不必要的 init 指令稿

參考 Step-by-Step Guide [2],我也把以下的 init 指令稿 symbolic link 刪除了:

cd /home/vservers/DebianSid/etc/rc0.d
rm K20makedev K25hwclock.sh S30urandom S31umountnfs.sh  S35networking S36ifupdown S40umountfs S90halt K89klogd

cd /home/vservers/DebianSid/etc/rc6.d
rm K20makedev K25hwclock.sh S30urandom S31umountnfs.sh  S35networking S36ifupdown S40umountfs S90reboot K89klogd

cd /home/vservers/DebianSid/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 /home/vservers/DebianSid/etc/rc2.d
rm S20makedev S11klogd

在 host OS 裡就可以用 vserver cosmos stopvserver cosmos restart 了。

base-config

用以上程序安裝的 vserver 沒有作過 base-config,請進入 vserver 執行一次 base-config,再安裝/設定你的 vserver。

X window in vserver

在 vserver 裡面跑 X,就不會讓 host OS 的家目錄裡跑出一大堆 .[a-z]* 的檔案了!我們要先打開 vserver 的 CAP_SYS_RAWIO,請在 /etc/vservers/cosmos/bcapabilities 檔案 (預設並沒有這個檔案,請自己建一個新的) 裡寫入 CAP_SYS_RAWIO,並且為 vserver 建立 mem 裝置:

$ mknod /var/lib/vservers/cosmos/dev/mem c 1 1
$ chmod 640 /var/lib/vservers/cosmos/dev/mem
$ chown root.kmem /var/lib/vservers/cosmos/dev/mem

然後就可以在 vserver 裡安裝使用 X 了。

Tip

我是用 gdm 啟動 X 的。

有人提供一些 vserver 的裝置,可以參考一下;randomurandom 對使用 TLS/SSL 的程式蠻重要的,缺少的話至少 Gaim 會有問題。

希望大家 vserver 愉快!

Posted by yungyuc at 12:32, 2 comments, 0 trackback.
Navigate
Add a trackback
Comments
Re: 我的 linux-vserver 之路 (前傳)
不好意思,請問一下,開頭apt-get的command是不是install ?
#apt-get install -t
謝謝。
checko at 2005-10-20 10:55.
Re: 我的 linux-vserver 之路 (前傳)
呀,沒錯沒錯,我打錯了
-----
yungyuc at 2005-10-20 11:37.
Add a comment

Your name. (required)

Your personal website. (optional)

Your email address. Will not show in page. (suggested, but optional)

Text format is "Plain Text".

Enter "JNqct"
© hover year to navigate month: powered by django