CoreSystem/Virtualization/Создание bundle
Материал из ALT Linux Wiki
(→Конфигурационный файл) |
({{Historical}}: Похоже что mkve устарела, и для создания контейнеров сейчас правильнее использовать mkimage-profiles) |
||
(50 промежуточных версий не показаны.) | |||
Строка 1: | Строка 1: | ||
- | {{Stub}} | + | {{Stub}}{{Historical}} |
- | == Определения == | + | == Определения и workflow == |
+ | {{Attention|Похоже что {{prg|mkve}} устарела, и для создания контейнеров сейчас правильнее использовать {{prg|mkimage-profiles}} (см. [[Mkimage/Profiles/m-p/examples|примеры использования]] для [[Mkimage/Profiles/m-p/examples#OpenVZ_VE|OpenVZ VE]] и [[Mkimage/Profiles/m-p/examples#Qemu_VM|Qemu VM]])}} | ||
- | Слово '''гипервизор''' является синонимом | + | === Определения === |
+ | Слово '''гипервизор''' является синонимом понятия «тип виртуализации». Так мы говорим о гипервизорах openvz, qemu, kvm и т. д. | ||
+ | * '''Контейнер''' — это готовая к работе виртуальная машина под управлением одного из гипервизоров. | ||
+ | * '''Bundle''' — это набор данных и метаданных определённого формата для автоматического создания контейнеров средствами {{prg|mkve}}. | ||
+ | * '''Шаблон''' — это набор данных определённого формата для автоматического создания bundle’ов средствами {{prg|mkve-bundle}}. | ||
- | + | === Workflow === | |
+ | Нашей конечной целью является создание bundle. | ||
- | + | Для [[#Создание bundle с помощью mkve-bundle|создания bundle | |
+ | средствами программы {{prg|mkve-bundle}}]] для начала необходимо | ||
+ | подготовить [[#Формат нативного шаблона для mkve-bundle|соответствующий шаблон]]. | ||
- | + | Для тех же, кому необходимо создавать bundle своими собственными средствами, | |
+ | [[#Формат bundle|приводится]] описание его формата. | ||
+ | == Формат нативного шаблона для {{prg|mkve-bundle}} == | ||
+ | Для создания шаблона для программы {{prg|mkve-bundle}} необходимо подготовить директорию определенного вида и содержания. | ||
+ | Вот полный список файлов, которые могут (но не обязательно должны) содержаться в шаблоне: | ||
+ | [[#Файл hypervisors|hypervisors]] | ||
+ | [[#Файл versions/гипервизор|versions/''гипервизор'']] | ||
+ | [[#Файл vendor/гипервизор|vendor/''гипервизор'']] | ||
+ | [[#Файл license/гипервизор|license/''гипервизор'']] | ||
+ | [[#Файл packages-lists/гипервизор|packages-lists/''гипервизор'']] | ||
+ | [[#Файл hooks-lists/гипервизор|hooks-lists/''гипервизор'']] | ||
+ | [[#Директория hooks/*|hooks/*]] | ||
+ | [[#Директория conf/гипервизор/|conf/''гипервизор''/]] | ||
+ | (здесь и далее ''гипервизор'' пробегает все значения, указанные в [[#Файл hypervisors|файле {{path|hypervisors}}]]). | ||
+ | Мы подробно опишем это дерево в последующих секциях. | ||
+ | === Файл {{path|hypervisors}} === | ||
+ | В первую очередь надо представить [[#Файл hypervisors|файл {{path|hypervisors}}]]. | ||
+ | Этот файл содержит список поддерживаемых шаблоном гипервизоров, т.е. гипервизоров, | ||
+ | для которых можно собрать bundle из данного шаблона. | ||
+ | |||
+ | Две записи разделяются символом новой строки: | ||
+ | [user@xxx test]$ cat hypervisors | ||
+ | openvz | ||
+ | qemu | ||
+ | |||
+ | === Файл {{path|versions/''гипервизор''}} === | ||
+ | В папке {{path|versions}} хранится файл [[#Файл versions/гипервизор|{{path|versions/''гипервизор''}}]]. | ||
+ | В этом файле указана версия шаблона для гипервизора ''гипервизор''. | ||
+ | |||
+ | '''Пример.''' | ||
+ | [user@xxx test]$ cat versions/openvz | ||
+ | template_version=0.02 | ||
+ | |||
+ | === Файл {{path|vendor/''гипервизор''}} === | ||
+ | Этот файл служит для указания конторы, создавшей bundle из шаблона. | ||
+ | |||
+ | '''Пример.''' | ||
+ | [user@xxx test]$ cat vendor/openvz | ||
+ | vendor="ALT Linux" | ||
+ | |||
+ | === Файл {{path|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. | ||
+ | |||
+ | |||
+ | === Файл {{path|packages-lists/''гипервизор''}} === | ||
+ | В папке {{path|packages-lists/}} хранится в каком-то смысле главный файл в шаблоне — | ||
+ | [[#Файл packages-lists/гипервизор|{{path|packages-lists/''гипервизор''}}]]. Этот файл содержит список пакетов, которые будут | ||
+ | установлены в bundle. (См. также секцию [[#Пакеты ve-*|Пакеты ve-*]].) | ||
+ | |||
+ | '''Пример.''' | ||
+ | [user@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/*|директории {{path|hooks/}}]], | ||
+ | а затем в директории, указанной ей параметром {{term|--hooks}} (равным по умолчанию {{path|/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/* === | ||
+ | В этой директории, программа {{prg|mkve-bundle}} будет в первую очередь искать хуки. | ||
+ | Здесь можно, например, переписать дефолтные хуки или добавить хуки, нужные только для | ||
+ | этого конкретного шаблона. Все хуки должны быть исполняемыми файлами. | ||
+ | |||
+ | '''Пример.''' | ||
+ | [user@xxx test]$ ls -F hooks/ | ||
+ | very-simple-hook* | ||
+ | [user@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}}. | ||
+ | В этом файле в формате, описанном в [http://openvz.org/documentation/mans/vps.conf.5 {{term|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 " | ||
+ | |||
+ | == Создание собственного шаблона == | ||
+ | |||
+ | === Утилита {{prg|mkve-template}} === | ||
+ | Если вы собираетесь писать новый шаблон, то вы можете воспользоваться утилитой | ||
+ | {{prg|mkve-template}}. Ее задачи и синтаксис очень просты: команда | ||
+ | $ mkve-template --hypervisor ''гипервизор'' ''шаблон'' | ||
+ | создаст директорию ''шаблон'' и поместит в ней скелет шаблона для указанного ''гипервизора''. | ||
+ | Если вы правильно прочитаете [[#Пакеты ve-*|следующую секцию]], то вам останется добавить | ||
+ | в шаблон только [[#Файл hooks-lists/гипервизор|хуки]], | ||
+ | и [[#Директория conf/гипервизор/|дополнительные конфиги]]. | ||
+ | |||
+ | '''Пример.''' | ||
+ | [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 или контейнеров. | ||
+ | Они не содержат ни одного файла, но вытягивают указанные в них | ||
+ | пакеты по зависимостям. Имеется два типа таких пакетов. | ||
+ | |||
+ | Первый тип составляют пакеты {{pkg|ve-''сервис''}}. Они определяют | ||
+ | множество пакетов, необходимое для создания контейнера, предоставляющего | ||
+ | ''сервис''. Например, пакет {{pkg|ve-ftp-server}} вытягивает множество | ||
+ | пакетов, необходимое для поднятия ftp-сервера в виртуальной машине. | ||
+ | |||
+ | Второй тип составляют пакеты {{pkg|ve-hypervisor-''гипервизор''}}. Они определяют | ||
+ | дополнительное множество пакетов, необходимое для запуска сервиса под конкретным | ||
+ | типом виртуализации. Если дополнительных пакетов не требуется (как, например, | ||
+ | в случае OpenVZ), то вытягиваемое множество пакетов может оказаться и пустым. | ||
+ | |||
+ | Таким образом, множество пакетов, требуемых для поднятия ''сервиса'' на виртуальной | ||
+ | машине под управлением ''гипервизора'' определяется "суммой" | ||
+ | {{pkg|ve-''сервис''}} "+" {{pkg|ve-hypervisor-''гипервизор''}}. | ||
+ | |||
+ | При такой договоренности содержимое файла [[#Файл packages-lists/гипервизор|{{path|packages-lists/''гипервизор''}}]] | ||
+ | для [[#Формат нативного шаблона для mkve-bundle|шаблона {{prg|mkve-bundle}}]] становится очень простым: | ||
+ | $ cat packages-lists/''гипервизор'' | ||
+ | ve-''сервис'' | ||
+ | ve-hypervisor-''гипервизор'' | ||
+ | Утилита [[#Утилита mkve-template|{{prg|mkve-template}}]] создает именно такой файл. | ||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
== Создание bundle с помощью {{prg|mkve-bundle}} == | == Создание bundle с помощью {{prg|mkve-bundle}} == | ||
Строка 27: | Строка 199: | ||
Утилита {{prg|mkve-bundle}} используется следующим образом: | Утилита {{prg|mkve-bundle}} используется следующим образом: | ||
$ mkve-bundle [<опции>] <шаблон> | $ mkve-bundle [<опции>] <шаблон> | ||
- | Здесь {{term|<шаблон>}} | + | Здесь {{term|<шаблон>}} — это либо путь к директории, содержащей |
+ | [[#Формат нативного шаблона для mkve-bundle|шаблон]], либо имя | ||
+ | [[#Формат нативного шаблона для mkve-bundle|шаблона]], | ||
+ | содержащегося в директории {{path|/usr/share/mkve/templates}}. | ||
- | Например, если у вас есть шаблон {{path|~/test}}, вы можете создать из него bundle следующим образом: | + | Например, если у вас есть шаблон {{path|~/test}}, то вы можете создать |
- | $ mkve-bundle | + | из него bundle следующим образом: |
+ | $ mkve-bundle ~/test | ||
А если вы установили свой шаблон в {{path|/usr/share/mkve/templates}}: | А если вы установили свой шаблон в {{path|/usr/share/mkve/templates}}: | ||
$ ls -d /usr/share/mkve/templates/test | $ ls -d /usr/share/mkve/templates/test | ||
Строка 37: | Строка 213: | ||
$ mkve-bundle test | $ mkve-bundle test | ||
- | + | === Обязательные параметры === | |
- | + | ||
- | + | ||
Для нормальной работы mkve-bundle требует указания нескольких опций. Следующие две опции обязательны: | Для нормальной работы mkve-bundle требует указания нескольких опций. Следующие две опции обязательны: | ||
- | ;--hypervisor | + | ;--hypervisor ''гипервизор'': для какого ''гипервизора'' собирается bundle |
- | ;--output | + | ;--output ''путь'': в этот файл bundle и будет записан |
Например, команда | Например, команда | ||
mkve-bundle --hypervisor openvz --output /tmp/test.bun ~/templates/test | mkve-bundle --hypervisor openvz --output /tmp/test.bun ~/templates/test | ||
- | соберет bundle из шаблона {{path|~/templates/test}} для гипервизора openvz и запишет его в файл {{path|/tmp/test.bun}}. | + | соберет bundle из шаблона {{path|~/templates/test}} для гипервизора openvz |
+ | и запишет его в файл {{path|/tmp/test.bun}}. | ||
- | + | Обязательные опции могут быть указаны не только в командной строке, | |
+ | но также и в [[#Конфигурационный файл|конфигурационном файле]]. | ||
+ | |||
+ | === Необязательные параметры === | ||
Следующие опции не являются обязательными: | Следующие опции не являются обязательными: | ||
- | ;--hooks | + | ;--hooks ''директория'': искать [[#Файл hooks-lists/гипервизор|хуки]] в указанной ''директории''. Значение этой опции по умолчанию равно {{path|/usr/share/mkve/hooks}}. |
;--force-no-sign: ''не'' подписывать файл с метаинформацией | ;--force-no-sign: ''не'' подписывать файл с метаинформацией | ||
Строка 59: | Строка 237: | ||
Для того чтобы не указывать все время одни и те же опции, можно запомнить их значения в конфигурационном файле {{path|~/.mkve/bundle-config}}. | Для того чтобы не указывать все время одни и те же опции, можно запомнить их значения в конфигурационном файле {{path|~/.mkve/bundle-config}}. | ||
- | Например, | + | Для того, чтобы определить опцию с именем ''name'' нужно задать в этом файле переменную с именем ''name''. Например, в конфиге |
$ cat ~/.mkve/bundle-config | $ cat ~/.mkve/bundle-config | ||
hypervisor=openvz | hypervisor=openvz | ||
- | + | verbose=yes | |
- | + | ||
force_no_sign=yes | force_no_sign=yes | ||
- | + | мы сообщили программе {{prg|mkve-bundle}}, что | |
+ | * в качестве гипервизора по умолчанию нужно использовать openvz | ||
+ | * мы хотим иметь более подробный отчет | ||
+ | * мы не хотим подписывать создаваемый bundle (например, при разработке) | ||
+ | Заметьте, что что минусы в имени опции {{term|--force-no-sign}} в конфиге превратились в знаки подчеркивания. | ||
- | + | Теперь с помощью команды | |
+ | $ mkve-bundle --output <output> <template> | ||
+ | мы соберем bundle из шаблона <template> для гипервизора openvz. | ||
+ | |||
+ | Конфигурационный файл заодно является программой на {{prg|bash}}, | ||
+ | так что вы можете сделать и что-то вроде | ||
$ cat ~/.mkve/bundle-config | $ cat ~/.mkve/bundle-config | ||
hypervisor=openvz | hypervisor=openvz | ||
Строка 74: | Строка 260: | ||
output=~/bundles/mkve-bundle-$(date +%d%m%y).bun | output=~/bundles/mkve-bundle-$(date +%d%m%y).bun | ||
- | == | + | ==== Пример: запуск {{prg|mkve-bundle}} при разработке шаблона ==== |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
Представим, что нам хочется разработать шаблон ''template'', из которого должен собираться bundle для гипервизора openvz. | Представим, что нам хочется разработать шаблон ''template'', из которого должен собираться bundle для гипервизора openvz. | ||
С хорошей вероятностью, при разработке шаблона нам не раз захочется запускать команду | С хорошей вероятностью, при разработке шаблона нам не раз захочется запускать команду | ||
mkve-bundle --hypervisor openvz --out /tmp/''template''.bun ~/packages/''template'' | mkve-bundle --hypervisor openvz --out /tmp/''template''.bun ~/packages/''template'' | ||
- | Для ускорения процесса нужно использовать | + | Для ускорения процесса нужно использовать [[#Конфигурационный файл|конфигурационный файл]] следующего вида: |
$ cat ~/.mkve/bundle-config | $ cat ~/.mkve/bundle-config | ||
template=~/packages/''template'' | template=~/packages/''template'' | ||
Строка 101: | Строка 276: | ||
$ mkve-bundle | $ mkve-bundle | ||
- | == | + | == Формат bundle == |
- | + | == Утилита mkve-cache == | |
- | + | Эта утилита позволяет создать и упаковать | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
hasher'овский chroot с нужным набором пакетов. Кроме этого, при создании chroot | hasher'овский chroot с нужным набором пакетов. Кроме этого, при создании chroot | ||
- | можно запускать хуки, команды и копировать | + | можно запускать хуки, команды и копировать в chroot файлы. |
- | + | ||
'''Пример 1.''' | '''Пример 1.''' | ||
- | $ mkve-cache --out | + | $ mkve-cache --out ''файл'' ''пакеты'' |
- | установит в дефолтный {{prg|hasher}}'овский chroot пакеты | + | установит в дефолтный {{prg|hasher}}'овский chroot ''пакеты'' и после этого |
- | и после этого запакует содержимое chroot'а в файл | + | запакует содержимое chroot'а в ''файл''. |
'''Пример 2.''' | '''Пример 2.''' | ||
- | $ mkve-cache --out | + | $ mkve-cache --out ''файл'' --command 'chkconfig sshd on' ''пакеты'' |
- | установит в дефолтный {{prg|hasher}}'овский chroot пакеты | + | установит в дефолтный {{prg|hasher}}'овский chroot ''пакеты'', |
запустит в chroot'е команду | запустит в chroot'е команду | ||
chkconfig sshd on | chkconfig sshd on | ||
- | и после этого запакует содержимое chroot'а в файл | + | и после этого запакует содержимое chroot'а в ''файл''. |
'''Пример 3.''' | '''Пример 3.''' | ||
- | $ mkve-cache -z --tarify-only | + | $ mkve-cache -z --tarify-only ''путь к hasher'овскому chroot'у'' |
просто запакует указанный chroot в файл {{path|$TMPDIR/output.tar.gz}}. | просто запакует указанный chroot в файл {{path|$TMPDIR/output.tar.gz}}. | ||
+ | |||
+ | [[Категория:CoreSystem]] |
Текущая версия на 16:50, 6 августа 2015
Содержание |
Определения и workflow
Определения
Слово гипервизор является синонимом понятия «тип виртуализации». Так мы говорим о гипервизорах 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.