Menggabungkan Subversion “SVNParentPath” dan konfigurasi per-repositori?

9

Diberikan konfigurasi Subversion / Apache yang khas menggunakan SVNParentPath, dengan repositori yang dihosting di bawah /svn/seperti ini:

<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>

Apakah ada cara untuk mengganti konfigurasi ini untuk repositori tertentu tanpa harus meng-host-nya di jalur yang berbeda? Yaitu, adakah yang bisa saya tambahkan Locationblok seperti ini ...

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

... dan minta ganti konfigurasi yang disediakan di Locationblok untuk /svn? Upaya saya melakukan ini dengan konfigurasi di atas telah bertemu dengan kesalahan aneh dan tidak membantu dalam log kesalahan Apache, seperti:

[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

Semua ini tampaknya merupakan cara mod_dav_svn untuk memberi tahu saya bahwa saya tidak dapat melakukan apa yang saya coba lakukan. Saya terbuka untuk solusi atau alternatif!

EDIT : Ya, saya bisa melihat bahwa pertanyaan ini telah menghasilkan banyak kegembiraan di antara para pembaca. Sebagai catatan, apa yang saya akhirnya lakukan adalah menghasilkan konfigurasi per-repositori untuk semua repositori kami yang ada, dan kemudian meninggalkan SVNParentPathkonfigurasi berbasis. Konfigurasi per-repo Apache minimal, terutama menggunakan sesuatu seperti mod_macro ; bagian yang sulit akan memisahkan file authz global. Jika Anda pernah melakukan ini sebelumnya, tips sangat dihargai.

larsks
sumber
Saya punya masalah yang sama, dan menyelesaikannya dengan menggunakan mod_macro. Terima kasih!!! (Tampaknya ini adalah bug lama di Apache atau Subversion.)
Achimnol

Jawaban:

4

Saya benci melihat pertanyaan saya sendiri mendekam di sana dalam daftar pertanyaan yang belum terjawab, jadi inilah yang kami lakukan:

  • Dalam konfigurasi server utama kami, kami memiliki:

      <Location /svn/>
            SVNParentPath /srv/source/svn/repos
      </Location>
    
  • Kami mengadopsi yang berikut mod_macrountuk mereplikasi perilaku ini untuk repositori baru:

    <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>
    

    The RewriteRulememungkinkan konfigurasi repositori untuk menimpa <Location /svn/>dalam konfigurasi utama yang lain akan cocok dengan permintaan.

Dengan ini, relatif mudah untuk mengadopsi otentikasi per-repositori dan konfigurasi otorisasi (bukan htpasswdfile global yang digunakan di sini).

larsks
sumber
mod_macro rocks
vinnyjames