Різниці в підривному шляху для svn і svn + ssh


10

[02:48] [root @ server: ~] ps ax | grep svn 23986? Ss 0:00 / usr / bin / svnserve -d -r / srv / svn Як ви бачите з аргументів, мій кореневий rev 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'

Гра навколо за пару годин я виявив , що appearantly якщо я використовую SSH тунель, я зміг отримати свій репозиторій з допомогою наступних дій :

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

... це означає, що я повинен вказати повний фізичний шлях до репо. Так?

Відповіді:


13

Як сказано в жанрі, справді це є "особливістю" svn over ssh.

У мене svn + ssh працював, не вказуючи повний шлях до сховищ, оскільки на сервері svn був скрипт для обгортки svnserve замість оригінального бінарного файлу svnserve. Пізніше, під час оновлення субверсії, цей сценарій був перезаписаний оригінальним двійковим файлом.

Рішення:

  1. Перейменуйте svnserve у бін

    mv /usr/bin/svnserve /usr/bin/svnserve.bin
    
  2. Збережіть цей скрипт як / usr / bin / svnserve:

    #!/bin/sh
    exec /usr/bin/svnserve.bin -r /srv/svn "$@"
    
  3. Оновіть дозволи

    chmod 755 /usr/bin/svnserve
    

1
У мене була така ж проблема, крім зворотного. Я витрачав години, намагаючись з'ясувати, чому я не міг зробити svn + ssh: // host / path / to / repo, оскільки у мене був запущений сценарій, який автоматично спрямовував мене до кореня svn. Все, що мені потрібно було зробити, це svn + ssh: // host / repo.
Бот

Чи можна встановити корінь як змінну, а потім мати якусь логіку, яка видаляє корінь з $ @, якщо вона помилково надана? Це запобігло б проблему на кшталт @Bot's.
MattPark

5

Це тому, що svn через SSH ( svn+ssh://) просто отримує доступ до сховища субверсії "локально", використовуючи SSH як транспорт, а значить, ви маєте доступ до всієї файлової системи. Svnserve, навпаки, кажуть: "почніть свої шляхи /srv/svn, тому вам не потрібно вказувати його вручну.


Дякую за вашу думку, але ні, це не так. Все працювало чудово, доки я все не накрутив, як зазвичай.
Андрейс Кайніков

Ну тоді виправте все, що ви накрутили.
живіт

Ти маєш рацію, вродливий. Здається, я знайшов, де проблема.
Андрейс Кайніков

3

Ви можете редагувати команду входу в ssh для користувачів, що використовують svn + ssh, редагуючи ~ / .ssh / санкціоновані ключі користувача, що підривує. Рядок для користувача виглядатиме так:

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

У книзі svn є більше трюків svn + ssh


0

це скоріше як питання саме по собі, але воно справді пов’язане з цим.

встановивши 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

Це файл санкціонованого_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

Я справді не можу придумати рішення ...


Ви неправильно не прочитали моєї відповіді. Ви повинні перейменувати svnserve binary у svnserve.bin, а зберегти скрипт обгортки, який у вас є, як svnserve. Або просто, вміст обох ваших файлів має бути замінено.
Андрейс Кайніков

Я думаю, що виклик svnserve.bin з дозволеного_keys2 та у цьому файлі, що виконує svnserve, повинен бути точно таким же, чи не так? Мені це подобалося, щоб запобігти перейменуванню svnserve у бінарний файл, чи вважаєте ви, що це неправильно?
mox601
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.