Neal Gompa <ngomp...@gmail.com> writes:

> On Thu, May 29, 2025 at 6:16 AM Richard W.M. Jones <rjo...@redhat.com> wrote:
>>
>> [This is a general moan / observation ... Sorry!]
>>
>> SELinux policy is sometimes now split so that packages can carry their
>> own policy subpackage.  Examples include:
>>
>> https://src.fedoraproject.org/rpms/passt/blob/rawhide/f/passt.spec#_36
>> https://src.fedoraproject.org/rpms/nbdkit/blob/rawhide/f/nbdkit.spec#_751

one thing it could be simply fixed:

https://src.fedoraproject.org/rpms/passt/blob/rawhide/f/passt.spec#_91

There's no need to run the macro 3 times - all modules can be installed
in one run using

%selinux_modules_install -s %{selinuxtype} \
    %{_datadir}/selinux/packages/%{selinuxtype}/passt.pp \
    %{_datadir}/selinux/packages/%{selinuxtype}/pasta.pp \
    %{_datadir}/selinux/packages/%{selinuxtype}/passt-repair.pp


>>
>> I've recently been installing a lot of VMs with virt-v2v, and of the
>> approximately 3 minutes spent installing the required packages, I'd
>> estimate that around 2 minutes is spent running the *-selinux
>> post-install scripts for swtpm-seinux, passt-selinux and
>> nbdkit-selinux.  For some reason passt-selinux is particularly
>> excessive (I eyeballed it at around 75 seconds).
>>
>> I wonder if there's a way we could have RPM rebuild the SELinux policy
>> just once in this situation?  And asking another level of "why", why
>> is rebuilding the policy so slow in the first place?
>>
>
> The problem is that policy modules can depend on each other, and since
> policy modules can add things both to the global store and to the pool
> of stuff other modules can use, it has to be processed serially.

Well, no.

If a policy rule depends on a type from another module which is not
from base policy, it need to be in optional_policy block,

https://fedoraproject.org/wiki/SELinux/IndependentPolicy#Custom_policy_modules_and_distribution_policy
 


> This is why the historical policy was that everything needs to go into
> selinux-policy itself. SELinux as a system isn't designed for modular
> policies, as it's a system for centralized overlord-style control.

There are two types of policy - monolithic and modular. Fedora has been using
modular policy for ages. Also for almost 10 upstream releases, SELinux
policy store supports priorities on modules. It means you can override
base module with your changed module using a higher priority than 100.

We use priorities to differentiate modules from selinux-policy package -
priority 100, from -selinux subpackages - priority 200, setroubleshoot
suggests to use priority 300 and local user modules uses default
priority 400
 
https://github.com/SELinuxProject/selinux-notebook/blob/main/src/types_of_policy.md
https://plautrba.fedorapeople.org/selinux-modules-and-priority.html


> There is definitely some stupid stuff still, though: like
> selinux-policy having a vendored copy of container-selinux and the
> container tools still requiring their own container-selinux package
> anyway. It should be one way or another, not both because it creates
> install and upgrade problems occasionally (in addition to the slow
> performance issue).
>

This is much more complicated and the issue is originated in times when
container policy was part of Fedora policy. It didn't scale, container
team needed to progress much faster then selinux-policy team was able
to.

>
> Another issue is that we don't have a good way to do selective
> relabeling based on the module being installed, and while the SELinux
> tools support multi-threaded operations, it's not the default and none
> of the macros use it. And from an image builder perspective, there are
> also issues with SELinux tools being very hard to use to set up
> policies offline as well.
>

This is not correct.

There's %selinux_relabel_pre macro which stores file contexts before
policy is installed, and %selinux_relabel_post which relabels only
directories affected by the change in policy - this is not perfect
though as in some cases it could cause relabeling of the whole fs

https://fedoraproject.org/wiki/SELinux/IndependentPolicy#The_%prep_and_%install_Section

https://bugzilla.redhat.com/show_bug.cgi?id=2318279



>
>
>
> --
> 真実はいつも一つ!/ Always, there's only one truth!
> -- 
> _______________________________________________
> devel mailing list -- devel@lists.fedoraproject.org
> To unsubscribe send an email to devel-le...@lists.fedoraproject.org
> Fedora Code of Conduct: 
> https://docs.fedoraproject.org/en-US/project/code-of-conduct/
> List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
> List Archives: 
> https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org
> Do not reply to spam, report it: 
> https://pagure.io/fedora-infrastructure/new_issue

-- 
_______________________________________________
devel mailing list -- devel@lists.fedoraproject.org
To unsubscribe send an email to devel-le...@lists.fedoraproject.org
Fedora Code of Conduct: 
https://docs.fedoraproject.org/en-US/project/code-of-conduct/
List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
List Archives: 
https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org
Do not reply to spam, report it: 
https://pagure.io/fedora-infrastructure/new_issue

Reply via email to