Modernes Source Control Management mit GIT, TRAC und mod_wsgi unter Debian Lenny / Squeeze mit ISPConfig

Warum eigentlich Source Control Management?

Bei jeder Art der Softwareentwicklung sollte ein SCM, auch bekannt als Versionierungsverwaltung / -software, im Hintergrund benutzt werden. Gerade bei verteilten Teams kann eine parallele Zusammenarbeit am gleichen Code ohne eine Hilfe im Hintergrund sonst sehr chaotisch und zeitraubend ablaufen. Wird an der selben Datei gearbeitet, passiert es ohne Software öfter mal, das Änderungen des einen Kollegen durch den anderen überschrieben werden – ärgerlich und unnötig!

Änderungen nachvollziehen & rückgängig machen (können)

Ein entscheidender Vorteil ist bei der Quellcodeverwaltung aber auch die Nachvollziehbarkeit von Änderungen (Wer hat was, wann verändert) und die Möglichkeit diese im Handumdrehen rückgängig zu machen. Viele Probleme bei einem händischen Zusammenführen und notieren von Änderungen werden so komplett hinfällig.

Git /GitHUB

Das SCM Tool unserer Wahl ist GIT. Modern, vielseitige Funktionen und (inzwischen) auch in alle entscheidenden Tools integriert (Eclipse und Trac in unserem Fall). Und seitdem es GitHUB gibt, in unseren Augen auch die Zukunft. Für Open Source Projekte ist Git Hub sicherlich die erste Wahl, da es kostenlos ist und sehr gute Kolaborations-Funktionen. Für closed source Entwicklungen, wie wir sie auch haben, kommt Github allerdings aus Kostengründen nicht in Frage, da man mit wenig Aufwand alle Funktionen von Github auch auf einem eigenen dedizierten Server bereit stellen kann.

Installation von Git, Trac und mod_wsgi auf Debian Sqeeze

Wie man nun auf einem Debian Squeeze Web-Server, der mit ISPConfig betrieben wird GIT als SCM, Trac als Weboberfläche für das Projektmanagement und als Bugtracker mit Hilfe von mod_wsgi einrichtet, soll im Folgenden beschrieben werden.

Grundvoraussetzungen Server

  1. Der Server ist installiert und konfiguriert (für ISPConfig am besten nach folgender Anleitung: HowToForge – Der perfekte Server – Debian Lenny oder HowToForge – Der perfekte Server – Debian Squeeze mit Bind und Courier )
  2. Zugriff auf den user Root per SSH ist vorhanden und möglich
  3. Python ist in der Version 2.5 oder 2.6 installiert (wir gehen von 2.6 aus)
    1. apt-get install python
  4. Zusätzlich zu der Anleitung ist „libapache2-mod-wsgi“ istalliert
    1. apt-get install libapache2-mod-wsgi
  5. ISPConfig ist installiert und eingerichtet
  6. Eine „Site“ wurde bereits im ISPConfig eingerichtet. Z.b. bugtracker.DOMAIN.TLD oder scm.DOMAIN.TLD (Ich gehe hier im Beispiel einfach mal von scm.bit-dynamics.de aus)
    1. Für die Site wurde ein „Shellbenutzer“ angelegt z.B. „trac“ -> „kundenname_trac“ wäre dann der User Name

Wir gehen in dieser Anleitung von einem aktuellen Debian Squeeze aus. Dort ist es mit den Grundvorrausetzungen (Python, Git) besser bestellt und Lenny sollte man so oder so nicht mehr aufsetzen. Grundsätzlich sollte man aber die Git / Trac Konfiguration gleich durchführen können, wenn bei den Voraussetzungen alles passt. D.h. insbesondere Python in der richtigen Version installiert, mod_wsgi in der aktuell Version 3.3

Installation und Einrichtung von GIT

    1. Installation von git-core aus den Debian Repositories (aktuell liegt dort für Debian Lenny 1.5.6.5, für Debian Squeeze 1.7.2.5 . Andere Versionen dürfen aber auch keine Probleme bereiten)
      apt-get install git-core
    2. Danach wechseln wir in das Verzeichnis der ISPConfig Site, die wir gerade angelegt haben, damit die Weboberfläche später auch Zugriff auf die GIT Repositories hat und erstellen dort ein Verzeichnis für die GIT Repositorie. Um Probleme mit Berechtigungen und dem neuen Git Repository zu vermeiden, wechseln wir aber vorher noch den User zum korrekt (im Beispiel ist das „web1“, welcher das bei euch ist, könnt ihr aber über ein „ls -al“ im entsprechenden Verzeichnis ablesen)
      cd /var/www/scm.bit-dynamics.de/
      su kundenname_trac
      mkdir repositories
    3. Hier legen wir uns jetzt unser erstes Repository an, mit dem Namen „TESTProjekt“
