2010-04-19 13 views
11

Tengo un nuevo servidor de Fedora 12 en el que estoy intentando configurar Mercurial. Tengo yum install ed mercurial, y la mayoría de las cosas parecen funcionar bien. Sin embargo, después de configurar hgwebdir.cgi a través de apache, no puedo hacer un hg push al único repositorio que se está hospedando actualmente. El error que se obtiene es:HgWebDir push permission denied error

searching for changes 
abort: HTTP Error 500: Permission denied: .hg/store/lock 

httpd se ejecuta como usuario apache

UID  PID PPID C STIME TTY   TIME CMD 
root  1691  1 0 13:19 ?  00:00:00 /usr/sbin/httpd 
apache 1694 1691 0 13:19 ?  00:00:00 /usr/sbin/httpd 
apache 1695 1691 0 13:19 ?  00:00:00 /usr/sbin/httpd 
apache 1696 1691 0 13:19 ?  00:00:00 /usr/sbin/httpd 
apache 1697 1691 0 13:19 ?  00:00:00 /usr/sbin/httpd 
apache 1698 1691 0 13:19 ?  00:00:00 /usr/sbin/httpd 
apache 1699 1691 0 13:19 ?  00:00:00 /usr/sbin/httpd 
apache 1700 1691 0 13:19 ?  00:00:00 /usr/sbin/httpd 
apache 1701 1691 0 13:19 ?  00:00:00 /usr/sbin/httpd 

y establecer permisos para que el usuario apache dueño de todo el repositorio y todo. En un último intento, incluso hice el repositorio globalmente modificable.

[[email protected] .hg]# ll 
total 424K 
drwxrwxrwx. 3 apache apache 4.0K 2010-04-19 14:43 . 
drwxrwxrwx. 19 apache apache 4.0K 2010-04-15 13:33 .. 
-rw-rw-rw-. 2 apache apache 57 2010-04-13 11:42 00changelog.i 
-rw-rw-rw-. 1 apache apache 93 2010-04-16 15:33 branchheads.cache 
-rw-rw-rw-. 1 apache apache 192K 2010-04-15 13:33 dirstate 
-rw-r--r--. 1 apache apache 156 2010-04-19 14:43 hgrc 
-rw-rw-rw-. 1 apache apache 42 2010-04-15 13:33 last-message.txt 
-rw-rw-rw-. 2 apache apache 23 2010-04-13 11:42 requires 
drwxrwxrwx. 4 apache apache 4.0K 2010-04-19 11:26 store 
-rw-rw-rw-. 1 apache apache 45 2010-04-14 14:08 tags.cache 
-rw-rw-rw-. 1 apache apache 7 2010-04-16 15:33 undo.branch 
-rw-rw-rw-. 1 apache apache 192K 2010-04-16 15:33 undo.dirstate 
[[email protected] .hg]# cd store 
[[email protected] store]# ll 
total 308K 
drwxrwxrwx. 4 apache apache 4.0K 2010-04-19 11:26 . 
drwxrwxrwx. 3 apache apache 4.0K 2010-04-19 14:43 .. 
-rw-rw-rw-. 1 apache apache 20K 2010-04-16 15:33 00changelog.i 
-rw-rw-rw-. 1 apache apache 81K 2010-04-16 15:33 00manifest.i 
drwxrwxrwx. 17 apache apache 4.0K 2010-04-13 11:47 data 
drwxrwxrwx. 3 apache apache 4.0K 2010-04-13 11:43 dh 
-rw-rw-rw-. 2 apache apache 177K 2010-04-15 11:03 fncache 
-rw-rw-rw-. 1 apache apache 67 2010-04-16 15:33 undo 

Tengo un clon del repositorio en otro lugar de la máquina que se ejecuta como un usuario diferente. Si configuro el valor default en la sección [paths] del archivo clones hgrc en la ruta de archivo local en el servidor, la inserción funciona bien, pero si la cambio para usar la url, siempre aparece el error.

