LINUX.ORG.RU

Не работает часть функционала с OS в tixati запушенном в namespaces

 , , , ,


0

1

Напишу тут, потому что в admin полтора админа видимо заглядывают только, и один из них уже написал. тут может больше людей прочитает и даст совет.

В tixati, запущенном внутри сетевого пространства имён (ip netns), не работают пункты контекстного меню «Открыть файл» или «Открыть папку».

Я день убил гугля и мучая чат GPT, но последний давал только неработоспособные советы, а на замечания давал другие ломающиеся костыли. Но если он не соврал, то причина вот в чём:

Вкратце:

Изоляция namespace ломает связь с пользовательским D-Bus и systemd session, поэтому команды открытия файлов через контекстное меню не работают.

Подробнее:

Запущенное внутри namespace приложение не имеет доступа к пользовательской сессии D-Bus и системному менеджеру сессий (systemd user session), которые отвечают за обработку стандартных вызовов открытия файлов и папок через xdg-open или аналогичные сервисы.

В результате команда открытия файла из контекстного меню, которая требует взаимодействия с D-Bus (например, вызов файлового менеджера через D-Bus), не может установить соединение с активной сессией пользователя, так как DBUS_SESSION_BUS_ADDRESS либо отсутствует, либо доступ к сокету D-Bus заблокирован из-за изоляции namespace.

Кроме того, отсутствие запущенного systemd user instance и/или локального dbus-daemon внутри namespace делает невозможным выполнение этих операций.

Это цитаты нейросети, насколько они верные судить не могу. Я вообще в афиге, что эти namespaces вообще какую-то изолированную от всего среду делают. Я просто хотел пустить трафик tixati мимо vpn.

А ещё я не хочу плодить никаких костылей, из-за которых может сломаться простой запуск tixati в основном namespaces.

Прошу совета. Свои возможности я исчерпал.

Изоляция namespace ломает связь с пользовательским D-Bus и systemd session, поэтому команды открытия файлов через контекстное меню не работают.

Звучит как бред нейросети. Общение с dbus на локальной машине обычно идет через локальный файл-сокет, а не через сеть. Вот если ты еще в чрут пихаешь tixati, или делаешь отдельный pid namespace (для скрытия других запущенных процессов на машине от tixati) - вот тогда да, тогда я верю что возможны подобные проблемы.

Учитывая что chroot - это по факту mount namespace, нейросеть тебе просто упростила все namespace до одного слова и смешала всё в кучу.

Что в очередной раз доказывает, что полагаться на ответ нейросети можно только если ты хоть немного «в теме»

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

Спасибо! Я так и думал, что она бредит. А если я хоть немного понимаю в теме, я уже знаю что именно гуглить и нафиг мне эта нейросеть нужна. Бесполезный кусок г-вна. Я помню, как курил вопрос с заполнением mp3 тэгов, помогло только открытие тут темы. Нейросеть смогла помочь только ПОСЛЕ того, как я уже всё знал и решил ещё раз по приколу спросить - она выдала мне пасту моего же конспекта)) Видимо лор спарсила.

Возвращаясь к tixati, запускаю я его так:

ip netns exec pvt-net1 sudo -u hikikomori tixati

либо с sudo, либо предварительно вхожу в root:

sudo ip netns exec pvt-net1 bash

Всё это разумеется вручную, потому что как в скрипте запустить sudo без пароля я не распарсил.

И разумеется, у меня не меняется ФС и маунтпоинты при этом. Но tixati перестаёт мочь открыть файл. А это для меня архиважно. И что джелать я не понимаю. И если ИИ опять г-н совравши, то что же происходит на самом деле и как это исправить?

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

Я запустил так:

 ip netns exec pvt-net1 sudo -u hikikomori tixati

И оставил консоль открытой чтобы видеть ошибки. На попытки открыть файлы он ничего не пишет почему-то, а вот на попытку сделать бэкап Settings - Import/Export: Export conf to file выдал много одинаковых строк с ошибкой:

