Ошибка разрешения hgWebDir push

У меня есть новый сервер Fedora 12, на котором я пытаюсь настроить Mercurial. У меня есть yum install ed mercurial, и большинство вещей, похоже, работают нормально. Однако, после настройки hgwebdir.cgi через apache, я не могу сделать hg push для единственного репо, которое в настоящее время размещается. Ошибка, которую я возвращаю:

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

httpd работает как пользователь 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

и я устанавливаю разрешения, чтобы пользователь 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

У меня есть клон репо в другом месте на машине, работающей как другой пользователь. Если я установил значение default в разделе [paths] файла hons clones в локальный путь к файлу на сервере, то нажатие будет прекрасным, но если я переключу его на использование 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 = *

Браузер repo работает нормально, он просто толкает, что не работает. Apache error_log вообще ничего не знает об этой ошибке.

Ответ 1

Для меня были установлены неверные разрешения на сервере. A chown -R www-data /path/to/repo (на сервере) исправил все это для меня... может быть, это для вас другое. Удачи.

Ответ 2

У меня была аналогичная проблема с Ubuntu. Проблема остановилась, когда я ослабил разрешения в каталоге .hg.

Я сделал chmod -R 777 .hg из каталога repo. После этого все сработало. Мне все же нужно поиграть, чтобы найти минимально разрешающий параметр, который позволяет делать нажатия, но это работает на нашем внутреннем сервере dev.

Ответ 3

Вместо 777 с веб-сервером, работающим под группой apache, и вашими репозиториями в /opt/hg:

Выполните sudo chown :apache /opt/hg -R, чтобы добавить репозитории в группу apache и sudo chmod g+w /opt/hg -R, чтобы предоставить возможность записи в группу. Таким образом вы просто даете достаточно разрешений.

Кстати в Ubuntu процесс apache выполняется под www-data вместо apache.

Ответ 4

Мне кажется, что репо заблокировано из первого auth, в котором он получает изменения. После получения chagesets hg пытается снова аутентифицироваться, хотя, предположим, репо все еще заблокировано Hg autehticates 3 раза перед неудачей (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

Ответ 5

Это проблема selinux.

Я только что прошел через ту же проблему

попробуйте сделать это как root

echo 0 > /selinux/enforce

и повторите попытку. что отключит 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

Ответ 6

Получил этот поток, пытаясь решить подобную ошибку, на немного другой настройке (ubuntu, cgi файл в базе репозиториев). Короче говоря, у меня было 2 основных вопроса:

  • Я закончил удаление опции baseurl
  • параметры в hgrc и hgweb.config, похоже, не всегда обрабатываются одинаково.

Ответ 7

У меня была аналогичная ситуация с @pete-brumm, но потому что я перейду в контролируемый регион позже, отключив SELinux, это не вариант.

Отключите SELinux, как говорит Пит, и повторите действие - если это сработает, вы выделили проблему. Включите его так:

# echo 1> /selinux/enforce

Прежде чем полностью отключить SELinux, попробуйте изменить контекст безопасности, в котором расположены ваши репозитории:

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

Ответ 8

Еще одна возможность для тех, кто ищет эти архивы.

Я запускал WSGIDaemonProcess из apache, например:

  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 показал, что проблема была как-то стандартной проблемой прав собственности/разрешений. Ну, оказалось, что у меня был другой WSGIDaemonProcess в конфигурации apache, для другой цели вообще, указывая на другое место и назначая другую группу процессов, пользователя и группу. Тем не менее, этот (выше) WSGIDaemonProcess работал как другой пользователь: group, и, следовательно, он не работал. На данный момент я только что удалил этот другой процесс, поскольку он был только экспериментальным, но, fwiw, здесь один для архивов.