Найти в Дзене
Герман Геншин

Как я обхожу ограничения Linux и устанавливаю любые программы на любом дистрибутиве

Как часто вы натыкались на классное приложение, которого нет в репозиториях вашего дистрибутива? Обычно следующий шаг — попытаться поставить его через Brew, Flatpak или Snap, но это далеко не всегда срабатывает. Разнообразие систем упаковки приложений в Linux — настоящая головная боль. Одни дистрибутивы используют похожие, но несовместимые форматы пакетов, другие — совсем другие способы установки. Flatpak и Snap пытались сгладить эти различия, но лишь добавили новых стандартов — как в известном комиксе XKCD. Вместо того, чтобы создавать очередной формат, имеет смысл объединить уже существующие — и тут на помощь приходит Distrobox. Прежде чем перейти к Distrobox, важно понять, на чём он основан: на Docker и Podman. Docker — это программа, которая изолирует процессы в отдельные контейнеры, не позволяя им напрямую взаимодействовать с вашей системой. Технология контейнеров базируется на Linux-механизмах, таких как namespaces и cgroups. Не погружайтесь в детали — главное понять, что контей
Оглавление

Быстрые переходы

Как часто вы натыкались на классное приложение, которого нет в репозиториях вашего дистрибутива? Обычно следующий шаг — попытаться поставить его через Brew, Flatpak или Snap, но это далеко не всегда срабатывает.

Разнообразие систем упаковки приложений в Linux — настоящая головная боль. Одни дистрибутивы используют похожие, но несовместимые форматы пакетов, другие — совсем другие способы установки. Flatpak и Snap пытались сгладить эти различия, но лишь добавили новых стандартов — как в известном комиксе XKCD. Вместо того, чтобы создавать очередной формат, имеет смысл объединить уже существующие — и тут на помощь приходит Distrobox.

Основы, на которых построен Distrobox

Прежде чем перейти к Distrobox, важно понять, на чём он основан: на Docker и Podman. Docker — это программа, которая изолирует процессы в отдельные контейнеры, не позволяя им напрямую взаимодействовать с вашей системой. Технология контейнеров базируется на Linux-механизмах, таких как namespaces и cgroups. Не погружайтесь в детали — главное понять, что контейнер служит изоляцией для процессов.

Docker называют контейнерным рантаймом. Podman — это альтернативный рантайм, почти точная копия Docker, но с важным отличием: Podman по умолчанию запускает контейнеры без root-прав, что существенно повышает безопасность — об этом мы ещё поговорим. В остальном Docker и Podman очень похожи, так что инструкции для Docker подойдут и для Podman.

Как работает Distrobox?

-2

Distrobox стирает границы между дистрибутивами — он использует привычные технологии для установки пакетов, адаптированных к разным системам. Distrobox запускает выбранный контейнерный рантайм (Podman, Docker или Lilypod) и выполняет процессы внутри контейнера. Когда вы вводите команду Distrobox, она передаёт её соответствующему рантайму.

Почему это удобно? В отличие от обычного Docker или Podman, Distrobox плотно интегрирует контейнеры с вашей системой: они получают доступ к вашей домашней папке, могут видеть другие процессы и взаимодействовать с ними. Distrobox берёт на себя всю сложность настройки контейнера, чтобы приложения внутри работали на вашем компьютере так, будто они установлены «родным» способом.

Если задача контейнерного рантайма — изоляция процессов, то цель Distrobox — наоборот, глубокая интеграция без лишних настроек.

В официальной документации Distrobox под «плотной интеграцией» понимается предоставление доступа к домашнему каталогу пользователя, сокетам Wayland и X11, сетевым ресурсам, съёмным носителям (например, USB), системному журналу systemd, SSH-агенту, D-Bus, ulimits, /dev и базе udev и прочему.

Почему я рекомендую Podman вместо Docker

