Der UPnP Medienserver mit dem „Wow“

Während Andere von ihren Liebsten eine Kravatte geschenkt bekommen, habe ich heute eine Playstation 3 vom Kristkind erhalten *freu*. Ein unglaubliches Teil, das mich schon voll in den Bann gezogen hat. Das Gamen damit ist psychisch: Man schwankt zwischen „Wow, ist das realistisch“, einem epileptischen Anfall und einem Amoklauf. Auf jeden Fall habe ich alle meine Pendenzen ein paar Tage nach hinten verschoben.

Die PS3 kann auch als UPnP-Client dienen und Filmchen, etc streamen. Über das Problem habe ich schon mal geschrieben. Auch hier ist man eingeschränkt mit den Formaten und das Pladden hin- und hertragen geht auf den Senkel. Ausserdem sind die HD-Filmchen auf Grund ihrer Grösse nicht mehr auf die Festplatte zu kriegen und das MKV-Format ist gar konvertierunfreundlich.

Per Zufall bin ich nun auf einen Medienserver gestossen, der on-the-fly konvertiert und die Filmchen nicht nur auf die PS3 streamt, sondern auch den Sony Bravia bedienen kann: Der PS3 Mediaserver. Kein Gekonfiguriere, kein Decodergewurschtel, kein Bittebitte: Starten und er läuft. Auf dem Bild sieht man sogar, dass er alle meine anderen Gerätchen auch aufführt. Der „Unknown Renderer“ ist übrigens mein Archos 101, der ebenfalls ganz willig die Filmchen abspielt, überall im Haus. Einfach genial!

So, ich muss jetzt was kuckn gehn und die Zeit, die ich durch das nicht-Transcoden gespart habe sinnvoll einsetzen :)…

Handlicher upnp Medienserver für Linux

wirelessNachdem der 10 Jahre alte Röhrenfernseher beim gemütlichen Fernsehabend mittlerweile lauter geknurrt hatte als mein Magen, wurde ich freundlich aber energisch davon überzeugt, dass eine Neuanschaffung notwendig wäre. Aus Mitleid mit meinem Rücken habe ich mich noch etwas gesträubt, bis ich von den Gratislieferungen der Geschäfte gehört habe. Das Entsorgen der alten „Tube“ hat sich als schwieriger herausgestellt als die Neulieferung, es hat sich in einigen Läden sogar echt als Chefsache erwiesen und wäre uns fast halb so teuer zu stehen gekommen wie das Neugerät. Wir liessen uns nicht entmutigen, haben weitergesucht und sind tatsächlich fündig geworden.

Ein Riesendings wurde uns gezeigt, mit ganz vielen Lämpchen, Schaltern, Anschlüssen, Blings und Sodongs beim Einschalten und als der Verkäufer WLAN-Ready erwähnt hatte, war das Ding gekauft: Ein Sony EX5 Bravia, der mittels Stick (UWA-BR100) um WLAN-Fähigkeiten erweitert werden kann. Die Metamorphose ist im vollen Gange: Computer nähern sich dem Fernseher an, die Fernseher werden immer mehr zu Computern. Nach kurzem – aber heftigem – Gefluche hat der TV über mein WLAN Kontakt aufgenommen und nun können Filmchen, Bildchen und Musikchen über das Internet angesehen werden. Ohne zu murren spielte er auch Filme ab der USB-Festplatte, aber so ganz zufrieden war ich nicht: Ich will ein richtiger Couch-Potatoe sein und nicht mal ein Stick herumtragen müssen. Die Nullen und Einen sollen – engelsgleich – durch die Luft fliegen, bevor sie mich auf dem Bildschirm erfreuen.

