在FreeBSD系统中使用BastilleBSD像“docker”一样管理Jail
前言
FreeBSD是一个优秀的系统,jail 是共享系统资源的一个虚拟机容器,从 FreeBSD 4.X 开始就可用了,发展到13.2已经是非常成熟的容器了,在实用性、性能、可靠性和安全性方面持续增强。之前使用过CBSD(bsdstore),想用来简化FrreBSD系统的jail管理,因为CBSD包含了太多功能,有虚拟机和集群功能,对我来说使用过于复杂,浅尝就卸载了。
可以看到CBSD网站上列举的Jail管理工具时间线,目前就剩下AppJail、Bastillebsd、CBSD、Mkjail四个工具还在开发了。
在试用了Bastillebsd后,发现用来管理Jail非常简单,因为Bastillebsd是以容器思维开发的,所以它命令使用方法基本和docker的命令差不多,下面来详细使用Bastillebsd来管理Jail。
使用入门
首先是安装Bastillebsd,就像安装一般软件一样:
pkg install bastille
安装完成后,首先要下载当前系统版本容器的底包,只有先下载底包才能创建Jail容器,例如宿主机使用的是FreeBSD 13.1-RELEASE,就先下载:
bastille bootstrap 13.1-RELEASE
请耐心等待下载完成,也可以把Update源修改成国内源加快下载速度。
下载完成底包后就可以创建虚拟环境的容器了,下面命令“freshrss”为你要创建的容器名称,后面13.1-RELEASE就是你刚刚下载的底包版本后面跟着手工设置的ip地址,因为默认创建命令是桥接网络,所以容器和宿主机是同一网段的ip,如果宿主机有多个网口也可以指定接口名称,后面接口为可选参数。
bastille create freshrss 13.1-RELEASE 192.168.1.8 [interface]
在创建成功后,使用bastille start freshrss启动容器,bastille stop freshrss停止容器。
容器启动后,使用bastille console freshrss命令就可以进入虚拟容器中了,只要进入容器里面就能按照平常安装配置系统一样了。除了升级系统和软件外,就和正常使用FreeBSD系统一样。
因为虚拟容器防修改的机制,升级系统和容器里面的软件需要在宿主机环境使用bastille命令来操作。
首先是打补丁与更新,与宿主机freebsd-update fetch等价命令就是:bastille update 13.1-RELEASE
完成这个命令后将会升级所有版本为13.1-RELEASE容器到最新的-p版本,例如13.1-RELEASE-p7。
当有比13.1-RELEASE更加新的版本发布后我们要先将宿主机的系统按照FreeBSD手册“执行主要和次要版本升级”(bsdcn)升级到13.2-RELEASE,然后才能升级容器里面的系统。
在完成了宿主机系统的升级,我们需要使用命令:bastille upgrade 13.1-RELEASE 13.2-RELEASE来将13.1的容器全部升级到13.2。升级完成后要把容器里面软件全部升级,使用命令:bastille pkg ALL upgrade
注意:当你使用bastille upgrade 13.1-RELEASE 13.2-RELEASE来升级完成你的容器后,千万不能再使用bastille update 13.1-RELEASE了,这样会把容器的13.2系统破环掉。就我用过的方法就是用命令bastille bootstrap 13.2-RELEASE下载完成最新的底包后,停用容器,使用bastille edit freshrss fstab命令编辑容器里面的fstab文件,把其中的/usr/local/bastille/releases/13.1-RELEASE...修改成/usr/local/bastille/releases/13.2-RELEASE...
然后就可以使用bastille update 13.2-RELEASE来打补丁与更新了。
系统自启动bastille
在/etc/rc.conf文件添加两行就行了,bastille_list后面是容器名称。
bastille_enable="YES"
bastille_list="freshrss"
类似docker功能
为什么说使用Bastillebsd像docker一样,因为Bastillebsd的导出导入功能非常像dockers部署一样,把软件运行环境打包导出就能在其他系统导入了,完全不用重新再配置软件运行环境,可以说完全复制了软件原来运行环境和数据。
导出命令:bastille export --txz freshrss
导入容器命令(后面为打包文件路径):bastille import /path/to/archive.file
具体更多命令的使用方法请参考bastille官方文档。
如果需要虚拟机和集群功能,可以考虑使用功能更强大的CBSD。
后记
FreeBSD Jail本身就是一个系统级非常强大容器环境,只是使用了Bastillebsd来更方便去操作和管理Jail。如果官方能运营一个像Docker的镜像社区,方便使用者下载导入其他人分享的打包程序,我相信对普及FreeBSD系统是一大好事。
自从最早的m0n0wall(居于FreeBSD 6.4开发)路由系统,中间到openwrt,再到2020年开始使用居于FreeBSD开发的opnsense路由系统。家里的nanopi neo2、x86主机也一直使用FreeBSD系统,系统版本也一直从12.X平滑升级到现在的13.2,依然稳定地运行着。
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

