CoreSystem/Virtualization/Создание bundle
Материал из ALT Linux Wiki
Ilis (обсуждение | вклад) (→Запуск {{prg|mkve-bundle}} при разработке шаблона) |
(→Формат нативного шаблона для {{prg|mkve-bundle}}) |
||
Строка 17: | Строка 17: | ||
== Формат нативного шаблона для {{prg|mkve-bundle}} == | == Формат нативного шаблона для {{prg|mkve-bundle}} == | ||
- | Вот полный список файлов | + | Шаблон для программы {{prg|mkve-bundle}} состоит из дерева файлов определенного вида. |
- | ./version | + | Вот полный список файлов, которые могут содержаться в шаблоне: |
- | ./packages/ | + | [[#Файл hypervisors|hypervisors]] |
- | + | [[#Файл version/гипервизор|version/''гипервизор'']] | |
- | + | [[#Файл packages-lists/гипервизор|packages-lists/''гипервизор'']] | |
- | + | [[#Файл hooks-lists/гипервизор|hooks-lists/''гипервизор'']] | |
- | + | [[#Папка hooks/*|hooks/*]] | |
- | + | [[#Папка conf/гипервизор/|conf/''гипервизор''/]] | |
+ | (здесь и далее ''гипервизор'' пробегает все значения, указанные в файле | ||
+ | [[#Файл hypervisors|{{path|hypervisors}}]]). Мы подробно опишем это дерево в последующих секциях. | ||
+ | |||
+ | === Файл {{path|hypervisors}} === | ||
+ | В первую очередь надо представить файл [[#Файл hypervisors|{{path|hypervisors}}]]. | ||
+ | Этот файл содержит список поддерживаемых шаблоном гипервизоров, т.е. гипервизоров, | ||
+ | для которых можно собрать bundle из данного шаблона. | ||
+ | |||
+ | '''Пример.''' | ||
+ | [aspsk@xxx test]$ cat hypervisors | ||
+ | openvz | ||
+ | qemu | ||
+ | |||
+ | === Файл {{path|version/''гипервизор''}} === | ||
+ | В папке {{path|version}} хранится файл [[#Файл version/гипервизор|{{path|version/''гипервизор''}}]]. | ||
+ | В этом файле указана версия шаблона для гипервизора ''гипервизор''. | ||
+ | |||
+ | '''Пример.''' | ||
+ | [aspsk@xxx test]$ cat version/openvz | ||
+ | template_version=0.02 | ||
+ | |||
+ | === Файл {{path|packages-lists/''гипервизор''}} === | ||
+ | В папке {{path|packages-lists/}} хранится в каком-то смысле главный файл в шаблоне — | ||
+ | [[#Файл packages-lists/гипервизор|{{path|packages-lists/''гипервизор''}}]]. Этот файл содержит список пакетов, которые будут | ||
+ | установлены в bundle. | ||
+ | |||
+ | '''Пример.''' | ||
+ | [aspsk@xxx test]$ cat packages-lists/openvz | ||
+ | ve-pptp-server | ||
+ | alterator-net-eth | ||
+ | alterator-root | ||
+ | alterator-users | ||
+ | alterator-auth | ||
+ | |||
+ | === Файл {{path|hooks-lists/''гипервизор''}} === | ||
+ | В папке {{path|hooks-lists/}} может находиться файл [[#Файл hooks-lists/гипервизор|{{path|hooks-lists/''гипервизор''}}]]. | ||
+ | Этот файл содержит список '''хуков''', т.е. программ, которые будут запущены "внутри bundle" | ||
+ | после установки пакетов. | ||
+ | |||
+ | Программа {{prg|mkve-bundle}} по умолчанию будет искать хуки сначала в [[#Папка hooks/*|директории hooks/]], | ||
+ | а затем в директории, указанной ей параметром {{term|--hooks}} (по умолчанию {{path|/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/* === | ||
+ | Это папка, в которой программа {{prg|mkve-bundle}} будет в первую очередь искать хуки. | ||
+ | Здесь можно, например, переписать дефолтные хуки или добавить хуки, нужные только для | ||
+ | этого конкретного шаблона. Все хуки должны быть исполняемыми файлами. | ||
+ | |||
+ | '''Пример.''' | ||
+ | [aspsk@xxx test]$ ls -F hooks/ | ||
+ | very-simple-hook* | ||
+ | [aspsk@people test]$ cat hooks/very-simple-hook | ||
+ | #! /bin/sh | ||
+ | echo 'волки рыщут - пищу ищут!' | ||
+ | |||
+ | |||
+ | === Папка {{path|conf/''гипервизор''/}} === | ||
+ | В некоторых случаях в bundle хочется упаковать дополнительные файлы конфигурации, | ||
+ | которые будут использоваться при создании контейнера. Эти файлы необходимо поместить | ||
+ | в папку [[#Папка conf/гипервизор/|{{path|conf/''гипервизор''/}}]]. | ||
+ | |||
+ | ==== Частный случай: {{path|conf/openvz/}} ==== | ||
+ | Для гипервизора openvz в папку {{path|conf/openvz/}} можно добавить файл {{path|config}}. | ||
+ | В этом файле в формате {{term|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 с помощью {{prg|mkve-bundle}} == | == Создание bundle с помощью {{prg|mkve-bundle}} == |
Версия 11:25, 27 февраля 2009
Содержание |
Определения и workflow
Определения
Слово гипервизор является синонимом понятия «тип виртуализации». Так мы говорим о гипервизорах openvz, qemu, kvm и т. д.
- Контейнер — это готовая к работе виртуальная машина под управлением одного из гипервизоров.
- Bundle — это набор данных и метаданных определённого формата для автоматического создания контейнеров средствами mkve.
- Шаблон — это набор данных определённого формата для автоматического создания bundle’ов средствами mkve-bundle.
Workflow
Нашей конечной целью является создание bundle.
Для создания bundle средствами программы mkve-bundle необходимо подготовить шаблон следующего формата. Дальнейшая процедура очень проста и полностью описана ниже. Можно также посмотреть примеры.
Для тех, кому необходимо создавать bundle своими средствами, описан его формат.
Формат нативного шаблона для mkve-bundle
Шаблон для программы mkve-bundle состоит из дерева файлов определенного вида. Вот полный список файлов, которые могут содержаться в шаблоне:
hypervisors version/гипервизор packages-lists/гипервизор hooks-lists/гипервизор hooks/* conf/гипервизор/
(здесь и далее гипервизор пробегает все значения, указанные в файле hypervisors). Мы подробно опишем это дерево в последующих секциях.
Файл hypervisors
В первую очередь надо представить файл hypervisors. Этот файл содержит список поддерживаемых шаблоном гипервизоров, т.е. гипервизоров, для которых можно собрать bundle из данного шаблона.
Пример.
[aspsk@xxx test]$ cat hypervisors openvz qemu
Файл version/гипервизор
В папке version хранится файл version/гипервизор. В этом файле указана версия шаблона для гипервизора гипервизор.
Пример.
[aspsk@xxx test]$ cat version/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 [<опции>] <шаблон>
Здесь <шаблон> - это либо путь к директории, содержащей шаблон [1], либо имя шаблона, содержащегося в директории /usr/share/mkve/templates.
Например, если у вас есть шаблон ~/test, вы можете создать из него bundle следующим образом:
$ mkve-bundle $HOME/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.
Обязательные опции могут быть указаны также и в конфигурационном файле [2].
Необязательные опции
Следующие опции не являются обязательными:
- --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
Примеры
Сборка 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.