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
1 | % 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/ файл под тем же именем, в котором мы можем переназначить настройки:
1 2 3 4 5 | % 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:
-
123%
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
-
123%
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:
1%
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), провести все необходимые настройки и сделать экспорт клетки. После чего, когда вам будет необходим новый инстанс, выполняете команду:
1% 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 - это и есть конфигурация, по которой создается клетка. Либо ее можно написать вручную, например:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556%
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 какой-нибудь текст на отдачу:
123456789101112131415%
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) Создание, запуск
Создаем клетку, запускаем и проверяем:
1234567% 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 выставив его в имя вашего профиля:
1echo
'default_profile="XXX"'
> ~cbsd
/etc/jail-freebsd-default
.conf
Обратите внимание, что файлы в $workdir/etc/defaults не редактируются - также, как в /etc/defaults. Если вы хотите переназначить значения по-умолчанию, копируйте из каталога $workdir/etc/defaults файл под тем же именем в каталог $workdir/etc и меняйте