Авторские статьи

Ubuntu Core в контейнере LXD.


Стефан Грабер (Stéphane Graber) опубликовал статью про возможность запустить Ubuntu Core в контейнере LXD. Ubuntu Core уже пользуется популярностью у создателей роботов, дронов и других устройств, в которых нужна мощная, но не большая система, с поддержкой откатов софта при проблемах. Но Ubuntu Core, в которой "работают" транзакционные обновления системы и софт в snap пакетах, нечто большее, чем ОСь для маломощных железяк. Будущая Ubuntu Personal для десктопов ничто иное как Ubuntu Core c графикой в лице Mir + Unity 8. И прямо сейчас можно безопасно пощупать будущее, которое расцветёт завтра.

Что такое Ubuntu Core?

Ubuntu Core версия Убунту где поддерживается транзакционность на уровне как самой системы, так и софта, так как полностью основано всё на snap пакетах. Большая часть системы доступна лишь на чтение. Все программы ставятся только из snap пакетов и все обновления применяют транзакции для возможности откатов к предыдущему работоспособному состоянию.

Текущая версия Ubuntu Core была выпущена в ноябре 2016 года и называется "серия 16".

Требования

С точки зрения LXD Ubuntu Core ещё один Linux дистрибутив. Для snapd потребуется возможность непривилегированного монтирования FUSE и пространства имён AppArmor. Для этого нужно будет использовать актуальную Ubuntu с официальным ядром, обновлённую на сегодняшнюю дату, и обновлённый lxd в ней.

Создание контейнера Ubuntu Core

Образы Ubuntu Core публикуются на image серверах, поэтому легко можно установить командой:
$ lxc launch images:ubuntu-core/16 ubuntu-core

Creating ubuntu-core
Starting ubuntu-core

Для старта контейнера потребуется пару секунд для его первого старта, когда определяется какой образ использовать для старта системы и настраиваются слои, куда можно будет в дальнейшем записывать данные (writable layers). Через пару секунд команда lxc list покажет IP адрес контейнера.
lxc list

+-------------+---------+----------------------+----------------------------------------------+------------+-----------+
|     NAME    |  STATE  |          IPV4        |                      IPV6                    |    TYPE    | SNAPSHOTS |
+-------------+---------+----------------------+----------------------------------------------+------------+-----------+
| ubuntu-core | RUNNING | 10.90.151.104 (eth0) | 2001:470:b368:b2b5:216:3eff:fee1:296f (eth0) | PERSISTENT | 0         |
+-------------+---------+----------------------+----------------------------------------------+------------+-----------+

Теперь можно взаимодействовать с ним.
lxc exec ubuntu-core bash
root@ubuntu-core:~# snap list

Name       Version     Rev  Developer  Notes
core       16.04.1     394  canonical  -
pc         16.04-0.8   9    canonical  -
pc-kernel  4.4.0-45-4  37   canonical  -

Обновление контейнера

Если вы следили за развитием Ubuntu Core, то знаете, что версии, выданные выше, довольно таки старые. Образы Ubuntu Core для lxd формируются раз в пару месяцев. Ubuntu Core обновляется раз в день и автоматически перезагружается в эту новую версию или откатывается к предыдущей версии, если были проблемы при старте нового образа.

Принудительно обновиться можно так:
$ lxc exec ubuntu-core bash
root@ubuntu-core:~# snap refresh

pc-kernel (stable) 4.4.0-53-1 from 'canonical' upgraded
core (stable) 16.04.1 from 'canonical' upgraded

root@ubuntu-core:~# snap version

snap 2.17
snapd 2.17
series 16

Перезагрузитесь и проверьте версии:
root@ubuntu-core:~# reboot
$ lxc exec ubuntu-core bash
root@ubuntu-core:~# snap version

snap 2.21
snapd 2.21
series 16

Можно получить историю ваших изменений.
$ lxc exec ubuntu-core snap changes