Algunas posibles peculiaridades en la forma en que he puesto esto ... hgwebdir.cgi está sentado en /var/www/cgi-bin y el repositorio es un hijo de /opt/hg. Apagué Suexec también, y esto no parece aclarar el problema. La única línea añadí en la configuración de Apache para obtener hgwebdir correr es:

ScriptAlias /hg "/var/www/cgi-bin/hgwebdir.cgi" 

la hgweb.config también está en /var/www/cgi-bin y su contenido son:

[collections] 
/opt/hg = /opt/hg 

[trusted] 
users = * 

[web] 
baseurl = /hg 
push_ssl = false 
allow_push = * 

El navegador de repositorios está trabajando muy bien, es solo empuje eso no funciona. Apache error_log no tiene nada sobre este error en absoluto.

Respuesta

0

Tengo que resolver este problema tratando de resolver un error similar, en una configuración ligeramente diferente (ubuntu, archivo cgi en la base de reubicación). larga historia corta que tenía 2 temas principales:

  • Terminé la eliminación de la opción baseurl
  • opciones en hgrc y en hgweb.config no parecen estar siempre manejado de la misma manera.
1

Parecería a mí que la cesión temporal se cierra desde el primero de autenticación, en wich se pone los conjuntos de cambios. Después de obtener los chagesets hg intenta autenticarse nuevamente mientras, supongo, el repositorio todavía está bloqueado Hg autehticates 3 veces antes de fallar (autenticação http: usuário goolic, senha **************)

