FreeBSD virtual environment management and repository

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 и меняйте