Saturday, April 26, 2014

More travails for 64-bit Linux users

I should have realized it earlier.

Ubuntu, back in 13.10, got rid of ia32-libs. I had my nose rubbed in that this morning after a somewhat rocky transition to 14.04 (the rockiness was my fault). The claim is that ia32-libs was a "huge hack" and you should instead pull in the individual ia32 packages you need. How do you find out which ones? Run ldd on the executable.

After being silly and trying to run it on the shell script that you invoke to run Second Life (not much point to that!), I peeked down into the bin directory and...

melissa@storge:~/SecondLife/SecondLife-i686-3.6.8.282367$ ldd bin/do-not-directly-run-secondlife-bin 
linux-gate.so.1 =>  (0xf775b000)
libopenal.so.1 => not found
libalut.so => not found
libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xf771f000)
libcollada14dom.so => not found
libfreetype.so.6 => /usr/lib/i386-linux-gnu/libfreetype.so.6 (0xf7680000)
librt.so.1 => /lib/i386-linux-gnu/librt.so.1 (0xf7677000)
libhunspell-1.3.so.0 => not found
libboost_program_options-mt.so.1.52.0 => not found
libboost_regex-mt.so.1.52.0 => not found
libboost_context-mt.so.1.52.0 => not found
libgobject-2.0.so.0 => /usr/lib/i386-linux-gnu/libgobject-2.0.so.0 (0xf7624000)
libglib-2.0.so.0 => /lib/i386-linux-gnu/libglib-2.0.so.0 (0xf7518000)
libGLU.so.1 => not found
libGL.so.1 => /usr/lib32/nvidia-337/libGL.so.1 (0xf740d000)
libX11.so.6 => /usr/lib/i386-linux-gnu/libX11.so.6 (0xf72d9000)
libfmodex.so => not found
libGLOD.so => not found
libSDL-1.2.so.0 => not found
libgdk-x11-2.0.so.0 => not found
libgthread-2.0.so.0 => /usr/lib/i386-linux-gnu/libgthread-2.0.so.0 (0xf72d5000)
libgtk-x11-2.0.so.0 => not found
libexpat.so.1 => /lib/i386-linux-gnu/libexpat.so.1 (0xf72ac000)
libssl.so.1.0.0 => not found
libcrypto.so.1.0.0 => not found
libboost_thread-mt.so.1.52.0 => not found
libfontconfig.so.1 => /usr/lib/i386-linux-gnu/libfontconfig.so.1 (0xf7270000)
libboost_filesystem-mt.so.1.52.0 => not found
libaprutil-1.so.0 => not found
libapr-1.so.0 => not found
libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0xf7186000)
libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xf7140000)
libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xf7123000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf6f73000)
/lib/ld-linux.so.2 (0xf775c000)
libz.so.1 => /lib/i386-linux-gnu/libz.so.1 (0xf6f59000)
libpng12.so.0 => /lib/i386-linux-gnu/libpng12.so.0 (0xf6f31000)
libffi.so.6 => /usr/lib/i386-linux-gnu/libffi.so.6 (0xf6f2a000)
libpcre.so.3 => /lib/i386-linux-gnu/libpcre.so.3 (0xf6eec000)
libnvidia-tls.so.337.12 => /usr/lib32/nvidia-337/tls/libnvidia-tls.so.337.12 (0xf6ee6000)
libnvidia-glcore.so.337.12 => /usr/lib32/nvidia-337/libnvidia-glcore.so.337.12 (0xf49cf000)
libXext.so.6 => /usr/lib/i386-linux-gnu/libXext.so.6 (0xf49bc000)
libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xf49b7000)
libxcb.so.1 => /usr/lib/i386-linux-gnu/libxcb.so.1 (0xf4995000)
libXau.so.6 => /usr/lib/i386-linux-gnu/libXau.so.6 (0xf4990000)
libXdmcp.so.6 => /usr/lib/i386-linux-gnu/libXdmcp.so.6 (0xf4989000)

The lines of interest have "not found" at the end...

libopenal.so.1 => not found
libalut.so => not found
libcollada14dom.so => not found
libhunspell-1.3.so.0 => not found
libboost_program_options-mt.so.1.52.0 => not found
libboost_regex-mt.so.1.52.0 => not found
libboost_context-mt.so.1.52.0 => not found
libGLU.so.1 => not found
libfmodex.so => not found
libGLOD.so => not found
libSDL-1.2.so.0 => not found
libgdk-x11-2.0.so.0 => not found
libgtk-x11-2.0.so.0 => not found
libssl.so.1.0.0 => not found
libcrypto.so.1.0.0 => not found
libboost_thread-mt.so.1.52.0 => not found
libboost_filesystem-mt.so.1.52.0 => not found
libaprutil-1.so.0 => not found
libapr-1.so.0 => not found

This has its good points--had we had to do this, or known to do this, or (ahem!) someone at Linden Lab who gives a darn done this from the start, we'd have known from the start what we were missing, installed it, and not have sat in the limbo of "why does everything but streaming audio work?" for years. Or rather, we would if we did something like

cd [wherever you keep SL]/bin; find -type f -exec ldd {} \; | grep "not found"

so we get them all; like Pokemon, you gotta.

On the other hand, we now get to potentially do this for each 32-bit program we want to run, and have the additional issue of working back from individual libraries to the packages to install.

Or you just say the heck with it and install all the 32-bit libraries.

Or...people could make actual 64-bit versions of the viewer. Some do, and to them all I say thank you; I'd hug you if I could. Now, if only Linden Lab would...