diff mbox series

[testsuite] policy: do not rebuild policy package if already built

Message ID 20190923095837.25752-1-omosnace@redhat.com (mailing list archive)
State Changes Requested
Headers show
Series [testsuite] policy: do not rebuild policy package if already built | expand

Commit Message

Ondrej Mosnacek Sept. 23, 2019, 9:58 a.m. UTC
Right now, test_policy.pp is rebuilt on every make invocation. Tweak the
Makefile so that it is only build when it hasn't been built, it has been
cleaned, or the source files changed.

Signed-off-by: Ondrej Mosnacek <omosnace@redhat.com>
---
 policy/Makefile | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Comments

Ondrej Mosnacek Sept. 23, 2019, 10:01 a.m. UTC | #1
On Mon, Sep 23, 2019 at 11:58 AM Ondrej Mosnacek <omosnace@redhat.com> wrote:
> Right now, test_policy.pp is rebuilt on every make invocation. Tweak the
> Makefile so that it is only build when it hasn't been built, it has been
> cleaned, or the source files changed.
>
> Signed-off-by: Ondrej Mosnacek <omosnace@redhat.com>
> ---
>  policy/Makefile | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/policy/Makefile b/policy/Makefile
> index a5942b3..cc0f140 100644
> --- a/policy/Makefile
> +++ b/policy/Makefile
> @@ -86,7 +86,7 @@ ifeq (x$(DISTRO),$(filter x$(DISTRO),xRHEL4 xRHEL5 xRHEL6))
>  TARGETS:=$(filter-out test_overlayfs.te test_mqueue.te test_ibpkey.te, $(TARGETS))
>  endif
>
> -all: build
> +all: test_policy/test_policy.pp
>
>  expand_check:
>         # Test for "expand-check = 0" in /etc/selinux/semanage.conf
> @@ -94,7 +94,7 @@ expand_check:
>                 (echo "ERROR: set 'expand-check = 0' in /etc/selinux/semanage.conf"; \
>                  /bin/false)
>
> -build: $(TARGETS)
> +test_policy/test_policy.pp: $(TARGETS) test_policy.if
>         # General policy build
>         @if [ -d $(POLDEV) ]; then \
>                 mkdir -p test_policy; \
> --
> 2.21.0
>

This doesn't make much of a difference performance-wise, but the
behavior is more logical this way.
Stephen Smalley Sept. 23, 2019, 2:11 p.m. UTC | #2
On 9/23/19 5:58 AM, Ondrej Mosnacek wrote:
> Right now, test_policy.pp is rebuilt on every make invocation. Tweak the
> Makefile so that it is only build when it hasn't been built, it has been
> cleaned, or the source files changed.

It also needs to be rebuilt if anything under 
/usr/share/selinux/devel/include has changed e.g. upon an update of 
selinux-policy-devel.

> 
> Signed-off-by: Ondrej Mosnacek <omosnace@redhat.com>
> ---
>   policy/Makefile | 4 ++--
>   1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/policy/Makefile b/policy/Makefile
> index a5942b3..cc0f140 100644
> --- a/policy/Makefile
> +++ b/policy/Makefile
> @@ -86,7 +86,7 @@ ifeq (x$(DISTRO),$(filter x$(DISTRO),xRHEL4 xRHEL5 xRHEL6))
>   TARGETS:=$(filter-out test_overlayfs.te test_mqueue.te test_ibpkey.te, $(TARGETS))
>   endif
>   
> -all: build
> +all: test_policy/test_policy.pp
>   
>   expand_check:
>   	# Test for "expand-check = 0" in /etc/selinux/semanage.conf
> @@ -94,7 +94,7 @@ expand_check:
>   		(echo "ERROR: set 'expand-check = 0' in /etc/selinux/semanage.conf"; \
>   		 /bin/false)
>   
> -build: $(TARGETS)
> +test_policy/test_policy.pp: $(TARGETS) test_policy.if
>   	# General policy build
>   	@if [ -d $(POLDEV) ]; then \
>   		mkdir -p test_policy; \
>
Ondrej Mosnacek Sept. 24, 2019, 10:51 a.m. UTC | #3
On Mon, Sep 23, 2019 at 4:11 PM Stephen Smalley <sds@tycho.nsa.gov> wrote:
> On 9/23/19 5:58 AM, Ondrej Mosnacek wrote:
> > Right now, test_policy.pp is rebuilt on every make invocation. Tweak the
> > Makefile so that it is only build when it hasn't been built, it has been
> > cleaned, or the source files changed.
>
> It also needs to be rebuilt if anything under
> /usr/share/selinux/devel/include has changed e.g. upon an update of
> selinux-policy-devel.

