Mittwoch Mai 14, 2008

PostgreSQL: Dead rows oder Nonremovable rows

Eines der leider designtechnisch weniger schönen Dinge bei der Postgres, sind die dead rows die zunächst übrig bleiben, wenn man SQL Update-Statements auf eine Tabelle los lässt. Bei so einem Update biegt die Postgres mehr oder weniger nur einen Pointer um  auf die neuen Daten und lässt die alten erstmal stehen. Normalerweise kümmert sich der Autovacuum um diese Zeilen und räumt sie von Zeit zu Zeit auf. Allerdings funktioniert das nicht, wenn man eine Transaktion am Laufen hat, die über Stunden oder gar Tage hinweg läuft und diese Tabelle darin beteiligt ist. Wenn man einen vacuum verbose oder vacuum full verbose auf diese Tabelle los lässt, dann sieht das z.B. so aus:

INFO:  "events": found 629702 removable, 2764070 nonremovable row versions in 440726 pages
DETAIL:  2734213 dead row versions cannot be removed yet.
        Nonremovable row versions range from 237 to 1160 bytes long.
        There were 1797800 unused item pointers.
        Total free space (including removable row versions) is 1808978584 bytes.
        175919 pages are or will become empty, including 0 at the end of the table.
        316400 pages containing 1792334416 free bytes are potential move destinations.
        CPU 97.17s/19.74u sec elapsed 269.83 sec.

Gar nicht gut. Wir schleppen da ein Haufen Müll mit uns rum und die Queries werden immer langsamer. Es gilt also diese Transkation zu finden. Eventl. kann man in der Prozessliste auf dem DB Rechner schon mal Prozesse mit idle in transaction ausmachen, die schon ewig laufen. Das sind potenzielle Kandidaten. Genauer sieht man es aber mit folgender Query:

SELECT * FROM pg_prepared_xacts;

Man sollte sich am Besten ein Skript schreiben, das diese Tabelle/View regelmäßig überwacht und meldet, wenn eine Query zu lange da drin hängt. Auch wenn man einen vacuum verbose einmal täglich über alle Tabellen laufen lässt (soweit das die DB-Größe und die Performance des Rechners hergeben), kann man den Output dieses Befehls parsen und darauf entsprechend reagieren.

Sonntag März 23, 2008

Moviegrabber fuer Linux

Wenn man aus einem Video oder Film, in welchem Format auch immer das vorliegen mag, eine Bilderstrecke oder Kollage erzeugen möchte, dann kann man unter Windows Image Grabber II oder unter Linux Videocut verwenden. Beides sind GUI-Tools. Ich wollte aber was für die Kommandozeile. Deshalb hab ich ein kleines Skript namens Moviegrabber gebastelt, das jetzt in einer ersten Version vorliegt, die man schon mal verwenden kann, aber noch nicht sehr umfangreich ist.

Moviegrabber ist in Python geschrieben und benötigt den mplayer, midentifiy (ist normalerweise im mplayer-Paket dabei) und ImageMagick. Vielleicht läuft es auch unter Windows, habs aber nicht probiert.

Aktuell ist das Skript nur im Sourcecode dokumentiert. Die Optionen dürften aber relativ klar sein. Ein einfacher Aufruf wäre z.B.:

moviegrabber.py -f moviename -o ausgabeverzheichnis

Im Ausgabeverzeichnis liegt dann eine Datei names collage.jpg. Momentan erzeugt das Skript nur eine Kollage. Über die Zeit hinweg, soll es dann mehrere weitere Ausgabeoptionen geben.

Das Wichtigste, was man vermutlich anpassen muss, ist gleich im oberen Teil des Skriptes. Dort sind die Pfade von mplayer, midentify (beide mplayer Paket), montage und convert (beide ImageMagick-Paket) anzugeben. Dann sollte das Skript schon tun.

Hier die Versionen zum Downloaden:

0.1 - Erste Release

Dienstag Nov. 20, 2007

ORACLE: Kaputte Indexpartitionen finden

Yust a reminder: Manchmal passiert es, das ein Index invalid wird. Das kann man in der DBA_INDEXES View in der Spalte STATUS sehen. Wenn allerdings eine Partition eines Indexes kaputt ist, dann sieht man das dort nicht gleich auf Anhieb, obwohl man z.B. einen Fehler wie den hier bekommt:

Error with index "X_TIMESTAMP" in database "TESTDB": Index Invalid 

Um eine kaputte Indexpartition zu finden, verwendet man die View DBA_IND_PARTITION: 

SELECT index_name, partition_name, status FROM dba_ind_partitions ORDER BY index_name, partition_name;

Freitag Okt. 26, 2007

Partitionen mit mehr als 2 TerraByte unter Linux

Bisher bin ich ja nie über Partitionen gekommen, die größer als 2 TB (TerraByte) waren und hatte deshalb auch nie Problem. Kürzlich aber mußte eine 12 TB große Partition her. Und schon ging der Blödsinn los. Der Kernel kann damit umgehen, der Controller (im konkreten Fall 3Ware 9650SE-16M [und unter Linux kann ich 3Ware nur empfehlen, da die Treiber im Kernel sind) und das XFS-Filesystem. Aber Tools wie fdisk können es z.B. nicht und wenn der falsche Partitionstabellentyp eingestellt ist, dann geht's auch nicht...

Von vorne... Sicherheitshalber sollte man beim Contoller die neueste Firmware einspielen. Damit wir dann überhaupt so grosse Partionen erstellen können, brauchen wir zwei physikalische Festplatten oder Raid's. D.h. für Partitionen wie / (root) oder /boot legen wir beispielsweise ein Raid 1 (Spiegel) auf /dev/sda an, wobei jede Partition nicht größer als 2 TB sein darf! Wenn wir dort nämlich eine Partitionstabelle anlegen mit z.B. fdisk, dann ist der Partitionstabellentyp msdos (wenn man es nicht ändert) und der kann nur mit Partition bis 2 TB umgehen. Ausserdem haben die Bootloader Grub und Lilo auch so ihre lieben Probleme mit größeren Partitionen. Die eigentliche Partition, die größer als 2 TB werden soll, legen wir beispielsweise nach /dev/sdb. Da dies wieder ein eigenes Device ist, können wir hierfür eine andere Partitionstabelle erstellen, die wir unbedingt brauchen.

Nochmal kurz zusammen gefaßt:

* Grub und Lilo verstehen nur Partitionstabellen (Labels) vom Typ msdos. Man kann also nicht von Partionstabellentypen mit gpt Label booten
* msdos Partitionstabellen können mit keinen Paritionen umgehen, die größer 2 TB sind.
* fdisk kann nicht mit Partitionen umgehen, die größer als 2 TB sind
* LVM hat eventl. auch Probleme mit logischen Volumes die größer als 2 TB sind (nicht probiert)
* Die Linux Installationsprogramme können nicht mit Partionen umgehen, die nicht vom Type msdos sind. gpt fällt also hierfür aus.

Zuerst sollte man sich mal das Tool parted installieren. Damit erstellen wir eine Partitionstabelle. Schauen wir uns mit parted mal an, welchen Typ Partionstabelle wir haben auf /dev/sda (hier ist schon alles entspechend angelegt mit fdisk):

host # parted /dev/sda print
Model: AMCC 9650SE-16M DISK (scsi)
Disk /dev/sda: 1000GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
...

Partition Table: msdos für /dev/sda. Das ist also ok so für sda. /dev/sdb soll aber später einen anderen Typ bekommen nämlich gpt. Hier bitte Vorsicht! parted schreibt Änderungen sofort weg! Wenn man nicht aufpasst, überschreibt man die Daten auf der falschen Platte!  Legen wir also  interaktiv eine Partionstabelle für  /dev/sdb an:

host # parted /dev/sdb
(parted) mklabel gpt
(parted) quit

Sehen wir uns an, was parted gemacht hat:

host # parted /dev/sdb print
Model: AMCC 9650SE-16M DISK (scsi)
Disk /dev/sdb: 12.0TB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start  End     Size    File system  Flags

Partition Table: gpt für /dev/sdb. Passt also. Anstatt gpt könnte hier später auch loop stehen. Jetzt könnte man natürlich auf die Idee kommen, die eigentliche Partion auf /dev/sdb anzulegen. Das hat bei mir nicht funktioniert. Partition anlegen (/dev/sdb1), Filesystem erstellen und mounten ging zwar, aber nach einem Reboot war die Partition wieder blos 2 TB groß! Lösung war, das XFS-Filesystem direkt auf /dev/sdb zu erstellen (also NICHT /dev/sdb1!):

mkfs.xfs /dev/sdb

Das ist auch rebootfest - zumindest bei mir. Vielleicht hilft das ja jemanden weiter...


Technorati Tags: , , , , , ,

Dienstag Okt. 09, 2007

Schneller Prozessor, viel Speicher - langsame Festplatte

Ist irgendwie schon toll. Da hat man einen eigentlich aktuellen Prozessor, hat beim Board auch nicht gespart, 4 GByte Speicher, eine nette Grafikkarte und eine entsprechend schnelle Samsung SATA-II Festplatte - könnte man meinen... Kaum geht's auf der Festplatte ab, weil man was Größeres abspeichert, schlafen einem die Füsse ein und das DVD-Video ruckelt eh schon immer. Schon toll...

Nun... Nachdem ich das bisher nie angegangen bin, hab ich mich mal auf Spurensuche gemacht. Also den Kernel bzw. SATA-Treiber als Ursache konnte man eigentlich ausschließen. Neuer als 2.6.22 geht fast nicht. Nachdem mein relativ neuer Samsung DVD-Brenner DVD's immer schon ruckelig abgespielt hat, war mir das irgendwann zu bunt und ich packte meinen alten Dawicontrol DC 150 wieder aus und schloss den Brenner da an. Und siehe da: Nix ruckelt!

Es musste also eigentlich schon irgendwie an den IDE/SATA-Komponenten auf dem Mainboard liegen. Nun, also doch mal einen Blick ins BIOS riskieren. Ich hatte ja doch mal irgendwo gelesen, das neuere Mainboard mit angezogener Handbremse laufen. Dort hab ich dann auch tatsächlich was gefunden. U.a. findet man dort verschiedene IDE-Modi: IDE, RAID und AHCI. Eingestellt war IDE. RAID hab ich nicht vor zu betreiben. AHCI war das Gebot der Stunde. Das ist eine standardisierte Zugriffsmethode auf neuere Festplatten, die u.a. von Intel auf den Weg gebracht worden ist. Das wird wohl früher oder später auch mal die Standardeinstellung in den Boards werden, aber die Boardhersteller wollen natürlich möglichst wenig Ärger und Support haben und stellen so meist auf den kleinsten, gemeinsamen Nenner - IDE. AHCI hat allerdings ein paar ganz erhebliche Vorteile z.B. unterstützt es NCQ der neueren SATA-Platten und das kann sich durchaus bemerkbar machen in der Festplattenperformance.

Hab ich also auf AHCI umgestellt. Normalerweise ist es gesünder, wenn man das tut, bevor man das Betriebssystem umstellt. Aber meiner einer ist ja experimentierfreudig. Gentoo lief wunderbar hoch und siehe da, da kamen dann auch plötzlich Meldungen vom SATA-Treiber, die schon mal Anlass zur Freude boten wie z.B. die oben beschriebene NCQ-Fähigkeit.

Die Umstellung auf dem AHCI-Modus hat sich jedenfalls rentiert. Jetzt läuft das System wie geschmiert :-) Also wenn euch die Plattenperformance auf die Nerven geht, guggt auch mal ins BIOS. Und wer noch etwas mehr Gas geben möchte, der kann sich noch an die I/O-Scheduler wagen, das ich hier schon mal beschrieben hatte...


Technorati Tags: , , , , , , , , , ,

Freitag Sep. 14, 2007

Dateiduplikate finden: fdupes

Man kennt das Problem: Jede Menge Dateien auf der Platte und jede Menge davon unnütz, weil doppelt. Um doppelte Dateien zuverlässig zu finden, gibt es fdupes. Unter Gentoo oder Ubuntu installiert sich das recht einfach:

Gentoo: emerge -av fdupes
Ubuntu: apt-get install fdupes

fdupes vergleicht Dateien anhand von MD5 Prüfsummen und Dateigrößen. Sucht man z.B. doppelte Dateien in einem Verzeichnis inkl. Unterordner, gibt man einfach

fdupes -r /zu/durchsuchender/pfad

ein. Doppelte Dateien werden dann paarweise angezeigt.

Technorati Tags: , , , , ,

Montag Sep. 10, 2007

LIRC, VDR, Gentoo und Streamzap

Lange hat's gedauert, aber letztendlich habe ich jetzt endlich eine Fernbedienung für meinen VDR gefunden, die nicht über den seriellen Anschluss angeschlossen wird. Die neuen Rechner haben sowas ja kaum noch und mit einem USB/Serial-Adapter habe ich es schon probiert. Das klappte aber irgendwie nicht, obwohl der Treiber im Kernel war.

Jetzt habe ich endlich eine Fernbedienung, die über USB angeschlossen wird und für die es einen LIRC-Treiber gibt :-) Das Teil heißt Streamzap. Zu kaufen gibt's das Ganze z.B. bei Centarea. Heißt dort Sceneo Master Remote. Die Installation unter Gentoo ist relativ einfach.

Zuerst müssen wir in die /etc/make.conf folgende zwei Einträge hinzufügen:

USE="lirc streamzap"
LIRC_DEVICES="streamzap"

Das sollte man eigentlich schon gemacht haben, damit VDR mit LIRC-Support kompiliert ist. Wenn nicht, VDR am besten auch noch mal emerge'n. Dann installieren wir LIRC und starten den Treiber: 

emerge -av lirc
modprobe lirc_streamzap

Dann brauchen wir eine remote.conf und eine lircd.conf. Man findet diese Konfigurationsdateien auch in diesem Thread in vdr-portal.de. Die remote.conf kopieren wir nach /etc/vdr/ und die lircd.conf nach /etc/. Anschließend lircd starten (/etc/conf.d/lircd auch prüfen):

/etc/init.d/lircd start

Nun kann man mit dem Kommando irw testen, ob alles funktioniert. Einfach etwas auf der Fernbedienung rumdrücken und dann sollten auf der Kommandozeile entsprechende Meldungen kommen. Wenn das tut, kann man mit CTRL+C abbrechen. Damit der Treiber beim Hochfahren des Rechners wieder gestartet wird macht man Folgendes:

echo lirc_streamzap >> /etc/modules.autoload.d/kernel-2.6

Nun passt man noch /etc/conf.d/vdr an. Dort stellt man dann

IR_CTRL="lirc"

ein. Zu guter Letzt fügen wir lircd noch dem default Runlevel hinzu, damit das automatisch gestartet wird:

rc-update add lircd default

Nun noch VDR durchstarten und dann tut's hoffentlich ;-) 

Interessante Links:
Gentoo Wiki: HOWTO LIRC
Using the Streamzap USB remote with vdr on Fedora Core 5
Gentoo Wiki: HOWTO USB LIRC streamZap
vdr-portal.de: lircd.conf und remote.conf gesucht

Technorati Tags: , , , , , ,

Dienstag Aug. 21, 2007

Tor, Privoxy, Firefox, Gentoo und anonym surfen

Naja... Anonym surfen ist ja etwas Augenwischerei im Internet. Google, CIA,  NSA, BND, Innenministerium und das Finanzamt sitzen ja eh schon überall drin - ok, kleiner Scherz am Rande ;-) Ich hab nix zu verbergen! Genau - solange, bis mal jemand bei der Schufa die Datensätze durcheinander bringt. Dann wird aus dem unschuldigen Bürger plötzlich der Kreditpreller. Ok, das wird natürlich nie passieren, auch klar oder? Schöne Aussichten. Ein bißchen Sarkamus muss ja auch mal sein ;-) Aber zurück zum Thema... Es gibt Seiten, da ist es wohl besser, wenn man sich etwas unauffälliger verhält, welche Gründe man auch immer haben mag dafür. Dafür ist das Gespann Tor, Privoxy und Firefox ideal.

Nun... Unter Gentoo ist das auch relativ schnell installiert. Zuerstmal die Software:

emerge -av tor
emerge -av privoxy

Firefox wird ja wohl jeder schon irgendwo rumliegen haben ;-) Was ist nun Tor eigentlich? Tor ist ein ganzes Netzwerk von Rechnern. Damit kann man ganz gut seine eigene IP-Adresse gegenüber der Seite verstecken, auf die man zugreifen möchte. Dazu wird der ganze Verkehr verschlüsselt (schon vom Client weg) durch das Tor-Netzwerk geschickt und das über mehrere Tor-Server hinweg. Der Weg ändert sich von Zeit zu Zeit, damit einem Angreifer es nicht zu leicht gemacht wird, den Weg zurück zu verfolgen. Was Tor allerdings nicht verbergen kann, ist alles, was der Browser mitschickt also z.B. Cookies oder Informationen, die über JavaScript ausgelesen werden. Dafür gibt's den Proxy Privoxy. Das Teil ist so mächtig, das ich mir eine genaue Beschreibung spare ;-) Wir wollen momentan nur erreichen, das der Browser möglichst wenig Informationen über uns rausrückt und das tut Privoxy schon sehr gut in der Defaulteinstellungen.

Eine Beispielkonfiguration von Tor liegt in /etc/tor. Dort kopieren wir die Datei torrc.sample nach torrc. Dort drin muss man eigentlich nicht viel umstellen. Die Defaulteinstellungen sind eigentlich ok. Tor startet man dann einfach mit

/etc/init.d/tor start

Damit der Service nach dem Rechner-Reboot wieder startet, führen wir noch

rc-update add tor default

aus. Dann wechseln wir zur Konfiguration von Privoxy nach /etc/privoxy. Dort müssen wir Privoxy in der Datei config mitteilen, das alle Anfragen über das Tor-Netzwerk laufen sollen. Also fügen wir am Besten (ist aber eigentlich egal) unter forward-socks4 and forward-socks4a Folgendes hinzu (wenn man die torrc nicht verändert hat diesbzgl.):

forward-socks4a / localhost:9050 .

Privoxy hat einen sehr großen Regelsatz. Da steht z.B. drin, das Anfragen an bestimmte Ad-Server (da wo die Werbung herkommt) rausgefiltert werden, Kommandos seitens des Servers zum Setzen eines Cookies entfernt werden, usw. Die Regeln und Aktionen findet man in den Dateien, die mit action oder filter enden. Die Dateien sollte man sich wirklich einmal genauer ansehen, aber Änderungen nimmt man nur in der user.action vor. Da diese Datei als Letztes eingelesen wird, überschreibt diese Datei Regeln, die in den davor genannten Dateien definiert wurden. Möchte man z.B. von bestimmten Seiten doch Cookies zulassen, fügt man diese Seiten einfach unter dem Abschnitt { allow-all-cookies } ein. Die Dateien sind sehr gut dokumentiert und es sind viele Beispiele drin. Einfach mal anschauen. Passt hier dann alles, starten wir Privoxy:

/etc/init.d/privoxy start

Auch hier wollen wir, das Privoxy beim Starten des Rechners ebenfalls hochkommt:

rc-update add privoxy default

Wenn man nun im Firefox unter den Verbindungseinstellungen angibt, das man über den Proxy localhost:8118 surfen möchte, schickt Firefox alle Anfragen an Privoxy, welcher dort alle sicherheitsrelevanten Angaben entfernt (wir wollen ja möglichst unerkannt bleiben) und leitet es an den Tor-Daemon weiter, welcher die Daten dann verschlüsselt und sie an's Tor-Netzwerk durchreicht. Man darf sich vom Tornetzwerk nicht allzu viel Performance erwarten. Das Ganze ist relativ langsam, aber man kann damit leben.

Wir können nun aber in den Firefox ein Skript laden, das genau definiert, welche Seiten wir über das Tor-Netzwerk besuchen wollen und welche Seiten direkt angefragt werden sollen. Das Ganze ist JavaScript sehr ähnlich und sieht z.B. so aus:

function FindProxyForURL(url, host) {
        if (isInNet(host, "193.222.168.0.", "255.255.255.0") ||
            dnsDomainIs(host, ".boeseseite.de") ||
                return "PROXY localhost:8118";
        } else {
                return "DIRECT";
        }
}

Hier legen wir also fest, das Anfragen an das komplette Class-C Netz 193.222.168.0/24 und an boeseseite.de über Privoxy und damit über das Tor-Netzwerk laufen und der Rest ganz normal direkt angefragt wird. Man kann damit noch viel mehr machen. Genaueres gibt es hier nachzulesen: Navigator Proxy Auto-Config File Format

Diese Datei muss beim Firefox dann nur noch in den Einstellungen/Erweitert/Netzwerk angegeben werden z.B. file:///home/user/proxy/proxy.pac und schon werden die Einstellungen aktiv. In diesem Sinne...

Technorati Tags: , , , , ,

Donnerstag Aug. 16, 2007

Ein schönerer Firefox

Nach dem mein KDE nun ja schon eine Weile mit CompizFusion läuft, was einfach verdammt cool ist, hab ich dann letztendlich auch den Window Manager Emerald installiert, was dann noch cooler ist ;-) Dem hab ich dann das Theme Darkly Glassed  verpasst. Jetzt hatte ich eine wunderschöne dunkle Oberfläche, nur der komische Firefox war immer noch helle :-( Aber kein Thema! Jetzt gibt es endlich ein dunkles Theme für den Firefox, das wirklich schön ist und verdammt gut aussieht: NASA Night Launch 

Ein kleines Goodie für Linux-User mit KDE gibt's dann noch hier: Firefox Form Widgets Das gibt dann noch schöne Buttons im Firefox :-)

Technorati Tags: , , , , , , ,

Mittwoch Aug. 15, 2007

Thunderbird: Extensions

Es gibt ja nicht viele Thunderbird-Addons, die wirklich gut sind, aber ein paar davon sind sehr praktisch und haben sich bei mir bewährt:

Folderpane Tools: Was mich schon seit jeher gestört hat ist, das man die Ordner/Accounts links nicht nach seinem Geschmack sortieren konnte. Wenn man mehrere Konten verwaltet, dann stört das. Folderpane kann genau das.

SmtpSelect: Einfach über einen Button auswählen, welchen SMTP-Server zum Versenden einer Nachricht man gerne verwenden möchte.

XNote: XNote ermöglicht, zu jeder Mail eine Notiz abzuspeichern. Das ist recht schön gelöst und Nachrichten mit Notzizen sind dann auch gelb (default) hinterlegt.

Allow HTML Temp: Die wichtigste Erweiterung überhaupt. Ich hasse HTML-Mails. Diese Erweiterung macht grundsätzlich mal Text draus und wenn's dann doch nicht anders geht, kann man den Button "Show HTML" bemühen, wenn man den Button entsprechend in die Buttonleiste eingefügt hat.

Das war's eigentlich schon. Mehr braucht der Thunderbirder eigentlich nicht ;-)

Technorati Tags: , , , , ,

MPLAYER: Bilderstrecke von einem Video extrahieren

Mit der Zeit sammelt sich ja doch u.U. eine größere Sammlung von Videos an und alle liegen in div. Formaten vor. Mein Ziel war es nun, eine gewisse Anzahl von Frames aus jedem Video zu extrahieren und eine Kollage zu erstellen, die ich dann in eine HTML-Seite einbinden kann. Damit kann ich dann eine Preview aller Videos, die irgendwo auf der Platte so rumliegen, im Browser anguggen. Unter Windows gibt es dafür ein sehr schönes Programm, das sich Image Grabber II nennt. Da die Homepage von Image Grabber II eigentlich nie erreichbar ist, sucht ihr am Besten mal bei Google, wo man es downloaden kann. Das Programm ist Freeware. Man gibt z.B. an, das man 30 Bilder von dem Video haben möchte und Image Grabber II erstellt dann 30 Thumbnails, die es dann wiederum zu einer Übersichtsgrafik zusammen fügt. Es unterstützt alle möglichen Videoformate. Nun... Sowas wollt ich auch unter Linux haben. Ich habe leider nichts Entsprechendes gefunden, aber wie so oft - mplayer to the rescue z.B.:

mplayer -nosound -sstep 10 -vo jpeg:outdir=/tmp/test test.wmv

mplayer spielt die Videodatei in diesem Fall ohne Sound ab (-nosound) und gibt ein Bild im JPEG-Format alle 10 Sek. (-sstep 10) in das Verzeichnis /tmp/test aus. Wenn man also eine Videodatei hat, die 60 Sek. lang ist, erhält man 10 Bilder im angegebenen Verzeichnis. Das ist schon mal ganz nett, aber wie erstellt man jetzt aus diesen Einzelbildern eine Kollage? Nun, da muss ich mal guggen, wie ich das am Besten anstelle, aber derweilen habe ich mir Picasa von Google für Linux runtergeladen. Das läuft unter Wine. Damit lassen sich schöne Kollagen erstellen. Falls jemand ein Programm weiss, das das nativ unter Linux macht: Immer her damit :-)

Noch eine Anmerkungen zu den Videoformaten unter x86_64 (AMD64/EMT64): Viele Codes liegen nur als 32Bit vor. Mein Gentoo ist aber 64bit. Viele Videos laufen problemlos, aber WMV z.B. macht schon etwas Probleme. Aber die Gentoo-Entwickler haben einen ziemlich coolen Workaround gebastelt, der hier beschrieben ist: HowTo AMD64  -Mplayer and 32bit codecs

Im Prinzip ist die Sache relativ einfach. In die /etc/portage/package.keywords trägt man folgende Zeilen ein:

media-video/mplayer-bin
media-libs/win32codecs
app-emulation/emul-linux-x86-medialibs
app-emulation/emul-linux-x86-soundlibs
app-emulation/emul-linux-x86-baselibs

und macht dann einen

emerge -av mplayer-bin

Das installiert dann Einiges nach u.a. auch die Win32 Codecs. Anschließend ruft man dann nicht mplayer auf sondern

mplayer-bin -nosound -sstep 10 -vo jpeg:outdir=/tmp/test test.wmv

Und schon sollt's funktionieren... :-) In diesem Sinne: Volle Kanne!

Update 2007-08-16: Ich hab ein Tool gefunden, das unter Linux ähnlich arbeitet wie Imagegrabber II unter Windows. Es nennt sich VideoCut. Tolles Programm! Frisst zwar noch nicht alle Formate, aber ein ffmpeg-Backend ist in Arbeit. Aber eigentlich wollte ich ja was für die Kommandozeile ;-)

Technorati Tags: , , , , , , , , , , , ,

Donnerstag Aug. 02, 2007

POSTGRESQL: Wie finde ich raus, wieviel Speicher eine DB auf der Platte verbraucht

Tino Schwarze hat dazu eine nettes, kleines Skipt auf der Postgres-Mailingliste gepostet, welches relativ selbsterklärend ist:

#!/bin/bash
#
# Shell script to determine disk usage of PostgreSQL databases.
# by Tino Schwarze/Community4you
#

PGDATADIR=/data/db1
PGPORT=5432
PSQLBIN=/opt/pgsql/8.2.4/bin/psql
PGOPTS="-U postgres"

echo "PostgreSQL database sizes"
$PSQLBIN $PGOPTS -p $PGPORT -t -F " " -A template1 -c 'select oid,datname from pg_database' | \
        while read oid dbname ; do
                [ "$dbname" != "template1" ] || continue
                [ "$dbname" != "template0" ] || continue
                size="`du -sh $PGDATADIR/base/$oid | cut -f 1`"
                while [ ${#dbname} -lt 16 ] ; do dbname="$dbname " ; done
                printf "$dbname\t%6s\n" $size
        done

Have fun!

Technorati Tags:

POSTGRESQL: Database must vacuumed within XXXXXXX transactions

Puh... Da guggste erstmal etwas ungläubig aus der Wäsche, wenn dir Postgres folgende Meldung um die Ohren legt:

2007-07-31 19:27:33 CEST   WARNING:  database "userbase" must be vacuumed within 999831 transactions
2007-07-31 19:27:33 CEST   HINT:  To avoid a database shutdown, execute a full-database VACUUM in "userbase".
2007-07-31 19:27:33 CEST   WARNING:  database "userbase" must be vacuumed within 999830 transactions
...
2007-07-31 19:27:33 CEST   WARNING:  database "userbase" must be vacuumed within 999809 transactions
2007-07-31 19:27:33 CEST   HINT:  To avoid a database shutdown, execute a full-database VACUUM in "userbase".
2007-07-31 19:27:33 CEST   ERROR:  could not access status of transaction 539227074
2007-07-31 19:27:33 CEST   DETAIL:  could not open file "pg_clog/0202": No such file or directory

Das Schöne dabei ist, das dann gar nix mehr geht und Postgres sicherheitshalber keine Verbindungen mehr annimmt - auch nicht vom Administrator. Schon schick... Nun zurückzuführen war das Ganze auf einen Bug im Autovacuum-Daemon, der mit Version 8.1.7 behoben wurde. 8.1.5 war aber am Laufen.

Was hab ich also gemacht? Im Gegensatz zum Oracle Support, der Core-Dumps auch nach 3 Monaten nicht analysiert bekommt, ist die Postgres-Mailingliste eine echte Wohltat. Apropos Oracle Support: Mein Gott ist der inzwischen schlecht geworden... Nichts für ungut, aber ich mach mit Oracle jetzt seit über 8 Jahren rum und ich bin sowas von froh, wenn die letzte Oracle abgeschaltet wird. Aber das nur nebenbei... Nachdem ich schon eine Weile am Suchen war, hat ein kleiner Tipp eines Users der Mailingliste (Antwort hat ca. 15 Min. gedauert...) mich weitergebracht.

Im Endeffekt habe ich Folgendes gemacht: Es fehlte der DB angeblich ein Transactionlog names 0202. Das war aber eigentlich Blödsinn, denn soweit war er mit seinen Logs noch gar nicht. Zuerst hab ich ein Upgrade von 8.1.5 auf 8.1.9 gemacht, da dort der Bug behoben war. Ich hab dann im Verzeichnis pg_clog das Log FFE (das hat mir am Besten gefallen) nach 0202 kopiert (DB war dabei natürlich unten). BTW: Ein Backup der Daten wäre schon angebracht, bevor man das macht ;-) Dann hab ich ein Skript ausgeführt, das die Postgres im Standalone Mode startet (kann man in der Postgres Doku nachlesen):

postgres -d 2 -S 50000 -B 300000 -D /var/lib/postgres userbase << SQL
VACUUM FREEZE
SQL


Das hat dann jede Menge Transactionlogs weggeschmissen, aber immerhin lief das durch. Anschließend (zur Sicherheit):

postgres -d 2 -S 50000 -B 300000 -D /var/lib/postgres userbase << SQL
VACUUM FULL VERBOSE ANALYZE
SQL


Dann hab ich die DB wieder gestartet. Und tata: Lief wieder! Aber dadurch, das der Autovacuum nicht sauber lief aufgrund des Bugs, war jetzt natürlich max_fsm_pages zu klein geworden (das sieht man dann, wenn man ein "normales" VACUUM auf die DB macht zum Schluss). Ich mußte also noch ein VACUUM FULL auf alle Instanzen durchführen, damit alles wieder aufgeräumt wird. Das ist übel, aber unvermeidlich in diesem Fall.

In diesem Sinne: Volle Kanne!

Technorati Tags:

Montag Juli 30, 2007

QEMU: Netzwerkanbindung

Nachdem ich kürzlich beschrieben habe, wie man Qemu mit Hardwarevirtualisierung unter Gentoo zum Laufen bringt, geht's dieses Mal um die Netzwerkanbindung von Qemu. Grundsätzlich ist das für eine Qemu-Instanz kein Problem. Man startet die VM einfach mit der Option -net nic -net user (was aber sowieso Default ist). Der Nachteil an der ganzen Sache hier ist allerdings, das nur TCP/IP-Verbindungen funktionieren. Ein ping z.B. funktioniert nicht. Wenn man allerdings eine vollständige Netzanbindung haben möchte, muss man etwas mehr tun. Grundsätzlich gibt es mehrere Möglichkeiten. Ich beschreibe hier die Möglichkeit über TAP und VDE (Virtual Distributed Ethernet). Diese erscheint mir recht sinnvoll und relativ schnell einzurichten. VDE stellt eine Art virtuellen Switch zur Verfügung, an dem mal einfach eine oder mehrere virtuelle Maschinen an

Zunächst brauchen wir TUN/TAP-Unterstützung im Kernel. Ich schätze, das dürfte so ziemlich jeder schon haben. Wenn man's nicht im Kernel einkompiliert hat (dann weiss man sicherlich, das man das gemacht hat ;-) ), kann man einfach mal

modprobe tun

eingeben. Wenn keine Fehlermeldung kommt, ist das Modul geladen (prüfen mit lsmod). Wenn das nicht klappt, muss man in die Kernelsources guggen und das TUN/TAP-Modul aktivieren. Dazu wechselt man nach /usr/src/linux und tippt make menuconfig ein. Unter

Device Drivers -> Network device support

aktiviert man Universal TUN/TAP device driver support als Kernelmodul. Als nächstes installieren wir VDE:

emerge -av vde

Dann erzeugen wir uns ein TAP-Device:

cd /etc/init.d/
ln -s net.lo net.tap0

Unter /etc/conf.d/net fügen wir Folgendes ein (eventl. passt man noch die IP-Adresse an):

config_tap0=( "10.0.2.1 netmask 255.255.255.0 " )

Um das Interface zu starten, gibt man Folgendes ein:

/etc/init.d/vde start
/etc/init.d/net.tap0 start

Damit VDE beim Start des Rechners automatisch startet, aktivieren wir das Start-Skript entsprechend:

rc-update add vde default

Mit ifconfig müsste man jetzt das tap0 Device sehen. Nun können wir die verschiedenen Qemu-Instanzen starten. Wichtig ist, das man jeder Qemu-VM eine eigene MAC-Adresse zuteilt. Qemu vergibt per Default immer die gleiche MAC-Adresse. So können sich die verschiedenen Qemu-Instanzen aber nicht über den virtuellen Switch unterhalten.

Nun kann man eine Qemu-Instanz starten. Ich habe Qemu unter /opt/kvm installiert. Das sieht dann so aus:

vdeq /opt/kvm/bin/qemu-system-x86_64 -net vde,vlan=0,sock=/var/run/vde.ctl -net nic,vlan=0,macaddr 52:54:00:00:AA:02 -hda disk.img -m 128 -localtime

vdeq ist ein Wrapper der Qemu startet und das Qemu-Gastsystem mit dem VDE Switch verbindet. Wenn man keine grafische Ausgabe möchte, weil das System z.B. auf einem Server läuft, gibt man einfach noch zusätzlich z.B. noch -vnc :2 an. Dann kann man sich mit dem vncclient mit dem Qemu-Gast verbinden. Was man nicht tun sollte, so logisch es klingen mag, -nographic anzugeben. Da geht bei mir die CPU Last ganz mächtig nach oben. Wieso ist mir allerdings etwas schleierhaft und das ist vielleicht auch nicht überall so.

Noch ein Tipp: Wenn ihr meint, ihr habt alles richtig gemacht, startet Qemu und setzt dann einen einfachen ping ab und es kommt die Meldung bad file descriptor, dann stoppt die VM, beendet VDE, stoppt das TAP-Device, löscht alles was irgendwie nach vde klinkt unter /var/run raus, startet das TAP-Device wieder, konfiguriert es (IP, Netmask, usw.), startet VDE wieder und  anschließend Qemu. Bei mir hat's geholfen ;-) Hat mich auch blos 10 Jahre meines Lebens gekostet...

Ein paar Links:
Qemu - How to use Network
VDE Basic Networking
Using VDE with QEMU HOWTO
Gentoo HowTo: Qemu
Qemu / KVM - Ein grosses HowTo
Gentoo Wiki - KVM
OS on QEMU
Ubuntu - The Kernel Virtual Machine
QEMU Notes
QEMU - Debian - Linux - TUN/TAP - network bridge
QEMU, VDE and Dnsmasq
VDE, Dnsmasq SystemV Init-Skript
QEMU host <-> guest network bridging

Technorati Tags: , , , , , , , , ,

Samstag Juli 28, 2007

GENTOO: 32bit Firefox Flash Plugin unter AMD64

Update 20090416: Wie schon in einem anderen Post von mir erwähnt, gibt es jetzt 64Bit-Versionen des Flash- und Java-Plugins.

Es ist schon faszinierend, das Adobe es immer noch nicht geschafft hat, einen 64Bit Flashplayer auf die Beine zu stellen... Nun das soll uns unter Gentoo aber nicht daran hindern, unseren tollen mit

emerge -av firefox

gebauten 64bit Firefox 2 nicht mit einem 32bit Flash-Plugin ans Laufen zu bekommen :-) Zunächst lädt man sich mal von der Adobe Webseite das 32bit Flash-Plugin (64bit gibt's eh nicht...) runter. Das entpackt man dann z.B. nach /opt/flash/9. Dann brauchen wir einen kleinen Wrapper:

emerge -av nspluginwrapper

Den nspluginwrapper kann man sich auch von der Homepage runterladen. Funkt auch mit anderen AMD64/EMT64 Linuxversionen wie etwa Debian. Dann übergibt man einfach den vollen Pfad an diesen Wrapper:

nspluginwrapper -i /opt/flash/9/libflashplayer.so

Den Rest erledigt der Wrapper für uns. Wenn wir Firefox nun durchstarten, sollten wir auf youtube.com schon mal die Videos anguggen können - und wenn man Glück hat, auch mit Sound. Das hat bei mir nicht funktioniert. Ich sah das erste Mal die Videos ohne Sound. Aber auch hier gibt es Abhilfe:

emerge -av esound
/etc/init.d/esound start
rc-update add esound default

Ich hab sicherheitshalber dann den Rechner durchgestartet. Und dann liefen die Flash-Videos auch mit Sound :-)) 

Technorati Tags: , , ,