(tixati:2715): dconf-WARNING **: 12:31:29.277: failed to commit changes to dconf: Произошла ошибка при создании процесса командной строки «dbus-launch --autolaunch=445d5d8be1c44c6fb686e282daf905b4 --binary-syntax --close-stderr»: Дочерний процесс завершился с кодом 1

ps aux ничего дополнительного не даёт при попытках открыть файлы.

ps aux | grep tixati
root        2712  0.0  0.1  17868  4652 pts/6    S+   12:25   0:00 sudo -u hikikomori tixati
root        2714  0.0  0.0  17868  1208 pts/8    Ss   12:25   0:00 sudo -u hikikomori tixati
hikikomo+    2715 27.0 26.3 3557156 981076 pts/8  Rl+  12:25   4:50 tixati
hikikomo+   10899  0.0  0.1   6420  4036 pts/9    S+   12:43   0:00 grep tixati

Проблемы с любым файлом. вообще. из тысяч раздач ничего не открывается. Если запустить tixati в основном пространстве, то всё открывается.

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

может это поможет:

запускаю из-под себя:

$ dbus-launch --autolaunch=445d5d8be1c44c6fb686e282daf905b4 --binary-syntax --close-stderr
unix:path=/run/user/1000/bus

Там же, запускаю из-под рута:

$ su
Пароль: 
$ dbus-launch --autolaunch=445d5d8be1c44c6fb686e282daf905b4 --binary-syntax --close-stderr
dbus-launch: No existing session bus was found, and X11 autolaunch support was disabled at compile time.

Может кроме создания именного пространства и настройки маршрутизации нужно ещё прокинуть какие настройки для этого dbus-launch?

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

У тебя через sudo переменные окружения от рута какие-то наследуются. Попробуй вместо

sudo -u hikikomori
использовать
su -l hikikomori -c tixati

Pinkbyte ★★★★★
()
Последнее исправление: Pinkbyte (всего исправлений: 2)
Ответ на: комментарий от Pinkbyte
$ su -l hikikomori -c tixati

(tixati:184424): Gtk-WARNING **: 20:29:10.804: cannot open display: 


$ DISPLAY=:0 su -l hikikomori -c tixati

(tixati:184513): Gtk-WARNING **: 20:29:24.361: cannot open display: 

Команды вроде этих не помогли:

xhost +localhost
xhost +si:localuser:root
sudo xhost +si:localuser:$USER
hikikomori ★★★
() автор топика
Последнее исправление: hikikomori (всего исправлений: 1)
Ответ на: комментарий от hikikomori

Ещё такая вешь. tixati может вылететь. Но он сам себя перезапускает. и это получается не в namespace. а в обычном пространстве. И это плохо.

Метод namespace не то, чтобы такой удобный. Ещё одна проблема.

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

Проверь переменные окружения(запусти env вместо tixati) и убедись что нигде не упоминается root.

DISPLAY=:0 su -l hikikomori -c tixati

Так работать скорее всего не будет. Надо так:

su -l hikikomori -c 'env DISPLAY=:0 tixati'

Кавычки ВАЖНЫ!

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

Но он сам себя перезапускает. и это получается не в namespace. а в обычном пространстве

Потому что надо его службой запускать прямо в namespace - тогда он и перезапускаться будет в namespace. А твои игрища вручную естественно никуда не сохраняются.

Метод namespace не то, чтобы такой удобный. Ещё одна проблема.

Ну ты можешь сделать маркировку пакетов через iptables или по cgroup отмаршрутизировать(policy based routing). Но судя по задаваемым тобой вопросам - это тебе будет сделать не проще, чем namespace-ы освоить.

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

Спасибо, вот так запустилось и файлы в tixati запускаются.

