Стефан Грабер (Stéphane Graber) опубликовал статью про возможность запустить Ubuntu Core в контейнере LXD. Ubuntu Core уже пользуется популярностью у создателей роботов, дронов и других устройств, в которых нужна мощная, но не большая система, с поддержкой откатов софта при проблемах. Но Ubuntu Core, в которой "работают" транзакционные обновления системы и софт в snap пакетах, нечто большее, чем ОСь для маломощных железяк. Будущая Ubuntu Personal для десктопов ничто иное как Ubuntu Core c графикой в лице Mir + Unity 8. И прямо сейчас можно безопасно пощупать будущее, которое расцветёт завтра.
Ubuntu Core версия Убунту где поддерживается транзакционность на уровне как самой системы, так и софта, так как полностью основано всё на snap пакетах. Большая часть системы доступна лишь на чтение. Все программы ставятся только из snap пакетов и все обновления применяют транзакции для возможности откатов к предыдущему работоспособному состоянию.
Текущая версия Ubuntu Core была выпущена в ноябре 2016 года и называется "серия 16".
С точки зрения LXD Ubuntu Core ещё один Linux дистрибутив. Для snapd потребуется возможность непривилегированного монтирования FUSE и пространства имён AppArmor. Для этого нужно будет использовать актуальную Ubuntu с официальным ядром, обновлённую на сегодняшнюю дату, и обновлённый lxd в ней.
Образы 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
Для начала давайте поставим старый добрый 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.