2015-03-04

Ubuntu 用 chroot 安裝不同版本做測試

要在一台 Ubuntu 上安裝多個不同的 Ubuntu 版本來測試的方法有很多種,最常用的應該是安裝個 VirtulBox 來跑虛擬機器,不然,就是用 lxc 來弄個 Conatiner 來用,不過,阿舍只是要測一些程式在不同版本能不能 build 起來和跑起來,所以,阿舍想要更簡單一點的,更懶一點的方法,因此,就想到一直想試但都沒去試的 chroot 哩 !




阿舍本來是想用 LiveCD 加 chroot 的方式來安裝不同版本的 Ubuntu,不過,好像是因為 Ubuntu 的 LiveCD 的檔案結構和啟動方式和一般的 Linux 不太相同,所以,阿舍就一直試不出只用 LiveCD 和 chroot 指令的方式,因此,最後,阿舍還乖乖的去用 debootstrap 這個套件來安裝 Ubuntu 給 chroot 用哩 ! ...

sudo apt-get install schroot debootstrap

所以,就要先用上面的指令來安裝 dchroot 相關套件,安裝好之後,接下來,就要去設定一下 schroot 的設定檔,檔案位置及檔案名稱是 /etc/schroot/schroot.conf,打開之後,裡面會有一堆的範例,但是,都是被註解掉的,阿舍想要測一下 Ubuntu 15.04,所以,就移到檔案的最後,加入下面這幾行。(有關 schroot.conf 檔案的設定說明,可參考 man schroot.conf )

#這個客體作業系統的名稱
[vivid]
# 簡短說明,一般是放發行版本及其版本名稱
description=Ubuntu Vivid
# 客體作業系統安裝的資料夾路徑 
directory=/vivid
# 允許使用這個客體作業系統的主體作業系統的使用者清單,用逗號分隔多個的使用者名稱
users=arthurtoday
# 允許使用這個客體作業系統的主體作業系統的使用者群組清單,用逗號分隔多個的使用者群組名稱
groups=sbuild
# 這個客體作業系統的執行環境,一般是安裝在一個資料夾來執行,所以,是設成 'directory'
type=directory

schroot 設定弄好之後,接下來,就要來安裝要測試用的客體作業系統,首先,阿舍先用 Ubuntu 15.04 的名稱在根目錄建立一個叫做「vivid」的資料夾 (要和上面的 directory 項目設定的路徑及名稱相同才行)來安裝及作為這個客體作業系統的執行環境。

離開 chroot 環境後,就會清除 chroot 所使用的資源

再來,就要開始下載及安裝 Ubuntu 15.04,這個時候,就要用到剛剛安裝的 debootstrap 程式來執行這項任務,以阿舍要安裝 64 位的 Ubuntu 15.04 ( 代號是 vivid ) 到 /vivid 資料夾為例,執行的指令如下。

$ sudo mkdir /vivid

$ sudo debootstrap --variant=buildd --arch amd64 vivid /vivid http://free.nchc.org.tw/ubuntu/

開始執行後,就會從指定的網站下載指定的 Ubuntu 版本來安裝,大概要跑一段的時間,順利安裝完成後,會出現「Base system installed successfully.」的訊息,這樣就算安裝完成了,接著,如果你有看過其它的 chroot 教學的話,可能會要你執行下面這幾行指令來掛載一些檔案系統和複製一些檔案,但是,其實是不用的哩 ! ~~

$ sudo mount -o bind /dev /vivid/dev
$ sudo mount -o bind /proc /vivid/proc
$ sudo mount sysfs /vivid/sys -t sysfs
$ cp /etc/resolv.conf /vivid/etc/resolv.conf~~

因為在 /ect/schroot/deffault 資料夾下已經分別有 fstab 和 copyfiles 兩個檔案來定義和處理上述的這些工作了,這二個檔案在進入 chroot 的時候,就會被讀取來執行了哩 ! 所以,只要設定好 /etc/schroot/schroot.conf 檔和執行好 debootstrap 指令來安裝完成後,就可以用下面這行指令來進入 chroot 哩 ! (下面的 vivid 和 arthurtoday 都是在 /etc/schroot/schroot.conf 設定的)

$ schroot -c vivd -u arthurtoday
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=15.04
DISTRIB_CODENAME=vivid
DISTRIB_DESCRIPTION="Ubuntu Vivid Vervet (development branch)"

終於安裝好,然後,可以進入 chroot 的環境後,阿舍就馬上來試看看,結果 ... 喔 ! 沒有 sudo、vi 哩 ! 原來,這是一個超級陽春的 Ubuntu 版本,因此,需要什麼程式的話,大都要自己安裝,不過,這樣也好,對於測試來說,會是一個比較乾淨的環境,比較不會受到其它影響哩 ! 但是,阿舍建議,第一次可以用下面指令以 root 登入來設定好環境後再改用上面的指令來進入 chroot 囉 !

$ chroot /vivid /bin/bash
$ apt-get update
$ apt-get install sudo vim
$ dpkg-reconfigure locales
$ sudo apt-get install language-pack-en
$ locale-gen en_US.UTF-8

最後,阿舍再提醒一下,這個 chroot 出來的環境是和原來的主體作業系統是共用資源的,例如,你的 80 埠已經被主體作業系統的 Apache 用掉了,那麼你客體作業系統裡的 Apache 就不能再用 80 埠了哩 ! ....

* 註:
主體作業系統是指原來你在用的那個作業系統,客體作業系統則是指跑在 chroot 的那作業系哩 !


推薦閱讀


有疑問? 問題還是沒解決嗎? 歡迎下方留言提問和討論 😁

沒有留言 :

張貼留言

歡迎留言提問和討論 .... 😁