I am now testing a version that always executes the `$(MAKE) -C
test_policy -f $(POLDEV)/Makefile test_policy.pp` step, relying on the
system Makefile to rebuild the pp as needed (there already are proper
dependencies on the include files). However, the package manager on
Fedora preserves the timestamps of the installed files (from package
build time), which means that make doesn't always detect that the
files are newer than the already built policy package.

So it looks like we don't have any other choice than to always rebuild
if we really need to auto-react to changing system files.

>
> >
> > Signed-off-by: Ondrej Mosnacek <omosnace@redhat.com>
> > ---
> >   policy/Makefile | 4 ++--
> >   1 file changed, 2 insertions(+), 2 deletions(-)
> >
> > diff --git a/policy/Makefile b/policy/Makefile
> > index a5942b3..cc0f140 100644
> > --- a/policy/Makefile
> > +++ b/policy/Makefile
> > @@ -86,7 +86,7 @@ ifeq (x$(DISTRO),$(filter x$(DISTRO),xRHEL4 xRHEL5 xRHEL6))
> >   TARGETS:=$(filter-out test_overlayfs.te test_mqueue.te test_ibpkey.te, $(TARGETS))
> >   endif
> >
> > -all: build
> > +all: test_policy/test_policy.pp
> >
> >   expand_check:
> >       # Test for "expand-check = 0" in /etc/selinux/semanage.conf
> > @@ -94,7 +94,7 @@ expand_check:
> >               (echo "ERROR: set 'expand-check = 0' in /etc/selinux/semanage.conf"; \
> >                /bin/false)
> >
> > -build: $(TARGETS)
> > +test_policy/test_policy.pp: $(TARGETS) test_policy.if
> >       # General policy build
> >       @if [ -d $(POLDEV) ]; then \
> >               mkdir -p test_policy; \
> >
>
Stephen Smalley Sept. 24, 2019, 1:58 p.m. UTC | #4
On 9/24/19 6:51 AM, Ondrej Mosnacek wrote:
> On Mon, Sep 23, 2019 at 4:11 PM Stephen Smalley <sds@tycho.nsa.gov> wrote:
>> On 9/23/19 5:58 AM, Ondrej Mosnacek wrote:
>>> Right now, test_policy.pp is rebuilt on every make invocation. Tweak the
>>> Makefile so that it is only build when it hasn't been built, it has been
>>> cleaned, or the source files changed.
>>
>> It also needs to be rebuilt if anything under
>> /usr/share/selinux/devel/include has changed e.g. upon an update of
>> selinux-policy-devel.
> 
> I am now testing a version that always executes the `$(MAKE) -C
> test_policy -f $(POLDEV)/Makefile test_policy.pp` step, relying on the
> system Makefile to rebuild the pp as needed (there already are proper
> dependencies on the include files). However, the package manager on
> Fedora preserves the timestamps of the installed files (from package
> build time), which means that make doesn't always detect that the
> files are newer than the already built policy package.
> 
> So it looks like we don't have any other choice than to always rebuild
> if we really need to auto-react to changing system files.

I'd rather err on the side of rebuilding too often than using stale policy.