hg push https://versoes.solidarp.com.br/hgweb.wsgi/home/solidarp/public_repos/profile_andre --verbose --debug 
using https://versoes.solidarp.com.br/hgweb.wsgi/home/solidarp/public_repos/profile_andre 
sending between command 
autorização http requerida 
domínio: soliDARP 
usuário: goolic 
senha: 
autenticação http: usuário goolic, senha ************** 
enviando revisões para https://versoes.solidarp.com.br/hgweb.wsgi/home/solidarp/public_repos/profile_andre 
sending capabilities command 
autenticação http: usuário goolic, senha ************** 
capabilities: changegroupsubset lookup pushkey unbundle=HG10GZ,HG10BZ,HG10UN stream=65537 branchmap 
sending heads command 
autenticação http: usuário goolic, senha ************** 
procurando por mudanças 
common changesets up to 000000000000 
7 revisões encontradas 
list of changesets: 
3d58879c5dcc778704134804de35b0441412cb0f 
a3e6697fa72c9a4e06030b61a84bd2a00427f26f 
481ce6a7f0c58ed5b838fc86d1b93af6b857eaf1 
afed11efb8e2716675a7a39baf3b8b57c8740f44 
ba4d9574fd84311d3b894aea39e8338ad3b242cd 
aea9b49b6a933a11d4801d0dbab0e5b07d70b2d2 
9c1757572d3bac793332999e6966b1135bfaf844 
empacotando mudanças: 0 trechos 
empacotando mudanças: 1 trechos 
empacotando mudanças: 2 trechos 
empacotando mudanças: 3 trechos 
empacotando mudanças: 4 trechos 
empacotando mudanças: 5 trechos 
empacotando mudanças: 6 trechos 
empacotando mudanças: 7 trechos 
empacotando mudanças: 8 trechos 
empacotando mudanças: 9 trechos 
empacotando mudanças: 10 trechos 
empacotando mudanças: 11 trechos 
empacotando mudanças: 12 trechos 
empacotando mudanças: 13 trechos 
empacotando mudanças: 14 trechos 
empacotando mudanças: 15 trechos 
empacotando mudanças: 16 trechos 
empacotando mudanças: 17 trechos 
empacotando mudanças: 18 trechos 
empacotando mudanças: 19 trechos 
empacotando mudanças: 20 trechos 
empacotando mudanças: 21 trechos 
empacotando manifestos: 0 trechos 
empacotando manifestos: 1 trechos 
empacotando manifestos: 2 trechos 
empacotando manifestos: 3 trechos 
empacotando manifestos: 4 trechos 
empacotando manifestos: 5 trechos 
empacotando manifestos: 6 trechos 
empacotando manifestos: 7 trechos 
empacotando manifestos: 8 trechos 
empacotando manifestos: 9 trechos 
empacotando manifestos: 10 trechos 
empacotando manifestos: 11 trechos 
empacotando manifestos: 12 trechos 
empacotando manifestos: 13 trechos 
empacotando manifestos: 14 trechos 
empacotando manifestos: 15 trechos 
empacotando manifestos: 16 trechos 
empacotando manifestos: 17 trechos 
empacotando manifestos: 18 trechos 
empacotando manifestos: 19 trechos 
empacotando manifestos: 20 trechos 
empacotando manifestos: 21 trechos 
empacotando arquivos: .project 0 trechos 
empacotando arquivos: .project 1 trechos 
empacotando arquivos: .project 2 trechos 
empacotando arquivos: .project 3 trechos 
empacotando arquivos: .settings/org.eclipse.jdt.core.prefs 4 trechos 
empacotando arquivos: .settings/org.eclipse.jdt.core.prefs 5 trechos 
empacotando arquivos: .settings/org.eclipse.jdt.core.prefs 6 trechos 
empacotando arquivos: .settings/org.eclipse.jdt.core.prefs 7 trechos 
empacotando arquivos: src/Transporte/Busao.java 8 trechos 
empacotando arquivos: src/Transporte/Busao.java 9 trechos 
empacotando arquivos: src/Transporte/Busao.java 10 trechos 
empacotando arquivos: src/Transporte/Busao.java 11 trechos 
empacotando arquivos: src/Transporte/Busao.java 12 trechos 
empacotando arquivos: src/Transporte/Busao.java 13 trechos 
empacotando arquivos: src/Transporte/Busao.java 14 trechos 
empacotando arquivos: src/Transporte/Busao.java 15 trechos 
empacotando arquivos: src/Transporte/Busao.java 16 trechos 
empacotando arquivos: src/Transporte/Busao.java 17 trechos 
empacotando arquivos: src/Transporte/Cidade.java 18 trechos 
empacotando arquivos: src/Transporte/Cidade.java 19 trechos 
empacotando arquivos: src/Transporte/Cidade.java 20 trechos 
empacotando arquivos: src/Transporte/Cidade.java 21 trechos 
empacotando arquivos: src/Transporte/Cidade.java 22 trechos 
empacotando arquivos: src/Transporte/Cidade.java 23 trechos 
empacotando arquivos: src/Transporte/Cidade.java 24 trechos 
empacotando arquivos: src/Transporte/Cidade.java 25 trechos 
empacotando arquivos: src/Transporte/Cidade.java 26 trechos 
empacotando arquivos: src/Transporte/Cidade.java 27 trechos 
empacotando arquivos: src/Transporte/Cidades.java 28 trechos 
empacotando arquivos: src/Transporte/Cidades.java 29 trechos 
empacotando arquivos: src/Transporte/Cidades.java 30 trechos 
empacotando arquivos: src/Transporte/Cidades.java 31 trechos 
empacotando arquivos: src/Transporte/Controle.java 32 trechos 
empacotando arquivos: src/Transporte/Controle.java 33 trechos 
empacotando arquivos: src/Transporte/Controle.java 34 trechos 
empacotando arquivos: src/Transporte/Controle.java 35 trechos 
empacotando arquivos: src/Transporte/Controle.java 36 trechos 
empacotando arquivos: src/Transporte/Controle.java 37 trechos 
empacotando arquivos: src/Transporte/Controle.java 38 trechos 
empacotando arquivos: src/Transporte/Controle.java 39 trechos 
empacotando arquivos: src/Transporte/Controle.java 40 trechos 
empacotando arquivos: src/Transporte/Controle.java 41 trechos 
empacotando arquivos: src/Transporte/Controle.java 42 trechos 
empacotando arquivos: src/Transporte/Controle.java 43 trechos 
empacotando arquivos: src/Transporte/Controle.java 44 trechos 
empacotando arquivos: src/Transporte/Controle.java 45 trechos 
empacotando arquivos: src/Transporte/Controle.java 46 trechos 
empacotando arquivos: src/Transporte/Controle.java 47 trechos 
empacotando arquivos: src/Transporte/Controle.java 48 trechos 
empacotando arquivos: src/Transporte/Controle.java 49 trechos 
empacotando arquivos: src/Transporte/Controle.java 50 trechos 
empacotando arquivos: src/Transporte/Controle.java 51 trechos 
empacotando arquivos: src/Transporte/Controle.java 52 trechos 
empacotando arquivos: src/Transporte/Controle.java 53 trechos 
empacotando arquivos: src/Transporte/Interface.java 54 trechos 
empacotando arquivos: src/Transporte/Interface.java 55 trechos 
empacotando arquivos: src/Transporte/Interface.java 56 trechos 
empacotando arquivos: src/Transporte/Interface.java 57 trechos 
empacotando arquivos: src/Transporte/Interface.java 58 trechos 
empacotando arquivos: src/Transporte/Interface.java 59 trechos 
empacotando arquivos: src/Transporte/Interface.java 60 trechos 
empacotando arquivos: src/Transporte/Interface.java 61 trechos 
empacotando arquivos: src/Transporte/Interface.java 62 trechos 
empacotando arquivos: src/Transporte/Interface.java 63 trechos 
empacotando arquivos: src/Transporte/Interface.java 64 trechos 
empacotando arquivos: src/Transporte/Interface.java 65 trechos 
empacotando arquivos: src/Transporte/Interface.java 66 trechos 
empacotando arquivos: src/Transporte/Linha.java 67 trechos 
empacotando arquivos: src/Transporte/Linha.java 68 trechos 
empacotando arquivos: src/Transporte/Linha.java 69 trechos 
empacotando arquivos: src/Transporte/Linha.java 70 trechos 
empacotando arquivos: src/Transporte/Linha.java 71 trechos 
empacotando arquivos: src/Transporte/Linha.java 72 trechos 
empacotando arquivos: src/Transporte/Linha.java 73 trechos 
empacotando arquivos: src/Transporte/Linha.java 74 trechos 
empacotando arquivos: src/Transporte/Linha.java 75 trechos 
empacotando arquivos: src/Transporte/Linha.java 76 trechos 
empacotando arquivos: src/Transporte/Passagem.java 77 trechos 
empacotando arquivos: src/Transporte/Passagem.java 78 trechos 
empacotando arquivos: src/Transporte/Passagem.java 79 trechos 
empacotando arquivos: src/Transporte/Passagem.java 80 trechos 
empacotando arquivos: src/Transporte/Passagem.java 81 trechos 
empacotando arquivos: src/Transporte/Passagem.java 82 trechos 
empacotando arquivos: src/Transporte/Passagem.java 83 trechos 
empacotando arquivos: src/Transporte/Passagem.java 84 trechos 
empacotando arquivos: src/Transporte/Passagem.java 85 trechos 
empacotando arquivos: src/Transporte/Passagem.java 86 trechos 
empacotando arquivos: src/Transporte/Passagem.java 87 trechos 
empacotando arquivos: src/Transporte/Passagem.java 88 trechos 
empacotando arquivos: src/Transporte/Passagem.java 89 trechos 
empacotando arquivos: src/Transporte/Viagem.java 90 trechos 
empacotando arquivos: src/Transporte/Viagem.java 91 trechos 
empacotando arquivos: src/Transporte/Viagem.java 92 trechos 
empacotando arquivos: src/Transporte/Viagem.java 93 trechos 
empacotando arquivos: src/Transporte/Viagem.java 94 trechos 
empacotando arquivos: src/Transporte/Viagem.java 95 trechos 
empacotando arquivos: src/Transporte/Viagem.java 96 trechos 
sending unbundle command 
sending 6254 bytes 
autenticação http: usuário goolic, senha ************** 
abortado: HTTP Error 500: Permission denied: .hg/store/lock 
1

