想要保持系統的穩定又能有新奇的玩意兒可以測試,那麼 linux-vserver 似乎是最佳的選擇了。
vserver 是一種強化的 chroot 環境,透過內容切換的方式實作出與 host OS 完全獨立的 Linux 環境。由於 Un*x 是一種檔案導向的作業系統,以 chroot 進行的檔案系統分離就已經具有相當程度的獨立性,而 linux-vserver 則進一步在 Linux 核心上動手腳,讓各個 vserver 環境能完全地獨立出來,就好像真的是不同的伺服器一樣。
linux-vserver 計畫說:「你可能會想,虛擬伺服器看起來很酷,但大概不是對所有人都有用吧。錯!」vserver 真的很有用,對一般 (Debian 的) 使用者來說,它至少可以讓系統更加強固穩定:安裝 host OS 作 container,再使用 vserver 進行日常工作。至於眾多亂搞系統的愛好者,更是容易理解 vserver 的好處。
有了 vserver,我們就可以採取以下的系統管理模式:
- 安裝基本的 stable:用穩定版的 Debain,處理基本的磁碟、網路等等管理作業;避免系統因為上游套件的一點問題而無法使用 (或不方便使用)。
- 在 stable 上安裝 linux-vserver。
- 在 vserver 裡工作:
- vserver 裡面安裝的軟體,不會影響 host OS。
- 儘量測試新東西;怎麼玩,系統都不會壞。
- 用 vserver 提供網路服務;即使被 hacked-in,也只是隨時可以清除重來的 vserver 出問題。
非常好用。因此我寫了這篇文章,介紹如何在 Debian 下使用 vserver。大家都應該花點時間來了解一下這個棒技術,你不會後悔的。
安裝使用 sarge (Debian 3.1r0a) 的 vserver
在 Debian 裡面有三個相關的套件:kernel-patch-vserver, util-vserver, vserver-debiantools。linux-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-vserver 和 vserver-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 stop 和 vserver 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 的裝置,可以參考一下;random 和 urandom 對使用 TLS/SSL 的程式蠻重要的,缺少的話至少 Gaim 會有問題。
希望大家 vserver 愉快!
References
[1] | Linux Vservers: http://deb.riseup.net/vserver/ |
[2] | Step-by-Step Guide 2.6: http://linux-vserver.org/Step-by-Step+Guide+2.6 |
[3] | 大花頁:http://www.nongnu.org/util-vserver/doc/conf/configuration.html ,比較好讀的版本:http://red.eggplantmedia.com/~arthur/micah.html (不見了!?) |
[4] | http://deb.riseup.net/vserver/preparing/ |
[5] | http://deb.riseup.net/vserver/create-instance/ |
- Previous: 這就是我喜歡 Zope 的原因 @2005/08/11
- Next: debconf 不喜歡 UTF-8? @2005/09/01
Please send trackback to: http://blog.seety.org/everydaywork/2005/8/28/395/trackback/.