Fail to push over HTTP with MySQL authentication (Apache2)
Hi,
I'm not able to setup a public Git repository over plain HTTP with MySQL authentication.
Both HTTP and authentication are provided by Apache2.
SETUP:
-----
This setup is performed on Debian 6.0.4.
Apache2 (v. 2.2), with modules:
auth_mysql
WebDAV
Git (v. 1.7.8.3)
Git repository location:
local, for webserver: /var/www/public/GT_rulesets/GT00.git
public, for Git: http://greatturn.org:8081/GT00.git
Git repository has been configured as:
cd /var/www/public/GT_rulesets/GT00.git
git init --bare
mv hooks/post-update.sample hooks/post-update
git update server-info
chmode 777 /var/www/public/GT_rulesets/GT00.git # for testing.
FACTS:
-----
The Apache side of my setup seems to work:
_ HTTP, MySQL authentication:
I point Iceweasel to http://greatturn.org:8081/ .
It asks for authentication; I authenticate with a username/ password pair taken from MySQL database (which doesn't exist as a system user); It works, and I can see all the content of the git repository "GT00.git".
_ WebDAV:
I point Konqueror to webdav://greatturn.org:8081/ . Works exactly as previous point.
_ Git:
Git can fetch the repository without problems:
git clone http://username:[email protected]:8081/GT00.git
Pushing the locally fetched repository back to the remote one doesn't work:
"git push http://greatturn.org:8081/GT00.git master" asks for username and password: > Username for 'greatturn.org:8081': > Password for 'greatturn.org:8081': I enter my credentials, then git outputs the following and exits: > error: Cannot access URL http://greatturn.org:8081/GT00.git/,
return code 22
> fatal: git-http-push failed
On Apache's access.log, git produces all and no more than the following:
> 87.19.240.177 - - [29/Dec/2012:16:43:22 +0100] "GET /GT00.git
/info/refs?service=git-receive-pack HTTP/1.1" 401 767 "-" "git/1.7.8.3"
> 87.19.240.177 - - [29/Dec/2012:16:43:26 +0100] "GET
/GT00.git/info/refs?service=git-receive-pack HTTP/1.1" 401 767 "-"
"git/1.7.8.3"
> 87.19.240.177 - davide [29/Dec/2012:16:43:26 +0100] "GET
/GT00.git/info/refs?service=git-receive-pack HTTP/1.1" 200 233 "-"
"git/1.7.8.3"
> 87.19.240.177 - davide [29/Dec/2012:16:43:26 +0100] "GET
/GT00.git/HEAD HTTP/1.1" 200 258 "-" "git/1.7.8.3"
> 87.19.240.177 - - [29/Dec/2012:16:43:26 +0100] "PROPFIND/GT00.git/ HTTP/1.1" 401 767 "-" "git/1.7.8.3"
Quoted 9 lines · Davide Baldini
SETUP:
-----
[...]
Git repository has been configured as:
cd/var/www/public/GT_rulesets/GT00.git
git init --bare
mv hooks/post-update.sample hooks/post-update
git update server-info
chmode 777/var/www/public/GT_rulesets/GT00.git# for testing.
Should this last line be a "chmod -R"? Git init will create many subdirectories, and you want to make sure they are all writable for push.
Quoted 8 lines
_ Git:
Git can fetch the repository without problems:
git clone http://username:[email protected]:8081/GT00.gitPushing the locally fetched repository back to the remote one doesn't work:
[...]Quoted 1 line
87.19.240.177 - - [29/Dec/2012:16:43:26 +0100] "PROPFIND /GT00.git/ HTTP/1.1" 401 767 "-" "git/1.7.8.3"
If fetch is working and push is not, I'd suspect WebDAV configuration problems (and indeed, your credentials seem fine, but the PROPFIND is returning a 401). Fetch works over stock HTTP and does not use WebDAV at all. There is some documentation on setting up DAV here:
https://github.com/git/git/blob/master/Documentation/howto/setup-git-server-over-http.txt
but I have no idea if it is up-to-date or not.
However, before trying to investigate that avenue, have you considered using git's smart-http backend instead of WebDAV? It's significantly more efficient. You can get details and example apache configuration from "git help http-backend".
-Peff
Quoted 4 lines · Jeff King
However, before trying to investigate that avenue, have you considered using git's smart-http backend instead of WebDAV? It's significantly more efficient. You can get details and example apache configuration from "git help http-backend".
Thank you for the suggestions, I've been able to have the setup running. I abandoned the horrible WebDAV in favour of Smart HTTP, and it's been quite straightforward to configure and run successfully.
There is some documentation on setting up DAV here:
Quoted 4 lines
https://github.com/git/git/blob/master/Documentation/howto/setup-git-server-over-http.txt
but I have no idea if it is up-to-date or not.
No it's not up-to-date. It should refer to Apache versions <2.0 . Some of its config directives are inexistent in modern Apaches.
- Davide