警告
本文来自网络,我也看不懂写的是什么,待删除或重写。
如果要同时管理多个 jail,那么在更新 jail 的时候就要对每个 jail 单独进行一遍操作。通过建立统一的模板,可以让所有 jail 共用一个基础环境,同时拥有各自的可写空间,互不干扰。
# cd /usr/ports/sysutils/cpdup/
# make install clean
# mkdir -p /jail/mroot
# 然后放入基本目录
# 将 ports 和源码放入模板
# git clone --filter=tree:0 https://mirrors.ustc.edu.cn/freebsd-ports/ports.git /jail/mroot/usr/ports
# cpdup /usr/src /jail/mroot/usr/src # 需要提前获取源码,且要注意源码对应的版本要与 /jail/mroot 的版本相同
# cd /jail/mroot # cd 到模板目录
# mkdir s # 创建用来做链接的目录
# ln -s s/etc etc
# ln -s s/home home
# ln -s s/root root
# ln -s ../s/usr-local usr/local
# ln -s ../s/usr-X11R6 usr/X11R6
# ln -s ../../s/distfiles usr/ports/distfiles
# ln -s s/tmp tmp
# ln -s s/var var
# mkdir -p /jail/skel
# mkdir /jail/skel /jail/skel/home /jail/skel/usr-X11R6 /jail/skel/distfiles /jail/skel/portbuild
# 移动可写部分
# mv /jail/mroot/etc /jail/skel
# mv /jail/mroot/usr/local /jail/skel/usr-local
# mv /jail/mroot/tmp /jail/skel
# mv /jail/mroot/var /jail/skel
# mv /jail/mroot/root /jail/skel
# etcupdate -s /jail/mroot/usr/src -d /jail/skel/var/db/etcupdate -D /jail/skel
# echo “WRKDIRPREFIX?= /s/portbuild” >> /jail/skel/etc/make.conf
# cpdup /jail/skel /jail/files/www
# mkdir /jail/www /jail/www/s
# ee /jail/www.fstab
# 将公共只读系统挂载到项目目录
/jail/mroot /jail/www nullfs ro 0 0
# 将项目数据目录挂载到项目目录
/jail/files/www /jail/www/s nullfs rw 0 0
# 全局部分
exec.start = "/bin/sh /etc/rc";
exec.stop = "/bin/sh /etc/rc.shutdown";
exec.clean;
mount.devfs;
allow.raw_sockets = 1;
allow.sysvipc = 1;
interface = "网卡地址";
# 主机名也可以用变量代替
hostname = "$name.domain.local";
# jail 位置,也可以用变量
path = "/jail/$name";
## ip 地址
ip4.addr = 192.168.1.$ip;
## fstab 位置
mount.fstab = /jail/$name.fstab;
www {
$ip=2
# # 如不使用 fstab,使用
# mount.fstab =""; # 替换全局
}