Лучший выбор для контейнерного рантайма — Podman, потому что он запускает контейнеры без root-прав, тогда как Docker обычно требует root-доступ. Важно помнить, что процессы внутри контейнера наследуют права контейнера, и при тесной интеграции с системой Distrobox это может стать уязвимостью. Контейнер с root-правами потенциально может захватить полный контроль над вашим компьютером.

Distrobox спрашивает пароль при запуске контейнера с root-доступом, что хотя бы частично защищает, но всё равно это не идеальный вариант.

Как установить Podman

Podman поддерживается минимум в десятке дистрибутивов. Вот команды для популярных систем.

Для Debian и производных (Ubuntu, Mint и др.):

Для дистрибутивов на базе Red Hat (Fedora и др.):

Для Arch Linux и подобных:

Podman обычно доступен в стандартных репозиториях. Главное — правильно его настроить в rootless mode. В некоторых дистрибутивах это нужно делать вручную — ознакомьтесь с документацией вашей системы, так как процесс отличается.

Как установить Distrobox

Distrobox поддерживается в более чем 30 дистрибутивах. После установки Podman (или Docker) достаточно поставить Distrobox через менеджер пакетов вашего дистрибутива. Вот примеры команд для популярных систем.

Для Debian и производных (Ubuntu, Mint и др.):

Для дистрибутивов на базе Red Hat (Fedora и др.):

Для Arch Linux и подобного:

Если Distrobox нет в репозиториях, его можно установить с помощью curl:

Внимание: команды вроде curl … | sh могут содержать вредоносный код — всегда внимательно проверяйте источник и скрипт перед запуском.

5 способов повысить безопасность Linux

Linux — надёжная система, но уязвимости всё же есть.

После установки Podman нужно указать его в конфигурации Distrobox в качестве контейнерного рантайма. Выполните команду ниже — обратите внимание, она перезапишет файл конфигурации:

Теперь ваша система готова к работе.

Создаём первый контейнер Distrobox

Контейнеры — это лёгкая прослойка поверх неизменяемых образов. Образы содержат базовую систему дистрибутива, а контейнер хранит пользовательские изменения. Установленные в контейнере пакеты живут там, а домашняя папка контейнера связана с вашей, так что настройки хранятся у вас.

Команда ниже создаст контейнер из образа по умолчанию:

А в этом примере создадим контейнер на базе Arch Linux:

-3

Что такое Arch Linux и чем он отличается от других дистрибутивов?

Если думаете о переходе на Arch.

Можно создать контейнер из любого образа, например Debian:

Или Fedora:

Очень важно не прерывать процесс создания контейнера — иначе придётся начинать заново из-за повреждений.

Distrobox поддерживает более 30 дистрибутивов и множество версий. Если вы знакомы с Toolbox, образы из него тоже подойдут. Для удобства Distrobox ведёт широкий список доступных образов.

Как установить приложение в контейнер Distrobox

Контейнер — это среда, которую нужно активировать. После активации все команды выполняются внутри контейнера.

Можно зайти внутрь контейнера, чтобы лучше разобраться, как он работает. Заканчивайте сеанс командой exit.

-4

Однако вместо того, чтобы заходить в контейнер для установки, удобнее запускать одиночные команды. Например, установка Firefox, который мы запускаем позже:

-5

Если ваш контейнер создан для другого дистрибутива, используйте соответствующие команды установки.

Для Debian и производных (Ubuntu, Mint и др.):

Для систем на базе Red Hat (Fedora и др.):

Если команды установки кажутся сложными — сначала изучите, как работать с пакетным менеджером в терминале.

Podman отлично работает с sudo. Запуская контейнер в режиме без root, процессы внутри не могут получить больше прав, чем разрешено — это повышает безопасность вашей системы.

10 Docker-контейнеров, которые стоит запустить каждому домашнему пользователю

Сколько из них уже есть у вас?

Как запустить приложение в контейнере Distrobox

Чтобы открыть установленный Firefox, выполните:

