CoreSystem/Virtualization/Создание bundle: различия между версиями

Материал из ALT Linux Wiki
Строка 17: Строка 17:


== Формат нативного шаблона для {{prg|mkve-bundle}} ==
== Формат нативного шаблона для {{prg|mkve-bundle}} ==
Вот полный список файлов для гипервизора hypervisor:
Шаблон для программы {{prg|mkve-bundle}} состоит из дерева файлов определенного вида.
  ./version                   # версия шаблона
Вот полный список файлов, которые могут содержаться в шаблоне:
  ./packages/$hypervisor      # файл со списком пакетов, устанавливающихся в bundle
  [[#Файл hypervisors|hypervisors]]
                              # при использовании гипервизора $hypervisor
[[#Файл version/гипервизор|version/''гипервизор'']]
  ./hooks-lists/$hypervisor    # [необ.] файл со списком хуков для гипервизора $hypervisor
[[#Файл packages-lists/гипервизор|packages-lists/''гипервизор'']]
  ./conf/$hypervisor/         # [необ.] директория, содержащая дополнительные файлы для упаковки
[[#Файл hooks-lists/гипервизор|hooks-lists/''гипервизор'']]
                              # в bundle для гипервизора $hypervisor
[[#Папка 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

Stub.png
Данная страница находится в разработке.
Эта страница ещё не закончена. Информация, представленная здесь, может оказаться неполной или неверной.


Определения и 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.