Różnice w ścieżce Subversion dla svn i svn + ssh


10

[02:48] [root @ server: ~] ps ax | grep svn 23986? Ss 0:00 / usr / bin / svnserve -d -r / srv / svn Jak widać z argumentów, moim katalogiem głównym svn jest / srv / svn.

Teraz trochę magii ze zdalnej maszyny ...

To działa:

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

Ale to nie:

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

Zabawy dla kilku godzinach znalazłem że appearantly jeśli mogę użyć ssh tunel, jestem w stanie uzyskać mojego repo przy użyciu następujących:

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

... co oznacza, że ​​powinienem podać pełną ścieżkę fizyczną do repozytorium. Co?

Odpowiedzi:


13

Jak powiedział womble, rzeczywiście jest to „cecha” svn nad ssh.

Svn + ssh działał bez określania pełnej ścieżki do repozytoriów, ponieważ serwer svn miał skrypt otoki svnserve zamiast oryginalnego pliku binarnego svnserve. Później, podczas aktualizacji subversion, skrypt ten został zastąpiony oryginalnym plikiem binarnym.

Rozwiązanie:

  1. Zmień nazwę svnserve na bin

    mv /usr/bin/svnserve /usr/bin/svnserve.bin
    
  2. Zapisz ten skrypt jako / usr / bin / svnserve:

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

    chmod 755 /usr/bin/svnserve
    

1
Miałem ten sam problem oprócz odwrotnej. Spędziłem godziny próbując dowiedzieć się, dlaczego nie mogłem zrobić svn + ssh: // host / path / to / repo, ponieważ miałem uruchomiony skrypt, który automatycznie przekierował mnie do katalogu głównego svn. Wszystko, co musiałem zrobić, to svn + ssh: // host / repo.
Bot

Czy root może być ustawiony jako zmienna, a następnie mieć logikę, która usuwa root z $ @, jeśli jest błędnie podany? Pozwoliłoby to uniknąć problemów takich jak @Bot.
MattPark

5

Wynika to z faktu, że svn over SSH ( svn+ssh://) po prostu uzyskuje dostęp do repozytorium subversion „lokalnie”, używając SSH jako transportu, a zatem masz dostęp do całego systemu plików. Svnserve, przeciwnie, mówi się: „Rozpocznij swoje ścieżki /srv/svn, więc nie musisz określać go ręcznie.


Dziękuję za twoją opinię, ale nie jest. Wszystko działało pięknie, dopóki nie wszystko spieprzyłem, jak zwykle.
Andrejs Cainikovs

Więc napraw wszystko, co spieprzyłeś.
womble

Masz rację, womble. Wygląda na to, że znalazłem problem.
Andrejs Cainikovs

3

Możesz edytować polecenie logowania ssh dla użytkowników korzystających z svn + ssh, edytując ~ / .ssh / uprawnione_ klucze użytkownika subversion. Linia dla użytkownika będzie wyglądać następująco:

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

W książce svn jest więcej sztuczek svn + ssh


0

samo w sobie jest to bardziej pytanie, ale jest naprawdę związane z tym pytaniem.

po skonfigurowaniu svn + ssh z kluczami prywatnymi / publicznymi nie mogę uzyskać dostępu do mojego repozytorium przy użyciu ścieżek względnych w następujący sposób:

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

ponieważ otrzymuję ten błąd:

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

ale tylko tak:

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

To jest plik Author_keys2, który mam w katalogu /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]

oraz plik svnserve.bin sugerowany przez Andrejsa w poprzedniej odpowiedzi

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

Myślałem nawet o problemach z uprawnieniami, które są wymienione tutaj:

-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

Naprawdę nie mogę znaleźć rozwiązania ...


Nie przeczytałeś mojej odpowiedzi poprawnie. Powinieneś zmienić nazwę svnserve binary na svnserve.bin i zapisać skrypt otoki, który tam masz, jako svnserve. Lub po prostu zawartość obu plików powinna zostać zamieniona.
Andrejs Cainikovs,

Myślę, że wywołanie svnserve.bin z autoryzowanego_klucza2 i w tym pliku wykonującym svnserve powinno być dokładnie takie samo, prawda? Podobało mi się to, aby zapobiec zmianie nazwy svnserve binary, czy uważasz, że to źle?
mox601,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.