Distrobox
Distrobox - это инструмент, который позволяет запускать различные дистрибутивы Linux внутри вашего основного (хост) дистрибутива. Рассматриваемый софт основан на технологии контейнеризации, но, несмотря на это, дистрибутивы тесно интегрируются в вашу систему. Поэтому программы, установленные внутри них, имеют доступ к вашей файловой системе, USB-устройствам, аудио и видео (X11/Wayland) системам.
Установка из репозитория
Distrobox можно установить любым привычным и удобным способом:
Установка с помощью Discover
В три клика 😊
Перейдите по ссылке установить Distrobox и подтвердите в браузере операцию «открыть приложение» Откроется Discover, выберите в нём источник «Sisyphus», и нажмите кнопку «скачать»
Установка через терминал
su -
apt-get update
apt-get install distroboxepm -i distroboxОбъяснение
Можно использовать как Docker так и Podman, но рекомендуется использовать Podman вместо Docker, поскольку по умолчанию Docker будет запускать контейнеры как root, а корневые контейнеры будут иметь неограниченный доступ к файловой системе вашего хоста.
Предварительная настройка
Сформируйте конфигурационный файл
touch ~/.distroboxrcОткройте с помощью
nano ~/.distroboxrcДобавьте содержимое:
container_always_pull="0"
container_manager="podman"Объяснение
container_manager - podman/docker. Определяем, какая система контейнеризации будет использоваться для управления контейнерами.
Установка Podman
su -
apt-get update
apt-get install podmanepm -i podmanДобавляем правила в UID и GID:
su - -c "echo "$USER:524288:65536" | tee -a /etc/subuid /etc/subgid"Объяснение
Эти файлы используются для настройки UID (User ID) и GID (Group ID) мэппинга, который необходим для работы изолированных rootless-контейнеров (контейнеров, работающих без привилегий root)
Выдаем права:
su - -c "chmod u+s /usr/bin/newuidmap /usr/bin/newgidmap"
su - -c "chmod a+x /usr/bin/newuidmap /usr/bin/newgidmap"Объяснение
Настройки прав доступа к утилитам newuidmap и newgidmap, они нужны для работы rootless-контейнеров.
Для применения всех наших изменений в конфигурации, связанных с пространствами имён пользователей, выполним:
podman system migrateУстановка Docker
Важно
Если вы уже установили Podman, этот шаг можно пропустить.
su -
apt-get update
apt-get install docker-engineepm -i docker-engineДобавляем своего пользователя в группу docker:
su - -c "/sbin/usermod -aG docker $USER"Затем:
su - -c "systemctl enable --now docker"Важно
Необходимо перезагрузить компьютер что-бы появился доступ к службе docker. Закрытие сессии на момент написание статьи не обновит права.
Объяснение
Таким образом, мы добавили пользователя в группу docker, а также запустили сервисы Docker, необходимые для его работы.
Чтобы убедиться в том, что пользователь действительно добавлен в указанную группу, выполните команду groups $USER.
Подсказка
Если по какой-то причине $USER не подставил активного пользователя при выполнении команды уберите это и впишите нужного пользователя вручную.
Управление программой
Теперь, завершив предварительные настройки, можно приступать к использованию Distrobox. Для начала следует определиться с тем, какой дистрибутив будем устанавливать.
Посмотреть полный список поддерживаемых систем можно по этой ссылке.
В статье же будет рассмотрена работа программы на примере Fedora Linux.
Важно
Учтите, что все дистрибутивы, установленные при помощи Distrobox, не будут иметь графического окружения!
Пользователю будет доступна полноценная ОС, но только в консольном виде и с некоторыми особенностями от рассматриваемой программы!
Установка дистрибутива
Для того чтобы создать контейнер с выбранным дистрибутивом (в данном случае Fedora Linux), выполните команду ниже:
distrobox create --image fedora:latest --name fedoradistrobox-create --image fedora:latest --name fedoraОбъяснение
--image или -i нужны для выбора устанавливаемой системы.
Параметр fedora:latest для вышеуказанной опции состоит из двух частей, разделенных символом двоеточия. Первая часть отвечает за выбранный к установке дистрибутив. Вторая часть указывает на его версию. Это обозначает, что можно выбрать как конкретную версию (например, для Fedora Linux - это 38, 39...) или последнюю из доступных в Distrobox (latest).
--name или -n используются для указания названия контейнера. При отсутствии данной опции будет применено название "по умолчанию".
Помимо вышеописанных "флагов" существуют и некоторые другие. Например:
--nvidia интегрирует поддержку проприетарных драйверов для видеокарт Nvidia, если они были заранее установлены в хост системе.
Имейте в виду, что для работы параметра требуются современные дистрибутивы с glibc (GNU LibC) в качестве хост системы! Проверить это можно, выполнив ldd --version.
Если что, ALT Linux подходит под выставленные требования, даже несмотря на то, что его нет в официальном списке протестированных систем.
--yes или -Y используется для автоматического извлечения систем без ручного подтверждения.
На данный момент в вашем распоряжении будет только контейнер без самой системы.
Её установка произойдет при первом входе в него.
Подробнее об этом поговорим в блоке ниже.
Вход в дистрибутив
Теперь в терминале появится одна из команд ниже для входа в систему:
distrobox enter fedoraПодсказка
Замените fedora на название нужного контейнера.
Чтобы выйти из дистрибутива, используйте команду exit или сочетание клавиш Ctrl + d.
Внимание
Установка ОС не закончится автоматически в случае использования Docker! В конце процесса потребуется ввести пароль для созданного внутри контейнера пользователя.
Данный пароль потребуется, например, при использовании sudo.
Запуск команд из хоста
Находясь в контейнерном дистрибутиве, вы не будете иметь доступа к программам, установленным в вашей основной системе.
Однако если вам нужно запустить какую-либо команду оттуда, не выходя из контейнера, следует использовать следующую команду:
distrobox-host-exec flatpak run org.mozilla.firefoxПодсказка
Замените flatpak run org.mozilla.firefox на нужную команду, выполняемую на основной системе.
Отображение установленных дистрибутивов
distrobox listdistrobox lsПодсказка
Если строка окрашена в зеленый цвет, то это значит, что контейнер работает.
Если строка окрашена в оранжевый цвет, то это значит, что контейнер выключен.
Управление ярлыками контейнеров
После установки системы на вашем хосте автоматически появится ярлык для его быстрого запуска. Однако этим можно управлять вручную.
Удалить ярлык из системы:
distrobox generate-entry fedora --deleteУстановить/Вернуть ярлык в систему:
distrobox generate-entry fedoraПодсказка
Во всех командах не забудьте заменить fedora на название нужного контейнера.
Объяснение
--delete или -d отвечают за удаление ярлыка
--all или -a позволяют выполнять команду для всех дистрибутивов
--icon или -i устанавливают собственную иконку для ярлыка.
Не забудьте указать абсолютный путь до неё!
Обновление дистрибутивов
Конечно, вы можете использовать пакетный менеджер дистрибутива для обновления системы.
Однако данный способ позволяет обновить несколько ОС одновременно, не подстраиваясь под их синтаксис!
su - -c "distrobox-upgrade fedora"Подсказка
Замените fedora на название нужного контейнера или укажите список из них для обновления.
Также вместо списка можно использовать опцию --all или -a для обновления всех установленных систем.
Для обновления только запущенных ОС существует параметр --running.
Используя --all и --running в одной команде вы обновите все запущенные контейнеры!
Остановка работающих дистрибутивов
Контейнеры в Distrobox остаются включенными даже после выхода из них, за счет чего последующие входы происходят очень быстро.
Поэтому, если вам требуется остановить работу какого-либо контейнера, используйте одну из этих команд:
distrobox stop fedoradistrobox-stop fedoraПодсказка
Замените fedora на название нужного контейнера или на список нужных.
Для остановки без подтверждения применяются параметры --yes или -Y.
А при помощи опции --all или -a можно остановить все активные системы.
Удаление дистрибутивов
Если какой-то из дистрибутивов вам больше не нужен, остановите его, как в инструкции выше, и удалите следующим образом:
distrobox rm fedoradistrobox-rm fedoraПодсказка
Замените fedora на название нужного контейнера.
А если вы его забыли, воспользуйтесь встроенной в Distrobox командой, которую мы рассматривали выше.
Для удаления всех контейнерных дистрибутивов используйте флаг --all или -a.
Для принудительного удаления существуют параметры --force или -f.
Вынос программ из дистрибутивов в хост систему
Наконец мы добрались до самой интересной части этой статьи: использование программ из контейнеров так, будто бы они установлены в основной системе!
Для этого необходимо всего лишь установить нужный пакет и выполнить указанную команду, находясь внутри контейнерной ОС:
distrobox-export --app telegram-desktopПодсказка
Замените telegram-desktop на нужную программу.
Внимание
Учтите, что в стандартных репозиториях Fedora Linux приложение telegram-desktop отсутствует.
Чтобы получить возможность его установить, добавьте репозиторий RPM Fusion в данный дистрибутив.
После этого вы получите доступ ко многим другим отсутствующим пакетам.
Объяснение
--app или -a передают название программы или абсолютный путь до её .desktop файла, чтобы добавить ярлык для запуска в меню приложений на основной системе. Учтите, что это сработает только при наличии .desktop файла у программы!
--bin или -b используются для экспорта бинарных (двоичных) файлов. В команду следует передавать абсолютный путь до него.
--export-path или -ep принимают путь, куда следует экспортировать двоичный файл.
--extra-flags или -ef позволяют указать дополнительные флаги для программы, с которыми она будет запускаться.
--delete или -d применяются для удаления экспортированного приложения или двоичного файла из хост системы.
--sudo или -S указывают, что экспортированная программа должна запускаться через sudo.
Чтобы увидеть все экспортированные приложения и "бинарники", воспользуйтесь --list-apps и --list-binaries (при помощи -ep можно указать свои пути поиска) соответственно.
Олег
Давид Султаниязов