[OE-core] [PATCH] busybox: fix upgrade problem with deb packages
Aníbal Limón
anibal.limon at linux.intel.com
Tue Oct 7 20:00:30 UTC 2014
Busybox prerm scripts create temp directory and fill with
symlinks to common utilities in order to upgrade itself, PATH
is exported but dpkg didn't take a look of this links and fails.
In order to fix,
Changed temp directory to /usr/loca/bin in debian packages.
Added missing links for utilities tar, find, tail, cut.
Busybox syslog prerm script tries to stop the daemon but if already
stopped returns 1 then causes that dpkg fails because it expects 0.
In order to fix,
Added workaround to exit 0 in debian packages.
[YOCTO #6768]
Signed-off-by: Aníbal Limón <anibal.limon at linux.intel.com>
---
meta/recipes-core/busybox/busybox.inc | 46 ++++++++++++++++++++++++++++++++++-
1 file changed, 45 insertions(+), 1 deletion(-)
diff --git a/meta/recipes-core/busybox/busybox.inc b/meta/recipes-core/busybox/busybox.inc
index bd66e4f..61f12b4 100644
--- a/meta/recipes-core/busybox/busybox.inc
+++ b/meta/recipes-core/busybox/busybox.inc
@@ -377,13 +377,46 @@ pkg_postinst_${PN} () {
fi
done
fi
+
+ # Workaround for deb packages, clean
+ if [ "$DPKG_MAINTSCRIPT_PACKAGE"x != x ]; then
+ tmpdir='/usr/local/bin'
+ rm -f $tmpdir/[
+ rm -f $tmpdir/test
+ rm -f $tmpdir/head
+ rm -f $tmpdir/sh
+ rm -f $tmpdir/basename
+ rm -f $tmpdir/echo
+ rm -f $tmpdir/mv
+ rm -f $tmpdir/ln
+ rm -f $tmpdir/dirname
+ rm -f $tmpdir/rm
+ rm -f $tmpdir/sed
+ rm -f $tmpdir/sort
+ rm -f $tmpdir/grep
+ rm -f $tmpdir/tar
+ rm -f $tmpdir/find
+ rm -f $tmpdir/tail
+ rm -f $tmpdir/cut
+ fi
}
pkg_prerm_${PN} () {
# This is so you can make busybox commit suicide - removing busybox with no other packages
# providing its files, this will make update-alternatives work, but the update-rc.d part
# for syslog, httpd and/or udhcpd will fail if there is no other package providing sh
- tmpdir=`mktemp -d /tmp/busyboxrm-XXXXXX`
+
+ # Workaround for deb packages, dpkg don't take into account exported PATH variable,
+ # use instead local directory.
+ if [ "$DPKG_MAINTSCRIPT_PACKAGE"x == x ]; then
+ tmpdir=`mktemp -d /tmp/busyboxrm-XXXXXX`
+ else
+ tmpdir='/usr/local/bin'
+ if [ ! -e $tmpdir ]; then
+ mkdir -p $tmpdir
+ fi
+ fi
+
ln -s /bin/busybox $tmpdir/[
ln -s /bin/busybox $tmpdir/test
ln -s /bin/busybox $tmpdir/head
@@ -397,6 +430,11 @@ pkg_prerm_${PN} () {
ln -s /bin/busybox $tmpdir/sed
ln -s /bin/busybox $tmpdir/sort
ln -s /bin/busybox $tmpdir/grep
+ ln -s /bin/busybox $tmpdir/tar
+ ln -s /bin/busybox $tmpdir/find
+ ln -s /bin/busybox $tmpdir/tail
+ ln -s /bin/busybox $tmpdir/cut
+
export PATH=$PATH:$tmpdir
}
@@ -405,6 +443,12 @@ pkg_prerm_${PN}-syslog () {
if test "x$D" = "x"; then
if test "$1" = "upgrade" -o "$1" = "remove"; then
/etc/init.d/syslog stop
+
+ # Workaround for deb packages, if syslog is already stopped returns
+ # 1 but dpkg expects 0 and then fails.
+ if [ "$DPKG_MAINTSCRIPT_PACKAGE"x != x ]; then
+ exit 0
+ fi
fi
fi
}
--
1.9.1
More information about the Openembedded-core
mailing list