所需套件:
debootstrap
什麼是 CHROOT:
CHROOT(change root directory)這個指令是用來指定新的 / 的路徑。
簡單得說,我們在某一個目錄中建立另一個 Linux 目錄結構,
(並沒有限定必須為完整的 Linux 目錄結構),
然後使用 chroot 指令來進入這一個目錄中。
之後所有的程式在運作時將會將這個目錄視同為 /。
這樣,我們就可以輕易得打造一個虛擬的 Linux 運作環境。
CHROOT 常被用來建立一個高度安全的 Linux 運作環境,
因為即使這個虛擬的 Linux 運作環境不幸被突破了,
劊客們得到的常常是空無一物,
甚至是什麼程式都不能執行的 Linux 空殼。
當然了,並不是所有的程式都能在 CHROOT 環境下運作無誤。
不過這是題外話了。
建立 CHROOT 所需的目錄結構:
基本上,這個新的 / 目錄結構只要能讓特定的程式,
如:Bind,能夠執行即可;
並沒有必要把整個完整的 Linux 目錄結構放進來。
如果您想知道要如何實作,請不妨參考 Chroot-BIND HOWTO 的說明。
使用 debootstrap + Debian Installer CD Image 來建立完整的 CHROOT 環境:
在 Debian 裡,我們可以使用 debootstrap 來建立一個完整的 Linux 運作環境,
當然也可以直接拿來給 CHROOT 使用。
而在執行 debootstrap 時,
一般是將檔案來源指向 Internet,
不過我們也可以直接使用 Debian Installer 的 CD Image 做為檔案來源,
那就不用浪費珍貴的網路資源去重覆下載己有的套件了。
方法簡述如下:
首先,將 Debian Installer 的 CD Image 掛載在某個目錄下:
代碼: |
mount -o loop sarge-i386-netinst.iso /mnt |
然後,建立 CHROOT 的目錄並使用 debootstrap 指令來產生完整的 Linux 執行環境:
代碼: |
mkdir CHROOT /usr/bin/env -i HOME=/root TERM=$TERM PATH=/bin:/usr/bin:/sbin:/usr/sbin /usr/sbin/debootstrap --arch i386 sarge CHROOT/ file:///mnt/debian/ |
注意,debootstrap 指令只有 root 才有權限可以執行。
在此使用 env 指令是為了要確實清除所有的環境變數。
在 debootstrap 執行完畢之後,一個完整的 Linux 執行環境就此產生了。
這時,請再修改 CHROOT 目錄中的以下檔案:
/etc/passwd:
代碼: |
root:x:0:0:root:/root:/bin/bash |
另,依您喜好,您還可以修改以下檔案:
/root/.bashrc
/root/.bash_login
/root/.bash_logout
/root/.vimrc
/etc/apt/sources.list
另一個不太重要的事就是設定該系統的時區。
在此就略過不提了...
以上這些設定也可以在進入 CHROOT 環境後再加以設定。
使用 chroot 來進入 CHROOT 環境:
您可以試著用以指令:
代碼: |
chroot CHROOT /usr/bin/env -i HOME=/root TERM=\$TERM PATH=/bin:/usr/bin:/sbin:/usr/sbin /bin/bash --login |
來進入新的 CHROOT 環境。
進入新的 CHROOT 環境後,
您就可以如同進入一個全新系統般操作這個 Linux 虛擬系統了。
CHROOT 實務上的應用:
除了上文所說的,可以拿 CHROOT 來建立一個高度安全的 Linux 運作環境之外,
CHROOT 也常用在 Rescue 模式下用來重建 GRUB 或是 LILO。
而一些 Linux 的安裝程式也常常使用 CHROOT 來修改系統的設定檔。
而本人則是使用 CHROOT 來編譯軟體,
因為它可以提供一個絕對乾淨且安全的作業環境,
且即是是亂亂搞都不(太)會危害到我原本的系統。
(不過不要真的太鐵齒。小心駛得萬年船呀!)
在使用 CHROOT 時的一些注意事項:
首先,chroot 這個指令只有 root 可以使用。
進入 CHROOT 環境後,它仍然會使用原有的系統設定。
如:IP 位址、Hostname 之類的。
若加以修改,則往往會連帶影響到原有環境。請特別注意。
您可以直接把檔案 Copy 到 CHROOT 的系統中。
不過有時候使用 NFS 來傳遞檔案也蠻方便的。
當然囉,CHROOT 只支援 Linux...
總結:
我們可以使用 CHROOT 來迅速打造一個獨立的 Linux 作業環境,
而它的運作原理淺顯易懂,在使用上也用不著什麼特別技巧,
但它在執行效能可以說是百分百,
我想,在某種程度上,
它應該可以用來取代 VMware、QEMU、Xen 等等虛擬機器吧?
記得要 mount proc 這樣許多程式才能正常運作。
代碼: |
mount -t proc none CHROOT/proc 或 mount --bind /proc CHROOT/proc |
還有如果要運行 X 還有某些軟體,通常也要將 tmp bind 過去,這樣幾乎沒什麼軟體不能正常跑了。
代碼: |
mount --bind /tmp CHROOT/tmp |
小弟已經好久沒用過標準、netinst 安裝光碟來安裝 debian 了。
debootstrap 是個好選擇,拿 knoppix 之類 based on debian 的 live CD 安裝,邊安裝還可以邊上網、玩遊戲,繼續作自己的工作,不會中斷。甚至可以啟動 ssh 遠端安裝。
安裝也彈性很多,愛用 emacs, vim, joe 哪套編輯器來編輯設定檔都可以;用 parted 調整分割區大小;也可自行編譯核心;自己決定要用 lilo 或 grub 作 boot loader。
##################################################################
我主要系統是 unstalbe,最近卻想玩玩看 sarge
所以就依照著 Debian 參考手冊作弄了一個,不過部份地方與他不同。
----- 建構基本子系統 ---------------------------------
main # apt-get install debootstrap
main # cd / ; mkdir /sarge-root
... 建立給子系統用的根目錄
main # debootstrap sarge /sarge-root http://opensource.nchc.gov.tw/debian/
... 安裝子系統
目前台灣好像是這個站台最快,所以就用這裡啦
main # echo "proc-sarge /sarge-root/proc proc defaults 0 0" >> /etc/fstab
main # mount proc-sarge
... 建立給子系統用的 proc 目錄
main # mkdir /sarge-root/sys
main # echo "sys-sarge /sarge-root/sys sysfs defaults 0 0" >> /etc/fstab
main # mount sys-sarge
... 建立給子系統用的 sys 目錄
若不是用 kernel 2.6 或是沒有用 sysfs 則可以略過以上兩行
main # cp /etc/hosts /sid-root/etc/hosts
main # cp /etc/apt/sources.list /sarge-root/etc/apt/sources.list
... 搬一些設定檔過去,因為懶得重建
main # chroot /sarge-root /bin/bash
chroot # vi /etc/apt/sources.list
... 修改 sources.list,把來源指向 sarge or testing
chroot # dselect
... 安裝其他你需要的程式,當然也可以用 aptitude 或 apt
----- 把幾個 virtual terminal 改給子系統使用 ----------
main # vim /etc/inittab # 修改 inittab
代碼: |
1:2345:respawn:/sbin/getty 38400 tty1 2:23:respawn:/sbin/gettyps tty2 3:23:respawn:/sbin/gettyps tty3 4:23:respawn:/sbin/gettyps tty4 5:23:respawn:/usr/sbin/chroot /sarge-root /sbin/gettyps tty5 <--- 在 /sbin/getty 前面加上 /usr/sbin/chroot /sarge-root 6:23:respawn:/usr/sbin/chroot /sarge-root /sbin/gettyps tty6 <--- 在 /sbin/getty 前面加上 /usr/sbin/chroot /sarge-root |
你們的可能都是執行 /sbin/getty 38400 ttyN
而不像我是執行 /sbin/gettyps ttyN
因為我改用 gettyps 而不用 getty,這樣才有 Scroll 的功能。
----- 如果也要在子系統弄另一個 X server ---------------
main # chroot /sarge-root
chroot # apt-get install xlibs xserver-xfree86 xbase-clients xfonts-base xterm
chroot # exit
main # cp /etc/X11/XF86Config-4 /sarge-root/etc/X11/XF86Config-4
... 直接把設定檔搬過去比較快
----- 如果也要在子系統弄另一個 gdm --------------------
main # chroot /sarge-root
chroot # apt-get install gdm
chroot # vim /etc/gdm/gdm.conf
... 修改 gdm.conf
代碼: |
[server-Standard] <--找到 [server-Standard] name=Standard server command=/usr/bin/X11/X -deferglyphs 24 -nolisten tcp vt8 <-- 那行加上 vt8 這個參數 flexible=true |
chroot # /etc/init.d/gdm start
... 之後隨時都可以按 Ctrl + Alt + F8 跳到子系統的 X
... 當然 Ctrl + Alt + F7 就是原來的啦
沒有留言:
張貼留言