Ich sag's ja, wenn man Windows-Administratoren Linux-Maschinen installieren lässt: bei der Installation "Englisch" als Sprache ausgewählt! Klar, unter Windows macht man das so, damit man die Updates früher bekommt, bzw. damit Dritt-Software überhaupt funktioniert. Also die Sprache umstellen. Der altbekannte Weg
sudo dpkg-reconfigure localeconf
funktionierte unter Feisty, aber unter Gutsy nicht mehr. Hier muss man händisch die Datei
/etc/default/locale
Folgendes eintragen:
LANG="de_DE.UTF-8"
noch das Sprachpaket installieren:
sudo apt-get install language-pack-de
dann das altbewährte
sudo dpkg-reconfigure locales
und schon hat man nach einem Relogin alles auf Deutsch. Genauer beschrieben ist es hier:
http://wiki.ubuntuusers.de/Spracheinstellungen
Mittwoch, 7. November 2007
Donnerstag, 1. November 2007
nVidia Netzwerkkarten, Hibernate/Suspend und fehlende Netzwerkkonfiguration
Ich habe einen nVidia Corporation CK8S Ethernet Controller auf meinem Asus Board. Nach einem Suspend erhält die Karte keine IP-Adresse mehr. Den Grund dafür liefert ein dmesg:
0000:00:05.0: Invalid Mac address detected: 71:4a:28:d8:11:00
Please complain to your hardware vendor. Switching to a random MAC.
Bzw ein ifconfig, der nach jedem Suspend/Resume-Zyklus eine neue Netzwerkkarte (eth1, eth2 usw) anzeigt.
Aha: nach jedem Resume wechselt die MAC-Adresse, woraufhin mein Ubuntu von einer neuen Netzwerkkarte ausgeht. Ein Blick in /etc/udev/rules.d/70-persistent-net.rules zeigt auch das ganze Ausmaß der Katastrophe: viele Einträge mit unterschiedlichen MAC-Adressen. Laut einem Forums-Post handelt es sich hier um "reversed IP-address", was man im BIOS abstellen kann. Wer keine entsprechende Option findet, oder wie ich keine Lust hat, den Rechner neu zu starten, der stellt seine Netzwerkkonfiguration von MAC-Adresse auf PCI-Adresse um: die korrekte PCI-Adresse steht in der dmesg-Ausgabe; alternativ kann man auch die Ausgabe von lspci für die Netzwerkkarte verwenden und "0000:" davor schreiben (wer hat schon mehrere PCI-Busse installiert?). Dann passt man die Datei
/etc/udev/rules.d/70-persistent-net.rules
an, indem man den Eintrag
SUBSYSTEM=="net", DRIVERS=="?*", ATTRS{address}=="00:11:d8:28:4a:71", NAME="eth0"
durch
SUBSYSTEM=="net", DRIVERS=="?*", ID=="0000:00:05.0", NAME="eth0"
ersetzt, wobei natürlich die passende ID einzutragen ist. Danach klappt es dann auch mit dem Netzwerk nach einem Resume.
0000:00:05.0: Invalid Mac address detected: 71:4a:28:d8:11:00
Please complain to your hardware vendor. Switching to a random MAC.
Bzw ein ifconfig, der nach jedem Suspend/Resume-Zyklus eine neue Netzwerkkarte (eth1, eth2 usw) anzeigt.
Aha: nach jedem Resume wechselt die MAC-Adresse, woraufhin mein Ubuntu von einer neuen Netzwerkkarte ausgeht. Ein Blick in /etc/udev/rules.d/70-persistent-net.rules zeigt auch das ganze Ausmaß der Katastrophe: viele Einträge mit unterschiedlichen MAC-Adressen. Laut einem Forums-Post handelt es sich hier um "reversed IP-address", was man im BIOS abstellen kann. Wer keine entsprechende Option findet, oder wie ich keine Lust hat, den Rechner neu zu starten, der stellt seine Netzwerkkonfiguration von MAC-Adresse auf PCI-Adresse um: die korrekte PCI-Adresse steht in der dmesg-Ausgabe; alternativ kann man auch die Ausgabe von lspci für die Netzwerkkarte verwenden und "0000:" davor schreiben (wer hat schon mehrere PCI-Busse installiert?). Dann passt man die Datei
/etc/udev/rules.d/70-persistent-net.rules
an, indem man den Eintrag
SUBSYSTEM=="net", DRIVERS=="?*", ATTRS{address}=="00:11:d8:28:4a:71", NAME="eth0"
durch
SUBSYSTEM=="net", DRIVERS=="?*", ID=="0000:00:05.0", NAME="eth0"
ersetzt, wobei natürlich die passende ID einzutragen ist. Danach klappt es dann auch mit dem Netzwerk nach einem Resume.
Dienstag, 30. Oktober 2007
VirtualBox Shared Folder
Die VirtualBox ist eine gute Alternative zu VMware & Co, die zudem unter der GPL steht. Recht praktisch sind die "Shared Folder", mit denen man ein Verzeichnis des Gastgebes freigeben und vom Gast aus zugreifen kann. Realisiert ist das für Windows als CIFS-Freigabe. Leider bekommt man leicht eine Meldung in der Art "Fehler 67" Name nicht gefunden. Die Ursache hierfür ist sind fehlende oder falsch installierte Gasterweiterungen. Mir ist es passiert, dass ich eine Virtuelle Maschine unter Linux mit Version 1.5.0 installiert habe und dann unter MacOS X mit Version 1.4 nutzen wollte und eben diesen Fehler erhielt. Zur Lösung habe ich die Gasterweiterungen deinstalliert
net use x: \\vboxsvr\share
- mit "regedit" im magischen "Run"-Verzeichnis das Starten der Gasterweiterungen entfernt
- kurzfristig den Grafikkartentreiber umgestellt und beim obligatorischen Reboot dann die automatische Hardwareerkennung abgebrochen habe
- die Dateien aus C:\Programme und C:\Windows\System32 gelöscht (alles mit "innoprakt" und "vbox" im Namen)
net use x: \\vboxsvr\share
Auf JBoss von Außen zugreifen
JBoss lauscht von Hause aus auf der lokalen Adresse, spricht 127.0.0.1. Will man über das Netzwerk darauf zugreifen, muss man ihn mit
run.sh -b
starten, wobei man auch
run.sh -b 0.0.0.0
angeben kann, dann akzeptiert er Verbindungen auf allen Adressen. Auf meinem Ubuntu kam es aber dazu, dass der InvokerLocator noch auf 127.0.0.1:3873 lauschte, was sich so zeigt:
> netstat -ln | grep 3873
tcp 0 0 127.0.1.1:3873 0.0.0.0:* LISTEN
bzw. auf dem Client durch diese Exception:
org.jboss.remoting.CannotConnectException: Can not get connection to server. Problem establishing socket connection for InvokerLocator [socket://127.0.1.1:3873/]
Durch sehr genaues Hinschauen merkt man, dass dort 127.0.1.1 steht, was einen dazu bringt, man in der Datei /etc/hosts nachzusehen:
127.0.1.1 ubuntu
und da hat man den Schuldigen gefunden: JBoss bestimmt den Namen, unter dem er erreichbar zu sein glaubt und lauscht nur auf dieser Adresse. Trägt man hier die richtige eigene Adresse ein, am besten mit dem kompletten Namen, dann funktioniert es auch, also beispielsweise
192.168.1.31 ubuntu.local
run.sh -b
starten, wobei man auch
run.sh -b 0.0.0.0
angeben kann, dann akzeptiert er Verbindungen auf allen Adressen. Auf meinem Ubuntu kam es aber dazu, dass der InvokerLocator noch auf 127.0.0.1:3873 lauschte, was sich so zeigt:
> netstat -ln | grep 3873
tcp 0 0 127.0.1.1:3873 0.0.0.0:* LISTEN
bzw. auf dem Client durch diese Exception:
org.jboss.remoting.CannotConnectException: Can not get connection to server. Problem establishing socket connection for InvokerLocator [socket://127.0.1.1:3873/]
Durch sehr genaues Hinschauen merkt man, dass dort 127.0.1.1 steht, was einen dazu bringt, man in der Datei /etc/hosts nachzusehen:
127.0.1.1 ubuntu
und da hat man den Schuldigen gefunden: JBoss bestimmt den Namen, unter dem er erreichbar zu sein glaubt und lauscht nur auf dieser Adresse. Trägt man hier die richtige eigene Adresse ein, am besten mit dem kompletten Namen, dann funktioniert es auch, also beispielsweise
192.168.1.31 ubuntu.local
Montag, 22. Oktober 2007
JDK 1.3.1 unter Feisty/Gutsy
Installiert man das Sun JDK 1.3.1 unter Ubuntu/Feisty oder Gutsy, so erhält man beim Starten folgende Fehlermeldung:
/opt/jdk1.3.1_20/bin/i386/native_threads/java: error while loading shared libraries: libstdc++-libc6.1-1.so.2: cannot open shared object file: No such file or directory
weil die entsprechende LibC nicht mehr unter diesem Namen verfügbar ist (das mit den unterschiedlichen inkompatiblen (G)LIBC-Versionen hab ich eh noch nie verstanden). Das Problem lässt sich glücklicherweise mit 3 Befehlen beheben:
sudo apt-get install libstdc++2.10-glibc2.2
cd /usr/lib
sudo ln -s libstdc++-3-libc6.2-2-2.10.0.so libstdc++-libc6.1-1.so.2
Danach klappt es auch wieder mit dem Java:
/opt/jdk1.3.1_20/bin/java -version
java version "1.3.1_20"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1_20-b03)
Java HotSpot(TM) Client VM (build 1.3.1_20-b03, mixed mode)
/opt/jdk1.3.1_20/bin/i386/native_threads/java: error while loading shared libraries: libstdc++-libc6.1-1.so.2: cannot open shared object file: No such file or directory
weil die entsprechende LibC nicht mehr unter diesem Namen verfügbar ist (das mit den unterschiedlichen inkompatiblen (G)LIBC-Versionen hab ich eh noch nie verstanden). Das Problem lässt sich glücklicherweise mit 3 Befehlen beheben:
sudo apt-get install libstdc++2.10-glibc2.2
cd /usr/lib
sudo ln -s libstdc++-3-libc6.2-2-2.10.0.so libstdc++-libc6.1-1.so.2
Danach klappt es auch wieder mit dem Java:
/opt/jdk1.3.1_20/bin/java -version
java version "1.3.1_20"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1_20-b03)
Java HotSpot(TM) Client VM (build 1.3.1_20-b03, mixed mode)
Montag, 9. Juli 2007
Maven-Archiva zum Laufen bringen
Archiva erlaubt es, einen zentralen Server für JAR-Dateien aufzusetzen, der von Maven verwendet wird. Es arbeitet als Caching-Proxy, so dass die Pakete nur einmal heruntergeladen werden müssen. Ebenso können damit die intern erstellten Pakete leicht für alle Entwickler zugängig gemacht werden.
Bei der Installation bin ich über mehrere Probleme gestolpert:
Port ändern
Der Port steht in der Datei apps/archiva/conf/application.xml; diese Datei existiert erst nach dem Auspacken der JAR-Datei, was beim ersten Start passiert.
Authentisierung notwendig
Archiva wollte unbedingt Benutzername und Passwort haben. Nachdem ich im User Management dem Guest die Rolle Global Repository Observer gab, ging es auch ohne.
Keine Downloads
Archiva wollte partout keine Pakete runterladen. Nachdem ich bei beiden Proxy Connectors der Whitelist ein **/** hinzugefügt hatte, ging es.
Jetzt kämpfe ich nur noch damit, dass das Eclipse-Plugin die Einstellungen ignoriert und direkt auf das central-Repository zugreift.
Bei der Installation bin ich über mehrere Probleme gestolpert:
Port ändern
Der Port steht in der Datei apps/archiva/conf/application.xml; diese Datei existiert erst nach dem Auspacken der JAR-Datei, was beim ersten Start passiert.
Authentisierung notwendig
Archiva wollte unbedingt Benutzername und Passwort haben. Nachdem ich im User Management dem Guest die Rolle Global Repository Observer gab, ging es auch ohne.
Keine Downloads
Archiva wollte partout keine Pakete runterladen. Nachdem ich bei beiden Proxy Connectors der Whitelist ein **/** hinzugefügt hatte, ging es.
Jetzt kämpfe ich nur noch damit, dass das Eclipse-Plugin die Einstellungen ignoriert und direkt auf das central-Repository zugreift.
Mittwoch, 27. Juni 2007
Umlaute mit Kopete und ICQ
Schon länger hat mich geärgert, dass mein Kopete bei ICQ die Umlaut als chinesische Zeichen darstellt. Da ich gerade in Bahrain auf den verspäteten Flieger warte, habe ich Zeit gefunden, nach einer Lösung zu suchen; und diese war überraschend einfach: in den Zugangs-Einstellungen zu ICQ die "Standardkodierung für Nachrichten" auf "ISO-8859-15" stellen.
Mittwoch, 20. Juni 2007
Cisco VPN client unter Linux
Viele Unternehmen verwenden den Cisco VPN Client, um den verschlüsselten Zugriff auf ihr Netzwerk zu erlauben. Es gibt hierfür zwar einen Linux-Client, aber den hab ich nicht zum Laufen gebracht. Viel besser ist VPNC von den Jungs aus Kaiserslautern, das beim aktuellen Ubuntu enthalten ist.
Die Installation gestaltet sich sehr einfach: zuerst mit dem mitgelieferten Programm pcf2vpnc die .PCF-Datei konvertieren:
/usr/share/vpnc/pcf2vpnc vpn.pcf > vpn.conf
und dann den Zugang starten, wobei der vollständige Pfad zur Konfigurationsdatei angegeben werden muss:
sudo vpnc $PWD/vpn.conf
Wer die Passwörter nicht jedes Mal eintippen will, kann sie auch in der Konfigurationsdatei hinterlegen:
Xauth username Benutzername
Xauth password Passwort
Sehr praktisch sind auch die Optionen Target network und DNSUpdate: damit kann man das VPN auf bestimmte IPs oder IP-Bereiche einschränken sowie das Umstellen des DNS verhindern:
Target networks 192.168.1.17/32 192.168.2.0/24
DNSUpdate no
Richtig konfiguriert hat man damit eine reine Punkt-zu-Punkt-Verbindung zu den Zielrechnern und hat nicht mehr die Einränkungen eines deaktivierten "Allow Local LAN Access".
Die Installation gestaltet sich sehr einfach: zuerst mit dem mitgelieferten Programm pcf2vpnc die .PCF-Datei konvertieren:
/usr/share/vpnc/pcf2vpnc vpn.pcf > vpn.conf
und dann den Zugang starten, wobei der vollständige Pfad zur Konfigurationsdatei angegeben werden muss:
sudo vpnc $PWD/vpn.conf
Wer die Passwörter nicht jedes Mal eintippen will, kann sie auch in der Konfigurationsdatei hinterlegen:
Xauth username Benutzername
Xauth password Passwort
Sehr praktisch sind auch die Optionen Target network und DNSUpdate: damit kann man das VPN auf bestimmte IPs oder IP-Bereiche einschränken sowie das Umstellen des DNS verhindern:
Target networks 192.168.1.17/32 192.168.2.0/24
DNSUpdate no
Richtig konfiguriert hat man damit eine reine Punkt-zu-Punkt-Verbindung zu den Zielrechnern und hat nicht mehr die Einränkungen eines deaktivierten "Allow Local LAN Access".
Sonntag, 17. Juni 2007
Derby und OutOfMemoryError
Nachdem ich heute wieder mal mehrere Stunden im Derby rumgewühlt habe, hab ich Folgendes zum Derby-Cache gefunden:
"Derby autotunes the database pagesize. If you have long columns, the default pagesize for the table is set to 32K. Otherwise, the default is 4K."
"long columns" sind beispielsweise VARCHAR(32000). Die Standard-Cachegröße ist 1.000 Pages, damit belegt Derby konkret 32MB für seinen Cache, nicht schlecht wenn man bedenkt, dass die JVM standardmäßig nur 64MB hat. Die Folge ist oftmals diese Fehlermeldung:
Exception in thread "main" java.sql.SQLException: Java exception: 'Java heap space: java.lang.OutOfMemoryError'.
Netterweise ist dieser Satz nicht bei den entsprechenden Konfigurationsoptionen - dort steht "Default: 4096" - sondern auf der Seite "Performance trade-offs of large pages". Da guckt man natürlich nicht direkt rein, wenn man die Seitengröße gar nicht ändern will.
Zum Ändern der Seitengröße muss man diese Properties beim Programmstart setzen (hier mit den Standardwerten), wobei die Seitengrölße vor einem CREATE TABLE bzw. CREATE INDEX bereits gesetzt sein muss.
System.setProperty("derby.storage.pageCacheSize", "1000");
System.setProperty("derby.storage.pageSize", "4096");
geht natürlich auch über -Dderby.storage.pageCacheSize=1000 bzw. -Dderby.storage.pageSize=4096 beim Aufruf der JVM.
"Derby autotunes the database pagesize. If you have long columns, the default pagesize for the table is set to 32K. Otherwise, the default is 4K."
"long columns" sind beispielsweise VARCHAR(32000). Die Standard-Cachegröße ist 1.000 Pages, damit belegt Derby konkret 32MB für seinen Cache, nicht schlecht wenn man bedenkt, dass die JVM standardmäßig nur 64MB hat. Die Folge ist oftmals diese Fehlermeldung:
Exception in thread "main" java.sql.SQLException: Java exception: 'Java heap space: java.lang.OutOfMemoryError'.
Netterweise ist dieser Satz nicht bei den entsprechenden Konfigurationsoptionen - dort steht "Default: 4096" - sondern auf der Seite "Performance trade-offs of large pages". Da guckt man natürlich nicht direkt rein, wenn man die Seitengröße gar nicht ändern will.
Zum Ändern der Seitengröße muss man diese Properties beim Programmstart setzen (hier mit den Standardwerten), wobei die Seitengrölße vor einem CREATE TABLE bzw. CREATE INDEX bereits gesetzt sein muss.
System.setProperty("derby.storage.pageCacheSize", "1000");
System.setProperty("derby.storage.pageSize", "4096");
geht natürlich auch über -Dderby.storage.pageCacheSize=1000 bzw. -Dderby.storage.pageSize=4096 beim Aufruf der JVM.
Freitag, 15. Juni 2007
Skype-Startprobleme
Testweise hatte ich die Windows-Version von Skype unter Linux mit Wine installiert, leider nur mit mäßigem Erfolg. Statt es sauber zu deinstallieren, habe ich das Installationsverzeichnis einfach gelöscht. Danach konnte ich mein (Linux-)Skype unter KDE nicht mehr über «Befehl ausführen» starten. Nach einigem Suchen bin auf in den Grund hierfür in der Datei .xsession-errors gestoßen:
wine: cannot find 'C:\Programme\Skype\Skype.exe'
Mein KDE wollte also lieber die Wine-Version als die Linux-Version starten. Der Grund hierfür lag in der Datei
~/.local/share/applications/wine/Programme/Skype/Skype.desktop
die eine FreeDesktop-Konforme Verknüpfung zu einem Programm darstellt. Nachdem ich die Datei gelöscht habe, startet (Linux-)Skype wieder problemlos.
wine: cannot find 'C:\Programme\Skype\Skype.exe'
Mein KDE wollte also lieber die Wine-Version als die Linux-Version starten. Der Grund hierfür lag in der Datei
~/.local/share/applications/wine/Programme/Skype/Skype.desktop
die eine FreeDesktop-Konforme Verknüpfung zu einem Programm darstellt. Nachdem ich die Datei gelöscht habe, startet (Linux-)Skype wieder problemlos.
Samstag, 9. Juni 2007
Cursor kaputt mit neuem FGLRX-Treiber
Nach dem Update auf Version 8.37.6 des FGLRX-Treibers für meine Radeon Mobility X1400 funktionierte Xinerama nicht mehr: Der Mauszeiger auf dem zweiten Bildschirm erschien als ein Block aus uninitialisiertem Speicher. Eine Umstellung auf "SwCursor" hatte den bekannten Fehler zur Folge, dass beim Scrollen oder Klicken auf einen Link der vorherige Inhalt unter dem Cursor über den neuen Inhalt gezeichnet wurde und damit die Ausgabe stark störte. Abhilfe schaffte ein Downgrade auf Version 8.36.5, die aktuellste funktionierende Version.
Freitag, 8. Juni 2007
Zertifikatsverwandlung
Zum verschlüsselten Zugriff auf Webseiten wird SSL verwendet. Für eine sichere Verbindung ist es notwendig zu wissen, ob man die korrekten Schlüssel verwendet, oder ob diese auf dem Web zum Browser verändert wurden. Dies wird über Zertifikate geregelt, die die Authentizität eines Schlüssels gewährleisten. Die Zertifikate selbst müssen jedoch auch authentisiert werden, womit sich ein Henne-Ei-Problem stellt. Aus diesem Grund kommen alle Browser mit einer vorinstallierten Liste von SSL-Zertifikaten daher, die zu unterschiedlichen Firmen gehören. Diese bestätigen - gegen Zahlung eines entsprechenden Obulus - die Echtheit eines SSL-Schlüssels.
Wer das Geld sparen will, erzeugt sein eigenes Zertifikat und importiert dies in seinen Browser. Um die Sache nicht zu einfach zu machen, gibt es mehrere Formate für Schlüssel: PEM, DER, Netscape und PKCS #12. Konqueror ist in der Lage, alle Formate zu importieren, aber Firefox besteht darauf, ein PKCS #12 Zertifikat zu erhalten. Hat man nur ein PEM-Zertifikat, so muss man dieses konvertieren. Dies geht mit Hilfe von OpenSSL, das üblicherweise bei einer Linux-Distribution enthalten ist:
openssl pkcs12 -nokeys -export -in z.pem -out z.p12
Hierbei wird man nach einem Password gefragt, das man frei wählen kann und beim Importieren wieder angeben muss. Die Option -nokeys unterbindet das Schreiben der geheimen Schlüssel, die man bei einem SSL-Zertifikat üblicherweise nicht hat. Will man ein Zertifikat für einen Server konvertieren, das den geheimen Schlüssel enthält, so lässt man die Option weg.
Wer das Geld sparen will, erzeugt sein eigenes Zertifikat und importiert dies in seinen Browser. Um die Sache nicht zu einfach zu machen, gibt es mehrere Formate für Schlüssel: PEM, DER, Netscape und PKCS #12. Konqueror ist in der Lage, alle Formate zu importieren, aber Firefox besteht darauf, ein PKCS #12 Zertifikat zu erhalten. Hat man nur ein PEM-Zertifikat, so muss man dieses konvertieren. Dies geht mit Hilfe von OpenSSL, das üblicherweise bei einer Linux-Distribution enthalten ist:
openssl pkcs12 -nokeys -export -in z.pem -out z.p12
Hierbei wird man nach einem Password gefragt, das man frei wählen kann und beim Importieren wieder angeben muss. Die Option -nokeys unterbindet das Schreiben der geheimen Schlüssel, die man bei einem SSL-Zertifikat üblicherweise nicht hat. Will man ein Zertifikat für einen Server konvertieren, das den geheimen Schlüssel enthält, so lässt man die Option weg.
Donnerstag, 7. Juni 2007
Alles kontrollieren
Gestern bin ich über ein nettes Programm gestolpert: Synergy. Damit kann man eine beliebige Zahl an Rechnern - Linux (bzw. jedes Unix), MacOS X und Windows - mittels einer Tastatur und Maus bedienen. Man braucht lediglich auf jedem Rechner die Software zu starten und dann die Monitorpositionen zu definieren, d.h. wo die Maus hin soll, wenn man auf jedem Rechner jeweils nach oben, unten, rechts und links aus dem Bildschirmfenster rausgeht. Es ähnelt damit x2vnc und x2x, die allerdings nur zwei Rechner fern steuern können. Die Definition der Monitorpositionen ist noch etwas hakelig, aber in der Praxis hat man meistens die Monitore nebeneinander stehen, so dass es recht einfach ist, die dazu passenden Werte einzutragen. Zudem kann man die gleiche Konfigurationsdatei auf allen Maschinen verwenden - sofern diese sich über die Rechnernamen einig sind - und kann deshalb das für einen selbst einfachste Konfigurationsprogramm - zur Zeit nur für Windows und Linux - verwenden.
Mittwoch, 6. Juni 2007
Webentwickler im Himmel
Als Webseiten-Schreiber muss oder zumindest sollte man seine Seiten mit möglichst vielen Browsern und vor allem Browserversionen testen, ob sie überall korrekt angezeigt werden. Mit Firefox/Mozilla/Netscape & Co ist das kein Problem - mehrere Versionen können gleichzeitig installiert sein. Vom InternetExplorer ist jedoch immer nur eine Version installierbar. Deshalb verwenden mache Web-Entwickler mehrere PCs oder VMWare mit unterschiedlichen Versionen, was natürlich nicht sonderlich komfortabel ist, aber so hat es Microsoft eben bestimmt. Dank der überlegenen Macht von Linux ist es jedoch möglich, mehrere IEs auf dem gleichen Rechner zu betreiben: einfach IEs4Linux verwenden, IE 5.01, 5.5 und 6 installieren und gleichzeitig verwenden:
Dienstag, 5. Juni 2007
Zeitsprünge
Betreibt man VMWare auf einem Rechner mit variabler Prozessorgeschwindigkeit (Intel SpeedStep, AMD PowerNow oder Cool'n'Quiet), dann kommt das Gastbetriebssystem innerhalb der VMWare außer Tritt und lässt die Uhr mal schneller, mal langsamer laufen, je nachdem, welche Geschwindigkeit der Prozessor gerade hat. Eine Lösung des Problems findet sich auf den VMWare-Seiten: zuerst muss man die maximale Geschwindigkeit des eigenen Prozessors herausfinden, beispielsweise so:
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
danach trägt man diese Zahl zusammen mit zwei weiteren Parametern in die Datei /etc/vmware/config ein:
host.cpukHz = "1833000"
host.noTSC = "TRUE"
ptsc.noTSC = "TRUE"
Zusätzlich sollte man in den VMWare-Tools noch die automatische Zeitsynchronisation aktivieren - damit wird jede Minute die Uhr nachgestellt.
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
danach trägt man diese Zahl zusammen mit zwei weiteren Parametern in die Datei /etc/vmware/config ein:
host.cpukHz = "1833000"
host.noTSC = "TRUE"
ptsc.noTSC = "TRUE"
Zusätzlich sollte man in den VMWare-Tools noch die automatische Zeitsynchronisation aktivieren - damit wird jede Minute die Uhr nachgestellt.
Masquerading ist veraltet
Wer wie ich mit Kernel 1.0 groß geworden ist, der hat mehrere Änderungen des Linux-Firewallcodes mitgemacht. Der letzte Stand war bei mir, dass man Masquerading über
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
einrichtet. Das ist natürlich immer noch so, aber wenn man eine statische IP-Adresse hat, dann wird eine andere Vorgehensweise empfohlen. Insbesondere wenn man mit virtuellen IP-Adressen arbeitet, also mehrere Adresse auf einem Interface definiert hat und man nicht die Haupt-IP-Adresse verwenden will, dann muss man statt MASQUERADE das Target SAME verwenden:
ifconfig eth0:0 192.168.0.1
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 192.168.0.1
und schon erhalten alle maskierten Pakete die IP-Adresse des virtuellen Interfaces.
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
einrichtet. Das ist natürlich immer noch so, aber wenn man eine statische IP-Adresse hat, dann wird eine andere Vorgehensweise empfohlen. Insbesondere wenn man mit virtuellen IP-Adressen arbeitet, also mehrere Adresse auf einem Interface definiert hat und man nicht die Haupt-IP-Adresse verwenden will, dann muss man statt MASQUERADE das Target SAME verwenden:
ifconfig eth0:0 192.168.0.1
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 192.168.0.1
und schon erhalten alle maskierten Pakete die IP-Adresse des virtuellen Interfaces.
Samstag, 2. Juni 2007
Netzwerkkarte für VMWare-Bridging auswählen
Hat man mehrere Netzwerkschnittstellen und will man VMWare im Bridging-Modus verwenden, muss man die zu verwendende Netzwerkkarte einstellen. Diese Information speichert VMWare in der Datei /etc/vmware/locations im seltsamen Format:
answer VNET_0_INTERFACE wlan0
Wem das zu abenteuerlich ist, der muss bei der Konfiguration des Netzwerkes über vmware-config.pl statt den "wizard" den "editor" verwenden und kann dort dann die Schnittstelle angeben.
answer VNET_0_INTERFACE wlan0
Wem das zu abenteuerlich ist, der muss bei der Konfiguration des Netzwerkes über vmware-config.pl statt den "wizard" den "editor" verwenden und kann dort dann die Schnittstelle angeben.
VMWare unter Ubuntu/Feisty
VMWare 5.5.x läuft nicht ohne Weiteres unter Kernel 2.6.20, da die Kernel-Module nicht mehr kompilieren:
Using 2.6.x kernel build system.
make: Gehe in Verzeichnis '/tmp/vmware-config0/vmmon-only'
make -C /lib/modules/2.6.20-16-generic/build/include/.. SUBDIRS=$PWD SRCROOT=$PWD/. modules
make[1]: Betrete Verzeichnis '/usr/src/linux-headers-2.6.20-16-generic'
CC [M] /tmp/vmware-config0/vmmon-only/linux/driver.o
In file included from /tmp/vmware-config0/vmmon-only/linux/driver.c:80:
/tmp/vmware-config0/vmmon-only/./include/compat_kernel.h:21: Fehler: expected declaration specifiers or »...« before »compat_exit«
/tmp/vmware-config0/vmmon-only/./include/compat_kernel.h:21: Fehler: expected declaration specifiers or »...« before »exit_code«
/tmp/vmware-config0/vmmon-only/./include/compat_kernel.h:21: Warnung: »int« ist Standardtyp in Deklaration von »_syscall1«
make[2]: *** [/tmp/vmware-config0/vmmon-only/linux/driver.o] Fehler 1
make[1]: *** [_module_/tmp/vmware-config0/vmmon-only] Fehler 2
make[1]: Verlasse Verzeichnis '/usr/src/linux-headers-2.6.20-16-generic'
make: *** [vmmon.ko] Fehler 2
make: Verlasse Verzeichnis '/tmp/vmware-config0/vmmon-only'
Unable to build the vmmon module.
Eine Anleitung, wie man es zum Laufen bekommt, findet man unter http://kb.barnoid.com/?p=18: eine tar-Datei auspacken, eine Datei drin ändern und wieder einpacken - dann geht es.
Using 2.6.x kernel build system.
make: Gehe in Verzeichnis '/tmp/vmware-config0/vmmon-only'
make -C /lib/modules/2.6.20-16-generic/build/include/.. SUBDIRS=$PWD SRCROOT=$PWD/. modules
make[1]: Betrete Verzeichnis '/usr/src/linux-headers-2.6.20-16-generic'
CC [M] /tmp/vmware-config0/vmmon-only/linux/driver.o
In file included from /tmp/vmware-config0/vmmon-only/linux/driver.c:80:
/tmp/vmware-config0/vmmon-only/./include/compat_kernel.h:21: Fehler: expected declaration specifiers or »...« before »compat_exit«
/tmp/vmware-config0/vmmon-only/./include/compat_kernel.h:21: Fehler: expected declaration specifiers or »...« before »exit_code«
/tmp/vmware-config0/vmmon-only/./include/compat_kernel.h:21: Warnung: »int« ist Standardtyp in Deklaration von »_syscall1«
make[2]: *** [/tmp/vmware-config0/vmmon-only/linux/driver.o] Fehler 1
make[1]: *** [_module_/tmp/vmware-config0/vmmon-only] Fehler 2
make[1]: Verlasse Verzeichnis '/usr/src/linux-headers-2.6.20-16-generic'
make: *** [vmmon.ko] Fehler 2
make: Verlasse Verzeichnis '/tmp/vmware-config0/vmmon-only'
Unable to build the vmmon module.
Eine Anleitung, wie man es zum Laufen bekommt, findet man unter http://kb.barnoid.com/?p=18: eine tar-Datei auspacken, eine Datei drin ändern und wieder einpacken - dann geht es.
Freitag, 1. Juni 2007
Fglrx und Xinerama
Nachdem sich der Flachbildschirm etwas gewehrt hat, habe ich ihn doch zusammen mit dem Laptop-Schirm an den Start bekommen. Kurze Eckdaten: Toshiba A7 mit Radeon X1400, 1280x800 Pixel und ein Dell Bildschirm mit 1280x1024. Hier ist meine /etc/X11/xorg.conf:
Section "ServerLayout"
Identifier "Default Layout"
Screen 0 "aticonfig-Screen[0]" 0 0
Screen "aticonfig-Screen[1]" RightOf "aticonfig-Screen[0]"
InputDevice "Generic Keyboard"
InputDevice "Configured Mouse"
InputDevice "Synaptics Touchpad"
EndSection
Section "Files"
# path to defoma fonts
FontPath "/usr/share/fonts/X11/misc"
FontPath "/usr/share/fonts/X11/cyrillic"
FontPath "/usr/share/fonts/X11/100dpi/:unscaled"
FontPath "/usr/share/fonts/X11/75dpi/:unscaled"
FontPath "/usr/share/fonts/X11/Type1"
FontPath "/usr/share/fonts/X11/100dpi"
FontPath "/usr/share/fonts/X11/75dpi"
FontPath "/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType"
EndSection
Section "Module"
Load "bitmap"
Load "ddc"
Load "dri"
Load "extmod"
Load "freetype"
Load "glx"
Load "int10"
Load "vbe"
EndSection
Section "InputDevice"
Identifier "Generic Keyboard"
Driver "kbd"
Option "CoreKeyboard"
Option "XkbRules" "xorg"
Option "XkbModel" "pc105"
Option "XkbLayout" "de"
Option "XkbVariant" "nodeadkeys"
EndSection
Section "InputDevice"
Identifier "Configured Mouse"
Driver "mouse"
Option "CorePointer"
Option "Device" "/dev/input/mice"
Option "Protocol" "ImPS/2"
Option "ZAxisMapping" "4 5"
Option "Emulate3Buttons" "true"
EndSection
Section "InputDevice"
Identifier "Synaptics Touchpad"
Driver "synaptics"
Option "SendCoreEvents" "true"
Option "Device" "/dev/psaux"
Option "Protocol" "auto-dev"
Option "HorizScrollDelta" "0"
EndSection
Section "Monitor"
Identifier "Standardbildschirm"
Option "DPMS"
EndSection
Section "Monitor"
Identifier "aticonfig-Monitor[0]"
Option "VendorName" "ATI Proprietary Driver"
Option "ModelName" "Generic Autodetecting Monitor"
Option "DPMS" "true"
EndSection
Section "Monitor"
Identifier "aticonfig-Monitor[1]"
Option "VendorName" "ATI Proprietary Driver"
Option "ModelName" "Generic Autodetecting Monitor"
Option "DPMS" "true"
EndSection
Section "Device"
Identifier "ATI RADEON X1400"
Driver "ati"
BusID "PCI:1:0:0"
EndSection
Section "Device"
Identifier "aticonfig-Device[0]"
Driver "fglrx"
Option "EnableMonitor" "lvds,tmds1"
Option "PairModes" ""
BusID "PCI:1:0:0"
EndSection
Section "Device"
Identifier "aticonfig-Device[1]"
Driver "fglrx"
BusID "PCI:1:0:0"
Screen 1
EndSection
Section "Screen"
Identifier "Default Screen"
Device "ATI RADEON X1400"
Monitor "Standardbildschirm"
DefaultDepth 24
SubSection "Display"
Depth 24
Modes "1280x800" "1024x768" "800x600" "640x480"
EndSubSection
EndSection
Section "Screen"
Identifier "aticonfig-Screen[0]"
Device "aticonfig-Device[0]"
Monitor "aticonfig-Monitor[0]"
DefaultDepth 24
SubSection "Display"
Viewport 0 0
Depth 24
Modes "1280x800"
EndSubSection
EndSection
Section "Screen"
Identifier "aticonfig-Screen[1]"
Device "aticonfig-Device[1]"
Monitor "aticonfig-Monitor[1]"
DefaultDepth 24
SubSection "Display"
Viewport 0 0
Depth 24
Modes "1280x1024"
EndSubSection
EndSection
Section "ServerFlags"
Option "Xinerama" "true"
EndSection
Section "DRI"
Mode 0666
EndSection
Section "Extensions"
Option "Composite" "Disable"
EndSection
Section "ServerLayout"
Identifier "Default Layout"
Screen 0 "aticonfig-Screen[0]" 0 0
Screen "aticonfig-Screen[1]" RightOf "aticonfig-Screen[0]"
InputDevice "Generic Keyboard"
InputDevice "Configured Mouse"
InputDevice "Synaptics Touchpad"
EndSection
Section "Files"
# path to defoma fonts
FontPath "/usr/share/fonts/X11/misc"
FontPath "/usr/share/fonts/X11/cyrillic"
FontPath "/usr/share/fonts/X11/100dpi/:unscaled"
FontPath "/usr/share/fonts/X11/75dpi/:unscaled"
FontPath "/usr/share/fonts/X11/Type1"
FontPath "/usr/share/fonts/X11/100dpi"
FontPath "/usr/share/fonts/X11/75dpi"
FontPath "/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType"
EndSection
Section "Module"
Load "bitmap"
Load "ddc"
Load "dri"
Load "extmod"
Load "freetype"
Load "glx"
Load "int10"
Load "vbe"
EndSection
Section "InputDevice"
Identifier "Generic Keyboard"
Driver "kbd"
Option "CoreKeyboard"
Option "XkbRules" "xorg"
Option "XkbModel" "pc105"
Option "XkbLayout" "de"
Option "XkbVariant" "nodeadkeys"
EndSection
Section "InputDevice"
Identifier "Configured Mouse"
Driver "mouse"
Option "CorePointer"
Option "Device" "/dev/input/mice"
Option "Protocol" "ImPS/2"
Option "ZAxisMapping" "4 5"
Option "Emulate3Buttons" "true"
EndSection
Section "InputDevice"
Identifier "Synaptics Touchpad"
Driver "synaptics"
Option "SendCoreEvents" "true"
Option "Device" "/dev/psaux"
Option "Protocol" "auto-dev"
Option "HorizScrollDelta" "0"
EndSection
Section "Monitor"
Identifier "Standardbildschirm"
Option "DPMS"
EndSection
Section "Monitor"
Identifier "aticonfig-Monitor[0]"
Option "VendorName" "ATI Proprietary Driver"
Option "ModelName" "Generic Autodetecting Monitor"
Option "DPMS" "true"
EndSection
Section "Monitor"
Identifier "aticonfig-Monitor[1]"
Option "VendorName" "ATI Proprietary Driver"
Option "ModelName" "Generic Autodetecting Monitor"
Option "DPMS" "true"
EndSection
Section "Device"
Identifier "ATI RADEON X1400"
Driver "ati"
BusID "PCI:1:0:0"
EndSection
Section "Device"
Identifier "aticonfig-Device[0]"
Driver "fglrx"
Option "EnableMonitor" "lvds,tmds1"
Option "PairModes" ""
BusID "PCI:1:0:0"
EndSection
Section "Device"
Identifier "aticonfig-Device[1]"
Driver "fglrx"
BusID "PCI:1:0:0"
Screen 1
EndSection
Section "Screen"
Identifier "Default Screen"
Device "ATI RADEON X1400"
Monitor "Standardbildschirm"
DefaultDepth 24
SubSection "Display"
Depth 24
Modes "1280x800" "1024x768" "800x600" "640x480"
EndSubSection
EndSection
Section "Screen"
Identifier "aticonfig-Screen[0]"
Device "aticonfig-Device[0]"
Monitor "aticonfig-Monitor[0]"
DefaultDepth 24
SubSection "Display"
Viewport 0 0
Depth 24
Modes "1280x800"
EndSubSection
EndSection
Section "Screen"
Identifier "aticonfig-Screen[1]"
Device "aticonfig-Device[1]"
Monitor "aticonfig-Monitor[1]"
DefaultDepth 24
SubSection "Display"
Viewport 0 0
Depth 24
Modes "1280x1024"
EndSubSection
EndSection
Section "ServerFlags"
Option "Xinerama" "true"
EndSection
Section "DRI"
Mode 0666
EndSection
Section "Extensions"
Option "Composite" "Disable"
EndSection
Donnerstag, 31. Mai 2007
Edimax EW7318USG unter Ubuntu
Da die WLAN-Netzwerkkarte in meinem Notebook den Geist aufgegeben hat, muss ich momentan auf eine externe USB-Karte zurückgreifen, und zwar auf eine Edimax EW7318USG. Hierbei handelt es sich um ein OEM-Produkt, in dem eine RALink RT73 Karte steckt, wie einem lsusb verrät:
148f:2573 Ralink Technology, Corp.
Die Treiber hierfür findet man beim rt2x00-Projekt. Unter http://forum.ubuntuusers.de/topic/74093/ findet man eine Anleitung, wie das ganze einzurichten ist. Allerdings muss man mittlerweile den Namen rausb0 durch wlan0 ersetzen und die Firmware wird automatisch nach /lib/firmware kopiert, man muss dies also nicht mehr selbst machen. Hier nochmal zum Mitschreiben, wie man es zum Laufen bekommt:
1. Treiber runterladen und kompilieren
wget http://rt2x00.serialmonkey.com/rt73-cvs-daily.tar.gz
tar xvzf rt73-cvs-daily.tar.gz
cd rt73-cvs-*/Module
make
sudo make install
2. Alte Treiber deaktivieren
sudo vi /etc/modprobe.d/blacklist (wem der VI zu exotisch ist, der verwende stattdessen nano)
und dort am Ende die folgenden Zeilen einfügen:
blacklist rt73usb
blacklist rt2x00lib
blacklist rt2570
3. Schnittstelle eintragen
In der Datei /etc/network/interfaces Folgendes eintragen:
auto wlan0
iface wlan0 inet dhcp
pre-up ifconfig wlan0 up
pre-up ifconfig wlan0 down
pre-up ifconfig wlan0 up
pre-up iwconfig wlan0 essid "Meine ESSID"
pre-up iwconfig wlan0 key "s:MeinPasswort"
pre-up iwconfig wlan0 mode Managed
pre-up ifconfig wlan0 up
Wer kein DHCP hat, der muss hier natürlich dhcp durch static ersetzen und die Adressen eintragen, aber wer macht das schon?
Damit sollte das Ganze beim Booten funktionieren. Wer es gleich ausprobieren möchte, der sollte zuerst mit
lsusb | grep rt
nachsehen, welche Treiber bereits geladen sind und diese mit modprobe -r Modulname erst entfernen. Dann den Adapter einstecken und mit iwconfig nachsehen, ob er richtig funktioniert:
wlan0 RT73 WLAN ESSID:"Meine ESSID"
Mode:Managed Frequency=2.462 GHz Access Point: 00:14:7F:22:4C:9F
Bit Rate=54 Mb/s
RTS thr:off Fragment thr:off
Encryption key:DEAD-BEEF-DEAD-BEEF-DEAD-BEEF-FF
Link Quality=100/100 Signal level:-38 dBm Noise level:-79 dBm
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:0 Missed beacon:0
Ja, das sind gerade mal 30cm zwischen Basisstation und Empfänger. Wer beim händischen Ausprobieren eine Meldung
Error for wireless request "Set ESSID" (8B1A) :
SET failed on device rausb0 ; Network is down.
erhält, der sollte ein
ifconfig wlan0 up
ausführen, dann klappt es.
148f:2573 Ralink Technology, Corp.
Die Treiber hierfür findet man beim rt2x00-Projekt. Unter http://forum.ubuntuusers.de/topic/74093/ findet man eine Anleitung, wie das ganze einzurichten ist. Allerdings muss man mittlerweile den Namen rausb0 durch wlan0 ersetzen und die Firmware wird automatisch nach /lib/firmware kopiert, man muss dies also nicht mehr selbst machen. Hier nochmal zum Mitschreiben, wie man es zum Laufen bekommt:
1. Treiber runterladen und kompilieren
wget http://rt2x00.serialmonkey.com/rt73-cvs-daily.tar.gz
tar xvzf rt73-cvs-daily.tar.gz
cd rt73-cvs-*/Module
make
sudo make install
2. Alte Treiber deaktivieren
sudo vi /etc/modprobe.d/blacklist (wem der VI zu exotisch ist, der verwende stattdessen nano)
und dort am Ende die folgenden Zeilen einfügen:
blacklist rt73usb
blacklist rt2x00lib
blacklist rt2570
3. Schnittstelle eintragen
In der Datei /etc/network/interfaces Folgendes eintragen:
auto wlan0
iface wlan0 inet dhcp
pre-up ifconfig wlan0 up
pre-up ifconfig wlan0 down
pre-up ifconfig wlan0 up
pre-up iwconfig wlan0 essid "Meine ESSID"
pre-up iwconfig wlan0 key "s:MeinPasswort"
pre-up iwconfig wlan0 mode Managed
pre-up ifconfig wlan0 up
Wer kein DHCP hat, der muss hier natürlich dhcp durch static ersetzen und die Adressen eintragen, aber wer macht das schon?
Damit sollte das Ganze beim Booten funktionieren. Wer es gleich ausprobieren möchte, der sollte zuerst mit
lsusb | grep rt
nachsehen, welche Treiber bereits geladen sind und diese mit modprobe -r Modulname erst entfernen. Dann den Adapter einstecken und mit iwconfig nachsehen, ob er richtig funktioniert:
wlan0 RT73 WLAN ESSID:"Meine ESSID"
Mode:Managed Frequency=2.462 GHz Access Point: 00:14:7F:22:4C:9F
Bit Rate=54 Mb/s
RTS thr:off Fragment thr:off
Encryption key:DEAD-BEEF-DEAD-BEEF-DEAD-BEEF-FF
Link Quality=100/100 Signal level:-38 dBm Noise level:-79 dBm
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:0 Missed beacon:0
Ja, das sind gerade mal 30cm zwischen Basisstation und Empfänger. Wer beim händischen Ausprobieren eine Meldung
Error for wireless request "Set ESSID" (8B1A) :
SET failed on device rausb0 ; Network is down.
erhält, der sollte ein
ifconfig wlan0 up
ausführen, dann klappt es.
Montag, 21. Mai 2007
Maven den Download abgewöhnen
Wenn man eigene Jar-Dateien in Maven einbaut, so soll man laut Dokumentation dies folgendermaßen machen:
mvn install:install-file -DgroupId=org.hibernate -DartifactId=hibernate-all -Dversion=3.2 -Dpackaging=jar -Dfile=hibernate-all-3.2.jar
Bei dieser Variante versucht Maven jedoch bei jedem Compilieren die entsprechende POM-Datei herunterzuladen:
Downloading: http://repo1.maven.org/maven2/org/hibernate/hibernate-all/3.2/hibernate-all-3.2.pom
Dies verhindert man, indem man dem "install:install-file"-Aufruf noch die Option "-DgeneratePom=true" hinzufügt. Damit wird eine entsprechende POM-Datei erzeugt und es erfolgen keine Downloads mehr.
mvn install:install-file -DgroupId=org.hibernate -DartifactId=hibernate-all -Dversion=3.2 -Dpackaging=jar -Dfile=hibernate-all-3.2.jar
Bei dieser Variante versucht Maven jedoch bei jedem Compilieren die entsprechende POM-Datei herunterzuladen:
Downloading: http://repo1.maven.org/maven2/org/hibernate/hibernate-all/3.2/hibernate-all-3.2.pom
Dies verhindert man, indem man dem "install:install-file"-Aufruf noch die Option "-DgeneratePom=true" hinzufügt. Damit wird eine entsprechende POM-Datei erzeugt und es erfolgen keine Downloads mehr.
Sonntag, 20. Mai 2007
Hibernate, MySQL und Microsoft Access
Verwendet man bei Hibernate als ID-Definition dies
<id name="id">
<generator class="hilo"/>
</id>
so erzeugt Hibernate hierfür automatisch BIGINT(20) Spalten, wenn MySQL verwendet wird. Diese funktionieren nicht im Microsoft Access auf Grund eines bekannten und bisher nicht behobenen Fehlers:
"The Microsoft Jet database engine incorrectly maps the BigInt data type to a Binary data type."
will man trotzdem Microsoft Access verwenden, muss man den Typ der Spalte manuell auf etwas ändern, mit dem Access klar kommt:
ALTER TABLE CHANGE COLUMN id id INT(10) NOT NULL AUTO_INCREMENT;
<id name="id">
<generator class="hilo"/>
</id>
so erzeugt Hibernate hierfür automatisch BIGINT(20) Spalten, wenn MySQL verwendet wird. Diese funktionieren nicht im Microsoft Access auf Grund eines bekannten und bisher nicht behobenen Fehlers:
"The Microsoft Jet database engine incorrectly maps the BigInt data type to a Binary data type."
will man trotzdem Microsoft Access verwenden, muss man den Typ der Spalte manuell auf etwas ändern, mit dem Access klar kommt:
ALTER TABLE
ATI FGLRX 8.35.5 und Kernel 2.6.20
Der ATI/AMD-Treiber für meine Radeon X1400 kompiliert nicht mit dem aktuellen Kernel 2.6.20, der bei Ubuntu/Feisty 7.04 dabei ist. Glücklicherweise gibt es einen Patch, der das Problem behebt. Hierzu muss man als root (sudo -i) Folgendes machen:
cd /usr/src/
mv fglrx.tar.bz2 fglrx-orig.tar.bz2
mkdir l
cd l
tar xvjf ../fglrx-orig.tar.bz2
cd modules/fglrx/
patch -p0 < ~kurt/Desktop/fglrx-8.35.5-for-2.6.20.patch
cd ../..
tar cvjf ../fglrx.tar.bz2 modules
cd ..
rm -rf l
und schon kann man mit 'm-a' das Paket kompilieren.
cd /usr/src/
mv fglrx.tar.bz2 fglrx-orig.tar.bz2
mkdir l
cd l
tar xvjf ../fglrx-orig.tar.bz2
cd modules/fglrx/
patch -p0 < ~kurt/Desktop/fglrx-8.35.5-for-2.6.20.patch
cd ../..
tar cvjf ../fglrx.tar.bz2 modules
cd ..
rm -rf l
und schon kann man mit 'm-a' das Paket kompilieren.
Donnerstag, 17. Mai 2007
KDEnlive (fast) besiegt
KDEnlive ist eine nette KDE-Anwendung zur Video-Bearbeitung. Leider habe ich keine aktuellen Pakete für mein (K)Ubuntu/Feisty 7.04 gefunden, also die SVN-Version runterladen und selber kompilieren. KDEnlive ist ein hervorragendes Beispiels für die GNU-Autotools-Hölle und mag nicht kompilieren:
possibly undefined macro: AM_INIT_AUTOMAKE
Mit etwas Gewalt kann man es aber überzeugen, doch zu kompilieren:
AUTOM4TE=/usr/bin/autom4te AUTOCONF=/usr/bin/autoconf2.50 AUTOHEADER=/usr/bin/autoheader2.50 AUTOMAKE=/usr/bin/automake-1.9 make -f Makefile.cvs
Danach ist es eigentlich recht langweilig, denn ein einfaches
dpkg-buildpackage -rfakeroot
Erzeugt die gewünschten Pakete. Wenn man die installiert klappt alles so lange gut, bis man versucht ein gespeichertes Projekt zu laden. Dann gibt es das hier:
(gdb) bt
#0 0x00000000 in ?? ()
#1 0xb7ec22cc in Mlt::Producer::position () from /usr/lib/libmlt++.so.0.2.2
#2 0x08122c64 in ?? ()
#3 0x08542b18 in ?? ()
#4 0xb68f8144 in ?? () from /lib/tls/i686/cmov/libc.so.6
#5 0xb7eeb7f8 in ?? () from /usr/lib/libmlt.so.0.2.3
#6 0xb7eda071 in mlt_properties_get_double () from /usr/lib/libmlt.so.0.2.3
#7 0x081eca68 in ?? ()
#8 0x00000000 in ?? ()
Klingt danach, als würde die libmlt machen, was sie will. Wenn man vor dem Laden ein Video zum leeren Projekt hinzufügt und damit die Video-Ausgabe initialisiert, scheint es besser zu klappen.
possibly undefined macro: AM_INIT_AUTOMAKE
Mit etwas Gewalt kann man es aber überzeugen, doch zu kompilieren:
AUTOM4TE=/usr/bin/autom4te AUTOCONF=/usr/bin/autoconf2.50 AUTOHEADER=/usr/bin/autoheader2.50 AUTOMAKE=/usr/bin/automake-1.9 make -f Makefile.cvs
Danach ist es eigentlich recht langweilig, denn ein einfaches
dpkg-buildpackage -rfakeroot
Erzeugt die gewünschten Pakete. Wenn man die installiert klappt alles so lange gut, bis man versucht ein gespeichertes Projekt zu laden. Dann gibt es das hier:
(gdb) bt
#0 0x00000000 in ?? ()
#1 0xb7ec22cc in Mlt::Producer::position () from /usr/lib/libmlt++.so.0.2.2
#2 0x08122c64 in ?? ()
#3 0x08542b18 in ?? ()
#4 0xb68f8144 in ?? () from /lib/tls/i686/cmov/libc.so.6
#5 0xb7eeb7f8 in ?? () from /usr/lib/libmlt.so.0.2.3
#6 0xb7eda071 in mlt_properties_get_double () from /usr/lib/libmlt.so.0.2.3
#7 0x081eca68 in ?? ()
#8 0x00000000 in ?? ()
Klingt danach, als würde die libmlt machen, was sie will. Wenn man vor dem Laden ein Video zum leeren Projekt hinzufügt und damit die Video-Ausgabe initialisiert, scheint es besser zu klappen.
Abonnieren
Posts (Atom)