[OE-core] [PATCH] busybox: fix upgrade problem with deb packages

Aníbal Limón anibal.limon at linux.intel.com
Tue Oct 7 22:49:31 UTC 2014


HI Andreas,

I reviewed the patches and looks good, only i have a comment
in this file,

http://git.openembedded.org/openembedded-core-contrib/commit/?h=obi/dora&id=a5f18409d1bf2877f898b902cafc317cbf7462e4 


I didn't know if the same apply for rpm and ipk.

There are a lot of patches,  Do you have a plan to port them to master?

I can help with that.

Best regards.

On 07/10/14 15:36, Andreas Oberritter wrote:
> 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.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
>>   }
>>




More information about the Openembedded-core mailing list