Skip to content

Commit 07a7d4a

Browse files
committed
rpm macros: add %sysusers_create_package
This is close to %sysusers_create_inline and %sysusers_create that we had already, but expects a file name and uses --replace= to implement proper priority. This is used like: %sysusers_create_package %{name} %SOURCE1 where %SOURCE1 is a file with called %{name}.conf that will be installed into /usr/lib/sysusers.d/. The tough part is that the file needs to be available before %prep, i.e. outside of the source tarball. This is because the spec file is parsed (and any macros expanded), before the sources are unpackaged. v2: - disallow the case case when --config-name= is given but there are no positional args. Most likely this would be a user error, so at least for now forbid it. v3: - replace --config-name= with --target= - drop quotes around %1 and %2 — if necessary, the caller should add those. v4: - replace --target with --replace - add a big comment
1 parent 4e9fe38 commit 07a7d4a

File tree

1 file changed

+19
-0
lines changed

1 file changed

+19
-0
lines changed

src/core/macros.systemd.in

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ journalctl --update-catalog >/dev/null 2>&1 || : \
100100
systemd-tmpfiles --create %{?*} >/dev/null 2>&1 || : \
101101
%{nil}
102102

103+
# Deprecated. Use %sysusers_create_package instead
103104
%sysusers_create() \
104105
systemd-sysusers %{?*} >/dev/null 2>&1 || : \
105106
%{nil}
@@ -108,6 +109,24 @@ systemd-sysusers %{?*} >/dev/null 2>&1 || : \
108109
echo %{?*} | systemd-sysusers - >/dev/null 2>&1 || : \
109110
%{nil}
110111

112+
# This should be used by package installation scripts which
113+
# require users or groups to be present before the files installed
114+
# by the package are present on disk (for example because some files
115+
# are owned by those users or groups).
116+
#
117+
# Example:
118+
# Source1: %{name}.conf
119+
# ...
120+
# %install
121+
# install -Dt %{buildroot}%{sysusersdir} %SOURCE1
122+
# %pre
123+
# %sysusers_create_package %{name} %SOURCE1
124+
# %files
125+
# %{sysusersdir}/%{name}.conf
126+
%sysusers_create_package() \
127+
echo "%(cat %2)" | systemd-sysusers --replace=%_sysusersdir/%1.conf - >/dev/null 2>&1 || : \
128+
%{nil}
129+
111130
%sysctl_apply() \
112131
@rootlibexecdir@/systemd-sysctl %{?*} >/dev/null 2>&1 || : \
113132
%{nil}

0 commit comments

Comments
 (0)