Назад | Перейти на главную страницу

как обновлять и поддерживать несколько тюрем (скелет 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 и минимизировать время простоя.

Какая-либо передовая практика или метод, которым следует следовать, имея в виду, что цель состоит в том, чтобы минимизировать время простоя и, если возможно, максимально упростить обновление или несколько тюрем?

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/