[分享] 使用 debootstrap 來建立 CHROOT 環境

常言道:『飲水思源』,在 Open Source 的世界裡,我們常常需要別人的幫助,但是在您有所心得的時候請記得分享給大家,『幫助人是快樂的喔』。歡迎您在使用 debian 的過程中的任何心得分享給大家。

[分享] 使用 debootstrap 來建立 CHROOT 環境

文章Tetralet » 週五 5月 06, 2005 6:02 pm

所需套件:

  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 等等虛擬機器吧?
時間並不能治療我心中的疼痛
南方的春天說什麼也溫暖不了我冰冷的血

誦唱大復活咒文,今天的 Tetralet 又在唧唧喳喳了 重生!
Tetralet
俺是博士
俺是博士
 
文章: 3078
註冊時間: 週四 11月 28, 2002 3:02 pm

文章d2207197 » 週五 5月 06, 2005 6:50 pm

記得要 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。
頭像
d2207197
鑽研的研究生
鑽研的研究生
 
文章: 1763
註冊時間: 週二 5月 27, 2003 9:57 pm
來自: 火星

文章jesse.sung » 週五 5月 06, 2005 7:55 pm

除了 debootstrap 外,也可以用 cdebootstrap ,用法類似。 :-)
BR,
Wen-chien Jesse Sung
頭像
jesse.sung
程式開發組
程式開發組
 
文章: 654
註冊時間: 週三 9月 04, 2002 9:43 am

文章訪客 » 週五 5月 06, 2005 10:11 pm

目前為止 debootstrap 比 cdebootstrap 好用,

個人設定比較有彈性,/dev 建立也較符合 user 的需求。
訪客
 

文章Tetralet » 週六 5月 07, 2005 12:07 am

d2207197 寫:記得要 mount proc 這樣許多程式才能正常運作。
代碼: 選擇全部
mount -t proc none CHROOT/proc

mount --bind /proc CHROOT/proc

老實說,那時候還在考慮要不要把這段寫進去說...
因為考慮到安全性的問題。

請問這樣做,是否會有安全上的顧慮呢?

d2207197 寫:還有如果要運行 X 還有某些軟體,通常也要將 tmp bind 過去,這樣幾乎沒什麼軟體不能正常跑了。
代碼: 選擇全部
mount --bind /tmp CHROOT/tmp

這招不錯,要學起來!! :w_28:

d2207197 寫:小弟已經好久沒用過標準、netinst 安裝光碟來安裝 debian 了。
debootstrap 是個好選擇,拿 knoppix 之類 based on debian 的 live CD 安裝,邊安裝還可以邊上網、玩遊戲,繼續作自己的工作,不會中斷。甚至可以啟動 ssh 遠端安裝。
安裝也彈性很多,愛用 emacs, vim, joe 哪套編輯器來編輯設定檔都可以;用 parted 調整分割區大小;也可自行編譯核心;自己決定要用 lilo 或 grub 作 boot loader。

不過安裝完後工作還是很多,
像是設定 /etc/passwd、/etc/group、/etc/shadow、/etc/network/...
還是用 Debian-Installer 來安裝似乎會比較方便一點。

是否有人能寫個 Debian-Installer over SSH 的教學呢?
時間並不能治療我心中的疼痛
南方的春天說什麼也溫暖不了我冰冷的血

誦唱大復活咒文,今天的 Tetralet 又在唧唧喳喳了 重生!
Tetralet
俺是博士
俺是博士
 
文章: 3078
註冊時間: 週四 11月 28, 2002 3:02 pm

文章Tetralet » 週六 5月 07, 2005 12:09 am

jesse.sung 寫:除了 debootstrap 外,也可以用 cdebootstrap ,用法類似。 :-)

還有 cdebootstrap 呀...
我都不知道說...
時間並不能治療我心中的疼痛
南方的春天說什麼也溫暖不了我冰冷的血

誦唱大復活咒文,今天的 Tetralet 又在唧唧喳喳了 重生!
Tetralet
俺是博士
俺是博士
 
文章: 3078
註冊時間: 週四 11月 28, 2002 3:02 pm

文章d2207197 » 週六 5月 07, 2005 1:50 am

Tetralet 寫:
d2207197 寫:記得要 mount proc 這樣許多程式才能正常運作。
代碼: 選擇全部
mount -t proc none CHROOT/proc

mount --bind /proc CHROOT/proc

老實說,那時候還在考慮要不要把這段寫進去說...
因為考慮到安全性的問題。

請問這樣做,是否會有安全上的顧慮呢?

因為提供了更多資訊,多少有吧。
不過 /proc 下比較有安全顧慮的也都是只有 root 才能看的,
而且小弟用 chroot 都不是用來跑網路服務來加強安全性。
只是為了同時用另一套 distro 而已,不在乎這些,只要求軟體都能跑。
頭像
d2207197
鑽研的研究生
鑽研的研究生
 
文章: 1763
註冊時間: 週二 5月 27, 2003 9:57 pm
來自: 火星

文章訪客 » 週六 5月 07, 2005 9:10 am

Tetralet 寫:不過安裝完後工作還是很多,
像是設定 /etc/passwd、/etc/group、/etc/shadow、/etc/network/...
還是用 Debian-Installer 來安裝似乎會比較方便一點。

