2020-10 upd: we reached the first fundraising goal and rented a server in Hetzner for development! Thank you for donating !
Внимание! Данные страницы описывают CBSD версии 13.0.x. Если вы используете более раннюю версию, рекомендуется сначала обновиться.
Профили для создания jail
Команды jcreate
% cbsd jcreate
Профиль настроек jail
Описание
Если вы не работаете с гиганским количеством нод и окружений, когда могут быть полезны такие инструменты как Puppet, Ansible, SaltStack, Chef или собственный вариант по генерации .jconf файла для jcreate, но вам часто приходится создавать окружения и при этом вам не подходят ряд параметров предложенных по-умолчанию, мы рекомендуем вам пользоваться профилями чтобы переопределить значения по-умолчанию, либо создать свой отдельный профиль
Посмотрите на содержимое файла $workdir/etc/defaults/jail-freebsd-default.conf. Он представляет из себя те настройки, которые применяются в jconstruct-tui по-умолчанию
Допустим, вы хотите создавать контейнера всегда в режиме baserw=1 (вместо baserw=0 по-умолчанию), на интерфейсе lo0 (вместо auto, который выбирает интерфейс в зависимости от подсети jail) и предпочитать имя cell вместо jail и в домене example.com и при этом, чтобы контейнер запускался моментально после создания ( runasap="1" ) (не путайте с astart="1", которая запускает клетку с запуском сервера)
Для этого, создадим в каталоге (или скопируем из $workdir/etc/defaults) $workdir/etc/ файл под тем же именем, в котором мы можем переназначить настройки:
% echo 'baserw="1"' > ~cbsd/etc/jail-freebsd-default.conf % echo 'interface="lo0"' >> ~cbsd/etc/jail-freebsd-default.conf % echo 'default_jailname="cell"' >> ~cbsd/etc/jail-freebsd-default.conf % echo 'default_domain="example.com"' >> ~cbsd/etc/jail-freebsd-default.conf % echo 'runasap="1"' >> ~cbsd/etc/jail-freebsd-default.conf
Получим файл $workdir/etc/jail-freebsd-default.conf с содержим:
baserw="1" interface="lo0" default_jailname="cell" default_domain="example.com" runasap="1"
Это все! Теперь мы можем запускать cbsd jconstruct-tui, где вам нужно делать еще меньше настроек для создания окружения!
Возможно, вы захотите создать несколько собственных профилей. Для этого, также создавайте файлы в каталоге ~cbsd/etc/ используя префикс в имени файла jail-freebsd-YOUR_PROFILE.conf
При этом в качестве _обязательного_ параметра внутри каждого профиля, должно быть имя этого профиля в переменной jail_profile="default" и jail_active установленный в 1 (активный профиль). Например, создадим два профиля: baserw и lo0:
% echo 'jail_profile="baserw"' > ~cbsd/etc/jail-freebsd-baserw.conf % echo 'jail_active="1"' >> ~cbsd/etc/jail-freebsd-baserw.conf % echo 'baserw="1"' >> ~cbsd/etc/jail-freebsd-default.conf
% echo 'jail_profile="lo"' > ~cbsd/etc/jail-freebsd-lo0.conf % echo 'jail_active="1"' >> ~cbsd/etc/jail-freebsd-lo0.conf % echo 'interface="lo0"' >> ~cbsd/etc/jail-freebsd-lo0.conf
Теперь вы увидите профили в выборе возможных вариантов меню 'profile' при запуске cbsd jconstruct-tui
Возможно вы захотите, чтобы профиль lo0 был по-умолчанию, поскольку вы использоуете его чаще всего. Вы можете переопределить в $workdir/etc/jail-freebsd-default.conf профиль по-умолчанию через параметр default_profile:
% echo 'default_profile="lo"' > ~cbsd/etc/jail-freebsd-default.conf
При этом содержимое файла будет ~cbsd/etc/jail-freebsd-default.conf:
default_profile="lo"
В этом случае, запуская cbsd jconstruct-tui, вам ненужно выбирать даже профиль. Остается совсем немного действий чтобы запустить новое окружение
Профиль содержимого jail
Описание
Допустим, вам необходимо штамповать однотипные клетки, в которых должен быть установлен и настроен некоторый список ПО, например, клетка с WEB сервером nginx, отдающим index.html. Вы можете создать клетку (например jail1), провести все необходимые настройки и сделать экспорт клетки. После чего, когда вам будет необходим новый инстанс, выполняете команду:
% cbsd jimport jname=jail1 newjname=jail2
Создавая на основе имиджа jail1 копию в новую клетку под именем jail2. Также, для этих целей можно использовать команду jclone. Тем не менее, это не всегда бывает удобно (особенно с точки зрения поддержания ПО в актуальном состоянии в оригинальной клетке), поэтому воспользуемся возможностью накладывать профили и применять альтернативные skel-каталоги для применения нужных нам изменений на-лету при создании клетки.
Пример:
1) Создание jconf:
Если вы хотите создавать неинтерактивные сценарии (без вашего участия), создадим шаблон, по которому будут создавать новые клетки CBSD скрипты. Для этого запустим cbsd jconstruct-tui и на вопрос "Do you want to create jail immediately?" ответим отрицательно. В этом случае будет выведена команда для jcreate и путь к jconf - это и есть конфигурация, по которой создается клетка. Либо ее можно написать вручную, например:
% mkdir /root/share % cat > /root/share/nginx.jconf << EOF # DO NOT EDIT THIS FILE. PLEASE USE INSTEAD: # cbsd jconfig jname=jail1 relative_path="1"; jname="jail1"; path="/usr/jails/jails/jail1"; host_hostname="jail1.my.domain"; ip4_addr="DHCP"; mount_devfs="1"; allow_mount="1"; allow_devfs="1"; allow_nullfs="1"; mount_fstab="/usr/jails/jails-fstab/fstab.jail1"; arch="native"; mkhostsfile="1"; devfs_ruleset="4"; ver="native"; basename=""; baserw="0"; mount_src="0"; mount_obj="0"; mount_kernel="0"; mount_ports="1"; astart="1"; data="/usr/jails/jails-data/jail1-data"; vnet="0"; applytpl="1"; mdsize="0"; rcconf="/usr/jails/jails-rcconf/rc.conf_jail1"; floatresolv="1"; zfs_snapsrc=""; exec_poststart="0"; exec_poststop=""; exec_prestart="0"; exec_prestop="0"; exec_master_poststart="0"; exec_master_poststop="0"; exec_master_prestart="0"; exec_master_prestop="0"; pkg_bootstrap="1"; pkglist="/root/share/pkglist.txt"; with_img_helpers=""; runasap="0"; interface="auto"; jailskeldir="/root/share/nginx-jail" jail_profile="default"; # root password user_pw_root='rootpw' exec_start="/bin/sh /etc/rc" exec_stop="/bin/sh /etc/rc.shutdown" emulator="jail" EOF
Где наиболее важно для нас:
- jail1 - имя клетки
- user_pw_root - параметр, устанавливающий соответствующий пароль пользователю root (вы можете также просто править master.passwd файл в skel каталоге для этого)
- ip4_addr="DHCP" - заставляет CBSD брать первый свободный IP из диапазона nodepool
- jailskeldir="/root/share/nginx-jail" - альтернативый путь к skel-каталогу, применяемому после создания клетки
- pkglist="/root/share/pkglist.txt" - путь к файлу, определяющему набор ПО в клетку при ее создании
- arch="native" - использовать/наследовать архитектуру хостер системы. Либо указываем: i386, amd64
- ver="native" -использовать/наследовать версию хостер системы. Либо указываем: 10.3, 11.1, 12
2) Создание pkglist.txt
Просто перечислям origin или packagename того ПО, что хотим получить в клетке:
% cat > /root/share/pkglist.txt << EOF www/nginx shells/bash EOF
3) skel-каталог
Кастомизируем каталог дополнительных файлов, которые будут скопированы в jail. А именно - пропишем nginx в rc.conf внутри клетки и положим в /usr/local/www/nginx/index.html какой-нибудь текст на отдачу:
% cp -a /usr/local/cbsd/share/jail-skel /root/share/nginx-jail % mkdir -p /root/share/nginx-jail/usr/local/www/nginx % cat > /root/share/nginx-jail/usr/local/www/nginx/index.html << EOF <html> <body> <pre> It's been a hard day's night And I've been working like a dog It's been a hard day's night I should be sleeping like a log </pre> </body> </html> EOF % sysrc -f /root/share/nginx-jail/etc/rc.conf nginx_enable="YES"
4) Создание, запуск
Создаем клетку, запускаем и проверяем:
% cbsd jcreate jconf=/root/share/nginx.jconf % cbsd jstart jail1 % curl http://X.Y.N.M It's been a hard day's night And I've been working like a dog It's been a hard day's night I should be sleeping like a log
Профиль для jconstruct-tui
Если вы хотите подобные клетки создавать вручную, выбирая когда это надо необходимые skel-каталоги или настройки по-умолчанию, создайте в каталоге $workdir/etc файл с именем jail-freebsd-XXXX.conf с минимальным содержимым:
jail_profile="XXX"
где XXX - имя вашего профиля. Профиль vnet в CBSD создан как пример, вы посмотреть его в $workdir/etc/defaults/jail-freebsd-vnet.conf
В свою очередь, он переписывает значения по-умолчанию из профиля defaults: jail-freebsd-default.conf
Если же вы редко используете профиль по-умолчанию и хотите, чтобы CBSD по-умолчанию предлагала ваш профиль, измените значение default_profile выставив его в имя вашего профиля:
echo 'default_profile="XXX"' > ~cbsd/etc/jail-freebsd-default.conf
Обратите внимание, что файлы в $workdir/etc/defaults не редактируются - также, как в /etc/defaults. Если вы хотите переназначить значения по-умолчанию, копируйте из каталога $workdir/etc/defaults файл под тем же именем в каталог $workdir/etc и меняйте