2016年6月2日 星期四

建立 chroot 環境

什麼是 chroot ?

chroot (change root) 是一個指令,它可以將某個小型的檔案系統變成一個 /  環境,而這個小型的檔案系統要用 debootstrap 這個指令來建立。

使用 debootstrap 指令

debootstrap 指令是用來建立小型 root 環境的一個指令,他對於建立嵌入式系統的根目錄或是我們現在要建立的小型 root 環境都非常有用,要安裝 debootstrap 請執行:

# apt-get install debootstrap


安裝完成後,請在 ~/virtualclassroom 底下建立一個 chroot 目錄,接著在此目錄新增一個 shell script,其檔名為 debootstrap.sh,內容如下所示:

SOURCEDIR=`pwd`/LEENIX
ARCH=amd64
DEBIAN_RELEASE=jessie
#DEBIAN_MIRROR=ftp://opensource.nchc.org.tw/debian
DEBIAN_MIRROR=file:///srv/ftp/debian

[ -d $SOURCEDIR ] && rm -rf $SOURCEDIR

mkdir -p $SOURCEDIR

time debootstrap --arch ${ARCH} ${DEBIAN_RELEASE} ${SOURCEDIR} ${DEBIAN_MIRROR}

建完 debootstrap.sh 後,請以 root 權限執行:

# sh debootstrap.sh

此時會看到 debootstrap 開始抓檔案並開始安裝一個最原始、最小型的 / 檔案系統。debootstrap.sh 執行完的畫面如下所示:

I: Configuring iputils-ping...
I: Configuring isc-dhcp-common...
I: Configuring isc-dhcp-client...
I: Configuring tasksel...
I: Configuring tasksel-data...
I: Configuring libc-bin...
I: Configuring systemd...
I: Base system installed successfully.

此時會有一個 LEENIX 的目錄,我們可以檢查此目錄來看其內容,這個目錄其實就是一個最精簡的 / 目錄。接下來我們可以使用 chroot 指令來切換至此目錄,請先編輯 chroot.sh 檔案,其內容如下所示:

SOURCEDIR=`pwd`/LEENIX

chroot ${SOURCEDIR} \
  /usr/bin/env -i \
  HOME=/root \
  TERM=$TERM \
  PS1='\u:\w\$ ' \
  PATH=/bin:/usr/bin:/sbin:/usr/sbin \
  /bin/bash --login

編輯完之後可以用 root 權限執行:

sh chroot.sh

此時你會發現你的目錄位置變成 /,如底下所示:

~/virtualclassroom/chroot# sh chroot.sh
root@120:/#

現在我們已經切換到剛剛那個小型的 root 目錄了,在這個目錄可以作一些事情,理論上不會傷害到實體主機。例如 apt-get 指令等均是在此小型 / 目錄中作修改。我們可以在這個目錄新增一個空的 aaa.txt 檔,指令如下所示:

/# touch aaa.txt

接著打 exit 離開 chroot 環境,再觀看 LEENIX 目錄中是否有 aaa.txt 這個檔案。

以上所完成的就是一個最簡單的 chroot 環境,它與我們接下來要教的 docker 有點類似,所以 docker 才號稱是「加了外掛的 chroot 環境」。

沒有留言:

張貼留言