User Tools

Site Tools


howtos:subversion

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
howtos:subversion [2013/08/30 21:33] – angelegt martinhowtos:subversion [2013/11/12 20:12] (current) martin
Line 1: Line 1:
 ======= Howto: Subversion aufsetzen ======= ======= Howto: Subversion aufsetzen =======
  
-====== Wie wurde SVN konkret für das SE konfiguriert? ======+====== Wie wurde SVN konkret konfiguriert? ======
 Die verwendete Konfiguration setzt auf der Verwendung des Apache im Zusammenwirken mit DAV auf. DAV steht für "Distributed Authoring and Versioning" und bildet die Schnittstelle zwischen dem Apachen und Subversion. Die verwendete Konfiguration setzt auf der Verwendung des Apache im Zusammenwirken mit DAV auf. DAV steht für "Distributed Authoring and Versioning" und bildet die Schnittstelle zwischen dem Apachen und Subversion.
 Die Verbindung erfolgt über SSL. Die Verbindung erfolgt über SSL.
-Jede Benutzerauthentifizierung läuft über das vorhandene LDAP, die Benutzerauthorisierung über zentrale Dateien, die von der Gruppe "staff", der jeder wissenschaftliche Mitarbeiter des SE angehört, editiert werden können. 
-Das Setup wurde auf einem Debian 2.6.12 gemacht. 
-Das Basisverzeichnis lautet bei dieser Konfiguration /svn, die Repository-Struktur ist die folgende: 
  
-/svn/shared/projects+Die Benutzerauthentifikation läuft über ein MySQL-Backend, die Benutzerauthorisierung über zentrale Dateien, sogenannte ACLs.
  
-/svn/shared/LV  +Das Basisverzeichnis lautet bei dieser Konfiguration /svn, die Repository-Struktur ist die folgende:
- +
-/svn/shared/thesis +
  
 /svn/private /svn/private
  
-Jedes dieser Verzeichnisse bildet eine Art "Behälter" (technische Bezeichnung: "SVN-Parent-Path") und stellt eine thematische Gliederung dar. Entsprechend der Ordnernamen können in diesen "Behältern" Repositories angelegt werden, also zB. /svn/shared/staff/mitarbeiter1, wobei "mitarbeiter1" das eigentliche Repository ist, "/svn/shared/staff" der "Behälter".+Jedes dieser Verzeichnisse bildet eine Art "Behälter" (technische Bezeichnung: "SVN-Parent-Path") und stellt eine thematische Gliederung dar. Entsprechend der Ordnernamen können in diesen "Behältern" Repositories angelegt werden, also zB. /svn/private/repo1, wobei "repo1" das eigentliche Repository ist, "/svn/private" der "Behälter".
  
-Wichtig sind außerdem die Verzeichnisse +Wichtig ist außerdem das Verzeichnis /svn/auth
- +
-/svn/scripts +
- +
-/svn/auth +
- +
-Bisher ist für alle WiMis nur das Verzeichnis /svn/auth relevant, in der die zentralen Dateien für die Benutzerauthorisierung liegen. \\ +
-**Achtung: Für Apache2.2 sind zum Teil andere Einstellungen nötig!**+
  
 ====== Installation benötigter Pakete ====== ====== Installation benötigter Pakete ======
-<code bash> 
-apt-get install apache2 apache2-common openssl subversion subversion-tools libapache2-svn 
-</code> 
- 
-Für Apache2.2: 
- 
 <code bash> <code bash>
 apt-get install apache2 apache2.2-common openssl subversion subversion-tools libapache2-svn apt-get install apache2 apache2.2-common openssl subversion subversion-tools libapache2-svn
Line 39: Line 21:
  
 ====== Konfiguration ====== ====== Konfiguration ======
