在 XigmaNAS 中使用 FreeBSD Jail

最近研究了各大 NAS 系统,自己在矿难机中安装了 FreeNAS 系统(11.2 版本),这个系统很好用,不仅把 ZFS 的功能发挥到了极致,各种同步任务、还是 Jail、VM 管理等都非常方便,但又兴起研究了一下同源的低配版 XigmaNAS,在服务器的虚拟机中给了4G4核的配置开了一台 XigmaNAS,这个系统占用资源确实很低,但配置烦琐、功能布局凌乱,不过介于研究性质,我们还是继续下去。

想在这个系统中创建一个完整的 FreeBSD 环境来使用,而这个系统仍然使用较旧的 virtualbox 虚拟化形式,使用 virtualbox 来虚拟化一个环境出来无疑是非常占用资源的,而且本身就是在虚拟机中(不能再一次虚拟化),因为 XigmaNAS 本身也是基于 FreeBSD,这种情况使用 FreeBSD 自带的 jail 功能是最节省资源最合适的。

FreeBSD jail 最好使用工具来管理,对比 ezjail,qjail,iocage 等我比较喜欢 qjail 这款轻量级的工具,主要是因为简单,如果有较为复杂的需求 qjail 就不一定合适了。

使用 pkg 即可安装 qjail,XigmaNAS 的 pkg 不需要任何配置可以直接使用。

1. 安装 qjail

pkg install qjail

qjail 本身就只有一个脚本,安装很快,完成后即可使用 qjail 相关命令。

2. 初始化 qjail

qjail 默认是在 /usr/jails 中创建相关 jail,我希望它安装在创建的数据集 /mnt/vol1/jails 中,根据文档的介绍,这里需要修改 qjail 脚本中设定的存储位置,直接修改 /usr/local/bin/qjail,搜索 jaildir 修改即可。

通过 uname -a 得知当前 XigmaNAS 是基于 FreeBSD 12.0,于是将之前下载好的 FreeBSD 12.0 的 base.txz 文件放入 NAS 中,然后使用以下命令初始化 qjail。

qjail install -f /mnt/vol1/data1/12.0-RELEASE

-f 参数指向 base.txz 文件所在目录,如果不指定 -f 则它默认会从 FreeBSD 官网下载二进制文件,速度较慢,当然你也可以使用 -h 参数指定其它镜像地址。

在使用 qjail install 的时候发现提示 xzdec 命令不存在,发现 XigmaNAS 中并没有 xzdec 这个命令,我们从其它已经安装的 FreeBSD 系统中直接拷贝 /usr/bin 下的 xzdec 到 NAS 的 /usr/bin 中。

继续执行 install 发现会停止在 Installation of bin failed 的错误上,这个错误让人一头雾水,于是查看 qjail 脚本,搜索 failed 字眼,发现报错在以下这个位置:

   2133   for dir in ${dirlist}; do
   2134     find "${dir}" | cpio -dmp "${sharedfs}" 1> /dev/null 2>&1 || \
   2135     kill "Error: Installation of ${dir} failed."
   2136     rm -r "${dir}";
   2137     ln -s /sharedfs/"${dir}" "${dir}"
   2138   done

然后临时删除 2134 行中的 1> /dev/null 2>&1 继续执行发现原来是 cpio 命令不存在。于是照搬 cpio 过来,注意 cpio 实际上是软链的 /usr/bin/bsdcpio 文件,我这里是拷贝了 bsdcpio 过来,自己建了软链。

继续执行 install 安装完成。

3. 创建 jail

执行以下命令创建一个 jail

qjail create -4 192.168.1.123 playground

终于显示创建成功。

执行 qjail list 查看 jail 列表

xigmanas: jails# qjail list

STATUS JID  NIC    IP              Jailname
------ ---- ------ --------------- --------------------------------------------
DR     N/A  em0    192.168.1.123   playground

启动 playground 这个 jail。

xigmanas: jails# qjail start playground
Jail successfully started  playground

 进入 jail。

xigmanas: jails# qjail console playground
Last login: Wed Oct 30 14:06:59 on pts/0
FreeBSD 12.0-RELEASE-p10 (XIGMANAS-amd64) #0 r352547M: Fri Sep 20 04:56:20 CEST 2019

Welcome to your FreeBSD jail.
playground /root >

OK,现在你在 XigmaNAS 中有了一个独立的 FreeBSD 环境,尽情的玩耍吧。