ID  Status  Spawn                 Ready                 Summary
1   Done    2017-01-31T05:14:38Z  2017-01-31T05:14:44Z  Initialize system state
2   Done    2017-01-31T05:14:40Z  2017-01-31T05:14:45Z  Initialize device
3   Done    2017-01-31T05:21:30Z  2017-01-31T05:22:45Z  Refresh all snaps in the system

Установка snap пакетов

Для начала давайте поставим старый добрый Hello World.
$ lxc exec ubuntu-core bash
root@ubuntu-core:~# snap install hello-world

hello-world 6.3 from 'canonical' installed

root@ubuntu-core:~# hello-world

Hello World!

Можно поставить что-нибудь более полезное!
$ lxc exec ubuntu-core bash
root@ubuntu-core:~# snap install nextcloud

nextcloud 11.0.1snap2 from 'nextcloud' installed

Теперь у вас есть своя копия NextCloud, доступная по HTTP.

Если хотите, то ради теста можно пощупать новую версию LXD из git.
$ lxc config set ubuntu-core security.nesting true
$ lxc exec ubuntu-core bash
root@ubuntu-core:~# snap install lxd --edge

lxd (edge) git-c6006fb from 'canonical' installed

root@ubuntu-core:~# lxd init

Name of the storage backend to use (dir or zfs) [default=dir]: 

We detected that you are running inside an unprivileged container.
This means that unless you manually configured your host otherwise,
you will not have enough uid and gid to allocate to your containers.

LXD can re-use your container's own allocation to avoid the problem.
Doing so makes your nested containers slightly less safe as they could
in theory attack their parent container and gain more privileges than
they otherwise would.

Would you like to have your containers share their parent's allocation (yes/no) [default=yes]? 
Would you like LXD to be available over the network (yes/no) [default=no]? 
Would you like stale cached images to be updated automatically (yes/no) [default=yes]? 
Would you like to create a new network bridge (yes/no) [default=yes]? 
What should the new bridge be called [default=lxdbr0]? 
What IPv4 address should be used (CIDR subnet notation, “auto” or “none”) [default=auto]? 
What IPv6 address should be used (CIDR subnet notation, “auto” or “none”) [default=auto]? 
LXD has been successfully configured.

Ну и напоследок, как в фильме Начало с ДиКаприо, сон во сне. Ubuntu Core 16 внутри Ubuntu Core 16.
root@ubuntu-core:~# lxc launch images:ubuntu-core/16 nested-core

Creating nested-core
Starting nested-core 

root@ubuntu-core:~# lxc list

+-------------+---------+---------------------+-----------------------------------------------+------------+-----------+
|    NAME     |  STATE  |         IPV4        |                       IPV6                    |    TYPE    | SNAPSHOTS |
+-------------+---------+---------------------+-----------------------------------------------+------------+-----------+
| nested-core | RUNNING | 10.71.135.21 (eth0) | fd42:2861:5aad:3842:216:3eff:feaf:e6bd (eth0) | PERSISTENT | 0         |
+-------------+---------+---------------------+-----------------------------------------------+------------+-----------+

Итог

Если вы хотели бы попробовать Ubuntu Core, то сейчас отличный способ это сделать. Для снапкрафтеров отличный способ проверить своего подопечного в snap пакете на предмет полной автономности.

Стоит отметить, что всё вышеописанное пока готово только для тестов, но официально пока не поддерживается. Сейчас ведётся работа над официальной поддержкой образов Ubuntu Core для LXD.


Всё от Стефана Грабера про LXD.
Личное знакомство с Ubuntu Snappy Core. Часть 1.
Snappy Ubuntu Core в коммутаторах.
Zabbix и Ubuntu Snappy Core.

Дата последней правки: 2017-02-02 08:11:34

RSS vasilisc.com   


Разделы

Главная
Новости
Ворох бумаг
Видео Linux
Игры в Linux
Безопасность
Статьи об Astra Linux
Статьи о FreeBSD
Статьи об Ubuntu
Статьи о Snappy
Статьи об Ubuntu Phone
Статьи о Kubuntu
Статьи о Xubuntu
Статьи о Lubuntu
Статьи об Open Source
Карта сайта