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

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


=== Определения ===
=== Определения ===
 
Слово '''гипервизор''' является синонимом понятия «тип виртуализации». Так мы говорим о гипервизорах openvz, qemu, kvm и т. д.
Слово '''гипервизор''' является синонимом понятия "тип виртуализации". Так мы говорим о гипервизорах openvz, qemu, kvm и т.д.
* '''Контейнер''' — это готовая к работе виртуальная машина под управлением одного из гипервизоров.
 
* '''Bundle''' — это набор данных и метаданных определённого формата для автоматического создания контейнеров средствами {{prg|mkve}}.
'''Контейнер''' - это готовая к работе виртуальная машина под управлением одного из гипервизоров.
* '''Шаблон''' — это набор данных определённого формата для автоматического создания bundle’ов средствами {{prg|mkve-bundle}}.
 
'''Bundle''' - это набор данных и метаданных определенного формата для автоматического создания контейнеров средствами {{prg|mkve}}.
 
'''Шаблон''' - это набор данных определенного формата для автоматического создания bundle'ов средствами {{prg|mkve-bundle}}.


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


Для создания bundle средствами программы {{prg|mkve-bundle}} необходимо подготовить шаблон формата [http://www.altlinux.org/CoreSystem/Virtualization/%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_bundle#.D0.A4.D0.BE.D1.80.D0.BC.D0.B0.D1.82_.D0.BD.D0.B0.D1.82.D0.B8.D0.B2.D0.BD.D0.BE.D0.B3.D0.BE_.D1.88.D0.B0.D0.B1.D0.BB.D0.BE.D0.BD.D0.B0_.D0.B4.D0.BB.D1.8F_mkve-bundle]. Дальнейшая процедура очень проста и полностью описана в [http://www.altlinux.org/CoreSystem/Virtualization/%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_bundle#.D0.A1.D0.BE.D0.B7.D0.B4.D0.B0.D0.BD.D0.B8.D0.B5_bundle_.D1.81_.D0.BF.D0.BE.D0.BC.D0.BE.D1.89.D1.8C.D1.8E_mkve-bundle]. Можно также посмотреть примеры [http://www.altlinux.org/CoreSystem/Virtualization/%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_bundle#.D0.9F.D1.80.D0.B8.D0.BC.D0.B5.D1.80.D1.8B].
Для создания bundle средствами программы {{prg|mkve-bundle}} необходимо подготовить шаблон [[#Формат нативного шаблона для mkve-bundle|следующего формата]]. Дальнейшая процедура очень проста и полностью описана [[#Создание bundle с помощью mkve-bundle|ниже]]. Можно также посмотреть [[#Примеры|примеры]].


Для тех, кому необходимо создавать bundle своими средствами, его формат описан в [http://www.altlinux.org/CoreSystem/Virtualization/%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_bundle#.D0.A4.D0.BE.D1.80.D0.BC.D0.B0.D1.82_bundle].
Для тех, кому необходимо создавать bundle своими средствами, описан его [[#Формат bundle|формат]].


== Формат нативного шаблона для {{prg|mkve-bundle}} ==
== Формат нативного шаблона для {{prg|mkve-bundle}} ==

Версия от 06:59, 26 февраля 2009

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


Определения и workflow

Определения

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

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

Workflow

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

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

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

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

Вот полный список файлов для гипервизора hypervisor:

./version                    # версия шаблона
./packages/$hypervisor       # файл со списком пакетов, устанавливающихся в bundle
                             # при использовании гипервизора $hypervisor
./hooks-lists/$hypervisor    # [необ.] файл со списком хуков для гипервизора $hypervisor
./conf/$hypervisor/          # [необ.] директория, содержащая дополнительные файлы для упаковки
                             # в bundle для гипервизора $hypervisor

Таким образом, все, кроме версии зависит от типа виртуализации и единственным обязательным списком является список пакетов.

Создание 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

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

$ 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.