就如同 user-mode linux 網站所說的 (http://user-mode-linux.sourceforge.net) ,user-mode linux 讓使用者 "在 Linux 裡面執行 Linux"。特別的是,user-mode linux 提供一台虛擬的機器讓使用者 可以 "執行有臭蟲的軟體,試驗新的 Linux 核心或發行版,還有摸索 Linux 的內部。這 些都不用對您原來的 Linux 冒險。' Gentoo 核心套件,像是 sys-apps/baselayout 或 sys-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 系統和原來的系統的網路連接。
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 |
新的 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.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 !
或許測試 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。
這份文件是以 Creative Commons - 姓名標示-相同方式分享 授權條款發布