понедельник, 28 сентября 2015 г.

VMware Photon OS (часть I)

Если вы подыскиваете простой, функциональный и небольшой по размеру дистрибутив Linux для работы с Docker, то я советую вам посмотреть в сторону Photon OS. В конце августа вышел новый релиз Photon OS Technical Preview 2 (TP2), который принес много всего интересного. Информация о релизе доступна по ссылке.

Photon OS строится на базе другого известного мини-дистрибутива CoreOS Linux и заточен под работу с гипервизорами VMware и облачными инфраструктурами на базе OpenStack.

Установка

Photon OS доступен для загрузки с сайта http://vmware.github.io/photon/ в виде ISO образа (Full ISO и Minimal ISO), а также в виде шаблона ВМ в формате OVA.

Перед установкой настоятельно рекомендую ознакомиться с официальным FAQ по Project Photon, а также FAQ комьюнити на GitHub.

Установка Photon OS может быть выполнена в одном из следующих режимов:
  • Photon Micro - минимальный из доступных вариантов установки, предназначенный для развертывания внутри контейнера.
  • Photon Minimal - подходит для развертывания как внутри контейнера, так и на хосте.
  • Photon Full - установка со всем необходимым набором пакетов, может использоваться для разработки или тестирования.
  • Photon OSTree Host - установка Photon OS в режиме RPM-OSTree хоста, который синхронизирует все изменения с единого сервера, позволяя централизованно обновлять множество хостов. Более подробно про RPM-OSTree можно прочитать тут.
  • Photon OSTree Server - установка Photon OS в режиме RPM-OSTree сервера, с которым будут синхронизироваться хосты.
Установка дистрибутива на ВМ vSphere крайне проста. Все, что требуется - это указать диск, на который будет установлена ОС, задать имя компьютера и пароль для root.

При развертывании ВМ из OVA шаблона для учетной записи root задан пароль по умолчанию: changeme

Изменение сетевых настроек

Конфигурация сетевых интерфейсов хранится в файлах .network в каталоге /etc/systemd/network. По умолчанию в каталоге присутствует только один файл 10-dhcp.network в котором прописано получение всех сетевых настроек через DHCP.

Для задания статического адреса удалите файл 10-dhcp.network:
rm /etc/systemd/network/10-dhcp.network
Создайте новый файл в каталоге /etc/systemd/network/, например, 10-static.network (имя не принципиально и используется только для очередности применения сетевых настроек, важно только, чтобы расширение файла было .network) со следующим содержимым:
[Match]
Name=
eno16780032

[Network]
Address=192.168.1.40/24
Gateway=192.168.1.1
DNS=192.168.1.10
Domains=test.local
, где eno16780032 - имя сетевого интерфейса.

Имя сетевого интерфейса можно посмотреть с помощью команд ifconfig или networkctl
root [ / ]# ifconfig
eno16780032Link encap:Ethernet HWaddr 00:50:56:A3:35:A0
inet addr:192.168.1.40 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:432482 errors:0 dropped:220 overruns:0 frame:0
TX packets:40289 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:36893044 TX bytes:6387665

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:6 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:516 TX bytes:516
Для редактирования можно использовать nano (доступен в Full инсталляции) или vi.

После редактирования файла выполните команду
systemctl restart systemd-networkd.service

или перезагрузите компьютер:
reboot

Настройка root для подключения по SSH

По умолчанию, учетной записи root запрещено напрямую авторизовываться по SSH. Чтобы разрешить подключение требуется отредактировать файл /etc/ssh/sshd_config и раскомментировать строчку:
PermitRootLogin yes
После чего перезапустить службу sshd с помощью команды:
systemctl restart sshd.service

Установка обновлений пакетов

Несмотря на то, что Photon OS придерживается атомарного подхода к развертыванию - все необходимое уже есть внутри, обновление выполняется для всего дистрибутива сразу, а не для отдельных компонентов, в некоторых случаях может потребоваться установить дополнительные пакеты или обновить существующие.

