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

Материал из ALT Linux Wiki
({{Historical}}: Похоже что mkve устарела, и для создания контейнеров сейчас правильнее использовать mkimage-profiles)
 
(не показано 28 промежуточных версий 4 участников)
Строка 1: Строка 1:
{{Stub}}
{{Stub}}{{Historical}}


== Определения и workflow ==
== Определения и 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]])}}


=== Определения ===
=== Определения ===
Строка 12: Строка 13:
Нашей конечной целью является создание bundle.
Нашей конечной целью является создание bundle.


Для создания bundle средствами программы {{prg|mkve-bundle}} необходимо подготовить шаблон [[#Формат нативного шаблона для mkve-bundle|следующего формата]]. Дальнейшая процедура очень проста и полностью описана [[#Создание bundle с помощью mkve-bundle|ниже]]. Можно также посмотреть [[#Примеры|примеры]].
Для [[#Создание bundle с помощью mkve-bundle|создания bundle
средствами программы {{prg|mkve-bundle}}]] для начала необходимо
подготовить [[#Формат нативного шаблона для mkve-bundle|соответствующий шаблон]].


Для тех, кому необходимо создавать bundle своими средствами, описан его [[#Формат bundle|формат]].
Для тех же, кому необходимо создавать bundle своими собственными средствами,
[[#Формат bundle|приводится]] описание его формата.


== Формат нативного шаблона для {{prg|mkve-bundle}} ==
== Формат нативного шаблона для {{prg|mkve-bundle}} ==
Шаблон для программы {{prg|mkve-bundle}} состоит из дерева файлов определенного вида.
Для создания шаблона для программы {{prg|mkve-bundle}} необходимо подготовить директорию определенного вида и содержания.
Вот полный список файлов, которые могут содержаться в шаблоне:
Вот полный список файлов, которые могут (но не обязательно должны) содержаться в шаблоне:
  [[#Файл hypervisors|hypervisors]]
  [[#Файл hypervisors|hypervisors]]
  [[#Файл versions/гипервизор|versions/''гипервизор'']]
  [[#Файл versions/гипервизор|versions/''гипервизор'']]
[[#Файл vendor/гипервизор|vendor/''гипервизор'']]
[[#Файл license/гипервизор|license/''гипервизор'']]
  [[#Файл packages-lists/гипервизор|packages-lists/''гипервизор'']]
  [[#Файл packages-lists/гипервизор|packages-lists/''гипервизор'']]
  [[#Файл hooks-lists/гипервизор|hooks-lists/''гипервизор'']]
  [[#Файл hooks-lists/гипервизор|hooks-lists/''гипервизор'']]
  [[#Папка hooks/*|hooks/*]]
  [[#Директория hooks/*|hooks/*]]
  [[#Папка conf/гипервизор/|conf/''гипервизор''/]]
  [[#Директория conf/гипервизор/|conf/''гипервизор''/]]
(здесь и далее ''гипервизор'' пробегает все значения, указанные в
(здесь и далее ''гипервизор'' пробегает все значения, указанные в [[#Файл hypervisors|файле {{path|hypervisors}}]]).
[[#Файл hypervisors|файле {{path|hypervisors}}]]). Мы подробно опишем это дерево в последующих секциях.
Мы подробно опишем это дерево в последующих секциях.


=== Файл {{path|hypervisors}} ===
=== Файл {{path|hypervisors}} ===
Строка 33: Строка 39:
для которых можно собрать bundle из данного шаблона.
для которых можно собрать bundle из данного шаблона.


'''Пример.'''
Две записи разделяются символом новой строки:
  [aspsk@xxx test]$ cat hypervisors  
  [user@xxx test]$ cat hypervisors  
  openvz
  openvz
  qemu
  qemu
Строка 43: Строка 49:


'''Пример.'''
'''Пример.'''
  [aspsk@xxx test]$ cat versions/openvz  
  [user@xxx test]$ cat versions/openvz  
  template_version=0.02
  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/''гипервизор''}} ===
В папке {{path|packages-lists/}} хранится в каком-то смысле главный файл в шаблоне —
В папке {{path|packages-lists/}} хранится в каком-то смысле главный файл в шаблоне —
[[#Файл packages-lists/гипервизор|{{path|packages-lists/''гипервизор''}}]]. Этот файл содержит список пакетов, которые будут
[[#Файл packages-lists/гипервизор|{{path|packages-lists/''гипервизор''}}]]. Этот файл содержит список пакетов, которые будут
установлены в bundle.
установлены в bundle. (См. также секцию [[#Пакеты ve-*|Пакеты ve-*]].)


'''Пример.'''
'''Пример.'''
  [aspsk@xxx test]$ cat packages-lists/openvz  
  [user@xxx test]$ cat packages-lists/openvz  
  ve-pptp-server
  ve-pptp-server
  alterator-net-eth
  alterator-net-eth
Строка 64: Строка 93:
после установки пакетов.
после установки пакетов.


Программа {{prg|mkve-bundle}} по умолчанию будет искать хуки сначала в [[#Папка hooks/*|директории {{path|hooks/}}]],
Программа {{prg|mkve-bundle}} по умолчанию будет искать хуки сначала в [[#Директория hooks/*|директории {{path|hooks/}}]],
а затем в директории, указанной ей параметром {{term|--hooks}} (равным по умолчанию {{path|/usr/share/mkve/hooks}}).
а затем в директории, указанной ей параметром {{term|--hooks}} (равным по умолчанию {{path|/usr/share/mkve/hooks}}).


'''Пример.'''
'''Пример.'''
  [aspsk@xxx test]$ cat hooks-lists/openvz  
  [user@xxx test]$ cat hooks-lists/openvz  
  very-simple-hook
  very-simple-hook
  01-root
  01-root
Строка 79: Строка 108:
  03-chkconfig_fbsetfont_off
  03-chkconfig_fbsetfont_off


=== Папка hooks/* ===
=== Директория hooks/* ===
Это папка, в которой программа {{prg|mkve-bundle}} будет в первую очередь искать хуки.
В этой директории, программа {{prg|mkve-bundle}} будет в первую очередь искать хуки.
Здесь можно, например, переписать дефолтные хуки или добавить хуки, нужные только для
Здесь можно, например, переписать дефолтные хуки или добавить хуки, нужные только для
этого конкретного шаблона. Все хуки должны быть исполняемыми файлами.
этого конкретного шаблона. Все хуки должны быть исполняемыми файлами.


'''Пример.'''
'''Пример.'''
  [aspsk@xxx test]$ ls -F hooks/
  [user@xxx test]$ ls -F hooks/
  very-simple-hook*
  very-simple-hook*
  [aspsk@people test]$ cat hooks/very-simple-hook  
  [user@people test]$ cat hooks/very-simple-hook  
  #! /bin/sh
  #! /bin/sh
  echo 'волки рыщут - пищу ищут!'
  echo 'волки рыщут - пищу ищут!'




=== Папка {{path|conf/''гипервизор''/}} ===
=== Директория {{path|conf/''гипервизор''/}} ===
В некоторых случаях в bundle хочется упаковать дополнительные файлы конфигурации,
В некоторых случаях в bundle хочется упаковать дополнительные файлы конфигурации,
которые будут использоваться при создании контейнера. Эти файлы необходимо поместить
которые будут использоваться при создании контейнера. Эти файлы необходимо поместить
в папку [[#Папка conf/гипервизор/|{{path|conf/''гипервизор''/}}]].
в директорию [[#Директория conf/гипервизор/|{{path|conf/''гипервизор''/}}]].


==== Частный случай: {{path|conf/openvz/}} ====
==== Частный случай: {{path|conf/openvz/}} ====
Для гипервизора openvz в папку {{path|conf/openvz/}} можно добавить файл {{path|config}}.
Для гипервизора openvz в папку {{path|conf/openvz/}} можно добавить файл {{path|config}}.
В этом файле в формате {{term|vps.conf(5)}} можно перечислить дефолтные для данного
В этом файле в формате, описанном в [http://openvz.org/documentation/mans/vps.conf.5 {{term|vps.conf(5)}}]
контейнера значения.
можно перечислить дефолтные для данного контейнера значения, в частности дисковые квоты и остальные
beancounters.


'''Пример.'''
'''Пример.'''
  [aspsk@xxx test]$ ls conf/openvz
  [user@xxx test]$ ls conf/openvz
  config
  config
  [aspsk@xxx test]$ cat conf/openvz/config  
  [user@xxx test]$ cat conf/openvz/config  
  OSTEMPLATE="pptp-server"
  OSTEMPLATE="pptp-server"
  DEVNODES="/dev/ppp:rw "
  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}} ==
Строка 127: Строка 213:
  $ mkve-bundle test
  $ mkve-bundle test


=== Обязательные опции ===
=== Обязательные параметры ===


Для нормальной работы mkve-bundle требует указания нескольких опций. Следующие две опции обязательны:
Для нормальной работы mkve-bundle требует указания нескольких опций. Следующие две опции обязательны:
Строка 142: Строка 228:
но также и в [[#Конфигурационный файл|конфигурационном файле]].
но также и в [[#Конфигурационный файл|конфигурационном файле]].


=== Необязательные опции ===
=== Необязательные параметры ===


Следующие опции не являются обязательными:
Следующие опции не являются обязательными:
Строка 174: Строка 260:
  output=~/bundles/mkve-bundle-$(date +%d%m%y).bun
  output=~/bundles/mkve-bundle-$(date +%d%m%y).bun


== Примеры ==
==== Пример: запуск {{prg|mkve-bundle}} при разработке шаблона ====
 
=== Шаблон XXX ===
Здесь нужно полностью описать процесс создания первого же реального шаблона :)
 
=== Сборка bundle из готового шаблона ===
Для того чтобы собрать bundle из готового шаблона {{term|<template>}}, необходимо выполнить следующие шаги:
* Убедиться, что вы можете собирать пакеты с помощью [[Hasher]]
* Установить пакет {{pkg|mkve}}
* Запустить команду
$ mkve-bundle --output <output> --hypervisor <hypervisor> <template>
 
=== Запуск {{prg|mkve-bundle}} при разработке шаблона ===
Представим, что нам хочется разработать шаблон ''template'', из которого должен собираться bundle для гипервизора openvz.
Представим, что нам хочется разработать шаблон ''template'', из которого должен собираться bundle для гипервизора openvz.


Строка 202: Строка 276:
  $ mkve-bundle
  $ mkve-bundle


== Создание bundle/контейнеров собственными силами ==
== Формат bundle ==
 
== Утилита mkve-cache ==
 
Эта утилита позволяет создать и упаковать
 
=== Пакеты ve-* ===
 
Эти пакеты предназначены для создания контейнеров. Они не содержат ни одного
файла, но вытягивают указанные в них пакеты по зависимостям. Имеется два типа
таких пакетов.
 
Первый тип составляют пакеты {{pkg|ve-<name>}}. Они определяют множество пакетов,
необходимое для создания контейнера для "сервиса" {{pkg|<name>}}. Например,
пакет {{pkg|ve-ftp-server}} вытягивает множество пакетов, необходимое для поднятия
ftp-сервера на "работающей" виртуальной машине.
 
Второй тип составляют пакеты {{pkg|ve-hypervisor-<hypervisor>}}. Они определяют
дополнительное множество пакетов, необходимое для запуска сервиса под конкретным
типом виртуализации. Этот пакет может оказаться и "пустым", если дополнительных
пакетов не требуется (как, например, в случае OpenVZ).
 
Таким образом, множество пакетов, требуемых для поднятия сервиса {{term|<service>}}
на виртуальной машине под управлением гипервизора {{term|<hypervisor>}} определяется
"суммой" {{pkg|ve-<service>}} + {{pkg|ve-hypervisor-<hypervisor>}}.
 
=== Утилита mkve-cache (aka hsh-?) ===
Для тех, кто привык не надеяться ни на кого, кроме себя и {{prg|hasher}}'а,
имеется утилита {{prg|mkve-cache}}. Эта утилита позволяет создать и упаковать
hasher'овский chroot с нужным набором пакетов. Кроме этого, при создании chroot
hasher'овский chroot с нужным набором пакетов. Кроме этого, при создании chroot
можно запускать хуки, команды и копировать файлы из host'а в chroot. Подробное описание
можно запускать хуки, команды и копировать в chroot файлы.
см. в {{term|mkve(1)}}.


'''Пример 1.'''
'''Пример 1.'''
  $ mkve-cache --out <file> <список пакетов>
  $ mkve-cache --out ''файл'' ''пакеты''
установит в дефолтный {{prg|hasher}}'овский chroot пакеты {{term|<список пакетов>}},
установит в дефолтный {{prg|hasher}}'овский chroot ''пакеты'' и после этого
и после этого запакует содержимое chroot'а в файл {{term|<file>}}.
запакует содержимое chroot'а в ''файл''.


'''Пример 2.'''
'''Пример 2.'''
  $ mkve-cache --out <file> --command 'chkconfig sshd on' <список пакетов>
  $ mkve-cache --out ''файл'' --command 'chkconfig sshd on' ''пакеты''
установит в дефолтный {{prg|hasher}}'овский chroot пакеты {{term|<список пакетов>}},
установит в дефолтный {{prg|hasher}}'овский chroot ''пакеты'',
запустит в chroot'е команду
запустит в chroot'е команду
  chkconfig sshd on
  chkconfig sshd on
и после этого запакует содержимое chroot'а в файл {{term|<file>}}.
и после этого запакует содержимое chroot'а в ''файл''.


'''Пример 3.'''
'''Пример 3.'''
  $ mkve-cache -z --tarify-only <путь к hasher'овскому chroot'у>
  $ mkve-cache -z --tarify-only ''путь к hasher'овскому chroot'у''
просто запакует указанный chroot в файл {{path|$TMPDIR/output.tar.gz}}.
просто запакует указанный chroot в файл {{path|$TMPDIR/output.tar.gz}}.


[[Категория:CoreSystem]]
[[Категория:CoreSystem]]

Текущая версия от 19:50, 6 августа 2015

Stub.png
Данная страница находится в разработке.
Эта страница ещё не закончена. Информация, представленная здесь, может оказаться неполной или неверной.
Small-pyramides.png
Архивная информация.
Описываемые в этой статье вещи больше не используются и оставлены только для обратной совместимости.


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

Внимание! Похоже что mkve устарела, и для создания контейнеров сейчас правильнее использовать mkimage-profiles (см. примеры использования для OpenVZ VE и Qemu VM)


Определения

Слово гипервизор является синонимом понятия «тип виртуализации». Так мы говорим о гипервизорах 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.