cd repositories
mkdir TESTProjekt
cd TESTProjekt
git-init
    1. Als Antwort solltest du folgendes erhalten:
 Initialized empty Git repository in /var/www/clients/client1/web1/repositories/TESTProjekt/.git/
 (Optional): Um den Pfad zu vereinfachen kann man den .git Ordner auch direkt in den /repositories/ Ordner verschieben und in den entsprechenden Projektnamen umbenenenn. Das ist aber rein kosmetischer Natur
    1. Nun sollte im TESTProjekt Ordner ein Ordner „.git“ vorhanden sein. Das ist auch schon dein Repository
    2. Nun noch wieder zurück in die Root Shell, denn als nächstes werden wir Trac installieren
 exit

Trac installieren

    1. Nun laden wir die aktuelle Trac Version herunter und installieren diese (aktuell ist 12.2 als stable vorhanden, da im Squeeze Repo nur 11.7 und in Lenny etwas noch älteres liegt nehmen wir die aktuelle von der trac Webseiten)
      1. Update (Danke an Gunnar!): Inzwischen ist Trac 12.2 auch im Backport Repository von Debian vorhanden. Um Trac über apt-get zu installieren, müsst ihr folgendem Vorgehen folgen:
        1. vi /etc/apt/sources.list
        2. Dort folgende Zeile hinzufügen, sofern nicht schon vorhanden:
          1. deb http://backports.debian.org/debian-backports squeeze-backports main
        3. apt-get update
        4. apt-get install trac
        5. Nun habt ihr bereits Trac 12.2 installiert. Das GIT Plugin ist auch schon dabei 🙂
    1. Alternative zu APT (Nur ausführen, falls ihr nicht bereits der Anleitung für APT gefolgt seid!): Um auch später bequem zusätzliche Komponenten für Trac installieren zu können, installieren wir die „python-setuptools“ quasi ein apt-get für Python
apt-get install python-setuptools
easy_install Babel==0.9.5
 easy_install Trac
    1. Um die Verbindung zu GIT herzustellen, benötigen wir noch ein zusätzliches Trac Plugin „Trac-Git“. Das bekommen wir ebenfalls über easy_install in der aktuellen Version und für Python 2.6
easy_install http://github.com/hvr/trac-git-plugin/tarball/master

 

Trac konfigurieren

    1. Um mehrere Trac Instanzen auf der gleichen Domain laufen zu lassen (wir haben pro Projekt eine Trac Instanz + ein GIT Repository), müssen wir noch weitere Ordner anlegen. Wir nehmen als Authentifikation das HTTP Basic Auth Verfahren und gehen davon aus, dass grundsätzlich jeder der einen Zugang hat auf alle Projekte zugreifen darf.
    2. Zuerst legen wir nun einen neuen „trac“ Ordner außerhalb des /web Ordners an, in dem wir dann all unsere Trac Instanzen / Projekte einrichten können
 su kundenname_trac
 cd /var/www/clients/client1/web1/
 mkdir trac
 cd trac
    1. Nun legen wir unser Projekt an. Wir nennen es ‚Testprojekt‘.
 trac-admin Testprojekt initenv
 Name des Projekts [My Project]> <-- Eure Entscheidung, "Testprojekt" z.B.
Datenbankverbindungsstring [sqlite:db/trac.db]> <-- Enter, außer ihr wollt unbedingt gegen SQL connecten. Würde ich aber nicht machen, da die Performance mit sqlite passt und das Repository später besser zu backupen oder zu verschieben ist
    1. „initenv“ benötigen wir nur initial, um das Repository zu initialisieren. Generell kann man dann später über „trac-admin Testprojekt“ bzw „trac-admin /pfad/zum/trac/projekt/Ordner“ alle notwendigen Einstellungen setzen (Userberrechtigungen insbesondere)
    2. Als nächstes müssen wir Trac dazu bringen uns die .wsgi Datei zu erzeugen, damit wir auch über die in ISPConfig eingerichtete Adresse auf unsere Trac Instanzen zugreifen können. Dazu benutzen wir „deploy“
trac-admin Testprojekt
deploy ./deploy
exit
    1. Jetzt kopieren wir die .wsgi Datei aus dem Trac Deployment Ordner, den wir gerade angelegt haben, in den /web Ordner
 cp ./Testprojekt/deploy/cgi-bin/trac.wsgi ../web/
    1. Als nächstes benötigen wir die .htpasswd Datei für die Basic Auth. Die legen wir auch außerhalb des /web Ordners an.
cd ..
htpasswd -c .trac-htpasswd Admin
Password: <-- hier dann das Passwort für den User "Admin" eingeben
    1. Im nächsten Schritt konfigurieren wir dann noch den Apache Server über ISPConfig, um die richtigen Datien zu benutzen und die .wsgi Datei richtig zu interpretieren. Dafür öffnen wir in ISPConfig den Tab „Domains“, gehen auf „Domain“, wählen die richtige Domain aus und geben dann ins „Apache Direktiven“ Feld unter dem Reiter „Optionen“ den folgenden Code ein. Natürlich müssen unter Umständen noch die Pfade angepasst werde, bzw client1 und web1 durch eure Benutzer / Gruppe ersetzt werden!
WSGIScriptAlias / /var/www/clients/client1/web1/web/trac.wsgi
WSGIDaemonProcess trac user=web1 group=client1

<directory /var/www/clients/client1/web1/web>
WSGIProcessGroup trac
WSGIApplicationGroup %{GLOBAL}
SetEnv trac.env_parent_dir /var/www/clients/client1/web1/trac
</directory>

<LocationMatch />
AuthType Basic
AuthName "Bit Dynamics Source Control"
AuthUserFile /var/www/clients/client1/web1/.trac-htpasswd
Require valid-user
</LocationMatch>
    1. Zuletzt nun noch eurem Admin User alle Rechte auf das neue Trac Projekt geben:
trac-admin trac/Testprojekt
permission add Admin TRAC_ADMIN
 exit
  1. Wenn ihr alles richtig gemacht habt, solltet jetzt unter http://scm.HOST.tld eine Basic Auth nach einem Usernamen und Password fragen. Nach Eingabe solltet ihr eine Übersicht bekommen, welche Trac Instanzen alle existieren. In diesem Fall haben wir nur eine angelegt. Ihr könnt allerdings Schritt 2 (Schritt 9 nicht vergessen!) beliebig oft mit neuen Namen wiederholen, um weitere Trac Instanzen anzulegen.

trac.ini für Git Nutzung konfigurieren

Leider ist es damit noch nicht getan. Um Trac mit GIT nutzen zu können, müssen noch einige Einstellungen in der Trac.ini geändert werden, sowie neue für Git hinzugefügt. Ich liste im folgenden daher nur die zu Ändernden / Hinzu zu fügenden Werte auf.

    1. Die trac.ini liegt im Ordner der jeweiligen Trac Instanz
 cd trac/Testproject/conf
 vi trac.ini
    1. Folgende Werte müssen so eingefügt / geändert werden:
[components]
tracext.git.git_fs.csetpropertyrenderer = enabled
tracext.git.git_fs.gitconnector = enabled
tracext.git.git_fs.gitwebprojectsrepositoryprovider = enabled

[git]
cached_repository = false
git_bin = /usr/bin/git
git_fs_encoding = utf-8
persistent_cache = false
shortrev_len = 6
trac_user_rlookup = true
use_committer_id = false
use_committer_time = false
wiki_shortrev_len = 7

[trac]
repository_type = git

Weitere Optimierungsmöglichkeiten

  • Auslagerung der trac.ini in eine zentrale Config Datei für alle Instanzen, um dann in jeder Instanz nur noch die gesonderten Parameter zu überschreiben
  • Hinzufügen von „Hooks“ zu Git, um ein Update von Trac Tickets direkt beim Einchecken von Code durchzuführen.
  • Hinzufügen von „Hacks“ zu Trac, um den Funktionsumfang zu erweitern.

Quellen für weitere Informationen

Detaillierte Informationen zu Trac finden sich im Trac Wiki.

3 Kommentare
  1. Jan
    Jan sagte:

    Hallo Gunnar, vielen Dank für deinen Hinweis 🙂
    Die Zeit vergeht einfach zu schnell, um noch einen Überblick über die ganzen BackPorts zu behalten.

    Ich habe deinen Hinweis mal in Form einer neuen Anleitung für die Trac Installation aufgenommen.

    Besten Gruß
    Jan

    Antworten
  2. Simon
    Simon sagte:

    Hallo,

    eigentlich sollte ein SSH-User von ISPConfig nur in Gefängnis agieren, weshalb ein einrichten über sudo -u scm notwendig ist.
    Weiterhin gibt es nicht git-init sondern nur „git init“

    MfG
    Simon

    Antworten

Hinterlasse ein Kommentar

An der Diskussion beteiligen?
Hinterlasse uns deinen Kommentar!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.