Посмотрев разные варианты создания контейнеров, пришёл к выводу, что чаще всего попадается lxc.
У docker под капотом lxc, Promox вроде тоже перешли на lxc/lxd. Кроме того, нашлись переводы статей, русскоязычная версия сайта, how-to... Короче говоря, решил попробовать.
Сначала (сам дурак) начал собирать lxc из исходников - создал ей слакбилд, собрал.
Потом как-то случайно обнаружил, что она, оказывается, есть в репах слаки. Ладно, поставил из репов.
Там оказался шаблон для слаки... Запустил я это дело, создал контейнер... Всё работает, вроде бы...
Если бы я удовольствовался привилегированным контейнером, этим бы всё и кончилось. Но мне захотелось непривилегированных. Тут выяснилось, что создание непривилегированных контейнеров выполняется от пользователя, а следовательно, есть ограничения, в частности, нельзя создавать файлы устройств, в общем, нужно использовать шаблон download, то есть скачивать уже собранные контейнеры. Никакой slackware там в списках, разумеется, не оказалось, а те, которые были - почти все завязаны на systemd, поэтому не запускаются. Запустить удалось debian wheezy.
Нашлась серия статей Unprivileged containers in Slackware
(второй вариант), где предлагалось создать обычный привилегированный контейнер,
потом заменить gid/uid на subgid/subuid по всем файлам, создать конфиги и в итоге запустить это всё от пользователя.
Попробовал. Вроде получилось, но слишком много возни по превращению контейнера.
Решил тогда попробовать lxd. Предъявляется, как более современный вариант, более безопасный, никаких шаблонов, только проверенные образы, ну и т.д.
Заявлено, что lxd - это демон, а lxc - клиент.
Собрал/поставил я это дело...
Поскольку lxd - детище Canonical, то понятно, что Ubuntu там на первом месте. Ну и systemd, разумеется. Куда ж без него...
И разумеется, никакой Slackware там и рядом нет. Зато утверждается, что легко создавать свои образы, в отличие от возни с шаблонами lxc.
Это правда. Создать образ оказалось проще простого.
Достаточно поставить нужные пакеты в отдельный каталог через chroot, создать файл метаданных, упаковать всё это хозяйство в тарбол и скормить тарбол демону. Тот его нормально съест и развернёт дерево каталогов в контейнере. С этим вроде всё нормально.
Но вот сам демон...
Демон он - так себе, честно говоря.
Стартует в foreground, shell не отдаёт обратно. В случае чего, нужно его принудительно запускать в фоне.
Pid-файл не создаёт. Если он нужен, об этом придётся позаботиться самостоятельно.
Сообщения выводит в терминал (даже при указанном файле логов), приходится глушить.
Короче, от демона там только сокет. Сокет создает/уничтожает исправно, да.
А всё остальное - как у обычной программы. У меня rtorrent вёл себя так же, с той лишь разницей, там ещё и сокет создавать приходилось.
Но при этом его гордо величают "демоном".
Решил я, раз он демон, то и стартовать его нужно как демон - при загрузке системы.
Написал для него init-скрипт с учётом перечисленных особенностей.
То ли это всё создано с расчетом на systemd, который будет запускать, останавливать, следить за дочерними процессами..., то ли это просто кривая реализация. Впрочем, у меня не самая новая версия, возможно, в более поздних, что-то улучшили.
Мне вот интересно, это "демон", который на самом деле не демон - он везде так себя ведёт или только в слаке?
Spoiler
-- Не человеьчим хотеньем, но Божьим соизволеньем, молви ещё раз, ты не демон?
-- Я Вам сто раз объяснял, кто я такой. Не демон я!
-- Ой, не лги! Ой, не лги - царю лжёшь!
-- Я Вам сто раз объяснял, кто я такой. Не демон я!
-- Ой, не лги! Ой, не лги - царю лжёшь!
И я бы может даже чего-нибудь там пропатчил, но оно написано на go, которого я совсем не знаю.
У кого есть желание поделиться опытом/историями (не)успеха использования lxc/lxd - милости просим.