Если кратко – то зоны, это виртуальные машины внутри гостевой ОС. Больше всего они похожи на jail из FreeBSD, но по функционалу намного лучше. Можно сравнить с Xen, но в зонах можно запускать только ОС Solaris и только той версии, какой гостевая.
Тестовый стенд: Solaris 10
1) Предисловие
Пару слов скажу о зонах, их обслуживании. Всегда существует одна зона – global с ID=0. Эта зона – сама ОС. Все остальные зоны, созданные в ней, будут носить характер неглобальных. Все неглобальные зоны полностью изолированы друг от друга и могут взаимодействовать только через сетевой стек. Глобальная зона может взаимодействовать с любыми зонами напрямую. Все зоны используют одно и то же ядро
Для работы с зонами следует использовать утилиты zonename, zoneadm, zonecfg.
zonename – только для определения того, в какой зоне вы находитесь сейчас.
zonecfg – служит для изменения параметров зоны,
zoneadm – для администрирования зоны (создание, удаления, клонирования, …)
2) Установка ПО для обслуживания зоны
Если вы выбирали тип установки core, то поддержка зон у вас не установлена. Для нормального функционирования нужны такие пакеты: SUNWluzone, SUNWzoner, SUNWzoneu, SUNWpool, SUNWpoolr, SUNWlur, SUNWluu
3) Создание зоны.
Для нормальной и безопасной работы рекомендую “сажать” зону на отдельную фс. Создадим оную:
# zfs create rpool/test
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
rpool 2,26G 13,4G 42,5K /rpool
rpool/ROOT 704M 13,4G 31K legacy
rpool/ROOT/s10 704M 13,4G 704M /
rpool/dump 1,00G 13,4G 1,00G -
rpool/export 63K 13,4G 32K /export
rpool/export/home 31K 13,4G 31K /export/home
rpool/swap 583M 13,9G 168K -
rpool/test 31K 13,4G 31K /rpool/test
# zfs set mountpoint=/test rpool/test
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
rpool 2,26G 13,4G 43,5K /rpool
rpool/ROOT 704M 13,4G 31K legacy
rpool/ROOT/s10 704M 13,4G 704M /
rpool/dump 1,00G 13,4G 1,00G -
rpool/export 63K 13,4G 32K /export
rpool/export/home 31K 13,4G 31K /export/home
rpool/swap 583M 13,9G 168K -
rpool/test 31K 13,4G 31K /test
Необходимо ещё поставить права на папку с зоной 0700:
#chmor 0700 /test
А теперь переходим непосредственно к созданию зоны. Что бы создать зону (в нашем примере имя зоны будет test), выполним такие команды:
# zonecfg -z test
test: No such zone configured
Use 'create' to begin configuring a new zone.
Существуют 2 типа зоны: Sparse Root Zones и Whole Root Zones. Первая представляет собой отдельную зону, но использует каталоги (/lib, /platform, /sbin, /usr) глобальной зоны, доступные в самой зоне только для чтения. Какая выгода – зона занимает меньше места. Какие минусы – нельзя ставить напрямую в зоне софт (ибо нельзя писать в каталог /usr) ну и прочие ограничения по записи в данные каталоги. Второй же тип представляет полностью изолированную и отдельную единицу, в которой все каталоги свои.
Примечание.
Перейти из одного типа в другой – нельзя.
По умолчанию создаются зоны spare. Что бы создать whole root зону, используем ключ -b:
zonecfg:test> create -b
Что бы узнать какой тип зоны, посмотрим информацию о зоне:
zonecfg:test> info
zonename: test
zonepath:
brand: native
autoboot: false
bootargs:
pool:
limitpriv:
scheduling-class:
ip-type: shared
hostid:
inherit-pkg-dir:
dir: /lib
inherit-pkg-dir:
dir: /platform
inherit-pkg-dir:
dir: /sbin
inherit-pkg-dir:
dir: /usr
Это spare зона, так как присутствуют inherit-pkg-dir.
Примечание.
Приятной новостью будет узнать то, что в интерактивном режиме поддерживается автодополнение команд.
Что бы зона автоматом запускалась установим соответствующие параметры:
zonecfg:test> set autoboot=true
Путь к корню зоны
zonecfg:test> set zonepath=/test
Добавим сеть:
zonecfg:test> add net
zonecfg:test:net>
zonecfg:test:net> set physical=e1000g0
zonecfg:test:net> set address=10.5.5.134/24
zonecfg:test:net> end
Примечание.
Если вы хотите использовать один и тот же физический интерфейс на несколько зон, вы должны выставить значение параметр ip-type: shared (в Solaris 10 – это по умолчанию, а вот в Solaris 11 Express – стоит значение ip-type: exclusive, которое разрешает использовать одну карточку только в одной зоне) :
zonecfg:test>set ip-type=shared
Теперь проверим нашу конфигурацию и применим изменения:
zonecfg:test> verify
zonecfg:test> commit
zonecfg:test> exit
Посмотрим состояние наших зон
# zoneadm list -cv
ID NAME STATUS PATH BRAND IP
0 global running / native shared
- test configured /test native shared
Наша зона сконфигурирована, но не запущена. Так же ей не присвоен никакой ID.
Конфигурация зоны с консоли.
Если вам нужно скриптом внести изменение в конфиг зоны, то лучше будет использовать метод командной строки.
Пример: добавим в зону новый сетевой адаптер.
# zonecfg -z myzone "add net; set physical=myvnic; set address=192.168.1.1; end"
4) Установка
Для запуска зон используется служба zones. Так уж сложилось, что после установке служба zones – не запущена. Исправим эту ситуацию:
# svcs -a | grep zone
disabled 17:18:16 svc:/system/zones:default
# svcadm enable zones
# svcs -a | grep zone
online 10:47:08 svc:/system/zones:default
Переходим к установке зоны:
# zoneadm -z test install
Preparing to install zone .
Creating list of files to copy from the global zone.
Copying files to the zone.
Initializing zone product registry.
Determining zone package initialization order.
Preparing to initialize packages on the zone.
Initialized packages on zone.
Zone is initialized.
The file contains a log of the zone installation.
Возможные ошибки на этапе установки:
I)
ERROR: zones not available on this system
Решение: переустановите заново пакет SUNWluzone и попробуйте заново проинсталлить зону:
# pkgadd -d ./ SUNWluzone
II)
zoneadm: zone 'test': zone is incomplete; uninstall required.
Решение: удалите зону и заново проинстальте:
# zoneadm -z test uninstall
Are you sure you want to uninstall zone test (y/[n])? y
# zoneadm -z test install
Preparing to install zone <test>.
Creating list of files to copy from the global zone.
...
Теперь запустим зону:
#zoneadm -z test boot
5) Конфигурация.
Поскольку зона – отдельная единица, то её нужно точно так же сконфигурировать, как и ОС при установке: выбрать язык, раскладку, указать пароль рута,… Для этого логинимся в зону “консольно”. В дальнейшем можно не заходить консольно, так как выйти из “консольного режима” слегка проблематично (при заданной комбинации я вообще вылетал из терминала). И так:
# zlogin -C test
[Connected to zone 'test' console]
Далее отвечаем на вопросы, следуя за мастером. По окончанию вы сможете зайти под root’ом и создать обычного юзера, назначив ему пароль, а так же сделать необходимые изменения.
Для выхода из консольного режима используйте такой комбинацию: нажимаете Enter на пустой строку, потом вводите тильду ~ и за ней точку .
Теперь вы сможете работать с зоной, как с обычно ОС: устанавливать ПО, администрировать и т.д.
4 коментарі “Установка зоны”
Стоит упомянуть о том, что все зоны используют одно и то же ядро, а также о существовании глобальных и неглобальных зон.
Да, спасибо, просто статья ещё не дописана 🙂
Зачем тогда ее публиковать?
случайно выставил доступ публичный, вместо личного