https://blog.vgot.net/archives/freebsd-jail-ipfw-nat.html
https://rderik.com/blog/running-a-web-server-on-freebsd-inside-a-jail/
https://rderik.gumroad.com/l/uwOLZ
大致步骤是:
- 找个目录,安装一套freebsd,无论是编译还是网上下载
- 在
/etc/jail.conf
中指定这个目录,然后
准备: 先安装一套系统
mkdir /usr/jail/www
bsdinstall jail /usr/jail/www
配置文件 /etc/jail.conf
参数详见 https://www.freebsd.org/cgi/man.cgi?jail
以及 https://www.freebsd.org/cgi/man.cgi?jail.conf(5)
www {
host.hostname = myweb;
ip4=inherit;
ip6=inherit;
path = "/usr/jail/www";
devfs_ruleset = 2; # see /etc/defaults/devfs.rules
mount.devfs;
allow.reserved_ports;
exec.start = "/bin/sh /etc/rc";
exec.stop = "/bin/sh /etc/rc.shutdown";
}
此方案使用和当前系统相同网络栈(上文)
(未完成)网络方案2: 配置主机给jail的NAT 以IPFW举例 /etc/ipfw.rules**
在启动之前的新建一对网卡,并在防火墙配置跳转(TODO)
## https://www.freebsd.org/cgi/man.cgi?query=epair
## create pair-ether-devices for this jail
## we assume result is epair0a and epair0b
## epair0a: host 10.1.1.1/24
## epair0b: jail 10.1.1.2/24
ifconfig epair0 create inet 10.1.1.1/24
修改jail内部的ip和gateway /usr/jail/www/etc/rc.conf
ifconfig_epair0b="inet 10.1.1.2 netmask 255.255.255.0"
defaultrouter="10.1.1.1"
(未完待续)
使用它
装一些程序 并启动
pkg -j www install nginx php81 php81-extensions mariadb106-server vim
service jail start www
常用指令
- 前台启动www
jail -c www
, 强停jail -r 1
- 后台启动www
service jail start www
,service jail stop www
- 看所有
jls
, 看详情jls -v
- 进入1号
jexec 1 bash
- 往www机装程序
pkg -j www install nginx php81 php81-extensions mariadb106-server vim
- 看看装了哪些
pkg -j www info
系统升级和jail升级
FreeBSD的确free,系统升级使用freebsd-update
,软件包更新用pkg update
,然而若只更新软件包,需要注意他的提示是否比kernel要新,那么就要先更新系统。。
升级主系统
# 执行后会有一堆提示,例如配置文件合并,哪些系统文件要被删除,哪些是新增等等
freebsd-update -r 13.1 upgrade
# (上一步觉得还需要再看看/再改改可以重新运行上面命令)
# 上一步我们merge的文件不会立即生效,当前旧系统当前仍然是可用的,需要执行下述命令apply
freebsd-update install
升级jail内系统
https://docs.freebsd.org/en/books/handbook/jails/#jails-updating
# 大升级 注意需要install两次才会生效
freebsd-update -b /usr/jail/www --currently-running 13.0 -r 13.1 upgrade
freebsd-update -b /usr/jail/www install
ervice jail restart www
freebsd-update -b /usr/jail/www install
# 小升级
freebsd-update -b /usr/jail/www fetch
freebsd-update -b /usr/jail/www install
# 运行 jls 看下要更新哪个jail
pkg -j 1 update
这似乎是freebsd-update
的一个bug,只能看到宿主机的版本,即使在从环境下运行升级也看到的是宿主机的版本,实际上 在宿主机执行freebsd-update IDC
会提示很多文件不符,说明从系统并没有升级。
此时需强行指定--currently-running
Related problem:version FBSD_1.7 required by /usr/local/lib/libpython3.9.so.1.0
https://forums.freebsd.org/threads/version-fbsd_1-7-required-by-usr-local-lib-libpython3-9-so-1-0.86449/