LINUX.ORG.RU
ФорумAdmin

Запуск программ с GUI (графическим интерфейсом) из chroot. Новогодний рецепт.

 ,


2

3

Мне понадобился Hexchat. Как-то привык к нему. Но в новых дистрах он требует старый gtk+2. Решил на отдельном диске завести ещё один дистрибутив, но без установки.

Для примера был взят дистрибутив Calculate Linux 2024 года.

  1. Грузимся с Live ISO, Создаём отдельный раздел для системы, монтируем, допустим в:

mount /dev/sda8/ /mnt/d1

И копируем файлы с Live ISO Linux на этот отдельный раздел (допустим ext4), с опцией -a

cp -a /bin /mnt/d1 и т.д. (/mnt /media лучше создать вручную, дабы избежать рекурсии :) run, proc, sys копировать не надо, но можно создать эти директории)

  1. Загружаемся в основную систему.

  2. Ставим на хост:

emerge x11-apps/xhost

Выполняем на хосте:

export DISPLAY=:0 xhost +local:

  1. Делем chroot

(Может, придется поставить права на диск вроде chmod 777 /dev/sdaХ (но 777 я, конечно, круто взял :) первое что пришло в голову в качестве примера. Решайте сами, какие права нужны вам))

mount /dev/sda8 /mnt/d1

mount --rbind /dev /mnt/d1/dev

mount --make-rslave /mnt/d1/dev

mount -t proc /proc /mnt/d1/proc

mount --rbind /sys /mnt/d1/sys

mount --make-rslave /mnt/d1/sys

mount --rbind /tmp /mnt/d1/tmp

mount --bind /run /mnt/d1/run

chroot /mnt/d1 /bin/bash

. /etc/profile

export PS1="(chroot) $PS1"

(Можно продублировать в chroot, если что-то лишнее накрутили, как у меня это было:

export DISPLAY=:0)

su guest

hexchat

С Новым Годом!



Последнее исправление: AnonymUser (всего исправлений: 4)

Много лишнего, и есть куда менее кривые варианты. Во-первых, можно собрать snap/flatpak/appimage. Во-вторых, если использовать chroot-подобные подходы, то есть bwrap.

anonymous
()
Ответ на: комментарий от James_Holden

Да, но менее избыточно чем докер.

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

Aceler ★★★★★
()
Ответ на: комментарий от James_Holden

Как в голову пришло в тот момент, так и сделал. Я как памятку оставил, чтобы потом не искать.

Вариации и улучшения приветствуются.

(Первый велосипед был трехколесный, с деревянными ободами, у него не было цепи :))

AnonymUser
() автор топика
Ответ на: комментарий от AnonymUser

Вариации и улучшения приветствуются

Тогда вот два момента уже -

  1. можно разворачивать его просто в папке. На разделе я даже не знаю когда лучше, если создать раздел, на нем неизбежно будет пустое место, которое будет отъедено от основной системы и не будет использоваться. С папкой такой проблемы нет (/srv/chroot/debian12 к примеру)

  2. sudo debootstrap bookworm /srv/chroot/debian12 http://ftp.debian.org/debian/ вместо копирования содержимого LiveCD, развернет действительно минимальное окружение без ядра, прошивок и прочего, что тут не нужно. Но там не будет и графики, поэтому

  3. apt install hexchat в чруте установит сам hexchat и притянет все нужное, в том числе и gtk2.

  4. Придется добавить юзера, по умолчанию после debootstrap будет только рут: useradd guest

James_Holden ★★★★
()
Последнее исправление: James_Holden (всего исправлений: 2)
Ответ на: комментарий от Aceler

Задача: запускать процесс с hardened chroot изоляцией и при этом иметь возможность обновления его обычным менеджером пакетов, а настройки, логи, данные иметь в корневой системе, чтобы не искать..

Докер этого не решает.

Лет 20 назад в Gentoo пакетный менеджер emerge имел опцию –configure которая решала данную задачу. Сегодня пионеры ее похерили.

Пример как создавать правильный, необходимый и достаточный chroot для некого процесса:

anonymous
()
Ответ на: комментарий от Aceler

Идея создания минимального chroot, чтобы с помощью ldd посмотреть необходимые бинарю либы и скопировать только их. Вместо копирования всей системы.

anonymous
()

Можно вот так ещё, cdebootstrap + firejail

#Раз
sudo cdebootstrap stable chroot --flavour=minimal --include=hexchat http://deb.debian.org/debian/
#Два
firejail --chroot=chroot hexchat
#Всё!

А дальше можно этот чрут многократно переиспользовать, наваливать туда софта с которым в хосте возится лень, компилять, мусорить и прочее. Я часто так делаю :) Хотя один фиг основной хост обляпал dev пакетами, но это вина ленивой жопы

LINUX-ORG-RU ★★★★★
()

Мне кажется, ты дольше выяснял как это провернуть, чем скомпилил бы старые gtk и hexchat указав пути сборки в нужную директорию. Но я не пробовал. Может там реально проблема? (вот уж не думаю)

R_He_Po6oT ★★★★★
()
Ответ на: комментарий от u5er

Она и стоит. Только версия unupdatable из-за слабого бука. Калькулейт бинарный дистрибутив. Мне легче было скопировать. И в дистрибутиве уже лежат сертификаты нужные для guest.

Да, там необязательно для chroot всё копировать. Но главное знать - что можно не копировать.

AnonymUser
() автор топика

Чисто для информации - всё это можно делать через linux containers (LXC).

По крайней мере chroot и mount –bind будут автоматизированы. И там всё-таки изоляция получше за счет linux namespaces, ну там сеть отдельная и доступ к железу можно ограничить.

(GUI запускать приблизительно как ты написал, только это все в конфигах прописать можно).

MirandaUser2
()
Ответ на: комментарий от LINUX-ORG-RU

Хотя один фиг основной хост обляпал dev пакетами, но это вина ленивой жопы

Воистину! На своем железе, сделаем всё по уму, а потом будем делать как душа подскажет.

anc ★★★★★
()