2010-04-19 263 views
11

我有一个新的Fedora 12服务器,我试图设置Mercurial。我有yum install和许多事情似乎工作正常。但是,在通过apache设置hgwebdir.cgi后,我无法对目前托管的唯一仓库执行hg push。我回来的错误是:HgWebDir推送权限被拒绝错误

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

httpd的运行为用户阿帕奇

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 

,并让apache用户拥有整个回购和一切我设置权限。在最后一次尝试中,我甚至将回购作为全局可写的。

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

我有一台克隆的机器上的其他地方的克隆作为一个不同的用户运行。如果我将克隆hgrc文件的[paths]部分中的default值设置为服务器上的本地文件路径,则推送工作正常,但如果将其切换为使用url,则每次都会收到错误。

一些可能的怪癖我如何设置它... hgwebdir.cgi坐在/var/www/cgi-bin和回购是/opt/hg的孩子。我也关闭了suexec,这似乎没有解决问题。我在Apache的配置加入到获得hgwebdir运行的唯一路线是:

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

的hgweb.config也是/var/www/cgi-bin,它的内容是:

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

[trusted] 
users = * 

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

回购浏览器工作正常,这是只是推动不起作用。 Apache error_log根本就没有任何关于这个错误的信息。

回答

0

得到此线程试图解决一个类似的错误,在一个稍微不同的设置(ubuntu,cgi文件在存储库)。 长话短说我有2个主要问题:

  • 我最终取出的BaseURL选项hgrc和hgweb.config
  • 选项似乎并不总是相同的方式处理。
1

在我看来,回购是从第一个身份验证锁定,以获得变更集。 获得chagesets后,hg尝试再次认证,我想,回购仍然被锁定 Hg autehticates 3次失败前(autenticaçãohttp:usuáriogoolic,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

这是一个selinux问题。

我刚刚经历了同样的问题

了尝试以此为根

使用echo 0>/SELinux的/强制

,然后再试一次。这将禁用SELinux,直到重新启动,以便永久性地解决它,你需要禁用SELinux或弄清楚如何禁用此特定问题

这里,我找到了解决办法

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

的SELinux禁用的信息在这里

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

11

我在Ubuntu上也有类似的问题。当我松开.hg目录的权限时,问题就停止了。

我从repo目录中做了一个chmod -R 777 .hg。之后,一切都奏效了。我仍然需要四处寻找允许推送的最小允许选项,但是这可以在我们的内部开发服务器上运行。

+2

我不太喜欢给文件赋予777权限,但它在第一次尝试时解决了我的问题。现在我将尝试了解哪些权限错误。顺便说一下,+1。 – 2011-03-25 12:12:42

+0

+1。它的工作原理如上所述感谢rossmcf – 2012-07-30 16:37:42

+0

我也遇到了这个问题,但我没有给出777,而是调查了在工作目录中.hg/AND中的某些文件/文件夹是由另一个用户拥有的,而不是'www-data'。所以我将它们更改为'www-data',因为这是用户hgweb.cgi正在运行的。 – 2013-03-23 11:10:18

14

对我来说,这是服务器上的权限设置错误。一个chown -R www-data /path/to/repo(在服务器上)为我解决了它......也许这对你来说是不同的。 祝你好运。

+1

我想你是指'chown',对吧? – harpo 2011-05-01 19:58:21

+3

这是正确的答案。无需做777. – Houman 2012-03-04 19:06:44

+1

我同意卡夫,这是正确的答案 – etuardu 2012-11-28 17:21:08

4

而不是777,与/opt/hgapache,你的仓库下运行Web服务器:

执行sudo chown :apache /opt/hg -R到库添加到Apache组和sudo chmod g+w /opt/hg -R给该组的写入权限。这样你只需提供足够的权限。

在Ubuntu下运行的Apache进程运行在www-data而不是apache

+0

这对我来说很适合在Ubuntu – Tilendor 2012-02-21 02:39:01

0

我和@ pete-brumm有类似的情况,但是因为我稍后会过渡到受控区域,关闭SELinux不是一个选项。

像皮特一样关闭SELinux并重试该操作 - 如果它正常工作,则已将此问题隔离。重新打开它就像这样:

# echo 1> /selinux/enforce 

之前完全转向了SELinux关闭,请尝试更改安全上下文您的回购位于:其他

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

一种可能性为那些寻找这些档案。

我是从Apache的运行WSGIDaemonProcess,像这样:

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 

所以,在我的情况下,用户:组中拥有回购该文件应该已经hgrepo:hgrepo,而事实上,我有这个权利。然而,果然,一个快速的实验chmod 0777表明,这个问题是某种标准的所有权/权限问题。那么,事实证明,我在Apache配置中为另一个 WSGIDaemonProcess,完全不同的目的,指向不同的位置,并分配了不同的processGroup,user和group。尽管如此,这个(上面)WSGIDaemonProcess正在运行,因为其他用户:组,因此,当然,它不工作。现在,我刚刚删除了另一个进程,因为它只是实验,但是,fww,这是档案的一个。