2010-04-19 249 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,這是檔案的一個。