[oe] update-alternatives broken badly (by me :()

Koen Kooi k.kooi at student.utwente.nl
Wed Jan 13 08:29:05 UTC 2010


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 12-01-10 23:21, Martin Jansa wrote:
> Hi,
> 
> Still no review/ACK :(.

They seem to look decent enough, but I lack the time to test them, so
feel free to apply them

regards,

Koen

> I'll try to explain it better to show how bad it can be and even make
> review easier.
> 
> We have target where sysvinit as init is crucial for successful boot (ie
> SHR on freerunner) and u-a-cworth is installed on image, because
> task-boot RDEPENDs on update-alternatives.
> 
> Let's start with image built after 2009-12-08.
> u-a-opkg is used for in do_rootfs, but u-a-cworth is installed in image
> too and is used by default.
> 
> T1) after flashing
>   ipkg/alternatives/init        opkg/alternatives/init
>     doesnt-exist                  /sbin/init
>                                   /sbin/init.sysvinit 60
>                                  ../bin/busybox 50
>   =>sysvinit is used, everything is fine
> 
> good scenario:
> T2a) sysvinit is upgraded first
>   ipkg/alternatives/init        opkg/alternatives/init
>     /sbin/init                    /sbin/init
>     /sbin/init.sysvinit 60        /sbin/init.sysvinit 60
>                                   ../bin/busybox 50
>   =>sysvinit is used, everything is fine
>   - newer file works but is incomplete
> 
> T3a) busybox is upgraded
>   ipkg/alternatives/init        opkg/alternatives/init
>     /sbin/init                    /sbin/init
>     /sbin/init.sysvinit 60        /sbin/init.sysvinit 60
>     ../bin/busybox 50             ../bin/busybox 50
>   =>sysvinit is used, everything is fine
>   - newer file works and is the same as opkg
> 
> bad scenario
> T2b) busybox is upgrade first
>   ipkg/alternatives/init        opkg/alternatives/init
>     /sbin/init                    /sbin/init
>     ../bin/busybox 50             /sbin/init.sysvinit 60
>                                   ../bin/busybox 50
>   =>busybox is used, device won't boot anymore
>   - newer file is from cworth but is worse
> 
> T3b) sysvinit is upgraded
>   ipkg/alternatives/init        opkg/alternatives/init
>     /sbin/init                    /sbin/init
>     /sbin/init.sysvinit 60        /sbin/init.sysvinit 60
>   ../bin/busybox 50             ../bin/busybox 50
>   
>   =>sysvinit is used again, everything is fine
>   - newer file works and is the same again
> 
> If we merge ipkg/alternatives and opkg/alternatives before T2b) there
> will be no problem.
> 
> If we merge it after T2b) and then force busybox upgrade then we will
> fix broken image too (as busybox is using probably the most u-a links
> and has lowest priority). So busybox PR bump is good idea AFTER merging
> u-a alternatives.
> 
> Worst scenario (where merger fails):
> Tfsck) After T3a) or T3b) user intentionally remove sysvint package 
>   (ie because he can boot even with busybox)
>   ipkg/alternatives/init        opkg/alternatives/init
>     /sbin/init                    /sbin/init
>     ../bin/busybox 50             /sbin/init.sysvinit 60
>                                   ../bin/busybox 50
>   =>busybox is used, user is happy
> 
> then we run merge script (longer alternative file wins
> =>sysvinit is used again, but without actuall /sbin/init.sysvinit file
> in fs.. boot fails, user is sad. I think there is no way to distinguish
> between T2b where newer shorter file is wrong and Tfsck where newer
> shorter file is the right one (without checking opkg history..)
> 
> With images built before 2009-12-08 it should be simple
> opkg/alternatives should be empty, all files from ipkg/alternatives are
> just moved there..
> 
> Why would I like to add the same merge script to opkg?
> 1) someone maybe already removed -cworth from image with first sign of
>    issues (but still too late) and -cworth postinst is still needed
> 
> 2) task-boot will be fixed (RDEPEND on same u-a as
>    virtual/update-alternatives-native) and user won't get -cworth update.
> 
> 3) If I get new -cworth and busybox in one opkg upgrade batch, then I'm
>    not sure which postinst will be executed first (we need -cworth first),
>    but opkg maybe run own postinst before configuring other packages (ie
>    portage does that completely even with restart of upgrade process)
> 
> Updated -cworth is already used in SHR (from shr/merge branch).
> 
> My shell foo is maybe not strong enough to check that everything is available 
> in all environments and no bashisms were used..)
> 
> Thanks and please comment (I'll resend whole patch serie as soon as
> someone confirms that's good path to go).
> 
> Regards,
> 

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.5 (Darwin)

iD8DBQFLTYRRMkyGM64RGpERAqECAKCx2TxGSWTxSt0JlFP2APfRu7sEIwCeM/bc
CKNj3N9TmFmaWj0LGCAlrJc=
=vegr
-----END PGP SIGNATURE-----





More information about the Openembedded-devel mailing list