Klauen ist auch nicht mehr wie früher…

Das Arsenal an Geräten, die ein durchschnittlicher Geek heutzutage mit sich herumschleppt, hat bald den Gegenwert eines kleinen Autos. Wenn früher ein Rucksack geklaut wurde (oder, hmm, ehrlich gesagt, zerstreut wie immer „irgendwo liegen gelassen“ wurde), dann war der Rucksack selbst oftmals das teuerste Ding des ganzen Verlustes. Heutzutage – mit Laptop, Pad, Phone, … – geht ein ganzer Serverraum verloren. Meine Wenigkeit ist so was von Monotasking, dass ich oftmals mit atmen, laufen, verdauen und transpirieren schon an die Grenze komme (darum spreche ich so wenig, weil dann mein Herz aussetzen würde!), wie soll ich dann noch an die 1001 Geräte denken, die ich irgendwie zusammen wischen und mitnehmen sollte? Da ich körperlich auch nicht unbedingt einem Standard-Hulk entspreche, muss ich wohl gegen Diebstahl andere Massnahmen ergreifen.

Vorsorge ist besser als Heulen und Therapie im Nachhinein, darum habe ich jetzt, wo alle Geräte noch um mich herum sind, ein paar Dinge überlegt. Ich kann das nicht genug gewichten: Man sollte etwas tun, bevor die Geräte weg sind.

Weiterlesen

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

Automatischer Spell-Check in KMail

Als Ortogravieh-Experte bin ich sehr froh für die roten Linien unter den falsch geschriebenen Wörtern, man will ja nicht schon beim ersten Mail den Eindruck eines Dorftrottels hinterlassen :). Leider schaltet sich diese sehr nützliche Funktion bei KMail immer mal wieder aus.

Was bisher geholfen hat:

  • Folgende Pakete müssen installiert werden:
    • spell
    • ispell
    • Lokale Dictionaries: ingerman, inswiss, …
  • Global muss folgendes Häckchen gesetzt sein: SystemeinstellungenLand/Region & SpracheRechtschreibprüfungAutomatische Rechtschreibprüfung in der Voreinstellung aktiviert
  • Das Standardwörterbuch (Default-Dictionary) muss man in der Identität einstellen: KMail → Einstellungen… → Identitäten → Ändern → Erweitert.
  • Beim Schreiben einer Mail muss unten rechts Rechteschreibprüfung: ein stehen.
  • Das aktuelle Wörterbuch kann angezeigt werden bei Ansicht → Wörterbuch.

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?

Kubuntu update und GRUB Wiederherstellung

facepalmEntropie in Reinkultur: Alles tendiert zum grösstmöglichen Chaos und guter Wille pflastert den Weg ins Grab. Auf meinem Lieblingsrechner wurde vor langer Zeit Kubuntu installiert. Mit dem Update auf Version 9.10 hat sich gerade eine schon lange fällige Neuinstallation von Windows gekreuzt. (Neuinstallation weil: Vista Basic Home Premium – entgegen der Meinung des MS Update-Assistant – nicht auf Windows 7 Professional upgedatet werden kann. Warum? Das weiss wohl nur ein Microsoft Certified Client System Upgrade Engineer, der wohl ein Live Upgrade über Windows Vista Home Half Master Business Game Edition oder so empfehlen würde *gna*.)

Windows startet nun wunderbar, hat aber natürlich meinen Bootloader (GRUB) überschrieben und ich kann nimmer in mein geliebtes, frisch upgedatetes Kubuntu booten. Das kennen wir von früher und mit Hilfe einer Boot-CD hat das schon bei Lilo wunderbar geklappt. Nicht jedoch dieses mal: Fehlermeldungen von nicht gefundenen Partitionen ("Could not find device for /boot: Not found or not a block device.") lachten Hohn über ganz verschiedene Anleitungen.

Ein paar ausgerissene Haarbüschel später und nach einer sehr formal geordneten Analyse (*lach*) hab ich dann das Problem erfasst. Beim Update wird der alte Grub 0.97 weiterverwendet, eine Neuinstallation (und auf der 9.10 Life-CD) ist der neue Grub 1.97.

Nach ein paar weiteren Tritten gegen die Maschine war die Lösung dann einfach: Eine alte Knoppix mit altem Grub rausgekramt, gebootet:

$> sudo grub
grub> find /boot/grub/stage1
 (hd0,5)
grub> root (hd0,5)
grub> setup (hd0)
grub> quit

Und alle sind wieder glücklich, die Haare wachsen nach, die Falten werden sich wieder glätten und die neuen Dellen im PC werden nicht weiter auffallen (is ja ein Dell *höhö_und_schenkelklopf*).

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.

Synergy: Ein Tool, das die Arbeitsweise am Computer verändern kann

synergyDie Arbeitsweise von Synergy ist einfach und bestechend: Die Tastatur und Maus eines Computers (genannt „Server“) kann benutzt werden um den Cursor und die Eingaben auf anderen Compies zu steuern. So weit so gut, aber Synergy macht das über das Netzwerk und (fast) betriebsystemunabhängig!

Was kann es nun?

Folgendes Szenario: Meine Grosse ist der Server und mein Arbeitsgerät. Rechts davon steht mein Laptop mit dem Mailclient und links davon mein Nettop mit Doku und Cheatsheets. Fahre ich mit der Maus links oder rechts aus dem Bildschirm der Grossen, erscheint der Cursor auf dem entsprechenden Kleincomputer. Die eine Tastatur kann benutzt werden um auf allen Compies Eingaben zu machen. Der Clou: Sogar die Zwischenablage wird synchronisiert. Ich kann also auf der Einen was kopieren und auf der Anderen wieder einfügen.

(Zwischenbemerkung: Ja, Computer sind weiblich).

Da das Ganze betriebssystemunabhängig (im Sinne von: Läuft auf Linux, Mac und Windows) funktioniert, eignet sich das hervorragend für Tests, Dokumentieraufgaben etc.

Bis auf die Spitze hat es Sembetu getrieben:

Weiterlesen

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

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.