FreeBSD Thick(厚) Jail

为方便调整,我设置了环境变量来方便后续操作

设置jail目录和release版本环境变量(注意是一个UFS文件系统)
# 这里的 udir 表示 UFS dir, 和我之前设置 dir 表示 ZFS dir 进行区别
# /udata 是主机上挂载的 UFS 文件系统
export jail_udir="udata/jails"
export bsd_ver="14.3"
# 在FreeBSD中root用户的shell默认是sh,所以调整 ~/.shrc
echo 'export jail_udir="udata/jails"' >> ~/.shrc
echo 'export bsd_ver="14.3"' >> ~/.shrc

结合 VNET + Thin Jail(NullFS) 的环境设置, ~/.shrc 内容完整如下:

~/.shrc 环境变量设置
export jail_dir="zdata/jails"
export jail_udir="udata/jails"
export bsd_ver="14.3"

原则上,一个 jail 只需要一个主机名、一个根目录、一个 IP 地址和一个用户空间。

下载用户空间
fetch https://download.freebsd.org/ftp/releases/amd64/amd64/$bsd_ver-RELEASE/base.txz -o /$jail_dir/media/$bsd_ver-RELEASE-base.txz
  • 解压缩到jail目录:

设置一个 $jail_name 方便灵活配置
export jail_name=bsd
解压缩到jail目录( bsd 命名)
mkdir -p /$jail_udir/containers/$jail_name
tar -xf /$jail_dir/media/$bsd_ver-RELEASE-base.txz -C /$jail_udir/containers/$jail_name --unlink
  • jail目录内容就绪以后,需要复制时区和DNS配置文件:

复制复制时区和DNS配置文件
cp /etc/resolv.conf /$jail_udir/containers/$jail_name/etc/resolv.conf
cp /etc/localtime /$jail_udir/containers/$jail_name/etc/localtime
  • 更新最新补丁:

更新jail
freebsd-update -b /$jail_udir/containers/$jail_name/ fetch install
  • 配置名为 bsd 的Thick Jail

/etc/jail.conf 中添加一行配置来包含所有在 /etc/jail.conf.d/ 目录下以 .conf 结尾的配置
.include "/etc/jail.conf.d/*.conf";
/etc/jail.conf.d 目录下添加 bsd.conf 配置
bsd {
  # STARTUP/LOGGING
  exec.start = "/bin/sh /etc/rc";
  exec.stop = "/bin/sh /etc/rc.shutdown";
  exec.consolelog = "/var/log/jail_console_${name}.log";

  # PERMISSIONS
  allow.raw_sockets;
  exec.clean;
  mount.devfs;

  # HOSTNAME/PATH
  host.hostname = "${name}";
  path = "/usr/local/jails/containers/${name}";

  # NETWORK
  ip4.addr = 10.0.0.9/24;
  interface = wifibox0;
}
  • 启动名为 bsd 的 Thick Jail:

启动名为 bsd 的Thick Jail
service jail start bsd