Как обновить и поддерживать несколько тюрем (скелет ZFS & nullfs)
Существует несколько способов и инструментов для создания джейлов, и теперь, когда дисковое пространство становится дешевле, создание полной джейла (уже скомпилировав мир) занимает считанные секунды:
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
и минимизировать время простоя.
Любая лучшая практика или метод, которому нужно следовать, имея в виду, что цель состоит в том, чтобы минимизировать время простоя и, если возможно, максимально упростить обновление или несколько тюрем?
1 ответ
ezjail покрывает описанный вами вариант использования. Чтобы ответить на ваш вопрос:
Как вы справляетесь с непрерывными обновлениями?
Позвольте мне процитировать цитату из Руководства FreeBSD 14.6.2. Начальная настройка:
Заполнение Jail с помощью 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/