COMPIZ-FUSION: Ein paar Tipps unter Gentoo
Ein bisschen hat's jetzt schon gedauert, aber nun läuft Compiz-Fusion endlich unter KDE. Vielleicht helfen die Tipps hier dem Einen oder Anderen weiter.
Als erstes Problem hatte ich Schwierigkeiten beim emerge -av compiz-fusion der mit folgendem Fehler abbrach:
MF .deps/scalefilter.Tpo -c scalefilter.c -fPIC -DPIC -o .libs/scalefilter.o
scalefilter.c:39:18: error: text.h: No such file or directory
scalefilter.c: In function 'scalefilterRenderFilterText':
scalefilter.c:120: error: 'CompTextAttrib' undeclared (first use in this function)
scalefilter.c:120: error: (Each undeclared identifier is reported only once
scalefilter.c:120: error: for each function it appears in.)
scalefilter.c:120: error: expected ';' before 'tA'
scalefilter.c:160: error: 'tA' undeclared (first use in this function)
scalefilter.c:169: error: 'TEXT_STYLE_BOLD' undeclared (first use in this function)
scalefilter.c:169: error: 'TEXT_STYLE_NORMAL' undeclared (first use in this function)
scalefilter.c:174: error: 'TextRenderNormal' undeclared (first use in this function)
scalefilter.c:177: error: 'TEXT_ID' undeclared (first use in this function)
scalefilter.c: At top level:
scalefilter.c:323: warning: no previous prototype for 'scalefilterUpdateFilter'
make[3]: *** [scalefilter.lo] Error 1
make[3]: Leaving directory `/var/tmp/portage/x11-plugins/compiz-fusion-plugins-extra-9999/work/plugins-extra/src/scalefilter'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/var/tmp/portage/x11-plugins/compiz-fusion-plugins-extra-9999/work/plugins-extra/src'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/var/tmp/portage/x11-plugins/compiz-fusion-plugins-extra-9999/work/plugins-extra'
make: *** [all] Error 2
!!! ERROR: x11-plugins/compiz-fusion-plugins-extra-9999 failed.
Call stack:
ebuild.sh, line 1621: Called dyn_compile
ebuild.sh, line 973: Called qa_call 'src_compile'
ebuild.sh, line 44: Called src_compile
compiz-fusion-plugins-extra-9999.ebuild, line 48: Called die
!!! make failed
!!! If you need support, post the topmost build error, and the call stack if relevant.
!!! A complete build log is located at '/var/tmp/portage/x11-plugins/compiz-fusion-plugins-extra-9999/temp/build.log'.
!!! This ebuild is from an overlay: '/opt/layman/xeffects'
Nachdem ich eine Weile rumgebastelt habe, habe ich mich vertrauensvoll an das Gentoo Forum gewendet. Die Lösung:
emerge compiz-fusion --skipfirst
emerge -1 compiz-fusion-plugins-extra
D.h. wir überspringen soz. den ersten Fehler und damit das compiz-fusion-plugins-extra Paket und installieren es hinterher erst. Das sorgt dann dafür, das die fehlende Datei dann zum Schluss vorhanden ist.
Meinen ersten Test hab ich dann gemacht, in dem ich compiz-start eingegeben habe. Das ist mir dann um die Ohren geflogen mit:
Xlib: extension "GLX" missing on display ":0.0"
Dabei hab ich dann festgestellt, das die GLX Extension nicht geladen werden konnte. Das sieht man in der /var/log/Xorg.0.log. Lösung war, den Nvidia Grafiktreiber neu zu installieren.
Als Nächstes ging dann der CompizConfig Settings Manager nicht. Beim Start von ccsm brach das Ganze mit
Traceback (most recent call last):
File "/usr/bin/ccsm", line 23, in ?
import compizconfig
ImportError: /usr/lib/python2.4/site-packages/compizconfig.so: undefined symbol: ccsLoadPlugin
ab. Lösung von dem Ganzen:
emerge -av libcompizconfig
Ansonsten lief die Installation wie unter Gentoo Xeffects beschrieben ganz gut.
Technorati Tags: gentoo, compiz, kde, xeffects, ccsm, nvidia, fusion
Posted at 03:00vorm. Juli 21, 2007 by cetixx in Tipps | Kommentare [0]
UDEV: Blacklist unter Gentoo
Wenn man unter Gentoo Linux verhindern möchte, das von udev ein Kernelmodul geladen werden soll, kann man das ganz einfach erledigen. Man legt eine Datei
/etc/modprobe.d/blacklist
an und schreibt pro Zeile den Modulnamen mit dem Keyword blacklist rein, den man nicht laden möchte. Bei meinem Asus Commando Board z.B. sind folgende Module eingetragen:
blacklist sky2
blacklist 8139cp
Das kommt aber eher daher, das ich viele Module kompiliert habe. Würde man sie rauslassen, beim Kernel kompilieren, wäre das nicht nötig.
Technorati Tags: blacklist, gentoo, linux, udev
Posted at 01:00vorm. Juni 23, 2007 by cetixx in Tipps | Kommentare [0]
Nvidia Linux Treiber 100.14.03/100.14.06 mit Kernel >= 2.6.20
Das schiesst ja schon wieder den Vogel ab... In meinem neuen Rechner steckt eine MSI NX8600GTS-T2D EZ (256 MB) Grafikkarte drin. Dazu brauche ich für Linux die neuesten Beta-Treiber. Und was macht der Vogel, wenn ich den Treiber installieren will:
FATAL: modpost: GPL-incompatible module nvidia.ko uses GPL-only symbol 'paravirt_ops'
Total geil... Ich HASSE diese closed Source Treiber. Das ist echt das Letzte. Aber was will man machen... Nun ich hatte ja auf meinem Debian 4.0 (Etch) einen eigenen Kernel 2.6.20 kompiliert und installiert. Und seit genau dieser Version ist das paravirt_ops dabei. Wenn man nun also den Source Code unter /usr/src/linux liegen hat, wechselt da rein und schaltet erstmal eine Option aus, in dem man die Kernel-Konfiguration startet:
make menuconfig
Dort findet man dann unter Processor type and features den Punkt Paravirtualization support (EXPERIMENTAL). Das schaltet man aus und beendet die Konfiguration. Anschliessend:
make prepare
make scripts
Dann kann man nochmal versuchen den Treiber zu installieren mit
sh NVIDIA-Linux-x86-100.14.06-pkg1.run
Das führt dann hoffentlich zu einem funktionierenden Treiber. Bei mir kommt allerdings jetzt eine Floating Point Exception...
/bin/sh: line 1: 17393 Floating point exceptionscripts/mod/modpost
Das ist wirklich sowas von toll... Liebe Nvidia's, liebe ATI's: Ihr habt vom Treiber schreiben soviel Ahnung wie ich vom Raketen bauen. Nix für ungut...
Mehr Infos hier (vielleicht hilft's jemanden weiter):
Install fails with Debian 2.6.20-1-k7 + Linux-x86-1.0-9755/Linux-x86-100.14.03
[Installation Instruction] nvidia driver with kernel-rt-2.6.20-0119.rt8 on FC6
Using the NVidia driver on a Linux Kernel 2.6.2x with paravirtualization turned on
Technorati Tags: nvidia, treiber, driver, linux, kernel
Posted at 10:45nachm. Mai 30, 2007 by cetixx in Tipps | Kommentare [0]
VLC zum analogen Video aufzeichnen verwenden
Also nachdem diese z.T. recht veralteten TV-Programme bei mir allesamt mit meiner Hauppauge PVR 150 und Video for Linux 2 (v4l2) entweder nichts anfangen konnten oder einfach nur umständlich zu konfigurieren sind und dann trotzdem nicht funktionieren, obwohl sie ansonsten sicherlich schön wären (z.B. XdTV), bin ich schließlich doch wieder bei VLC gelandet.
Wenn ich ein Video aufzeichnen möchte, gehe ich wie folgt vor. Auf der Kommandozeile
ivtvctl --set-sapmode=1
ivtvctl --set-input=2
Ersteres stellt Audio auf Stereo (wenn's knistert oder sich sonst der Ton komisch anhört, einfach mal mit Mono probieren). Die zweite Option stellt den Input auf den Composite-Eingang (ich weiss, S-VHS wär besser, aber das gibt der Videorecorder nicht mehr her ;-) ).
Dann ruft man vlc auf, geht ins Menü File/Open Capture Device und wechselt auf den Reiter PVR (Personal Video Recorder). Bei Device gibt man an, von welchem Device man aufzeichnen möchte. In meinem Fall ist das eben unter /dev/video0.
Unter Advanced options... stelle ich gar nichts ein, sondern klicke nur Stream/Save an:
Dann wähle ich im folgenden Fenster nur noch aus, wo das ganze Video gespeichert werden soll, nehme den DIV3 Codec (der ist dem DivX Codec verwandt) und beim Audio Codec nehme ich mpga. Das Ganze landet in einem OGG Container. VLC, Totem und mplayer spielen diese Files dann problemlos ab.
Das sind dann mal die Basics. Bei den div. Einstellungen kann man noch experimentieren.
Posted at 12:30vorm. Mai 30, 2007 by cetixx in Tipps | Kommentare [0]
Videos für Archos 740 Wifi unter Linux erstellen
Also nachdem mich diese Konvertiererei jetzt fast in den Wahnsinn getrieben hätte, bin ich dann noch noch auf einen grünen Zweig gekommen :-)
Unter Windows für den Archos ein Video im DivX, MPEG4 oder Xvid Format zu erstellen, ist relativ einfach. Man holt sich von www.divx.com den Video-Codec runter, installiert ihn, holt von www.virtualdub.org Virtualdub runter, installiert das und holt dann anschließend von www.archos.com den MPEG4 Translator runter. Dann gibt man nur noch Quelle und Ziel an und dann auch schon fast am Ziel ;-)
Ich hab das Ganze zuerst mit Wine unter Ubuntu 6.10 (Edgy Eft) probiert, aber da findet der MPEG4 Translator den DivX Codec nicht, obwohl er installiert ist. BTW: Es gibt noch ein ziemlich cooles Tool zum Umwandeln unter Windows, das auch unter Linux läuft. Der MediaCoder. Das Ganze ist OpenSource und konvertiert alles Mögliche. Damit das aber unter Wine läuft, braucht man eine DLL. Das Ganze ist hier beschrieben: MediaCoder on Linux. (DLL).
Ich wollte das Ganze aber nativ unter Linux. Nach div. ffmpeg Einstellungen, die nicht funktionierten, da dieser (und nicht nur dieser) Player sich sehr wählerisch zeigt, beim dem was er abspielt, bin ich dann schließlich bei transcode gelandet. Und das funktioniert dann ganz einfach:
transcode -y xvid -o ausgabe.avi -i eingabe.avi
Oder:
transcode -y ffmpeg -F mpeg4 -o ausgabe.avi -i eingabe.avi
Beide Versionen schluckt der Archos dann ohne zu murren. Gelesen habe ich, das das auch mit dem Cowon oder Centrix funktionieren soll. Aber diese Player hab ich nicht. Als ich nur ffmpeg verwendete, spielte er meistens den Sound, aber das Video nicht. Seltsamerweise lief zwar die Vorschau korrekt und ich konnte im Video auch vor- und zurück, aber es kam immer nur ein Standbild :-(
Und noch ein Tipp: Damit das mit dem Konvertieren alles funktioniert, braucht man natürlich auch div. Codec's, die die div. Videoformate lesen können. Tut euch einen Gefallen und sucht nach Automatix oder Automatix2 und fügt das in eure /etc/apt/sources.list hinzu, wenn ihr Ubuntu 6.06 (Drapper Drake), 6.10 (Edgy Eft), 7.04 (Feisty Faun) oder Debian 4.0 (Etch) habt. Das zeugs installiert euch alles an Codec's. Dann noch
apt-get install mplayer ffmpeg mencoder
und werdet glücklich ;-)
Zum Thema: LinuxUser 1/2006 - Handgepäck
Technorati Tags: archos, ffmpeg, mplayer, ubuntu, debian, linux, video, converter, divx, xvid, mpeg4, wine, opensource, transcode
Posted at 12:00vorm. Mai 21, 2007 by cetixx in Tipps | Kommentare [0]
Archos 704 WiFi manuell mounten unter Linux
Diese Anleitung kann man eigentlich für alle USB-Sticks bzw. Geräte benutzen, die sich als externen Speicher melden. Den Archos schliesst man dazu einfach am Rechner USB-Port an. Der Archos fragt dann, ob er sich als externe Platte melden soll. Unter Linux tut man genau das. Da ich am Server keine grafische Oberfläche habe, hier also der manuelle Weg auf der Shell.
Zuerst guggen wir, ob der Befehl lsusb was auswirft:
Bus 005 Device 002: ID 0e79:130c
Bus 005 Device 001: ID 0000:0000
Bus 004 Device 001: ID 0000:0000
Bus 003 Device 001: ID 0000:0000
Bus 002 Device 001: ID 0000:0000
Bus 001 Device 001: ID 0000:0000
Da ich normalerweise keine USB Geräte angeschlossen habe, sieht man hier jetzt das am Bus 005 ein Gerät hängt. Ansonsten steht hinter der ID immer 0000:0000. Es wurde also ein Gerät erkannt. Dann guggen wir mal, an welcher Stelle unter /dev der Archos aufgehängt ist:
scotty:# dmesg | grep -i "scsi device"
SCSI device sda: 77931315 512-byte hdwr sectors (39901 MB)
SCSI device sda: 77931315 512-byte hdwr sectors (39901 MB)
Das Gerät hängt also unter /dev/sda. Jetzt ist es nur so, das ich bei mir nicht /dev/sda mounten muss sondern /dev/sda1. Das erkennt man mit fdisk -l:
Disk /dev/sda: 39.9 GB, 39900833280 bytes
255 heads, 63 sectors/track, 4851 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End
Blocks Id System
/dev/sda1 1 4851 38965626 c W95 FAT32 (LBA)
So... Wollen wir den Archos nun nicht nur einmal, sondern öfters mounten, machen wir am Besten einen Eintrag in der /etc/fstab:
/dev/sda1 /media/flash vfat users,noauto 0 0
Die Option users besagt, das auch andere User das Gerät unmounten dürfen, nicht nur der, der das Gerät gemountet hat. Die UID und die GID des Besitzers dieses Geräts kann man auch noch angeben (uid=user,gid=gruppe). Dann legen wir noch das Verzeichnis /media/flash an und schon können wir den Archos mounten:
mount /media/flash
Das war's dann schon...
Technorati Tags: linux, mount, archos
Posted at 12:11vorm. Mai 17, 2007 by cetixx in Tipps | Kommentare [0]
CD rippen und Encoden unter Linux
Um den neuen Archos 704 WiFi (BTW: Ein ziemlich heftiges Teil ;-) ) endlich mit meinen alten CDs zu bestücken, war ich unter Linux auf der Suche nach einem guten CD Ripper, d.h. einer der die CDs wirklich richtig ausließt. Es geht hier nicht um Geschwindigkeit sondern Genauigkeit, damit sich die Songs nachher auch wirklich gut anhören. Unter Windows gibt's dafür EAC Excat Audio Copy.
Unter Linux hab ich dafür Grip gefunden. Es basiert aut cdparanoia (kann aber auch externe Ripper verwenden). Unter Kubuntu einfach mit
apt-get install grip
installieren. Mit meinem Plextor-Brenner arbeitet das wunderbar und die Songs kommen 1a.
Technorati Tags: rip, eac, grip, cdparanoia, kubuntuPosted at 10:00nachm. Mai 14, 2007 by cetixx in Tipps | Kommentare [0]
NSV: Wie spielt man das NSV Format unter Linux Ubuntu 6.10 Edgy Eft ab?
Also ich gugg ja gern www.demoscene.tv. Aus mir nicht ganz nachvollziehbaren Gründen benötigt man hierzu aber unter Firefox ein ActiveX-Plugin, um die Video's abspielen zu können. Wenn man jetzt nicht grad VMWare oder Wine laufen lassen will, fällt Linux also prinzipiell flach. Aber - wie so oft - mplayer comes to rescue. Freundlicherweise gibt es auf der Seite zu allen Streams einen Link, um die Videos auch mit Winamp abspielen zu können. Dieser Stream benutzt das NSV Format. Das kann mplayer abspielen. Also hole ich mir einfach den entsprechenden Link raus, der auf die Playlist verweist und gebe noch ein paar Optionen dem mplayer mit, da meine Kiste nicht mehr die Schnellste ist:
mplayer -vfm ffmpeg -lavdopts lowres=1:fast:skiploopfilter=all http://91.121.4.152:8000/listen.pls
Feini fein ;-) Und schon gugg ich demoscene.tv... Ach ja. Man braucht dazu natürlich auch die entsprechenden Codecs. Ich hab's mir da ganz einfach gemacht und den mplayer über Automatix2 installiert. Das gibt es inzwischen auch für Ubuntu 7.04 (Feisty Fawn) i386. Das installiert dann gleich alles Nötige mit. Einfacher geht's unter Linux kaum. Ansonsten muss man auf der mplayer Homepage mal guggen. Um die dTV NSV Streams abspielen zu können, benötigt man z.B. die vp6vfw.dll.
Technorati Tags: nsv, winamp, linux, ubuntu, demoscene, demoscene.tv, automatix
Posted at 08:45nachm. Apr. 11, 2007 by cetixx in Tipps | Kommentare [0]
Volltextsuche mit PostgreSQL 8.2, Tsearch2 und UTF8
So... PostgreSQL 8.2 ist jetzt doch schon eine Weile draussen. Zeit, die Tsearch2 Installationsbeschreibung zu erneuern. Wie immer ist diese Installationsanweisung wohl nicht der Weisheits
letzter Schluss, aber man sollte damit eine Tsearch2 Installation
hinbekommen.
Tsearch2 ist eine Erweiterung zu PostgreSQL
speziell für die
Volltextsuche. Zunächst mal, muss man ein bißchen was kompilieren.
Gehen wir mal davon aus, das PostgreSQL schon vorher kompiliert worden
ist und gehen wir weiter davon aus, das wir Version 8.2.3 verwenden.
Den Sourcecode von Postgres haben wir nach /opt/source/postgres/8.2.3 gelegt. Dort wechseln wir rein. Die Postgres 8.2 kompiliere ich momentan mit folgenden Befehlen:
./configure --prefix=/server/pgsql/8.2.3 --enable-nls
make
make install
Nun wechselt man in das contrib Verzeichnis. Zunächst brauchen wir einen Patch für die Stemmer (Wortstammbibliotheken). Da gab es nach der Freigabe von Postgres 8.2 Probleme, die dieser Patch löst:
wget http://www.sai.msu.su/~megera/postgres/gist/tsearch/V2/tsearch_snowball_82.gz
Dann entpacken und patchen:
gunzip tsearch_snowball_82.gz
patch -p1 < tsearch_snowball_82
Dann wechseln wir in das Verzeichnis tsearch2. Zum Kompilieren von tsearch2 gibt man in diesem Verzeichnis nun einfach
make
make install
ein. Damit das dann auch mit der deutschen Sprache alles etwas
besser funktioniert, müssen noch ein paar zusätzliche Dinge erledigt
werden, die wir gleich besprechen. Zunächst sollte die (eventl. zu erstellende) DB in UTF8 bzw. Unicode codiert sein. Ist die Datenbank schon installiert und man möchte überprüfen, ob die DB mit UTF8 Encoding angelegt wurde, connected man sich auf den Datenbankcluster per psql und läßt sich mit \l alle Datenbanken anzeigen (oder psql -l). Wenn in der letzten Spalte UTF8 steht, paßt's.
Als nächstes wechselt man in das Verzeichnis gendict. gendict hilft beim Erstellen von Wörterbüchertemplates. Genauer gesagt, bietet es Unterstützung für die Snowball Wortstämme. NORMALERWEISE(!) würde man sich von der Snowball Seite erstmal zwei Dateien downloaden und umbenennen:
wget http://www.snowball.tartarus.org/algorithms/german/stem_UTF_8.c
wget http://www.snowball.tartarus.org/algorithms/german/stem_UTF_8.h
mv stem_UTF_8.c stem.c
mv stem_UTF_8.h stem.h
Das erzeugt aber bei mir dann leider folgenden Fehler, beim Kompilieren (kommt weiter unten):
stem.c: In function 'r_prelude':
stem.c:163: error: too many arguments to function 'in_grouping_U'
stem.c:168: error: too many arguments to function 'in_grouping_U'
stem.c:177: error: too many arguments to function 'in_grouping_U'
stem.c: In function 'r_mark_regions':
stem.c:212: error: too many arguments to function 'out_grouping_U'
stem.c:217: error: too many arguments to function 'in_grouping_U'
stem.c:227: error: too many arguments to function 'out_grouping_U'
stem.c:232: error: too many arguments to function 'in_grouping_U'
stem.c: In function 'r_standard_suffix':
stem.c:320: error: too many arguments to function 'in_grouping_b_U'
stem.c:347: error: too many arguments to function 'in_grouping_b_U'
make: *** [stem.o] Error 1
Also das taugt natürlich nix. Aber die stem.(c|h), die ich bei der Postgres 8.1.X verwendet habe, funktionieren noch. Falls man die noch hat, nimmt man diese. Ansonsten hab ich die Dateien hier zusammengepackt: stem.tar.gz
Wie auch immer legt man diese Dateien dann in das oben erwähnte gendict Verzeichnis. Dann führt man folgenden Befehl aus:
./config.sh -n de -s -p german_UTF_8 -i -v -c stem.c -h stem.h -C'Snowball stemmer for German'
Wenn config durchgelaufen ist, wechselt man in ein anderes Verzeichnis:
cd ../../dict_de
Dann kann man den make starten:make
make install
Wenn das dann passiert ist, landet die dict_de.so im PostgreSQL lib Verzeichnis. Als nächstes muß man jetzt erstmal die Datenbank für tsearch2 und das Wortstammbuch vorbereiten und das funkt, in dem man zwei SQL-Skripte einspielt als PostgreSQL Superuser:
Die Datei contrib/tsearch2/tsearch2.sql sollte man sich vorher nochmal anschauen und eventl. in der ersten Zeile den search_path anpassen. Dann:
psql -d dbname -f tsearch2.sql
Die Datei contrib/dict_de/dict_de.sql sollte man sich ebenfalls vorher nochmal anschauen und eventl. in der ersten Zeile den search_path anpassen. Dann:
psql -d dbname -f dict_de.sql
Da nun vier Tabellen als Superuser angelegt worden sind, aber man i.d.R. ja eher unter einem "normalen" Account mit weniger Rechten arbeitet, muss man nun diesem User erlauben, das er diese Tabellen bearbeiten darf:
GRANT select,insert,update,delete ON [SCHEMA].pg_ts_cfg TO [USER];
GRANT select,insert,update,delete ON [SCHEMA].pg_ts_cfgmap TO [USER];
GRANT select,insert,update,delete ON [SCHEMA].pg_ts_dict TO [USER];
GRANT select,insert,update,delete ON [SCHEMA].pg_ts_parser TO [USER];
SCHEMA kann man weglassen, wenn man sowieso alles im public Schema hat. Ansonsten gibt man halt noch den Schema-Namen davor an. So... Nun kann man sich mal unter dem User einloggen, unter dem man alles installiert hat. Folgender Befehl sollte dann unter psql schon klappen:
db=> SELECT 'Our first string used today'::tsvector;
Hier sieht man dann schon, dass der übergebene String in seine Einzelteile zerlegt wird. Als Nächstes probieren wir mal Folgendes aus:
db=> SELECT * FROM ts_debug('Our first string used today');
ERROR: could not find tsearch config by locale
CONTEXT: SQL function "_get_parser_from_curcfg" statement 1
SQL function "ts_debug" during startup
Dieser Fehler (wobei es ja eigentlich kein Fehler im eigentlichen Sinne ist, sondern ein Konfigurationsfehler meinerseits) hätte mich fast zur Weißglut getrieben. Guggen wir mal in die Konfiguration:
db=> SELECT * FROM pg_ts_cfg;
ts_name | prs_name | locale |
default | default | C |
default_russian | default | ru_RU.KOI8-R |
simple | default |
Da sehen wir, das als Locale C als Default (Spalte ts_name, Eintrag default) verwendet wird. Geben wir unter psql dann mal folgende Befehle ein:
db=> SHOW lc_ctype;
lc_ctype
de_DE.utf8@euro
(1 Zeile)
db=> SHOW lc_collate;
lc_collate
de_DE.utf8@euro
(1 Zeile)
In meinem Fall also de_DE.utf8@euro. Und in der Konfigurationstabelle steht davon natürlich noch nicht's. Man muß also für das Server-Locale eine entsprechende Konfiguration erstellen. Wenn ich das richtig verstanden habe, dann sollte das Locale hier das sein, was man beim Initialisieren des Postgres-Clusters beim initdb als Paramter --locale mitgegeben hat. Gehen wir's also an...
Zunächst brauchen wir erstmal ein paar Dateien. Die muß man normalerweise selber generieren, aber ich hab sie mal zusammengepackt (die ich für Version 8.1.X verwendet habe, funktionieren nicht mehr! Das merkt man ganz schnell, wenn die Meldung ERROR: Wrong affix file format beim Index anlegen später erscheint...):
utf8.tar.gz
Darin enthalten sind u.a.: german.aff (hiermit wird es möglich, zusammengesetzte Wörter sog. compound words aufzulösen, also z.B. Tischkante), german.med (das Wörterbuch an sich), german.stop und
german.stop.ispell (zwei mögliche Dateien mit Stopwörtern also "der, die, das, usw.". Danach zu suchen, macht wenig Sinn...). Die Dateien reichen erstmal um weiter zu machen.
Man kopiert die Dinger am Besten irgendwo hin, wo Postgres Zugriff hat. Das konvertieren an sich, ist auch nicht allzu schwer, wenn man's selber machen will. Wenn man die entsprechenden Dateien im Latin1-Encoding schon hat, konvertiert man sie einfach wie folgt:
iconv -f iso-8859-1 -t utf-8 -o german_utf8.med german.med
iconv -f iso-8859-1 -t utf-8 -o german_utf8.aff german.aff
iconv -f iso-8859-1 -t utf-8 -o german_utf8.stop german.stop
iconv -f iso-8859-1 -t utf-8 -o german_utf8.stop.ispell german.stop.ispell
Damit wir nun eine funktionsfähige Tsearch2 Konfiguration bekommen, sind noch ein paar weitere SQL-Statements notwendig. Zunächst benennen wir den default-Tsearch2-Eintrag mal um, da wir ja unseren eigenen verwenden wollen:
UPDATE pg_ts_cfg SET ts_name='default_c' WHERE prs_name='default' AND locale='C';
Dann fügen wir unsere Defaults ein:
db=> INSERT INTO pg_ts_cfg(ts_name, prs_name, locale) VALUES('default', 'default', 'de_DE.utf8@euro');
Bevor man nun weitermacht, sollte man noch das richtige Clientencoding einstellen. Das dürfte i.d.R. LATIN1 sein, wenn man auf der Shell arbeitet und ist für später wichtig, wenn wir die Testquery ausführen wollen. Das Clientencoding setzt man auf der Shell mit
export PGCLIENTENCODING=LATIN1
Wenn euch Meldungen wie
ERROR: invalid byte sequence for encoding "UTF8": 0xe4fcf6
oder
ERROR: Affix parse error at 644 line
um die Ohren fliegen, liegt das mit gaaaaanz hoher Wahrscheinlichkeit an einem falsch eingestellten Encoding. Bei PostgreSQL 8.1.5 sind die Meldungen etwas genauer. Bei letzterer Meldung war z.B. das Encoding der german_utf8.aff Datei kein "echtes" UTF8. Bei der ersten Meldung hab ich auf der psql-Shell gearbeitet und unten stehende Testquery ausgeführt, die Umlaute enthielt. Also immer mal auf das Encoding aufpassen!
Dann fügen wir mal die entscheidenste Konfiguration ein:
db=> INSERT INTO pg_ts_dict
(SELECT 'de_ispell', dict_init,
'DictFile="/data/pgsql/share/dict/utf8/german_utf8.med",'
'AffFile="/data/pgsql/share/dict/utf8/german_utf8.aff",'
'StopFile="/data/pgsql/share/dict/utf8/german_utf8.stop.ispell"',
dict_lexize
FROM pg_ts_dict
WHERE dict_name = 'ispell_template');
Dann stellen wir ein, welches Wörterbuch wir verwenden wollen:
db=> SELECT set_curdict('de_ispell');
oder
db=> SELECT set_curdict(DIE_NUMMER_DIE_DER_VORHERGEHNDE_INSERT_AUSSPUCKT);
Ich habe festgestellt, das letzter Befehl beim Debuggen gar nicht so schlecht ist, da er wesentlich mehr Info's ausspuckt. Als nächstes müssen wir dann noch angeben, für welche Wörter wir welches Wörterbuch verwenden wollen:
db=> DELETE FROM pg_ts_cfgmap WHERE ts_name='default' AND dict_name='{en_stem}';
INSERT INTO pg_ts_cfgmap (ts_name, tok_alias, dict_name) VALUES ('default', 'lhword', '{de_ispell,simple}');
INSERT INTO pg_ts_cfgmap (ts_name, tok_alias, dict_name) VALUES ('default', 'lpart_hword', '{de_ispell,simple}');
INSERT INTO pg_ts_cfgmap (ts_name, tok_alias, dict_name) VALUES ('default', 'lword', '{de_ispell,simple}');
Bei dem Delete sollten drei Einträge rausfliegen. {de_ispell,simple} besagt, das wir zunächst das ISpell-Wörterbuch verwenden wollen und dann das Simple-Wörterbuch. Ohne das Simple-Wörterbuch würde das Suchergebnis erheblich kleiner sein und viele einfache Wörter würden aussen vor bleiben. Ein noch besseres Ergebnis dürften die OpenOffice-Wörterbücher bringen. Das muss ich bei Gelegenheit mal ausprobieren. Wenn das durchgelaufen ist, kann man mal folgende Testquery absetzen:
db=> select to_tsvector('PostgreSQL ist weitgehend konform mit dem SQL92/SQL99-Standard, d.h. alle in dem Standard geforderten Funktionen stehen zur Verfügung und verhalten sich so, wie vom Standard gefordert; dies ist bei manchen kommerziellen sowie nichtkommerziellen SQL-Datenbanken bisweilen nicht gegeben.');
to_tsvector
* 'all':9 'bei':28 'd.h':8 'dem':6,11 'die':26 'ist':2,27 'mit':5 'sql':34 'und':18 'vom':23 'wie':22 'zur':16 'sich':20 'sowi':31 'nicht':37 'stehen':15 'gegeben':38 'konform':4 'manchen':29 'standard':12,24 'bisweilen':36 'gefordert':25 'verfügung':17 'verhalten':19 'funktionen':14 'postgresql':1 'weitgehend':3 'datenbanken':35 'geforderten':13 'kommerziellen':30 'sql-datenbanken':33 'nichtkommerziellen':32 'sql92/sql99-standard':7
(1 Zeile)
Man sieht also hier jetzt, wie Tsearch2 den String zerlegt hat. Die Nummern dahinter sind die Positionen der Wörter im Text. So... Soweit wären wir nun also schon. Aber wir wollen natürlich nicht nur in einem Satz nach bestimmten Wörtern suchen, sondern in der Datenbank bzw. eben in verschiedenen Spalten. Nehmen wir als Beispiel eine Installation von der bekannten Forumsoftware phpBB. Dort gibt es eine Tabelle phpbb_posts_text (wenn man als Prefix bei der Installation phpbb belassen hat) die wiederum eine Spalte post_text hat. Diese Spalte ist vom Typ text. Da landen die Postings der User drin und da kann schon mal längerer Text werden. Und genau da drin wollen wir suchen können. Zunächst fügen wir dieser Tabelle eine neue Spalte hinzu:
db==> ALTER TABLE phpbb_posts_text ADD COLUMN idxfti tsvector;
Anstatt wie bei "normalen" Indizies "hängt" dieser Index soz. an der Tabelle dran. Diese Spalte kann dann durch die Tsearch2 Operatoren und Funktionen und durch einen speziellen Index zur Volltextsuche genutzt werden. Diese Spalte heißt in diesem Fall idxfti. Es gibt einen Grundsatz, denn man einhalten sollte, wenn man einen Volltextindex erzeugt:
1. Tabelle befüllen
2. VACUUM FULL ANALYZE tablename;
3. Index erzeugen
4. VACUUM FULL ANALYZE tablename;
db==> UPDATE phpbb_posts_text SET idxfti=to_tsvector('default', post_text);
db==> VACUUM FULL ANALYZE phpbb_posts_text;
Der Funktion to_tsvector sagen wir hier, das wir die default Konfiguration verwenden wollen (die haben wir oben ja auf die deutschen Wörterbücher eingestellt) und das wir die Spalte post_text indizieren wollen. Möchte man mehrere Spalten indizieren, sieht das so aus:
db==> UPDATE phpbb_posts_text SET idxfti=to_tsvector('default',coalesce(post_text,'') ||' '|| coalesce(post_subject,''));
Nun erzeugen wir den eigentlichen Index:
db==> CREATE INDEX idxfti_idx ON phpbb_posts_text USING gist(idxfti);
Nun brauchen wir noch einen Trigger, der uns den Index auf den neuesten Stand hält, sobald ein neuer Eintrag hinzukommt:
db==> CREATE TRIGGER idxftiupdate BEFORE UPDATE OR INSERT ON phpbb_posts_text
db==> FOR EACH ROW EXECUTE PROCEDURE tsearch2(idxfti, post_text);
Wenn man oben zwei Spalten für die Indizierung angegeben hat, sieht der Trigger etwas anders aus:
db==> CREATE TRIGGER idxftiupdate BEFORE UPDATE OR INSERT ON phpbb_posts_text
db==> FOR EACH ROW EXECUTE PROCEDURE tsearch2(idxfti, post_text, post_subject);
Die Funktion tsearch2 akzeptiert mehrere Argumente, so das man hier die beiden Spalten nicht verknüpfen muss. Und dann war's dann auch schon... Jetzt kann man Abfragen starten bzw. man kann sich auch die Inhalte der Tabelle selber anschauen. Die neue Spalte enthält nämlich z.B. die gefundenen Wörter.
Beispielquery's:
Einfache Suche:
SELECT post_text FROM phpbb_posts_text WHERE idxfti @@ to_tsquery('default', 'haus');
Suche mit UND:
SELECT post_text FROM phpbb_posts_text WHERE idxfti @@ to_tsquery('default', 'haus & garten');
Suche mit ODER:
SELECT post_text FROM phpbb_posts_text WHERE idxfti @@ to_tsquery('default', 'haus | garten');
Links zum Thema:
Tsearch2 Wiki
http://www.sai.msu.su/~megera/wiki/Tsearch2
Implementing Full Text Indexing with PostgreSQL
http://www.devx.com/opensource/Article/21674/0/page/3
Tsearch2 - Introduction
http://www.sai.msu.su/~megera/postgres/gist/tsearch/V2/docs/tsearch-V2-intro.html
Tsearch2 and Unicode/UTF-8 - German Unicode Datebase
http://www.sai.msu.su/~megera/postgres/gist/tsearch/V2/docs/tsearch2_german_utf8.html
Gendict - generate dictionary templates for contrib/tsearch2 module
http://www.sai.msu.su/~megera/postgres/gist/tsearch/V2/docs/README.gendict
Deutsche Ispell Stop-Datei
http://hannes.imos.net/german.stop.ispell
German stemming algorithm
http://www.snowball.tartarus.org/algorithms/german/stemmer.html
Deutsche Wörterbuch und Stop-Dateien
http://www.computec.de/dload/tsearch2_german_utf8.zip
Can't find tsearch config by locale
http://blog.gmane.org/gmane.comp.db.postgresql.openfts.general/month=20040801
USING TSEARCH AND POSTGRESQL FOR A WEB BASED SEARCH ENGINE
http://www.sai.msu.su/~megera/postgres/gist/tsearch/tsearch-intro.html
Tsearch V2 Notes
http://www.sai.msu.su/~megera/oddmuse/index.cgi/Tsearch_V2_Notes
Tsearch V2 Optimization
http://www.sai.msu.su/~megera/postgres/gist/tsearch/V2/docs/oscon_tsearch2/optimization.html
Tsearch V2 compound words
http://www.sai.msu.su/~megera/oddmuse/index.cgi/Tsearch_V2_compound_words
TSearch2 / German compound words / UTF-8
http://archives.postgresql.org/pgsql-general/2005-11/msg01113.php
Technorati Tags: postgresql, tsearch2, utf8, fulltextsearch
Posted at 11:00nachm. März 13, 2007 by cetixx in Tipps | Kommentare [5]
VIDEO: Hauppauge PVR 150 250 350 unter Linux (Kubuntu 6.10)
Zuerst muss mal das Universe und Multiverse Repository aktiviert sein und der Standort der Firmware hinzugefügt werden. Netterweise stellt Hauppauge inzwischen die Firmware den ivtv Treiberentwicklern zur Verfügung, so das alles in einem Rutsch installiert werden kann. Dazu fügt man in die /etc/apt/sources.list folgende Zeilen hinzu:
#
# multiverse repository
#
deb http://de.archive.ubuntu.com/ubuntu/ edgy universe multiverse
deb-src http://de.archive.ubuntu.com/ubuntu/ edgy universe multiverse
#
# ivtv firmware
#
deb http://dl.ivtvdriver.org/ubuntu edgy firmware
Dann müssen wir (K)ubuntu noch anweisen, das Repository ohne Gemecker zu akzeptieren, indem wir den entsprechenden Key hinzufügen:
wget http://dl.ivtvdriver.org/ubuntu/80DF6D58.gpg -O- | sudo apt-key add -
Danach dann noch ein
sudo apt-get update
damit der lokale Repository-Cache auf den aktuellen Stand kommt. Auf der Kommandozeile gibt man dann Folgendes ein:
DEBIAN_FRONTEND=dialog sudo apt-get install ivtv-firmware
Dann brauchen wir den Modulassistenten zum den Treiber vorzubereiten:
sudo m-a update,prepare
sudo m-a a-i ivtv
sudo depmod -a
Sollte man mal in den Kernel auf eine neue Version updaten, dann muss man diese drei Zeilen auch wieder ausführen. Dann installieren wir den Treiber:
sudo modprobe ivtv
Mit
lsmod | grep ivtv
kann man nun guggen, ob das Modul gelanden wurde. Wenn das sauber klappt, fügen wir das Modul noch in die /etc/modules hinzu, damit es auch nach dem Restart wieder geladen wird:
sudo sh -c 'echo ivtv >>/etc/modules'
Nun kann man mal den Video-Recorder oder sonst eine externe Quelle an die Karte anschließen. Damit man nun dem Treiber mitteilen kann, von welcher Schnittstelle (Composite, Tuner, S-VHS, ...) das Signal kommt, braucht man noch ein Paket:
sudo apt-get install ivtv-utils
Das Utility heißt ivtvctl. Mit
ivtvctl --help
kann man nun alle Optionen ausgeben lassen. Ich hab meinen Videorecorder entweder am Composite- oder S-VHS-Anschluss angeschlossen und der Sound liegt am Line-In der Hauppauge TV-Karte an. Für mich habe ich folgende wichtiges Kommandos identifiziert:
Abfragen, welche Input-Schnittstellen vorhanden sind:
ivtvctl --list-inputs
S-VHS Schnittstelle verwenden:
ivtvctl --set-input=1
Composite Schnittstelle verwenden:
ivtvctl --set-input=2
Sound-Input auf Mono umstellen:
ivtvctl --set-sapmode=0
Sound-Input auf Stereo umstellen:
ivtvctl --set-sapmode=1
Wenn man nun per ivtvctl die richtige Quelle ausgewählt hat, kann man mal eine Testaufzeichung starten:
cat /dev/video0 > /tmp/test_capture.mpg
Das Ganze läßt man 5-10 Sek. laufen und bricht dann mit CTRL+C ab. Nun nimmt man einen Videoplayer seiner Wahl (VLC, Totem, mplayer, ...) und überprüft das Ergebnis:
mplayer /tmp/test_capture.mpg
Zum Aufzeichnen verwende ich inzwischen VLC und zum Umwandeln, um das Ganze z.B. auf DVD zu brennen, die Skriptsammlung tovid. Dazu dann ein anderes Mal...
Update: 29.05.2007
Wenn man mal in die Verlegenheit kommen sollte, das K/Ubuntu per automatischen Update einen neuen Kernel einspielt, macht man Folgendes:
sudo rm /usr/src/ivtv*deb
sudo m-a clean ivtv
sudo m-a update,prepare
sudo m-a a-i ivtv
sudo depmod -a
Dann kann man mit
modprobe ivtv
den Treiber wieder starten. Mehr zum Thema gibt's hier noch: Install IVTV Edgy
Technorati Tags: hauppauge, pvr, driver, installation, linux, ubuntu, ivtv, vlc, tovid, kubuntu
Posted at 11:48nachm. März 08, 2007 by cetixx in Tipps | Kommentare [0]
X: Ubuntu/Kubuntu, Radeon 9700 PRO, Dualhead, 2 x 21 Zoll Röhrenbildschirm (CRT)
Nachdem ich für mich entschieden habe, das Windows Vista für mich keine Option mehr ist, war's endlich an der Zeit, auf Linux umzusteigen. Auf meinem Server läuft Debian ja schon seit was weiss ich wieviel Jahren, aber auf'n Desktop war Linux einfach noch nicht soweit. Nun, das hat sich gründlich geändert. Mit Ubuntu/Kubuntu steht eine Distribution bereit, die zumindest der fortgeschrittene User im Großen und Ganzen zum Laufen bringt (Ich sage deshalb fortgeschrittener User, weil ich es auch unter meinen Kollegen noch nie erlebt habe, das sich Linux mal installieren liese, ohne das man nicht doch noch Hand anlegen musste).
Die Installation an sich war gar kein Problem. Hatte auf meinen zwei Platten Windows XP drauf und beide NTFS formatiert. Bei Kubuntu ist eine schönes Tool dabei, das die Partitionen verkleinert, so das man auch noch Linux drauf bekommt. War gar kein Thema, ging super... Installation auch kein Problem und zum Schluss stand dann der KDE-Desktop bereit - aber eben nur mit 60 Hz bei einer Auflösung von 1600x1200 und nur auf einem Bildschirm. Nun hab ich aber 2 x 21" CRT-Monitore mit 1600x1200 bei 85 Hz gefahren unter Windows und das wollt ich unter Linux auch wieder.
Ich war ja schon leicht am Verzweifeln was die Grafikkartenkonfiguration anbelangt. Ich hab auf meinem "großen" PC ja nicht mehr die aktuellste Konfiguration, also ging ich davon aus, das das inzwischen soweit von Linux unterstützt werden sollte. Pentium IV Hyperthreading mit 3 GHz, ATI Radeon 9700 Pro (R300), Onboard-Sound nach dem AC97 Standard, 100 MBit Ethernet D-Link DFE-530TX Rev. C Netwerkkarte (VIA Rhine III Chip), Epson Scanner per SCSI (Adaptec AHA-7850) angeschlossen und einen IDE-Raidcontroller mit Promise PDC20276 Chip.
Lief auch alles wunderbar (sogar der Scanner ging auf Anhieb), aber die Grafikkarte weigerte sich standhaft meine zwei Monitore mit jeweils 1600x1200 @ 85 Hz und Xinerama (damit der Desktop auf beide Bildschirme ausgedehnt wird) anzusprechen. 60 Hz war kein Problem, aber davon bekommt man ja Augenkrebs ;-)
Zunächst hatte ich es eine ganze Weile mit den Closedsource Treibern von ATI selbst versucht. Ich habe eigentlich was gegen Treiber, die nicht quelloffen sind, da sie nur Probleme machen, aber ich versprach mir damit etwas mehr Performance vorallem im 3D Bereich. Wer sich an diesen Treibern von ATI bzw. von Nvidia versuchen möchte, dem lege ich ganz stark das Programm/Skript envy ans Herz. Bis man alle Teile beieinander hat, bis diese Closedsource Treiber überhaupt mal laufen, vergeht einige Zeit. Das envy Skript erledigt alles in einem Durchgang völlig selbstständig. Das hab ich auch gemacht und lief wunderbar inkl. 3D Beschleunigung. Aber mehr wie 60 Hz war nicht drin. Selbst alle Modelines habe ich entfernt und mit einem Tool names gtf eine Modline selbst berechnet. Mit gtf gibt man an, welche Auflösung man bei welcher Bildschirmwiederholfrequez fahren möchte z.B:
user@spock:/$ gtf 1600 1200 85
# 1600x1200 @ 85.00 Hz (GTF) hsync: 107.10 kHz; pclk: 234.76 MHz
Modeline "1600x1200_85.00" 234.76 1600 1720 1896 2192 1200 1201 1204 1260 -HSync +Vsync
In der Monitor Section in der xorg.conf stand dann auch nur noch diese Zeile drin. Der ATI Treiber meinte darauf hin, er müsse sich jetzt in die ewigen Jagdgründe verabschieden und ist abgestürzt, wie aus der /var/log/Xorg.0.log hervorging. Das Übliche: Mit 60 Hz lief er dann wieder.
Irgendwann war aber Schluss mit lustig. Ich bin dann wieder den Opensource Weg beschritten und bin über die Manpage des radeon Treibers gestolpert. Dort gab es eine Option names MergedFB was soviel bedeutet wie "zusammengesetzter Framebuffer". Das ist dann sowas Ähnliches wie Xinerama, aber eigentlich besser, da der Treiber 2D und z.T. auch 3D Operationen auf den kompletten Framebuffer anwenden kann und nicht nur auf den Framebuffer, der den ersten Monitor speist. Nun... Damit lief's dann schlussendlich. Hier ein Ausschnitt aus meiner xorg.conf (die vollständige kann hier downgeloaded werden: xorg.conf):
Section "Device"
Identifier "RADEON1"
Driver "radeon"
BusID "PCI:1:0:0"
#
# Accelration
#
Option "AGPMode" "2"
Option "EnablePageFlip" "on"
Option "RenderAccel" "on"
#
# Merged Framebuffer
#
Option "MergedFB" "true"
#
# Options for second monitor
#
Option "CRT2Position" "LeftOf"
Option "CRT2Hsync" "30-107"
Option "CRT2VRefresh" "50-85"
Option "MetaModes" "1600x1200-1600x1200"
Screen 0
EndSection
Section "Monitor"
Identifier "Eizo T965"
Option "DPMS"
HorizSync 30-107
VertRefresh 50-85
Modeline "1600x1200" 234.76 1600 1720 1896 2192 1200 1201 1204 1260 -HSync +Vsync
EndSection
Section "Screen"
Identifier "Screen0"
Device "RADEON1"
Monitor "Eizo T965"
DefaultDepth 24
SubSection "Display"
Depth 24
Modes "1600x1200"
EndSubSection
EndSection
Section "ServerLayout"
Identifier "Default Layout"
Screen 0 "Screen0" 0 0
InputDevice "Generic Keyboard"
InputDevice "Configured Mouse"
EndSection
Mehr Infos zu diesem radeon Treiber gibt's hier:
Additional options for the radeon driver
Manpage: radeon - ATI RADEON video driver
Performance optimierende Optionen sind AGPMode, EnablePageFlip und RenderAccel. Bei AGPMode muss man mal im Handbuch des Mainboards und der Grafikkarte guggen, welchen Modus man fahren kann. Default ist AGPx1. MergedFB gibt an, das wir den besagten zusammengesetzten Framebuffer Modus haben möchten. CRT2Postition, CRT2Hsync und CRT2VRefresh besagen, wo der zweite Monitor platziert ist (LeftOf, also links von dem Ersten in diesem Fall), mit welcher horizontalen Frequenz der Monitor zu betreiben ist (in diesem Fall 30-107 KHz) und mit welcher Bildwiederholfrequenz der Monitor ansprechbar ist (hier von 50-85 Hz). Im Gegensatz zu X.org Xinerama braucht man beim MergedFB keine zweite Device, Monitor und Screen Section in der xorg.conf.
Welche Optionen der radeon (Paket: xserver-xorg-video-ati) Treiber noch bereithält, sieht man in der Manpage: man radeon.
Unterm Strich könnte man jetzt wieder mit der heise'schen Forumsallzweckwaffe kommen: Mit Windows wär das nicht passiert! ;-) Ja, stimmt auch. Linux und Treiber im Allgemeinen sind eine echte Krankheit, wenn man auf Closedsource Treiber angewiesen ist. Dafür können aber die Linux-Entwickler schlicht und ergreifend nichts. Mir ist es ein absolutes Rätsel, warum die Hardwarefirmen den Opensource-Entwicklern nicht mehr unter die Arme greifen oder wenigstens die genauen Spezifikationen veröffentlichen. Die wollen doch ihre Hardware und nicht die Treiber verkaufen oder hab ich da jetzt was falsch verstanden? Naja, z.T. funktioniert das ja am Beispiel Intel recht gut. Ich hoffe, das das noch besser wird, zumal jetzt auch noch die Opensource-Entwickler angeboten haben, Treiber für Linux KOSTENLOS(!) für die Firmen zu entwickeln. Ich befürchte nur, das das aber wohl auch nicht viel helfen wird. Ich glaube, die Treiber oder die Hardware ist einfach zu schlecht und die Firmen würden sich ihren Ruf nur noch mehr ruinieren ;-)
Hier noch ein paar weitere Links zum Thema:
ATI Radeon 9800 mit 3D und Xinerama
HOWTO Dual Monitors
HOWTO ATI Drivers
ATI 3D-Beschleunigungs Guide
Technorati Tags: ati, crt, driver, dualhead, kubuntu, linux, radeon, ubuntu, xinerama
Posted at 04:31nachm. Feb. 04, 2007 by cetixx in Tipps | Kommentare [0]
FESTPLATTE STREIKT: Was tun?
Ich schätze, viele haben schon mal das unangenehme KLACK, KLACK, KLACK, ... Geräusch einer Festplatte vernommen, die kurz davor (oder schon danach) ist, den Geist aufzugeben. Nun bei einem meiner PCs war's dann mal wieder soweit. Rechner startet, will Windows booten und... KLACK, KLACK, KLACK, ... Ah, toll. Also erstmal eine Linux Live-CD suchen, die auch NTFS versteht. Die Installations-CD von Ubuntu 6.10 lag grad rum. Also rein damit, booten, Shell starten, mit fdisk -l guggen, ob noch Partitionen zu finden sind. Wunderbar... /dev/hda1 und /dev/hda5 waren genau die beiden, die ich gesucht habe. Mounten mit mount -t ntfs /dev/hda1 /mnt/disk1 und mount -t ntfs /dev/hda5 /mnt/disk2. Klappt auch :-) Also erstmal alles sichern per scp/rsync, d.h. alles auf meinen Server kopieren. Aha... Und bei 4 Dateien hat er dann Probleme beim Lesen. Alles die Log-Dateien vom Windows Log: default.log, software.log, system.log und userdiff.log. Die brauch eigentlich keiner. Also neue Platte bestellt bei www.hardwareversand.de (die sind echt sau schnell, relativ günstig und unproblematisch beim Austausch), reingeschraubt. Dann auf einem anderen PC eine BartPE Boot-CD (Bart's Preinstalled Environment (BartPE) bootable live windows CD/DVD) erstellt. Alles was BartPE haben will, ist eine Windows Orginal CD. Das Teil holt sich dann alle Dateien, die es braucht von CD und erstellt eine Art Windows Live-CD. BartPE also gestartet und A43 Filemanager geöffnet. Die beiden alten Laufwerke sind gelistet. Fein. Also auf der neuen Platte eine NTFS-Partition erstellen mit DiskPart. Und nun per xcopy alles rüberkopieren. Mit
xcopy /E /C /H /K /O /K c:\* d:\
(wobei c: die alte Platte ist und d: die neue, leere Platte) kopiert xcopy nun alle Dateien mit allen ACLs und Rechten auf die neue Platte, die die Dateien und Verzeichnisse vorher hatten. Was jetzt noch fehlt, ist die neue Boot-Partition zu aktivieren und einen MBR (Master Boot Record) einzurichten. Das geht auch mit BartPE, wenn man entsprechende Plugins installiert, aber ich hab das mit Linux und DriveImg gemacht. Jo... Und nun tut wieder alles :-))
Technorati Tags: livecd, harddisk, sector, festplatte, bartpe, corrupt, linux, windows, block, hdd, mbr
Posted at 12:00vorm. Jan. 31, 2007 by cetixx in Tipps | Kommentare [0]
OPENVPN: Ein kleines HowTo - Teil 1
Letztens ist mir mein WLAN-Router über den Jordan gegangen. Der hing direkt am Server und damit im gleichen Subnet und ich konnte mich mit meinem Laptop direkt über eine geschützte WPA2 Verbinding verbinden, um z.B. auf einen Samba-Share zuzugreifen. Nun... Der Router war aber nun hinef. Blieb noch der WLAN-Router der auch als DSL-Modem und Router fungiert. Der Server hängt aber "hinter" dem Router in einem eigenen Subnet und zusätzlicher Firewall. Eine direkte Verbindung war also nicht mehr möglich und einen neuen WLAN-Accesspoint wollt ich nicht kaufen. Bisher hab ich ja immer alles per SSH getunnelt, aber das macht bei 15 Tunnels irgenwann nicht mehr soviel Sinn ;-) Also endlich mal OpenVPN ausgepackt und ausprobiert. Was soll ich sagen: Funkt echt gut :-) Hier also eine kleine Anleitung eine einfache Client-Server-Verbindung mit OpenVPN aufzubauen. Es sei aber angemerkt, das diese Konfiguraion nur für Testzwecke interessant ist und keinesfalls als sicher angesehen werden kann, denn hier wird mit Static Key's sog. pre-shared Key's gearbeitet. Wer diesen Key hat, kann sich verbinden. Das Public/Private Keyverfahren wäre wesentlich sicherer, läßt mehr Verbindungen zu, ist aber aufwendiger zu installieren. Bei dieser Client-Server Konfiguration hier, kann auch nur ein Client arbieten. Das Public-/Private-Keyverfahren erläutere ich später mal in Teil 2.
Auf dem Server läuft Debian 3.0. Die Software ist hier schnell installiert:
apt-get install openvpn
Soweit nicht vorhanden, legen wir ein Verzeichnis /etc/openvpn an. Dann erzeugen wir uns einen pre-shared Key und legen ihn in dieses Verzeichnis:
openvpn --genkey --secret static.key
Den Key gilt es zu schützen. Unter Unix sollte den Schlüssel nur root lesen dürfen. Als Nächstes legen wir in dieses Verzeichnis eine Konfigurationsdatei server.conf die z.B. wie folgt aussieht:
dev tun
ifconfig 10.1.0.1 10.1.0.2
secret static.key
Bei dev (device) hat man die Möglichkeit zwischen tun und tap. tun packt IPv4 Pakete ein und tunnelt sie. tap tunnelt Ethernet 802.3 sprich baut eine Bridge auf. Das kann u.U. nicht so arg toll sein, da dann der ganze Broadcast-Traffic auch mitläuft und sich im Subnet verteilt. Windows ist ja bekannt dafür, recht gesprächig zu sein ;-) ifconfig konfiguriert das Netzwerkdevice. Die erste IP ist die lokale IP-Adresse (auf dem Debian-Server) und die zweite IP ist die Remote-IP-Adresse also z.B. das Tunnelende auf dem Laptop z.B. Entscheidend ist, das beide IP's/Netze noch nicht im Einsatz sind auf den beiden Systemen. Das secret ist einfach der Dateiname des pre-shared Key's. Für einen ersten Test starten wir OpenVPN jetzt einfach mal per Hand und machen den Prozess zum Daemon mit der Option --daemon:
openvpn --daemon --config /etc/openvpn/server.conf
Auf meinem Laptop hab ich die OpenVPN-Client Software installiert. Obwohl eigentlich nicht notwendig, sollte man den Windows-Rechner trotzdem durchstarten, wenn man die Software installiert hat. Den auf dem Server erzeugten pre-shared Key benötigt man nun auch auf dem Client. Den kopiert man am Besten per SCP, Diskette, USB-Stick auf den Client - keinesfalls über eine unsichere Leitung! Bei mir liegen die Konfiguration und der Key unter C:\Programs\openvpn\config. Konfigurationsdateien sollte man die Endung .ovpn verpassen. Die openvpn-client.ovpn sieht z.B. wie folgt aus:
remote IP_oder_DNS_des_Remotesystems_hier_her
dev tun
ifconfig 10.1.0.2 10.1.0.1
secret static.key
Bei remote geben wir an, wohin wir uns verbinden wollen also den Server, auf dem der OpenVPN Endpunkt läuft. Das kann ein DNS-Eintrag sein oder eine IP. Wichtig ist, das dort der UDP Port 1194 in beide Richtungen an der Firewall freigeschaltet ist! Bei ifconfig dreht man einfach die beiden IP's, die wir in der server.conf hatten, um. secret ist wieder unser Key, den wir vom Server kopiert haben. Im Übrigen: Auf Unix-Systemen sollten die die Konfigurationsdateien mit .conf enden unter Windows mit .ovpn.
Nun sollte man den Tunnel eigentlich starten können. Der Windows-Client hat in der Quick-Launchbar (Schnellstartleiste) ein Icon für uns installiert. Wenn man dort mit der rechten Maustaste draufklickt, kann man dort Connect auswählen und der Verbindungsaufbau beginnt. Kurz darauf sollte der Tunnel stehen.
Mit diesem kleinen Tunnel haben wir erst an der Oberfläche der Möglichkeiten von OpenVPN gekratzt. Probiert's selber mal aus. Es macht Spaß damit zu arbeiten. Die Tatsache, das nur ein UDP Port (TCP ist auch möglich) benutzt wird für die Kommunikation, macht ein ewiges Gefummle an der Firewall überflüssig.
Mein Dank für dieses feine Stück Software geht an alle OpenVPN-Entwickler!
Building and Implementing Virtual Private Networks with OpenVPN
Technorati Tags: openvpn, howto
Posted at 11:30nachm. Dez. 04, 2006 by cetixx in Tipps | Kommentare [0]
POSTGRESQL: Address already in use
Neulich eine PostgreSQL 8.1.5 auf einem alten SuSE SLES 8 System (ging einfach nicht anders...) aufgesetzt. Kompiliern & Co. funktionierte ganz gut, aber beim Starten der DB kam im Log folgende Meldung:
LOG: could not bind IPv4 socket: Address already in use
HINT: Is another postmaster already running on port 5432? If not, wait a few seconds and retry.
Ah ja... Sehr schön. Was das jetzt? Weder netstat -tlpn, netstat -na noch lsof deuteten darauf hin, das noch eine Postmaster-Instanz lief noch das ein anderes Programm auf dem Port hängt. Des Rätsels Lösung fand ich dann im Post Bogus bind() warnings. Wieder mal Ärger mit IPv6. Wer IPv6 nicht braucht, sollte es gleich ganz abschalten. Immer wieder gibt's mit dem Dreck Probleme. Nun... Problem im eigentlichen Sinne war es gar keins. Mit netstat -tlpn sah ich zwar, das in der IPv6 Sektion auf Port 5432 der Postmaster gebunden war, aber nicht in der IPv4 Sektion. Der Witz ist, das das aber trotzdem der Fall ist. Wenn man nämlich einfach mal telnet localhost 5432 ausprobiert (vorausgesetzt die PostgreSQL hört darauf), dann meldet sich dort tatsächlich die Postgres. Die Meldung ist also irreführend. Der entscheidende Hinweis ist eigentlich der:
Note: This might fail on some OS's, like Linux older than 2.4.21-pre3, that don't have the IPV6_V6ONLY socket option, and map ipv4 addresses to ipv6. It will show ::ffff:ipv4 for all ipv4 connections.
Das führt dann z.B. auch dazu, das man für IPv4-Adressen in der pg_hba.conf IPv6-Einträge machen muss z.B.:
host all all ::ffff:192.168.119.1/128 trust
Posted at 08:00nachm. Nov. 14, 2006 by cetixx in Tipps | Kommentare [0]
MSN LIVE: Praktisch -> LinkFromDomain
Wenn man wissen will, wo eine Seite hinverlinkt, kann man das jetzt bei MSN Live Search machen z.B.: LinkFromDomain:tauceti.net . Nicht perfekt, aber schön ;-)
Posted at 10:00nachm. Okt. 19, 2006 by cetixx in Tipps | Kommentare [0]