'svn checkout' no servidor SVN faz com que o repositório quebre com um erro 301

3

Temos um servidor nginx que faz proxy para uma configuração padrão do Apache + SVN. A configuração do nginx é um proxy muito simples:

server {
    server_name svn.ourdomain.tld;
    location / {
        proxy_pass http://localhost:8080;
    }
}

O Apache é configurado da seguinte forma:

<Location />
    DAV svn
    SVNParentPath /var/svn
    AuthType Basic
    AuthName "Authentication Required"
    AuthUserFile /var/svn/.auth
    Require valid-user
</Location>

... o que nos permite acessar repositórios usando algo como http://svn.ourdomain.tld/repo . Estamos executando essa configuração há cerca de dois anos sem problemas.

Recentemente, descobrimos que precisamos verificar um dos repositórios no próprio servidor, no entanto, sempre que o fazemos, parece que ele quebra o repositório. A partir desse momento, ele só responderá com um erro 301 Moved Permanently .

Nós tentamos:

  • svn co file:///path/to/repo
  • svn co svn://localhost/repo
  • svn co svn://svn.ourdomain.tld/repo
  • svn co svn+ssh://localhost/repo
  • svn co svn+ssh://svn.ourdomain.tld/repo
  • svn co http://localhost/repo
  • svn co http://svn.ourdomain.tld/repo

Também tentei ignorar o nginx e obter o mesmo erro:

  • svn co http://localhost:8080/repo
  • svn co http://svn.ourdomain.tld:8080/repo

Fazer check-out de uma máquina diferente funciona conforme o esperado até que tentemos fazer o check-out no servidor, depois ele se recusa com o mesmo erro 301 .

O que é mais confuso é que esse servidor de repositório também hospeda nosso servidor de IC Hudson , que pode puxar e construir nossos projetos a cada hora . Isso nos leva a suspeitar que é o cliente svn que está causando um erro na comunicação.

Também é muito confuso que a remoção da re-criação do repo usando svnadmin não redefina o erro - o repo ainda está indisponível , apesar de ser "novo"! Reiniciar o apache e o subversion (svnserve) não tem efeito sobre isso, ou o erro original.

Informação da versão:

  • SO: kernel CentOS 4.2, 2.6.27 de 64 bits
  • svn client: 1.4.2 (mesmo para servidores e clientes remotos)
  • servidor svn: 1.4.2
  • link

ATUALIZAÇÃO:

Isso também acontece com svn export quando executado no servidor repo. Corrido de qualquer outra caixa / cliente, não há problema. Aqui está o fluxo de trabalho, para ajudar a esclarecer o erro:

  1. [~repo-server~]# svnadmin create {repo}; chown -Rf www:www {repo}
  2. [remote-client]# svn checkout http://svn.ourdomain.tld/repo
  3. [remote-client]# svn add file; svn ci -m ''
  4. [~repo-server~]# cd /var/www; svn export file:///path/to/repo/trunk ourproject
  5. [remote-client]# svn update falha com o erro 301

Eu também posso confirmar que o nome do host da caixa não tem um efeito aqui, o que é muito estranho: se svn.ourdomain.tld é adicionado ou não a /etc/hosts ele ainda quebra - nós pensamos que poderia ser um problema com roteamento localhost, mas isso não parece ser o caso.

Estamos omitindo alguma coisa na documentação que indica que você não pode fazer check-out de um repositório quando o servidor está na mesma caixa? Como podemos impedir que os repositórios se corrompam quando fazemos o check-out localmente?

    
por Phillip B Oldham 06.10.2010 / 16:59

1 resposta

0

O svn não manipula redirecionamentos HTTP (é o que o erro 301 é), olhe para onde os redirecionamentos apontam (wget, wireshark), confira a partir daí.

Também é um problema específico do apache, a configuração do host virtual pode estar quebrando-o.

    
por 06.10.2010 / 17:11