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

Josh Boyer jwboyer at fedoraproject.org
Wed May 14 13:53:20 UTC 2014


commit 8922622858e7af7cfca2ed2d68090140348cc6a8
Author: Kyle McMartin <kyle at redhat.com>
Date:   Tue May 6 13:02:24 2014 -0400

    kernel.spec: xz compress modules on i686 and x86_64
    
    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
    
    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.)
    
    --Kyle

 kernel.spec |   15 ++++++++++++---
 1 files changed, 12 insertions(+), 3 deletions(-)
---
diff --git a/kernel.spec b/kernel.spec
index ec8ee4f..8563cc6 100644
--- 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
+
+%if %{zipmodules}
+%global zipsed -e 's/\.ko$/\.ko.xz/'
 %endif
 
 # % define buildid .local
@@ -1703,9 +1709,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
 
     # Cleanup
     rm -f $RPM_BUILD_ROOT/k-d.list
@@ -1826,6 +1832,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}
 
 ###


More information about the scm-commits mailing list