Во время реализации предыдущего поста, столкнулся с тем, что при достаточно большом количестве клеток, очень усложняется поддержка всего этого хозяйства, в первую очередь обновления. В английской версии руководства приводится один из вариантов схемы развертывания, призванный облегчить задачу массового обновления клеток. Вот перевод руководства. Я решил попробовать, так сказать, скрестить ежа с удвавом: реализовать эту схему с использованием преимуществ ZFS.
Вот еще полезная ссылочка, которая мне тоже помогла, так же буду копипастить себя любимого, и так начнем:
Исходные данные:
Проинсталированный FreeBSD 10.3 сервер файловая система ZFS.
zfs create -o mountpoint=/jails zroot/jails
Картинки и подробности в предыдущем посте: по сути делаем то же самое, но немного по другому.
Создаем файловую систему для, общего на все клетки, рутового раздела, монтируемого "только для чтения":
zfs create zroot/jails/.mroot
устанавливаем квоту:
zfs set quota=20G zroot/jails/.mroot
качаем файлы дистрибутива для клетки (в моем случае FreeBSD 10.3):
cd /var/tmp
fetch ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/10.3-RELEASE/base.txz
fetch ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/10.3-RELEASE/lib32.txz
fetch ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/10.3-RELEASE/games.txz
fetch ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/10.3-RELEASE/src.txz
На самом деле, куда качать значения не имеет, можно и в домашний каталог пользователя.
Распаковываем:
tar -JxvC /jails/.mroot/ -f base.txz
tar -JxvC /jails/.mroot/ -f lib32.txz
Вот еще полезная ссылочка, которая мне тоже помогла, так же буду копипастить себя любимого, и так начнем:
Исходные данные:
Проинсталированный FreeBSD 10.3 сервер файловая система ZFS.
Создание Шаблона
Создаем точку монтирования клеток:zfs create -o mountpoint=/jails zroot/jails
Картинки и подробности в предыдущем посте: по сути делаем то же самое, но немного по другому.
Создаем файловую систему для, общего на все клетки, рутового раздела, монтируемого "только для чтения":
zfs create zroot/jails/.mroot
устанавливаем квоту:
zfs set quota=20G zroot/jails/.mroot
качаем файлы дистрибутива для клетки (в моем случае FreeBSD 10.3):
cd /var/tmp
fetch ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/10.3-RELEASE/base.txz
fetch ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/10.3-RELEASE/lib32.txz
fetch ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/10.3-RELEASE/games.txz
fetch ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/10.3-RELEASE/src.txz
На самом деле, куда качать значения не имеет, можно и в домашний каталог пользователя.
Распаковываем:
tar -JxvC /jails/.mroot/ -f base.txz
tar -JxvC /jails/.mroot/ -f lib32.txz
tar -JxvC /jails/.mroot/ -f games.txz
tar -JxvC /jails/.mroot/ -f src.txz
Копируем свои настройки ДНС:
cp /etc/resolv.conf /jails/.mroot/etc/
Делаем chroot в новую систему:
chroot /jails/.mroot
Задаем пароль рута, создаем недостающие каталоги и обновляем систему:
passwd
mkdir /usr/ports
freebsd-update fetch install
создаем точку монтирования раздела с полным доступом:
mkdir /s
Выходим в обычное окружение:
exit
создаем каталог-шаблон:
тут мое мнение разделилось - с одной стороны, мы стремимся использовать
преимущества ZFS, а с другой - это просто статический каталог-шаблон,
можно делать и как простой каталог, и как файловую систему. Я остановился
на каталоге:
mkdir /jails/.skel /jails/.skel/home /jails/.skel/usr-X11R6 /jails/.skel/distfiles
редактируем /etc/fstab добавляем строчки:
#jails
Копируем свои настройки ДНС:
cp /etc/resolv.conf /jails/.mroot/etc/
Делаем chroot в новую систему:
chroot /jails/.mroot
Задаем пароль рута, создаем недостающие каталоги и обновляем систему:
passwd
mkdir /usr/ports
freebsd-update fetch install
создаем точку монтирования раздела с полным доступом:
mkdir /s
Выходим в обычное окружение:
exit
создаем каталог-шаблон:
тут мое мнение разделилось - с одной стороны, мы стремимся использовать
преимущества ZFS, а с другой - это просто статический каталог-шаблон,
можно делать и как простой каталог, и как файловую систему. Я остановился
на каталоге:
mkdir /jails/.skel /jails/.skel/home /jails/.skel/usr-X11R6 /jails/.skel/distfiles
редактируем /etc/fstab добавляем строчки:
#jails
/jails/.skel /jails/.mroot/s nullfs rw 0 0
выполняем:
mount -a
chroot /jails/.mroot
Таким образом, мы примонтировали шаблон в точку монтирования раздела с полным доступом и изменили окружение на .mroot, это позволит нам избежать потенциально-опасных моментов в дальнейшем, при выполнении условно-деструктивных действий, когда автоматом поставленный слэш, в начале пути, может привести к краху основной системы.
mv /etc /s
mv /usr/local /s/usr-local
mv /tmp /s
mv /var /s
mv /root /s
создаем ссылки на перемещенные файлы:
ln -s /s/etc etc
ln -s /s/home home
ln -s /s/root root
ln -s /s/usr-local /ust/local
ln -s /s/distfiles /usr/ports/distfiles
ln -s /s/usr-X11R6 /usr/X11R6
ln -s /s/var var
ln -s /s/tmp tmp
Устанавливаем порты:
portsnap fetch
portsnap extract
Устанавливаем софт, который должен быть во всех новых клетках, в моем случае mc и screen:
pkg install mc-light
pkg install screen
возвращаемся в нормальное окружение, размонтируем шаблон, и комментируем строку в /etc/fstab :
exit
umount /jails/.mroot/s
Создание шаблона завершено!
Создаем каталог, в котором будут располагаться точки монтирования rootfs клеток:
mkdir /jails/jlroots
создаем файловую систему для разделов, монтируемых для чтения-записи:
zfs create zroot/jails/jls
Для примера создадим клетку "test" :
mkdir /jails/jlroots/test
zfs create zroot/jails/jls/test
с помощью команды cpdup (создает дубликат каталога со всеми ссылками, в стандартные команды не входит: pkg install cpdup) копируем шаблон в rw каталог клетки:
cd /jails
cpdup /jails/.skel /jails/jls/test
добавляем строки в /etc/fstab:
/jails/.mroot /jails/jlroots/test nullfs ro 0 0
/jails/jls/test /jails/jlroots/test/s nullfs rw 0 0
порядок строк важен, иначе на момент монтирования, точка монтирования не будет существовать.
Монтируем:
mount -a
Получили в каталоге /jails/jlroots/test готовую файловую систему нашей клетки.
Дальнейшие действия не отличаются от описанных в предыдущем посте:
Устанавливаем jail2:
pkg install jail2
Создаем файл конфигов клеток /etc/jail.conf:
exec.start = "/bin/sh /etc/rc";
exec.stop = "/bin/sh /etc/rc.shutdown";
exec.clean;
mount.devfs;
path = "/jails/jlroots/$name";
test{
host.hostname = "test";
ip4.addr = lo0|127.0.0.2;
}
добавляем в /etc/rc.conf:
ifconfig_lo0="inet 127.0.0.1"#jails
jail2_enable="YES"
jail2_list="test"
запускаем клетку:
service jail2 start
любуемся:
jls
JID IP Address Hostname Path
2 127.0.0.2 test /jails/jlroots/test
подключаемся:
jexec -u root 2 /bin/csh
Клетка работает!
выполняем:
mount -a
chroot /jails/.mroot
Таким образом, мы примонтировали шаблон в точку монтирования раздела с полным доступом и изменили окружение на .mroot, это позволит нам избежать потенциально-опасных моментов в дальнейшем, при выполнении условно-деструктивных действий, когда автоматом поставленный слэш, в начале пути, может привести к краху основной системы.
mv /etc /s
mv /usr/local /s/usr-local
mv /tmp /s
mv /var /s
mv /root /s
создаем ссылки на перемещенные файлы:
ln -s /s/etc etc
ln -s /s/home home
ln -s /s/root root
ln -s /s/usr-local /ust/local
ln -s /s/distfiles /usr/ports/distfiles
ln -s /s/usr-X11R6 /usr/X11R6
ln -s /s/var var
ln -s /s/tmp tmp
Устанавливаем порты:
portsnap fetch
portsnap extract
Устанавливаем софт, который должен быть во всех новых клетках, в моем случае mc и screen:
pkg install mc-light
pkg install screen
возвращаемся в нормальное окружение, размонтируем шаблон, и комментируем строку в /etc/fstab :
exit
umount /jails/.mroot/s
Создание шаблона завершено!
Создание клетки
Создаем каталог, в котором будут располагаться точки монтирования rootfs клеток:mkdir /jails/jlroots
создаем файловую систему для разделов, монтируемых для чтения-записи:
zfs create zroot/jails/jls
Для примера создадим клетку "test" :
mkdir /jails/jlroots/test
zfs create zroot/jails/jls/test
с помощью команды cpdup (создает дубликат каталога со всеми ссылками, в стандартные команды не входит: pkg install cpdup) копируем шаблон в rw каталог клетки:
cd /jails
cpdup /jails/.skel /jails/jls/test
добавляем строки в /etc/fstab:
/jails/.mroot /jails/jlroots/test nullfs ro 0 0
/jails/jls/test /jails/jlroots/test/s nullfs rw 0 0
порядок строк важен, иначе на момент монтирования, точка монтирования не будет существовать.
Монтируем:
mount -a
Получили в каталоге /jails/jlroots/test готовую файловую систему нашей клетки.
Дальнейшие действия не отличаются от описанных в предыдущем посте:
Устанавливаем jail2:
pkg install jail2
Создаем файл конфигов клеток /etc/jail.conf:
exec.start = "/bin/sh /etc/rc";
exec.stop = "/bin/sh /etc/rc.shutdown";
exec.clean;
mount.devfs;
path = "/jails/jlroots/$name";
test{
host.hostname = "test";
ip4.addr = lo0|127.0.0.2;
}
добавляем в /etc/rc.conf:
ifconfig_lo0="inet 127.0.0.1"#jails
jail2_enable="YES"
jail2_list="test"
запускаем клетку:
service jail2 start
любуемся:
jls
JID IP Address Hostname Path
2 127.0.0.2 test /jails/jlroots/test
подключаемся:
jexec -u root 2 /bin/csh
Клетка работает!
Комментариев нет:
Отправить комментарий