MATLAB 2011a/2010b unter (K)Ubuntu

Heute wollte ich die neue MATLAB-Version 2011a aufspielen. Die Installationsdateien sind wie immer gezippt und wie immer gibt es mit Zip-Dateien, speziell wenn diese auf einer Windows-Maschine erstellt werden. Es stimmt immer grundsätzlich was nicht mit den Berechtigungen und symbolische Links werden durch Textdateien ersetzt, mit dem Namen der verknüpften Datei als Inhalt. So auch geschehen bei MATLAB, worauf es sich nicht installieren lässt.

Zuerst brach der Installer mit folgendem Fehler ab:

eval: 1: /tmp/mathworks_17889/java/jre/glnxa64/jre/bin/java: Permission denied

Das Problem liegt wie schon erwähnt daran, dass die Berechtigungen für die Ordner und Dateien nicht richtig gesetzt sind. Ein schnelles (wenn auch unsauberes)
[bash]chmod -R 755 .[/bash]
im Installationsordner wirkt Wunder, allerdings folgt der nächste Fehler sofort:

java.lang.UnsatisfiedLinkError: /home/[...]/R2011a-lnx64/bin/glnxa64/libinstutil.so: /home/[...]/R2011a-lnx64/bin/glnxa64/libstdc++.so.6: Die Datei ist zu kurz

„Die Datei ist zu kurz“ oder mit anderen Worten: Die Textdatei libstdc++.so.6 sollte eigentlich ein symbolischer Link auf die Datei libstdc++.so.6.0.10 sein. Abhilfe schafft da ein
[bash]rm bin/glnxa64/libstdc++.so.6 && ln -s libstdc++.so.6.0.10 bin/glnxa64/libstdc++.so.6[/bash]
Danach klappt’s auch wieder mit dem Installieren. Das gleiche Problem tritt bei der 32-bit Installation. Der Befehl lautet dort dann:
[bash]rm bin/glnx86/libstdc++.so.6 && ln -s libstdc++.so.6.0.10 bin/glnx86/libstdc++.so.6[/bash]

RT2870 under (K)Ubuntu Natty (11.04)

The new version of (K)Ubuntu, Natty (11.04), is shipped with the new Kernel 2.6.38 but still with the old wireless driver for the RT2870. If one does not want low speed on data transfers, the driver for the RT2870 has to be compiled manually, but that does not work without compilation errors. To solve this issue follow the steps for the previous version Maverick, which I described in my article „RT2870 compile error under (K)Ubuntu Maverick (10.10)“.

RT2870 unter (K)Ubuntu Natty (11.04)

Die neueste Version von (K)Ubuntu, Natty (11.04),  bringt trotz des neuen Kernels 2.6.38 nur den alten RT2870 Wireless-Treiber mit. Wer nicht mit angezogener Handbremse Daten über’s WLAN senden will, der muss auch unter Natty den Treiber für den RT2870 manuell kompilieren, was ohne Fehler aber nicht funktioniert. Abhilfe schafft auch hier die Vorgehensweise für die Vorgängerversion Maverick, wie ich in meinem Artikel [intlink id=“40″ type=“post“]“RT2870-Kompilierungsfehler unter (K)Ubuntu Maverick (10.10)“[/intlink] beschrieben hab.

Mit DKMS alle Kernelmodule neu kompilieren

Mit dem Dynamic Kernel Module Support (DKMS) Framework kann man zwar alle Module komfortabel kompilieren lassen, jedoch lassen sich nicht alle Module auf einmal neu kompilieren. Ferner muss jedes Modul und jede Modulversion, inkl. des Kernels jedes mal separat angegeben werden. Die folgenden Zeilen bringen DKMS jedoch dazu, alle Module für den aktuellen Kernel neu zu kompilieren.

[bash]
for mod in `dkms status | cut -d, -f1 | uniq`;
do for ver in `dkms status | cut -d, -f2 | uniq`;
do dkms remove -m $mod -v $ver -k `uname -r` && dkms build -m $mod -v $ver -k `uname -r` && dkms install -m $mod -v $ver -k `uname -r`;
done;
done
[/bash]

RT2870-Kompilierungsfehler unter (K)Ubuntu Maverick (10.10)

Gestern wurde die neue Version der beliebten Linux-Distribution veröffentlicht. Mit im Gepäck der Kernel 2.6.35. Wer wie ich im Besitz eines WLAN-Sticks mit dem RT2870-Chipsatz ist, stellt das erst mal vor Probleme. Ich nutze nicht den mitgelieferten Treiber rt2870sta, da dieser meine WLAN-Übertragung von 130 MBit/s auf 54 MBit/s drosselt.

Abhilfe schafft da den aktuellsten Ralink-Treiber zu kompilieren, was aber mit dem neuen Kernel 2.6.35 zu folgendem Fehler führt:

CC [M]  2010_0709_RT2870_Linux_STA_v2.4.0.1/os/linux/../../common/cmm_mac_usb.o
2010_0709_RT2870_Linux_STA_v2.4.0.1/os/linux/../../common/cmm_mac_usb.c: In function ‘RTMPAllocUsbBulkBufStruct’:
2010_0709_RT2870_Linux_STA_v2.4.0.1/os/linux/../../common/cmm_mac_usb.c:52: error: implicit declaration of function ‘usb_buffer_alloc’
2010_0709_RT2870_Linux_STA_v2.4.0.1/os/linux/../../common/cmm_mac_usb.c:52: warning: assignment makes pointer from integer without a cast
2010_0709_RT2870_Linux_STA_v2.4.0.1/os/linux/../../common/cmm_mac_usb.c: In function ‘RTMPFreeUsbBulkBufStruct’:
2010_0709_RT2870_Linux_STA_v2.4.0.1/os/linux/../../common/cmm_mac_usb.c:78: error: implicit declaration of function ‘usb_buffer_free’
2010_0709_RT2870_Linux_STA_v2.4.0.1/os/linux/../../common/cmm_mac_usb.c: In function ‘RTMPFreeTxRxRingMemory’:
make[2]: *** [2010_0709_RT2870_Linux_STA_v2.4.0.1/os/linux/../../common/cmm_mac_usb.o] Fehler 1
make[1]: *** [_module_2010_0709_RT2870_Linux_STA_v2.4.0.1/os/linux] Fehler 2
make[1]: Verlasse Verzeichnis '/usr/src/linux-headers-2.6.35-22-generic'
make: *** [LINUX] Fehler 2

Schuld daran ist der Rückgriff auf die Funktionen usb_buffer_alloc() und usb_buffer_free(). Diese wurden umbenannt, was sich auch der Changelog des Kernels entnehmen lässt:

    USB: rename usb_buffer_alloc() and usb_buffer_free() users

    For more clearance what the functions actually do,

      usb_buffer_alloc() is renamed to usb_alloc_coherent()
      usb_buffer_free()  is renamed to usb_free_coherent()

Alles was man also tun muss ist die entsprechenden Funktionen in der include/os/rt_linux.h umzubenennen. Einen entsprechenden Patch könnt ihr hier runterladen. Einfach folgendes Kommando im Treiberverzeichnis ausführen:

patch -ul -p0 -i pfad/zur/patchdatei

Oder bequem per Einzeiler:

wget -qO- http://www.linuxcrew.de/wp-content/uploads/2010/10/rt2870sta_usb_kernel2635.patch | patch -ul -p0

Danach lässt sich der Treiber wieder problemlos kompilieren.