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

Материал из ALT Linux Wiki
Строка 37: Строка 37:
то вы можете сказать просто
то вы можете сказать просто
  $ mkve-bundle test
  $ mkve-bundle test
=== Опции ===
==== Обязательные опции ====
Для нормальной работы mkve-bundle требует указания нескольких опций. Следующие две опции обязательны:
;--hypervisor <гипервизор>: для какого гипервизора собирается bundle
;--output <путь>: в этот файл bundle и будет записан
Например, команда
mkve-bundle --hypervisor openvz --output /tmp/test.bun ~/templates/test
соберет bundle из шаблона {{path|~/templates/test}} для гипервизора openvz и запишет его в файл {{path|/tmp/test.bun}}.
==== Необязательные опции ====
Следующие опции не являются обязательными:
;--hooks <директория>: искать хуки [] в указанной директории. Эта опция по умолчанию равна {{path|/usr/share/mkve/hooks}}
;--force-no-sign: ''не'' подписывать файл с метаинформацией
==== Конфигурационный файл ====
Для того чтобы не указывать все время одни и те же опции, можно запомнить их значения в конфигурационном файле {{path|~/.mkve/bundle-config}}.
Например, при разработке bundle можно создать такой файл:
$ cat ~/.mkve/bundle-config
hypervisor=openvz
output=/tmp/mkve-bundle.bun
hooks=/home/aspsk/packages/mkve/mkve/hooks
force_no_sign=yes
Тепер можно использовать {{prg|mkve-bundle}}, задавая только путь к шаблону, как мы делали в [http://www.altlinux.org/index.php?title=CoreSystem/Virtualization/%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_bundle&action=submit#.D0.97.D0.BD.D0.B0.D0.BA.D0.BE.D0.BC.D1.81.D1.82.D0.B2.D0.BE].
Этот конфиг заодно является программой на {{prg|bash}}, так что вы можете сделать и что-то вроде
$ cat ~/.mkve/bundle-config
hypervisor=openvz
mkdir -p ~/bundles
output=~/bundles/mkve-bundle-$(date +%d%m%y).bun


== Создание bundle/контейнеров собственными силами ==
== Создание bundle/контейнеров собственными силами ==

Версия от 15:29, 25 февраля 2009

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


Определения

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

Контейнер - это готовая к работе виртуальная машина под управлением одного из гипервизоров.

Bundle - набор данных и метаданных определенного формата для автоматического создания контейнеров средствами mkve.

Шаблон (шаблон mkve-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.

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

Следующие опции не являются обязательными:

--hooks <директория>
искать хуки [] в указанной директории. Эта опция по умолчанию равна /usr/share/mkve/hooks
--force-no-sign
не подписывать файл с метаинформацией

Конфигурационный файл

Для того чтобы не указывать все время одни и те же опции, можно запомнить их значения в конфигурационном файле ~/.mkve/bundle-config. Например, при разработке bundle можно создать такой файл:

$ cat ~/.mkve/bundle-config
hypervisor=openvz
output=/tmp/mkve-bundle.bun
hooks=/home/aspsk/packages/mkve/mkve/hooks
force_no_sign=yes

Тепер можно использовать mkve-bundle, задавая только путь к шаблону, как мы делали в [2].

Этот конфиг заодно является программой на bash, так что вы можете сделать и что-то вроде

$ cat ~/.mkve/bundle-config
hypervisor=openvz

mkdir -p ~/bundles
output=~/bundles/mkve-bundle-$(date +%d%m%y).bun

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