Bug 651806

Summary: Yast2 Gtk crashes due to a lost libzypp.so.800()(64bit) library (zypp:Head) (fix provided!)
Product: [openSUSE] openSUSE 11.2 Reporter: Carlo Strata <carlo.strata>
Component: YaST2Assignee: Forgotten User h13THG8RK1 <forgotten_h13THG8RK1>
Status: RESOLVED WONTFIX QA Contact: Jiri Srain <jsrain>
Severity: Normal    
Priority: P5 - None CC: forgotten_h13THG8RK1, ma
Version: Final   
Target Milestone: ---   
Hardware: All   
OS: openSUSE 11.2   
Whiteboard:
Found By: --- Services Priority:
Business Priority: Blocker: ---
Marketing QA Status: --- IT Deployment: ---
Attachments: First Exception Alert Window
Second Exception Alert Window

Description Carlo Strata 2010-11-05 20:22:49 UTC
User-Agent:       Mozilla/5.0 (X11; U; Linux x86_64; it; rv:1.9.2.12) Gecko/20101026 SUSE/3.6.12-1.1 Firefox/3.6.12

Since a month ago my Gnome (gtk) yast2 -> Software -> Package Manager crashes after updating and building local zypper cache.

Two alert windows appear one after another with "... YUINoDialogException..." the first and with "UI Syntax Error; Couldn't load plug-in gtk_pkg..." the second one (see attached images for details).

My libzypp is from
http://download.opensuse.org/repositories/zypp:/Head/

I also use
http://download.opensuse.org/repositories/YaST:/Head/
http://download.opensuse.org/repositories/GNOME:/STABLE:/2.30/

With a system verify I found (don't care about Italian messages)
carlobook:/home/carlo # zypper ve
[...]
Problema: niente fornisce libzypp.so.800()(64bit) necessario a libqdialogsolver1-1.3.0-340.81.x86_64
Problema: niente fornisce libzypp.so.800()(64bit) necessario a yast2-gtk-2.21.74-154.1.x86_64
Problema: niente fornisce libzypp.so.800()(64bit) necessario a yast2-gtk-2.21.74-154.1.x86_64

so that I type
carlobook:/home/carlo # rpm -ql libzypp | grep -i libzypp
/usr/lib64/libzypp.so.807
/usr/lib64/libzypp.so.807.1.0

and finally
carlobook:/home/carlo # cd /usr/lib64

first of all I check the situation
carlobook:/usr/lib64 # ll *libzy* -d
lrwxrwxrwx 1 root root      18  4 nov 09:51 libzypp.so.807 -> libzypp.so.807.1.0
-rwxr-xr-x 1 root root 5697816  3 nov 16:44 libzypp.so.807.1.0

then I just create a new symlink
carlobook:/usr/lib64 # ln -s libzypp.so.807.1.0 libzypp.so.800

I verified it
carlobook:/usr/lib64 # ll *libzy* -d
lrwxrwxrwx 1 root root      18  5 nov 16:51 libzypp.so.800 -> libzypp.so.807.1.0
lrwxrwxrwx 1 root root      18  4 nov 09:51 libzypp.so.807 -> libzypp.so.807.1.0
-rwxr-xr-x 1 root root 5697816  3 nov 16:44 libzypp.so.807.1.0

And then yast2 on Gnome (gtk) went back to run well. ;-)

This is my libzypp package
carlobook:/home/carlo # rpm -qa | grep -i libzypp
libzypp-8.8.0-1.1.x86_64

or, in details:
carlobook:/home/carlo # rpm -qi libzypp
Name        : libzypp                      Relocations: (not relocatable)
Version     : 8.8.0                             Vendor: obs://build.opensuse.org/zypp:Head
Release     : 1.1                           Build Date: mer 03 nov 2010 16:45:33 CET
Install Date: gio 04 nov 2010 09:51:45 CET      Build Host: build30
Group       : System/Packages               Source RPM: libzypp-8.8.0-1.1.src.rpm
Size        : 7925211                          License: GPLv2+
Signature   : DSA/SHA1, mer 03 nov 2010 16:46:00 CET, Key ID 9e9ab9fdf3ef3328
Summary     : Package, Patch, Pattern, and Product Management
Description :
Package, Patch, Pattern, and Product Management

Authors:
--------
    Michael Andres <ma@suse.de>
    Jiri Srain <jsrain@suse.cz>
    Stefan Schubert <schubi@suse.de>
    Duncan Mac-Vicar <dmacvicar@suse.de>
    Klaus Kaempf <kkaempf@suse.de>
    Marius Tomaschewski <mt@suse.de>
    Stanislav Visnovsky <visnov@suse.cz>
    Ladislav Slezak <lslezak@suse.cz>
Distribution: zypp:Head / openSUSE_11.2


So you could include in this package next release also the creation of the above symlink (libzypp.so.800).

Hope that help.

Carlo


Reproducible: Always

Steps to Reproduce:
1. Use the http://download.opensuse.org/repositories/zypp:/Head/ repository on OpenSuSE 11.2
2. Use also the http://download.opensuse.org/repositories/YaST:/Head/ repository
3. On Gnome 2.30.x run Yast2 -> Software > Package Manager
Actual Results:  
System crashes (Exception)

Expected Results:  
Use Package Manager.

See the simple fix I suggest.

Until today I work around this trouble running 

carlobook:/home/carlo # yast2 --qt &
[1] 7082
carlobook:/home/carlo # QGtkStyle was unable to detect the current GTK+ theme.
No index for key:  "Name"  value:  "" 

[1]+  Done                    yast2 --qt
carlobook:/home/carlo #

That show you a little second bug... :-)
Comment 1 Carlo Strata 2010-11-05 20:25:51 UTC
Created attachment 398836 [details]
First Exception Alert Window
Comment 2 Carlo Strata 2010-11-05 20:26:46 UTC
Created attachment 398837 [details]
Second Exception Alert Window
Comment 3 Forgotten User h13THG8RK1 2010-11-06 01:04:10 UTC
Hi Carlo,

So, the gtk plugin is linked to libzypp.so.800 when it should link to libzypp.so.807.

The reason for that is that the gtk plugin over YaST:Head is no longer built for opensuse 11.2. In fact, since more recently, no yast2 package is being built for 11.2 at all -- so the ncurses and qt plugins will fail in the future too, as you upgrade libzypp.

Your symlink worked because libzypp ABI happened to be backward compatible. I don't think they guarantee that's always the case -- otherwise I'd expect them telling libtool to link applications to the generic libzypp.so and not specific versions like libzypp.so.800. (If they do guarantee backward compatibility, then surely fixing libtool would be a better approach than keeping a trail of symlinks.)

--

The QGtkStyle error message (a qt style that mimics gtk) can't be reproduced in 11.2, since I think QGtkStyle was only introduced in the qt version of 11.3. So, it's probably due to some system config file you're missing. It shouldn't happen I think if all package dependencies were well specified -- but given it's a minor issue, it's probably worth to swept it for under the carpet.

You could try fixing it by firing "qtconfig" and then do "File > Save" (you will have to make some change in order for that menu entry be active).
Comment 4 Forgotten User h13THG8RK1 2010-11-06 01:08:43 UTC
Hi Michael,

Can you tell us if libzypp ABI is supposed to be backward compatible?

If so, shouldn't applications be linking to libzypp.so, rather than specific versions like libzypp.so.807?  (so that people can upgrade libzypp alone, and programs depending on it won't break.)
Comment 5 Carlo Strata 2010-11-06 13:38:06 UTC
(In reply to comment #3)
> Hi Carlo,
> 
> So, the gtk plugin is linked to libzypp.so.800 when it should link to
> libzypp.so.807.
> 
> The reason for that is that the gtk plugin over YaST:Head is no longer built
> for opensuse 11.2. In fact, since more recently, no yast2 package is being
> built for 11.2 at all -- so the ncurses and qt plugins will fail in the future
> too, as you upgrade libzypp.
> 
> Your symlink worked because libzypp ABI happened to be backward compatible. I
> don't think they guarantee that's always the case -- otherwise I'd expect them
> telling libtool to link applications to the generic libzypp.so and not specific
> versions like libzypp.so.800. (If they do guarantee backward compatibility,
> then surely fixing libtool would be a better approach than keeping a trail of
> symlinks.)

That s what I suppose: I think 8.0.7 and 8.0.0 version numbers sound better as well as a bug fix difference rather than an API change in my head (only in mime?).


> 
> --
> 
> The QGtkStyle error message (a qt style that mimics gtk) can't be reproduced in
> 11.2, since I think QGtkStyle was only introduced in the qt version of 11.3.
> So, it's probably due to some system config file you're missing. It shouldn't
> happen I think if all package dependencies were well specified -- but given
> it's a minor issue, it's probably worth to swept it for under the carpet.
Help -> "About QT" yields
This program uses Qt version 4.7.0.

This is because I'm also using these other repos
http://download.opensuse.org/repositories/KDE:/Qt/openSUSE_11.2/
http://download.opensuse.org/repositories/KDE:/Release:/45/openSUSE_11.2/

Don't think my notebook is an heap broken all over: no it isn't. Is a dual Gnome 2.30.2/KDE 4.5.3 "release 8" (I use KDE only to sometimes take a look to him and to be able to use Kolour Paint and sometimes Dolphin). I use and test new yast2 (11.3) users' experience on my "updated 11.2" very well.

If you are interest to know my all repos and an ordered list of all my installed packages to evaluate somethings, just ask to me for them, I will post them here asap. :-)

> 
> You could try fixing it by firing "qtconfig" and then do "File > Save" (you
> will have to make some change in order for that menu entry be active).

That fix it, but I must really change something and not only make two opposite changes with the only purpose to light File -> Save menu item! ;-)

Now only the "No index for key:  "Name"  value:  "" " ramains, but certainly I swept it for under the carpet! I'm installing a clean hard disk with 11.3 in next weeks on my notebook (which 11.2 install come from an 11.1 upgrade that on his own come from 11.0!). It's time for a new 2.5" 7200 rpm sata harddisk, already on my desk, now with ext4 file system!

Thank you.

These are the "logs" (after the right File -> Save with pid 8314 qtconfig QGtkStyle error is fixed)

carlobook:/home/carlo # qtconfig &
[1] 8279
carlobook:/home/carlo # QGtkStyle was unable to detect the current GTK+ theme.

[1]+  Done                    qtconfig
carlobook:/home/carlo # 
carlobook:/home/carlo # yast2 --qt &
[1] 8280
carlobook:/home/carlo # QGtkStyle was unable to detect the current GTK+ theme.
No index for key:  "Name"  value:  "" 
^C
carlobook:/home/carlo # 
carlobook:/home/carlo # qtconfig &
[2] 8314
[1]   Done                    yast2 --qt
carlobook:/home/carlo # QGtkStyle was unable to detect the current GTK+ theme.
QGtkStyle was unable to detect the current GTK+ theme.
QGtkStyle was unable to detect the current GTK+ theme.

[2]+  Done                    qtconfig
carlobook:/home/carlo # qtconfig &
[1] 8318
carlobook:/home/carlo # 
[1]+  Done                    qtconfig
carlobook:/home/carlo # yast2 --qt &
[1] 8319
carlobook:/home/carlo # No index for key:  "Name"  value:  "" 

[1]+  Done                    yast2 --qt
carlobook:/home/carlo #
Comment 6 Forgotten User h13THG8RK1 2010-11-06 17:28:52 UTC
About the qt plugin error message, does it also show up when you run a specific tool. e.g.:

yast2 users --qt
Comment 7 Carlo Strata 2010-11-07 11:44:54 UTC
I think the wrong remaining message may be relative to an incorrect access to an hash table with some bad initialized variables (generic "name" value for key)...

...

This is the output you ask for:

carlobook:/home/carlo # yast2 users --qt
Use of uninitialized value $Parse::RecDescent::skip in concatenation (.) or
	string at /usr/lib/perl5/vendor_perl/5.10.0/Parse/RecDescent.pm line 2811 (#1)
    (W uninitialized) An undefined value was used as if it were already
    defined.  It was interpreted as a "" or a 0, but maybe it was a mistake.
    To suppress this warning assign a defined value to your variables.
    
    To help you figure out what was undefined, perl will try to tell you the
    name of the variable (if any) that was undefined. In some cases it cannot
    do this, so it also tells you what operation you used the undefined value
    in.  Note, however, that perl optimizes your program and the operation
    displayed in the warning may not necessarily appear literally in your
    program.  For example, "that $foo" is usually optimized into "that "
    . $foo, and the warning will refer to the concatenation (.) operator,
    even though there is no . in your program.
    
carlobook:/home/carlo # 

...

I want to be clear: on my "updated 11.2 x86-64" all (!) yast2/zypp packages are all of the new type (11.3 style, thank to OBS repos) and I like it. The kernel is the 11.2 updated one (2.6.31.14-0.4-default).

Only one package still remains un-upgradable (unless I will force it): this is "libstorage" 2.20.4 (I have the 2.19.14 (2010-04-16 dated!) from YaST:Head / openSUSE_11.2) because it needs parted at least 2.2 (I have the 1.9.0 (2010-04-01 dated!) from OBS filesystems / openSUSE_11.2).

...

I think something like download all packages before installing them (like Windows 7 updates utility does) without paralleling the two tasks (download and install) may be difficult to do on low storage space systems (and I see on features.opensuse.org many people ask for return back in this). Surely may exist inconsistency problems if, e.g., network link fall down and you don't have new packages on local machine, ...

I also suggest you to use the global progress bar (from 0% to 50%, e.g.) to inform people on the global download status... and from 50% + 1 to 100% to inform on global install status. This if you don't change the current two-phase install.

Hth,

Carlo
Comment 8 Forgotten User h13THG8RK1 2010-11-07 22:37:48 UTC
I asked you to run "yast2 users" to launch a specific tool, bypassing the yast2 shell. The shell doesn't actually use the qt plugin (though it's also bundled in the yast2-qt package I think), so that would tell us what code was responsible for the message printing.

But oh boy, the users tool is completely broken in your machine. Maybe all the tools that use yast2-perl are too. Given yast2 is no longer being maintained for 11.2 (and this is very likely a problem of packages not being upgraded in unison), I would just recommend you to upgrade your machine already. ;-)

(In reply to comment #7)
> I also suggest you to use the global progress bar (from 0% to 50%, e.g.) to
> inform people on the global download status... and from 50% + 1 to 100% to
> inform on global install status. This if you don't change the current two-phase
> install.

I completely agree on the progress bar. I am just an occasional contributor, but I'd think that problem is known and going to be addressed, given it's so egregious. But I cannot find any bug report on that, so please fill up one, so we can then assign it to whomever is most familiar with the code in question. :)
Comment 9 Michael Andres 2010-11-08 08:55:00 UTC
(In reply to comment #4)
> Hi Michael,
> 
> Can you tell us if libzypp ABI is supposed to be backward compatible?
> 
> If so, shouldn't applications be linking to libzypp.so, rather than specific
> versions like libzypp.so.807?  (so that people can upgrade libzypp alone, and
> programs depending on it won't break.)

This is true if you follow the officially released versions; 
for 11.2 this is libzypp-6.x.


But this one here is:
   Version     : 8.8.0
   obs://build.opensuse.org/zypp:Head

And https://build.opensuse.org/project/show?project=zypp:Head says:
   ZYpp HEAD branch USE AT YOUR OWN RISK
   Note, this project is based on the latest code which is highly experimental. 

This is the development branch towards 11.4, and of course we do have ABI changes there, while 11.4 is not out. That's why we even have a new major number (compared to 11.2,11.3). 

The changed minor between 8.0.0 and 8.7.0 tells you the ABI changed. Looking into the changelog you usually see how far backward compatible the new ABI is.

   version 8.8.0 (7)
                  ^ back to 8.7.x


If the 'libzypp.so.800 -> libzypp.so.807.1.0' symlink works, then by chance. We changed some structures and enum values, so if yast says 'left' zypp may easily hear 'right'...
Comment 10 Forgotten User h13THG8RK1 2010-11-08 16:59:58 UTC
(In reply to comment #9)
> If the 'libzypp.so.800 -> libzypp.so.807.1.0' symlink works, then by chance. We
> changed some structures and enum values, so if yast says 'left' zypp may easily
> hear 'right'...

Thanks Michael for all the great info, that was more than I was bargaining for. ;-)

Carlo, given yast2 head packages are no longer being built for 11.2, I'm afraid you'll have to upgrade your system if you want to keep using the latest and the greatest. :-)

If you want to contest that decision, please bring up the topic over the yast2 mailing list: http://lists.opensuse.org/
Comment 11 Carlo Strata 2010-11-08 17:57:19 UTC
No problem Ricardo, some weeks ago I decided to upgrade my notebook as I told above. I will do a clean install next days on my new 2.5" 7200 rpm hard disk! :-)

Thank you all very much. Since five years ago and sometime I test the Yast2 future with respect to my OpenSuSE current version before upgrading it.

As you suggest to me in comment 8, I open a new bug on "Yast2 install window evolution and improvements"; it's here
https://bugzilla.novell.com/show_bug.cgi?id=652116

Have a nice evening,

Carlo