-===== Apache2.0 === +==== Apache ====
-  - SSL-Zertifikat anlegen (siehe [[howto:zertifikate|HowTo: Zertifikate]]) +
-  - /etc/apache2/apache2.conf: +
-   * Einfügen einer Location-Direktive (hier am Beispiel des "private"-Repository-"Behälters"; OHNE die Zeilennummern natürlich, Erläuterung der einzelnen Zeilen siehe unten!): \\ +
- +
-       1 <Location /svn/private/>  +
-       2 DAV svn  +
-       3 SVNParentPath /svn/private/  +
-       4 SSLRequireSSL  +
-       5 AuthType Basic  +
-       6 AuthName "svn>private"  +
-       7 #AuthUserFile /svn/auth/userlist_private  +
-       8 AuthLDAPURL ldaps://foucault.se.uni-hannover.de:636/ou=People,dc=se,dc=uni-hannover,dc=de?uid?sub?(objectClass=*)  +
-       9 AuthzSVNAccessFile /svn/auth/accesslist_private  +
-       10 Require valid-user  +
-       11</Location> +
- +
-====Erläuterungen zur Location-Directive==== +
-Zeile 1: Hier ist der absolute Pfad zum Repository-Behälter anzugeben, **mit abschließendem Slash!** Wenn in einem Browser also auf %%"https://cvs.uni-annover.de/svn/private/"%% zugegriffen wird, greift der Apache, sobald der String, der in Zeile 1 angegeben wird, gefunden wird, auf das Verzeichnis, das in Zeile 3 angegeben ist, zurück. Gibt man also zB anstatt "/svn/private/" "privatrepositories/" an, so greift der Apache, sobald im URL-String der Teilstring "privatrepositories/" beinhaltet ist, auf die Ressource, die in Zeile 3 angegeben ist, zurück. **Vorsicht!** Wenn man zwei Repository-Behälter hat und eine Location-Directive (also Zeile 1) für den einen Repository-Behälter "private/svn" und beim anderen "private/svn/spielerei" heißt, so werden alle Anfragen auf das Repository "spielerei" auf "/private/svn" weitergeleitet, weil die Location-Direktive "private/svn/spieler" den Teilstring "private/svn" enthält und der Apache das erste, bzw. kürzeste Ergebnis, auswählt! +
- +
-Zeile 2: Einbindung des DAV-Moduls für den Apache2, welches für svn (Subversion) angewendet wird +
- +
-Zeile 3: Ressource innerhalb des *nix-Dateisystems, auf das der Apache zurück greifen soll. Es muss der **absolute Pfad** angegeben werden, **MIT ABSCHLIESSENDEM SLASH!!!** +
- +
-Zeile 4: Erzwingt die Verwendung einer gesicherten SSL-Verbindung +
- +
-Zeile 5: Legt den Apache-Authorisierungsmechanismus fest +
- +
-Zeile 6: Steht im Abfragefenster für das Passwort als erklärender Hinweis, für welche Ressource jetzt ein Passwort verlangt wird. +
- +
-Zeile 7: Muss kommentiert bleiben. Für den Fall, dass der LDAP-Server komplett ausfällt, kann dennoch eine Arbeit mit dem SVN-System statt finden, in dem das Kommentarzeichen in Zeile 7 entfernt wird und die Zeile 8 auskommentiert wird. Als nächstes müsste dann in der Datei /svn/auth/userlist_private für jeden, der darin ein Repository besitzt, mit dem Befehl "htpasswd2 -m /svn/auth/userlist_private BENUTZERNAME" ein Passwort angelegt werden. Dies ist zB für den Fall gedacht, dass eine Lehrveranstaltung statt findet und LDAP bis auf weiteres nicht verfügbar ist. So könnte dennoch der Lehrbetrieb aufrecht erhalten werden, indem mit o.g. Befehl vorübergehend mittels dieses Alternativweges auf die Repositories zurück gegriffen werden kann. +
-**Wichtig!** Wenn die Datei /svn/auth/userlist_{private|shared_staff|etc...} noch nicht existiert, muss anstelle von "htpasswd2 -m ..." "htpasswd2 -c -m ..." (c = "create") angegeben werden. Ein "touch /svn/auth/userlist_{private|shared_staff|etc...}" reicht NICHT aus! +
- +
-Zeile 8: Alle Authentifizierungsanfragen werden an den hier aufgeführten LDAP-Server weitergeleitet. +
- +
-Zeile 9: Legt die Authorisierungsdatei für den entsprechenden Repository-Behälter fest. Auch hier ist ebenfalls der absolute Pfad innerhalb des Dateisystems anzugeben, allerdings ohne abschließenden Slash. +
- +
-Zeile 10: Verlangt eine positive Authentifizierung eines gültigen Benutzers. +
- +
-Zeile 11: Schließt die Location-Direktive ab. +
- +
-====Apache2.2====+
   * Die Location-Direktiven werden nicht in der apache2.conf gemacht, sondern in einem eigenen Virtual-Host-Container, welcher in einer Datei im Verzeichnis ///etc/apache2/site-available/// gespeichert wird. Nebst den "üblichen" Einstellungen wie Root-Verzeichnis und Log-Directory wird in dieser Datei zusätzlich für jedes Repository eine Location-Direktive nach unten stehendem Muster angelegt:   * Die Location-Direktiven werden nicht in der apache2.conf gemacht, sondern in einem eigenen Virtual-Host-Container, welcher in einer Datei im Verzeichnis ///etc/apache2/site-available/// gespeichert wird. Nebst den "üblichen" Einstellungen wie Root-Verzeichnis und Log-Directory wird in dieser Datei zusätzlich für jedes Repository eine Location-Direktive nach unten stehendem Muster angelegt:
 <code> <code>
 <Location /svn/private/> <Location /svn/private/>
