如何更新和維護多個監獄(ZFS 和 nullfs 框架)
有多種創建監獄的方法和工具,現在磁碟空間變得越來越便宜,創建一個完整的監獄(已經編譯了一個世界)只是幾秒鐘的事情:
zfs create tank/jails/sandbox zfs create tank/jails/sandbox/home zfs create tank/jails/sandbox/tmp make installworld DESTDIR=/jails/sandbox SRCCONF=/etc/src-jail.conf
為了更新現有的監獄,我目前正在使用類似的東西:
for jail in /jails/*; do make installworld delete-old delete-old-libs DESTDIR=$jail done
它有效,但除了是破壞性過程之外,它還意味著“停機時間”,因為如果需要,無法回滾。
有一些方法描述瞭如何創建基本圖像,然後
nullfs
使用符號連結安裝只讀骨架或其他方法,但在所有可能的選項中,我想知道您如何處理滾動升級?儘管如果主機使用的是 FreeBSD 11.2 並且現在已更新到 FreeBSD 12 時使用的工具,我想例如只需要執行一次:
make installworld DESTDIR=/jails/new-base12 SRCCONF=/etc/src-jail.conf
然後每個監獄要麼提升(
zfs
)或修改自定義/etc/fstab.jailname
(nullfs
),這樣一旦完成,我就可以做一個/etc/rc.d/jails restart
並最大限度地減少停機時間。要遵循的任何最佳實踐或方法,請記住目標是最大程度地減少停機時間,並儘可能簡化升級或多個監獄?
ezjail涵蓋了您描述的案例。要回答您的問題:
您如何處理滾動升級?
讓我引用 FreeBSD 手冊14.6.2。初始設置:
使用 installworld 填充監獄basejail 可以從 buildworld 在主機上創建的二進製文件中安裝,使用ezjail-admin update … installworld 被執行,將主機的 /usr/obj 安裝到 basejail 中。
# ezjail-admin update -i -p
FWIW,為了自動化安裝和配置,我維護 Ansible 角色freebsd_jail,使用 FreeBSD 12.0 進行了測試。
要回答您的問題:
ezjail 是否使用 zfs 來創建監獄 basejail 和其他人,並且還使用 nullfs 來創建只讀共享組件?
是的,它確實。請參閱典型的 1) zfs 文件系統列表 2) fstab 和 3) 模板newjail的目錄和連結。
$ zfs list NAME USED AVAIL REFER MOUNTPOINT zroot 3.04G 104G 23K /zroot zroot/jails 3.03G 104G 63K /local/jails zroot/jails/basejail 1.54G 104G 1001M /local/jails/basejail zroot/jails/build 281M 104G 281M /local/jails/build zroot/jails/newjail 2.29M 104G 2.29M /local/jails/newjail zroot/jails/test_01 977M 104G 977M /local/jails/test_01 zroot/jails/test_02 134M 104G 134M /local/jails/test_02 zroot/jails/test_03 134M 104G 134M /local/jails/test_03 $ cat /etc/fstab.test_01 /local/jails/basejail /local/jails/test_01/basejail nullfs ro 0 0 $ ll /local/jails/newjail/ total 25 drwxr-xr-x 13 root wheel 23 Jan 21 17:19 ./ drwx------ 9 root wheel 9 Jan 21 17:19 ../ -rw-r--r-- 2 root wheel 951 Dec 7 05:13 .cshrc -rw-r--r-- 2 root wheel 470 Dec 7 05:13 .profile drwxr-xr-x 2 root wheel 2 Jan 21 17:19 basejail/ lrwxr-xr-x 1 root wheel 13 Jan 21 17:18 bin@ -> /basejail/bin lrwxr-xr-x 1 root wheel 14 Jan 21 17:18 boot@ -> /basejail/boot -r--r--r-- 1 root wheel 6177 Dec 7 05:17 COPYRIGHT dr-xr-xr-x 2 root wheel 2 Dec 7 05:11 dev/ drwxr-xr-x 25 root wheel 103 Jan 21 17:19 etc/ lrwxr-xr-x 1 root wheel 13 Jan 21 17:18 lib@ -> /basejail/lib lrwxr-xr-x 1 root wheel 17 Jan 21 17:18 libexec@ -> /basejail/libexec drwxr-xr-x 2 root wheel 2 Dec 7 05:11 media/ drwxr-xr-x 2 root wheel 2 Dec 7 05:11 mnt/ drwxr-xr-x 2 root wheel 2 Dec 7 05:11 net/ dr-xr-xr-x 2 root wheel 2 Dec 7 05:11 proc/ lrwxr-xr-x 1 root wheel 16 Jan 21 17:18 rescue@ -> /basejail/rescue drwxr-xr-x 2 root wheel 6 Dec 7 05:17 root/ lrwxr-xr-x 1 root wheel 14 Jan 21 17:18 sbin@ -> /basejail/sbin lrwxr-xr-x 1 root wheel 11 Dec 7 05:11 sys@ -> usr/src/sys drwxrwxrwt 2 root wheel 2 Dec 7 05:11 tmp/ drwxr-xr-x 6 root wheel 15 Jan 21 17:19 usr/ drwxr-xr-x 25 root wheel 25 Jan 21 17:19 var/