> 
>>
>>>
>>> Signed-off-by: Ondrej Mosnacek <omosnace@redhat.com>
>>> ---
>>>    policy/Makefile | 4 ++--
>>>    1 file changed, 2 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/policy/Makefile b/policy/Makefile
>>> index a5942b3..cc0f140 100644
>>> --- a/policy/Makefile
>>> +++ b/policy/Makefile
>>> @@ -86,7 +86,7 @@ ifeq (x$(DISTRO),$(filter x$(DISTRO),xRHEL4 xRHEL5 xRHEL6))
>>>    TARGETS:=$(filter-out test_overlayfs.te test_mqueue.te test_ibpkey.te, $(TARGETS))
>>>    endif
>>>
>>> -all: build
>>> +all: test_policy/test_policy.pp
>>>
>>>    expand_check:
>>>        # Test for "expand-check = 0" in /etc/selinux/semanage.conf
>>> @@ -94,7 +94,7 @@ expand_check:
>>>                (echo "ERROR: set 'expand-check = 0' in /etc/selinux/semanage.conf"; \
>>>                 /bin/false)
>>>
>>> -build: $(TARGETS)
>>> +test_policy/test_policy.pp: $(TARGETS) test_policy.if
>>>        # General policy build
>>>        @if [ -d $(POLDEV) ]; then \
>>>                mkdir -p test_policy; \
>>>
>>
> 
>
Paul Moore Sept. 24, 2019, 5:24 p.m. UTC | #5
On Tue, Sep 24, 2019 at 9:58 AM Stephen Smalley <sds@tycho.nsa.gov> wrote:
> On 9/24/19 6:51 AM, Ondrej Mosnacek wrote:
> > On Mon, Sep 23, 2019 at 4:11 PM Stephen Smalley <sds@tycho.nsa.gov> wrote:
> >> On 9/23/19 5:58 AM, Ondrej Mosnacek wrote:
> >>> Right now, test_policy.pp is rebuilt on every make invocation. Tweak the
> >>> Makefile so that it is only build when it hasn't been built, it has been
> >>> cleaned, or the source files changed.
> >>
> >> It also needs to be rebuilt if anything under
> >> /usr/share/selinux/devel/include has changed e.g. upon an update of
> >> selinux-policy-devel.
> >
> > I am now testing a version that always executes the `$(MAKE) -C
> > test_policy -f $(POLDEV)/Makefile test_policy.pp` step, relying on the
> > system Makefile to rebuild the pp as needed (there already are proper
> > dependencies on the include files). However, the package manager on
> > Fedora preserves the timestamps of the installed files (from package
> > build time), which means that make doesn't always detect that the
> > files are newer than the already built policy package.
> >
> > So it looks like we don't have any other choice than to always rebuild
> > if we really need to auto-react to changing system files.
>
> I'd rather err on the side of rebuilding too often than using stale policy.

That would be my preference as well.  In fact, I actually recommend
doing a 'make clean' before building and running the tests simply to
make sure everything in the dependency list and toolchain is still
working properly with the bits in the test suite.
diff mbox series

Patch

diff --git a/policy/Makefile b/policy/Makefile
index a5942b3..cc0f140 100644
--- a/policy/Makefile
+++ b/policy/Makefile
@@ -86,7 +86,7 @@  ifeq (x$(DISTRO),$(filter x$(DISTRO),xRHEL4 xRHEL5 xRHEL6))
 TARGETS:=$(filter-out test_overlayfs.te test_mqueue.te test_ibpkey.te, $(TARGETS))
 endif
 
-all: build
+all: test_policy/test_policy.pp
 
 expand_check:
 	# Test for "expand-check = 0" in /etc/selinux/semanage.conf
@@ -94,7 +94,7 @@  expand_check:
 		(echo "ERROR: set 'expand-check = 0' in /etc/selinux/semanage.conf"; \
 		 /bin/false)
 
-build: $(TARGETS)
+test_policy/test_policy.pp: $(TARGETS) test_policy.if
 	# General policy build
 	@if [ -d $(POLDEV) ]; then \
 		mkdir -p test_policy; \