安裝完後只要 dpkg-reconfigure passwd,
就可以設定 root 密碼並自動建立上面那些密碼檔了…

網路方面的確是要手動設定一下,不過對老手來說都沒差吧?
訪客
 

文章csj » 週六 5月 07, 2005 9:25 am

我之前用的時候有做個紀錄:
http://csj.homelinux.org/phpBB2/viewtopic.php?t=22

不過其中用 base-config 這部份可能不是很妥當,
上次用 base-config 之後好像會影響到 原本的系統 hostname?
有點忘了;
影響的問題是在那步驟之後,原系統新開 X 視窗都會 cant Display 之類,

把 base-config 的工作分別手動做,
可能可以找到是哪步驟影響的;

不過裝好之後 reboot 就沒差了。

另外關於 mount --bind 的部份,
在自訂 LiveCD 經驗的時候我用的是這些:
代碼: 選擇全部
sudo mount --bind /var/log/ mnt/var/log/
sudo mount --bind /var/run/ mnt/var/run
sudo mount --bind /var/cache/apt/ mnt/var/cache/apt/
sudo mount --bind /var/lib/apt/ mnt/var/lib/apt/
sudo mount --bind /tmp/ mnt/tmp/


另外提一下,在 chroot 之前先取消原本 locale 設定應該比較好,
因為新系統一開始沒有 zh_TW.* 可能會影響安裝。
歡迎光臨我的 blog:
http://csj.homelinux.org/blog
csj
可愛的小學生
可愛的小學生
 
文章: 56
註冊時間: 週五 8月 27, 2004 3:12 pm
來自: 台北

文章訪客 » 週六 5月 07, 2005 10:52 am

csj 寫:我之前用的時候有做個紀錄:不過其中用 base-config 這部份可能不是很妥當,

另外提一下,在 chroot 之前先取消原本 locale 設定應該比較好,
因為新系統一開始沒有 zh_TW.* 可能會影響安裝。

建議不要安裝 base-config,其實從頭到尾都可以不需要 base-config。
真正需要手動的設定檔沒幾個。

locale 改不改都沒啥關係,系統會自動變回 POSIX。
如果真的怕有問題,先改完 locale 再執行 debootstrap 即可。
訪客
 

文章訪客 » 週六 5月 07, 2005 11:05 am

本站的另外兩篇相關內容也不錯:

建構 Debian 子系統 (sarge) 可以在一台電腦同時使用 woody、sarge、sid,方便各種測試和 maintain package

如何將Debian控制在200Mb以下 用 deboostrap 安裝超精簡 debian(附 script)
訪客
 

文章caosheng » 週六 5月 07, 2005 5:01 pm

請問有沒有辦法做到這樣的chroot 虛擬環境
就是base system 和 xwindow 都是底層共用的(不用另外安裝一份)

但是kde 、 gnome 兩個系統可以隔離開來 需要用時另外登錄
有時候覺得亂七八糟的,但不知道怎樣隔離kde 和 gnome
譬如說需要gnome 時登錄gnome 的帳號,但此帳號完全都不知道有另一種系統和軟體存在
caosheng
懵懂的國中生
懵懂的國中生
 
文章: 222
註冊時間: 週一 12月 27, 2004 2:27 pm

文章Tetralet » 週六 5月 07, 2005 9:59 pm

caosheng 寫:請問有沒有辦法做到這樣的chroot 虛擬環境
就是base system 和 xwindow 都是底層共用的(不用另外安裝一份)

但是kde 、 gnome 兩個系統可以隔離開來 需要用時另外登錄
有時候覺得亂七八糟的,但不知道怎樣隔離kde 和 gnome
譬如說需要gnome 時登錄gnome 的帳號,但此帳號完全都不知道有另一種系統和軟體存在

把 kde 和 gnome 裝在同一個系統下似乎並不會衝突呀...

若真的想把它們隔開來,
我想,直接開兩個 X Window 您覺得如何?
時間並不能治療我心中的疼痛
南方的春天說什麼也溫暖不了我冰冷的血

誦唱大復活咒文,今天的 Tetralet 又在唧唧喳喳了 重生!
Tetralet
俺是博士
俺是博士
 
文章: 3078
註冊時間: 週四 11月 28, 2002 3:02 pm

文章訪客 » 週日 5月 08, 2005 8:21 pm

caosheng 寫:有時候覺得亂七八糟的,但不知道怎樣隔離kde 和 gnome
譬如說需要gnome 時登錄gnome 的帳號,但此帳號完全都不知道有另一種系統和軟體存在

兩個帳號各自用各自的 .xinitrc 不就是了嗎?
訪客
 

文章d2207197 » 週日 5月 08, 2005 8:48 pm

Anonymous 寫:
caosheng 寫:有時候覺得亂七八糟的,但不知道怎樣隔離kde 和 gnome
譬如說需要gnome 時登錄gnome 的帳號,但此帳號完全都不知道有另一種系統和軟體存在

兩個帳號各自用各自的 .xinitrc 不就是了嗎?

不用兩個帳號阿
一個帳號可以開一堆 X,每個 X 也都可以用不同的 WM, DE。
頭像
d2207197
鑽研的研究生
鑽研的研究生
 
文章: 1763
註冊時間: 週二 5月 27, 2003 9:57 pm
來自: 火星

下一頁

回到 share

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 1 位訪客