Backport macros.sysusers from Fedora/systemd

epel8
Pablo Greco 3 years ago
parent 4ce1a695cf
commit d733fbe476

@ -1,6 +1,6 @@
Name: epel-rpm-macros Name: epel-rpm-macros
Version: 8 Version: 8
Release: 26 Release: 27
Summary: Extra Packages for Enterprise Linux RPM macros Summary: Extra Packages for Enterprise Linux RPM macros
Group: System Environment/Base Group: System Environment/Base
@ -15,6 +15,13 @@ Source1: macros.zzz-epel-override
Source2: gpgverify Source2: gpgverify
Source3: pythondist.attr Source3: pythondist.attr
Source9: GPL Source9: GPL
# sysusers https://src.fedoraproject.org/rpms/systemd/c/ced9237a14d6775a98e1a2f93880990417b4ae6e
Source21: macros.sysusers
Source22: sysusers.attr
Source23: sysusers.prov
Source24: sysusers.generate-pre.sh
# misc macros # misc macros
Source150: macros.build-constraints Source150: macros.build-constraints
@ -33,11 +40,22 @@ Requires: python2-rpm-macros
# instead of /usr/libexec/platform-python # instead of /usr/libexec/platform-python
Requires: (python-modular-rpm-macros if python3-devel) Requires: (python-modular-rpm-macros if python3-devel)
Suggests: python36-rpm-macros Suggests: python36-rpm-macros
#systemd additional macros https://pagure.io/epel/issue/77
Requires: (epel-rpm-macros-systemd if systemd-rpm-macros)
%description %description
This package contains the Extra Packages for Enterprise Linux (EPEL) RPM This package contains the Extra Packages for Enterprise Linux (EPEL) RPM
macros for building EPEL packages. macros for building EPEL packages.
%package systemd
Summary: Extra Packages for Enterprise Linux RPM macros (systemd)
Requires: epel-rpm-macros
Requires: systemd-rpm-macros
%description systemd
This package contains the systemd specific Extra Packages for Enterprise
Linux (EPEL) RPM macros for building EPEL packages.
%prep %prep
%setup -cT %setup -cT
install -pm 644 %{SOURCE9} . install -pm 644 %{SOURCE9} .
@ -56,6 +74,16 @@ install -Dpm 755 %{SOURCE2} \
install -Dpm 644 %{SOURCE3} \ install -Dpm 644 %{SOURCE3} \
%{buildroot}%{_fileattrsdir}/pythondist.attr %{buildroot}%{_fileattrsdir}/pythondist.attr
# sysusers
install -Dpm 0644 %{SOURCE21} \
%{buildroot}%{_rpmmacrodir}/macros.sysusers
install -Dpm 0644 %{SOURCE22} \
%{buildroot}%{_fileattrsdir}//sysusers.attr
install -Dpm 0755 %{SOURCE23} \
%{buildroot}%{_rpmconfigdir}/sysusers.prov
install -Dpm 0755 %{SOURCE24} \
%{buildroot}%{_rpmconfigdir}/sysusers.generate-pre.sh
# misc macros # misc macros
install -Dpm 644 %{SOURCE150} \ install -Dpm 644 %{SOURCE150} \
%{buildroot}%{_rpmmacrodir}/macros.build-constraints %{buildroot}%{_rpmmacrodir}/macros.build-constraints
@ -67,11 +95,22 @@ install -Dpm 644 %{SOURCE150} \
%{_sysconfdir}/rpm/macros.zzz-epel-override %{_sysconfdir}/rpm/macros.zzz-epel-override
%{_rpmconfigdir}/gpgverify %{_rpmconfigdir}/gpgverify
%{_fileattrsdir}/pythondist.attr %{_fileattrsdir}/pythondist.attr
# misc macros # misc macros
%{_rpmmacrodir}/macros.build-constraints %{_rpmmacrodir}/macros.build-constraints
%files systemd
# sysusers
%{_rpmconfigdir}/macros.d/macros.sysusers
%{_rpmconfigdir}/fileattrs/sysusers.attr
%{_rpmconfigdir}/sysusers.prov
%{_rpmconfigdir}/sysusers.generate-pre.sh
%changelog %changelog
* Wed Jan 19 2022 Pablo Greco <pgreco@centosproject.org> - 8-27
- Backport systemd sysusers macros from Fedora
* Wed Oct 27 2021 Karolina Surma <ksurma@redhat.com> - 8-26 * Wed Oct 27 2021 Karolina Surma <ksurma@redhat.com> - 8-26
- Add -t, -f, -e options to %%py_check_import which emit warning when used - Add -t, -f, -e options to %%py_check_import which emit warning when used