So einfach sftp oder Ähnliches war nicht möglich, nur der Menüpunkt „Medienserver“ stand zur Verfügung. Etwas Recherche ergab, dass dieser Server ein upnp-dlna-Server sein muss. Für Linux habe ich zuerst ushare ausprobiert. Es ist klein und handlich, wird vom TV erkannt, aber er mag es nicht. Auch Media Tomb wird von Bravia leider nicht geliebt. Schlussendlich bin ich auf minidlna gestossen und bin begeistert: Einfach, knackig und tut was es soll. Leider ist es nicht im offiziellen Ubuntu-Repository vorhanden, kann aber mittels Anleitung ganz einfach installiert werden.

Nicht nur mein TV mag das minidlna, auch mein Tab (später mehr 🙂 ) und andere Geräte sind ganz wild darauf. So machts echt Spass.

Kleine Ergänzungen:
Es gibt viele Threads zu minidlna, Ubuntu und streaming ganz allgemein. Für die Sonys hilft dieser ziemlich gut.

  • Sollte minidlna die Inhalte nicht neu indizieren, hilft es, das Verzeichnis /tmp/minidlna zu löschen.
  • Die Videodateien müssen ein ganz spezielles Format haben:
    • In diesem Blogbeitrag ist erklärt wie (inklusive ffmpg Skript). Das Skript (in Groovy) gibt es auch hier lokal.
    • Für Banausen wie mich, denen es nicht auf das Pixel ankommt, geht auch: ffmpeg -i film.avi -target film-dvd -s 1920x1080 film.mpg

Blitz ohne Donner, Flash ohne Sound

Linux ist ja nicht mehr Lustig. Früher war man froh und stolz über jede Taste die funktioniert hat, heute muss man sich ganz andere Gründe zum Saufen suchen. Doch nun habe ich wieder einen Nachmittag verbracht um das zu erreichen, was unter Windows schon lange läuft und ich bin unglaublich stolz darauf *lach*.

Wie eine Seuche hat es in meinem kleinen Rechenzentrum um sich gegriffen: Eine Computerine nach der Anderen verweigerte den Sound zu Flash Videos. Ich selbst schaue mangels Multitasking eh nur ohne Ton, aber Frauen und Kinder möchten schon die volle Dröhnung. Nach den typischen „Jaja“s und „reboot mal“s (das tun sie nicht, und so kann man sich wunderbar drücken) wurde die Opposition zu gross und ich habe mich hingesetzt. Schnell habe ich gemerkt, dass ich nicht der Einzige mit dem Problem bin, und die Lösungen sind vielfältig und unterschiedlich.

Hier einen kleinen Ablauf, der anderen gequälten Machmals das Leben vielleicht erleichtert.
Weiterlesen

Text- oder Quellcodedateien auf Ähnlichkeit prüfen unter Linux

mirrorManchmal überfällt mich der starke Drang nachzuforschen, wieviel von meinem vermittelten Wissen auch tatsächlich angekommen, gespeichert und wiedergegeben werden kann. Im Volksmund heisst dies „Prüfung“, im Mund der Lernenden „Folter“. Im Zeitalter der Kommunikation könnte es natürlich sein, dass Dateien weitergegeben werden. Als Beurteiler sollte man das herausfinden, so dass man diese Dateien wieder zurückgeben kann :)…

Eine der Möglichkeiten unter Linux ist der similarity-tester. Er kann Code in verschiedenen Programmiersprachen oder auch Text vergleichen. Als Argument übernimmt er eine Liste von Dateien für den Vergleich.

Angenommen, man hat die Dateinamen vorgeschrieben und alle Resultate lokal, so listet folgender Befehl die Ähnlichkeiten prozentual auf, absteigend geordnet.

sim_text -e -s -p `find . -name 'aufgabe.vb'`

Wer sich in die Optionen einarbeiten möchte, sei auf die Manpage verwiesen.

Eine weitere Möglichkeit wäre Simhash. Leider bin ich zu dumm es zu verstehen und für meine Bedürfnisse aufzurufen.

Hat jemand vielleicht eine noch komfortablere Lösung? Vielleicht auch für Binärdateien?

KDE bootet nicht mehr und bleibt bei der Weltkugel stehen

KDE splash screenIn einem Anfall von Wahnsinn habe ich OpenOffice 3.1 nach Anleitung in meinem Kubuntu installiert. Die Strafe folgt auf dem Fusse: Nach einem Neustart hängt der KDE bei der schönen Erde. <Ctrl>+<Alt>+<F8> hat keine neuen Fehlermeldung und ich sitze da, untermailt und geschliffen.

Die üblichen Experimente wie .kde neu erstellen lassen funzen leider nicht. Etwas beruhigt hat mich dann, dass KDE sich dem sudo gebeugt hat und als root aufstartbar war.

Nach viel Fluchen habe ich die Lösung gefunden. ~/.ICEauthority wurde dem root als alleiniges Eigentum zugeschanzt. Ein beherztes chown -R skaldrom.skaldrom ~/.ICEauthority hat dem Spuk ein Ende bereitet. Vielleicht hilft das jemandem in derselben Situation.

VIM geboostet

vimWelch wunderbare Möglichkeit, einen Glaubenskrieg vom Zaun zu brechen: VI vs Emacs, VIM vs VI, alle vs alle, … Da verzichte ich aber – wie ungewöhnlich – mangels Energie darauf und lass andere sprechen:

VI VI VI The editor of the beast.
— coolsig

oder:

irgendwie hat vi doch zwei modes,
einen, wo er den text kaputt macht,
und einen, wo er beept.
— frobnic

VIM kann so konfiguriert werden, dass er noch mehr Spass macht. Damit meine ich Syntax-Highlightning, Autoindent, Autocomplete, Folding, … und nicht das umlegen von <ESC> auf <Enter> um die Nerds zu verwirren 😀 .
Natürlich ist das Geschmackssache, aber folgende Konfiguration stimmt feinstofflich und metaphysisch für mich. Vieles davon habe ich von mkrau (Leider nicht mehr erreichbar: http://home.tu-clausthal.de/~mkrau/vimrc.txt) übernommen.
Weiterlesen

[lang_de]Ein Video (AVI) unter linux rotieren[/lang_de][lang_en]Rotate a video (AVI) with Linux[/lang_en]

rotate[lang_de]Heute ist jeder Photoapparat, jedes Handy und wohl bald auch jeder Tacker fähig, kleine Filmchen aufzunehmen. Je nachdem, ob die Freunde eher breit oder lang sind, hat man nach dem Download eine falsche Orientierung und alle liegen Kopfüber. Unter Linux gibt es zum Glück mit dem Programm mencoder eine einfache Möglichkeit, alles wieder gerade zu drehen.[/lang_de][lang_en]Today, every camera is, every mobile is and soon every stapler will be able to record videos. Depending if your friends are rather large than tall, the recordings may have the wrong orientation after download. Fortunately there is mencoder, and with its help, it is easily possible to straighten the movies.[/lang_en]

[lang_de]Rotieren von Videos[/lang_de][lang_en]Rotating videos[/lang_en]

[lang_de]Leider scheint eine Recodierung notwendig zu sein, denn -ovc copy lässt die Rotation unangetastet.[/lang_de]
[lang_en]Unfortunately, recoding the video is mandatory because -ovc copy leaves the rotation untouched.[/lang_en]

[lang_de]Mit der lavc Codierung kriegt man relativ kleine Dateien:[/lang_de]
[lang_en]With lavc encoding, files are rather small:[/lang_en]

mencoder -vf rotate=1 VIDEO-INPUT.avi -ovc lavc -oac copy -o VIDEO-OUTPUT.avi

[lang_de]x264 gibt eine etwas bessere Qualität, allerdings mit grösseren Dateien:[/lang_de]
[lang_en]x264 provides better image-quality, but the files are larger:[/lang_en]

mencoder -vf rotate=1 VIDEO-INPUT.avi -ovc x264 -oac copy -o VIDEO-OUTPUT.avi -x264encopts qp=26

[lang_de]
Der rotate-Parameter bedeutet folgendes für das Drehen:

0 90 Grad im Uhrzeigersinn drehen und spiegeln.
1 90 Grad im Uhrzeigersinn drehen.
2 90 Grad im Gegenuhrzeigersinn drehen.
3 90 Grad im Gegenuhrzeigersinn drehen und spiegeln.

[/lang_de]
[lang_en]
The Parameter rotate has the following meaning:

0 Rotate by 90 degrees clockwise and flip (default).
1 Rotate by 90 degrees clockwise.
2 Rotate by 90 degrees counterclockwise.
3 Rotate by 90 degrees counterclockwise and flip.

[/lang_en]

[lang_de]Weitere Tricks[/lang_de][lang_en]Some more tricks[/lang_en]

[lang_de]Ein (Vorschau-)Bild speichern[/lang_de][lang_en]Saving a (preview-) image[/lang_en]:

Weiterlesen

Showdown: Swiftfox gegen Firefox

chillfoxVor einiger Zeit gab es eine grosse Kontroverse um Firefox unter Linux: Messungen haben gezeigt, dass die Windowsversion mit Wine unter Linux schneller gelaufen ist, als die Linux native Version. Diese Messung hat sehr zu meinem subjektiven Eindruck gepasst: Firefox ist eine Schnecke unter Linux. Als Alternative wurde eine „optimierte“ Version mit Namen Swiftfox offeriert. Nundenn, lasset uns das auschecken.

Das Testsystem

Der HP Laptop:

Typ: HP EliteBook 8530p
CPU: Intel® Core™2 Duo Prozessoren T9400 (2,53 Mhz)
RAM: 4GB
Video: ATI Technologies Inc Mobility Radeon HD 3650
Videodriver: 8.54.3

Der Dell Desktop:

Typ: Dell Inspiron 531 Desktop
CPU: AMD Athlon(tm) 64 X2 3800+ (2.0G)
RAM: 4GB
Video: NVIDIA GeForce 6150SE nForce 430

Windows:

OS: Microsoft Windows Vista Home Basic SP1 (32 Bit)

Linux:

Distribution: Kubuntu 8.10
Kernel: 2.6.27-11-generic #1 SMP x86_64 GNU/Linux

Der Windowsrechner ist ein Desktop, dafür schon eine Spur älter. Bei den unterschiedlichen Hardwareplattformen sind die Resultate natürlich nur bedingt vergleichbar. Klar hätte man das auf einer Kiste durchziehen können, aber ich hab auch noch Anderes zu tun :)…

