diff options
authorFrancisco Redondo Marchena <>2015-04-07 19:23:17 +0100
committerFrancisco Redondo Marchena <>2015-04-08 12:30:32 +0100
commit9603cfee926e5b010a16463ff765a655382585e8 (patch)
parent88e05d0f4291fc09e89a510c433fbf20ee6f1ae3 (diff)
Create kmod symlinks in sbin
iSCSI kernel modules and open-iscsi expect modprobe and the rest of the module kernel utils to be in /sbin. This patch create the links in /sbin instead of /bin if /sbin is not a symlink of /usr/bin; if it is a symlink it will create the links in /usr/bin. Also it installs kmod in "$PREFIX" instead of / Change-Id: I89226d0ee7956e294caa66d60101a35daeccf9a1
1 files changed, 39 insertions, 9 deletions
diff --git a/strata/foundation/kmod.morph b/strata/foundation/kmod.morph
index fdfb971f..8f158e8e 100644
--- a/strata/foundation/kmod.morph
+++ b/strata/foundation/kmod.morph
@@ -5,15 +5,45 @@ configure-commands:
- sed -i -e'/SUBDIRS/{s/\S*doc\S*//;s/\S*man\S*//}'
- sed -i -e'/AC_CONFIG_FILES(\[/,/])/{/docs/d}'
- autoreconf -fiv
-- ./configure --prefix=/usr --bindir=/bin --libdir=/lib --sysconfdir=/etc --without-xz
- --with-zlib --disable-manpages --enable-python
+- |
+ ./configure --prefix="$PREFIX" --bindir="$PREFIX"/bin \
+ --libdir="$PREFIX"/lib --sysconfdir=/etc \
+ --without-xz --with-zlib \
+ --disable-manpages --enable-python
- make
-- make DESTDIR="$DESTDIR" pkgconfigdir=/usr/lib/pkgconfig install
-- ln -s kmod "$DESTDIR"/bin/modprobe
-- ln -s kmod "$DESTDIR"/bin/lsmod
-- ln -s kmod "$DESTDIR"/bin/rmmod
-- ln -s kmod "$DESTDIR"/bin/insmod
-- ln -s kmod "$DESTDIR"/bin/modinfo
-- ln -s kmod "$DESTDIR"/bin/depmod
+- make DESTDIR="$DESTDIR" pkgconfigdir="$PREFIX"/lib/pkgconfig install
+# WARNING with the following command:
+# if the staging area when kmod is built is sufficiently different to the
+# staging area that kmod is included in, then these symlinks may not work.
+# i.e. if /sbin isn't a symlink when this is built (fhs-dirs isn't included or
+# doesn't symlink /sbin to /usr/bin) then we get symlinks in /sbin which point
+# to ../usr/bin, but if /sbin is itself a symlink to /usr/bin, then the symlinks
+# would end up in /usr/bin, which would point to ../usr/bin, which would evaluate
+# to /usr/usr/bin.
+# The alternatives to this are:
+# 1. Use hardlinks instead, which has the problem of ssh-rsync upgrades duplicating
+# the binary
+# 2. Use an absolute path for the symlink, which makes things interesting when
+# inspecting a chroot
+# 3. Use a wrapper script to invoke kmod with a different name, which isn't
+# possible in busybox ash without making a temporary directory, which means
+# you need an extra process to hang around to clean that directory up.
+- |
+ if [ -h /sbin ]; then
+ for app in modprobe lsmod rmmod insmod modinfo depmod; do
+ ln -sf kmod "$DESTDIR$PREFIX/bin/$app"
+ done
+ else
+ install -d "$DESTDIR"/sbin
+ for app in modprobe lsmod rmmod insmod modinfo depmod; do
+ ln -sf ../"$PREFIX"/bin/kmod "$DESTDIR/sbin/$app"
+ done
+ fi