在開發 Linux 的軟體之時, 拿到的開發工具包裡面常常會指定開發環境, 例如指定開發環境為 Ubuntu 8.04, 不過您裝的 Linux 系統卻可能不是 Ubuntu 8.04 版本, 這時候您會如何處理 ? 找一台機器安裝 Ubuntu 8.04 ? 或是直接開啟 VMware 或是 VirtualBox 安裝一套 Ubuntu 8.04 呢 ?
另外如果您有兩台舊的 Server 各為 Debian 和 Fedora 想要兩台合併成一台, 機器太舊又不適合拿來虛擬化, 那您將如何處理 ?
快速尋找 關鍵字: stanwu chroot 您下次可以利用關鍵字快速找到這篇文章 Linux 的環境 ,因為每個人的偏好與習慣不同的關係, 在開發軟體的時候常常原廠指定的開發環境跟自己的不一樣因此開發環境的部署時會有一些些的不方便。
-- 您可能常常會聽到 FAE 跟你說 -- 您的開發環境不一樣喔, 這個問題可能是您的開發環境的關係, 請先換成指定的開發環境再看看, 這時候如果您的電腦或是筆電"夠力"的話, 您大可直接安裝一套 VMware 或是 VirtuaBox 來滿足開發需求, 但是您的電腦資源可能因此就瞬間耗損飆高, 心裡也跟著飆淚, 有時候開發一些與其他設備通訊的軟體時候( 例如 I2C ), 而 VMware 或是 VirtualBox 也沒辦法處理的時候可能您就需要安裝多系統, 或是乾脆重新安裝系統, 因此您可能看到一些苦命的工程師, 每天都在裝系統, 或是用 Acronis 之類的軟體在還原系統。
這時候您或許可以考慮使用 chroot 的命令來切換 Guest OS, 或許您偏愛的桌面系統是 Ubuntu 10.04 或是您是在 Server 上開發時 Host OS 可能偏愛的是 CentOS, 不管您是桌面系統還是伺服器系統您都可以使用 chroot 的方式切換到 Ubuntu 8.04 的 Guest OS 上面, 這樣在開發軟體的時候就非常的方便, 節省了大量開發時間, 當然除了開發軟體之外, 如果您需要在不同的平台間測試您的軟體, 您也可以依此類推, 很容易的在 Debian , Ubuntu , Fedora , CentOS 與不同的版本之間切換驗證 (作者:stanwu http://stanwu.us)
當然 chroot 也有一些缺點和限制, 首先 kernel 是共用的, 因此不管您切換到哪個 Guest OS 的環境都是使用 Host OS 的 kernel 資源, 包含了 /proc, /dev 等等都是共用的資源, 另外網卡設備也是共用的, 最後您必須是具備有系統管理員 root 的權限才能做 chroot 的動作, 或是需要系統管理員將您的帳號加到 sudoers 裡面才能正常的執行 chroot 此指令 (作者:stanwu http://stanwu.us)
如果您有系統潔癖, 在開發過程中可能需要做很多的實驗, 這時候您也可以考慮使用 chroot 的虛擬化方式開發或是測試軟體, 等到把整個系統搞亂之後, 再整個目錄刪除, 重新解開整個 rootfs 回覆新的系統, 當然備份整個 虛擬化 Guest OS 也是很方便, 直接把目錄壓縮起來就可以囉! (作者:stanwu http://stanwu.us)
以下是實作 chroot, 首先您需要先建立一個叫做 /guestos 的目錄, 當然您需要取得 root 最高權限才可以, 接著問題來囉, 我哪來的 Guest OS 的檔案 ? 方法一 從另外一顆事先裝好 Linux 系統的硬碟複製 最簡單的方式是將整個已經安裝的 Linux 作業系統硬碟的目錄掛載進來, 然後把整顆硬碟目錄結構複製到 /guestos 目錄下, 例如您有一顆以經裝好 Ubuntu 8.04 系統的硬碟, 掛載到 /media/ubuntu8.04 目錄, 這時候您可以 cd /guestos cp -rfa /media/ubuntu8.04 . <--a dot 等約數十分鐘之後, 整個目錄就被複製到 /guestos/ubuntu8.04 目錄, 當然您可以依此類推把各種 Guest OS 一一的複製到 /guestos 目錄中, 看起來像是下面那樣 /guestos 目錄下有 (作者:stanwu http://stanwu.us) ubuntu8.04,centos,debian 等等次目錄。
這時候您就可以利用 chroot 將環境切換到 Guest OS 中囉 例如我想要將環境切換為 Ubuntu 8.04 這時候您可以 chroot /guestos/ubuntu8.04 切換過去之後, 順便把 proc 掛載上去 mount -t proc none /proc 這時候您的環境就是 Ubuntu 8.04 囉, 而且隨便您惡搞檔案, 也不會影響到 Host OS (但如果與硬碟有關的命令一樣會影響到 Host OS 喔, 例如 mkfs 或是 fdisk )
(作者:stanwu http://stanwu.us)
方法二 直接下載樣版作業系統來用
如果您跟我一樣, 很懶惰, 最好是有樣版的檔案系統, 直接下載解開就可以用, 這樣多好啊, 跟吃罐頭一樣馬上就可以用, 最好是各種版本都有, 這時候您可以直接到 OpenVZ 的樣版網站 免費下載 虛擬化 檔案囉。
您可以隨時上 OpenVZ 的樣版網站 免費下載檔案囉! 下載之後您可以一樣在 /guestos 目錄下面建立一個系統的目錄名稱, 例如 ubuntu9.04 然後切換到該目錄中,然後將 ubuntu-9.04-x86.tar.gz 下載到 /guestos 目錄中, 並整個解開就可以囉! 非常方便吧!
下載樣版系統
cd /guestos
wget http://download.openvz.org/template/precreated/ubuntu-9.04-x86.tar.gz 建立目錄, 並且解開
cd /guestos
mkdir ubuntu9.04
cd ubuntu9.04
tar xvzf ../ ubuntu-9.04-x86.tar.gz
接著當然就使用 chroot 切換進去囉
chroot /guestos/ubuntu9.04
切換過去之後, 記得把 proc 掛載上去
mount -t proc none /proc
以上要回原系統, 只要先
umount /proc
之後再打
exit
就可以回 Host OS 囉, 非常的方便和簡單。
合併伺服器
當然如果您之前為了研發或是某個因素獨立各個伺服器, 您當然也可以使用 方法一 的方式, 將各台的伺服器合併為一台, 並可以維持原有的環境, 當然這個也有一些限制, 例如 A 和 B 都有 Apache 在執行, 那麼可能就會有問題囉, 所以最適合合併的方式為當 Web 伺服器為 Red Hat, Mail 伺服器為 Fedora 這時候就可以將兩個系統原封不動的 虛擬化 移植到 CentOS 上面合併起來, 也是一個權宜之計

沒有留言:
張貼留言