有多种创建监狱的方法和工具,现在磁盘空间变得越来越便宜,创建一个完整的监狱(已经编译了一个世界)只是几秒钟的事情:
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。初始设置:
FWIW,为了自动化安装和配置,我维护 Ansible 角色freebsd_jail,使用 FreeBSD 12.0 进行了测试。
要回答您的问题:
是的,它确实。请参阅典型的 1) zfs 文件系统列表 2) fstab 和 3) 模板newjail的目录和链接。