Gentoo Logo

Gentoo Linux 開發員 User-Mode Linux 測試指南

內容:

1.  取得 User-Mode Linux

就如同 user-mode linux 網站所說的 (http://user-mode-linux.sourceforge.net) ,user-mode linux 讓使用者 "在 Linux 裡面執行 Linux"。特別的是,user-mode linux 提供一台虛擬的機器讓使用者 可以 "執行有臭蟲的軟體,試驗新的 Linux 核心或發行版,還有摸索 Linux 的內部。這 些都不用對您原來的 Linux 冒險。' Gentoo 核心套件,像是 sys-apps/baselayoutsys-libs/glibc,這些實驗性的改變可能會破壞系統或 是導致他不能開機,使用 user-mode linux 可以嘗試這些改變而不用擔心破壞目前的系統 。

安裝 user-mode linux 基本上來說和一般安裝核心的過程差不多。首先安裝核心(加上適 合執行 user-mode linux 的修正),然後設定 user-mode linux 核心。在 2.6.9 以後, UML 已經整合到核心中了。

原始碼 1.1: 安裝 UML 核心原始碼

(我們將會安裝 vanilla 2.6 核心,你也可以用 usermode-sources)
# emerge sys-kernel/development-sources
# cd /usr/src/linux
# make menuconfig ARCH=um
# make linux ARCH=um
# cp linux /usr/local/bin/linux

警告: ARCH=um 的片段是 非常 重要的!

確定 /usr/local/bin 在您的 path 變數中。編輯 /etc/env.d/00basic 中的 PATH 變數加上 /usr/local/bin 然後執行 env-update

原始碼 1.2: 編輯 00basic

# nano -w /etc/env.d/00basic
# env-update
# source /etc/profile

為了讓 user-mode linux 核心可以正常啟動 Gentoo 系統,要設定核心不要自動掛 載 /dev (devfs)。此外,您要確定您有編譯 tmpfs (虛擬記憶體檔 案系統)的支援,因為 Gentoo linux 開機時預設在一小塊 tmpfs 分割區中儲存一些資訊 。(user-mode 網站上提供已經編譯好的核心會自動掛載 /dev,而且沒有 支援 tmpfs ,不要去麻煩他們。)

我極度建議去閱讀 user-mode linux 文件,但是基本的做法是執行 /usr/local/bin/linux 啟動 user-mode 核心,然後嘗試啟動儲存在 root_fs 檔案中的系統,這個檔案應該是在目前的工作目錄。

安裝 user-mode linux 工具不會有任何副作用。

原始碼 1.3: 安裝 UML 工具

# emerge sys-apps/usermode-utilities

這些工具提供 user-mode linux 系統和原來的系統的網路連接。

2.  建立 root_fs

變換 Gentoo 根目錄

user-mode linux 需要的 root_fs 檔案是包含完整 Gentoo Linux 檔案系 統的單一檔案。為了建立這個檔案,您需要在主系統核心(非 user-mode)啟動 Loopback device 支援。

我們最後一步才會製作 root_fs 檔案。首先,我們使用一般的變換根目錄 來建立 Gentoo 檔案系統。我們需要 stage tarball,這可以從網路上下載,從 LiveCD 抓出來,或是直接從 liveCD .iso 檔案中取得。

原始碼 2.1: 掛載 liveCD .iso

# mkdir /mnt/loop
# mount -o loop /path/to/install-<TAB>.iso /mnt/loop

變換根目錄的過程基本上和安裝 Gentoo Linux 時差不多。

原始碼 2.2: 建立 Gentoo Linux 新的根目錄掛載點

# mkdir /mnt/gentoo
# cd /mnt/gentoo
# tar xvjpf /path/to/stage<TAB>.tar.bz2

然後卸載 .iso。您不再需要他了。

Bootstrap 和編譯系統的過程沒什麼差別,只要照著安裝指南來做就好了 :)

您可以加上任何您想要的套件,也可以給您虛擬的 Gentoo system 一個電腦名稱。在 /etc/fstab 中您需要把 /dev/ROOT 設定成 /dev/ubd/0,使用 ext2,ext3,或是 reiserfs 檔案格式。以及把 /dev/SWAP 設定成 /dev/ubd/1,還有讓 /dev/BOOT 註解起來。

這時候,記得要設定 root 密碼。

原始碼 2.3: 設定 root 密碼

# passwd

現在我們需要改變一些開機 scripts。從開機執行級中移除 consolefont 和 keymaps:

原始碼 2.4: 移除不需要的 initscripts

 
# rc-update del consolefont boot 
# rc-update del keymaps boot 

離開變換根目錄模式,卸載所有 bind 掛載,用 tar 把新的 Gentoo 發行版壓縮起來, 然後清除不用的檔案。

原始碼 2.5: 完成安裝

# cd /mnt/gentoo
# tar cvjpf ~/gentoo.tbz2 *
# cd
# rm -rf /mnt/gentoo

製作 root_fs

新的 Gentoo 環境大約有 300 MB,所以 root_fs 至少需要這麼大。我們使 用 0.5 GB 的合理大小。

原始碼 2.6: 建立 UML 檔案

# dd if=/dev/zero of=root_fs seek=500 count=1 bs=1M
# mke2fs -F root_fs
# mount -o loop root_fs /mnt/loop
# tar xvjpf gentoo.tbz2 -C /mnt/loop
# umount /mnt/loop

有一個 0.5 GB 的置換分割區也不錯。

