Hello Aníbal, On 07.10.2014 22:00, Aníbal Limón wrote: > 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]
please don't overwrite files in /usr/local/bin! People may have their own tools there. This, and the creation of these symlinks in a tmpdir in the first place, looks wrong to me. I think you'd better get rid of update-alternatives-cworth and use an implementation written in C. See http://git.openembedded.org/openembedded-core-contrib/log/?h=obi/dora for many dpkg-related fixes including an offline-capable version of dpkg's update-alternatives. I couldn't test these with master, but this branch contains most if not all patches to dpkg backported from master to dora. Regards, Andreas > > Signed-off-by: Aníbal Limón <anibal.li...@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 > } > -- _______________________________________________ Openembedded-core mailing list Openembedded-core@lists.openembedded.org http://lists.openembedded.org/mailman/listinfo/openembedded-core