Решил попробовать LXC как одну из технологий для запуска контейнеров без рута. Выгреб просто кучу проблем, кое-как запустил, но не всё хорошо. 22.04 LTS убунта, apt install lxc, и дальше пошло:
Нужно установить всякие утилиты вроде newuidmap, которые не идут как зависимости lxc, и без которых непривилегированные контейнеры не запускаются. Ладно, разобрался, поставил.
Запускаю lxc-create -t download, создаю убунту. Дальше lxc-start и получаю Device or resource busy - Could not enable "+memory +pids" controllers in the unified cgroup
. Везде в интернете пишут что надо systemd-run --unit=myshell --user --scope -p "Delegate=yes" lxc-start <container-name>
, но это совершенно не помогает. После прочтения половины интернета читаю уже документацию ядра про устройство cgroups, оказывается нельзя включать контроллеры в группе, где уже есть процессы, нужно переместить себя в дочернюю группу, и продолжить настраивать родительскую. Набросал скрипт, заменяющий lxc-start, где хожу прямо в /sys/fs/cgroup, внезапно запустилось. В systemd вроде бы для этого завезли отдельную опцию, но у меня старая версия.
Долго не понимал как попасть в контейнер, никакой из паролей не подходил, оказалось надо lxc-attach -u 1000 --clear-env <container-name>
, по умолчанию оно зачем-то пробрасывает env из хоста. А пользователи все без паролей, только через аттач и надо пользоваться.
Дальше при apt update полезли массово ошибки подключения ipv6. Какого рожна он там вообще есть я не понял, не нашёл как выключить в конфиге lxc. Попытался подцепить хук, но хук из конфига, судя по TRACE вообще не подсасывается, не говоря уже о попытке запуститься.
Несмотря на то, что версия не самая старая, 5.0.0, опыт первого использования прям полон боли и страданий. В интернете тишина, как будто lxc пользуется три с половиной крокодила на весь мир. В связи с чем вопрос: а оно вообще актуально? Лучше podman/unprivileged docker? Мне нравится как они сделали uid mapping, в контейнере можно быть рутом и не подозревать что на хосте ты nobody со случайным номером. Но не нравится количество всего что не хочет просто так работать.