Допустим, вам надо запустить какой-то софт, возможно с графическим интерфейсом, но его нет под ваш дистрибутив. У вас вариант либо запустить его в виртуальной машине, либо как-то самому наколхозить нужный контейнер и примапить его к хосту. Distrobox решает эту задачу за вас. Вы просто выбираете нужную систему, запускаете её через Distrobox и работаете там с нужным вам приложением. Оно запускается и ведёт себя так, как будто установлено локально. Пробрасываются каталог пользователя, иксы или wayland, звук, d-bus и udev. Приложение ведёт себя как локальное.
Distrobox для популярных дистрибутивов есть в базовых репозиториях. В свежих Debian и Ubuntu присутствует, так что установка стандартна:
# apt install distroboxНапример, запустим в Debian какую-нибудь программу, которая есть в Fedora. Для этого создаём контейнер с последней Федорой. Делать это нужно под обычным пользователем, не под root. Пользователь должен быть в группе docker. В самой свежей версии, установленной вручную, это уже поправлено и можно под root запускать.
# distrobox-create --name fedora --image fedora:latestЗаходим в контейнер:
# distrobox-enter fedoraПри первом входе будет выполнена преднастройка. После её окончания окажетесь в оболочке контейнера. Теперь можно установить какую-нибудь программу:
# sudo dnf install appnameПосле установки выполняем экспорт этой программы из консоли контейнера:
# distrobox-export --app appnameТеперь с этой программой можно работать, как будто она установлена на хосте. По умолчанию distrobox захочет положить ярлык на рабочий стол. Если у вас машина без графического окружения, то получите ошибку. Вместо этого можно выгрузить через ключ
--bin, указав явно путь к бинарнику в контейнере:# distrobox-export --bin /usr/sbin/appnameБинарник (а точнее скрипт запуска) запуска программы из контейнера будет положен на хост в директорию
~/.local/bin. Она должна существовать. Там же можно посмотреть, как всё это работает:#!/bin/sh# distrobox_binary# name: fedoraif [ -z "${CONTAINER_ID}" ]; then exec "/usr/local/bin/distrobox-enter" -n fedora -- /bin/sh -l -c '/usr/sbin/appname$@' -- "$@"elif [ -n "${CONTAINER_ID}" ] && [ "${CONTAINER_ID}" != "fedora" ]; then exec distrobox-host-exec /home/zerox/.local/bin/appname"$@"else exec /usr/sbin/appname"$@"fiТо есть всё это решение просто SHELL обёртка вокруг докера для удобного применения. Используются заранее подготовленные образы. В принципе, Distrobox удобен и для простого и быстрого запуска контейнеров с различными базовыми системами с примапленными ресурсами к хосту. Ими удобно управлять или работать. Смотрим список контейнеров:
# distrobox listУстанавливаем, удаляем:
# distrobox stop fedora# istrobox rm fedoraМожно сделать себе тестовую виртуалку со всеми базовыми системами и заходить в нужную. Все ресурсы у всех систем примаплены к хосту.
⇨ Сайт / Исходники / Как это работает
#linux #docker