On Fri, 2019-11-01 at 12:02 -0600, Orion Poplawski wrote:
My F31 kickstart install is failing with:
DNF error: Error in POSTIN scriptlet in rpm package flatpak-selinux
Hmm, I've also ran into this issue of flatpak-selinux's POSTIN failing
:(
Just to be sure, are you building the kickstart with SELinux set to
permissive? It won't work if it's in Enforcing.
This is because flapak-selinux installs a SELinux module in %post:
%post selinux
%selinux_modules_install %{_datadir}/selinux/packages/flatpak.pp.bz2
which sources /etc/selinux/config. It is failing because
/etc/selinux/config
does not exist and /bin/sh exits with failure (/bin/bash does not
interestingly enough).
This was reported earlier here:
https://bugzilla.redhat.com/show_bug.cgi?id=1723118
For reference, here are some other BZs that I've ran into while trying
to come up with my own fixes to this issue:
*
https://bugzilla.redhat.com/show_bug.cgi?id=1732132
*
https://bugzilla.redhat.com/show_bug.cgi?id=1665643
and the suggestion made to add:
Requires(post): selinux-policy
since selinux-policy owns /etc/selinux/config. However, selinux-
policy
creates /etc/selinux/config in its own %post, and Requires(post) only
guarantees that the package's contents are installed, not that its
scripts are
complete.
So, what's the best way to fix this? We need /etc/selinux/policy to
be
present and populated with SELINUXTYPE=targeted for the selinux
policy modules
to be installed properly.
selinux-policy does:
%post
if [ ! -s /etc/selinux/config ]; then
#
# New install so we will default to targeted policy
#
echo "
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=enforcing
# SELINUXTYPE= can take one of these three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected
processes are
protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
" > /etc/selinux/config
ln -sf ../selinux/config /etc/sysconfig/selinux
restorecon /etc/selinux/config 2> /dev/null || :
else
. /etc/selinux/config
fi
exit 0
But can't this be achieved simply with:
%config(noreplace) %{_sysconfdir}/selinux/config
New installs would get the default config, but otherwise you would
get a
.rpmnew file.
However, I realize that nothing is particularly simple about SELinux
so there
are probably things I'm not aware of that prevent this.
PS - the else code seems to be a no-op.
Back when I was trying to find my own fixes, I managed to fix one
portion of the %post selinux that was enough to solve my own problems,
but this issue you're seeing is one that I wasn't able to find a fix
for myself. I've love to see a resolution to this.