diff --git a/common/shlibs b/common/shlibs index d54a88a06d..030561fc3e 100644 --- a/common/shlibs +++ b/common/shlibs @@ -940,3 +940,4 @@ libnilfscleaner.so.0 libnilfs nilfs-utils-devel libchicken.so.6 libchicken chicken-devel libmdb.so.0.0.0 libmdb mdbtools-devel libmdbsql.so.0 libmdb mdbtools-devel +libkmod.so.1 libkmod libkmod-devel diff --git a/srcpkgs/kmod/depends b/srcpkgs/kmod/depends new file mode 100644 index 0000000000..54545c89bd --- /dev/null +++ b/srcpkgs/kmod/depends @@ -0,0 +1,2 @@ +abi_depends=">=3" +api_depends="${abi_depends}" diff --git a/srcpkgs/kmod/files/depmod-search.conf b/srcpkgs/kmod/files/depmod-search.conf new file mode 100644 index 0000000000..3feb67b055 --- /dev/null +++ b/srcpkgs/kmod/files/depmod-search.conf @@ -0,0 +1,5 @@ +# +# /etc/depmod.d/depmod.conf +# + +search updates extramodules built-in diff --git a/srcpkgs/kmod/kmod.rshlibs b/srcpkgs/kmod/kmod.rshlibs new file mode 100644 index 0000000000..daa1e08b64 --- /dev/null +++ b/srcpkgs/kmod/kmod.rshlibs @@ -0,0 +1,2 @@ +libc.so.6 +libkmod.so.1 diff --git a/srcpkgs/kmod/libkmod-devel.template b/srcpkgs/kmod/libkmod-devel.template new file mode 100644 index 0000000000..cebd782c25 --- /dev/null +++ b/srcpkgs/kmod/libkmod-devel.template @@ -0,0 +1,15 @@ +# Template file for 'libkmod-devel'. +# +short_desc="${short_desc} - development files" +long_desc="${long_desc} + + This package contains the files needed for developing applications + that use libkmod." + +Add_dependency run zlib-devel +Add_dependency run libkmod + +do_install() { + vmove usr/include usr + vmove usr/lib/pkgconfig usr/lib +} diff --git a/srcpkgs/kmod/libkmod.rshlibs b/srcpkgs/kmod/libkmod.rshlibs new file mode 100644 index 0000000000..0d3ef3be76 --- /dev/null +++ b/srcpkgs/kmod/libkmod.rshlibs @@ -0,0 +1,3 @@ +liblzma.so.5 +libz.so.1 +libc.so.6 diff --git a/srcpkgs/kmod/libkmod.template b/srcpkgs/kmod/libkmod.template new file mode 100644 index 0000000000..a822135d2e --- /dev/null +++ b/srcpkgs/kmod/libkmod.template @@ -0,0 +1,11 @@ +# Template file for 'libkmod'. +# +short_desc="${short_desc} - runtime shared library" +long_desc="${long_desc} + + This package provides the libkmod runtime shared library." + +do_install() { + vmove "lib/*.so*" lib + vmove "usr/lib/*.so" usr/lib +} diff --git a/srcpkgs/kmod/patches/fix-error-path-when-loading-deps.patch b/srcpkgs/kmod/patches/fix-error-path-when-loading-deps.patch new file mode 100644 index 0000000000..423344487f --- /dev/null +++ b/srcpkgs/kmod/patches/fix-error-path-when-loading-deps.patch @@ -0,0 +1,34 @@ +From cb0d0b72128ac566aad9a72800c5a64af66f0b6e Mon Sep 17 00:00:00 2001 +From: Lucas De Marchi +Date: Sun, 8 Jan 2012 18:08:05 -0200 +Subject: [PATCH] modprobe: fix error path when loading dependencies + +demarchi> scenario is the following: +demarchi> modA depends on modB and modC +demarchi> if there's a race when trying to insert a dependency of a module, say + modB, it will stop loading all the modules +demarchi> it should check by "module already loaded error" +demarchi> like it does for modA +--- + tools/kmod-modprobe.c | 4 +++- + 1 files changed, 3 insertions(+), 1 deletions(-) + +diff --git a/tools/kmod-modprobe.c b/tools/kmod-modprobe.c +index eaf9346..2cda935 100644 +--- a/tools/kmod-modprobe.c ++++ b/tools/kmod-modprobe.c +@@ -666,9 +666,11 @@ static int insmod_do_deps_list(struct kmod_module *parent, struct kmod_list *dep + flags |= KMOD_INSERT_FORCE_VERMAGIC; + + r = kmod_module_insert_module(dm, flags, opts); ++ if (r == -EEXIST && !first_time) ++ r = 0; + if (r < 0) { + WRN("could not insert '%s': %s\n", +- dmname, strerror(-r)); ++ dmname, strerror(-r)); + goto dep_error; + } + } +-- +1.7.8.1 diff --git a/srcpkgs/kmod/patches/return-non-zero-on-fail.patch b/srcpkgs/kmod/patches/return-non-zero-on-fail.patch new file mode 100644 index 0000000000..52780ea919 --- /dev/null +++ b/srcpkgs/kmod/patches/return-non-zero-on-fail.patch @@ -0,0 +1,30 @@ +diff --git a/tools/kmod-modinfo.c b/tools/kmod-modinfo.c +index b6af26f..8506193 100644 +--- a/tools/kmod-modinfo.c ++++ b/tools/kmod-modinfo.c +@@ -279,6 +279,12 @@ static int modinfo_alias_do(struct kmod_ctx *ctx, const char *alias) + LOG("Module alias %s not found.\n", alias); + return err; + } ++ ++ if (list == NULL) { ++ LOG("Module %s not found.\n", alias); ++ return -ENOENT; ++ } ++ + kmod_list_foreach(l, list) { + struct kmod_module *mod = kmod_module_get_module(l); + int r = modinfo_do(mod); +diff --git a/tools/kmod-modprobe.c b/tools/kmod-modprobe.c +index 8286b9b..6ca94f2 100644 +--- a/tools/kmod-modprobe.c ++++ b/tools/kmod-modprobe.c +@@ -856,7 +856,7 @@ static int insmod_alias(struct kmod_ctx *ctx, const char *alias, const char *ext + + if (list == NULL) { + LOG("Module %s not found.\n", alias); +- return err; ++ return -ENOENT; + } + + if (use_blacklist) { diff --git a/srcpkgs/kmod/patches/use-path-max-for-alias-names.patch b/srcpkgs/kmod/patches/use-path-max-for-alias-names.patch new file mode 100644 index 0000000000..5a65b2988a --- /dev/null +++ b/srcpkgs/kmod/patches/use-path-max-for-alias-names.patch @@ -0,0 +1,146 @@ +From 6daceb2f1f4d442ba04752aaa1cf43d554d5f646 Mon Sep 17 00:00:00 2001 +From: Lucas De Marchi +Date: Sun, 8 Jan 2012 01:02:29 -0200 +Subject: [PATCH] Replace NAME_MAX with PATH_MAX for module aliases + +Module aliases can be bigger than NAME_MAX. So, replace with PATH_MAX +that is bigger enough to hold them. + +Technically in some places NAME_MAX would be sufficient (those using +module names only), but they use functions that can be called with +alias. So increase the buffers in these cases to PATH_MAX too. +--- + libkmod/libkmod-module.c | 10 +++++----- + libkmod/libkmod-util.c | 10 +++++----- + libkmod/libkmod-util.h | 6 +++--- + tools/kmod-depmod.c | 4 ++-- + 4 files changed, 15 insertions(+), 15 deletions(-) + +diff --git a/libkmod/libkmod-module.c b/libkmod/libkmod-module.c +index f2359a9..880bac5 100644 +--- a/libkmod/libkmod-module.c ++++ b/libkmod/libkmod-module.c +@@ -185,7 +185,7 @@ KMOD_EXPORT int kmod_module_new_from_name(struct kmod_ctx *ctx, + { + struct kmod_module *m; + size_t namelen; +- char name_norm[NAME_MAX]; ++ char name_norm[PATH_MAX]; + char *namesep; + + if (ctx == NULL || name == NULL || mod == NULL) +@@ -237,11 +237,11 @@ int kmod_module_new_from_alias(struct kmod_ctx *ctx, const char *alias, + const char *name, struct kmod_module **mod) + { + int err; +- char key[NAME_MAX]; ++ char key[PATH_MAX]; + size_t namelen = strlen(name); + size_t aliaslen = strlen(alias); + +- if (namelen + aliaslen + 2 > NAME_MAX) ++ if (namelen + aliaslen + 2 > PATH_MAX) + return -ENAMETOOLONG; + + memcpy(key, name, namelen); +@@ -283,7 +283,7 @@ KMOD_EXPORT int kmod_module_new_from_path(struct kmod_ctx *ctx, + struct kmod_module *m; + int err; + struct stat st; +- char name[NAME_MAX]; ++ char name[PATH_MAX]; + char *abspath; + size_t namelen; + +@@ -434,7 +434,7 @@ KMOD_EXPORT int kmod_module_new_from_lookup(struct kmod_ctx *ctx, + struct kmod_list **list) + { + int err; +- char alias[NAME_MAX]; ++ char alias[PATH_MAX]; + + if (ctx == NULL || given_alias == NULL) + return -ENOENT; +diff --git a/libkmod/libkmod-util.c b/libkmod/libkmod-util.c +index 75e2fea..344d94a 100644 +--- a/libkmod/libkmod-util.c ++++ b/libkmod/libkmod-util.c +@@ -121,11 +121,11 @@ char *underscores(struct kmod_ctx *ctx, char *s) + return s; + } + +-inline int alias_normalize(const char *alias, char buf[NAME_MAX], size_t *len) ++inline int alias_normalize(const char *alias, char buf[PATH_MAX], size_t *len) + { + size_t s; + +- for (s = 0; s < NAME_MAX - 1; s++) { ++ for (s = 0; s < PATH_MAX - 1; s++) { + const char c = alias[s]; + switch (c) { + case '-': +@@ -160,12 +160,12 @@ finish: + return 0; + } + +-inline char *modname_normalize(const char *modname, char buf[NAME_MAX], ++inline char *modname_normalize(const char *modname, char buf[PATH_MAX], + size_t *len) + { + size_t s; + +- for (s = 0; s < NAME_MAX - 1; s++) { ++ for (s = 0; s < PATH_MAX - 1; s++) { + const char c = modname[s]; + if (c == '-') + buf[s] = '_'; +@@ -183,7 +183,7 @@ inline char *modname_normalize(const char *modname, char buf[NAME_MAX], + return buf; + } + +-char *path_to_modname(const char *path, char buf[NAME_MAX], size_t *len) ++char *path_to_modname(const char *path, char buf[PATH_MAX], size_t *len) + { + char *modname; + +diff --git a/libkmod/libkmod-util.h b/libkmod/libkmod-util.h +index 3cd352c..e8ed5ad 100644 +--- a/libkmod/libkmod-util.h ++++ b/libkmod/libkmod-util.h +@@ -20,9 +20,9 @@ int read_str_ulong(int fd, unsigned long *value, int base) __must_check __attrib + char *strchr_replace(char *s, int c, char r); + bool path_is_absolute(const char *p) __must_check __attribute__((nonnull(1))); + char *path_make_absolute_cwd(const char *p) __must_check __attribute__((nonnull(1))); +-int alias_normalize(const char *alias, char buf[NAME_MAX], size_t *len) __must_check __attribute__((nonnull(1,2))); +-char *modname_normalize(const char *modname, char buf[NAME_MAX], size_t *len) __attribute__((nonnull(1, 2))); +-char *path_to_modname(const char *path, char buf[NAME_MAX], size_t *len) __attribute__((nonnull(2))); ++int alias_normalize(const char *alias, char buf[PATH_MAX], size_t *len) __must_check __attribute__((nonnull(1,2))); ++char *modname_normalize(const char *modname, char buf[PATH_MAX], size_t *len) __attribute__((nonnull(1, 2))); ++char *path_to_modname(const char *path, char buf[PATH_MAX], size_t *len) __attribute__((nonnull(2))); + unsigned long long ts_usec(const struct timespec *ts); + + #endif +diff --git a/tools/kmod-depmod.c b/tools/kmod-depmod.c +index 70c397c..4726522 100644 +--- a/tools/kmod-depmod.c ++++ b/tools/kmod-depmod.c +@@ -1249,7 +1249,7 @@ static int depmod_modules_search_file(struct depmod *depmod, size_t baselen, siz + struct kmod_module *kmod; + struct mod *mod; + const char *relpath; +- char modname[NAME_MAX]; ++ char modname[PATH_MAX]; + const struct kmod_ext *eitr; + size_t modnamelen; + uint8_t matches = 0; +@@ -2101,7 +2101,7 @@ static int output_builtin_bin(struct depmod *depmod, FILE *out) + { + FILE *in; + struct index_node *idx; +- char infile[PATH_MAX], line[PATH_MAX], modname[NAME_MAX]; ++ char infile[PATH_MAX], line[PATH_MAX], modname[PATH_MAX]; + + if (out == stdout) + return 0; +-- +1.7.8.1 diff --git a/srcpkgs/kmod/template b/srcpkgs/kmod/template new file mode 100644 index 0000000000..d586e88015 --- /dev/null +++ b/srcpkgs/kmod/template @@ -0,0 +1,43 @@ +# Template file for 'kmod' +pkgname=kmod +version=3 +patch_args="-Np1" +homepage="http://git.profusion.mobi/cgit.cgi/kmod.git" +distfiles="http://packages.profusion.mobi//$pkgname/$pkgname-$version.tar.xz" +build_style=gnu-configure +configure_args="--with-rootprefix= --with-rootlibdir=/lib --with-zlib +--with-xz" +short_desc="Linux kernel module handling" +maintainer="Juan RP " +license="GPL-2" +checksum=4b32439703ab2837e81ae80f527f9e964ecb5883a9e80d1cc7518cf6e8593ad9 +long_desc=" + 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." + +provides="module-init-tools-3.16" +replaces="module-init-tools>=0" +subpackages="libkmod libkmod-devel" + +make_dirs=" +/etc/depmod.d 0755 root root +/etc/modprobe.d 0755 root root +/lib/depmod.d 0755 root root +/lib/modprobe.d 0755 root root" + +Add_dependency build pkg-config +Add_dependency build zlib-devel +Add_dependency build liblzma-devel + +post_install() { + vinstall ${FILESDIR}/depmod-search.conf 644 lib/depmod.d search.conf + # add symlinks to kmod + vmkdir bin + vmkdir sbin + cd ${DESTDIR}/bin && ln -sf ../usr/bin/kmod lsmod + for tool in {ins,rm,dep}mod mod{info,probe}; do + cd ${DESTDIR}/sbin && ln -sf ../usr/bin/kmod $tool + done +} diff --git a/srcpkgs/libkmod b/srcpkgs/libkmod new file mode 120000 index 0000000000..761582848f --- /dev/null +++ b/srcpkgs/libkmod @@ -0,0 +1 @@ +kmod \ No newline at end of file diff --git a/srcpkgs/libkmod-devel b/srcpkgs/libkmod-devel new file mode 120000 index 0000000000..761582848f --- /dev/null +++ b/srcpkgs/libkmod-devel @@ -0,0 +1 @@ +kmod \ No newline at end of file