-    <Location /svn/private/> +        DAV svn 
-         DAV svn +        SVNParentPath /svn/private/ 
-         SVNParentPath /svn/private/ +        AuthzSVNAccessFile /svn/auth/accesslist_private 
-         SSLRequireSSL + 
-         AuthType Basic +        SSLRequireSSL 
-         AuthName "svn>private" + 
-       AuthUserFile /svn/auth/userlist_private +        AuthBasicAuthoritative Off 
-         AuthLDAPURL ldap://schiller.se.uni-hannover.de:389/ou=People,dc=se,dc=uni-hannover,dc=de?uid?sub?(objectClass=*) TLS +        AuthUserFile /dev/null 
-         AuthzLDAPAuthoritative On +        AuthMySQL On 
-         AuthBasicAuthoritative Off +        AuthName "SVN" 
-         AuthBasicProvider ldap +        AuthType Basic 
-         AuthzSVNAccessFile /svn/auth/accesslist_private +        Auth_MySQL_Host localhost 
-         Require valid-user +        Auth_MySQL_User svnauthdbuser 
-    </Location> +        Auth_MySQL_Password ************ 
-</Location>  +        AuthMySQL_DB authdb 
-</code> +        AuthMySQL_Password_Table mysql_auth 
-Neu sind die Einträge "AuthBasicAuthoriztative Off", "AuthzLDAPAuthoritative On", sowie "AuthBasicProvider ldap". Auch die AuthLDAPURL hat sich verändert, man **beachte das TLS am Ende der Zeile!**\\ +        Auth_MySQL_Username_Field username 
-Da LDAP über TLS verschlüsselt kommuniziert, ist eine Veränderung in der Hauptkonfigurationsdatei des Apache nötig. Am Ende der Datei //etc/apache2/apache2.conf// werden folgende Einträge ergänzt: +        Auth_MySQL_Password_Field passwd 
-<code> +        Auth_MySQL_Empty_Passwords Off 
-LDAPTrustedGlobalCert CERT_BASE64 /etc/ssl/certs/certchain.pem +        Auth_MySQL_Encryption_Types PHP_MD5 
-LDAPTrustedMode STARTTLS +        Auth_MySQL_Authoritative On 
-LDAPVerifyServerCert On+        require valid-user 
 +</Location>
 </code> </code>
-Das angegebene CA-Cert muss sich natürlich an entsprechender Stelle befinden. 
  
 Außerdem müssen einige Module installiert, bzw. aktiviert werden: Außerdem müssen einige Module installiert, bzw. aktiviert werden:
-<code bash>apt-get install libapache2-mod-ldap-userdir libapache-authznetldap-perl</code> +<code bash>apt-get install libapache2-mod-auth-mysql</code> 
-<code bash>a2enmod userdir authnz_ldap</code>+<code bash>a2enmod userdir auth_mysql</code>
 ==== Anlegen des SVN-Systems ==== ==== Anlegen des SVN-Systems ====
-Je nachdem, wie man in der apache2.conf (s.o.) die Struktur für die Repository-Behältnisse vorgesehen hat, müssen entsprechend auch alle Ordner angelegt werden. Im Beispiel oben wird das Verzeichnis "/svn/private/" als Basisverzeichnis definiert und der Zugriff auf die Datei accesslist_private im Verzeichnis /svn/auth/ verlangt. Die hiesige Umsetzung am SE basiert auf den folgenden Befehlen:+Je nachdem, wie man in der apache2.conf (s.o.) die Struktur für die Repository-Behältnisse vorgesehen hat, müssen entsprechend auch alle Ordner angelegt werden. Im Beispiel oben wird das Verzeichnis "/svn/private/" als Basisverzeichnis definiert und der Zugriff auf die Datei accesslist_private im Verzeichnis /svn/auth/ verlangt. Die hiesige Umsetzung basiert auf den folgenden Befehlen:
 <code bash> <code bash>
-mkdir /svn +mkdir -p /svn/auth
-mkdir /svn/shared +
-mkdir /svn/shared/staff +
-mkdir /svn/shared/LV +
-mkdir /svn/shared/thesis +
-mkdir /svn/auth +
-mkdir /svn/scripts (siehe unten)+
 </code> </code>
