freebsd:jails
Differences
This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
| freebsd:jails [2020/09/27 01:53] – created sleepy | freebsd:jails [2025/07/07 23:10] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 9: | Line 9: | ||
| <code bash / | <code bash / | ||
| $j="/ | $j="/ | ||
| - | $path=" | + | path=" |
| host.hostname=" | host.hostname=" | ||
| Line 17: | Line 17: | ||
| exec.stop=" | exec.stop=" | ||
| - | examplehost | + | #BASE { |
| - | ip4.addr=" | + | # ip4.addr=" |
| - | }</ | + | # |
| + | #}</ | ||
| ---- | ---- | ||
| + | |||
| + | |||
| + | |||
| ====== Create zfs jail base ====== | ====== Create zfs jail base ====== | ||
| + | ===== Create from source ===== | ||
| <code bash> | <code bash> | ||
| - | zfs create -o quota=30G zroot/ | + | zfs create -o quota=30G zroot/ |
| cd /usr/src | cd /usr/src | ||
| - | make installworld DESTDIR=/ | + | make installworld DESTDIR=/ |
| - | make distribution DESTDIR=/ | + | make distribution DESTDIR=/ |
| </ | </ | ||
| + | |||
| + | ===== Create from release tarball ===== | ||
| + | * grab the **base** and **lib32** tarballs for your FreeBSD version <code bash> | ||
| + | fetch https:// | ||
| + | * extract snapshot tarballs to jail path <code bash>tar -xf base.txz -C /jails/BASE | ||
| + | tar -xf lib32.txz -C / | ||
| + | |||
| ---- | ---- | ||
| - | ===== Configure zfs jail base ===== | + | |
| + | ====== Configure zfs jail base ====== | ||
| <code bash> | <code bash> | ||
| - | touch /jails/BASE_12.2-STABLE/etc/fstab | + | touch /jails/BASE/ |
| - | cp / | + | mkdir -p / |
| - | cp / | + | cp / |
| - | echo "sendmail_enable=" | + | cp / |
| - | echo "ntpd_enable=" | + | cp / |
| - | echo "sshd_enable=" | + | echo 'sendmail_enable=" |
| + | echo 'ntpd_enable=" | ||
| + | echo 'sshd_enable=" | ||
| </ | </ | ||
| - | * jails don't use fstab, but some programs need it <code bash> | + | * jails don't use fstab, but some programs need it <code bash> |
| - | * jails will probably be in same timezone as host <code bash>cp / | + | * jails will probably be in same timezone as host <code bash>cp / |
| - | * don't need to configure dns servers <code bash>cp / | + | * don't need to configure dns servers <code bash>cp / |
| - | * don't need sendmail <code bash> | + | * don't need sendmail <code bash> |
| - | * no need to run ntpd since jail cannot change time <code bash> | + | * no need to run ntpd since jail cannot change time <code bash> |
| - | * enable sshd <code bash> | + | * enable sshd <code bash> |
| ---- | ---- | ||
| Line 49: | Line 64: | ||
| ==== install typical packages, add user, install dotfiles, copy keys.==== | ==== install typical packages, add user, install dotfiles, copy keys.==== | ||
| <cli green uppercase> | <cli green uppercase> | ||
| - | jexec -l BASE pkg install nano zsh git-lite | + | pkg -j BASE install nano zsh git-lite |
| - | jexec -l BASE adduser sleepy | + | jexec -l BASE adduser |
| - | jexec BASE adduser | + | |
| jexec -l -U sleepy BASE git clone https:// | jexec -l -U sleepy BASE git clone https:// | ||
| jexec -l -U sleepy BASE / | jexec -l -U sleepy BASE / | ||
| Line 57: | Line 71: | ||
| jexec -l BASE chsh -s zsh | jexec -l BASE chsh -s zsh | ||
| jexec -l -u sleepy BASE mkdir / | jexec -l -u sleepy BASE mkdir / | ||
| - | cp ~sleepy/ | + | cp ~sleepy/ |
| jexec -l BASE chown -R sleepy: | jexec -l BASE chown -R sleepy: | ||
| jexec -l BASE chmod 700 / | jexec -l BASE chmod 700 / | ||
| Line 65: | Line 79: | ||
| Snapshot the BASE jail | Snapshot the BASE jail | ||
| - | <code bash>zfs snapshot zroot/ | + | <code bash>zfs snapshot zroot/ |
| ---- | ---- | ||
| ====== Create jail ====== | ====== Create jail ====== | ||
| - | * create new jail dataset <code bash>zfs clone zroot/ | + | * create new jail dataset <code bash>zfs clone zroot/ |
| * add entry to **/ | * add entry to **/ | ||
| python { | python { | ||
| Line 75: | Line 89: | ||
| }</ | }</ | ||
| * add entry to **/ | * add entry to **/ | ||
| - | |||
| ---- | ---- | ||
| + | ====== Updating jails ====== | ||
| + | ===== using source ===== | ||
| + | assuming you have already built and installed world and kernel. Stop the running jail(s) first. | ||
| + | < | ||
| + | make installworld DESTDIR=/ | ||
| + | mergemaster -iFU -D /jails/path | ||
| + | </ | ||
| + | ==== jails_update.sh ==== | ||
| + | Script to automate the updates, just make sure to update the jails paths. | ||
| + | <code bash jails_update.sh> | ||
| + | jails="/ | ||
| + | cd /usr/src | ||
| + | |||
| + | for jail in $jails | ||
| + | do | ||
| + | make installworld DESTDIR=$jail | ||
| + | mergemaster -iFU -D $jail | ||
| + | done | ||
| + | </ | ||
| + | |||
| + | ===== using freebsd-update binaries ===== | ||
| + | <code bash> | ||
| + | freebsd-update -b /jails/path fetch | ||
| + | freebsd-update -b /jails/path install | ||
| + | </ | ||
| + | ---- | ||
| ====== To Do ====== | ====== To Do ====== | ||
| - | * create ZFS dataset with 20% reserve quota | + | * create ZFS dataset with 20% reserve quota <code bash>zfs create -o quota=300G -o mountpoint=/ |
| - | * **zfs create -o quota=300G -o mountpoint=/ | + | * replace hardcoded jail paths with variable< |
| - | * disable syslogd' | + | echo $jail</ |
| - | * **sysrc syslogd_flags=" | + | |
| - | * bind SSHd to specific IP | + | * need to create alias for jail ip on hosts network interface during jail creation. |
| - | * **/etc/ | + | * using '' |
| + | | ||
freebsd/jails.1601171623.txt.gz · Last modified: (external edit)
