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".

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.

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.

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.

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.

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.

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.

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.

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