Die Kontrahenten

Swiftfox:
Swiftfox sind „optimierte“ Builds. Sie können unter Debian wunderbar mittels apt-repository installiert werden. Leider hinken die Versionen etwas nach und die aktuellste ist 3.0.4pre. Swiftfox kann dasselbe Profil-Verzeichnis benutzen wie eine Firefox-Installation.
Firefox:
DER Klassiker. Anscheinend wird Firefox unter Windows entwickelt und humpelt darum in der Linuxversion etwas lahm. Unter beiden Betriebssystemen kam 3.0.8 zum Einsatz.
Internet Explorer
Der bei Vista, beiliegende und stetig upgedatete Microsoft Internet Explorer, Version 7.0.6001.18000.

Die Messungen

Ich habe die Tests jeweils zwei mal laufen lassen und die Resultate verglichen, damit die Plausibilität einigermassen gegeben ist :)…
Weiterlesen

Individuelle, geschützte und dynamisch erstellte SVN-Repositories

facesDas Problem: Es sollen individuelle SVN Verzeichnisse erstellt werden. Ein Bereich also, in dem eine Person beliebig viele Repositories erstellen kann, die nur von ihr selbst angesehen und bearbeitet werden können. Mann könnte jetzt meinen – vorallem mit viel jugendlichem Leichtsinn – das sei ein einfaches, allgemein bekanntes Problem. Pustekuchen! Das muss ein ganz fremder wohl ganz abstruser Wunsch sein.

Verschiedene Dinge schränken die Chance ein, eine einigermassen vernünftige und allgemeine Lösung zu finden 🙁 .Doch der Reihe nach. Was ist gegeben:

  • Ein wunderbarer Server, mit SSL und allem.
  • Das Einrichten eines neuen Users sollte ungefähr 0,01 Sekunden menschlicher Arbeitskraft bedürfen.
  • Die Benutzer sind in einem Active Directory gespeichert.
  • Apache2, PHP, und alles was man will ist installiert.

Einschränkende Dinge

Die grösste Peinlichkeit ist die Direktive SVNParentPath (von mod_dav_svn). An sich sollte die Direktive ein Basisverzeichnis für die SVN-Repositories angeben aber:

  • Der Parameter (das Verzeichnis) ist absolut undynamisch. Er nimmt keine Umgebungsvariable, Regexp oder sonst was, sondern ganz stur nur einen festen Pfad.
  • Kann nicht in einer .htaccess Datei gesetzt werden

Gna! Das ist echt 2002! So wird das nichts mit dynamisch erstellten SVN-Verzeichnissen. Aus reinem Masochismus hane ich verschiedene Lösungen wie mod_rewrite, symbolischen Links, LocationMatch und alles was sonst noch so Zeit kostet ausprobiert. Keine Chance…
Erschwerend hinzu kommt, dass sich SVN überhaupt nicht mit der Alias Direktive anfreunden kann und konsistent stur auf eine jungfräuliche Location beharrt: Der Versuch wird mit einem Repository moved permanently, please relocate belohnt.

Die Krönung: mod_authz_path

mod_authz_path klingt vielversprechend. An Hand des Pfades sollte der User und das Realm festgelegt werden können. Jaaa, aber nicht als Location, sondern nur als Pfad (<Directory> im Apache), wie man mit dem Debuggen feststellen kann:

AuthNamePathMatch (.+) "Persoenliches SVN $1"
AuthzUserPathMatch (.+) $1

Mit dem Pfad findet sich aber – wie schon weiter oben geflucht – das SVN nicht zurecht.

Ganz nebenbei hat mich dieses Modul etwa viertausend Stunden gekostet. Wenn es geladen wird, funktioniert authnz_ldap nicht mehr richtig. Nicht überhaupt nicht, sondern einfach das require Statement spielt verrückt und verhält sich unberechenbar. Nach langer Zeit habe ich dann das auch gemerkt :irre: . Aber erst nachdem ich unter viel Wehklagen in einer Panik die anderen Server getestet habe, ob die Authentifizierung dort auch nur scheinbar funktioniert.

Die Lösung

Nach ein paar Jahren die Lösung: Gutes, altes PHP.

Auf dem SSL-Port des Servers ist eine Website, auf der sich die User mal als erstes über Apache am Active Directory authentifizieren müssen. Dadurch habe ich Zugriff auf den Benutzername mittels $_SERVER['AUTHENTICATE_SAMACCOUNTNAME']. Loggt sich jemand ein den wir noch nicht kennen, dann:

  1. Wird der svn-Grundpfad erstellt, wenn er noch nicht existiert.
  2. Wird eine Apache-Konfiguration für diesen neuen Grundpfad erstellt, die das ParentPath und den entsprechenden User beinhaltet.
  3. Wird Apache neu gestartet → und der Benutzer währenddessen zum Warten gebracht. Das ist leider notwendig zum Einlesen der Konfigurationserweiterung.

Die neue Konfigurationsdatei wird „lokal“ erstellt und in der Grundkonfiguration /etc/apache2/sites-available/isvn.myhost.ch eingebunden:

        Include /data/www/isvn.myhost.ch/config/svn.conf

