CoreSystem/Virtualization/Создание bundle: различия между версиями
Строка 48: | Строка 48: | ||
'''Пример.''' | '''Пример.''' | ||
[ | [user@xxx test]$ cat versions/openvz | ||
template_version=0.02 | template_version=0.02 | ||
Версия от 17:22, 27 февраля 2009
Определения и workflow
Определения
Слово гипервизор является синонимом понятия «тип виртуализации». Так мы говорим о гипервизорах openvz, qemu, kvm и т. д.
- Контейнер — это готовая к работе виртуальная машина под управлением одного из гипервизоров.
- Bundle — это набор данных и метаданных определённого формата для автоматического создания контейнеров средствами mkve.
- Шаблон — это набор данных определённого формата для автоматического создания bundle’ов средствами mkve-bundle.
Workflow
Нашей конечной целью является создание bundle.
Для создания bundle средствами программы mkve-bundle для начала необходимо подготовить соответствующий шаблон.
Для тех же, кому необходимо создавать bundle своими собственными средствами, приводится описание его формата.
Формат нативного шаблона для mkve-bundle
Для создания шаблона для программы mkve-bundle необходимо подготовить директорию определенного вида и содержания. Вот полный список файлов, которые могут (но не обязательно должны) содержаться в шаблоне:
hypervisors versions/гипервизор packages-lists/гипервизор hooks-lists/гипервизор hooks/* conf/гипервизор/
(здесь и далее гипервизор пробегает все значения, указанные в файле hypervisors). Мы подробно опишем это дерево в последующих секциях.
Файл hypervisors
В первую очередь надо представить файл hypervisors. Этот файл содержит список поддерживаемых шаблоном гипервизоров, т.е. гипервизоров, для которых можно собрать bundle из данного шаблона. При создании нового шаблона можно использовать следующую команду:
[user@xxx test] echo 'openvz' >hypervisors
Две записи разделяются символом новой строки:
[user@xxx test]$ cat hypervisors openvz qemu
Файл versions/гипервизор
В папке versions хранится файл versions/гипервизор. В этом файле указана версия шаблона для гипервизора гипервизор.
Пример.
[user@xxx test]$ cat versions/openvz template_version=0.02
Файл packages-lists/гипервизор
В папке packages-lists/ хранится в каком-то смысле главный файл в шаблоне — packages-lists/гипервизор. Этот файл содержит список пакетов, которые будут установлены в bundle.
Пример.
[aspsk@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).
Пример.
[aspsk@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 будет в первую очередь искать хуки. Здесь можно, например, переписать дефолтные хуки или добавить хуки, нужные только для этого конкретного шаблона. Все хуки должны быть исполняемыми файлами.
Пример.
[aspsk@xxx test]$ ls -F hooks/ very-simple-hook* [aspsk@people test]$ cat hooks/very-simple-hook #! /bin/sh echo 'волки рыщут - пищу ищут!'
Папка conf/гипервизор/
В некоторых случаях в bundle хочется упаковать дополнительные файлы конфигурации, которые будут использоваться при создании контейнера. Эти файлы необходимо поместить в папку conf/гипервизор/.
Частный случай: conf/openvz/
Для гипервизора openvz в папку conf/openvz/ можно добавить файл config. В этом файле в формате vps.conf(5) можно перечислить дефолтные для данного контейнера значения.
Пример.
[aspsk@xxx test]$ ls conf/openvz config [aspsk@xxx test]$ cat conf/openvz/config OSTEMPLATE="pptp-server" DEVNODES="/dev/ppp:rw "
Создание 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
Примеры
Шаблон XXX
Здесь нужно полностью описать процесс создания первого же реального шаблона :)
Сборка bundle из готового шаблона
Для того чтобы собрать bundle из готового шаблона <template>, необходимо выполнить следующие шаги:
- Убедиться, что вы можете собирать пакеты с помощью Hasher
- Установить пакет mkve
- Запустить команду
$ mkve-bundle --output <output> --hypervisor <hypervisor> <template>
Запуск 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
Создание bundle/контейнеров собственными силами
Пакеты ve-*
Эти пакеты предназначены для создания контейнеров. Они не содержат ни одного файла, но вытягивают указанные в них пакеты по зависимостям. Имеется два типа таких пакетов.
Первый тип составляют пакеты ve-<name>. Они определяют множество пакетов, необходимое для создания контейнера для "сервиса" <name>. Например, пакет ve-ftp-server вытягивает множество пакетов, необходимое для поднятия ftp-сервера на "работающей" виртуальной машине.
Второй тип составляют пакеты ve-hypervisor-<hypervisor>. Они определяют дополнительное множество пакетов, необходимое для запуска сервиса под конкретным типом виртуализации. Этот пакет может оказаться и "пустым", если дополнительных пакетов не требуется (как, например, в случае OpenVZ).
Таким образом, множество пакетов, требуемых для поднятия сервиса <service> на виртуальной машине под управлением гипервизора <hypervisor> определяется "суммой" ve-<service> + ve-hypervisor-<hypervisor>.
Утилита mkve-cache (aka hsh-?)
Для тех, кто привык не надеяться ни на кого, кроме себя и hasher'а, имеется утилита mkve-cache. Эта утилита позволяет создать и упаковать hasher'овский chroot с нужным набором пакетов. Кроме этого, при создании chroot можно запускать хуки, команды и копировать файлы из host'а в chroot. Подробное описание см. в mkve(1).
Пример 1.
$ mkve-cache --out <file> <список пакетов>
установит в дефолтный hasher'овский chroot пакеты <список пакетов>, и после этого запакует содержимое chroot'а в файл <file>.
Пример 2.
$ mkve-cache --out <file> --command 'chkconfig sshd on' <список пакетов>
установит в дефолтный hasher'овский chroot пакеты <список пакетов>, запустит в chroot'е команду
chkconfig sshd on
и после этого запакует содержимое chroot'а в файл <file>.
Пример 3.
$ mkve-cache -z --tarify-only <путь к hasher'овскому chroot'у>
просто запакует указанный chroot в файл $TMPDIR/output.tar.gz.