Есть несколько способов и инструментов для создания тюрем, и теперь, когда дисковое пространство становится дешевле, создание полной тюрьмы (уже скомпилированной) занимает всего несколько секунд:
zfs create tank/jails/sandbox
zfs create tank/jails/sandbox/home
zfs create tank/jails/sandbox/tmp
make installworld DESTDIR=/jails/sandbox SRCCONF=/etc/src-jail.conf
В настоящее время для обновления существующих тюрем я использую что-то вроде:
for jail in /jails/*; do
make installworld delete-old delete-old-libs DESTDIR=$jail
done
Это работает, но подразумевает "простои", помимо того, что является деструктивной процедурой, поскольку при необходимости нет возможности откатиться.
Есть несколько методов, описывающих, как создать базовое изображение, а затем использовать nullfs
просто смонтировать скелет только для чтения или другие, используя символические ссылки, но среди всех возможных вариантов мне интересно, как вы справляетесь со скользящими обновлениями?
Несмотря на инструмент, который использовался, например, если хост использовал FreeBSD 11.2 и теперь был обновлен до FreeBSD 12, я бы хотел, например, просто запустить один раз:
make installworld DESTDIR=/jails/new-base12 SRCCONF=/etc/src-jail.conf
А затем за тюрьму либо продвигать (zfs
) или изменить пользовательский /etc/fstab.jailname
(nullfs
) так что по завершении я мог просто сделать /etc/rc.d/jails restart
и минимизировать время простоя.
Какая-либо передовая практика или метод, которым следует следовать, имея в виду, что цель состоит в том, чтобы минимизировать время простоя и, если возможно, максимально упростить обновление или несколько тюрем?
Ezjail охватывает описанный вами вариант использования. Чтобы ответить на ваш вопрос:
Как вы справляетесь со скользящими обновлениями?
Позвольте мне процитировать Справочник FreeBSD 14.6.2. Начальная настройка:
Чтобы заполнить тюрьму installworld Basejail может быть установлен из двоичных файлов, созданных buildworld на хосте с помощью ezjail-admin обновление ... выполняется installworld, устанавливающий / usr / obj хоста в basejail.
# ezjail-admin update -i -p
FWIW, для автоматизации установки и настройки я поддерживаю роль Ansible freebsd_jail, протестирован с FreeBSD 12.0.
Чтобы ответить на ваш вопрос:
Использует ли ezjail zfs для создания jails basejail и других, а также использует nullfs для общих компонентов только для чтения?
Да, это так. См. Типичный 1) список файловых систем zfs 2) fstab и 3) каталоги и ссылки шаблона Newjail.
$ zfs list
NAME USED AVAIL REFER MOUNTPOINT
zroot 3.04G 104G 23K /zroot
zroot/jails 3.03G 104G 63K /local/jails
zroot/jails/basejail 1.54G 104G 1001M /local/jails/basejail
zroot/jails/build 281M 104G 281M /local/jails/build
zroot/jails/newjail 2.29M 104G 2.29M /local/jails/newjail
zroot/jails/test_01 977M 104G 977M /local/jails/test_01
zroot/jails/test_02 134M 104G 134M /local/jails/test_02
zroot/jails/test_03 134M 104G 134M /local/jails/test_03
$ cat /etc/fstab.test_01
/local/jails/basejail /local/jails/test_01/basejail nullfs ro 0 0
$ ll /local/jails/newjail/
total 25
drwxr-xr-x 13 root wheel 23 Jan 21 17:19 ./
drwx------ 9 root wheel 9 Jan 21 17:19 ../
-rw-r--r-- 2 root wheel 951 Dec 7 05:13 .cshrc
-rw-r--r-- 2 root wheel 470 Dec 7 05:13 .profile
drwxr-xr-x 2 root wheel 2 Jan 21 17:19 basejail/
lrwxr-xr-x 1 root wheel 13 Jan 21 17:18 bin@ -> /basejail/bin
lrwxr-xr-x 1 root wheel 14 Jan 21 17:18 boot@ -> /basejail/boot
-r--r--r-- 1 root wheel 6177 Dec 7 05:17 COPYRIGHT
dr-xr-xr-x 2 root wheel 2 Dec 7 05:11 dev/
drwxr-xr-x 25 root wheel 103 Jan 21 17:19 etc/
lrwxr-xr-x 1 root wheel 13 Jan 21 17:18 lib@ -> /basejail/lib
lrwxr-xr-x 1 root wheel 17 Jan 21 17:18 libexec@ -> /basejail/libexec
drwxr-xr-x 2 root wheel 2 Dec 7 05:11 media/
drwxr-xr-x 2 root wheel 2 Dec 7 05:11 mnt/
drwxr-xr-x 2 root wheel 2 Dec 7 05:11 net/
dr-xr-xr-x 2 root wheel 2 Dec 7 05:11 proc/
lrwxr-xr-x 1 root wheel 16 Jan 21 17:18 rescue@ -> /basejail/rescue
drwxr-xr-x 2 root wheel 6 Dec 7 05:17 root/
lrwxr-xr-x 1 root wheel 14 Jan 21 17:18 sbin@ -> /basejail/sbin
lrwxr-xr-x 1 root wheel 11 Dec 7 05:11 sys@ -> usr/src/sys
drwxrwxrwt 2 root wheel 2 Dec 7 05:11 tmp/
drwxr-xr-x 6 root wheel 15 Jan 21 17:19 usr/
drwxr-xr-x 25 root wheel 25 Jan 21 17:19 var/