Es un problema de selinux.

acabo de recibir a través de la misma edición

probar esto como root

echo 0>/selinux/cumplir

y vuelve a intentarlo.que se inhabilite SELinux hasta el reinicio de modo de fijar de forma definitiva que tendrá que desactivar SELinux o encontrar la manera de desactivar esta cuestión específica

aquí es donde he encontrado la solución

http://mercurial.808500.n3.nabble.com/Push-Denied-hg-store-lock-FC12-https-ldap-wsgi-td814854.html

selinux incapacitante información aquí

http://www.crypt.gen.nz/selinux/disable_selinux.html

11

tuve un problema similar en Ubuntu. El problema se detuvo cuando aflojé los permisos en el directorio .hg.

Hice un chmod -R 777 .hg desde el directorio de repositorio. Después de eso, todo funcionó. Todavía tengo que jugar para encontrar la opción mínimamente permisiva que permita los empujes, pero esto funciona en nuestro servidor de desarrollo interno.

+2

No me gusta tanto dar 777 permisos a los archivos, pero resolvió mi problema en el primer intento.Ahora intentaré comprender qué permisos estaban equivocados. Por cierto, +1 para mí. –

+0

+1 de mi parte. funciona como se describe. gracias rossmcf –

+0

También tuve este problema, pero en lugar de dar 777, investigué que ciertos archivos/carpetas en .hg/AND en el directorio de trabajo eran propiedad de otro usuario que 'www-data'. Así que los cambié a 'www-data' porque ese es el usuario que hgweb.cgi está ejecutando como. –