原始碼 2.7: 建立置換分割區

# dd if=/dev/zero of=swap_fs seek=500 count=1 bs=1M
# mkswap -f swap_fs

來看看他可不可以工作!

原始碼 2.8: 啟動 UML 核心執行緒

# linux ubd0=root_fs ubd1=swap_fs

User-mode linux 使用 xterms 作為開機時的虛擬 consoles,所以您需要確定您執行 user-mode linux 的終端機要正確設定 $DISPLAY 變數(以及 xhost/xauth 權限)。

運氣不錯的話,您應該能登入您的 user-mode linux 了。要讓您的 Gentoo user-mode linux 版完整發揮功能的話,您需要啟動虛擬機器到主系統之間的網路。

3.  網路

確定主電腦的核心有將底下的設定編譯成模組:

原始碼 3.1: 主電腦的核心設定

Networking -->
   IP: Netfilter Configuration -->
     IP tables support -->
	   Full NAT -->
	     <M> MASQUERADE target support

	Network Device Support -->
	  <M> TUN/TAP Support

電腦上執行下列的指令:

原始碼 3.2: 設定網路

# modprobe tun
(如果你收到了一個致命錯誤,刪除 /dev/net/tun 然後再試試看
# modprobe iptable_nat
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# echo 1 > /proc/sys/net/ipv4/ip_forward

iptables 那一行設定私人網路的 IP Masquerading 讓 user-mode 系統可以連接網際網路 (此例中經由 eth0)。echo 那一行啟動私人網路和連接閘道器的網路介面間的封包 轉送(這裡是用 eth0)。

然後我們啟動 user-mode 系統看看網路是否正常運作。

原始碼 3.3: 啟動 UML

# linux ubd0=root_fs ubd1=swap_fs eth0=tuntap,,,192.168.0.254
(登入 user-mode 系統)
# ifconfig eth0 192.168.0.1 up
# ping -c 2 192.168.0.254
PING 192.168.0.254 (192.168.0.254): 56 octets data
64 octets from 192.168.0.254: icmp_seq=0 ttl=255 time=0.8 ms
64 octets from 192.168.0.254: icmp_seq=1 ttl=255 time=0.6 ms

--- 192.168.0.254 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.6/0.7/0.8 ms
# route add default gw 192.168.0.254
# netstat -rn
Kernel IP routing table
Destination  Gateway        Genmask        Flags MSS Window irtt Iface
192.168.0.0  0.0.0.0        255.255.255.0  U      40 0         0 eth0
0.0.0.0      192.168.0.254  0.0.0.0        UG     40 0         0 eth0
# scp user@192.168.0.254:/etc/resolv.conf /etc/resolv.conf (如果需要的話)
# ping -c 2 www.gentoo.org
PING www.gentoo.org (207.170.82.202): 56 octets data
64 octets from 207.170.82.202: icmp_seq=0 ttl=240 time=119.6 ms
64 octets from 207.170.82.202: icmp_seq=1 ttl=240 time=92.0 ms

--- www.gentoo.org ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 92.0/105.8/119.6 ms

在 user-mode 系統中我們指定 user-mode eth0 介面使用私人 IP 192.168.0.1 然後啟動 他。主電腦的私人 IP 是 192.168.0.254,然後我們使用 ping 來確定他的確啟動了。 route 那一行加入預設的閘道器,就是主電腦,然後使用 scp 取的可以使用的 /etc/resolv.conf (如果需要的話),接著 ping www.gentoo.org 確定名稱 解析(以及與網際網路的連結)在 user-mode 系統中正常工作。現在 user-mode 系統可以 開始 emerge

4.  測試 .iso

或許測試 Gentoo Linux 的理想方法是用 .iso 檔在 user-mode linux 環境下開機,然後 在 user-mode linux 虛擬的系統中執行完整的安裝。

用 .iso 開機,或是說用 .iso 上的 initrd 開機,相當的直接。

原始碼 4.1: 用 ISO 檔開機

# mount -o loop /path/to/install-<TAB>.iso /mnt/loop
# cp /mnt/loop/isolinux/gentoo.igz .
# linux load_ramdisk=1 prompt_ramdisk=0 ramdisk_size=22000 \
> initrd=rescue.gz root=/dev/ram0 ubd0=root_fs ubd1=swap_fs \
> ubd2=/dev/cdroms/cdrom0 eth0=tuntap,,,192.168.0.254

現在基本上來說您可以按照 Gentoo 安裝文件來安裝,您只需要知道根目錄是在 /dev/ubd/0,置換"分割區"是 /dev/ubd/1,光碟在 /dev/ubd/2

5.  資源



列印

最後更新 2005年 2月 5日

這份文件的原始版本已不再被維護

大綱: 這份指南展示 Gentoo Linux 發展者 如何設定以及使用 user-mode linux 來測試可能 會導致系統毀損的修改。

Grant Goodyear
Editor

John Davis
Editor

Sven Vermeulen
Editor

Benny Chuang
Editor,Translator

YiDa Chiang
Translator

Frid Hou
Translator

Donate to support our development efforts.

Support OSL

Support OSL

Gentoo Centric Hosting: vr.org

VR Hosted

Tek Alchemy

Tek Alchemy

SevenL.net

SevenL.net

Global Netoptex Inc.

Global Netoptex Inc.

Bytemark

Bytemark

Linux World Expo

Linux World Expo

Copyright 2001-2008 Gentoo Foundation, Inc. Questions, Comments? Contact us.