星期一, 7月 09, 2007

debootstrap

所需套件:

  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 就是原來的啦

沒有留言: