[devel] I: rpm with sysusers support
Arseny Maslennikov
arseny на altlinux.org
Вс Сен 13 17:21:26 MSK 2026
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.
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя : signature.asc
Тип : application/pgp-signature
Размер : 833 байтов
Описание: отсутствует
Url : <http://lists.altlinux.org/pipermail/devel/attachments/20260913/6ab816d4/attachment-0001.bin>
Подробная информация о списке рассылки Devel