НО видео идёт БЕЗ звука! =((( Не понос так золотуха.

При бэкапе ошибки летят в консоль те же. хотя сам файл бэкапа создаётся.

А может можно что-то прописать в ExecStart службы создания именного пространства, чтобы просто можно было запускать tixati?

Вот мой файл:

# put in /etc/systemd/system/netns-wg.service
# создание Namespace для tixati

[Unit]
Description=Start a VPN Network Namespace
After=network.target

[Service]
Type=oneshot
RemainAfterExit=true

# Environment=ИМЯ=ЗНАЧЕНИЕ

ExecStart=ip netns add pvt-net1
ExecStart=ip -n pvt-net1 link set lo up
ExecStart=ip link add to-pvt-net1 type veth peer name from-pvt-net1 netns pvt-net1
ExecStart=ip address add 10.99.99.4/31 dev to-pvt-net1
ExecStart=ip link set to-pvt-net1 up
ExecStart=ip -n pvt-net1 address add 10.99.99.5/31 dev from-pvt-net1
ExecStart=ip -n pvt-net1 link set from-pvt-net1 up
ExecStart=ip -n pvt-net1 route add default via 10.99.99.4
ExecStart=ip rule add from 10.99.99.5 table main priority 99
ExecStart=sysctl -w net.ipv4.conf.all.forwarding=1
ExecStart=iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
ExecStart=iptables -A FORWARD -s 10.99.99.5 -j ACCEPT
ExecStart=iptables -t nat -A POSTROUTING -s 10.99.99.5 -j MASQUERADE
ExecStart=iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 10.99.99.5
ExecStart=iptables -A FORWARD -d 10.99.99.5 -p tcp --dport 8080 -j ACCEPT

ExecStop=ip netns delete pvt-net1

[Install]
WantedBy=multi-user.target

Казалось бы, сюда можно добавить запуск tixati, но:

  1. ещё не загружены иксы, и tixati не запустится.
  2. мне нужно перед запуском сделать бекапом rsync. При запущенном tixati я не хочу трогать БД во избежания ошибок при изменении программой своих файлов в это время. Плюс, я не хочу бэкапить пока грузятся системные службы - это последовательное действие и сильно удлиняет загрузку. а когда я делаю бэкап через автозагрузку в systemsettings, то это происходит уже в иксах и мультизадачно фоновой задачей. И мне не приходится дожидаться икосв пока rsync закончит.

Хм, могу ли я добавить в скрипт указанный в systemsettings твой вариант su -l $USER -c 'env DISPLAY=:0 tixati' или он всё равно скрашится на запросе пароля?

hikikomori ★★★
() автор топика
Последнее исправление: hikikomori (всего исправлений: 4)
Ответ на: комментарий от Pinkbyte

Потому что надо его службой запускать прямо в namespace

А как? Я же указываю запуск в namespace, а он перезапускается в основном. даже если я сперва открою баш в namespace и уже оттуда запущу.

это тебе будет сделать не проще, чем namespace-ы освоить.

Надо же с чего-то начинать. Я уже научился создвать namespaces, и проталкивать там роутинг и запускатьв них программы. Осталось понять как настроить, чтобы необходимая программам не сетевая инфраструтура была доступна.

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

facepalm

Я в гугле такое решение нашёл, удивился, но не стал спрашивать, чтобы не накидывать нубских вопросов. Исправлено. Убрал в скрипт. Вызываю оттуда

# put in /etc/systemd/system/netns-wg.service
# создание Namespace для tixati

[Unit]
Description=Start a VPN Network Namespace
After=network.target

[Service]
Type=oneshot
RemainAfterExit=true

# Environment=ИМЯ=ЗНАЧЕНИЕ

ExecStart=/home/hikikomori/4bash/namespace1.sh
ExecStop=ip netns delete pvt-net1

[Install]
WantedBy=multi-user.target
~                                                   

А какая разница между ExecStart= и просто Exec= ?

Но оно же в итоге работает, namespace создаётся. Или не совсем?

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

как диагностировать, почему нет звука в запускаемых через tixati видео?

Не в обиду будет сказано, но если бы у тебя был чуть поболе уровень подготовки, я бы посоветовал strace -f. Но считай, что я промолчал.

Pinkbyte ★★★★★
()