Subversionspfadunterschiede für svn und svn + ssh


10

[02:48] [root @ server: ~] ps ax | grep svn 23986? Ss 0:00 / usr / bin / svnserve -d -r / srv / svn Wie Sie aus den Argumenten ersehen können, lautet mein SVN-Stammverzeichnis / srv / svn.

Nun etwas Magie von der Remote-Maschine ...

Das funktioniert:

> svn co svn://svn-user@domain.com/test-repo

Aber das nicht:

> svn co svn+ssh://svn-user@<putty-session-name>/test-repo
'No repository found in 'svn+ssh://svn-user@<putty-session-name>/test-repo'

Spiele um für ein paar Stunden , die ich habe , dass gefunden appearantly wenn ich SSH - Tunnel verwenden, ich bin in der Lage meine Repo erhalten mit folgenden:

> svn co svn+ssh://svn-user@<putty-session-name>/srv/svn/test-repo

... was bedeutet, dass ich den vollständigen physischen Pfad zum Repo angeben sollte. Huh?

Antworten:


13

Wie Womble gesagt hat, ist dies tatsächlich das "Merkmal" von svn über ssh.

Ich hatte svn + ssh arbeiten, ohne den vollständigen Pfad zu Repositorys anzugeben, da der svn-Server ein svnserve-Wrapper-Skript anstelle der ursprünglichen svnserve-Binärdatei hatte. Später, während des Subversion-Updates, wurde dieses Skript durch die ursprüngliche Binärdatei überschrieben.

Lösung:

  1. Benennen Sie svnserve in bin um

    mv /usr/bin/svnserve /usr/bin/svnserve.bin
    
  2. Speichern Sie dieses Skript als / usr / bin / svnserve:

    #!/bin/sh
    exec /usr/bin/svnserve.bin -r /srv/svn "$@"
    
  3. Berechtigungen aktualisieren

    chmod 755 /usr/bin/svnserve
    

1
Ich hatte das gleiche Problem außer umgekehrt. Ich habe stundenlang versucht herauszufinden, warum ich svn + ssh: // host / path / to / repo nicht ausführen konnte, weil ein Skript ausgeführt wurde, das mich automatisch zum svn-Stammverzeichnis weiterleitete. Alles was ich tun musste war svn + ssh: // host / repo.
Bot

Könnte root als Variable festgelegt werden und dann eine Logik haben, die den root aus $ @ entfernt, wenn er versehentlich angegeben wird? Es würde Probleme wie bei @Bot verhindern.
MattPark

5

Das liegt daran, dass svn over SSH ( svn+ssh://) nur "lokal" auf ein Subversion-Repository zugreift und SSH als Transport verwendet, sodass Sie Zugriff auf das gesamte Dateisystem haben. Im Gegensatz dazu wird Svnserve mitgeteilt, dass "Beginnen Sie Ihre Pfade mit" /srv/svn, sodass Sie sie nicht manuell angeben müssen.


Vielen Dank für Ihre Meinung, aber nein, das ist es nicht. Alles funktionierte wunderbar, bis ich wie immer alles vermasselt hatte.
Andrejs Cainikovs

Dann reparieren Sie alles, was Sie vermasselt haben.
womble

Du hast recht, womble. Scheint, ich habe gefunden, wo das Problem war.
Andrejs Cainikovs

3

Sie können den Befehl ssh login für Benutzer mit svn + ssh bearbeiten, indem Sie die ~ / .ssh / authorisierten_Tasten des Subversion-Benutzers bearbeiten. Die Zeile für einen Benutzer sieht folgendermaßen aus:

command="/usr/bin/svnserve -r /srv/svn [other svnserve options]" <key type> <user key> <key comment>

Es gibt mehr svn + ssh Tricks im svn Buch


0

Dies ist eher eine Frage für sich, aber es hängt wirklich mit dieser zusammen.

Nachdem ich svn + ssh mit privaten / öffentlichen Schlüsseln eingerichtet habe, kann ich nicht über relative Pfade auf folgende Weise auf mein Repo zugreifen:

svn co svn+ssh://svn@SERVERIP/simple-webapp-svn simple-webapp-svn

da ich diesen Fehler bekomme:

svn: URL 'svn+ssh://svn@SERVERIP/simple-webapp-svn' doesn't exist

aber nur so:

svn co svn+ssh://svn@SERVERIP/home/svn/projects/simple-webapp-svn simple-webapp-svn

Dies ist die Datei "authorized_keys2" im Verzeichnis /home/svn/.ssh

$ sudo cat /home/svn/.ssh/authorized_keys2
command="/usr/bin/svnserve.bin -t --tunnel-user=USERNAME",no-port-forwarding,no-agent-forwarding,no-X11-forwarding,no-pty ssh-rsa [rsa-key] [user-note]

und die Datei svnserve.bin, die Andrejs bei der vorherigen Antwort vorgeschlagen hat

$ cat  /usr/bin/svnserve.bin 
#!/bin/sh
exec /usr/bin/svnserve -r /home/svn/projects "$@"

Ich habe sogar über Berechtigungsprobleme nachgedacht, die hier aufgelistet sind:

-rwxr-xr-x 1 root root 63684 2009-12-12 06:45 /usr/bin/svnserve
-rwxr-xr-x 1 root root    61 2010-08-25 17:19 /usr/bin/svnserve.bin

Ich kann wirklich keine Lösung finden ...


Du hast meine Antwort nicht richtig gelesen. Sie sollten svnserve binary in svnserve.bin umbenennen und das dort vorhandene Wrapper-Skript als svnserve speichern. Oder einfach, der Inhalt Ihrer beiden Dateien sollte ausgetauscht werden.
Andrejs Cainikovs

Ich denke, dass das Aufrufen von svnserve.bin von authorized_keys2 und in dieser Datei, in der svnserve ausgeführt wird, genau dasselbe sein sollte, nicht wahr? Ich fand das gut, um zu verhindern, dass svnserve binary umbenannt wird. Glaubst du, es ist falsch?
mox601
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.