550953 писал(а):Принцип хочу понять. Спасибо большое что разтолковали о принципе работы, а то действительно как волшебные слова все было. Пишут ведь все так просто про обычный джаил, а у меня с первого начала после установки всей системы и попытки установить первым делом миднайт кучу ошибок вывалило. Ежджаил интересна, пробоывaл ее и заметил что юзаются файлы в ней с base.txz
Итого за полтары сутки билдворлд таки собрал сборку.
Когда структура и архитектура ОС становится понятна в некотором приближении - использование
конструктора на ее базе тоже упрощается.
1. FreeBSD легко разворачивается руками:
- оформляется диск: партиции + загрузчик (gpart)
- создаются FS: newfs
- разворачивается дистрибутив, минимум: base + kernel [+ lib32 для 64'bit]
2. Рекомендуемый вариант СБОРКИ, он же - апгрейд из sources: система, ядро:
- описано в /usr/src/Makefile
- если исходники системы у нас не изменялись, мы можем пересобрать и установить CUSTOM'ное ядро
без дополнительных движений:
# make buildkernel
# make installkernel
# reboot
- если мы обновляли sources FreeBSD (например переход с релиза на релиз), в этом случае, необходимо
сначала собрать мир, затем ядро, далее установить новое ядро и затем установить новый мир, причина
- ядро и система должны быть синхронизированы:
# make buildworld
# make buildkernel
# make installkernel
# make installworld
# reboot
(расписывается укрупненно без дополнительных опций и mergemaster)
3. Бинарный апгрейд - использование freebsd-update, вещь хорошая и правильная, удобная,
но личное мнение, только обретает очертания стабильной.
Вывод: апгрейд FreeBSD возможен двумя вариантами,
a) сборка из sources (/usr/src);
b) бинарный апгрейд через freebsd-update;
JAIL:
- традиционный - использует ядро и стек TCP/IP от HOST машины;
- VIMAGE (опция в ядре) - использует ядро HOST машины и виртуальный стек TCP/IP VNET;
клетка - полностью повторяет структуру HOST машины, но без devfs - ограниченый доступ к устройствам:
# less /etc/defaults/devfs.rules -> devfsrules_jail - что доступно jail'ам
укрупненно: HOST
/boot
/[s]bin
/etc
/usr[bin,sbin,lib...,local]
/var
/home
/dev - доступ к памяти, устройствам
jail/клетка -> создаем базовую директорию, которая будет виртуальным корнем:
# mkdir /jails -> будущий "/" корень для jail-машин
и внутри создается копия системы:
/jails[/] - /[s]bin, /etc, /usr[bin,sbin,lib...,local],/var,[/home]
к примеру, если /home общий для всех jail-машин, его можно через mount_nullfs смонтировать
во все jail-машины, аналогично делается с /dev с ограничениями доступа (см выше правила devfsrules_jail)
Все, далее простой вывод, как скопировать систему для каждой jail-машины?
Два варианта (смотрим выше про апгрейд FreeBSD):
1) freebsd-update - точно позволяет это делать в 10.0, возможно в 9.3
2) сборка системы и установка куда укажем в DESTDIR (ядро для jail не нужно по архитектуре)
еще один метод: развернуть base.txz
base.txz неприемлем в случае если мы апгрейдим, RELEASE -> RELENG (RELEASE + BUG FIxes),
его просто неоткуда взять, [base,kernel,lib32].txz существуют только для RELEASE, те их
можно взять из iso или скачать с зеркал freebsd.
Развитие JAIL после релиза 9.1 -> обновление jail до jail v.2 -> /etc/rc.d/jail скрипт deprecated,
конфигурация jail-машине задается в /etc/jail.conf вместо /etc/rc.conf.
В /etc/rc.conf - только имена и разрешение запуска.
Как-то так, если укрупненно.
Есть еще одна тонкость, использовать бинарную базу для всех jail-машин, если посмотреть структуру,
/[s]bin, /usr/[sbin], /usr[lib...] - одинкаовая для всех jail-машин одной версии ОС.
Значит можно создавать базовый jail и монтировать его во все jail-машины, что позволяет легко
апгредить jail-машины. Создали обновленную базовую jail и все.
Но в этом случае freebsd-update видимо не канает, sorry, не смотрел, использую свои скрипты.
Когда-то ezjail такое использоваол.