Subversion und XCode 2.1

andi.reidies

Aktives Mitglied
Thread Starter
Dabei seit
08.02.2005
Beiträge
420
Reaktionspunkte
0
Hi Folks,

mir ist es jetzt endlich gelungen, mein XCode 2.1 und Subversion miteinander "zu verheiraten".

Das war gar nicht so leicht, häufen sich doch auch auf der Apple-Mailing-Liste Beschwerden, dass XCode 2.1 bspw. nicht mit svnserve zusammenspielt (das Repository wird immer als OFFLINE erkannt).

Der Tipp dabei ist, nicht svn:// als Protokoll, sondern stattdessen svn+ssh:// zu verwenden. Damit läuft meine lokale XCode Installation jetzt sauber und ich kann aus- resp. einchecken nach Lust und Laune ;-)

Tja, was muss man dafür tun:

* man besorge sich ein Subversion Mac OS X Package (bspw. hier: http://metissian.com/projects/macosx/subversion/).

* lokal installieren (installiert sich nach /usr/local/bin).

* ist der /usr/local/bin nicht im Standard-Pfad (einfach mal versuchen svn aufzurufen), dann muss es noch nachträglich dazugefügt werden, dazu in /etc/bashrc folgenden Eintrag vornehmen:

Code:
PATH="/bin:/sbin:/usr/bin:/usr/sbin"
PATH=$PATH:/usr/local/bin
export PATH

* ein neuen User (e.g. svnadmin) und eine neue Gruppe (e.g. svnusers) anlegen

* ein neues Verzeichnis (das REPOSITORY) anlegen und die Rechte auf den neuen User / Gruppe legen (per sudo im Terminal)

* mittels "sudo -u <svnuser> svnadmin create <Repository-Path>" ein neues SVN Repository erstellen lassen

* die angehängte plist nach /Library/LaunchDaemons kopieren (vorher müssen die <svnuser>, <svngroup> und <Repository-Path> entsprechend geändert werden) - dies gilt nur für TIGER !!

* dann im Terminal "sudo launchctl load /Library/LaunchDaemons/org.tigris.subversion.svnserv.plist" eingeben

* im <Repository-Path> muss unter ./conf die Dateien svnserv.conf und passwd angepasst werden (siehe Kommentare in den Dateien). Wichtig ist hierbei, die Rechte für <other> komplett zu entfernen (SECURITY-RISK) !!

* über "sudo launchctl start org.tigris.subversion.svnserv" den Dienst starten

* zunächst über "svn list svn://localhost" prüfen, ob der Dienst läuft und angesprochen werden kann

Ab hier könnte man über das Protokoll "svn://" bereits super arbeiten, doch wie bereits eingangs erwähnt, ist die Unterstützung durch XCode buggy und man würde auf die Kommandozeile zurückgreifen müssen.....

....stattdessen kann man nun an die SSH Konfiguration gehen, damit SVN über SSH möglich ist.

Dazu jedoch später mehr.....
 
Zuletzt bearbeitet:
SSH einrichten....

Zum Einrichten der SSH Verbindung muss in den Systemeinstellungen unter SHARING der "Remote Login" freigeschaltet werden.

Dadurch werden entsprechende Konfigurationsdateien unter /etc erstellt (ls -al ssh*).

Hier muss beachtet werden, dass Xcode nur über public/private Key Authorisierung arbeitet und daher zwingend das DSA Verschlüsselungsverfahren für die Verbindung vorraussetzt.

Daher in der Datei /etc/sshd_config nach "Protocol" suchen und das Kommentarzeichen "#" entfernen und als Protocol NUR die "2" stehen lassen.

In der Datei müssen dann weiterhin der Link auf das Key-File /etc/ssh_host_dsa_key und die Einstellung für's AuthorizedKeysFile freigeschaltet werden ("#" entfernen) und unter RSAAuthentication ein "no" gesetzt werden.

Den SSH Dienst in der Systemsteuerung NEU starten.

Jetzt muss für den lokalen Benutzer ein SSH Key nach DSA erstellt werden. Dazu muss im Terminal "ssh-keygen -d" eingegeben werden, wobei weitere Abfragen (bei der Passphrase kann man ein Passwort für die Verbindung hinterlegen) mit ENTER zu bestätigen sind.

Dadurch wird im Home-Verzeichnis ein Directory .ssh angelegt. Hier muss das File .ssh/id_dsa.pub nach .ssh/authorized_keys kopiert werden.

Diese authorized_keys Datei muss dann mittels Editor um folgenden Eintrag erweitert werden:

command="/usr/local/bin/svnserve.ssh -t -r <Repository-Path>" ssh-dss .....

Die command-line muss dabei in der ERSTEN ZEILE vor dem dort bereits stehenden ssh-dss <key> ! Dadurch wird angegeben, dass mit zustandekommen der Verbindung per SSH automatisch auch ein svnserve-Prozess (mit der angegebenen Kommandozeile) gestartet wird.

Damit jetzt die eingecheckten Änderungen auch von anderen Mitgliedern der Gruppe benutzt werden können, muss man ein eigenes Start-Skript für den SVNSERVE Prozess schreiben, damit die umask richtig gesetzt wird:

sudo nano /usr/local/bin/svnserve.ssh
Code:
#!/bin/sh
umask 002
/usr/local/bin/svnserve "$@"

und danach das Skript noch ausführbar machen (chmod).

Damit der Zugriff über svn+ssh auf das Repository funktioniert, muss der User in die Gruppe der <svngroup> aufgenommen werden (Erinnerung: nur der <svnuser> und die <svngroup> sollten Zugriff auf die <Repository-Path>/conf/* Dateien haben, damit kein anderer auf die dort enthaltenen Benutzer-/Passwort-Informationen zugreifen darf.

Zur Aktivierung der neuen Gruppenzugehörigkeit musste ich den Mac neustarten, da ansonsten die nachfolgenden Aktionen nicht möglich waren....

EDIT: es geht auch so:

Code:
 sudo nicl . -create /groups/svnusers
% sudo nicl . -append /groups/svnusers gid 700
% sudo nicl . -append /groups/svnusers users <user1> <user2> ... <userN>
% lookupd -flushcache
% memberd -r

Über den Befehl "groups" kann man checken, ob der angemeldete Bediener zur Gruppe gehört. Dies ist notwendig, da durch das Protokoll svn+ssh:// auf der Server-Seite (hier:lokal) ein neuer svnserve-Prozess mit den Rechten des SSH-Users gestartet wird. Hätte dieser keinen Zugriff auf <Repository-Path>/conf/*, so würde die nachfolgende Anmeldung an's SVN-Repository nicht funktionieren.

Wenn alle Daten stimmen, kann nun per "svn list svn+ssh://localhost" geprüft werden, ob der Zugriff erfolgreich verläuft....

...wenn dem so ist, kann nun per "svn import" eine bestehende Verzeichnisstruktur ins Repository übertragen oder per "svn checkout" Files aus dem bestehenden Repository in ein Working-Directory ausgecheckt werden.

Xcode kann nun mit den versteckten Status-Informationen (.svn) im Working-Directory eine Verbindung zum Repository aufnehmen und bietet über den Menüpunkt SCM entsprechende Verwaltungseinträge an....

Danksagungen
Vielen Dank an alle, die sich bei der Erstellung und Vervollständigung des Tutorials beteiligt haben.

Vor allem mein Dank an die Mitglieder gritsch und david des Mac OS X Entwicklerforums, die an der einen und anderen Stelle noch auf Verbesserungen aufmerksam gemacht haben.... und mich mal wieder daran erinnerten, dass es besser ist, gleich alles mitzuschreiben, statt im Nachhinein, wenn alles funktioniert, nachvollziehen zu wollen, was man alles geändert hat....;-)
 
Zuletzt bearbeitet:
Zurück
Oben Unten