CoreSystem/Virtualization/Создание bundle

Материал из ALT Linux Wiki
Перейти к: навигация, поиск
Stub.png
Данная страница находится в разработке.
Эта страница ещё не закончена. Информация, представленная здесь, может оказаться неполной или неверной.
Small-pyramides.png
Архивная информация.
Описываемые в этой статье вещи больше не используются, оставлены только для обратной совместимости или вообще не существуют.


Определения и workflow[править]

Внимание! Похоже что mkve устарела, и для создания контейнеров сейчас правильнее использовать mkimage-profiles (см. примеры использования для OpenVZ VE и Qemu VM)


Определения[править]

Слово гипервизор является синонимом понятия «тип виртуализации». Так мы говорим о гипервизорах openvz, qemu, kvm и т. д.

  • Контейнер — это готовая к работе виртуальная машина под управлением одного из гипервизоров.
  • Bundle — это набор данных и метаданных определённого формата для автоматического создания контейнеров средствами mkve.
  • Шаблон — это набор данных определённого формата для автоматического создания bundle’ов средствами mkve-bundle.

Workflow[править]

Нашей конечной целью является создание bundle.

Для создания bundle средствами программы mkve-bundle для начала необходимо подготовить соответствующий шаблон.

Для тех же, кому необходимо создавать bundle своими собственными средствами, приводится описание его формата.

Формат нативного шаблона для mkve-bundle[править]

Для создания шаблона для программы mkve-bundle необходимо подготовить директорию определенного вида и содержания. Вот полный список файлов, которые могут (но не обязательно должны) содержаться в шаблоне:

