Patchwork rootfs_ipk.bbclass: Ensure bad recommendations persist in the status file

login
register
mail settings
Submitter Richard Purdie
Date Nov. 12, 2011, 8:36 a.m.
Message ID <1321087015.26881.15.camel@ted>
Download mbox | patch
Permalink /patch/14867/
State Accepted
Commit 215ff6b2e9676c8c7dd8acfd696151bcd0f1490f
Headers show

Comments

Richard Purdie - Nov. 12, 2011, 8:36 a.m.
Currently bad recommendations are added to the status file with status
"ok". After a single opkg command, whilst it will ignore the recommendation,
the status changes to "installed" even if the recommended package was not
installed. Whilst this is likely a glitch in opkg's logic, the correct
way to persist the information in the status file is to set the status
to "hold" as deinstall packages with that status remain. With this change
the bad recommendations persist accross multiple opkg runs and the system
behaves as expected.

[YOCTO #1758]

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
---
Otavio Salvador - Nov. 12, 2011, 3:57 p.m.
On Sat, Nov 12, 2011 at 06:36, Richard Purdie
<richard.purdie@linuxfoundation.org> wrote:
> Currently bad recommendations are added to the status file with status
> "ok". After a single opkg command, whilst it will ignore the recommendation,
> the status changes to "installed" even if the recommended package was not
> installed. Whilst this is likely a glitch in opkg's logic, the correct
> way to persist the information in the status file is to set the status
> to "hold" as deinstall packages with that status remain. With this change
> the bad recommendations persist accross multiple opkg runs and the system
> behaves as expected.

I personally dislike fixing it in rootfs_ipk instead of opkg ... opkg
has change its behaviour behind the scenes and this needs to be fixed
IMO.
Richard Purdie - Nov. 12, 2011, 6:17 p.m.
On Sat, 2011-11-12 at 13:57 -0200, Otavio Salvador wrote:
> On Sat, Nov 12, 2011 at 06:36, Richard Purdie
> <richard.purdie@linuxfoundation.org> wrote:
> > Currently bad recommendations are added to the status file with status
> > "ok". After a single opkg command, whilst it will ignore the recommendation,
> > the status changes to "installed" even if the recommended package was not
> > installed. Whilst this is likely a glitch in opkg's logic, the correct
> > way to persist the information in the status file is to set the status
> > to "hold" as deinstall packages with that status remain. With this change
> > the bad recommendations persist accross multiple opkg runs and the system
> > behaves as expected.
> 
> I personally dislike fixing it in rootfs_ipk instead of opkg ... opkg
> has change its behaviour behind the scenes and this needs to be fixed
> IMO.

I'm not sure opkg has changed behaviour. We used to just do one single
"opkg install" after which the status file was incorrect but the bad
recommends was not installed. We started doing more than one "opkg
install" and this has muddied the waters so to speak. I'm still unclear
if the bad recommends actually make it onto the target system but
certainly the status file was incorrect.

The summary is we were not using opkg correctly in the first place. This
patch corrects that problem so we do what we what that code intended to
do and persists the bad recommend into the status file. This fixes the
bug that was reported too.

There look to be remaining issues in opkg but not ones that directly
affect the build system. Please do take this up with the opkg people but
I'm afraid I personally don't have time to start debugging opkg and I
think there are other more urgent priorities at the moment now this is a
non-issue for the builds.

Cheers,

Richard
Otavio Salvador - Nov. 12, 2011, 6:21 p.m.
On Sat, Nov 12, 2011 at 16:17, Richard Purdie
<richard.purdie@linuxfoundation.org> wrote:
> On Sat, 2011-11-12 at 13:57 -0200, Otavio Salvador wrote:
>> On Sat, Nov 12, 2011 at 06:36, Richard Purdie
>> <richard.purdie@linuxfoundation.org> wrote:
>> > Currently bad recommendations are added to the status file with status
>> > "ok". After a single opkg command, whilst it will ignore the recommendation,
>> > the status changes to "installed" even if the recommended package was not
>> > installed. Whilst this is likely a glitch in opkg's logic, the correct
>> > way to persist the information in the status file is to set the status
>> > to "hold" as deinstall packages with that status remain. With this change
>> > the bad recommendations persist accross multiple opkg runs and the system
>> > behaves as expected.
>>
>> I personally dislike fixing it in rootfs_ipk instead of opkg ... opkg
>> has change its behaviour behind the scenes and this needs to be fixed
>> IMO.
>
> I'm not sure opkg has changed behaviour. We used to just do one single
> "opkg install" after which the status file was incorrect but the bad
> recommends was not installed. We started doing more than one "opkg
> install" and this has muddied the waters so to speak. I'm still unclear
> if the bad recommends actually make it onto the target system but
> certainly the status file was incorrect.

It does end onto the target.

> The summary is we were not using opkg correctly in the first place. This
> patch corrects that problem so we do what we what that code intended to
> do and persists the bad recommend into the status file. This fixes the
> bug that was reported too.
>
> There look to be remaining issues in opkg but not ones that directly
> affect the build system. Please do take this up with the opkg people but
> I'm afraid I personally don't have time to start debugging opkg and I
> think there are other more urgent priorities at the moment now this is a
> non-issue for the builds.

This does fix the problem we were having  but I am concerned about
other possible behaviour changes it might happen.

I think this patch ought to go but someone skilled on opkg might take
a look at opkg code to see if this isn't a regression of lately
changes.

Patch

diff --git a/meta/classes/rootfs_ipk.bbclass b/meta/classes/rootfs_ipk.bbclass
index 3b4c392..4a5a2dd 100644
--- a/meta/classes/rootfs_ipk.bbclass
+++ b/meta/classes/rootfs_ipk.bbclass
@@ -44,7 +44,7 @@  fakeroot rootfs_ipk_do_rootfs () {
 		pkginfo="`opkg-cl ${IPKG_ARGS} info $i`"
 		if [ ! -z "$pkginfo" ]; then
 			echo "$pkginfo" | grep -e '^Package:' -e '^Architecture:' -e '^Version:' >> $STATUS
-			echo "Status: deinstall ok not-installed" >> $STATUS
+			echo "Status: deinstall hold not-installed" >> $STATUS
 			echo >> $STATUS
 		else
 			echo "Requested ignored recommendation $i is not a package"