{"id":349,"date":"2009-06-09T17:48:22","date_gmt":"2009-06-09T15:48:22","guid":{"rendered":"http:\/\/blog.speedyj.de\/?p=349"},"modified":"2020-04-20T21:18:02","modified_gmt":"2020-04-20T19:18:02","slug":"svn-wamp","status":"publish","type":"post","link":"https:\/\/blog.speedyj.de\/?p=349","title":{"rendered":"SVN &#038; WAMP"},"content":{"rendered":"<p>Im Netz findet man jede Menge Anleitungen, wie man SVN unter WAMP einrichtet. Trotzdem stand ich mal wieder mitten im Wald. Ich konnte zwar SVN in den Apache integrieren, jedoch lie\u00df sich der Apache danach nur noch auf der Kommandozeile starten, und nicht mehr \u00fcber das WAMP-Tray-Icon. Aber beginnen wir von vorn&#8230;<\/p>\n<p>Bereits seit l\u00e4ngerem habe ich den WAMP-Server inklusive xdebug-Plugin f\u00fcr die PHP-Entwicklung im Einsatz. Diesen wollte ich nun um die SVN-Integration erweitern, ohne einen zus\u00e4tzlichen Apache installieren zu m\u00fcssen. Hier zun\u00e4chst meine vorhandene Konfiguratoin:<\/p>\n<p><span style=\"color: #888888;\">Wamp-Verzeichnis: D:\\wamp<br \/>\nApache-Version: 2.2.11<br \/>\nMySQL-Version: 5.1.33<br \/>\nPHP-Version: 5.2.9-2<\/span><\/p>\n<p><strong>Schritt 1 &#8211; Download<\/strong><br \/>\nAls erstes habe ich mir die aktuelle Version (Version 1.6.2) von Subversion als ZIP-Archiv f\u00fcr den Apache 2.2 geladen.\u00a0Es gibt f\u00fcr Apache 2.0 und 2.2 separate\u00a0Downloads .. daher muss man hier auf die Vorraussetzung sehr genau achten. Die \u00a0Einen Installer wollte ich nicht verwenden. F\u00fcr den Apache 2.2 kann man das ZIP-Archiv unter nachfolgendem Link downloaden &#8230; es ist der letzte Eintrag in der Tabelle.<\/p>\n<p><a href=\"http:\/\/subversion.tigris.org\/servlets\/ProjectDocumentList?folderID=8100\" target=\"_blank\" rel=\"noopener noreferrer\">Download SVN Binaries f\u00fcr Apache 2.2.x<\/a><\/p>\n<p><strong>Schritt 2 &#8211; Entpacken<\/strong><br \/>\nIch habe mich entschieden, die SVN-Programmdateien in die Verzeichnisstruktur von WAMP zu integrieren. In meinem Falls hab ich das Archiv nach &#8222;D:\\wamp\\bin&#8220; entpackt. Die folgende Abbildung zeigt die Verzeichnisstruktur.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-360\" title=\"wamp_svn_directories\" alt=\"wamp_svn_directories\" src=\"http:\/\/blog.speedyj.de\/wp-content\/uploads\/2009\/06\/wamp_svn_directories.png\" width=\"203\" height=\"366\" srcset=\"https:\/\/blog.speedyj.de\/wp-content\/uploads\/2009\/06\/wamp_svn_directories.png 203w, https:\/\/blog.speedyj.de\/wp-content\/uploads\/2009\/06\/wamp_svn_directories-166x300.png 166w\" sizes=\"auto, (max-width: 203px) 100vw, 203px\" \/><\/p>\n<p><strong>Schritt 3 &#8211; Konfigurieren von Apache<\/strong><br \/>\nViele Anleitung im Netz und auch die readme-Datei von SVN empfiehlt an dieser Stelle die .so-Dateien in den &#8222;modules&#8220;-Ordner von Apache zu kopieren und danach den Systempfad zu erweitern, damit Apache auf alle Bibliotheken von SVN zugreifen kann. Das hat mich in gro\u00dfe Schwierigkeiten gebracht, weshalb ich hier einen anderen Weg gehen m\u00f6chte. Warum, kann weiter unten nachgelesen werden.<\/p>\n<p>Bei meinem hier gezeigten L\u00f6sungsansatz m\u00fcssen keinerlei Dateien in den Apache kopiert werden, noch muss die PATH-Umgebungsvariable angepasst werden.<\/p>\n<p>Zun\u00e4chst \u00f6ffnet man die httpd.conf-Datei \u00fcber das WAMP-Traymen\u00fc oder direkt \u00fcber einen Editor und sucht nach den folgenden beiden Zeilen:<\/p>\n<pre><span style=\"color: #888888;\">#LoadModule dav_fs_module modules\/mod_dav_fs.so\r\n#LoadModule dav_module modules\/mod_dav.so<\/span><\/pre>\n<p>Dies sind zwei in Apache bereits enthaltene Module die man f\u00fcr die Nutzung von SVN ben\u00f6tigt. Daher muss man am Anfang jeder Zeile das &#8222;#&#8220;-Zeichen l\u00f6schen.<\/p>\n<p>Jetzt m\u00fcssen noch zwei neue Module hinzugef\u00fcgt werden, die nicht im Apache enthalten sind. Die betreffenden Module befinden sich im SVN-Ordner, und das ist gut so. Wenn der Apache diese Module direkt aus dem SVN-Bin-Verzeichnis l\u00e4dt, k\u00f6nnen auch alle weiteren ben\u00f6tigten SVN-Bibliotheken fehlerfrei geladen werden. Um das zu erreichen, f\u00fcgt man die beiden folgenden Zeilen in die httpd.conf-Datei ein:<\/p>\n<pre><span style=\"color: #888888;\">LoadModule dav_svn_module \"..\/..\/svn-win32-1.6.2\/bin\/mod_dav_svn.so\"\r\nLoadModule authz_svn_module \"..\/..\/svn-win32-1.6.2\/bin\/mod_authz_svn.so\"<\/span><\/pre>\n<p>Der Pfad zu den Modulen ist relativ angegeben. Falls man einmal die Wamp-Installation verschieben muss, funktionieren die SVN-Module dennoch. Wir sind aber noch nicht ganz fertig. Ein bestimmte Pfad auf unserem Webserver soll zuk\u00fcnftig den Zugriff auf das SVN-Repository erm\u00f6glichen. Hierf\u00fcr f\u00fcgen wir am Ende folgenden Abschnitt in die httpd.conf-Datei ein.<\/p>\n<p><span style=\"color: #888888;\">&lt;Location \/svn&gt;<br \/>\nDAV svn<br \/>\nSVNListParentPath on<br \/>\nSVNParentPath D:\\wamp\\svn_repository<br \/>\n#SVNIndexXSLT &#8222;\/svnindex.xsl&#8220;<br \/>\n#AuthType Basic<br \/>\n#AuthName &#8222;Subversion-Projektarchive&#8220;<br \/>\n#AuthUserFile passwd<br \/>\n#AuthzSVNAccessFile svnaccessfile<br \/>\n#Require valid-user<br \/>\n&lt;\/Location&gt;<\/span><\/p>\n<p>Kurz noch zur Erkl\u00e4rung: In der ersten Zeil geben wir an, dass wir die Adresse &#8222;\/svn&#8220; des Webservers konfigurieren wollen. Die zweite Zeile aktiviert SVN. Die n\u00e4chsten beiden Einstellungen (SVNListParentPath und SVNParentPath) legen ein Verzeichnis fest, wo sich mehrere SVN Projekt-Archive befinden k\u00f6nnen. Das hat den Vorteil, dass man \u00fcber eine URL mehrere SVN-Projekte erreichen kann und gleichzeitig das Anlegen eines neuen Projektarchives durch das Anlegen eines neuen Ordner erm\u00f6glicht wird. Die nachfolgenden Zeilen richten die Zugangskontrolle ein, die ich hier jedoch deaktiviert habe. Wer die Benutzersteuerung einrichten m\u00f6chte, kann <a href=\"http:\/\/svnbook.red-bean.com\/de\/1.7\/svn.serverconfig.httpd.html#svn.serverconfig.httpd.authn\" target=\"_blank\" rel=\"noopener noreferrer\">hier<\/a> mehr erfahren.<\/p>\n<p>Nun speichern wir die vorgenommen \u00c4nderung der httpd.conf-Datei. Man muss noch sicherstellen, dass das oben\u00a0mittels &#8222;SVNParentPath&#8220; angegeben Verzeichnis auch existiert.\u00a0\u00dcber den Explorer kann man das noch kurzer Hand erstellen. Zum Schlu\u00df w\u00e4hlt man aus dem Men\u00fc des Wamp-TrayIcons den Eintrag &#8222;Restart All Services&#8220;.<\/p>\n<p><strong>Schritt 4 &#8211; Testen der Einrichtung<\/strong><br \/>\nNat\u00fcrlich wollen wir jetzt wissen, ob unser SVN jetzt auch funktioniert. Daf\u00fcr ben\u00f6tigt man einen Browser. Am einfachsten ist wieder das Wamp-TrayIcon. Aus dem Men\u00fc einfach &#8222;localhost&#8220; ausw\u00e4hlen und der Standard-Browser wird ge\u00f6ffnet. Nun noch die Adresse auf &#8222;http:\/\/localhost\/svn&#8220; ge\u00e4ndert &#8230;. und man sieht &#8230; nun nicht viel.<\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/blog.speedyj.de\/wp-content\/uploads\/2009\/06\/localhost_svn.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-375\" title=\"localhost_svn\" alt=\"localhost_svn\" src=\"http:\/\/blog.speedyj.de\/wp-content\/uploads\/2009\/06\/localhost_svn-300x202.png\" width=\"300\" height=\"202\" srcset=\"https:\/\/blog.speedyj.de\/wp-content\/uploads\/2009\/06\/localhost_svn-300x202.png 300w, https:\/\/blog.speedyj.de\/wp-content\/uploads\/2009\/06\/localhost_svn.png 727w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>Aber es funktioniert soweit. Jetzt m\u00fcssen wir noch ein Projektarchiv in unserem Repository einrichten. Dazu sind folgende Schritte notwendig:<\/p>\n<p><span style=\"text-decoration: underline;\">1) Erstellen eines neuen Ordner<\/span><\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/blog.speedyj.de\/wp-content\/uploads\/2009\/06\/svn_new_folder.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-376\" title=\"svn_new_folder\" alt=\"svn_new_folder\" src=\"http:\/\/blog.speedyj.de\/wp-content\/uploads\/2009\/06\/svn_new_folder-300x171.png\" width=\"300\" height=\"171\" srcset=\"https:\/\/blog.speedyj.de\/wp-content\/uploads\/2009\/06\/svn_new_folder-300x171.png 300w, https:\/\/blog.speedyj.de\/wp-content\/uploads\/2009\/06\/svn_new_folder.png 625w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p><span style=\"text-decoration: underline;\">2) Anlegen des Projektarchives<br \/>\n<\/span>Mit Hilfe von TortoiseSVN initialisieren wir nun unseren eben angelegten Ordner.<\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/blog.speedyj.de\/wp-content\/uploads\/2009\/06\/svn_create_repo.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-378\" title=\"svn_create_repo\" alt=\"svn_create_repo\" src=\"http:\/\/blog.speedyj.de\/wp-content\/uploads\/2009\/06\/svn_create_repo-300x121.png\" width=\"300\" height=\"121\" srcset=\"https:\/\/blog.speedyj.de\/wp-content\/uploads\/2009\/06\/svn_create_repo-300x121.png 300w, https:\/\/blog.speedyj.de\/wp-content\/uploads\/2009\/06\/svn_create_repo.png 502w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>Das angelegt Verzeichnis kann man nun auch im Webbrowser wiederfinden. Die Einrichtung ist nun vollends abgeschlossen und man kann nun weitere Ordner und Dateien\u00a0in das angelegte Projektarchiv imortieren.<\/p>\n<p><strong>Warum?<br \/>\n<\/strong>Die meisten Anleitungen im Netz empfehlen die innerhalb SVN zu findenden .so-Module in das &#8222;modules&#8220;-Verzeichnis des Apache zu kopieren. Das wiederum f\u00fchrt dazu, dass man entweder bestimmte DLLs von SVN in das bin-Verzeichnis des Apache kopiert oder das SVN-Bin-Verzeichnis in den systemweiten Pfad aufnimmt. Leider habe ich dabei einen Fehler gemacht und das SVN-Bin-Verzeichnis nur in die Pfadvariable meines Windowsbenutzer aufgenommen. Durch diesn Fehler lie\u00df sich der Apache \u00fcber das Wamp-TrayIcon nicht mehr starten. In der Ereignisanzeige fand ich sp\u00e4ter folgende Fehlermeldung:<\/p>\n<div><span lang=\"DE\"><span style=\"color: #888888;\">The Apache service named reported the following error:<br \/>\n&gt;&gt;&gt; httpd.exe: Syntax error on line 86 of D:\/wamp\/bin\/apache\/Apache2.2.11\/conf\/httpd.conf: Cannot load D:\/wamp\/bin\/apache\/Apache2.2.11\/modules\/mod_dav_svn.so into server: Das angegebene Modul wurde nicht gefunden.<\/span><\/span><\/div>\n<div><span lang=\"DE\">Gleichzeitig konnte ich jedoch die &#8222;httpd.exe&#8220; unter meinem Benutzer aus einer Shell starten und mit dem Webserver inkl. SVN fehlerfrei arbeiten. Erst nach einiger Zeit wurde mir klar, dass der Apache vom Wamp-TrayIcon als Dienst (unter dem lokalen Dienste-Account) gestartet wird und daher meine lokal definierten Umgebungsvariablen (und somit auch der erweiterte Pfad) nicht verwendet wurden. Daher suchte ich nach einer eigenen L\u00f6sung, mit welcher ich dem Problem zuk\u00fcnftig aus dem Weg gehen kann.<\/span><\/div>\n<p><span lang=\"DE\"><a href=\"http:\/\/www.wampserver.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Wampserver Homepage<\/a><br \/>\n<a href=\"http:\/\/tortoisesvn.net\/docs\/release\/TortoiseSVN_de\/index.html\" target=\"_blank\" rel=\"noopener noreferrer\">Handbuch\u00a0zu TortoiseSVN<\/a><br \/>\nSubversion Download Page<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Im Netz findet man jede Menge Anleitungen, wie man SVN unter WAMP einrichtet. Trotzdem stand ich mal wieder mitten im Wald. Ich konnte zwar SVN in den Apache integrieren, jedoch lie\u00df sich der Apache danach nur noch auf der Kommandozeile starten, und nicht mehr \u00fcber das WAMP-Tray-Icon. Aber beginnen wir von vorn&#8230; Bereits seit l\u00e4ngerem [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9],"tags":[],"class_list":["post-349","post","type-post","status-publish","format-standard","hentry","category-tools"],"_links":{"self":[{"href":"https:\/\/blog.speedyj.de\/index.php?rest_route=\/wp\/v2\/posts\/349","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.speedyj.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.speedyj.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.speedyj.de\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.speedyj.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=349"}],"version-history":[{"count":36,"href":"https:\/\/blog.speedyj.de\/index.php?rest_route=\/wp\/v2\/posts\/349\/revisions"}],"predecessor-version":[{"id":1445,"href":"https:\/\/blog.speedyj.de\/index.php?rest_route=\/wp\/v2\/posts\/349\/revisions\/1445"}],"wp:attachment":[{"href":"https:\/\/blog.speedyj.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=349"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.speedyj.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=349"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.speedyj.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=349"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}