Различия в путях Subversion для SVN и SVN + SSH
[02:48][root@server:~] ps ax | grep svn
23986? Ss 0:00 /usr/bin/svnserve -d -r /srv/svn Как видно из аргументов, мой корневой каталог svn - это / srv / svn.
Теперь немного магии с удаленной машины...
Это работает:
> svn co svn://svn-user@domain.com/test-repo
Но это не так:
> svn co svn+ssh://svn-user@<putty-session-name>/test-repo
'No repository found in 'svn+ssh://svn-user@<putty-session-name>/test-repo'
Проигрывая пару часов, я понял, что если я использую ssh tunnel, я могу получить репо, используя следующее:
> svn co svn+ssh://svn-user@<putty-session-name>/srv/svn/test-repo
... что означает, что я должен указать полный физический путь к репо. А?
4 ответа
Как сказал womble, это действительно "svn over ssh".
У меня была svn+ssh, работающая без указания полного пути к репозиториям, потому что на сервере svn вместо оригинального двоичного файла svnserve был скрипт-обертка svnserve. Позже, во время обновления Subversion, этот скрипт был перезаписан оригинальным двоичным файлом.
Решение:
Переименовать svnserve в bin
mv /usr/bin/svnserve /usr/bin/svnserve.bin
Сохраните этот скрипт как /usr/bin/svnserve:
#!/bin/sh exec /usr/bin/svnserve.bin -r /srv/svn "$@"
Обновить разрешения
chmod 755 /usr/bin/svnserve
Это потому что svn over SSH (svn+ssh://
) просто обращается к хранилищу Subversion "локально", используя SSH в качестве транспорта, и, следовательно, у вас есть доступ ко всей файловой системе. В отличие от этого, Svnserve говорит: "начинайте свой путь с /srv/svn
и поэтому вам не нужно указывать это вручную.
Вы можете редактировать команду входа в систему ssh для пользователей, используя svn+ssh, отредактировав ~/.ssh/authorized_keys пользователя subversion. Строка для пользователя будет выглядеть так:
command="/usr/bin/svnserve -r /srv/svn [other svnserve options]" <key type> <user key> <key comment>
В книге svn больше трюков svn + ssh
Это больше похоже на вопрос сам по себе, но это действительно связано с этим.
настроив svn+ssh с закрытыми / открытыми ключами, я не могу получить доступ к своему репо, используя относительные пути следующим образом:
svn co svn+ssh://svn@SERVERIP/simple-webapp-svn simple-webapp-svn
так как я получаю эту ошибку:
svn: URL 'svn+ssh://svn@SERVERIP/simple-webapp-svn' doesn't exist
но только так:
svn co svn+ssh://svn@SERVERIP/home/svn/projects/simple-webapp-svn simple-webapp-svn
Это файл author_keys2, который у меня есть в каталоге /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]
и файл svnserve.bin, предложенный Андреем в предыдущем ответе
$ cat /usr/bin/svnserve.bin
#!/bin/sh
exec /usr/bin/svnserve -r /home/svn/projects "$@"
Я даже думал о проблемах с разрешениями, которые перечислены здесь:
-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
Я действительно не могу придумать решение...