@ -0,0 +1,10 @@
# RPM macros for packages creating system accounts
#
# Turn a sysusers.d file into macros specified by
# https://docs.fedoraproject.org/en-US/packaging-guidelines/UsersAndGroups/#_dynamic_allocation
%sysusers_requires_compat Requires(pre): shadow-utils
%sysusers_create_compat() \
%(%{_rpmconfigdir}/sysusers.generate-pre.sh %{?*}) \
%{nil}

@ -0,0 +1,2 @@
%__sysusers_provides %{_rpmconfigdir}/sysusers.prov
%__sysusers_path ^%{_sysusersdir}/.*\\.conf$

@ -0,0 +1,79 @@
#!/bin/bash
# This script turns sysuser.d files into scriptlets mandated by Fedora
# packaging guidelines. The general idea is to define users using the
# declarative syntax but to turn this into traditional scriptlets.
user() {
user="$1"
uid="$2"
desc="$3"
group="$4"
home="$5"
shell="$6"
[ "$desc" = '-' ] && desc=
{ [ "$home" = '-' ] || [ "$home" = '' ]; } && home=/
{ [ "$shell" = '-' ] || [ "$shell" = '' ]; } && shell=/sbin/nologin
if [ "$uid" = '-' ] || [ "$uid" = '' ]; then
cat <<EOF
getent passwd '$user' >/dev/null || \\
useradd -r -g '$group' -d '$home' -s '$shell' -c '$desc' '$user'
EOF
else
cat <<EOF
if ! getent passwd '$user' >/dev/null ; then
if ! getent passwd '$uid' >/dev/null ; then
useradd -r -u '$uid' -g '$group' -d '$home' -s /sbin/nologin -c '$desc' '$user'
else
useradd -r -g '$group' -d '$home' -s /sbin/nologin -c '$desc' '$user'
fi
fi
EOF
fi
}
group() {
group="$1"
gid="$2"
if [ "$gid" = '-' ]; then
cat <<-EOF
getent group '$group' >/dev/null || groupadd -r '$group'
EOF
else
cat <<-EOF
getent group '$group' >/dev/null || groupadd -f -g '$gid' -r '$group'
EOF
fi
}
parse() {
while read -r line || [ -n "$line" ] ; do
{ [ "${line:0:1}" = '#' ] || [ "${line:0:1}" = ';' ]; } && continue
line="${line## *}"
[ -z "$line" ] && continue
eval "arr=( $line )"
case "${arr[0]}" in
('u')
group "${arr[1]}" "${arr[2]}"
user "${arr[1]}" "${arr[2]}" "${arr[3]}" "${arr[1]}" "${arr[4]}" "${arr[5]}"
# TODO: user:group support
;;
('g')
group "${arr[1]}" "${arr[2]}"
;;
('m')
group "${arr[2]}" "-"
user "${arr[1]}" "-" "" "${arr[2]}"
;;
esac
done
}
for fn in "$@"; do
[ -e "$fn" ] || continue
echo "# generated from $(basename "$fn")"
parse <"$fn"
done

@ -0,0 +1,28 @@
#!/bin/bash
parse() {
while read line; do
[ "${line:0:1}" = '#' -o "${line:0:1}" = ';' ] && continue
line="${line## *}"
[ -z "$line" ] && continue
set -- $line
case "$1" in
('u')
echo "user($2)"
echo "group($2)"
# TODO: user:group support
;;
('g')
echo "group($2)"
;;
('m')
echo "user($2)"
echo "group($3)"
;;
esac
done
}
while read fn; do
parse < "$fn"
done
Loading…
Cancel
Save