ALT Linux Team development discussions
 help / color / mirror / Atom feed
From: Arseny Maslennikov <arseny@altlinux.org>
To: devel@lists.altlinux.org
Subject: [devel] I: rpm with sysusers support
Date: Sun, 13 Sep 2026 17:21:26 +0300
Message-ID: <aqaxL3b-6CWUcn0J@cello> (raw)

[-- Attachment #1: Type: text/plain, Size: 5588 bytes --]

Hi!

Скоро в сизифе очутится rpm, способный сам регистрировать uid и gid в
соответствии с директивами sysusers.d(5) в пакете, что наконец
положит начало всеобщей sysuserизации в сизифе.

Раньше мейнтейнеры пакетов, чтобы упаковать "системного пользователя" или
группу в пакет, были вынуждены дёргать shadow-utils из %pre в пакете, писать
для этого %pre-скрипт, ошибаться в этом скрипте, перепутывать секции, ставить
после команд "||:", забывать после команд "||:" и давить сапогом прочие грабли.
Мы движемся к тому, чтобы было достаточно упаковать в пакет
sysusers.d(5)-директиву, где всё ясно написано.

То есть, после того, как мейнтейнер избавляется от скриптов в пакете,
допустим, tcpdump:
>   diff --git a/tcpdump.spec b/tcpdump.spec
>   index 1093360f..92461532 100644
>   --- a/tcpdump.spec
>   +++ b/tcpdump.spec
>   @@ -48,18 +48,19 @@ headers, or just the ones that match particular criteria.
>    mkdir -p %buildroot%_datadir/%name
>    %makeinstall_std
>    install -pm755 *.awk %buildroot%_datadir/%name/
>   +mkdir -p %buildroot%_sysusersdir
>   +cat > %buildroot%_sysusersdir/tcpdump.conf <<EOConf
>   +u! tcpdump - "" /dev/null /dev/null
>   +EOConf
>    
>    %check
>    %make_build -k check
>    
>   -%post
>   -/usr/sbin/groupadd -r -f tcpdump
>   -/usr/sbin/useradd -r -g tcpdump -d /dev/null -s /dev/null -N tcpdump >/dev/null 2>&1 ||:
>   -
>    %files
>    %_bindir/*
>    %_datadir/%name
>    %_mandir/man?/*
>   +%_sysusersdir/*
>    %doc CHANGES CREDITS LICENSE README.md
>    
>    %changelog

уид по-прежнему зарегистрируется при установке пакета:
  % hsh-install -- systemd-sysusers-standalone
  <13>Sep 13 08:42:36 rpmi: systemd-modules-common-1:260.4-alt2 sisyphus+429117.100.1.2 1786389985 installed
  <13>Sep 13 08:42:36 rpmi: systemd-sysctl-common-1:260.4-alt2 sisyphus+429117.100.1.2 1786389985 installed
  <13>Sep 13 08:42:36 rpmi: systemd-utils-filetriggers-1:260.4-alt2 sisyphus+429117.100.1.2 1786389985 installed
  <13>Sep 13 08:42:36 rpmi: systemd-tmpfiles-common-1:260.4-alt2 sisyphus+429117.100.1.2 1786389985 installed
  <13>Sep 13 08:42:36 rpmi: libfdisk-2.39.2-alt3 sisyphus+423624.117600.34.1 1784348947 installed
  <13>Sep 13 08:42:37 rpmi: systemd-utils-standalone-1:260.4-alt2 sisyphus+429117.100.1.2 1786389985 installed
  % hsh-install -- tcpdump
  <13>Sep 13 08:42:58 rpmi: chrooted-0.3.12-alt1 sisyphus+327286.5300.14.1 1711487147 installed
  <13>Sep 13 08:42:58 rpmi: chrooted-resolv-0.3.1-alt2 sisyphus+276781.100.1.1 1625232499 installed
  <13>Sep 13 08:42:58 rpmi: libpcap0.8-2:1.10.5-alt1 sisyphus+373333.200.2.1 1738835147 installed
  Creating group 'tcpdump' with GID 999.
  Creating user 'tcpdump' (n/a) with UID 999 and GID 999.
  <13>Sep 13 08:42:58 rpmi: tcpdump-1:4.99.5-alt3 1789220264 installed

Да, в этом примере под псевдоусером ничего не ставится, и его создают не в
%pre, но на иллюстрацию это не влияет.

В пакете будут Provides: специального вида, а rpm сам будет их читать
и вовремя вызывать %__sysusers, чтобы та применила правило, закодированное
в этот Provides:.

Посмотреть директивы, которые будут применены при установке пакета, можно,
например, так:
    % rpm -q --queryformat '%{SYSUSERS}\n' tcpdump        
    u! tcpdump - "" /dev/null /dev/null

Это т. н. tag extension, которое декодирует "версию" из провайда.

Некоторые забавные факты:
* в providename (конкретно — его dsEVR) легко влезает base64-алфавит,
  включая разрешённую в версиях + и запрещённую в версиях /. От = удалось
  избавиться: недостающие биты до кратности 24 зануляются. Такие строки
  спокойно кладутся в теги пакета и спокойно же оттуда достаются. Мифы вокруг
  необходимости в base62 или чём-то особенном на этом фоне сильно поблёкли.
* Так как пока что у нас нет sysusers-программы с минимизированными зависимостями,
  от которой мог бы зависеть rpm, в комплектном macros.in %__sysusers
  определена в "true". В альтовом же platform.in, конфиге дистрорепозитория,
  взята альтернативо-управляемая ссылка "%_sbindir/systemd-sysusers".
  Что в репозитории имеем, то сюда и пишем.
  У кого нет systemd — у тех это будет (будет же?) симлинк
  на systemd-sysusers.standalone.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

             reply	other threads:[~2026-09-13 14:21 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-13 14:21 Arseny Maslennikov [this message]
2026-09-13 14:24 ` [devel] IA: всеобщая sysuserизация сизифа Arseny Maslennikov
2026-09-13 14:28   ` Alexei Takaseev
2026-09-13 14:36     ` Arseny Maslennikov
2026-09-14  5:28       ` Anton Farygin
2026-09-14  7:22         ` Arseny Maslennikov
2026-09-14  8:31           ` [devel] " Sergey V Turchin
2026-09-14  9:16           ` [devel] " Anton Farygin
2026-09-29 18:39     ` [devel] Backport пакетов с sysusers.d в старые репозитории Arseny Maslennikov
2026-09-29 18:44       ` Anton Farygin
2026-09-29 19:18         ` Paul Wolneykien
2026-09-29 20:35           ` Arseny Maslennikov
2026-10-01  4:54             ` Anton Midyukov
2026-10-01  9:56               ` [devel] Backport поддержки %conf в пакетах Arseny Maslennikov
2026-09-30  8:45         ` [devel] Backport пакетов с sysusers.d в старые репозитории Arseny Maslennikov
2026-09-30  8:53           ` Anton Farygin
2026-09-30  9:06             ` Anton Midyukov
2026-09-30  9:07               ` Anton Farygin
2026-09-30  9:11                 ` Anton Midyukov
2026-09-30 11:01                 ` Alexey V. Vissarionov
2026-09-30 11:55           ` Paul Wolneykien
2026-09-13 23:12   ` [devel] IA: всеобщая sysuserизация сизифа Arseny Maslennikov
2026-09-14  6:27 ` [devel] Совместимость со старыми ветками (Was: rpm with sysusers support) Sergey V Turchin
2026-09-14  7:12   ` Arseny Maslennikov
2026-09-14 14:22 ` [devel] I: rpm with sysusers support Alexey V. Vissarionov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=aqaxL3b-6CWUcn0J@cello \
    --to=arseny@altlinux.org \
    --cc=devel@lists.altlinux.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

ALT Linux Team development discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \
		devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru
	public-inbox-index devel

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.devel


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git