Felix Hanley

FreeBSD jails

2025-09-05 freebsd jails

Using pkgbase

Create zfs datasets:

zfs create -o mountpoint=/jails zroot/jails
export JNAME=15-minimal
zfs create -p "zroot/jails/$JNAME"
mkdir -vp /jails/$JNAME/usr/share/keys
cp -vrn /usr/share/keys/pkg* /jails/$JNAME/usr/share/keys/
mkdir -vp /jails/$JNAME/var/db/pkg/repos
mount -vt tmpfs tmpfs /jails/$JNAME/var/db/pkg/repos
cp /etc/resolv.conf "/jails/$JNAME/etc/resolv.conf"
cp /etc/localtime "/jails/$JNAME/etc/localtime"
pkg -r /jails/$JNAME install FreeBSD-set-minimal-jail
pkg -r /jails/$JNAME install FreeBSD-bsdconfig

Using freebsd-update

Create zfs datasets:

zfs create -o mountpoint=/jails zroot/jails
zfs create zroot/jails/containers
zfs create zroot/jails/media

Done once per release to create the template:

export FBSDREL=15.0-RELEASE
zfs create -p "zroot/jails/templates/$FBSDREL"
fetch "https://download.freebsd.org/ftp/releases/amd64/amd64/$FBSDREL/base.txz" -o "/jails/media/$FBSDREL-base.txz"
tar -xf "/jails/media/$FBSDREL-base.txz" -C "/jails/templates/$FBSDREL" --unlink
cp /etc/resolv.conf "/jails/templates/$FBSDREL/etc/resolv.conf"
cp /etc/localtime "/jails/templates/$FBSDREL/etc/localtime"
freebsd-update -b "/jails/templates/$FBSDREL/" fetch install
zfs snapshot "zroot/jails/templates/$FBSDREL@base"

Then create a jail based on the template:

zfs clone "zroot/jails/templates/$FBSDREL@base" zroot/jails/containers/something

Then configure the jail in /etc/jail.conf.