summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packaging/fix-32bits.diff79
-rw-r--r--packaging/kmod-so-version.diff24
-rw-r--r--packaging/kmod.spec141
3 files changed, 244 insertions, 0 deletions
diff --git a/packaging/fix-32bits.diff b/packaging/fix-32bits.diff
new file mode 100644
index 0000000..60b72c6
--- /dev/null
+++ b/packaging/fix-32bits.diff
@@ -0,0 +1,79 @@
+diff --git a/testsuite/init_module.c b/testsuite/init_module.c
+index 814998a..ed8b9fc 100644
+--- a/testsuite/init_module.c
++++ b/testsuite/init_module.c
+@@ -16,6 +16,7 @@
+ */
+
+ #include <assert.h>
++#include <elf.h>
+ #include <errno.h>
+ #include <dirent.h>
+ #include <fcntl.h>
+@@ -206,6 +207,12 @@ static inline bool module_is_inkernel(const char *modname)
+ return ret;
+ }
+
++static uint8_t elf_identify(void *mem)
++{
++ uint8_t *p = mem;
++ return p[EI_CLASS];
++}
++
+ TS_EXPORT long init_module(void *mem, unsigned long len, const char *args);
+
+ /*
+@@ -225,6 +232,8 @@ long init_module(void *mem, unsigned long len, const char *args)
+ const void *buf;
+ uint64_t bufsize;
+ int err;
++ uint8_t class;
++ off_t offset;
+
+ init_retcodes();
+
+@@ -237,13 +246,20 @@ long init_module(void *mem, unsigned long len, const char *args)
+ kmod_elf_unref(elf);
+
+ /*
+- * We couldn't find the module's name inside the ELF file. Just exit
+- * as if it was successful
++ * We couldn't find the parse the ELF file. Just exit as if it was
++ * successful
+ */
+ if (err < 0)
+ return 0;
+
+- modname = (char *)buf + offsetof(struct module, name);
++ /* We need to open both 32 and 64 bits module - hack! */
++ class = elf_identify(mem);
++ if (class == ELFCLASS64)
++ offset = MODULE_NAME_OFFSET_64;
++ else
++ offset = MODULE_NAME_OFFSET_32;
++
++ modname = (char *)buf + offset;
+ mod = find_module(modules, modname);
+ if (mod != NULL) {
+ errno = mod->errcode;
+diff --git a/testsuite/stripped-module.h b/testsuite/stripped-module.h
+index 9f97dae..19862f3 100644
+--- a/testsuite/stripped-module.h
++++ b/testsuite/stripped-module.h
+@@ -13,6 +13,7 @@ struct list_head {
+ };
+
+ #define MODULE_NAME_LEN (64 - sizeof(unsigned long))
++
+ struct module
+ {
+ enum module_state state;
+@@ -24,4 +25,8 @@ struct module
+ char name[MODULE_NAME_LEN];
+ };
+
++/* padding */
++#define MODULE_NAME_OFFSET_64 4 + 4 + 2 * 8
++#define MODULE_NAME_OFFSET_32 4 + 2 * 4
++
+ #endif
diff --git a/packaging/kmod-so-version.diff b/packaging/kmod-so-version.diff
new file mode 100644
index 0000000..37ed83d
--- /dev/null
+++ b/packaging/kmod-so-version.diff
@@ -0,0 +1,24 @@
+Index: kmod-9/Makefile.am
+===================================================================
+--- kmod-9.orig/Makefile.am
++++ kmod-9/Makefile.am
+@@ -33,10 +33,6 @@ SED_PROCESS = \
+ %.pc: %.pc.in Makefile
+ $(SED_PROCESS)
+
+-LIBKMOD_CURRENT=3
+-LIBKMOD_REVISION=3
+-LIBKMOD_AGE=1
+-
+ noinst_LTLIBRARIES = libkmod/libkmod-util.la
+ libkmod_libkmod_util_la_SOURCES = libkmod/libkmod-hash.c \
+ libkmod/libkmod-hash.h \
+@@ -65,7 +61,7 @@ EXTRA_DIST += libkmod/libkmod.sym
+ EXTRA_DIST += libkmod/COPYING libkmod/README
+
+ libkmod_libkmod_la_LDFLAGS = $(AM_LDFLAGS) \
+- -version-info $(LIBKMOD_CURRENT):$(LIBKMOD_REVISION):$(LIBKMOD_AGE) \
++ -version-number 2:1 \
+ -Wl,--version-script=$(top_srcdir)/libkmod/libkmod.sym
+ libkmod_libkmod_la_DEPENDENCIES = libkmod/libkmod-util.la \
+ ${top_srcdir}/libkmod/libkmod.sym
diff --git a/packaging/kmod.spec b/packaging/kmod.spec
new file mode 100644
index 0000000..452254f
--- /dev/null
+++ b/packaging/kmod.spec
@@ -0,0 +1,141 @@
+Name: kmod
+Version: 9
+Release: 0
+License: LGPL-2.1+ and GPL-2.0+
+%define lname libkmod
+Summary: Utilities to load modules into the kernel
+Url: http://www.politreco.com/2011/12/announce-kmod-2/
+Group: System/Kernel
+
+#Git-Web: http://git.kernel.org/?p=utils/kernel/kmod/kmod.git;a=summary
+#Git-Clone: git://git.kernel.org/pub/scm/utils/kernel/kmod/kmod
+Source: %{name}-%{version}.tar.xz
+Source2: %{name}-%{version}.tar.sign
+Patch1: kmod-so-version.diff
+Patch2: fix-32bits.diff
+
+BuildRequires: autoconf
+BuildRequires: automake
+BuildRequires: libtool
+BuildRequires: pkgconfig >= 0.21
+BuildRequires: xz
+BuildRequires: pkgconfig(liblzma) >= 4.99
+BuildRequires: pkgconfig(zlib)
+BuildRoot: %{_tmppath}/%{name}-%{version}-build
+
+%description
+kmod is a set of tools to handle common tasks with Linux kernel
+modules like insert, remove, list, check properties, resolve
+dependencies and aliases.
+
+These tools are designed on top of libkmod, a library that is shipped
+with kmod. The aim is to be compatible with tools, configurations and
+indexes from module-init-tools project.
+
+%package compat
+License: GPL-2.0+
+Summary: Compat symlinks for kernel module utilities
+Group: System/Kernel
+Conflicts: module-init-tools
+Requires(pre): filesystem
+
+%description compat
+kmod is a set of tools to handle common tasks with Linux kernel
+modules like insert, remove, list, check properties, resolve
+dependencies and aliases.
+
+This package contains traditional name symlinks (lsmod, etc.)
+
+%package -n %lname
+License: LGPL-2.1+
+Summary: Library to interact with Linux kernel modules
+Group: System/Libraries
+
+%description -n %lname
+libkmod was created to allow programs to easily insert, remove and
+list modules, also checking its properties, dependencies and aliases.
+
+%package -n libkmod-devel
+License: LGPL-2.1+
+Summary: Development files for libkmod
+Group: Development/Libraries/C and C++
+Requires: %lname = %{version}
+
+%description -n libkmod-devel
+libkmod was created to allow programs to easily insert, remove and
+list modules, also checking its properties, dependencies and aliases.
+
+This package contains the development headers for the library found
+in %lname.
+
+%prep
+%setup -q
+%patch1 -p1
+%patch2 -p1
+
+%build
+autoreconf -fi
+# The extra --includedir gives us the possibility to detect dependent
+# packages which fail to properly use pkgconfig.
+%configure \
+ --with-xz \
+ --with-zlib \
+ --includedir=%{_includedir}/%{name}-%{version} \
+ --with-rootlibdir=%{_libdir} \
+ --bindir=%{_bindir}
+make %{?_smp_mflags}
+
+%check
+make check
+
+%install
+%make_install
+rm -f %{buildroot}/%{_libdir}/*.la
+
+# kmod-compat
+mkdir -p %{buildroot}/%{_sbindir}
+ln -s %{_bindir}/kmod %{buildroot}/%{_bindir}/lsmod
+for i in depmod insmod lsmod modinfo modprobe rmmod; do
+ ln -s %{_bindir}/kmod %{buildroot}/%{_sbindir}/$i
+done;
+
+
+%post -n %lname -p /sbin/ldconfig
+
+%postun -n %lname -p /sbin/ldconfig
+
+%files
+%defattr(-,root,root)
+%{_bindir}/kmod
+%{_mandir}/man5/modules.dep.bin.5*
+
+%files -n %lname
+%defattr(-,root,root)
+%{_libdir}/libkmod.so.2*
+
+%files -n libkmod-devel
+%defattr(-,root,root)
+%{_includedir}/*
+%{_libdir}/pkgconfig/libkmod.pc
+%{_libdir}/libkmod.so
+
+%files compat
+%defattr(-,root,root)
+%{_bindir}/lsmod
+%{_sbindir}/depmod
+%{_sbindir}/insmod
+%{_sbindir}/lsmod
+%{_sbindir}/modinfo
+%{_sbindir}/modprobe
+%{_sbindir}/rmmod
+%{_mandir}/man5/depmod.d.5*
+%{_mandir}/man5/modprobe.d.5*
+%{_mandir}/man5/modules.dep.5*
+%{_mandir}/man8/depmod.8*
+%{_mandir}/man8/insmod.8*
+%{_mandir}/man8/lsmod.8*
+%{_mandir}/man8/modinfo.8*
+%{_mandir}/man8/modprobe.8*
+%{_mandir}/man8/rmmod.8*
+
+%changelog