Trộn cấu hình Subversion SVNParentPath và cấu hình trên mỗi kho lưu trữ?


9

Đưa ra một cấu hình Subversion / Apache điển hình bằng SVNParentPath, với các kho lưu trữ được lưu trữ /svn/như thế này:

<Location /svn>
    DAV svn

    SVNParentPath /srv/source/svn/repos
    SVNReposName "Subversion Repository"

    AuthzSVNAccessFile /srv/source/svn/authz
    Satisfy Any

    AuthType                Basic
    AuthBasicProvider       file
    AuthName "Subversion Repository"
    AuthUserFile /srv/source/svn/htpasswd

    Require valid-user
</Location>

Có cách nào để ghi đè cấu hình này cho các kho lưu trữ cụ thể mà không phải lưu trữ chúng ở một đường dẫn khác không? Đó là, có cách nào tôi có thể thêm một Locationkhối như thế này ...

<Location /svn/my_special_repo>
    SVNPath /srv/source/svn/repos/my_special_repo
    AuthzSVNAccessFile /srv/source/svn/repos/my_special_repo/conf/authz
</Location>

... và có ghi đè cấu hình được cung cấp trong Locationkhối /svnkhông? Những nỗ lực của tôi trong việc thực hiện điều này với cấu hình trên đã gặp phải các lỗi lạ và không có ích trong nhật ký lỗi Apache, chẳng hạn như:

[Wed Feb 02 11:28:35 2011] [error] [client 10.10.209.120]
(20014)Internal error: Can't open file '/srv/source/svn/repos/svn/format':
No such file or directory

Tất cả điều này dường như là cách của mod_dav_svn nói với tôi rằng tôi không thể làm những gì tôi đang cố gắng làm. Tôi đang mở cho các giải pháp hoặc giải pháp thay thế!

EDIT : Vâng, tôi có thể thấy rằng câu hỏi này đã tạo ra rất nhiều hứng thú trong số các độc giả. Đối với bản ghi, những gì tôi có thể sẽ làm là tạo cấu hình cho mỗi kho lưu trữ cho tất cả các kho lưu trữ hiện có của chúng tôi và sau đó từ bỏ SVNParentPathcấu hình dựa trên. Cấu hình Apache trên mỗi repo là tối thiểu, đặc biệt là sử dụng cái gì đó như mod_macro ; phần cứng sẽ được tách ra khỏi tập tin authz toàn cầu. Nếu bạn đã làm điều này trước đây, lời khuyên được đánh giá cao.


Tôi đã gặp vấn đề tương tự và đã giải quyết nó bằng cách sử dụng mod_macro. Cảm ơn!!! (Nó dường như là một lỗi cũ trong cả Apache hoặc Subversion.)
Achimnol

Câu trả lời:


4

Tôi ghét phải xem câu hỏi của mình mòn mỏi trong danh sách câu hỏi chưa được trả lời, vì vậy đây là những gì chúng tôi đã làm:

  • Trong cấu hình máy chủ chính của chúng tôi, chúng tôi có:

      <Location /svn/>
            SVNParentPath /srv/source/svn/repos
      </Location>
    
  • Chúng tôi đã thông qua những điều sau đây mod_macrođể nhân rộng hành vi này cho các kho lưu trữ mới:

    <Macro LegacySubversionRepo $name>
        # Override SVNParentPath block in main vhost config.
        RewriteRule ^/svn/$name /repo/$name [PT]
    
        <Location /repo/$name>
                Order                   deny,allow
                Allow                   from all
    
                Use LdapAuth \
                        "$name svn repository" \
                        /srv/source/svn/htpasswd
    
                DAV svn
                SVNPath /srv/source/svn/repos/$name
                AuthzSVNAccessFile /srv/source/svn/authz
                SVNAutoversioning On
                Satisfy Any
        </Location>
    </Macro>
    

    Việc RewriteRulecho phép cấu hình kho lưu trữ ghi đè <Location /svn/>trong cấu hình chính có thể phù hợp với yêu cầu.

Với điều này, việc cấu hình xác thực và ủy quyền trên mỗi kho lưu trữ trở nên tương đối dễ dàng (thay vì htpasswdtệp toàn cầu được sử dụng ở đây).


đá mod_macro
vinnyjames
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.