Re: Technic SSP on arch Linux/Linux Minecraft Grey Screen of Death
It's a 32/64 bit mismatch. Here is the ass end of your log:
[05:10:34] [sEVERE] java.lang.UnsatisfiedLinkError: /technicssp/bin/natives/liblwjgl.so: /technicssp/bin/natives/liblwjgl.so: wrong ELF class: ELFCLASS32 (Possible cause: architecture word width mismatch)
[05:10:34] [sEVERE] at java.lang.ClassLoader$NativeLibrary.load(Native Method)
[05:10:34] [sEVERE] at java.lang.ClassLoader.loadLibrary0(Unknown Source)
[05:10:34] [sEVERE] at java.lang.ClassLoader.loadLibrary(Unknown Source)
[05:10:34] [sEVERE] at java.lang.Runtime.load0(Unknown Source)
[05:10:34] [sEVERE] at java.lang.System.load(Unknown Source)
[05:10:34] [sEVERE] at org.lwjgl.Sys$1.run(Sys.java:69)
[05:10:34] [sEVERE] at java.security.AccessController.doPrivileged(Native Method)
[05:10:34] [sEVERE] at org.lwjgl.Sys.doLoadLibrary(Sys.java:65)
[05:10:34] [sEVERE] at org.lwjgl.Sys.loadLibrary(Sys.java:81)
[05:10:34] [sEVERE] at org.lwjgl.Sys.<clinit>(Sys.java:98)
[05:10:34] [sEVERE] at org.lwjgl.opengl.Display.<clinit>(Display.java:132)
[05:10:34] [sEVERE] at net.minecraft.client.Minecraft.a(Minecraft.java:260)
[05:10:34] [sEVERE] at net.minecraft.client.Minecraft.run(Minecraft.java:624)
[05:10:34] [sEVERE] at java.lang.Thread.run(Unknown Source)
I have been bitten by this bug serveral times, usually whenever I reinstall Minecraft. The problem is that when running under 64 bit Java LWJGL tries to load the 32 bit native libraries called lib*.so instead of the 64 bit native libraries called lib*64.so.
The solution is simple just open a terminal, cd to the location of the libraries (~/.techniclaucher/tekkit/bin/natives for me, replace the "tekkit" part with where ever the laucher puts the SSP modpack) and then run this command
for f in lib*64.so; do mv $f `basename $f 64.so`.so; done
This will trash your 32 bit Linux LWJGL libraries, so if you want to save them do this first
for f in lib{jinput-linux,lwjgl,openal}.so; do mv $f `basename $f .so`32.so; done
Then you will probably get this fuckup:
[00:13:15] [sEVERE] java.lang.UnsatisfiedLinkError: /tekkit/bin/natives/liblwjgl.so: libjawt.so: cannot open shared object file: No such file or directory
[00:13:15] [sEVERE] at java.lang.ClassLoader$NativeLibrary.load(Native Method)
[00:13:15] [sEVERE] at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1928)
[00:13:15] [sEVERE] at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1825)
[00:13:15] [sEVERE] at java.lang.Runtime.load0(Runtime.java:792)
[00:13:15] [sEVERE] at java.lang.System.load(System.java:1059)
[00:13:15] [sEVERE] at org.lwjgl.Sys$1.run(Sys.java:69)
[00:13:15] [sEVERE] at java.security.AccessController.doPrivileged(Native Method)
[00:13:15] [sEVERE] at org.lwjgl.Sys.doLoadLibrary(Sys.java:65)
[00:13:15] [sEVERE] at org.lwjgl.Sys.loadLibrary(Sys.java:81)
[00:13:15] [sEVERE] at org.lwjgl.Sys.<clinit>(Sys.java:98)
[00:13:15] [sEVERE] at org.lwjgl.opengl.Display.<clinit>(Display.java:132)
[00:13:15] [sEVERE] at net.minecraft.client.Minecraft.a(Minecraft.java:260)
[00:13:15] [sEVERE] at net.minecraft.client.Minecraft.run(Minecraft.java:624)
[00:13:15] [sEVERE] at java.lang.Thread.run(Thread.java:722)
Let's see if I can find it
$ locate libjawt.so
/usr/lib/jvm/java-6-openjdk/jre/lib/amd64/libjawt.so
/usr/lib/jvm/java-7-openjdk-amd64/jre/lib/amd64/libjawt.so
Nope that's nasty assed openjdk shit, which is allergic to minecraft :<
$ sudo updatedb
[sudo] password for Goatflakes: UberSecurePa$$word:p
$ locate libjawt.so
/usr/lib/jvm/java-6-openjdk/jre/lib/amd64/libjawt.so
/usr/lib/jvm/java-7-openjdk-amd64/jre/lib/amd64/libjawt.so
/usr/lib/jvm/jdk1.7.0_03/jre/lib/amd64/libjawt.so
That's better. So I just need to add /usr/lib/jvm/jdk1.7.0_03/jre/lib/amd64 to the path that ld.so searches. So I put this at the end of my ~/.bashrc so it will be run whenever I have a "interactive shell"
export LD_LIBRARY_PATH="/usr/lib/jvm/jdk1.7.0_03/jre/lib/amd64"
then run my ~/.bashrc to run that command under this particular shell, seeing as it only ran the old ~/.bashrc
. ~/.bashrc
Then launch Technic Launcher And... it works!
If this works for you, but then doesn't when you latter try to run Minecraft/the Technic Launcher from a script or something, then your best bet is to put the following line in it, before the command to run the launcher:
export LD_LIBRARY_PATH="/usr/lib/jvm/jdk1.7.0_03/jre/lib/amd64"
replace /usr/lib/... with where ever you found libjawt.so. This is because you can't guarantee that ~/.bashrc will run for non-interactive shells. Instead it expands $BASH_ENV and runs whatever file that names. But how to set $BASH_ENV? o.o SOOOO just put it into the script itself.
Strangely I didn't get this bug when I first played Tekkit on my new Linux lappy, but then suddenly I did :< IDK what was going on there, maybe the launcher originally had a version of LWJGL that didn't have this bug, then it "upgraded" to one that did, suddenly causing everything to stop working? ^O^
As a general technique looking at the bottom of an error dump will generally be more productive that looking at the top, because the bottom is where the fuckup is
EDIT: I had mistakenly put ~/.login instead of ~/.bashrc. ~/.login is only run for "login" shells (which makes sense) but things like terminal windows aren't :s. ~/.bashrc is run for interactive shells. So I changed it to that. And because if you run it from a launcher or script or something, that isn't an interactive shell, so I added a note just to set the needed environment variable in the damn launch script >.<