diff --git a/docs/apps/distrobox/img/distrobox-logo.png b/docs/apps/distrobox/img/distrobox-logo.png new file mode 100644 index 0000000..7939471 Binary files /dev/null and b/docs/apps/distrobox/img/distrobox-logo.png differ diff --git a/docs/apps/distrobox/img/distrobox-screen.png b/docs/apps/distrobox/img/distrobox-screen.png new file mode 100644 index 0000000..3bdd3f0 Binary files /dev/null and b/docs/apps/distrobox/img/distrobox-screen.png differ diff --git a/docs/apps/distrobox/index.md b/docs/apps/distrobox/index.md new file mode 100644 index 0000000..4968273 --- /dev/null +++ b/docs/apps/distrobox/index.md @@ -0,0 +1,347 @@ +--- +title: DistroBox +aggregation: + sisyphus: distrobox +appstream: + name: DistroBox + icon: ./img/distrobox-logo.png + summary: Программа для запуска различных дистрибутивов Linux внутри вашего. + developer: + name: Luca Di Maio + nickname: 89luca89 + metadata_license: + name: GNU GPLv3 + link: https://choosealicense.com/licenses/gpl-3.0/ + url: + homepage: https://distrobox.it/ + bugtracker: https://github.com/89luca89/distrobox/issues + help: https://github.com/89luca89/distrobox +--- + +# DistroBox + +Distrobox - это инструмент, который позволяет запускать различные дистрибутивы Linux внутри вашего основного (хост) дистрибутива. +Рассматриваемый софт основан на технологии контейнеризации, но, несмотря на это, дистрибутивы тесно интегрируются в вашу систему. +Поэтому программы, установленные внутри них, имеют доступ к вашей файловой системе, USB-устройствам, аудио и видео (X11/Wayland) системам. + +![Скриншот программы DistroBox](./img/distrobox-screen.png 'Скриншот программы Distrobox') + +## Установка из репозитория + +:::tabs +==apt-get +```shell +su - +apt-get update +apt-get install distrobox docker-engine +exit +``` +==epm +```shell +epm -i distrobox docker-engine +``` +::: + +:::info Объяснение +Вместо Docker можно использовать Podman. +Однако из-за его особенностей и принципов работы может возникнуть значительно больше проблем, чем при использовании Docker. +Поэтому в данной статье будет рассмотрен вариант использования программы исключительно с Docker. +::: + +## Предварительная настройка + +Перед использованием DistroBox проделайте следующее: +```shell +su - -c "usermod $USER -aG docker" +``` +После этого выполните повторный вход в систему, а затем эту команду: +```shell +su - -c "systemctl enable --now docker" +``` + +:::info Объяснение +Таким образом, мы добавили пользователя в группу `docker`, а также запустили сервисы Docker, необходимые для его работы. +Чтобы убедиться в том, что пользователь действительно добавлен в указанную группу, выполните команду `groups $USER`. +::: + +:::tip +Если по какой-то причине `$USER` не подставил активного пользователя при выполнении команды уберите это и впишите нужного пользователя вручную. +::: + +## Управление программой + +Теперь, завершив предварительные настройки, можно приступать к использованию DistroBox. +Для начала следует определиться с тем, какой дистрибутив будем устанавливать. +Посмотреть полный список поддерживаемых систем можно по этой [ссылке](https://distrobox.it/compatibility/#containers-distros). +В статье же будет рассмотрена работа программы на примере [Fedora Linux](https://fedoraproject.org/ru/workstation/). + +:::warning Важно +Учтите, что все дистрибутивы, установленные при помощи DistroBox, не будут иметь графического окружения! +Пользователю будет доступна полноценная ОС, но только в консольном виде и с некоторыми особенностями от рассматриваемой программы! +::: + +### Установка дистрибутива + +Для того чтобы создать контейнер с выбранным дистрибутивом (в данном случае Fedora Linux), выполните команду ниже: +:::tabs +==1 способ +```shell +distrobox create --image fedora:latest --name fedora +``` +== 2 способ +```shell +distrobox-create --image fedora:latest --name fedora +``` +::: + +Скорее всего, во время выполнения команды вы столкнетесь с ошибкой ниже: +:::details Нажмите для отображения ошибки +```shell +permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: +Post "http://%2Fvar%2Frun%2Fdocker.sock/v1.46/images/create?fromImage=fedora&tag=latest": +dial unix /var/run/docker.sock: connect: permission denied +``` +::: + +Исправить ее можно, выполнив данную команду: +```shell +su - -c "chmod 777 /var/run/docker.sock" +``` + +:::danger +Несмотря на то что данное решение полностью рабочее, оно является потенциально небезопасным! +Выдавать чему-либо в системе максимальные права (777) крайне не рекомендуется, но на данный момент я не нашел решения лучше. +Если вы знаете более совершенный способ, не стесняйтесь добавить его в данную статью! +::: + +:::info Объяснение +`--image` или `-i` нужны для выбора устанавливаемой системы. + +Параметр `fedora:latest` для вышеуказанной опции состоит из двух частей, разделенных символом двоеточия. +Первая часть отвечает за выбранный к установке дистрибутив. +Вторая часть указывает на его версию. +Это обозначает, что можно выбрать как конкретную версию (например, для Fedora Linux - это 38, 39...) или последнюю из доступных в DistroBox (latest). + +`--name` или `-n` используются для указания названия контейнера. +При отсутствии данной опции будет применено название "по умолчанию". + +**Помимо вышеописанных "флагов" существуют и некоторые другие. Например:** + +`--nvidia` интегрирует поддержку проприетарных драйверов для видеокарт Nvidia, если они были заранее установлены в хост системе. +Имейте в виду, что для работы параметра требуются современные дистрибутивы с **glibc (GNU libc)** в качестве **хост** системы! +Проверить это можно, выполнив `ldd --version`. +Если что, ALT Linux подходит под выставленные требования, даже несмотря на то, что его нет в официальном списке протестированных систем. + +`--yes` или `-Y` используется для автоматического извлечения систем без ручного подтверждения. +::: + +На данный момент в вашем распоряжении будет только контейнер без самой системы. +Ее установка произойдет при первом входе в него. +Подробнее об этом поговорим в блоке ниже. + +### Вход в дистрибутив + +Теперь в терминале появится одна из команд ниже для входа в систему: + +:::tabs +==1 способ +```shell +distrobox enter fedora +``` +== 2 способ +```shell +ditrobox-enter fedora + +# Данный способ работает не совсем корректно. +# Чтобы войти в контейнер, нужно выполнить команду 2 раза, так как в первый раз всплывет непонятная ошибка. +# Рекомендую просто использовать первый способ, который стоит по умолчанию. +``` +::: + +:::tip +Замените `fedora` на название нужного контейнера. + +Чтобы выйти из дистрибутива, используйте команду `exit` или сочетание клавиш `Ctrl+d`. +::: + +:::warning +Установка ОС не закончится автоматически! +В конце процесса потребуется ввести пароль для созданного внутри контейнера пользователя. +Данный пароль потребуется, например, при использовании **sudo**. +::: + +### Запуск команд из хоста + +Находясь в контейнерном дистрибутиве, вы не будете иметь доступа к программам, установленным в вашей основной системе. +Однако если вам нужно запустить какую-либо команду оттуда, не выходя из контейнера, следует использовать следующую команду: +```shell +distrobox-host-exec flatpak run org.mozilla.firefox +``` + +:::tip +Замените `flatpak run org.mozilla.firefox` на нужную команду, выполняемую на основной системе. +::: + +### Отображение установленных дистрибутивов + +:::tabs +==1 способ +:::code-group +```shell[стандарт] +distrobox list +``` + +```shell[сокращение] +distrobox ls +``` + +== 2 способ +```shell +ditrobox-list +``` +::: + +:::tip +Если строка окрашена в зеленый цвет, то это значит, что контейнер работает. + +Если строка окрашена в оранжевый цвет, то это значит, что контейнер выключен. +::: + +### Управление ярлыками контейнеров + +После установки системы на вашем хосте автоматически появится ярлык для его быстрого запуска. +Однако этим можно управлять вручную. + +**Удалить ярлык из системы:** +```shell +distrobox generate-entry fedora --delete +``` + +**Установить/Вернуть ярлык в систему:** +```shell +distrobox generate-entry fedora +``` + +:::tip +Во всех командах не забудьте заменить `fedora` на название нужного контейнера. +::: + +:::info Объяснение +`--delete` или `-d` отвечают за удаление ярлыка + +`--all` или `-a` позволяют выполнять команду для всех дистрибутивов + +`--icon` или `-i` устанавливают собственную иконку для ярлыка. +Не забудьте указать **абсолютный** путь до нее! +::: + +### Обновление дистрибутивов + +Конечно, вы можете использовать пакетный менеджер дистрибутива для обновления системы. +Однако данный способ позволяет обновить несколько ОС одновременно, не подстраиваясь под их синтаксис! + +```shell +su - -c "distrobox-upgrade fedora" +``` + +:::tip +Замените `fedora` на название нужного контейнера или укажите список из них для обновления. + +Также вместо списка можно использовать опцию `--all` или `-a` для обновления всех установленных систем. + +Для обновления только запущенных ОС существует параметр `--running`. + +Используя `--all` и `--running` в одной команде вы обновите все **запущенные** контейнеры! +::: + +### Остановка работающих дистрибутивов + +Контейнеры в DistroBox остаются включенными даже после выхода из них, за счет чего последующие входы происходят очень быстро. +Поэтому, если вам требуется остановить работу какого-либо контейнера, используйте одну из этих команд: + +:::tabs +== 1 способ +```shell +distrobox stop fedora +``` +== 2 способ +```shell +distrobox-stop fedora +``` +::: + +:::tip +Замените `fedora` на название нужного контейнера или на список нужных. + +Для остановки без подтверждения применяются параметры `--yes` или `-Y`. + +А при помощи опции `--all` или `-a` можно остановить все активные системы. +::: + +### Удаление дистрибутивов + +Если какой-то из дистрибутивов вам больше не нужен, остановите его, как в инструкции выше, и удалите следующим образом: + +:::tabs +== 1 способ +```shell +distrobox rm fedora +``` +== 2 способ +```shell +distrobox-rm fedora +``` +::: + +:::tip +Замените `fedora` на название нужного контейнера. +А если вы его забыли, воспользуйтесь встроенной в DistroBox [командой](#отображение-установленных-дистрибутивов), которую мы рассматривали выше. + +Для удаления всех контейнерных дистрибутивов используйте флаг `--all` или `-a`. + +Для принудительного удаления существуют параметры `--force` или `-f`. +::: + +### Вынос программ из дистрибутивов в хост систему + +Наконец мы добрались до самой интересной части этой статьи: использование программ из контейнеров так, будто бы они установлены в основной системе! +Для этого необходимо всего лишь установить нужный пакет и выполнить указанную команду, находясь **внутри** контейнерной ОС: +```shell +distrobox-export --app telegram-desktop +``` + +:::tip +Замените `telegram-desktop` на нужную программу. +::: + +:::warning +Учтите, что в стандартных репозиториях Fedora Linux приложение `telegram-desktop` отсутствует. +Чтобы получить возможность его установить, добавьте репозитории [**RPM Fusion**](https://docs.fedoraproject.org/en-US/quick-docs/rpmfusion-setup/) в данный дистрибутив. +После этого вы получите доступ ко многим другим отсутствующим пакетам. +::: + +:::info Объяснение +`--app` или `-a` передают название программы или абсолютный путь до ее .desktop файла, чтобы добавить ярлык для запуска в меню приложений на основной системе. +Учтите, что это сработает только при наличии `.desktop` файла у программы! + +`--bin` или `-b` используются для экспорта бинарных (двоичных) файлов. +В команду следует передавать абсолютный путь до него. + +`--export-path` или `-ep` принимают путь, куда следует экспортировать двоичный файл. + +`--extra-flags` или `-ef` позволяют указать дополнительные флаги для программы, с которыми она будет запускаться. + +`--delete` или `-d` применяются для удаления экспортированного приложения или двоичного файла из хост системы. + +`--sudo` или `-S` указывают, что экспортированная программа должна запускаться через **sudo**. + +Чтобы увидеть все экспортированные приложения и "бинарники", воспользуйтесь `--list-apps` и `--list-binaries` (при помощи `-ep` можно указать свои пути поиска) соответственно. +::: + +## Источники + +https://www.altlinux.org/Docker + +https://stackoverflow.com/questions/47854463/docker-got-permission-denied-while-trying-to-connect-to-the-docker-daemon-socke + +https://distrobox.it/