-Alle Verzeichnisse (bis auf "scripts" müssen www-data gehören (Benutzername des Apache2) und als Gruppe "staff" haben, damit alle WiMis auch auf das Dateisystem lesend Zugriff haben.+Alle Verzeichnisse müssen www-data gehören (Benutzername des Apache2).
  
 Entsprechend: Entsprechend:
  
 <code bash> <code bash>
-chown -R www-data:staff /svn+chown -R www-data /svn
 chmod -R 750 /svn chmod -R 750 /svn
 </code> </code>
Line 136: Line 71:
 <code bash> <code bash>
 touch /svn/auth/accesslist_private touch /svn/auth/accesslist_private
-touch /svn/auth/accesslist_shared_staff 
-touch /svn/auth/accesslist_shared_LV 
-touch /svn/auth/accesslist_shared_thesis 
 </code> </code>
  
 ...und die Rechte angepasst werden: ...und die Rechte angepasst werden:
 <code bash> <code bash>
-chown www-data:staff /svn/auth/*+chown www-data /svn/auth/*
 chmod 660 /svn/auth/* chmod 660 /svn/auth/*
 </code> </code>
- 
- 
  
 ====Anlegen neuer Repositories==== ====Anlegen neuer Repositories====
Line 185: Line 115:
  
 trunk/java-ftp-client\\ trunk/java-ftp-client-gui\\ trunk/java-google-mars trunk/java-ftp-client\\ trunk/java-ftp-client-gui\\ trunk/java-google-mars
- 
-Anmerkung: Mit dem Eclipse-Plugin [[http://www.polarion.org/index.php?page=download&project=subversive|Subversive]] wird automatisch ein Verzeichnis "trunk" erstellt, welches das Hauptarbeitsverzeichnis darstellt. 
  
 Jetzt hat Person1 die Kernanwendung seines Java-FTP-Clients beendet und möchte seine Arbeit nun veröffentlichen. Also erstellt er einen "branch" (ebenfalls mit Subversive), sodass seine Repository-Struktur nun so aussieht: Jetzt hat Person1 die Kernanwendung seines Java-FTP-Clients beendet und möchte seine Arbeit nun veröffentlichen. Also erstellt er einen "branch" (ebenfalls mit Subversive), sodass seine Repository-Struktur nun so aussieht:
Line 210: Line 138:
 Die komplette Location-Direktive - hier am Beispiel "projects" - sieht dann so aus: Die komplette Location-Direktive - hier am Beispiel "projects" - sieht dann so aus:
 <code> <code>
-<Location /svn/shared/projects/> +<Location /svn/private/> 
- DAV svn +        DAV svn 
- SVNParentPath /svn/shared/projects+        SVNParentPath /svn/private/ 
- SSLRequireSSL +        AuthzSVNAccessFile /svn/auth/accesslist_private 
- AuthType Basic + 
- AuthName "svn>shared>projects" +        SSLRequireSSL 
- #AuthUserFile /svn/auth/userlist_shared_staff + 
- AuthLDAPURL ldaps://foucault.se.uni-hannover.de:636/ou=People,dc=se,dc=uni-hannover,dc=de?uid?sub?(objectClass=*) +        AuthBasicAuthoritative Off 
- AuthzSVNAccessFile /svn/auth/accesslist_shared_projects +        AuthUserFile /dev/null 
- Satisfy Any +        AuthMySQL On 
- Require valid-user+        AuthName "SVN" 
 +        AuthType Basic 
 +        Auth_MySQL_Host localhost 
 +        Auth_MySQL_User svnauthdbuser 
 +        Auth_MySQL_Password 6udCuuiLmRe8 
 +        AuthMySQL_DB authdb 
 +        AuthMySQL_Password_Table mysql_auth 
 +        Auth_MySQL_Username_Field username 
 +        Auth_MySQL_Password_Field passwd 
 +        Auth_MySQL_Empty_Passwords Off 
 +        Auth_MySQL_Encryption_Types PHP_MD5 
 +        Auth_MySQL_Authoritative On 
 +        Satisfy Any 
 +        require valid-user
 </Location> </Location>
 </code> </code>
Line 258: Line 199:
 ====Offizielles Handbuch==== ====Offizielles Handbuch====
 {{howto:svn-book.pdf | SVN-Book}} {{howto:svn-book.pdf | SVN-Book}}
- 
-====Interne Verweise==== 
-[[codeschnipsel:mkrepository|Quelltext zum Skript "mkrepository"]] 
- 
-[[howto:subclipse_in_eclipse_integrieren|Howto: Subclipse in Eclipse integrieren]] (Hinweis dazu: Bitte die Vorbemerkung unbedingt beachten!) 
howtos/subversion.1377891200.txt.gz · Last modified: 2013/08/30 21:33 by martin · Currently locked by: 172.21.0.5,216.73.216.147