CoreSystem/Virtualization/Создание bundle

Материал из ALT Linux Wiki

< CoreSystem | Virtualization(Различия между версиями)
Перейти к: навигация, поиск
(Определения)
({{Historical}}: Похоже что mkve устарела, и для создания контейнеров сейчас правильнее использовать mkimage-profiles)
 
(42 промежуточные версии не показаны)
Строка 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]])}}
=== Определения ===
=== Определения ===
 +
Слово '''гипервизор''' является синонимом понятия «тип виртуализации». Так мы говорим о гипервизорах openvz, qemu, kvm и т. д.
 +
* '''Контейнер''' — это готовая к работе виртуальная машина под управлением одного из гипервизоров.
 +
* '''Bundle''' — это набор данных и метаданных определённого формата для автоматического создания контейнеров средствами {{prg|mkve}}.
 +
* '''Шаблон''' — это набор данных определённого формата для автоматического создания bundle’ов средствами {{prg|mkve-bundle}}.
-
Слово '''гипервизор''' является синонимом понятия "тип виртуализации". Так мы говорим о гипервизорах openvz, qemu, kvm и т.д.
+
=== Workflow ===
 +
Нашей конечной целью является создание bundle.
-
'''Контейнер''' - это готовая к работе виртуальная машина под управлением одного из гипервизоров.
+
Для [[#Создание bundle с помощью mkve-bundle|создания bundle
 +
средствами программы {{prg|mkve-bundle}}]] для начала необходимо
 +
подготовить [[#Формат нативного шаблона для mkve-bundle|соответствующий шаблон]].
-
'''Bundle''' - это набор данных и метаданных определенного формата для автоматического создания контейнеров средствами {{prg|mkve}}.
+
Для тех же, кому необходимо создавать bundle своими собственными средствами,
 +
[[#Формат bundle|приводится]] описание его формата.
-
'''Шаблон''' - это набор данных определенного формата для автоматического создания bundle'ов средствами {{prg|mkve-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}}]]).
 +
Мы подробно опишем это дерево в последующих секциях.
-
=== Workflow ===
+
=== Файл {{path|hypervisors}} ===
 +
В первую очередь надо представить [[#Файл hypervisors|файл {{path|hypervisors}}]].
 +
Этот файл содержит список поддерживаемых шаблоном гипервизоров, т.е. гипервизоров,
 +
для которых можно собрать bundle из данного шаблона.
-
Нашей конечной целью является создание bundle.
+
Две записи разделяются символом новой строки:
 +
[user@xxx test]$ cat hypervisors
 +
openvz
 +
qemu
-
Для создания 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].
+
=== Файл {{path|versions/''гипервизор''}} ===
 +
В папке {{path|versions}} хранится файл [[#Файл versions/гипервизор|{{path|versions/''гипервизор''}}]].
 +
В этом файле указана версия шаблона для гипервизора ''гипервизор''.
-
Для тех, кому необходимо создавать 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].
+
'''Пример.'''
 +
[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}}]] создает именно такой файл.
-
== Формат нативного шаблона для {{prg|mkve-bundle}} ==
 
-
Вот полный список файлов для гипервизора hypervisor:
 
-
./version                    # версия шаблона
 
-
./packages/$hypervisor      # файл со списком пакетов, устанавливающихся в bundle
 
-
                              # при использовании гипервизора $hypervisor
 
-
./hooks-lists/$hypervisor    # [необ.] файл со списком хуков для гипервизора $hypervisor
 
-
./conf/$hypervisor/          # [необ.] директория, содержащая дополнительные файлы для упаковки
 
-
                              # в bundle для гипервизора $hypervisor
 
-
Таким образом, все, кроме версии зависит от типа виртуализации и единственным обязательным списком является список пакетов.
 
== Создание bundle с помощью {{prg|mkve-bundle}} ==
== Создание bundle с помощью {{prg|mkve-bundle}} ==
Строка 35: Строка 199:
Утилита {{prg|mkve-bundle}} используется следующим образом:
Утилита {{prg|mkve-bundle}} используется следующим образом:
  $ mkve-bundle [<опции>] <шаблон>
  $ mkve-bundle [<опции>] <шаблон>
-
Здесь {{term|<шаблон>}} - это либо путь к директории, содержащей шаблон [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], либо имя шаблона, содержащегося в директории {{path|/usr/share/mkve/templates}}.
+
Здесь {{term|<шаблон>}} это либо путь к директории, содержащей
 +
[[#Формат нативного шаблона для mkve-bundle|шаблон]], либо имя
 +
[[#Формат нативного шаблона для mkve-bundle|шаблона]],
 +
содержащегося в директории {{path|/usr/share/mkve/templates}}.
-
Например, если у вас есть шаблон {{path|~/test}}, вы можете создать из него bundle следующим образом:
+
Например, если у вас есть шаблон {{path|~/test}}, то вы можете создать
-
  $ mkve-bundle $HOME/test
+
из него 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
Строка 45: Строка 213:
  $ mkve-bundle test
  $ mkve-bundle test
-
=== Опции ===
+
=== Обязательные параметры ===
-
 
+
-
==== Обязательные опции ====
+
Для нормальной работы mkve-bundle требует указания нескольких опций. Следующие две опции обязательны:
Для нормальной работы mkve-bundle требует указания нескольких опций. Следующие две опции обязательны:
-
;--hypervisor <гипервизор>: для какого гипервизора собирается bundle
+
;--hypervisor ''гипервизор'': для какого ''гипервизора'' собирается bundle
-
;--output <путь>: в этот файл bundle и будет записан
+
;--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}}.
-
Обязательные опции могут быть указаны также и в конфигурационном файле [http://www.altlinux.org/CoreSystem/Virtualization/%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_bundle#.D0.9A.D0.BE.D0.BD.D1.84.D0.B8.D0.B3.D1.83.D1.80.D0.B0.D1.86.D0.B8.D0.BE.D0.BD.D0.BD.D1.8B.D0.B9_.D1.84.D0.B0.D0.B9.D0.BB].
+
Обязательные опции могут быть указаны не только в командной строке,
 +
но также и в [[#Конфигурационный файл|конфигурационном файле]].
-
==== Необязательные опции ====
+
=== Необязательные параметры ===
Следующие опции не являются обязательными:
Следующие опции не являются обязательными:
-
;--hooks <директория>: искать хуки [] в указанной директории. Эта опция по умолчанию равна {{path|/usr/share/mkve/hooks}}
+
;--hooks ''директория'': искать [[#Файл hooks-lists/гипервизор|хуки]] в указанной ''директории''. Значение этой опции по умолчанию равно {{path|/usr/share/mkve/hooks}}.
;--force-no-sign: ''не'' подписывать файл с метаинформацией
;--force-no-sign: ''не'' подписывать файл с метаинформацией
Строка 84: Строка 252:
мы соберем bundle из шаблона <template> для гипервизора openvz.
мы соберем bundle из шаблона <template> для гипервизора openvz.
-
Этот конфиг заодно является программой на {{prg|bash}}, так что вы можете сделать и что-то вроде
+
Конфигурационный файл заодно является программой на {{prg|bash}},
 +
так что вы можете сделать и что-то вроде
  $ cat ~/.mkve/bundle-config
  $ cat ~/.mkve/bundle-config
  hypervisor=openvz
  hypervisor=openvz
Строка 91: Строка 260:
  output=~/bundles/mkve-bundle-$(date +%d%m%y).bun
  output=~/bundles/mkve-bundle-$(date +%d%m%y).bun
-
 
+
==== Пример: запуск {{prg|mkve-bundle}} при разработке шаблона ====
-
 
+
-
== Примеры ==
+
-
 
+
-
=== Сборка bundle из готового шаблона ===
+
-
Для того чтобы собрать bundle из готового шаблона {{term|<template>}}, необходимо выполнить следующие шаги:
+
-
* Убедиться, что вы можете собирать пакеты с помощью [[Hasher]]
+
-
* Установить пакет {{pkg|mkve}}
+
-
* Запустить команду
+
-
$ mkve-bundle --output <output> --hypervisor <hypervisor> <template>
+
-
 
+
-
=== Запуск {{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''
-
Для ускорения процесса нужно использовать конфигурационный файл [http://www.altlinux.org/CoreSystem/Virtualization/%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_bundle#.D0.9A.D0.BE.D0.BD.D1.84.D0.B8.D0.B3.D1.83.D1.80.D0.B0.D1.86.D0.B8.D0.BE.D0.BD.D0.BD.D1.8B.D0.B9_.D1.84.D0.B0.D0.B9.D0.BB] следующего вида:
+
Для ускорения процесса нужно использовать [[#Конфигурационный файл|конфигурационный файл]] следующего вида:
  $ cat ~/.mkve/bundle-config
  $ cat ~/.mkve/bundle-config
  template=~/packages/''template''
  template=~/packages/''template''
Строка 118: Строка 276:
  $ mkve-bundle
  $ mkve-bundle
-
== Создание bundle/контейнеров собственными силами ==
+
== Формат bundle ==
-
 
+
== Утилита mkve-cache ==
-
=== Формат bundle ===
+
Эта утилита позволяет создать и упаковать
-
 
+
-
=== Пакеты 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]]

Текущая версия на 16: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.

 
Личные инструменты