LINUX.ORG.RU

Избранные сообщения macumazan

Пользовательские сервисы OpenRC: инструкция по применению

Статьи — Desktop

Как я уже писал раньше, в систему инициализации OpenRC недавно добавлена возможность запускать сервисы в пользовательской сессии. В этой статье я покажу, как этим пользоваться, на примере pipewire в Alpine Linux.

Что было раньше

Раньше в пакете с pipewire поставлялся (и до сих пор поставляется) скрипт /usr/libexec/pipewire-launcher, который предлагалось прописывать в конфиге sway. Особенность этого сетапа в том, что после остановки Sway все запущенные им в background процессы оставались висеть в памяти, и перед последующим запуском их предлагалось прибивать с помощью pkill. Не говоря уже про полное отсутствие логов, их не было.

Чтобы решить эти проблемы, нужно запускать pipewire в пользовательской сессии под супервизором. Собственно я так и делал при помощи s6, однако добавление пользовательских сервисов в OpenRC, а также соответствующих конфигов в пакеты в репозиториях Alpine позволяет отказаться от этих скриптов и пользоваться тем, что поддерживают мейнтейнеры дистрибутива.

Версии

Пользовательские сервисы были добавлены в OpenRC 0.60. Версия в репозиториях Alpine Edge на данный момент - 0.60.1. Используется pipewire 1.4.1 и wireplumber 0.5.8.

Зависимости

Для поддержки пользовательских сервисов нужно установить пакет openrc-user. Он содержит необходимые исполняемые файлы (openrc-user и openrc-user-pam), а также PAM-модуль pam_openrc.so.

PAM

Есть два способа запуска пользовательской сессии OpenRC: как сервис

$ doas rc-service user.${USER} start

и через PAM.

Предпочтительным является второй способ. Для того чтобы им воспользоваться, нужно подключить соответствующий PAM-модуль стандартным способом:

$ cat /etc/pam.d/base-session 
# ...
-session optional pam_rundir.so
session optional pam_openrc.so

Если $XDG_RUNTIME_DIR не создается автоматически, то нужно об этом позаботиться. Для этого я применяю еще один модуль pam-rundir (есть в репозиториях).

Перезагружаемся и проверяем, что пользовательская сессия работает:

$ rc-status --user

После этого можно запускать сервисы.

Запуск сервиса

В репозитории Alpine Linux уже начали добавлять файлы конфигурации пользовательских сервисов для разных пакетов, поэтому руками ничего писать не надо (если вы конечно не хотите запилить что-то свое кастомное):

$ rc-update --user add dbus default

Эта команда заставляет dbus автоматически запускаться при старте пользовательской сессии, являясь аналогом systemctl --user enable dbus. Симлинки на включенные сервисы располагаются в папке ~/.config/rc/runlevels, а сами конфиги лежат в /etc/user/init.d и /etc/user/conf.d.

Переменные окружения

DBus относится к типу сервисов, которые должны устанавливать особую переменную окружения, в данном случае $DBUS_SESSION_BUS_ADDRESS, для всех кто от них зависит. К таким зависящим относятся пользовательские сервисы и Sway. Раньше был только Sway, и подобная зависимость легко решалась тем что он запускался как потомок dbus-run-session:

cat /usr/share/wayland-sessions/sway.desktop | grep dbus
Exec=dbus-run-session /usr/bin/sway

Однако сейчас такой фокус не пройдет, потому что пользовательские сервисы запускаются независимо от Sway. И больше того, в OpenRC пока нет механизма, позволяющего сервисам подтягивать переменные окружения из их зависимостей. PR создан, но пока не смержен, поэтому $DBUS_SESSION_BUS_ADDRESS надо устанавливать вручную. Для этого предлагается использовать следующий кусок кода:

$ source /etc/user/conf.d/dbus

$ # в файле содержится вот такое:
$ cat /etc/user/conf.d/dbus
export DBUS_SESSION_BUS_ADDRESS="unix:path=$XDG_RUNTIME_DIR/bus"

Прописываем его перед запуском Sway, убрав там dbus-run-session, а также в conf.d всех релевантных пользовательских сервисов.

pipewire

Наконец, после всех этих манипуляций, можно запускать pipewire:

$ rc-update --user add pipewire default
$ rc-update --user add wireplumber default
$ rc-update --user add pipewire-pulse default

…работает! Для себя я сделал вывод, что несмотря на то что реализованы еще не все желаемые фичи, такой сетап уже вполне пригоден к использованию. На данный момент пользовательские сервисы добавлены для следующих пакетов в репозиториях Alpine:

  • gnome-keyring
  • kanshi
  • pipewire
  • wireplumber
  • wlsunset
  • dbus

 , , ,

Lrrr
()

systemd-resolved не работает с OpenVPN

Форум — Desktop

Всем привет,

Устав от постоянных глюков и костылей решил сделать чтобы OpenVPN резолвил имена через systemd-resolved, по итогу получил не работающий клиент.

Порядок действий был следующий:

1. Установил update-systemd-resolved ( https://github.com/jonathanio/update-systemd-resolved)

2. На стороне OpenVPN в своем конфиге прописал:

push "dhcp-option DNS 10.90.0.1"
push "dhcp-option DOMAIN corp.domain.net"

3. После старта клиента вижу следующее:

$ resolvectl status

[...]

Link 31 (tun0)
      Current Scopes: DNS LLMNR/IPv4 LLMNR/IPv6
DefaultRoute setting: yes
       LLMNR setting: yes
MulticastDNS setting: no
  DNSOverTLS setting: no
      DNSSEC setting: allow-downgrade
    DNSSEC supported: no
  Current DNS Server: 10.90.0.1
         DNS Servers: 10.90.0.1
          DNS Domain: corp.domain.net

[...]

Link 2 (enp42s0)
      Current Scopes: DNS LLMNR/IPv4 LLMNR/IPv6
DefaultRoute setting: yes
       LLMNR setting: yes
MulticastDNS setting: no
  DNSOverTLS setting: no
      DNSSEC setting: allow-downgrade
    DNSSEC supported: no
  Current DNS Server: 192.168.35.1
         DNS Servers: 192.168.35.1

После этого не резолвится имя server.corp.domain.net. Сами сервера в VPN пингуются, все остальное резолвится также норм.

Где может быть проблема?

 ,

alex07
()

gentoo. Как пересобрать пакет с зависимостями ?

Форум — Desktop

gentoo. Как пересобрать пакет с зависимостями ?

Вот типа пересобрать пакеты, у которых в зависимостях glibc

emerge -1 $(equery d glibc | sed "s/^/=/")

А как пересобрать все пакеты, которые требуются для функционирования целевого пакета ? т.е

emerge -C awesome
emerge -c; 
┌─[user@foo]─[~]
└──╼ emerge -pv awesome
These are the packages that would be merged, in order:
Calculating dependencies... done!
[ebuild  N     ] dev-libs/libxdg-basedir-1.1.1  USE="-doc -static-libs" 0 KiB
[ebuild  N     ] dev-libs/libev-4.15-r1  USE="-static-libs" ABI_X86="(64) -32 (-x32)" 0 KiB
[ebuild  N     ] x11-libs/startup-notification-0.12  USE="-static-libs" 0 KiB
[ebuild  N     ] x11-misc/gxmessage-2.20.1  0 KiB
[ebuild  N     ] x11-wm/awesome-3.4.15  USE="dbus -doc -gnome" 0 KiB

т.е узнать все зависимости пакета и пересобрать все пакеты аля

dev-libs/libxdg-basedir-1.1.1
dev-libs/libev-4.15-r1
x11-libs/startup-notification-0.12
x11-misc/gxmessage-2.20.1
x11-wm/awesome-3.4.15

 

bryak
()

Tcl/tk. GUI на SVG-виджетах. Часть I

Статьи — Разработка

Хочу представить свой пет-проект . Создан он в недрах tсl/tk, который, по моему мнению, многие недооценивают. В статье речь пойдет не столько о tcl (хотя все примеры и сам проект написаны именно на нем), а сколько о tk.

( читать дальше... )

 , , , ,

TclTk
()

В OpenRC добавлены пользовательские сервисы

Новости — Linux General
Группа Linux General

OpenRC – система инициализации для Linux-систем, которая поставляется вместо systemd в таких дистрибутивах как Gentoo и Alpine Linux.

В ветку master репозитория openrc добавлена функциональность, необходимая для запуска сервисов в сессии пользователя с помощью этой системы инициализации.

Конфигурационные файлы и скрипты инициализации пользовательских сервисов размещаются в следующих папках:

/etc/user/init.d
${XDG_CONFIG_HOME}/rc/init.d

/etc/user/conf.d
${XDG_CONFIG_HOME}/rc/conf.d

${XDG_CONFIG_HOME}/rc/rc.conf
${XDG_CONFIG_HOME}/rc/runlevels

Все поставляемые с openrc утилиты, такие как собственно openrc и rc-*, получили дополнительную опцию --user / -U для работы с пользовательскими сервисами.

Данные изменения вероятно войдут в ещё не выпущенный релиз openrc 0.57.

>>> коммит с документацией

 

Lrrr
()

Покидайте vimrc :3

Форум — Development

Vimrc-porn тип

 

marataziat
()

Как обновлять Linux-сервер на проде?

Форум — Admin

Есть Linux-сервер на проде: Ubuntu 24.04 LTS.

На машине запущен сайт.

Люди вообще обновляют такие машины командами apt update && apt upgrade ?

Или запустили сайт, и забили на машину? И работает себе сайт.

Потому что была у меня история с обновлением: после апдейта функция сайта на JS стала время на 1 час назад возвращать – это было серьезной проблемой для сайта.

Перемещено hobbit из general

 ,

truebin
()

Iptables + cgroup path - нашел воспроизводимый баг

Форум — Admin

Нашел баг в iptables, при рестарте сервиса перестает работать iptables match его cgroup path.

Есть мнения?

Пишу сразу как shell скрипт чтоб было можно копи пастить. Скрипт исполняем на свежей Ubuntu 24.04, можно и в виртуалке.

# функция тестирования
webtest() { curl 127.0.0.1 -m1 &>/dev/null && echo WEB OK || echo WEB FAIL; }

systemctl restart nginx
iptables -F OUTPUT
# будем матчить nginx и банить ответы от него.
iptables -A OUTPUT -m cgroup --path system.slice/nginx.service -m comment --comment rule1 -j DROP
webtest
# => WEB FAIL , правильный результат
systemctl stop   nginx.service
# здесь system.slice/nginx.service исчезает из дерева cgroup..
systemctl start  nginx.service
webtest 
# => WEB OK , неправильно!!! Видимо , когда по новой создался cgroup path, то старое правило iptables перестало его матчить..

#Теперь методы исправления. Времена чудес..

#method 1.
    # Произойдет рефреш маппинга cgroup path в iptables. Необъяснимо, но работает.
    iptables -Z OUTPUT 1
    webtest
    # => WEB FAIL , правильный резльтат

#method 2
    # удалим старое правило (rule1) и добавим новое аналогичное (rule2). Произойдет рефреш маппинга cgroup path в iptables.
    iptables -D OUTPUT -m cgroup --path system.slice/nginx.service -m comment --comment rule1 -j DROP
    iptables -A OUTPUT -m cgroup --path system.slice/nginx.service -m comment --comment rule2 -j DROP
    webtest
    # => WEB FAIL , правильный результат

 , ,

Bers666
()

Ограничение прав пользователей в Sieve

Форум — Admin

Есть сервер dovecot с поднятой sieve авторизация в коте через AD он же выступает сервером авторизации для postfix Если отдельная учетка глобал которая позволяет через userglobal зайти в любой ящик под единым паролем. Сейчас любой пользователь может сам править свои фильтры в sieve и это не подходит. Задачка минимум оставить право редактировать фильтры только если в ящик зашли через userglobal Задача максимум еще дать править свои фильтры пользователям у которых есть определенный атрибут в AD или скажем он состоит в отдельной группе AD

Прошу помощи, совета или просто кинуть в меня документацией о том как сделать. Немогу найти ничего подобного.

 , ,

wer_wolf
()

Новогоднее..Итераторы для Tcl

Форум — Development

тут кто-то предлагал делиться новогодними подарками, ну так вот оно: https://chiselapp.com/user/nektomk/repository/fun/home.

выдалось время, набросал прототип итераторов в Tcl и даже слегка покрыл тестами. Пока-что это скажем так «api preview», то есть посмотреть/оценить насколько получается удобно и выразительно.

извините, из документации пока только cheats на основной странице, тесты и две «демки» в репозитарии;

# "lines of code" :-)
# iter`s concatenations demo
set loc [ fold { accum x } {
    # simple, count elements 
    incr accum
    # from other iterator
    # [] - combination sign
} 0 [] filter { x } {
    # filter elements
    set x [ string trim $x ]
    if { $x == {} || [ string index $x 0 ] == {#} } {
	# empty lines and lines started from # (comment)
	# wil drop
	return false
    }
    return true
    # from file
} <| $filename ]

Цель: чтобы удобно было писать на Tcl в функциональном стиле; В планах сделать внутри функциональную и комбинаторную оптимизацию.

в более дальних планах на следующий год: добавить операцию [] (та которая в функ. нотации точка по центру) уже непосредственно в парсер и исполнятор tcl.

 happy new year, , ,

MKuznetsov
()

Автоматический патч ебилда

Форум — General

Когда нужно пропатчить сорцы всё решается просто: кладем патч в /etc/portage/patches/<имя_пакета> и он автоматом применяется перед сборкой.

Есть ли какой-нибудь способ автоматического применения патча не к сорцам, а к ебилду?

 , ,

Chord
()

Как узнать, сколько места в свопе занимают файлы из tmpfs?

Форум — Admin

Потребление свопа программами посмотреть просто: достаточно запустить, например, smem -s swap, или своим скриптом распарсить /proc/$PID/smaps интересующих процессов и просуммировать засвопленное.

Но в моём случае smem -s swap показывает нули, и своп, по всей видимости, потребляют файлы из tmpfs (идёт расчёт и их там много). Есть ли какой-то способ получить статистику, какие файлы и по скольку занимают в свопе? Будет достаточно наводки на файлы из /proc или /sys, которые можно самому распарсить, если таковые имеются.

UPD: Пока я заметил, что у tmpfs при вытеснении файлов в своп уменьшается Used в df, так что можно отследить общую сумму. Неа, показалось

 ,

annulen
()

Создание образа docker

Форум — Admin

Добрый день! Дано: Astra Linux 1.7,

docker 1.5-2  all transitional package
docker-buildx 0.10.5astra1 amd64 Docker CLI plugin for extended build capabilities with BuildKit
docker.io 24.0.2+astra16 amd64 Linux container runtime

С помощью команд скачала и сохранила простейший образ для обучения:

docker pull hello-world
docker images
docker save hello-world > hworld.tar

Вижу, что в tar архиве расположен исполняемый файл, при запуске которого в текущей системе отображается «Hello World» Вопрос - как сделать свой собственный образ с нуля, если есть только исполняемый файл?

https://www.dmosk.ru/miniinstruktions.php?mini=docker-base-image В этой статье написано, что из репозитория ставится система. А как простейший образ без репозитория сделать?

Перемещено hobbit из general

 ,

marip68
()

Bird 2.14

Новости — Интернет
Группа Интернет

Вышла новая версия службы динамической маршрутизации bird 2.14.

Основные нововведения:

  • Добавлена подсистема MPLS
  • Поддержка BGP/MPLS VPNs (RFC 4364)
  • Возможность управления неизвестными атрибутами в протоколе BGP
  • Имеется экспериментальная поддержка агрегирования маршрутов

>>> Подробности

 , , ,

ne-vlezay
()

Bird и ospf export filter

Форум — Admin

Я как-то задавал вопрос про фильтр в Bird: Bird 2.14 (комментарий). Ответ в обсуждении не родился, но недавно я на него наткнулся. В вопросе остутствовал неожиданно ключевой момент, секция interface в секции area:

filter export_OSPF {
   if net ~ 192.168.0.0/16 then reject;
}

protocol ospf v2 ospfv4 {
   ipv4 {
     export filter export_OSPF;
   }
   area 0 {
     interface "eth*" {
       type broadcast;
     }
   }
}

И вот в этой ситуации сети, поднятые на интерфейсах, попадающих под шаблон «eth*», банально игнорировались фильтром. Достаточно было указать interface "eth0", либо а-ля interface 10.0.0.0/30, где нейбор, и фильтр заработал. И вроде нигде не написано, что это важно.

В архивную тему добавиь не получилось, но так наверное тоже сойдёт, поиском искаться будет.

 ,

AS
()

Dovecot: проблема с общими почтовыми ящиками

Форум — Admin

Здравствуйте.
Настроен почтовый сервер с dovecot, в котором настроен совместный доступ к почтовым ящикам пользователей:

    namespace shared {  
        type = shared  
        separator = /  
        location = maildir:/opt/%%d/%%n:INDEX=%h/shared/%%u:INDEXPVT=%h/shared/%%u:LAYOUT=fs  
        subscriptions = yes  
        list = children  
    }  

Команда LIST (IMAP) возвращает ошибку: Mailbox doesn’t exist: shared (0.001 + 0.000 secs).
Она же, судя по всему, является причиной того, что Outlook после каждой синхронизации оставляет журнал в «Ошибках синхронизации» c сообщением о невозможности синхронизировать папку shared.
Папки внутри shared (в стиле shared/user@example.ru) синхронизируются нормально.
Как добиться от dovecot того, чтобы он возвращал информацию о родительской папке shared без ошибки, например, как о пустой?

 ,

Strateg_V
()

zram — lz4, lzo или zstd?

Форум — General

Тем, кто использует zram. Какой алгоритм компрессии используете? И какой у вас выхлоп zramctl?

$ zramctl 
NAME       ALGORITHM DISKSIZE   DATA COMPR TOTAL STREAMS MOUNTPOINT
/dev/zram1 lzo-rle     590,7M 288,6M 51,7M 54,4M       2 [SWAP]
/dev/zram0 lzo-rle     590,7M 287,8M 51,7M 54,3M       2 [SWAP]

 , , ,

greenman
()

Как обрабатывать события ACPI?

Форум — Admin

На машине у меня две аудиокарты:

2b:00.1 Audio device: NVIDIA Corporation TU116 High Definition Audio Controller (rev a1)
	Subsystem: Gigabyte Technology Co., Ltd TU116 High Definition Audio Controller
2d:00.4 Audio device: Advanced Micro Devices, Inc. [AMD] Starship/Matisse HD Audio Controller
	Subsystem: Micro-Star International Co., Ltd. [MSI] Starship/Matisse HD Audio Controller
. Фишка в том, что вывод звука на наушники происходит только через вторую, а если их вытащить и снова вставить, то пульса теряет из виду встройку. Помогает киляние пульсы и я хочу привязать это действие к событию «наушники подключены». Демон acpi работает, как там пишутся обработчики таких вещей и можно ли их написать?

 ,

LongLiveUbuntu
()

Как запустить контейнер в непривилегированном режиме?

Форум — Admin

Прочитал статью, испугался и хочу запустить от рута непривилегированный контейнер, как описано тут:
https://linuxcontainers.org/lxc/getting-started/#creating-unprivileged-contai...
Контейнер у меня уже есть, как привилегированный он запускается.

Я добавил файлы:
# cat /etc/subuid
root:1000000:65536
# cat /etc/subgid
root:1000000:65536
и строчки
# grep id /var/lib/lxc/guestos/config
lxc.idmap = u 0 100000 65536
lxc.idmap = g 0 100000 65536

сообщение об ошибке такое:
«newuidmap: uid range [0-65536) -> [100000-165536) not allowed»

# zgrep CONFIG_USER_NS /proc/config.gz
CONFIG_USER_NS=y

нашел багу:
https://bugs.gentoo.org/615298

выполнил команды
chmod 4755 /usr/bin/newuidmap
chmod 4755 /usr/bin/newgidmap

но ничего не поменялось.

journalctl -u lxc@guestos.service
после перезагрузки хоста пишет такое:

jan 20 02:08:12 hostos systemd[1]: Started Linux Container guestos.
jan 20 02:08:12 hostos lxc-start[6926]: lxc-start: guestos: conf.c: lxc_map_ids: 2999 newuidmap failed to write mapping "newuidmap: uid range [0-65536) -> [100000-165536) not allowed": newuidmap 6932 0 100000 65536
jan 20 02:08:12 hostos lxc-start[6926]: lxc-start: guestos: start.c: lxc_spawn: 1708 Failed to set up id mapping.
jan 20 02:08:12 hostos lxc-start[6926]: lxc-start: guestos: start.c: __lxc_start: 1939 Failed to spawn container "guestos"
jan 20 02:08:12 hostos lxc-start[6926]: lxc-start: guestos: conf.c: lxc_map_ids: 2999 newuidmap failed to write mapping "newuidmap: uid range [0-65536) -> [100000-165536) not allowed": newuidmap 6949 0 100000 65536 6>
jan 20 02:08:12 hostos lxc-start[6926]: lxc-start: guestos: conf.c: userns_exec_1: 4352 Error setting up {g,u}id mappings for child process "6949"
jan 20 02:08:12 hostos lxc-start[6926]: lxc-start: guestos: tools/lxc_start.c: main: 330 The container failed to start
jan 20 02:08:12 hostos lxc-start[6926]: lxc-start: guestos: tools/lxc_start.c: main: 336 Additional information can be obtained by setting the --logfile and --logpriority options
jan 20 02:08:12 hostos systemd[1]: lxc@guestos.service: Main process exited, code=exited, status=1/FAILURE
jan 20 02:08:12 hostos systemd[1]: lxc@guestos.service: Failed with result 'exit-code'.

Вопросы:
1) почему не работает?
2) что сделать, чтобы заработало?

 

Einstok_Fair
()

GNU screen в XTerm: как заставить отображаться все 256 цветов?

Форум — Desktop

Восхищен возможностями GNU screen, но никак не могу заставить в нем работать все 256 цветов (очень нужно для цветовых схем VIM'а и Mutt'а).

- xterm версии 200 собран с 256 цветами, TERM установлен в xterm-256color, с помощью строчки "XTerm*termName: xterm-256color" в .Xdefaults. Если использовать другие значения переменной TERM, то 256 цветов в описаниях terminfo уже не будет. А так:
$ xterm -v
XTerm(200)
$ infocmp|grep -i colors#
colors#256, cols#80, it#8, lines#24, ncv#32, pairs#256,
Вывод теста 256colors2.pl (лежит в тарболле с исходными кодами XTerm) тоже верен.

- screen версии 4.0.2 собран с поддержкой 256 цветов (опция configure --enable-colors256).
$ screen -v
Screen version 4.00.02 (FAU) 5-Dec-03

Теперь запускаем из под xterm'а screen и
$ infocmp|grep -i colors#
colors#8, cols#80, it#8, lines#24, ncv#3, pairs#64,
$ echo $TERMCAP|grep Co
:Co#8:pa#64:AF=\E[3%dm:AB=\E[4%dm:op=\E[39;49m:AX:\

Шишъ! Причем вывод теста 256colors2.pl во-первых производится почти сразу, в отличии от первого случая, а во вторых _АНАЛОГИЧЕН_ первому случаю! Строчка в .screenrc "termcapinfo xterm-256color 'Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm'" не помогает. Также в xterm команда echo -e "\e[1;34mstring" выводит строчку string ярко синим цветом, а эта же команда уже в screen'е, запущенном из этого xterm'а выводит эту же строчку уже темно синим цветом, что ИМХО неверное поведение.

Очень не хочется специально для XTerm делать terminfo описание терминала screen.xterm-256color, хочется разрулить все опциями screen'а termcap, terminfo и termcapinfo. Слил и перечитал весь список рассылки screen-users. Описанные там рецепты не помогли. Сам я не являюсь terminfo гиком, поэтому прошу помощи у всемогущего all. ОС естественно Gentoo GNU/Linux.

P.S. Также буду очень благодарен доброму человеку за ссылку на электронную англоязычную версию книги O'Reilly "Termcap and Terminfo". В Сети в свободном доступе не нашел. В пиринговых сетях есть, но буквально у пары человек, которых постоянно нет в онлайне. Для модераторов: это не варез, книга вышла 15 лет назад и сегодня ее уже не достать в бумажном виде в России.

gentoosiast
()