-6

Эта команда удерживает терминал занятым, пока Firefox не закроется, и она довольно длинная. Лучше создать алиас. Добавьте в файл конфигурации вашей оболочки строку:

Вы можете выбрать любое имя для алиаса.

Одна из главных фишек Distrobox — графические приложения работают без лишних настроек, поддерживаются X11 и Wayland. Также есть поддержка аппаратного ускорения на GPU — если это важно, изучайте документацию Distrobox.

Как правильно мыслить контейнерами Distrobox

Как уже говорилось, контейнер — это слой над образом. Distrobox позволяет использовать один образ для нескольких контейнеров. Например, если вы создаёте контейнер на Debian:

Он загрузит базовый образ Debian и создаст контейнер поверх него. Если создать два контейнера:

Они будут использовать один и тот же образ, но каждый — отдельный контейнер. Установка пакета в deb-1 не скажется на deb-2 или deb-3. Однако настройки сохраняются в вашей домашней папке и общие для всех контейнеров.

Как определить, сколько контейнеров создать? Обычно — по одному на каждый дистрибутив. Например, если вам нужна программа из AUR (сообщественный репозиторий Arch), можно создать контейнер Arch. Если есть три пакета в Debian — делаете один Debian-контейнер и ставите их туда. Если версии программ конфликтуют, логичнее разделить их по контейнерам.

Другие полезные команды Distrobox

Главный источник информации о командах — меню --help:

Для справки по конкретной команде добавляйте --help, например для create:

Создание временных контейнеров

Если нужно быстро что-то проверить, можно использовать временные контейнеры. Они удаляются автоматически после завершения работы:

Учтите, что такие контейнеры запускаются медленнее, так как каждый раз полностью инициализируются заново.

Подробнее о параметрах смотрите, используя distrobox ephemeral --help.

Управление контейнерами

Контейнеры Distrobox — это отдельная подсистема: вы создаёте, запускаете, останавливаете, удаляете, обновляете и поддерживаете их в порядке. Вот основные команды для этого.

Чтобы увидеть список контейнеров в системе:

Если хотите удалить контейнер, сначала остановите его, затем удалите:

-7

Останавливать контейнер перед удалением необязательно — Distrobox спросит, хотите ли принудительно удалить работающий контейнер.

Часто хочется обновить все контейнеры сразу:

Или обновить конкретный контейнер:

-8

Команда обновления использует менеджер пакетов внутри контейнера. Не забывайте регулярно обновлять контейнеры. При удалении контейнера удаляются и все его обновления.

Чтобы удалить программу, используйте пакетный менеджер вашего дистрибутива внутри контейнера. Например, чтобы удалить Firefox из Arch Linux контейнера:

-9

Для систем на базе Red Hat (Fedora и др.):

Для Debian и производных:

Как удалить Distrobox

Если вам не понравился Distrobox и решили полностью убрать его, вот нужные команды.

Если устанавливали через curl, используйте такую же команду curl для удаления:

В остальных случаях для Debian и производных (Ubuntu, Mint и др.):

Для систем на базе Red Hat (Fedora и др.):

Для Arch Linux и его производных:

Главная особенность Distrobox — это тесная интеграция с вашим компьютером. В мире Docker это скорее минус — Docker стремится изолировать, а Distrobox наоборот — интегрировать. Это главное отличие. Важно понимать, что запуск контейнеров с root-правами и запуск приложений внутри контейнера от root — разные вещи. Я категорически рекомендую использовать Podman без root, его выбор поддерживают и разработчики Distrobox.

И самое главное — берегите систему: с осторожностью относитесь к запуску контейнеров с root-доступом и не запускайте в них приложения с ограниченными правами, это может создать ложное чувство безопасности и привести к повышению привилегий.

Если вам понравилась эта статья, подпишитесь, чтобы не пропустить еще много полезных статей!

Вы также можете найти наши материалы в: