X11 commands broken after SLES11SP3 to SLES12SP1 upgrade

Dear SLES-ers,
I need your help.

I upgraded my SLES11SP3 to SLES12SP1 using the .ISO in a USB memory stick.
Everything went smoothly but now most (if not all) X11 commands are broken, leaving my server (256 cores) almost usless to my users.

unset LD_LIBRARY_PATH
/usr/bin/xterm
/usr/bin/xterm: symbol lookup error: /usr/lib64/libX11.so.6: undefined symbol: xcb_take_socket

Before upgrading I saved my SLES11Sp3 system in a disk and now I can use its libraries. In /usr/lib64_SLES11SP3 I copied /usr/lib64 and now I can use it. If I do

setenv LD_LIBRARY_PATH /usr/lib64_SLES11Sp3
then xterm works even if with some warnings:

Warning: translation table syntax error: Unknown keysym name: DRemove
Warning: … found while parsing ‘DRemove: ignore()’
Warning: String to TranslationTable conversion encountered errors

Unfortunately the same trick doesn’t work for other commands, eg. emacs

unsetenv LD_LIBRARY_PATH
/usr/bin/emacs
/usr/bin/emacs-gtk: symbol lookup error: /usr/lib64/libX11.so.6: undefined symbol: xcb_take_socket
setenv LD_LIBRARY_PATH /usr/lib64_SLES11Sp3
/usr/bin/emacs
/usr/bin/emacs-gtk: symbol lookup error: /usr/lib64/libcairo-gobject.so.2: undefined symbol: cairo_region_destroy

Dear SLES-sers,
can you help me?
Thank you very much,
Emanuele

this is the list of relevant installed RPMs :
rpm -qa | grep -i x11|sort

dbus-1-x11-1.8.16-19.1.x86_64
emacs-x11-24.3-16.32.x86_64
ghostscript-x11-9.15-6.5.x86_64
libQt5X11Extras5-5.5.1-3.2.x86_64
libX11-6-1.6.2-4.12.x86_64
libX11-6-32bit-1.6.2-4.12.x86_64
libX11-data-1.6.2-4.12.noarch
libX11-devel-1.6.2-4.12.x86_64
libX11-xcb1-1.6.2-4.12.x86_64
libX11-xcb1-32bit-1.6.2-4.12.x86_64
libqt4-x11-32bit-4.8.6-7.1.x86_64
libqt4-x11-4.8.6-7.1.x86_64
libxkbcommon-x11-0-0.4.1-3.1.x86_64
patterns-sles-x11-12-64.3.x86_64
perl-X11-Protocol-0.56-12.19.x86_64
pulseaudio-module-x11-5.0-2.7.x86_64
x11-tools-0.1-205.1.noarch
x11perf-1.5.4-1.15.x86_64
xorg-x11-7.6_1-14.17.noarch
xorg-x11-Xvnc-1.4.3-14.1.x86_64
xorg-x11-devel-7.6-45.14.noarch
xorg-x11-driver-input-7.6_1-11.10.noarch
xorg-x11-driver-video-7.6_1-14.30.x86_64
xorg-x11-essentials-7.6_1-14.17.noarch
xorg-x11-fonts-7.6-29.45.noarch
xorg-x11-fonts-core-7.6-29.45.noarch
xorg-x11-libXpm-7.4-1.17.x86_64
xorg-x11-libs-7.6-45.14.noarch
xorg-x11-libxcb-7.4-1.29.1.x86_64
xorg-x11-proto-devel-7.6-49.97.x86_64
xorg-x11-server-7.6_1.15.2-51.2.x86_64
xorg-x11-server-extra-7.6_1.15.2-51.2.x86_64
xorg-x11-server-sdk-7.6_1.15.2-51.2.x86_64
xorg-x11-util-devel-7.6_1-7.15.noarch
yast2-x11-3.1.3-2.14.x86_64

I have to say that due to grub problems I booted the system manually and before booting I didn’t explicitely defined a graphic terminal.
As a result I have no graphic console and none of the following commands starts it:
systemctl isolate graphical.target
init 5

I booted as it follows

grub> set root=(hd0,gpt2)
grub> linuxefi /boot/vmlinuz root=/dev/sda2
grub> initrdefi /boot/initrd
grub> boot

but before booting I DIDN’T type any of the following grub command:
insmod efi_gop
insmod efi_uga
insmod gzio
insmod gettext
insmod gfxterm
insmod gfxmenu
insmod png
terminal_output gfxterm

Thus my hope is that the missing graphical console is the reason of my xcb_* errors.
Since my booting procedure is still a mess I can’t verify the above hope.

What do you think?
Have I have a hope?

Thanks a lot,
Emanuele

SOLVED!!

soon after the upgrade in /usr/lib64 there was a problem:
libxcb.so pointed to a missing .so

cd /usr/lib64
ls -ls libxcb.so*
0 lrwxrwxrwx 1 root root 15 Aug 11 13:51 libxcb.so -> libxcb.so.1.1.0
0 lrwxrwxrwx 1 root root 15 Mar 2 2014 libxcb.so.1 -> libxcb.so.1.0.0
116 -rwxr-xr-x 1 root root 113536 May 24 2013 libxcb.so.1.0.0

The file /usr/lib64/libxcb.so.1.1.0 was missing, being present only its previous version libxcb.so.1.0.0

I found out that in the SLES12SP1 DVD1 there is a rpm named libxcb1-1.10-1.21.x86_64.rpm which contains the version 1.1.0 of libxcb.
Such rpm was not installed during the upgrade process (I don't know why) and when I had a look into it I found there the missing
xcb_take_socket

rpm2cpio /mnt/suse/x86_64/libxcb1-1.10-1.21.x86_64.rpm |cpio -idmv
./usr/lib64/libxcb.so.1
./usr/lib64/libxcb.so.1.1.0
255 blocks

nm -D ./usr/lib/libxcb.so.1 |grep xcb_take_socket
0000a8f0 T xcb_take_socket

since in /usr/lib64 there was not any libxcb.so.1.1.0 I copied there the one in ./usr/lib/

In /usr/lib64 I then modified the links libxcb.so and libxcb.so.1 to point to the new libxcb.so.1.1.0

Now all seems to work properly!

I hope this helps somone.
Ciao,
Emanuele

emanuele lombardi Wrote in message:
[color=blue]

SOLVED!!

soon after the upgrade in /usr/lib64 there was a problem:
libxcb.so pointed to a missing .so

cd /usr/lib64
ls -ls libxcb.so*
0 lrwxrwxrwx 1 root root 15 Aug 11 13:51 libxcb.so →
libxcb.so.1.1.0
0 lrwxrwxrwx 1 root root 15 Mar 2 2014 libxcb.so.1 →
libxcb.so.1.0.0
116 -rwxr-xr-x 1 root root 113536 May 24 2013 libxcb.so.1.0.0

The file /usr/lib64/libxcb.so.1.1.0 was missing, being present only
its previous version libxcb.so.1.0.0

I found out that in the SLES12SP1 DVD1 there is a rpm named
libxcb1-1.10-1.21.x86_64.rpm which contains the version 1.1.0 of
libxcb.
Such rpm was not installed during the upgrade process (I don’t know
why) and when I had a look into it I found there the missing
xcb_take_socket

rpm2cpio /mnt/suse/x86_64/libxcb1-1.10-1.21.x86_64.rpm |cpio -idmv
./usr/lib64/libxcb.so.1
./usr/lib64/libxcb.so.1.1.0
255 blocks

nm -D ./usr/lib/libxcb.so.1 |grep xcb_take_socket
0000a8f0 T xcb_take_socket

since in /usr/lib64 there was not any libxcb.so.1.1.0 I copied there
the one in ./usr/lib/

In /usr/lib64 I then modified the links libxcb.so and libxcb.so.1 to
point to the new libxcb.so.1.1.0

Now all seems to work properly![/color]

Why did you not install the libxcb1 package rather than extract
the libxcb.so file and then copy it into place?

HTH.

Simon Flood
SUSE Knowledge Partner

----Android NewsGroup Reader----
http://usenet.sinaapp.com/

Hi *,

seems my according response go lost somewhere… installing the RPM is highly recommended over copying the files manually, since future updates will only be applied based on the installation status of the RPM, not based on files.

Another issue I saw was that

since in /usr/lib64 there was not any libxcb.so.1.1.0 I copied there the one in ./usr/lib/

implies that the 32-bit version of the library was put into the directory for 64bit libraries, which would still break applications requesting the 64bit version… my original reply recommended to use “file” on both library copies to confirm that /usr/lib64 contains the 64bit version and /usr/lib has the 32-bit version.

Regards,
Jens

Thanks to you smflood and jmodzden for your help.

I suppose now I should do something like this:
zypper in -f libxcb1-1.10-1.21.x86_64.rpm

I did a test and I got as follows:

zypper in -f -D libxcb1-1.10-1.21.x86_64.rpm
Refreshing service ‘Advanced_Systems_Management_Module_12_x86_64’.
Refreshing service ‘Containers_Module_12_x86_64’.
Refreshing service ‘SUSE_Linux_Enterprise_Server_12_SP1_x86_64’.
Refreshing service ‘SUSE_Linux_Enterprise_Software_Development_Kit_12_SP1_x86_64’.
Refreshing service ‘Web_and_Scripting_Module_12_x86_64’.
Loading repository data…
Reading installed packages…
Forcing installation of ‘libxcb1-1.10-1.21.x86_64’ from repository ‘Plain RPM files cache’.
Resolving package dependencies…

Problem: freeglut-080721-21.9.x86_64 requires libxcb-xlib.so.0()(64bit), but this requirement cannot be provided
deleted providers: xorg-x11-libxcb-7.4-1.29.1.x86_64
Solution 1: Following actions will be done:
deinstallation of freeglut-080721-21.9.x86_64
deinstallation of giflib-4.1.6-13.1.x86_64
deinstallation of gstreamer-0_10-plugins-base-0.10.35-5.15.8.x86_64
deinstallation of libgcj43-4.3.4_20091019-0.37.46.x86_64
deinstallation of libgtksourceview-2_0-0-2.8.2-0.1.195.x86_64
deinstallation of libgweather1-2.28.0-1.4.8.x86_64
deinstallation of libnotify1-0.4.4-173.29.28.1.x86_64
deinstallation of libwmf-0.2.8.4-206.27.4.x86_64
deinstallation of libxklavier15-4.0-1.5.26.x86_64
deinstallation of metacity-2.28.1-0.20.1.x86_64
deinstallation of mjpegtools-1.9.0rc3-1.33.x86_64
deinstallation of t1lib-5.1.1-100.21.1.x86_64
deinstallation of xorg-x11-libXpm-7.4-1.17.x86_64
deinstallation of gcc43-gij-4.3.4_20091019-0.37.46.x86_64
deinstallation of gstreamer-0_10-plugins-base-lang-0.10.35-5.15.8.x86_64
deinstallation of gstreamer-0_10-plugins-good-0.10.30-5.12.15.x86_64
deinstallation of gtksourceview-lang-2.8.2-0.1.195.x86_64
deinstallation of libgcj43-devel-4.3.4_20091019-0.37.46.x86_64
deinstallation of libgstapp-0_10-0-0.10.35-5.15.8.x86_64
deinstallation of libgstinterfaces-0_10-0-0.10.35-5.15.8.x86_64
deinstallation of metacity-lang-2.28.1-0.20.1.x86_64
deinstallation of gstreamer-0_10-plugins-good-lang-0.10.30-5.12.15.x86_64
deinstallation of gstreamer-0_10-plugins-base-devel-0.10.35-5.15.8.x86_64
Solution 2: do not install libxcb1-1.10-1.21.x86_64
Solution 3: break freeglut-080721-21.9.x86_64 by ignoring some of its dependencies

Choose from above solutions by number or cancel [1/2/3/c] (c):

I canceled , is it safe to continue with solution 3 (break) ?

dear Jens,
you are right but I did well! In fact I made a typo in my reply:
I actually copied into /usr/lib64 the file extracted by rpm2cpio into the dir ./usr/lib64 (not ./usr/lib as I wrongly typed)

[QUOTE=jmozdzen;34207]

since in /usr/lib64 there was not any libxcb.so.1.1.0 I copied there the one in ./usr/lib/

implies that the 32-bit version of the library was put into the directory for 64bit libraries, which would still break applications requesting the 64bit version… my original reply recommended to use “file” on both library copies to confirm that /usr/lib64 contains the 64bit version and /usr/lib has the 32-bit version.

Regards,
Jens[/QUOTE]

Hi Emanuele,

no, it isn’t. (The same goes for running commands with “-f” in the first place.)

You’ve got yourself a system that has divergent requirements - some pieces of software require libxcb-xlib.so, others require libxcb1. As both in the end have the same library name, you have to decide which one of both sets (and hence which libxcb version) you want to run.

I guess that many of these programs that zypper wants to deinstall come from a non-SLES source (Packman?) - do you really need these or are these left-overs from an older install? In the latter case, let zypper uninstall these and have libxcb1.

Even if you install the lib by hand, or force installing libxcb1 by breaking other dependencies, you’ll run into an inconsistent system state. That’s why using zypper/rpm is the way to go: You’ll get warned before installing, rather than copying some lib and weeks later wonder about obscure program behavior in an seemingly unrelated back room of your system.

Regards,
Jens

Hi Emanuele,

it’s better to have typos in forum messages, rather than when administrating the actual server :smiley:

Regards,
Jens