Just because it's:

Archive for April, 2007

Das Nouveau Projekt benötigt Hilfe!

Monday, April 23rd, 2007

Im Titel steht eigentlich schon alles. Das Nouveau Projekt hat sich zur Aufgabe gemacht, einen freien 3d Treiber für NVidia Grafikkarten zu entwickeln. Dazu sammelt das Projekt in regelmäßgien Abständen Dumps des Nouveau Treibers im Zusammenspiel mit verschiedenen NVidia Chipsets.

Wenn man sich die Statistik der Dumps einmal genauer anschaut stellt man fest, dass zu diesem Zeitpunkt gerade einmal schlappe 14 von 245 Grafikkarten aktuelle Dumps aufzuweisen haben! Weitere 119 sind älter als 30 Tage und von ganzen 112 Karten gibt es nach wie vor keine Dumps.

Wer also im Besitz einer funktionierenden NVidia Grafikkarte ist und sich sowieso schon immer irgendwie an einem Opensource Projekt beteiligen wollte, sollte sich einmal genauer Gedanken darüber machen hier den ein oder ander Dump hinzu zufügen. Dazu hat das Nouveau Projekt extra eine How-To bezüglich der Dumps veröffentlicht.

Die aktuelle Treibersituation für NVidia Grafikkarten unter Linux ist seit vielen Jahren hauptsächlich positiv zu Bewerten. Es existiert ein hervorragender properitärer 3d Grafiktreiber direkt von NVidia und ein passabler Open-Source 2d Treiber. Sollte es dem Nouveau Projekt also tatsächlich gelingen, ihren freien Treiber auf der gleiche Performance, Leistungs und Stabilitäts Level zu bringen wie den Hauseigenen NVidia Treiber, wäre das ein weiterer sehr großer Schritt in Richtung Herstellerunabhägingkeit für die Linux Gemeinde.

PokerTH 0.4 veröffentlicht

Wednesday, April 4th, 2007

Noch ein kurzer Nachtrag zu meinem Artikel über PokerTH. Heute am 04.04.2007 wurde endlich die lang erwartete Version 0.04 veröffentlicht. Nicht nur optisch hat sich einiges getan. Es wurden diverse Features implementiert, die bereits durscheinen lassen, dass es mit der Multiplayer Version nicht mehr weit her sein kann. So kann man Beispielsweise Avatare für Computergegener einstellen, Nicknames vergeben und das Spiel mit Shortcuts bedienen. Das Ganze nach wie vor für Linux und Windows. Viel Spass!

Subversion Grundlagen: SVN Tools Cheat Sheet

Tuesday, April 3rd, 2007

Auch bei Subversion, ist es ganz zu Anfang immer etwas kompliziert sich diverse Befehle und konventionen zu merken. DEshalb habe ich an dieser Stelle einen kurzen Spickzettel häufig benötigter Befehle und URLs gelistest. Viel Erfolg!

Zugriffsmöglichkeiten

  • file:///path/to/repository : Zugriff auf lokales Repository.
  • svn://host/repository : Zugriff auf ein entferntes Repository.
  • svn+ssh://host//repository : Zugriff auf ein entferntes Repository durch einen SSH Tunnel.

SVN Client

  • svn import [Quell-Pfad] [Ziel-URL] : Importiert eine lokale Datei oder ein Verzeichnis in das Repository.
  • svn mkdir [Verzeichnis-URL] : Erstellt ein neues Verzeichni, bestimmt durch die absolute Verzeichnis-URL.
  • svn list file [Verzeichnis-URL] : Listet alle Inhalte des bestimmten Verzeichnisses.
  • svn checkout [Repository-URL] [lokales Ziel] : Zieht eine Arbeitskopie des aktuellen Repositories.
  • svn commit [lokale Datei] : Führt dem Repository geänderte Arbeitskopien zur Versionierung zu.
  • svn update [lokales Verzeichnis] : Führt eine aktualisierung der Arbeiteskopie aus. Ist kein Pfad angegeben, wird versucht das aktuelle Verzeichnis zu aktualisieren.

SVN Admin

  • svnadmin create [Repository Name] : ein neues Repository erzeugen.
  • svnadmin hotcopy : Erstellt eine Kopie des Repositories wärend des Betriebs.
  • svnadmin recover [Archiv Pfad] : Startet eine Routine zur Rettung der internen Datenbank.

SVN Serve Parameter

  • –daemon : Startet den SVN Server als Daemon. Der Prozess wird direkt in den Hintergrund verschoben.
  • –listen-host [Hostname] : Bestimmt expliziet den Host/Ip auf dem der SVN Server lauschen soll.
  • –listen-port [Portname] : Bestimmt den Port auf dem der SVN Server lauschen soll.
  • –root [Verzeichnis Pfad] : Schränk die Dateisystem Umgebung des SVN Servers ein. Ansonsten kann auf jedes Repository des Systems zugegriffen werden.
  • –foreground : Diese Option verhindert, dass der SVN Server im Daemon Modus in den Hintergrund verschoben wird.

Subversion Grundlagen: Repositories aufsetzen

Tuesday, April 3rd, 2007

Die Installation

Dank des Advance Packaging Tool gestaltet sich die Installation der Subversion (kurz SVN) Basis-Software selbst, erfrischend einfach und unkompliziert. Die Verwendung des Befehls apt-get setzt selbstverständlich Root-Rechte voraus.

sudo apt-get install subversion

Das Paket “subversion” enthält diverse Tools und selbstverständlich die SVN Library. Auf Grundlage dieses einen Pakets wurden im Prinzip alle nötigen Programme installiert, die gebraucht werden, um ein lokales Repository in Betrieb nehmen und pflegen zu können.

Das lokale Repository

Im Gegensatz zu anderen Programmen zur Versionsverwaltung, zum Beispiel Perforce, bietet Subversion die Möglichkeit lokale Repositories anzulegen. Diese Variante ist insbesondere dann nützlich, wenn es sich nicht um ein Projekt mit einem verteiltem Benutzerstamm handelt. Ein lokales Repository ist zum Beispiel ideal dazu geeignet, sich bei eigenen kleinen Projekten das ständige Rücksichern verschiedener Zwischenstände zu ersparen. Nie wieder Tarball Chaos! Nie wieder Hände über den Kopf zusammen schlagen, weil man das Backup vergessen hat! Wie praktisch! Selbstverständlich ist auch hierbei immer noch ein gewisses Maß an Selbstdisziplin vorausgesetzt, wenn es um das Hinzufügen der gemachten Änderungen geht.

Doch bevor man sich mir dererlei Problemen befasst, muss natürlich ersteinmal ein funktionierendes Repository angelegt werden. Die SVN eigenen Tools werden alle grundsätzlich in der Konsole ausgeführt. Es gibt mittlerweile eine Vielzahl grafischer Frontends für SVN, auf die ich allerdings an anderer Stelle noch zu sprechen komme.

Ein lokales Subversion Repository anzulegen ist nahezu ein Kinderspiel. Wenn das neue Repository Beispielsweise “BillingApp” heißen soll, legt man es mit folgender Kommandozeilen Eingabe an:

svnadmin create BillingApp

Der Befehl svnadmin bietet eine ganze Reihe weiterer Möglichkeiten zur Verwaltung eines Repositories, die als entsprechender Parameter mitgegeben werden. Viel wichiger allerdings ist der svn Befehl selbst. Sämtliche inhaltliche Änderungen in einem Repository, werden mit dem Konsolenkürzel svn und einem entsprechenden Befehlsparameter durchgeführt. Einige weitere wichtige SVN Befehlsparameter die man beim einrichten eines Repositories gebrauchen kann sind:

  • svn import [Lokaler-Pfad] [Ziel-URL] — Importiert eine lokale Datei oder ein Verzeichnis in das Repository.
  • svn mkdir [Ziel-URI] — Erstellt ein neues Verzeichni, bestimmt durch die absolute Verzeichnis-URL.
  • svn list file [Ziel-URI] — Listet alle Inhalte des bestimmten Verzeichnisses.
  • svn move [URI1] [URI2] — Verschieben oder umbenennen von Dateien in Arbeitskopie und Repository.
  • svn delete [URI] — Löscht Dateien und Verzeichnisse aus dem Repository.

Der aufmerksame Leser wird festgestellt haben, dass in der Befehlsyntax zumeist die rede von einer URI ist. Das liegt daran, dass die Inhalte eines Repositorys in einer Art virtuellem Dateisystem gehalten werden. Der tatsächliche Inhalt des Beispielordners “BillingApp” sieht wie folgt aus:

drwxr-xr-x  2 dennis dennis  80 2007-03-07 15:42 conf
drwxr-xr-x  2 dennis dennis  48 2007-03-07 15:42 dav
drwxr-sr-x  2 dennis dennis 472 2007-03-07 15:42 db
-r--r--r--  1 dennis dennis   2 2007-03-07 15:42 format
drwxr-xr-x  2 dennis dennis 232 2007-03-07 15:42 hooks
drwxr-xr-x  2 dennis dennis 104 2007-03-07 15:42 locks
-rw-r--r--  1 dennis dennis 379 2007-03-07 15:42 README.txt

Auf genauen Zwecke der einzelnen Dateien und Verzeichnisse gehe ich an dieser Stelle nicht ein. Vorerst reicht es zu wissen, dass es sich hierbei um Dateien handelt, die Subversion benötigt, um die Resourcen verwalten und versionieren zu können.

Um auf die Inhalte des Repositorys Zugriff nehmen zu können, übergibt man dem Befehl svn also URIs, anstelle des tatsächlichen Dateisystempfades. Subversion wandelt die URI dann intern entsprechend sich um. Importiert man Beispielsweise ein lokales Projekt in ein lokales Subversion Repository, so lautet der Befehl

svn import /home/dennis/projekt_verzeichnis/* file:///home/dennis/BillingApp

Die Angabe von URIs ist die einzige Möglichkeit, an die zu verwaltenen Dateien zu gelangen. Denn alle verwalteten Dateien liegen in einer Art virtuellem Dateisystem (bzw. einer Datenbank). Für den Befehl svn sind die Inhalte der Verzeichnisse /home/dennis/BillingApp und file:///home/dennis/BillingApp also von Grund auf verschieden. Bei dem ersten Pfad sieht svn die “System-Dateien” (conf/, dav/, db/ usw.), die man auch mit den Befehlen dir oder ls sehen würde. Beim zweiten Pfad (der File-URI) bekommt svn Einsicht/Zugriff auf alle “versionierten Dateien”, quasi die konkreten Quelltexte, Dokumente etc. mit denen eigentlich gearbeitet werden soll. Beide Zugriffsmethoden (echter Dateipfad und File-URI) haben absolut von einander abgegrenzte Umgebungen. Die Inhalte dieser Umgebungen werden niemals vermischt.

Zum anderen ist es Subversion auf diese Art möglich, die selben Befehle für lokale und entfernte Repositories nutzen zu können. Worauf man lediglich achten muss, ist dass man das Format der URI einhält. Der gleiche Aufruf für den Import in ein entferntes Repository könnte dann zum Beispiel so aussehen:

svn import /home/dennis/projekt_verzeichnis/* svn://myhost.com/BillingApp

Bei einem URI mit dem Schema “svn” weiss Subversion, dass es sich um ein entferntes Repository handelt und reagiert entsprechend um die Dateien zu übertragen. An dieser Stelle beginnt die Thematik der entfernten Repositories.

Das entfernte Repository

Jedes entfernte Repository setzt auf einem lokalen Repository auf. Es wird lediglich ein Dienst gestartet/installiert der dafür sorgt, dass man auch von außerhalb zugreifen kann. Hier gibt es nun diverse Möglichkeiten. In diesem Text beschäfftigen wir uns mit dem Subversion eigenen Daemon svnserve.

Svnserve ist in der Regel von Haus aus in der Subversion Grundausstattung enthalten. Das Programm bietet verschiedene Möglichkeiten, einen eigenen Repository Server in Betrieb zu nehmen:

  1. Als in inetd eingebundener Dienst.
  2. Als eigenenständiger Daemon Prozess.
  3. Über einen SSH/RSH Tunnel.

Wir beschäfftigen uns der Einfacheit halber mit der zweiten Variante, dem Betrieb als Daemon. Um einen einfachen svnserve Daemon zu starten, muss man in der Shell den Befehl svnserve –daemon ausgeführt werden. Damit wird ein neuer Prozess gestartet, der auf dem TCP Port 3690 wartet. Der Prozess wird in der Regel direkt in den Hintergrund geschoben. Soll dieses Verhalten vermieden werden kann der Parameter –foreground beigefügt werden. Außerdem empfehlen sich beim Betriebs von svnserve folgende Parameter anzugeben:

  • –root arg: Legt das Verzeichnis fest, in dem alle Repositories dieses Daemons liegen sollen. Wir diese Option nicht gesetzt, kann per Default mit abosluten Pfadangaben, jedes Repository des Systems genutzt werden.
  • –listen-host [arg] : Konfiguriert die Netzwerkadresse/Hostnamen auf dem der Subversion Server auf eingehende Verbindungen warten soll.
  • –listen-port [arg] : Konfiguriert den Port auf dem der Subversion Server auf eingehende Verbindungen warten soll.
  • –threads : Sollte abzusehen sein, dass der der Subversion Server einem starken Workload ausgesetzt sein wird, bietet es sich an dem Prozess über Threads anstelle von Forks laufen zu lassen.

Wenn das eigene Repository also in dem Pfad /var/svn/repositories liegt, bietet sich es also an, den Server wie folgt zu starten:

svnserve –daemon –root /var/svn/repositories

Hierbei ist natürlich wie immer darauf zu achten, dass das Verzeichnis /var/svn/repositories entsprechende Berechtigungen besitzt, damit der svnserve Prozess darauf zugreifen kann. Außerdem empfiehlt es sich in viele Fällen, den Zugriff auf das Repository zu beschränken. Dazu bringt Subversion zum Beispiel einen einfachen authentifizierungs Mechanismus mit. Jedes Repository-Verzeichnis enthält die Datei svnserve.conf im Unterverzeichnis conf/. Die accountbasierte Grundkonfiguration im Handumdrehen eingerichtet. Die Datei svnserve.conf benötigt im Grunde genommen nur folgende drei Zeilen:

[general]
realm = My First Repository
password-db = passwd

In diesem Beispiel wird eine Kennwortdatei “passwd” benutzt die ebenfalls in conf/ liegen muss.

[users]
jack = black

Zusätzlich hat man die Möglichkeit, über den Parameter anon-access und auth-access die Berechtigung für anonyme und authorisierte Zugriffe auf das Repository zu bestimmen.

Ist das Remote Repository so weit nun aufgesetzt, kann von jedem Rechner im Netz mit dem Commandline Tool svn auf das Repository zugegriffen werden. Genauere Informationen zu Subversion kann man wie immer den Manpages und Beispielkonfigurationen entlocken.