Skip to content

Commit

Permalink
Merge pull request #90 from Krator3/add-distrobox
Browse files Browse the repository at this point in the history
Добавлено: статья про DistroBox
  • Loading branch information
Ampernic authored Aug 12, 2024
2 parents b9fd46b + 51123c2 commit 323b7a6
Show file tree
Hide file tree
Showing 3 changed files with 347 additions and 0 deletions.
Binary file added docs/apps/distrobox/img/distrobox-logo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/apps/distrobox/img/distrobox-screen.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
347 changes: 347 additions & 0 deletions docs/apps/distrobox/index.md
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/

0 comments on commit 323b7a6

Please sign in to comment.