Я пытаюсь настроить git на своем сервере с использованием smart http в качестве механизма доступа. Из-за некоторых проблем интеграции мы не можем использовать какие-либо другие методы, и это должны быть методы http или https.
Так что я подписался на кучу блогов / статей и сумел запустить эту штуку.
Однако теперь, несмотря на то, что клонирование и извлечение работают, операция извлечения не работает.
Я поделился соответствующими конфигурациями и журналами здесь.
SetEnv GIT_PROJECT_ROOT /var/www/git
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ /home/fsmk/domains/git.fsmk.org/cgi-bin/git-http-backend/
SetEnv REMOTE_USER=$REDIRECT_REMOTE_USER
<Directory "/usr/lib/git-core/">
AllowOverride None
Options +ExecCGI -Includes
Order allow,deny
Allow from all
</Directory>
<LocationMatch "^/git/.*$">
AuthType Basic
AuthName "Private Git Repositories on git.fsmk.org"
AuthUserFile /etc/apache2/conf.d/git.passwd
Require valid-user
</LocationMatch>
#!/bin/bash
PATH_INFO=$SCRIPT_URL
export GIT_PROJECT_ROOT=/var/www/
export GIT_HTTP_EXPORT_ALL=true
/usr/lib/git-core/git-http-backend
Это не вызывает ошибок. Это журналы доступа к apache.
IP - - [05/Jun/2018:17:55:13 +0000] "GET /git/testrepo.git/info/refs?service=git-upload-pack HTTP/1.1" 401 610 "-" "git/2.17.1"
IP - TESTUSER [05/Jun/2018:17:55:29 +0000] "GET /git/testrepo.git/info/refs?service=git-upload-pack HTTP/1.1" 200 656 "-" "git/2.17.1"
IP - TESTUSER [05/Jun/2018:17:55:30 +0000] "POST /git/testrepo.git/git-upload-pack HTTP/1.1" 200 18662 "-" "git/2.17.1"
Это вывод git clone -v на моей клиентской машине
Cloning into 'testrepo'…
Username for 'http://git.fsmk.org': TESTUSER
Password for 'http://sohomPush@git.fsmk.org':
Server supports multi<sub>ack</sub><sub>detailed</sub>
Server supports no-done
Server supports side-band-64k
Server supports ofs-delta
Server version is git/2.11.0
want 7c9a3fe7d59991e187ba99ee6e3ecb4fcb68d1be (refs/heads/master)
done
POST git-upload-pack (165 bytes)
remote: Counting objects: 55, done.
remote: Compressing objects: 100% (45/45), done.
remote: Total 55 (delta 6), reused 0 (delta 0)
Unpacking objects: 100% (55/55), done.
Нет ошибок в журнале ошибок apache и журнале suexec. Это журналы доступа apache
IP- - [05/Jun/2018:17:58:29 +0000] "GET /git/testrepo.git/info/refs?service=git-upload-pack HTTP/1.1" 401 610 "-" "git/2.17.1"
IP - TESTUSER [05/Jun/2018:17:58:36 +0000] "GET /git/testrepo.git/info/refs?service=git-upload-pack HTTP/1.1" 200 656 "-" "git/2.17.1"
Вывод на локальном клиенте тоже обычный
Нет ошибки suexec. Это журналы доступа к apache.
IP - - [05/Jun/2018:18:03:51 +0000] "GET /git/testrepo.git/info/refs?service=git-receive-pack HTTP/1.1" 401 610 "-" "git/2.17.1"
IP - TESTUSER [05/Jun/2018:18:03:59 +0000] "GET /git/testrepo.git/info/refs?service=git-receive-pack HTTP/1.1" 200 539 "-" "git/2.17.1"
Процесс проталкивания зависает после POST
линия. Это подробный вывод push на моем клиенте
Pushing to <http://git.fsmk.org/git/testrepo.git>
Username for 'http://git.fsmk.org': TESTUSER
Password for 'http://sohomPush@git.fsmk.org':
Counting objects: 2, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 240 bytes | 240.00 KiB/s, done.
Total 2 (delta 1), reused 0 (delta 0)
POST git-receive-pack (393 bytes)
(hangs)
Это то, что показывают журналы ошибок apache после операции push. Статистики висели на неопределенный срок.
Это журналы ошибок apache
[Tue Jun 05 18:09:00.134148 2018] [cgi:warn] [pid 5586] [client 45.124.158.238:51094] AH01220: Timeout waiting for output from CGI script /home/fsmk/domains/git.fsmk.org/cgi-bin/git-http-backend
[Tue Jun 05 18:09:00.134254 2018] [core:error] [pid 5586] (70007)The timeout specified has expired: [client IP:51094] AH00574: ap<sub>content</sub><sub>length</sub><sub>filter</sub>: apr<sub>bucket</sub><sub>read</sub>() failed
Изменение, которое я предлагаю, очень минимальное. Я просто удаляю файл, фиксирую его и нажимаю.
IP в журналах является заполнителем для моих клиентов IP-адрес TESTUSER - это пользователь, который аутентифицируется с помощью htpasswd
Операционная система: Debian 9 (сервер), Arch (клиент)
Версия Apache: 2.4.5
Версия Git: 2.11.0 (сервер), 2.17.0 (клиент)
Мы также используем Virutalmin на сервере.
Что-то мне не хватает по этой проблеме? Почему не работает толчок?
Есть ли лучший способ обслуживания одного репозитория git через Интернет с использованием http / https?
Скорее всего, бэкэнд git не смог записать в указанный каталог, а затем просто завис (проверьте с помощью ps -ef | grep git). Это могло повредить репо, поэтому дальнейшие попытки выполнить не удастся.
Чтобы это работало
1) все дерево каталогов должно принадлежать git.www-data и быть доступным для записи группе (chown -R git.www-data, chmod -R go + rw)
2) создайте пустое репо (git init --bare), а затем попробуйте клонировать и нажать.
Да, ssh - лучший способ обслуживать репозитории git.