Subversion einzurichten ist ja im Grunde kein Hexenwerk, dav_svn-Modul installieren/laden, Repo erstellen, Configs anpassen und dann vielleicht noch etwas Feintuning in Sachen Rechte etc.. Das wars eigentlich schon.
Gut, dann kanns ja losgehen.
Das Modul findet sich, sobald es installiert ist in dem Verzeichnis /etc/apache2/mods-available, das zugehörige Paket heit unter Debian übrigens “libapache2-svn“. apt-get install… kennt ihr ja. 
Sie heißen dann dav_svn.load und dav_svn.conf, wenn die beiden noch nicht als Softlink im Apache-Verzeichnis unter mods-enabled aufgeführt sind, added ihr sie ganz einfach mit einem zarten
ln -s /etc/apache2/mods-available/dav_svn.conf \
/etc/apache2/mods-enabled/dav_svn.conf
ln -s /etc/apache2/mods-available/dav_svn.load \
/etc/apache2/mods-enabled/dav_svn.load
Als nächstes erstellt ihr ein Repository, sobald subversion installiert ist, habt ihr auch ein kleines Werkzeug svnadmin zur Hand und wie bei jedem svn-Befehl hilft einem svn**** help zur Seite.
“create” heißt der Befehl, den wir brauchen.
svnadmin create --fs-type fsfs /pfad/zum/repo
Ich habe für meine Repositories extra das Verzeichnis /var/local/svn angelegt, sprich hier wäre dann etwas wie “/var/local/svn/vb-im” anzugeben.
Den Typ fsfs habe ich gewählt, weil ich gelesen habe, dass es unter Debian besser laufen solle, muss ich mal so gestehen. Ich könnt es natürlich auch lassen, ist im Endeffekt praktisch eh nur für den Effekt. Aber hey, wenn man kann…
Nun wählt ihr euch die httpd.conf eures Vertrauens, vserver, subdomain, völlig banane.
(Sprich eine der Dateien, die in /etc/apache2/sites-available liegen und in -enabled wieder einen symbolischen Link haben)
Bei mir hat sich da schon ein Problem in den Weg gestellt: durch meinen Bruder haben wir ein Verwaltungssystem installiert, ispCP. Das hat wohl die nette Art, bei der kleinsten Änderung seine Configs neu zu schreiben. Und das Problem dabei? Nunja, wenn man die Anpassungen, die gleich folgen werden, in die ispCP-eigenen httpd-Configs reinhaut, dann werden sie wohl nicht sehr lange dort überleben… außer ihr benutzt ispCP dann nie wieder.
Ein Kommentar von AS darauf: ganz von Hand oder garnicht, beides verträgt sich nicht. Verständlich.
Aber wie dem auch sei, ich habe jetzt mal eine Kleinigkeit ausprobiert. Ich habe einfach mal ganz dreist die Zeilen zu der Subdomain, die ich nutzen wollte, aus der ispCP-Config gelöscht und in ein externes File geschoben. Bis dato läufts, aber ich garantiere für nichts =P
Um wieder zum Thema zu kommen, folgende Zeilen sind nur wichtig, die ergänzt werden müssen:
<Location /svn>
DAV svn
SVNParentPath /var/local/svn
AuthzSVNAccessFile /var/local/svn/access-subversion
Require valid-user
AuthType Basic
AuthName "SVN Repos"
AuthUserFile /var/local/svn/.htpasswd
</Location>
Der Pfad im Location-Tag bestimmt, wo euer SVN-Verzeichnis relativ zum Host, der dort konfiguriert wird, eingehängt wird. Sprich in meinem Fall wäre das
http://sub.domain.tld/svn
Die meisten Optionen sind wohl selbsterklärend, aber SVNParentPath wird immer gern verwechselt, denn es gibt auch SVNPath, aber das erste referenziert auf den übergeordneten Pfad des/der Repositories und letzteres direkt auf eines der kleinen, süßen selbst. Also aufpassen, sonst gibt es in nullkommanix ein 403 und nix geht mehr.
Die letzten beiden Grundlage, um per http:// auschecken zu können, sind die .htpasswd-Datei und die access-subversion-Datei, sie sagen, wer rein kann und wo und wer nicht.
Für die erste gibt es gleich ein passendes Tool mit dem selben Namen, htpasswd, das dieser Datei verschlüsselte Passwörter geben kann. MD5, SHA, CRYPT, unverschlüsselt, wie man eben grade lustig ist.
htpasswd -b .htpasswd dranja banane
…erstellt den Zugang für die gute dranja mit dem Passwort “banane”, wenn ihr die Option -b weglasst, fragt er euch zwei mal nach einem Passwort, ala sudo, nur doppelt. Wenn ihr das erste mal eine Authorisierung eintragen wollt, übergebt ihr zusätzlich noch -c , damit das File angelegt wird.
So, und für die Priese Sicherheit gleich ein
chmod 640 .htpasswd
drüber.
Bei dem access-File wird es jetzt interessant, das ist ein einfaches, wie geniales System, hier geht es einfach nur darum, den Benutzern Rechte auf Repositories und Verzeichnisse zu geben. Und – irgendwie selbstverständlich – ist es den Unix-Dateirechten dabei nicht unähnlich.
Folgendes, ich habe ein SVN-Hauptverzeichnis, das in der access-Datei als “/” bezeichnet wird, dabei handelt es sich um den in der httpd.conf angegebenen SVNParentPath, also bei mir /var/local/svn/.
Ein Beispiel:
[groups]
admin = se, bo
[/]
@admin = rw
* =
[vb-im:/]
gk = rw
mk = r
[vb-im:/trunk]
mk = rw
Die beiden User se und bo sind der Gruppe “admin” zugeteilt, sie haben im Rootdir volle Rechte, die erstecken sich damit auch automatisch auf alle Repos, die darin enthalten sind.
gk ist Projektleiter von vb-im und hat damit Lese- und Schreibrechte im gesammten vb-im-Repo, während mk nur in trunk wüten kann, trotzdem kann er aber den gesammten vb-im-Baum einsehen.
Kurz gesagt:
drei Rechtekombinationen: “rw”, “r” und ” ” (also keine Rechte)
und drei Arten von Nutzern: @XY (Gruppe), ZX (User) und *, also alle, die nicht explizit angegeben sind.
Jetzt noch einmal schnell apache neu starten und schon kann es losgehen, alles bereit für den ersten Checkout?
/etc/init.d/apache2 restart
…
svn co http://sub.domain.tld/svn/repo
Solltet ihr einen 403-Fehler bekommen, überprüft die Dateirechte. Die Repos müssen www-data (apache) gehören, die beiden Rechteverwaltungsdateien lesbar sein (blos nicht beschreibbar von www-data!).
Sind die Pfade richtig, ist der Apache wieder sauber hochgekommen etc.?
Abgesehen von dem abschließenden Checkout dürft ihr alles als root ausführen, naja, eigentlich habt ihr auch keine Wahl, also nur zu.
Eine Kleinigkeit fehlt natürlich noch: Commitmails.
Allerdings sind mir da noch ein paar Schönheitsfehler drin, deswegen gibt es das später, die Grundkonfiguration geht ja auch, nur… es geht besser. Wenn es euch trotzdem interessiert, ein Template dazu liegt im Repo unter hooks. “post-commit.tmpl”
MßG,
Knorke!
P.S.: Mittlerweile frage ich mich, was ich mich damals so angestellt habe… ist doch ganz einfach =)