2021年3月23日

Linux Chroot實作 (Debian)

前言:

Linux Container(容器化)現在已經很常見了,但討論主要集中在Docker,Docker有非常多優勢,像是Docker Hub、Docker Volume、Docker Image與Container,進一步擴展還有K8s。
但Docker使用容量有點大,不論是Docker Image、Container,Docker相對有點點複雜,對於服務隔離而且硬體受限(低階VPS)的場景,找到Chroot,也就是Container的始祖。
相對於Container,Chroot比較少人討論,因為它僅有執行環境隔離,沒有CPU、記憶體隔離,也沒有網路隔離,但以服務隔離的角度,網路由防火牆防護,似乎不錯,於是實做了下,寫一篇分享。

環境:

相同作法應該適用在Ubuntu/Debian系列的實體機和VM內,不適用Container內(LXC、Docker)。
實驗環境是Debian 10 (Buster)

安裝:

1. 需要安裝2個套件,包括debootstrap和schroot。
# apt-get install debootstrap schroot

2. 建立Chroot系統目錄
mkdir /home/chroot

(這裡有個選項,如果有額外的磁碟或分割區,目錄可以用ZFS,好處是ZFS有snapshot功能,能讓Chroot系統支援snapshot)

3. 產生Chroot系統的Template
# debootstrap buster /home/chroot/rootfs http://ftp.tw.debian.org/debian/
(debootstrap能產生Debian/Ubuntu系統的Rootfs,裡面會包含Standard版本的完整系統,不包含fstab之類的設定)

4. 把Template打包
# cd /home/chroot
# tar cjf chroot.tar.bz2 rootfs

設置Chroot系統:

1. 解壓縮並更名Template
# cd /home/chroot
# tar jxf chroot.tar.bz2
# mv rootfs webrootfs (預計要使用的Chroot系統名稱,這裡用webrootfs)

2. 編輯schroot的Chroot系統設定檔
# vi /etc/schroot/chroot.d/webrootfs.conf
[webrootfs]
description=Web Rootfs
directory=/home/chroot/webrootfs
root-users=root
users=myuser
type=directory

進入Chroot系統:

執行指令切換到Chroot系統
schroot -c webrootfs

切換到Chroot系統後,所有的操作都在Chroot系統內,這時候可以安裝套件,準備執行環境。

操作Chroot系統與執行程式:

1. 啟動Chroot系統Session
# schroot -c webrootfs -b
執行後會出現一串像是:
webrootfs-b7738702-b79a-4376-9952-377570356804

這是這個Session的SessionID
(-c 指定Chroot系統名稱)
(-b 啟動Chroot系統,產生Session)

2. 查詢所有SessionID
# ls /run/schroot/mount/
所有SessionID都會紀錄在 /run/schroot/mount/

3. 進入Session
# schroot -r -c webrootfs-b7738702-b79a-4376-9952-377570356804
當SHELL出現(webrootfs)root 就是進入Session了
(-c 指定SessionID)
(-r 進入存在的Session)

4. 離開Session
# exit

5. 刪除Session
# schroot -e -c webrootfs-b7738702-b79a-4376-9952-377570356804
(-c 指定SessionID)
(-e 刪除存在的Session)

參考:

沒有留言: