{"id":209,"date":"2011-05-27T17:43:32","date_gmt":"2011-05-27T16:43:32","guid":{"rendered":"http:\/\/blog.bit-dynamics.de\/?p=209"},"modified":"2011-05-27T17:43:32","modified_gmt":"2011-05-27T16:43:32","slug":"source-control-management-git-trac-mod_wsgi-debian-lenny-squeeze-ispconfig","status":"publish","type":"post","link":"https:\/\/hive-it.de\/2011\/05\/27\/source-control-management-git-trac-mod_wsgi-debian-lenny-squeeze-ispconfig\/","title":{"rendered":"Modernes Source Control Management mit GIT, TRAC und mod_wsgi unter Debian Lenny \/ Squeeze mit ISPConfig"},"content":{"rendered":"

Warum eigentlich Source Control Management?<\/h2>\n

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 \u00f6fter mal, das \u00c4nderungen des einen Kollegen durch den anderen \u00fcberschrieben werden – \u00e4rgerlich und unn\u00f6tig!<\/p>\n

\u00c4nderungen nachvollziehen & r\u00fcckg\u00e4ngig machen (k\u00f6nnen)<\/h2>\n

Ein entscheidender Vorteil ist bei der Quellcodeverwaltung aber auch die Nachvollziehbarkeit von \u00c4nderungen (Wer hat was, wann ver\u00e4ndert) und die M\u00f6glichkeit diese im Handumdrehen r\u00fcckg\u00e4ngig zu machen. Viele Probleme bei einem h\u00e4ndischen Zusammenf\u00fchren und notieren von \u00c4nderungen werden so komplett hinf\u00e4llig.<\/p>\n

Git \/GitHUB<\/h2>\n

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

Installation von Git, Trac und mod_wsgi auf Debian Sqeeze<\/h2>\n

Wie man nun auf einem Debian Squeeze Web-Server, der mit ISPConfig betrieben wird GIT als SCM, Trac als Weboberfl\u00e4che f\u00fcr das Projektmanagement und als Bugtracker mit Hilfe von mod_wsgi einrichtet, soll im Folgenden beschrieben werden.<\/p>\n

<\/p>\n

Grundvoraussetzungen Server<\/span><\/h3>\n
    \n
  1. Der Server ist installiert und konfiguriert (f\u00fcr ISPConfig am besten nach folgender Anleitung: HowToForge – Der perfekte Server – Debian Lenny<\/a> oder HowToForge – Der perfekte Server – Debian Squeeze mit Bind und Courier<\/a> )<\/li>\n
  2. Zugriff auf den user Root per SSH ist vorhanden und m\u00f6glich<\/li>\n
  3. Python ist in der Version 2.5 oder 2.6 installiert (wir gehen von 2.6 aus)\n
      \n
    1. \n
      apt-get install python<\/pre>\n<\/li>\n<\/ol>\n<\/li>\n
    2. Zus\u00e4tzlich zu der Anleitung ist „libapache2-mod-wsgi“ istalliert\n
        \n
      1. \n
        apt-get install libapache2-mod-wsgi<\/pre>\n<\/li>\n<\/ol>\n<\/li>\n
      2. ISPConfig ist installiert und eingerichtet<\/li>\n
      3. 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)\n
          \n
        1. F\u00fcr die Site wurde ein „Shellbenutzer“ angelegt z.B. „trac“ -> „kundenname_trac“ w\u00e4re dann der User Name<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n

          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\u00e4tzlich sollte man aber die Git \/ Trac Konfiguration gleich durchf\u00fchren k\u00f6nnen, wenn bei den Voraussetzungen alles passt. D.h. insbesondere Python in der richtigen Version installiert, mod_wsgi in der aktuell Version 3.3<\/p>\n

          Installation und Einrichtung von GIT<\/h3>\n
            \n
              \n
            1. Installation von git-core aus den Debian Repositories (aktuell liegt dort f\u00fcr Debian Lenny 1.5.6.5, f\u00fcr Debian Squeeze 1.7.2.5 . Andere Versionen d\u00fcrfen aber auch keine Probleme bereiten)\n
              apt-get install git-core<\/pre>\n<\/li>\n
            2. Danach wechseln wir in das Verzeichnis der ISPConfig Site, die wir gerade angelegt haben, damit die Weboberfl\u00e4che sp\u00e4ter auch Zugriff auf die GIT Repositories hat und erstellen dort ein Verzeichnis f\u00fcr 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\u00f6nnt ihr aber \u00fcber ein „ls -al“ im entsprechenden Verzeichnis ablesen)\n
              cd \/var\/www\/scm.bit-dynamics.de\/<\/pre>\n
              su kundenname_trac<\/pre>\n
              mkdir repositories<\/pre>\n<\/li>\n
            3. Hier legen wir uns jetzt unser erstes Repository an, mit dem Namen „TESTProjekt“<\/li>\n<\/ol>\n<\/ol>\n
              cd repositories<\/pre>\n
              mkdir TESTProjekt<\/pre>\n
              cd TESTProjekt<\/pre>\n
              git-init<\/pre>\n
                \n
                  \n
                1. Als Antwort solltest du folgendes erhalten:<\/li>\n<\/ol>\n<\/ol>\n
                  \u00a0Initialized empty Git repository in \/var\/www\/clients\/client1\/web1\/repositories\/TESTProjekt\/.git\/<\/pre>\n
                   (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<\/pre>\n
                    \n
                      \n
                    1. Nun sollte im TESTProjekt Ordner ein Ordner „.git“ vorhanden sein. Das ist auch schon dein Repository<\/li>\n
                    2. Nun noch wieder zur\u00fcck in die Root Shell, denn als n\u00e4chstes werden wir Trac installieren<\/li>\n<\/ol>\n<\/ol>\n
                       exit<\/pre>\n

                      Trac installieren<\/h3>\n
                        \n
                          \n
                        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 \u00e4lteres liegt nehmen wir die aktuelle von der trac Webseiten<\/del>)\n
                            \n
                          1. Update (Danke an Gunnar!): Inzwischen ist Trac 12.2 auch im Backport Repository von Debian vorhanden. Um Trac \u00fcber apt-get zu installieren, m\u00fcsst ihr folgendem Vorgehen folgen:\n
                              \n
                            1. \n
                              vi \/etc\/apt\/sources.list<\/pre>\n<\/li>\n
                            2. Dort folgende Zeile hinzuf\u00fcgen, sofern nicht schon vorhanden:\n
                                \n
                              1. \n
                                deb http:\/\/backports.debian.org\/debian-backports<\/em> squeeze-backports main<\/pre>\n<\/li>\n<\/ol>\n<\/li>\n
                              2. \n
                                apt-get update<\/pre>\n<\/li>\n
                              3. \n
                                apt-get install trac<\/pre>\n<\/li>\n
                              4. Nun habt ihr bereits Trac 12.2 installiert. Das GIT Plugin ist auch schon dabei :-)<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<\/ol>\n
                                  \n
                                    \n
                                  1. Alternative zu APT (Nur ausf\u00fchren, falls ihr nicht bereits der Anleitung f\u00fcr APT gefolgt seid!):<\/strong> Um auch sp\u00e4ter bequem zus\u00e4tzliche Komponenten f\u00fcr Trac installieren zu k\u00f6nnen, installieren wir die „python-setuptools“ quasi ein apt-get f\u00fcr Python<\/li>\n<\/ol>\n<\/ol>\n
                                    apt-get install python-setuptools<\/pre>\n
                                    \neasy_install Babel==0.9.5<\/pre>\n
                                     easy_install Trac<\/pre>\n
                                      \n
                                        \n
                                      1. Um die Verbindung zu GIT herzustellen, ben\u00f6tigen wir noch ein zus\u00e4tzliches Trac Plugin „Trac-Git“. Das bekommen wir ebenfalls \u00fcber easy_install in der aktuellen Version und f\u00fcr Python 2.6<\/li>\n<\/ol>\n<\/ol>\n
                                        easy_install http:\/\/github.com\/hvr\/trac-git-plugin\/tarball\/master<\/pre>\n

                                         <\/p>\n

                                        Trac konfigurieren<\/h4>\n
                                          \n
                                            \n
                                          1. Um mehrere Trac Instanzen auf der gleichen Domain laufen zu lassen (wir haben pro Projekt eine Trac Instanz + ein GIT Repository), m\u00fcssen wir noch weitere Ordner anlegen. Wir nehmen als Authentifikation das HTTP Basic Auth Verfahren und gehen davon aus, dass grunds\u00e4tzlich jeder der einen Zugang hat auf alle Projekte zugreifen darf.<\/li>\n
                                          2. Zuerst legen wir nun einen neuen „trac“ Ordner au\u00dferhalb des \/web Ordners an, in dem wir dann all unsere Trac Instanzen \/ Projekte einrichten k\u00f6nnen<\/li>\n<\/ol>\n<\/ol>\n
                                             su kundenname_trac<\/pre>\n
                                             cd \/var\/www\/clients\/client1\/web1\/<\/pre>\n
                                             mkdir trac<\/pre>\n
                                             cd trac<\/pre>\n
                                              \n
                                                \n
                                              1. Nun legen wir unser Projekt an. Wir nennen es ‚Testprojekt‘.<\/li>\n<\/ol>\n<\/ol>\n
                                                 trac-admin Testprojekt initenv<\/pre>\n
                                                 Name des Projekts [My Project]><\/em> <-- Eure Entscheidung, \"Testprojekt\" z.B.<\/pre>\n
                                                Datenbankverbindungsstring [sqlite:db\/trac.db]><\/em> <-- Enter, au\u00dfer ihr wollt unbedingt gegen SQL connecten. W\u00fcrde ich aber nicht machen, da die Performance mit sqlite passt und das Repository sp\u00e4ter besser zu backupen oder zu verschieben ist<\/pre>\n
                                                  \n
                                                    \n
                                                  1. „initenv“ ben\u00f6tigen wir nur initial, um das Repository zu initialisieren. Generell kann man dann sp\u00e4ter \u00fcber „trac-admin Testprojekt“ bzw „trac-admin \/pfad\/zum\/trac\/projekt\/Ordner“ alle notwendigen Einstellungen setzen (Userberrechtigungen insbesondere)<\/li>\n
                                                  2. Als n\u00e4chstes m\u00fcssen wir Trac dazu bringen uns die .wsgi Datei zu erzeugen, damit wir auch \u00fcber die in ISPConfig eingerichtete Adresse auf unsere Trac Instanzen zugreifen k\u00f6nnen. Dazu benutzen wir „deploy“<\/li>\n<\/ol>\n<\/ol>\n
                                                    trac-admin Testprojekt<\/pre>\n
                                                    deploy .\/deploy<\/pre>\n
                                                    exit<\/pre>\n
                                                      \n
                                                        \n
                                                      1. Jetzt kopieren wir die .wsgi Datei aus dem Trac Deployment Ordner, den wir gerade angelegt haben, in den \/web Ordner<\/li>\n<\/ol>\n<\/ol>\n
                                                         cp .\/Testprojekt\/deploy\/cgi-bin\/trac.wsgi ..\/web\/<\/pre>\n
                                                          \n
                                                            \n
                                                          1. Als n\u00e4chstes ben\u00f6tigen wir die .htpasswd Datei f\u00fcr die Basic Auth. Die legen wir auch au\u00dferhalb des \/web Ordners an.<\/li>\n<\/ol>\n<\/ol>\n
                                                            cd ..<\/pre>\n
                                                            htpasswd -c .trac-htpasswd Admin<\/pre>\n
                                                            Password: <-- hier dann das Passwort f\u00fcr den User \"Admin\" eingeben<\/pre>\n
                                                              \n
                                                                \n
                                                              1. Im n\u00e4chsten Schritt konfigurieren wir dann noch den Apache Server \u00fcber ISPConfig, um die richtigen Datien zu benutzen und die .wsgi Datei richtig zu interpretieren. Daf\u00fcr \u00f6ffnen wir in ISPConfig den Tab „Domains“, gehen auf „Domain“, w\u00e4hlen die richtige Domain aus und geben dann ins „Apache Direktiven“ Feld unter dem Reiter „Optionen“ den folgenden Code ein. Nat\u00fcrlich m\u00fcssen unter Umst\u00e4nden noch die Pfade angepasst werde, bzw client1 und web1 durch eure Benutzer \/ Gruppe ersetzt werden!<\/strong><\/li>\n<\/ol>\n<\/ol>\n
                                                                WSGIScriptAlias \/ \/var\/www\/clients\/client1\/web1\/web\/trac.wsgi\nWSGIDaemonProcess trac user=web1 group=client1\n\n<directory \/var\/www\/clients\/client1\/web1\/web>\nWSGIProcessGroup trac\nWSGIApplicationGroup %{GLOBAL}\nSetEnv trac.env_parent_dir \/var\/www\/clients\/client1\/web1\/trac\n<\/directory>\n\n<LocationMatch \/>\nAuthType Basic\nAuthName \"Bit Dynamics Source Control\"\nAuthUserFile \/var\/www\/clients\/client1\/web1\/.trac-htpasswd\nRequire valid-user\n<\/LocationMatch><\/pre>\n
                                                                  \n
                                                                    \n
                                                                  1. Zuletzt nun noch eurem Admin User alle Rechte auf das neue Trac Projekt geben:<\/li>\n<\/ol>\n<\/ol>\n
                                                                    trac-admin trac\/Testprojekt<\/pre>\n
                                                                    permission add Admin TRAC_ADMIN<\/pre>\n
                                                                     exit<\/pre>\n
                                                                      \n
                                                                    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 \u00dcbersicht bekommen, welche Trac Instanzen alle existieren. In diesem Fall haben wir nur eine angelegt. Ihr k\u00f6nnt allerdings Schritt 2 (Schritt 9 nicht vergessen!) beliebig oft mit neuen Namen wiederholen, um weitere Trac Instanzen anzulegen.<\/li>\n<\/ol>\n

                                                                      trac.ini f\u00fcr Git Nutzung konfigurieren<\/h4>\n

                                                                      Leider ist es damit noch nicht getan. Um Trac mit GIT nutzen zu k\u00f6nnen, m\u00fcssen noch einige Einstellungen in der Trac.ini ge\u00e4ndert werden, sowie neue f\u00fcr Git hinzugef\u00fcgt. Ich liste im folgenden daher nur die zu \u00c4ndernden \/ Hinzu zu f\u00fcgenden Werte auf.<\/p>\n

                                                                        \n
                                                                          \n
                                                                        1. Die trac.ini liegt im Ordner der jeweiligen Trac Instanz<\/li>\n<\/ol>\n<\/ol>\n
                                                                           cd trac\/Testproject\/conf<\/pre>\n
                                                                           vi trac.ini<\/pre>\n
                                                                            \n
                                                                              \n
                                                                            1. Folgende Werte m\u00fcssen so eingef\u00fcgt \/ ge\u00e4ndert werden:<\/li>\n<\/ol>\n<\/ol>\n
                                                                              [components]\ntracext.git.git_fs.csetpropertyrenderer = enabled\ntracext.git.git_fs.gitconnector = enabled\ntracext.git.git_fs.gitwebprojectsrepositoryprovider = enabled\n\n[git]\ncached_repository = false\ngit_bin = \/usr\/bin\/git\ngit_fs_encoding = utf-8\npersistent_cache = false\nshortrev_len = 6\ntrac_user_rlookup = true\nuse_committer_id = false\nuse_committer_time = false\nwiki_shortrev_len = 7\n\n[trac]\nrepository_type = git<\/pre>\n

                                                                              Weitere Optimierungsm\u00f6glichkeiten<\/h2>\n