14

Para mí fueron los permisos incorrectos en el servidor. Un chown -R www-data /path/to/repo (en el servidor) solucionó todo para mí ... tal vez esto sea diferente para usted. Buena suerte.

+1

Creo que quieres decir 'chown', ¿verdad? – harpo

+3

Esta es la respuesta correcta. No es necesario hacer 777. – Houman

+1

Estoy de acuerdo con Kave, esta es la respuesta correcta – etuardu

4

En vez de 777, con el servidor web se ejecuta en el grupo apache, y sus repositorios en /opt/hg:

Ejecutar sudo chown :apache /opt/hg -R añadir los repositorios para el Apache Group y sudo chmod g+w /opt/hg -R para dar acceso de escritura al grupo. De esta manera, solo le das suficientes permisos.

BTW en Ubuntu el proceso apache se ejecuta en www-data en lugar de apache.

+0

Esto funcionó muy bien para mí en Ubuntu – Tilendor

0

Tuve una situación similar a @ pete-brumm, pero debido a que pasaré a una región controlada más adelante, apagar SELinux no es una opción.

Apague SELinux como dice Pete y vuelva a intentar la acción: si funciona, ha aislado el problema. Volver a encenderla como esto:

# echo 1> /selinux/enforce 

Antes de pasar SELinux por completo, trate de cambiar el contexto de seguridad donde se encuentran los repositorios:

# chcon -R -t httpd_sys_content_t /path/to/repo 
0

Otra posibilidad para los que buscan estos archivos.

yo estaba corriendo un WSGIDaemonProcess de Apache, así:

WSGIScriptAlias /hg /srv/www/hg/wsgiapp.py 
    WSGIDaemonProcess hgserve display-name=%{GROUP} user=hgrepo group=hgrepo \ 
        threads=10 maximum-requests=1000 \ 
        processes=2 umask=0007 inactivity-timeout=300 
    WSGIProcessGroup hgserve 

Por lo tanto, en mi caso, el usuario: grupo propietario de los archivos en el repositorio debería haber sido hgrepo: hgrepo, y, de hecho, Tenía este derecho. Sin embargo, un rápido chmod experimental 0777 reveló que el problema era de alguna manera un problema estándar de propiedad/permisos. Bueno, resulta que tuve otro WSGIDaemonProcess en la configuración de Apache, para un propósito diferente en conjunto, apuntando a una ubicación diferente, y se le asignó un diferente processGroup, usuario y grupo. Sin embargo, este (arriba) WSGIDaemonProcess se estaba ejecutando como ese otro usuario: grupo, y, por lo tanto, por supuesto, no estaba funcionando. Por ahora, acabo de eliminar ese otro proceso, ya que de todos modos solo era experimental, pero, aquí hay uno para los archivos.

Cuestiones relacionadas