-
Notifications
You must be signed in to change notification settings - Fork 12
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
3 changed files
with
347 additions
and
0 deletions.
There are no files selected for viewing
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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/ |