Svn और svn + ssh के लिए तोड़फोड़ पथ अंतर


10

[02:48] [रूट @ सर्वर: ~] ps ax | grep svn 23986? Ss 0:00 / usr / bin / svnerve -d -r / srv / svn जैसा कि आप तर्कों से देखते हैं मेरा svn रूट dir / 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

जैसा कि वोमबल ने कहा है, वास्तव में यह ssh पर svn की 'विशेषता' है।

मैं svn + ssh को रिपॉजिटरी के पूर्ण पथ को निर्दिष्ट किए बिना काम कर रहा था क्योंकि svn सर्वर में मूल svnerve बाइनरी के स्थान पर svnerve रैपर स्क्रिप्ट थी। बाद में, तोड़फोड़ अद्यतन के दौरान इस स्क्रिप्ट को मूल बाइनरी द्वारा अधिलेखित कर दिया गया था।

समाधान:

  1. बिन का नाम बदलें

    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 / पाथ / to / repo क्यों नहीं कर पाया क्योंकि मेरे पास एक स्क्रिप्ट थी जो कि स्वचालित रूप से मुझे svn रूट पर ले जाती थी। मुझे बस इतना करना चाहिए था कि svn + ssh: // host / repo।
बॉट

क्या रूट को एक चर के रूप में सेट किया जा सकता है, और फिर कुछ तर्क हैं जो रूट को $ @ से हटाता है अगर यह गलती से प्रदान किया गया है? यह @Bot जैसे मुद्दे को रोक सकता है।
मैटपार्क

5

ऐसा इसलिए है क्योंकि SSH के ऊपर svn ( svn+ssh://) बस एक तोड़फोड़ भंडार "स्थानीय रूप से" का उपयोग कर रहा है, परिवहन के रूप में SSH का उपयोग कर रहा है, और इसलिए आपके पास पूरे फाइल सिस्टम तक पहुंच है। इसके विपरीत, Svnerve को बताया गया है कि "अपने रास्ते शुरू करें /srv/svn, और इसलिए आपको इसे मैन्युअल रूप से निर्दिष्ट करने की आवश्यकता नहीं है।


आपकी राय के लिए धन्यवाद, लेकिन नहीं, यह नहीं है। सब कुछ प्यारा काम कर रहा था जब तक कि मैं सब कुछ खराब कर दिया था, आमतौर पर।
बेन्स कैनिकोव्स

ठीक है, फिर, आप जो भी खराब कर दिया है उसे ठीक करें।
Womble

तुम ठीक कह रहे हो, वमन। मुझे लगता है कि जहां समस्या थी पाया है।
बेन्सस कैनिकोव्स

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

यह अधिकृत_कीs2 फ़ाइल है जिसके अंदर /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]

और पिछले जवाब में रूसियों द्वारा सुझाई गई svnerve.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

मैं वास्तव में एक समाधान के साथ नहीं आ सकता ...


आपने मेरा उत्तर ठीक से नहीं पढ़ा। आपको svnerve.bin के लिए बाइनरी का नाम बदलकर बर्न करना चाहिए, और आपके पास वहां मौजूद रैपर स्क्रिप्ट को सेव करना चाहिए। या बस, आपकी दोनों फ़ाइलों की सामग्री अदला-बदली होनी चाहिए।
बेन्सस कैनिकोव्स

मुझे लगता है कि अधिकृत_कीs2 से svnerve.bin को कॉल करना और उस फाइल में svnserve को निष्पादित करना बिल्कुल वैसा ही होना चाहिए, है न? मुझे यह पसंद आया कि svnerve बाइनरी का नाम बदलने से रोकने के लिए, क्या आपको लगता है कि यह गलत है?
mox601
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.