SVN txn-current-lock: Permissão negada

2

Acabei de configurar um repositório SVN em um servidor executando o CentOS 6. Segui as instruções aqui e as coisas estavam indo muito bem.

Até que tentei importar minha estrutura inicial de arquivos

svn import /path/to/wc http://svn.host.com/svn/repos -m "Init repo"

me deu o seguinte% svn: Can't open file '/home/podsvn/svn/repos/db/txn-current-lock': Permission denied

No entanto, svn import /path/to/wc file:///path/to/repository -m "Init Repo" funciona fantasticamente. não é útil para trabalhar remotamente com o repositório.

Um pouco de pesquisa levou-me a ver que era um problema de permissões, mas qualquer configuração de permissões para o repositório falhou:

Esta é a permissão padrão do repositório após o tutorial acima, que falha:

-rw-rw-r-- 1 apache apache  229 Jul 24 08:58 README.txt  
drwxrwxr-x 2 apache apache 4096 Jul 24 09:17 conf/  
drwxrwsr-x 6 apache apache 4096 Jul 24 08:58 db/  
-r--r--r-- 1 apache apache    2 Jul 24 08:58 format  
drwxrwxr-x 2 apache apache 4096 Jul 24 08:58 hooks/  
drwxrwxr-x 2 apache apache 4096 Jul 24 08:58 locks/  

Então eu adicionei root, apache, e meu usuário principal (chamado poduser que criou o repo via svnadmin create repos ) para um novo grupo chamado svn, ainda falha (mesmo depois de logar e sair do ssh):

-rw-rw-r-- 1 apache svn 229 Jul 24 08:58 README.txt  
drwxrwxr-x 2 apache svn 4096 Jul 24 09:17 conf/  
drwxrwsr-x 6 apache svn 4096 Jul 24 08:58 db/  
-r--r--r-- 1 apache svn 2 Jul 24 08:58 format  
drwxrwxr-x 2 apache svn 4096 Jul 24 08:58 hooks/  
drwxrwxr-x 2 apache svn 4096 Jul 24 08:58 locks/  

Eu corri chmod -R g+w ./ . (Tem os resultados de ls -la que você esperaria) Eu ainda recebo o erro de permissão negada.

Parece que quando executo import ou checkout , ele está tentando acessar o repositório como um usuário diferente de root, apache ou poduser.

Possivelmente ele está tentando funcionar como o usuário que efetuou login no repositório (configurado em / etc / svn-auth-conf através do tutorial). No entanto, o usuário do SVN que eu configurei é separado de todas as contas no servidor real, certo? Eu não deveria ter que me preocupar em fazer a correspondência entre usuários SVN e usuários de servidores?

Obrigado,
-Esa

    
por Esaevian 24.07.2012 / 18:49

1 resposta

3

Descobri minha própria resposta. Derp.

Então eu descobri que, como estou executando um servidor svn do apache, os comandos svn são executados como o usuário em que o processo httpd está sendo executado.

Então, primeiro corri ps aux | egrep '(apache|httpd)' e descobri isso:

nobody    1488  0.0  0.2  99604  4960 ?        S    06:02   0:00 /usr/local/apache/bin/httpd -k start -DSSL  
root      1962  0.0  0.0   4140   668 pts/0    S+   06:28   0:00 egrep (apache|httpd)  
root     11404  0.0  0.2  99208  5188 ?        Ss   Jul24   0:00 /usr/local/apache/bin/httpd -k start -DSSL  
root     27766  0.0  0.1  99208  2340 ?        S    00:18   0:00 /usr/local/apache/bin/httpd -k start -DSSL  
nobody   27767  0.0  0.2  99604  5184 ?        S    00:18   0:00 /usr/local/apache/bin/httpd -k start -DSSL  
nobody   27768  0.0  0.2  99568  5188 ?        S    00:18   0:00 /usr/local/apache/bin/httpd -k start -DSSL  
nobody   27769  0.0  0.2  99604  5196 ?        S    00:18   0:00 /usr/local/apache/bin/httpd -k start -DSSL  
nobody   27770  0.0  0.2  99568  5168 ?        S    00:18   0:00 /usr/local/apache/bin/httpd -k start -DSSL  
nobody   27771  0.0  0.2  99568  5184 ?        S    00:18   0:00 /usr/local/apache/bin/httpd -k start -DSSL  

Bem, há o problema. Os processos do apache estão rodando como 'nobody' não 'apache' ou 'svn' ou qualquer coisa.

Existem duas soluções possíveis para isso (eu tentei apenas uma).

O que eu fiz (e que funcionou) foi entrar no httpd.conf, e mudar as linhas:

User nobody
Group nobody

Para:

User apache
Group apache

E então service httpd restart e agora todos esses processos 'nobody' estão sendo executados pelo apache, e svn import funciona!

Outra solução que provavelmente funcionaria, mas eu não testei, é ir ao seu repositório e rodar chgrp -R svn ./* , então todos os arquivos no repositório têm o grupo svn, e então adicionar o usuário nobody ao repositório. grupo svn ( usermod -g svn nobody ). Você também pode adicionar outros usuários ao grupo, se quiser (provavelmente mais útil é executar um servidor svnserve svn, em vez de usar o apache).

Não sei por que a configuração do apache foi configurada para ser executada como ninguém, parece ser o padrão nos servidores CentOS do GoDaddy (que é o servidor em que estou executando)

    
por 25.07.2012 / 15:43