Apache и git-http-backend

В настоящее время я настраиваю некоторые репозитории git на машине Ubuntu LTS 14.04 с Apache 2.4.7.

Это конфигурация apache:

SetEnv GIT_PROJECT_ROOT /var/www/html/git
SetEnv GIT_HTTP_EXPORT_ALL 1
SetEnv REMOTE_USER $REDIRECT_REMOTE_USER
ScriptAliasMatch \
    "(?x)^/git/(.*/(HEAD | \                                                                                                                             
                    info/refs | \                                                                                                                        
                    objects/(info/[^/]+ | \                                                                                                              
                             [0-9a-f]{2}/[0-9a-f]{38} | \                                                                                                
                             pack/pack-[0-9a-f]{40}\.(pack|idx)) | \                                                                                     
                    git-(upload|receive)-pack))$" \                                                                                                      
    /usr/lib/git-core/git-http-backend                                                                                                                   

<Location /git/oswald.git>
 Options +ExecCGI
 AuthType Basic
 DAV on
 AuthName "Git"
 AuthUserFile /etc/apache2/git_paragon_passwd
 Require valid-user

    Order allow,deny
    Allow from all
</Location>

Тестовый репозиторий находится под /var/www/html/git/oswald.git, В репозитории я установил свойство config

http.receivepack=true

Файл git-daemon-export-ok настоящее.

Если я сейчас попытаюсь клонировать с:

git clone https://server/git/oswald.git

после аутентификации я получаю:

fatal: https://server/git/oswald.git/info/refs not valid: is this a git repository?

(клиент git 2.1.0, на сервере git 1.9.1).

Я перепробовал несколько вещей, поэтому, если я не использую git-http-backend и перехожу через WebDAV, я могу клонировать, но не push, с git-http-backend я не могу даже клонировать.

Если я изменю последнюю строку ScriptAliasMatch от

/usr/lib/git-core/git-http-backend

в

/usr/lib/git-core/git-http-backend/$1

как указано в справочной странице git-http-backend, я получаю

fatal: repository 'https://server/git/oswald.git/' not found

с ошибкой.log от Apache:

AH00130: File does not exist: /usr/lib/git-core/git-http-backend/oswald.git/info/refs

У кого-нибудь есть идея, что не так? Я уже потратил много времени, просматривая форумы, но пока что никакие предложения не помогли.

4 ответа

Решение

Модуль Apache CGI включен? Попробуйте запустить sudo a2enmod cgi а затем перезапустить Apache.

У меня была точно такая же проблема, которая в конечном итоге была вызвана тем, что модуль CGI был отключен. В моем случае вышеупомянутая команда выбрала и включила модуль "cgid".

Я полагаю, вам нужен трейлинг $1 если вы используете ScriptAliasMatch, но следует опустить $1 (но оставьте косую черту), если вы используете ScriptAlias,

Вам также может понадобиться добавить Directory блок, который выглядит примерно так:

<Directory "/usr/lib/git-core">
    Options +ExecCgi -MultiViews +SymLinksIfOwnerMatch
    AllowOverride none
    Order allow,deny
    Allow from all
    Require all granted
</Directory>

Для других людей, сталкивающихся с подобными проблемами с этой определенной ошибкой:

fatal: https://server/git/oswald.git/info/refs not valid: is this a git repository?

В конце концов я обнаружил, что стало причиной этой проблемы для меня на CentOS 6.5: SELinux. Попробуйте выполнить следующую команду:

setenforce 0

Если это решает вашу проблему, то у вас есть проблема с разрешениями ACL. Конечно, выполнив вышеуказанную команду, вы отключили целый ряд проверок разрешений, но он может по крайней мере сказать вам, является ли это причиной вашей проблемы. Для получения дополнительной информации ознакомьтесь с документацией здесь.

Включите чеки обратно, запустив

setenforce 1

Я не знаю, если вы уже решили, но посмотрите на мой ответ здесь

У меня есть пара идей:

  • По моему опыту доступ к хранилищу с помощью https не удался, в то время как http работал.

  • Вы не упоминаете об изменении владельца каталога репо в соответствии с пользователем apache, вы это сделали?

  • Вы подтвердили, что сценарий git-http-backend находится там, где вы ожидаете?

Добавь это:

<Directory /usr/lib/git-core>
  Require all granted
</Directory>
Другие вопросы по тегам