В Photon OS менеджером пакетов по умолчанию является tdnf (в Full варианте установке также присутствует привычный всем yum).

В Full установке для обновления пакетов достаточно выполнить команду:
yum update
В Minimal и Micro установке проще всего будет сначала установить yum:
tdnf install yum
А затем запустить обновление через него. Если yum ставить не хочется, то можно выполнить команду:
tdnf check-update
А затем поочередно для каждого пакета, который нуждается в обновлении:
tdnf upgrade <packet_name>
Если после обновления VMware Tools не стартуют (в свойствах ВМ отображается not running / not installed), создайте символическую ссылку на файл конфигурации сервиса и запустите сервис:
ln -s /usr/lib/systemd/system/vmtoolsd.service /etc/systemd/system/multi-user.target.wants/vmtoolsd.service
cd /etc/systemd/system/multi-user.target.wants/
systemctl enable vmtoolsd.service
systemctl start vmtoolsd.service

Кастомизация с помощью vSphere Customization Specification

Начиная с релиза Photon OS TP2 при клонировании ВМ из шаблона поддерживается кастомизация ВМ с помощью Customization Specification.

Для работы кастомизации требуется наличие vSphere 6.0. Шаблон ВМ должен иметь 11 версию Virtual Machine Version, а качестве гостевой ОС должна быть выбрана CoreOS Linux (x64).

В целях безопасности, перед выключением ВМ для создания из нее шаблона или клонирования не лишним будет удалить из нее файлы SSH ключей:
rm -f /etc/ssh/ssh_host_*

Кастомизация с помощью Cloud-init

Photon OS также поддерживает автоматическую настройку ОС с помощью cloud-init. Для VMware vSphere настройка выполняется через Config Drive - специальный ISO образ, с которого Photon OS считывает настройки в момент загрузки ОС.

С помощью cloud-init возможно изменять имя хоста, настраивать сетевые интерфейсы, изменять размер томов, изменять etc/hosts, настраивать Puppet и многое другое. Полный список модулей доступен по ссылке.

Образ Config Drive должен включать в себя, по крайней мере, два файла в формате YAML:
  • user-data - файл конфигурации.
  • meta-data - файл мета-данных.
Для примера создадим Config Drive, который меняет имя компьютера и IP адрес сетевого интерфейса, а также перезагружает компьютер после выполнения настройки.

Для создания Config Drive проще всего использовать Photon OS в Full инсталляции.

Создайте файл user-data со следующим содержимым (не забудьте про отступы, а также #cloud-config в начале файла, для проверки можете использовать online-валидатор: https://coreos.com/validate/):
#cloud-config
hostname: photon14
write_files:
- path: /etc/systemd/network/10-static.network
permissions: 0644
content: |
[Match]
Name=eno16780032

[Network]
Address=192.168.1.50/24
Gateway=192.168.1.1
DNS=192.168.1.1

runcmd:
- reboot
Создайте файл meta-data со следующим содержимым:
instance-id: photon14
local-hostname: photon14
В качестве instance-id в файле meta-data нужно задавать уникальное значение, отличное от текущего instance-id в эталонной ВМ, так как некоторые из модулей cloud-init запускаются только один раз для одного инстанса, например, write_files. Если не изменить instance-id, то модуль не запустится. Текущий instance-id можно посмотреть в файле /var/lib/cloud/data/instance-id

Если нужно, чтобы все модули отработали, а instance-id менять, по какой-либо причине не хочется, то нужно удалить все содержимое каталога /var/lib/cloud/instances:
rm -rf /var/lib/cloud/instances
После создания файлов user-data и meta-data создайте ISO образ:
genisoimage  -output customize.iso -volid cidata -joliet -rock user-data meta-data
Теперь осталось только скопировать образ куда-нибудь, откуда его можно подключить к ВМ, и перезагрузить саму ВМ.