Как обновить и поддерживать несколько тюрем (скелет 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/
Другие вопросы по тегам