Окружения, представленные в примерах, создаются в каталоге /home/
. В данном случае сохранение изменений в системе понадобиться только при работе в режиме "Полная песочница", для этого следует при сохранении выбрать пункт "Все домашние каталоги".
Если для окружения будет выбран другой каталог, отличный от /home, то сохранение понадобиться в любой из видов песочниц.
После создания и настройки окружения сохранять изменения следует только в модуль: /ublinux-data/modules
(т.к. после сохранения в rootcopy система может не загрузиться из-за нехватки ОЗУ в следствии того, что окружение в среднем занимает 5ГБ и более).
После создания и настройки окружения следует
сохранять изменения исключительно в модуль: /ublinux-data/modules
. Это необходимо, так как после сохранения в /ublinux-data/rootcopy система может столкнуться с проблемами загрузки из-за нехватки оперативной памяти, вызванной тем, что окружение обычно занимает более 5 ГБ.
Устанавливаем и подготавливаем окружение системы построенного на базе дистрибутива
Alpine Linux
использующего репозиторий основанный на .apk пакетах.
В примере представлен метод с созданием окружения
Alpine Linux
.
CONTAINER=NameContainer
PATH_CONTAINER=/home/${CONTAINER}
sudo mkdir -p ${PATH_CONTAINER}
cd ~/Загрузки
wget https://raw.githubusercontent.com/alpinelinux/alpine-chroot-install/master/alpine-chroot-install
chmod +x alpine-chroot-install
sudo ./alpine-chroot-install -d ${PATH_CONTAINER}
echo "export TERM=xterm" | sudo tee -a /home/alpine/etc/profile.d/xterm.sh
sudo cp -f /etc/hostname ${PATH_CONTAINER}/etc/
echo -e "\n127.0.0.1\t$(hostname)" | sudo tee -a ${PATH_CONTAINER}/etc/hosts
Подключить окружения Alpine к системе:
CONTAINER=NameContainer
PATH_CONTAINER=/home/${CONTAINER}
cd ~/Загрузки
sudo ~/Загрузки/alpine-chroot-install -d ${PATH_CONTAINER}
Отключить окружение от системы:
CONTAINER=NameContainer
PATH_CONTAINER=/home/${CONTAINER}
sudo ${PATH_CONTAINER}/destroy
Обновить репозиторий apk:
CONTAINER=NameContainer
PATH_CONTAINER=/home/${CONTAINER}
sudo ${PATH_CONTAINER}/enter-chroot apk update
Найти пакет по имени в репозитории apk:
CONTAINER=NameContainer
PATH_CONTAINER=/home/${CONTAINER}
sudo ${PATH_CONTAINER}/enter-chroot apk search xz
Скачиваем необходимый пакет (в примере htop)
CONTAINER=NameContainer
PATH_CONTAINER=/home/${CONTAINER}
cd ~/Загрузки
wget https://mirror.yandex.ru/mirrors/alpine/v3.9/main/x86_64/htop-2.2.0-r0.apk
sudo ${PATH_CONTAINER}/enter-chroot apk add --allow-untrusted ~/Загрузки/htop-2.2.0-r0.apk
Запуск приложение в окружении:
CONTAINER=NameContainer
PATH_CONTAINER=/home/${CONTAINER}
sudo ${PATH_CONTAINER}/enter-chroot htop
Устанавливаем и подготавливаем окружение системы построенной на базе дистрибутива
Arch Linux
использующего репозиторий основанный на .tar.pkg.* пакетах.
Пакеты необходимые для дальнейшего создания окружения:
Внимание! Если система загружена в режиме полного сохранения, то внесенные изменения в систему будут сохранены. Если режим загрузки другой, то рекомендуется воспользоваться "Сохранением изменений".
CONTAINER=NameContainer
PATH_CONTAINER=/home/${CONTAINER}
sudo mkdir -p ${PATH_CONTAINER}
sudo pacstrap -GM ${PATH_CONTAINER} base sudo apparmor
sudo mv ${PATH_CONTAINER}/etc/pacman.d/mirrorlist ${PATH_CONTAINER}/etc/pacman.d/mirrorlist_ublinux
sudo sed '/\[ublinux\]/{n;s/\/mirrorlist$/\/mirrorlist_ublinux/}' -i ${PATH_CONTAINER}/etc/pacman.conf
sudo sed '/\[modules\]/{n;s/\/mirrorlist$/\/mirrorlist_ublinux/}' -i ${PATH_CONTAINER}/etc/pacman.conf
sudo sed 's/^SigLevel.*/SigLevel = Never/' -i ${PATH_CONTAINER}/etc/pacman.conf
sudo sed 's/^CheckSpace.*/#CheckSpace/' -i ${PATH_CONTAINER}/etc/pacman.conf
sudo sed '/^#MAKEFLAGS/aMAKEFLAGS="-j$(($(nproc)+1))"' -i ${PATH_CONTAINER}/etc/makepkg.conf
sudo cp -f /etc/resolv.conf ${PATH_CONTAINER}/etc/
sudo cp -f /etc/hostname ${PATH_CONTAINER}/etc/
echo -e "\n127.0.0.1\t$(hostname)" | sudo tee -a ${PATH_CONTAINER}/etc/hosts
echo "%wheel ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee -a ${PATH_CONTAINER}/etc/sudoers.d/ubsudoers
curl -s "https://archlinux.org/mirrorlist/?country=RU&country=RU&protocol=https&use_mirror_status=on" | sed -e 's/^#Server/Server/' -e '/^#/d' | rankmirrors -n 5 - | sudo tee ${PATH_CONTAINER}/etc/pacman.d/mirrorlist
# Создать служебных пользователей приложений
sudo systemd-nspawn --directory=${PATH_CONTAINER}/ systemd-sysusers
# Создать служебные каталоги приложений
sudo systemd-nspawn --directory=${PATH_CONTAINER}/ systemd-tmpfiles --create
# Установить yay для работы с AUR
sudo systemd-nspawn --directory=${PATH_CONTAINER}/ pacman -Sy yay
# Установить компоненты для компиляции и обработчик звука
sudo systemd-nspawn --directory=${PATH_CONTAINER}/ yay -Syu base-devel pipewire-alsa pipewire-pulse pipewire-jack wireplumber
Где NameContainer
- имя контейнера (будет использовано: в названии каталога развёртывания системы, имени контейнера для запуска, имени хоста).
CONTAINER=NameContainer
PATH_CONTAINER=/home/${CONTAINER}
sudo systemd-nspawn --directory=${PATH_CONTAINER} bash -c "echo root:ublinux | chpasswd"
sudo systemd-nspawn --directory=${PATH_CONTAINER} bash -c "useradd -m -G wheel superadmin"
sudo systemd-nspawn --directory=${PATH_CONTAINER} bash -c "echo superadmin:ublinux | chpasswd"
XAUTH=/tmp/.Xauthority
touch ${XAUTH}
xauth nextract - "$DISPLAY" | sed -e 's/^..../ffff/' | xauth -f "${XAUTH}" nmerge -
CONTAINER=NameContainer
PATH_CONTAINER=/home/${CONTAINER}
sudo systemd-nspawn \
--bind-ro=/usr/lib/locale/locale-archive \
--bind-ro=/etc/locale.conf \
--bind-ro=/etc/localtime \
--bind=/dev/dri \
--bind=/dev/video0 \
--bind=/dev/video1 \
--bind=/run/user/${UID}/pulse:/run/pulse \
--bind-ro=/tmp/.Xauthority \
--directory=${PATH_CONTAINER} \
--setenv=DISPLAY=${DISPLAY} \
--setenv=XAUTHORITY=/tmp/.Xauthority \
--user=superadmin \
NameProgram
Запуск контейнера с сервисами systemd:
CONTAINER=NameContainer
PATH_CONTAINER=/home/${CONTAINER}
sudo -v
sudo systemd-nspawn \
--boot \
--quiet \
--link-journal=try-guest \
--bind-ro=/usr/lib/locale/locale-archive \
--bind-ro=/etc/locale.conf \
--bind-ro=/etc/localtime \
--bind-ro=/tmp/.Xauthority \
--directory=${PATH_CONTAINER} &
Запуск приложений из контейнера с сервисами systemd:
CONTAINER=NameContainer
sudo systemd-run \
--machine=${CONTAINER} \
--setenv=DISPLAY=${DISPLAY} -P \
--setenv=XAUTHORITY=/tmp/.Xauthority \
--uid=superadmin \
--pipe \
NameProgram
где NameProgram
- имя запускаемой программы из контейнера.
Для отключения фильтра системных вызовов предложена переменная окружения:
SYSTEMD_SECCOMP=0
Увеличивается производительность приложений в контейнере.
Подключение к контейнеру дополнительных устройств, напимер:
Видео подсистема DRI:--bind=/dev/dri
Видеокамеры:--bind=/dev/video0 --bind=/dev/video1
Аудио устройства:--bind=/run/user/${UID}/pulse:/run/pulse
Подробрнее о создании ярлыков описано тут
Устанавливаем и подготавливаем окружение системы построенного на базе дистрибутива
Debian
использующего репозиторий основанный на .deb пакетах.
В примере представлен метод с созданием окружения
Debian
.
Пакеты необходимые для дальнейшего создания окружения установки .deb пакетов:
Внимание! Если система загружена в режиме полного сохранения, то внесенные изменения в систему будут сохранены. Если режим загрузки другой, то рекомендуется воспользоваться "Сохранением изменений".
CONTAINER=NameContainer
PATH_CONTAINER=/home/${CONTAINER}
sudo mkdir -p ${PATH_CONTAINER}
#Смотреть примечание 1
sudo pacman -S debootstrap debian-archive-keyring
sudo debootstrap --arch amd64 stable ${PATH_CONTAINER} http://ftp.ru.debian.org/debian/
sudo cp -f /etc/resolv.conf ${PATH_CONTAINER}/etc/
sudo cp -r /usr/lib/locale ${PATH_CONTAINER}/usr/lib/
#Смотреть примечание 2
sudo cp /etc/locale.conf /etc/localtime ${PATH_CONTAINER}/etc/
sudo cp -f /etc/hostname ${PATH_CONTAINER}/etc/
echo -e "\n127.0.0.1\t$(hostname)" | sudo tee -a ${PATH_CONTAINER}/etc/hosts
sudo systemd-nspawn --directory=${PATH_CONTAINER}/ apt update
sudo systemd-nspawn --directory=${PATH_CONTAINER}/ apt dist-upgrade -y
CONTAINER=NameContainer
PATH_CONTAINER=/home/${CONTAINER}
sudo mkdir -p ${PATH_CONTAINER}
# Смотреть примечание 1
sudo pacman -S debootstrap debian-archive-keyring
sudo debootstrap --arch amd64 stable ${PATH_CONTAINER} http://ftp.ru.debian.org/debian/
sudo cp -f /etc/resolv.conf ${PATH_CONTAINER}/etc/
sudo cp -r /usr/lib/locale ${PATH_CONTAINER}/usr/lib/
# Смотреть примечание 2
sudo cp /etc/locale.conf /etc/localtime ${PATH_CONTAINER}/etc/
sudo cp -f /etc/hostname ${PATH_CONTAINER}/etc/
echo -e "\n127.0.0.1\t$(hostname)" | sudo tee -a ${PATH_CONTAINER}/etc/hosts
sudo systemd-nspawn --directory=${PATH_CONTAINER}/ apt update
sudo systemd-nspawn --directory=${PATH_CONTAINER}/ apt dist-upgrade -y
Где:
amd64 - архитектура развёртываемого окружения, 64 бит. Для 32-бит необходимо указать i386.
stable - кодовое имя debian-подобного дистрибутива. Чтобы установить Debian 10, нужно указать buster, для Ubuntu 22.04 - jammy и так далее.
/home/debian - каталог в котором будет развёрнуто окружение.
http://ftp.ru.debian.org/debian/ - веб-сервер с необходимым дистрибутивом.
ОС | Кодовое имя |
---|---|
Debian 11 | bullseye |
Debian 10 | buster |
Debian 9 | stretch |
Ubuntu 22.10 | kinetic |
Ubuntu 22.04 | jammy |
Ubuntu 20.04 | focal |
Дистрибутив | URL зеркала репозитория |
---|---|
Debian | http://ftp.ru.debian.org/debian/ |
Ubuntu | https://mirror.yandex.ru/ubuntu/ |
Примечание 1
При развёртывания окружения на базе Ubuntu-системы следует использовать ubuntu-keyring вместо debian-archive-keyring
Примечание 2
При отсутствии файла localtime необходимо установить временную зону в Настройках UBLinux. Затем следует повторить команду.
CONTAINER=NameContainer
PATH_CONTAINER=/home/${CONTAINER}
sudo systemd-nspawn --directory=${PATH_CONTAINER} bash -c "echo root:ublinux | chpasswd"
sudo systemd-nspawn --directory=${PATH_CONTAINER} bash -c "useradd -m superadmin"
sudo systemd-nspawn --directory=${PATH_CONTAINER} bash -c "echo superadmin:ublinux | chpasswd"
XAUTH=/tmp/.Xauthority
touch ${XAUTH}
xauth nextract - "${DISPLAY}" | sed -e 's/^..../ffff/' | xauth -f "${XAUTH}" nmerge -
CONTAINER=NameContainer
PATH_CONTAINER=/home/${CONTAINER}
sudo systemd-nspawn \
--bind-ro=/usr/lib/locale/locale-archive \
--bind-ro=/etc/locale.conf \
--bind-ro=/etc/localtime \
--bind=/dev/dri \
--bind=/dev/video0 \
--bind=/dev/video1 \
--bind=/run/user/${UID}/pulse:/run/pulse \
--bind-ro=/tmp/.Xauthority \
--directory=${PATH_CONTAINER} \
--setenv=DISPLAY=${DISPLAY} \
--setenv=XAUTHORITY=/tmp/.Xauthority \
--user=superadmin \
NameProgram
Запуск контейнера с сервисами systemd:
CONTAINER=NameContainer
PATH_CONTAINER=/home/${CONTAINER}
sudo -v
sudo systemd-nspawn \
--boot \
--quiet \
--link-journal=try-guest \
--bind-ro=/usr/lib/locale/locale-archive \
--bind-ro=/etc/locale.conf \
--bind-ro=/etc/localtime \
--bind-ro=/tmp/.Xauthority \
--directory=${PATH_CONTAINER} &
Запуск приложений из контейнера с сервисами systemd:
CONTAINER=NameContainer
sudo systemd-run \
--machine=${CONTAINER} \
--setenv=DISPLAY=${DISPLAY} \
--setenv=XAUTHORITY=/tmp/.Xauthority \
--uid=superadmin \
--pipe \
NameProgram
где NameProgram
- имя запускаемой программы из контейнера.
Для отключения фильтра системных вызовов предложена переменная окружения:
SYSTEMD_SECCOMP=0
Увеличивается производительность приложений в контейнере.
Подключение к контейнеру дополнительных устройств, напимер:
Видео подсистема DRI:--bind=/dev/dri
Видеокамеры:--bind=/dev/video0 --bind=/dev/video1
Аудио устройства:--bind=/run/user/${UID}/pulse:/run/pulse
Подробрнее о создании ярлыков описано тут
Устанавливаем и подготавливаем окружение системы построенного на базе дистрибутива
Fedora/RedHat
использующего репозиторий основанный на .rpm пакетах.
В примере представлен метод с созданием окружения
Fedora
.
Пакеты необходимые для дальнейшего создания окружения установки .deb пакетов:
Внимание! Если система загружена в режиме полного сохранения, то внесенные изменения в систему будут сохранены. Если режим загрузки другой, то рекомендуется воспользоваться "Сохранением изменений".
Для создания окружения/контейнера открыть терминал и ввести поочередно команды:
#!/usr/bin/env bash
# Задать имя контейнера
CONTAINER="NameContainer"
# Установить архитектуру
ARCH="x86_64"
# Задать путь контейнера
PATH_CONTAINER="/home/${CONTAINER}"
# Создать каталог по указанному пути
sudo mkdir -p "${PATH_CONTAINER}"
#Указать версию дистрибутива Fedora (версии дистрибутивов могут отличаться)
RELEASEVER=38;
#Выбрать репозиторий
URL_REPO="https://download.fedoraproject.org/pub"
# или
#URL_REPO="https://mirror.yandex.ru"
# Установка базовых пакетов
sudo rpm -i --nodeps --force --nosignature --root=${PATH_CONTAINER} ${URL_REPO}/fedora/linux/releases/${RELEASEVER}/Everything/${ARCH}/os/Packages/f/fedora-repos-${RELEASEVER}-1.noarch.rpm
sudo dnf --installroot=${PATH_CONTAINER} \
--releasever=${RELEASEVER} \
--setopt=install_weak_deps=false \
--setopt=keepcache=true \
--assumeyes \
--nodocs \
--nogpgcheck \
install system-release dnf systemd passwd rtkit policycoreutils audit kbd zchunk sudo systemd-udev rootfiles less iputils deltarpm sqlite lz4 vim-minimal
# Включить доступ к свободному и несвободному репозиторию
URL_REPO_RPMFUSION="https://mirrors.rpmfusion.org"
# или
#URL_REPO_RPMFUSION="https://mirror.yandex.ru/fedora/rpmfusion"
# Установка пакетов из RPM Fusion
sudo dnf --installroot=${PATH_CONTAINER} \
--releasever=${RELEASEVER} \
--setopt=install_weak_deps=false \
--setopt=keepcache=true \
--assumeyes \
--nodocs \
--nogpgcheck \
install ${URL_REPO_RPMFUSION}/free/fedora/rpmfusion-free-release-${RELEASEVER}.noarch.rpm ${URL_REPO_RPMFUSION}/nonfree/fedora/rpmfusion-nonfree-release-${RELEASEVER}.noarch.rpm
# Добавить конфигурацию в dnf.conf:
sudo tee -a ${PATH_CONTAINER}/etc/dnf/dnf.conf << 'EOF'
install_weak_deps=false
keepcache=true
tsflags=nodocs
EOF
# Настроить первый запуск через systemd-firstboot:
sudo systemd-firstboot \
--root=${PATH_CONTAINER} \
--locale=ru_RU.UTF-8 \
--keymap=ru \
--hostname=${CONTAINER} \
--setup-machine-id
Где NameContainer
- имя контейнера (будет использовано: в названии каталога развёртывания системы, имени контейнера для запуска, имени хоста).
CONTAINER=NameContainer \
PATH_CONTAINER=/home/${CONTAINER} \
sudo systemd-nspawn \
--bind-ro=/usr/lib/locale/locale-archive \
--bind-ro=/etc/locale.conf \
--bind-ro=/etc/localtime \
--bind-ro=/etc/vconsole.conf \
--bind-ro=/etc/hostname \
--bind-ro=/etc/resolv.conf \
--bind-ro=/etc/hosts \
--directory=${PATH_CONTAINER}
Где NameContainer
- имя контейнера.
CONTAINER=NameContainer \
PATH_CONTAINER=/home/${CONTAINER} \
chroot ${PATH_CONTAINER} /usr/bin/env -i \
HOME=/root TERM="$TERM" PS1='\u:\w\$ ' \
PATH=/bin:/usr/bin:/sbin:/usr/sbin \
/bin/bash --login
Где NameContainer
- имя контейнера.
Для выхода из окружения следует зажать клавишу CTRL и трижды нажать на клавишу ].