hypervisors
versions/гипервизор
vendor/гипервизор
license/гипервизор
packages-lists/гипервизор
hooks-lists/гипервизор
hooks/*
conf/гипервизор/

(здесь и далее гипервизор пробегает все значения, указанные в файле hypervisors). Мы подробно опишем это дерево в последующих секциях.

Файл hypervisors[править]

В первую очередь надо представить файл hypervisors. Этот файл содержит список поддерживаемых шаблоном гипервизоров, т.е. гипервизоров, для которых можно собрать bundle из данного шаблона.

Две записи разделяются символом новой строки:

[user@xxx test]$ cat hypervisors 
openvz
qemu

Файл versions/гипервизор[править]

В папке versions хранится файл versions/гипервизор. В этом файле указана версия шаблона для гипервизора гипервизор.

Пример.

[user@xxx test]$ cat versions/openvz 
template_version=0.02

Файл vendor/гипервизор[править]

Этот файл служит для указания конторы, создавшей bundle из шаблона.

Пример.

[user@xxx test]$ cat vendor/openvz 
vendor="ALT Linux"

Файл license/гипервизор[править]

В этом файле может содержаться текст лицензии, под которой распространяется собранный из шаблона bundle.

Пример.

[user@xxx test]$ cat license/openvz 
[aspsk@localhost bin]$ head -7 license/openvz
                  GNU GENERAL PUBLIC LICENSE
                     Version 2, June 1991

Copyright (C) 1989, 1991 Free Software Foundation, Inc.
51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.


Файл packages-lists/гипервизор[править]

В папке packages-lists/ хранится в каком-то смысле главный файл в шаблоне — packages-lists/гипервизор. Этот файл содержит список пакетов, которые будут установлены в bundle. (См. также секцию Пакеты ve-*.)

Пример.

[user@xxx test]$ cat packages-lists/openvz 
ve-pptp-server
alterator-net-eth
alterator-root
alterator-users
alterator-auth

Файл hooks-lists/гипервизор[править]

В папке hooks-lists/ может находиться файл hooks-lists/гипервизор. Этот файл содержит список хуков, т.е. программ, которые будут запущены "внутри bundle" после установки пакетов.

Программа mkve-bundle по умолчанию будет искать хуки сначала в директории hooks/, а затем в директории, указанной ей параметром --hooks (равным по умолчанию /usr/share/mkve/hooks).

Пример.

[user@xxx test]$ cat hooks-lists/openvz 
very-simple-hook
01-root
02-mtab
03-chkconfig_network_on
03-chkconfig_syslogd_on
03-chkconfig_random_on
03-chkconfig_pptpd_on
03-chkconfig_rawdevices_off
03-chkconfig_fbsetfont_off

Директория hooks/*[править]

В этой директории, программа mkve-bundle будет в первую очередь искать хуки. Здесь можно, например, переписать дефолтные хуки или добавить хуки, нужные только для этого конкретного шаблона. Все хуки должны быть исполняемыми файлами.

Пример.

[user@xxx test]$ ls -F hooks/
very-simple-hook*
[user@people test]$ cat hooks/very-simple-hook 
#! /bin/sh
echo 'волки рыщут - пищу ищут!'


Директория conf/гипервизор/[править]

В некоторых случаях в bundle хочется упаковать дополнительные файлы конфигурации, которые будут использоваться при создании контейнера. Эти файлы необходимо поместить в директорию conf/гипервизор/.

Частный случай: conf/openvz/[править]

Для гипервизора openvz в папку conf/openvz/ можно добавить файл config. В этом файле в формате, описанном в vps.conf(5) можно перечислить дефолтные для данного контейнера значения, в частности дисковые квоты и остальные beancounters.

Пример.

[user@xxx test]$ ls conf/openvz
config
[user@xxx test]$ cat conf/openvz/config 
OSTEMPLATE="pptp-server"
DEVNODES="/dev/ppp:rw "

Создание собственного шаблона[править]

Утилита mkve-template[править]

Если вы собираетесь писать новый шаблон, то вы можете воспользоваться утилитой mkve-template. Ее задачи и синтаксис очень просты: команда

$ mkve-template --hypervisor гипервизор шаблон

создаст директорию шаблон и поместит в ней скелет шаблона для указанного гипервизора. Если вы правильно прочитаете следующую секцию, то вам останется добавить в шаблон только хуки, и дополнительные конфиги.

Пример.

[user@xxx ~]$ mkve-template --hypervisor openvz /tmp/test
[user@xxx ~]$ find /tmp/test
/tmp/test
/tmp/test/packages-lists
/tmp/test/packages-lists/openvz
/tmp/test/versions
/tmp/test/versions/openvz
/tmp/test/hypervisors
[user@xxx ~]$ cat /tmp/test/hypervisors
openvz
[user@xxx ~]$ cat /tmp/test/versions/openvz
template_version=0.01
[user@xxx ~]$ cat /tmp/test/packages-lists/openvz
ve-test
ve-hypervisor-openvz

Пакеты ve-*[править]

Эти пакеты предназначены для создания bundle или контейнеров. Они не содержат ни одного файла, но вытягивают указанные в них пакеты по зависимостям. Имеется два типа таких пакетов.

Первый тип составляют пакеты ve-сервис. Они определяют множество пакетов, необходимое для создания контейнера, предоставляющего сервис. Например, пакет ve-ftp-server вытягивает множество пакетов, необходимое для поднятия ftp-сервера в виртуальной машине.

Второй тип составляют пакеты ve-hypervisor-гипервизор. Они определяют дополнительное множество пакетов, необходимое для запуска сервиса под конкретным типом виртуализации. Если дополнительных пакетов не требуется (как, например, в случае OpenVZ), то вытягиваемое множество пакетов может оказаться и пустым.

Таким образом, множество пакетов, требуемых для поднятия сервиса на виртуальной машине под управлением гипервизора определяется "суммой"

ve-сервис "+" ve-hypervisor-гипервизор.

При такой договоренности содержимое файла packages-lists/гипервизор для шаблона mkve-bundle становится очень простым:

$ cat packages-lists/гипервизор
ve-сервис
ve-hypervisor-гипервизор

Утилита mkve-template создает именно такой файл.


Создание bundle с помощью mkve-bundle[править]

Знакомство[править]

Утилита mkve-bundle используется следующим образом:

$ mkve-bundle [<опции>] <шаблон>

Здесь <шаблон> — это либо путь к директории, содержащей шаблон, либо имя шаблона, содержащегося в директории /usr/share/mkve/templates.

Например, если у вас есть шаблон ~/test, то вы можете создать из него bundle следующим образом:

$ mkve-bundle ~/test

А если вы установили свой шаблон в /usr/share/mkve/templates:

$ ls -d /usr/share/mkve/templates/test
/usr/share/mkve/templates/test

то вы можете сказать просто

$ mkve-bundle test

Обязательные параметры[править]

Для нормальной работы mkve-bundle требует указания нескольких опций. Следующие две опции обязательны:

--hypervisor гипервизор
для какого гипервизора собирается bundle
--output путь
в этот файл bundle и будет записан

Например, команда

mkve-bundle --hypervisor openvz --output /tmp/test.bun ~/templates/test

соберет bundle из шаблона ~/templates/test для гипервизора openvz и запишет его в файл /tmp/test.bun.

Обязательные опции могут быть указаны не только в командной строке, но также и в конфигурационном файле.

Необязательные параметры[править]

Следующие опции не являются обязательными:

--hooks директория
искать хуки в указанной директории. Значение этой опции по умолчанию равно /usr/share/mkve/hooks.
--force-no-sign
не подписывать файл с метаинформацией

Конфигурационный файл[править]

Для того чтобы не указывать все время одни и те же опции, можно запомнить их значения в конфигурационном файле ~/.mkve/bundle-config. Для того, чтобы определить опцию с именем name нужно задать в этом файле переменную с именем name. Например, в конфиге

$ cat ~/.mkve/bundle-config
hypervisor=openvz
verbose=yes
force_no_sign=yes

мы сообщили программе mkve-bundle, что

  • в качестве гипервизора по умолчанию нужно использовать openvz
  • мы хотим иметь более подробный отчет
  • мы не хотим подписывать создаваемый bundle (например, при разработке)

Заметьте, что что минусы в имени опции --force-no-sign в конфиге превратились в знаки подчеркивания.

Теперь с помощью команды

$ mkve-bundle --output <output> <template>

мы соберем bundle из шаблона <template> для гипервизора openvz.

Конфигурационный файл заодно является программой на bash, так что вы можете сделать и что-то вроде

$ cat ~/.mkve/bundle-config
hypervisor=openvz

mkdir -p ~/bundles
output=~/bundles/mkve-bundle-$(date +%d%m%y).bun

Пример: запуск mkve-bundle при разработке шаблона[править]

Представим, что нам хочется разработать шаблон template, из которого должен собираться bundle для гипервизора openvz.

С хорошей вероятностью, при разработке шаблона нам не раз захочется запускать команду

mkve-bundle --hypervisor openvz --out /tmp/template.bun ~/packages/template

Для ускорения процесса нужно использовать конфигурационный файл следующего вида:

$ cat ~/.mkve/bundle-config
template=~/packages/template
hypervisor=openvz
output=/tmp/template.bun

verbose=yes        # нам интересно знать почему сборка падает
force_no_sign=yes  # и мы не хотим каждый раз вбивать пароль

Теперь мы можем собирать наш bundle с помощью очень простой команды

$ mkve-bundle

Формат bundle[править]

Утилита mkve-cache[править]

Эта утилита позволяет создать и упаковать hasher'овский chroot с нужным набором пакетов. Кроме этого, при создании chroot можно запускать хуки, команды и копировать в chroot файлы.

Пример 1.

$ mkve-cache --out файл пакеты

установит в дефолтный hasher'овский chroot пакеты и после этого запакует содержимое chroot'а в файл.

Пример 2.

$ mkve-cache --out файл --command 'chkconfig sshd on' пакеты

установит в дефолтный hasher'овский chroot пакеты, запустит в chroot'е команду

chkconfig sshd on

и после этого запакует содержимое chroot'а в файл.

Пример 3.

$ mkve-cache -z --tarify-only путь к hasher'овскому chroot'у

просто запакует указанный chroot в файл $TMPDIR/output.tar.gz.