PHP Code für die neuen Benutzer:

  $svn_user=strtolower($_SERVER['AUTHENTICATE_SAMACCOUNTNAME']);
  if(!$svn_user) { echo "Hacker, you will be disintegrated!"; exit(1); }
  $svn_root=SVNROOT."/".$svn_user;
  if(!is_dir($svn_root)) { // NEW USER
        // Make svn Parent Path
        mkdir($svn_root);
        // Write Config
        $fh = fopen(SVNCONF, 'a') or die("can't open file");
        $svnDirective =<<<EOD

<Location /svn/lp/$svn_user>
        DAV svn
        SVNParentPath /data/svn/lp/$svn_user
        AuthName "Persoenliches SVN von $svn_user"
        AuthType Basic
        AuthBasicProvider ldap
        AuthLDAPBindDN ldapanonymous@myhost.local
        AuthLDAPBindPassword g3h31M3Sp+
        AuthLDAPUrl ldap://adc1.myhost.local/ou=Accounts,dc=myhost,dc=local?sAMAccountName?sub
        require ldap-user $svn_user
</Location>

EOD
;
        fwrite($fh, $svnDirective);
        fclose($fh);

        // Make th User wait
        echo "<html><head><title>SVN wird eingerichtet</title>\n";
        echo '<meta http-equiv="refresh" content="5; URL=https://isvn.myhost.ch">'."\n";
        echo "</head><body>".implode(" ", explode(".",$_SERVER['AUTHENTICATE_SAMACCOUNTNAME'])).": Ihr SVN Grundverzeichnis wird erstellt. Bitte warten Sie.</body></html>";

        // Restart Apache
        exec('echo "/usr/bin/sudo /etc/init.d/apache2 restart" | /usr/bin/at now');
        exit();
  }

Damit der User www-data den Apache restarten darf, muss ihm das per /etc/sudoers erlaubt werden:

www-data ALL=NOPASSWD: /etc/init.d/apache2

Dass die Berechtigungen auch für alle benötigten Zusatzdateien reichen, machen wir den Trick mit dem at.

Somit haben wir also eine hochindividuelle Konfigurationsdatei für alle User und Ihr SVN Grundverzeichnis. Die PHP-Seite ermöglicht es, SVN-Repositories anzulegen und zeigt auch gerade den annektierten Platz an:

Die SVN-Steuerkonsole

Die SVN-Steuerkonsole

Die Quellen

Hier sind die PHP-Quellen. Für weitere Details stehe ich gerne zur Verfügung.

Backup! Keine Ausreden mehr…

tapeJeder weiss: Backups sind wichtig, Backups sind gut. Zumindest bei mir hat diese Einsicht immer wieder die Tendenz, in die Theorie abzugleiten. Eigentlich dürfte das nicht sein, habe ich doch eine Diplomarbeit fast vollständig verloren aufgrund eines „Crashes“ und bin somit ein „gebranntes Kind“ (am Rande: Es war etwa 1996, ich machte erste Erfahrungen mit Linux und dachte, dass man Dateien mittels cat MeineDatei.doc > /dev/sda1 auf die Windows-Partition verschieben kann :irre: . Aber das erzähl ich besser niemandem…).

Es wäre eigentlich auch kein Problem. Heutige, externe USB-Festplatten kosten nur noch noch 0,13 Eur (19 Rappen) pro Gigabyte (Tendenz fallend). Es gibt also keine Ausreden mehr!

Anforderungen

Es muss einfach sein! Wenn ich jedes mal eine halbe Stunde rumwursteln muss werde ich – so wie ich mich kenne – nie Backups machen. Die Geschwindigkeit spielt nicht sooo eine Rolle, wenn es nicht gerade Stunden dauert. Dateien müssen gezielt ein- und ausgeschlossen werden können. Ich brauche keine raffinierten Backuppläne, ich werf es von Hand an wenn mich das Gewissen plagt. Und wenn ich schon Backup mache, dann soll es vom Backupprogramm einfach in Ruhe gelassen werden 🙂 . Inkrementell sollte schon möglich sein: Dateien, die sich nicht geändert haben, sollen nicht nochmals gespeichert werden.
Ich hätte es begrüsst, wenn die Dateien einzeln gespeichert würden, jede einzeln gezipt, doch dieses Feature habe ich leider nirgends gefunden.

Weiterlesen