[PATCH] kernel.spec: xz compress modules on i686 and x86_64

Josh Boyer jwboyer at fedoraproject.org
Tue May 6 18:24:23 UTC 2014


On Tue, May 06, 2014 at 01:02:24PM -0400, Kyle McMartin wrote:
> Pretty grody, but it seems to be working... it has to happen after
> module signing (obviously) and after find-debuginfo.sh runs as well, so
> tacking it onto the end seems sensible, and then just fixing up the file
> lists as we go. Provides a nice tidy savings to the disk footprint:
> 
> kyle at dreadnought:~% for i in kernel-core-3.15.0-0.rc3.git4.1.fc21.x86_64.rpm \
> kernel-core-3.15.0-0.rc3.git4.1.fc21.x86_64.rpm.1; do \
>  rpm -qip $i | grep '^Size'; done
> Size        : 43011603
> Size        : 81106737

Nice!

> kmod has handed .xz and .gz modules for a long time now, and can cope.
> 
> I was thinking we might also %ghost the .ko, and have a %post install
> script that un-xz the modules in /proc/modules, but none of them are big
> enough for that to be worthwhile I think (maybe XFS, but I doubt it.)

Sounds reasonable.

I'll play around with this a bit tomorrow, but I like the idea.  Out of
curiosity, do you know if this has noticable impacts on boot times?  I
wouldn't think it would be drastic.

> --Kyle
> 
> --- a/kernel.spec
> +++ b/kernel.spec
> @@ -12,8 +12,14 @@ Summary: The Linux kernel
>  # architectures are added.
>  %ifarch %{ix86} x86_64
>  %global signmodules 1
> +%global zipmodules 1
>  %else
>  %global signmodules 0
> +%global zipmodules 0
> +%endif

No armv7hl?  Curious if those boards would benefit from the size savings
as well.

> +
> +%if %{zipmodules}
> +%global zipsed -e 's/\.ko$/\.ko.xz/'
>  %endif
>  
>  # % define buildid .local
> @@ -1713,9 +1719,9 @@ BuildKernel() {
>  
>      # Make sure the files lists start with absolute paths or rpmbuild fails.
>      # Also add in the dir entries
> -    sed -e 's/^lib*/\/lib/' $RPM_BUILD_ROOT/k-d.list > ../kernel${Flavour:+-${Flavour}}-modules.list
> -    sed -e 's/^lib*/%dir \/lib/' $RPM_BUILD_ROOT/module-dirs.list > ../kernel${Flavour:+-${Flavour}}-core.list
> -    sed -e 's/^lib*/\/lib/' $RPM_BUILD_ROOT/modules.list >> ../kernel${Flavour:+-${Flavour}}-core.list
> +    sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/k-d.list > ../kernel${Flavour:+-${Flavour}}-modules.list
> +    sed -e 's/^lib*/%dir \/lib/' %{?zipsed} $RPM_BUILD_ROOT/module-dirs.list > ../kernel${Flavour:+-${Flavour}}-core.list
> +    sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/modules.list >> ../kernel${Flavour:+-${Flavour}}-core.list

Hm.  This makes me wonder if the auto-module-Provides thing we're
working through now will be impacted.  I'll have to go look at what you
did in RPM to see what it's looking for to create those, and when.

josh

>  
>      # Cleanup
>      rm -f $RPM_BUILD_ROOT/k-d.list
> @@ -1836,6 +1842,9 @@ popd
>        %{modsign_cmd} signing_key.priv.sign signing_key.x509.sign $RPM_BUILD_ROOT/lib/modules/%{KVERREL}/ \
>      fi \
>    fi \
> +  if [ "%{zipmodules}" -eq "1" ]; then \
> +    find $RPM_BUILD_ROOT/lib/modules/ -type f -name '*.ko' | xargs xz; \
> +  fi \
>  %{nil}
>  
>  ###
> _______________________________________________
> kernel mailing list
> kernel at lists.fedoraproject.org
> https://admin.fedoraproject.org/mailman/listinfo/kernel


More information about the kernel mailing list