Hello folks,
a couple of days for now I try to setup a "smart HTTP" GIT server and followed several instructions and howto's found on the net, but without any success. Now I'd like to ask for help within the community.
General aim is to move from (well running) subversion repositories (host runs FreeBSD 12-/13-STABLE/CURRENT), Apache 2.4 https with LDAP backend authentication) towards Git with a similar security/ACL profile. The protocols git:// and ssh:// are no options.
I started with the (printed, paper, physical) book "Pro Git" of Scott Chacon and Ben Straub, 2nd edition, chapter 4, "Git on the server", pagus 89. The setup described there doesn't work on our "directory based" Apache setup (most examples use virtual hosts, but that makes, in my opinion, no difference). The printed book does have obvious flaws, so the I followed, after several hours of nonsuccess with the book's setup example, the internet version, which can be reviewed here, https://git-scm.com/book/de/v2/Git-auf-dem-Server-Smart-HTTP .
That specific setup results in an error, when trying to push to the repos. I double and triple checked that the remote orignin URL is exact what is needed, the directory structure on the host is owned by "www:www" and located on a ZFS dataset called /pool/gitbase/test.git - just for the record. http.sslVerify is set to false both in the repo's config and in the local git repo's .git/config to asure that git doesn't authenticate on SSL certs. The server has to encrypt the connection. Again, following the book's and book's URL correction, assuming the proper settings of paths for our repos, it fails and leave me with either
fatal: https://git.host.de/git/test.git/info/refs not valid: could not determine hash algorithm; is this a git repository?
or error 403 (I haven't the exact error code at hand, I moved on and you'll find the last settings below).
Authentication via LDAP always works as it still works on that webserver for any other service which ACL backend is LDAP.
I also tried several other HOWTOs, like
https://stackoverflow.com/questions/26734933/how-to-set-up-git-over-http
The last one I tried to follow is
http://wiki.flat.cl/index.php?title=Git,_Apache_and_HTTPS_with_a_free_certificate
and my /usrLocal/etc/apache24/Includes/httpd-git.conf looks
https://stackoverflow.com/questions/9008309/how-do-i-set-git-ssl-no-verify-for-specific-repos-only
to disable (and eliminate) SSL host verification mutually needed by git.
I can successfully authenticate when performing
git push -u origin master, but receive the error:
fatal: https://git.host.de/git/test.git/info/refs not valid: could not determine hash algorithm; is this a git repository?
(I have to issue username and password on the console after emitting the git command).
Apache's access log reports:
[...]
XX.XX.XX.XX - - [21/Mar/2021:12:29:27 +0000] "GET /git/test.git/info/refs?service=git-receive-pack HTTP/1.1" 401 1413 "-" "git/2.31.0" 848 6277
XX.XX.XX.XX - developer [21/Mar/2021:12:29:38 +0000] "GET /git/test.git/info/refs?service=git-receive-pack HTTP/1.1" 200 1689032 "-" "git/2.31.0" 1039 1692144
The first line indicates error 401 (which means UNAUTHORIZED) and searching the net for the error message received by the client trying to push to git indicates also some kind of access right violations. Most sites explaining to that error indicate problems of folder access right violation, but in this case, the whole repository's storage place is owned by www:www, so I'd exspect no error on that.
I'm helpless here after days of playing one HOWTO after another to solve the problem :-(
a couple of days for now I try to setup a "smart HTTP" GIT server and followed several instructions and howto's found on the net, but without any success. Now I'd like to ask for help within the community.
General aim is to move from (well running) subversion repositories (host runs FreeBSD 12-/13-STABLE/CURRENT), Apache 2.4 https with LDAP backend authentication) towards Git with a similar security/ACL profile. The protocols git:// and ssh:// are no options.
I started with the (printed, paper, physical) book "Pro Git" of Scott Chacon and Ben Straub, 2nd edition, chapter 4, "Git on the server", pagus 89. The setup described there doesn't work on our "directory based" Apache setup (most examples use virtual hosts, but that makes, in my opinion, no difference). The printed book does have obvious flaws, so the I followed, after several hours of nonsuccess with the book's setup example, the internet version, which can be reviewed here, https://git-scm.com/book/de/v2/Git-auf-dem-Server-Smart-HTTP .
That specific setup results in an error, when trying to push to the repos. I double and triple checked that the remote orignin URL is exact what is needed, the directory structure on the host is owned by "www:www" and located on a ZFS dataset called /pool/gitbase/test.git - just for the record. http.sslVerify is set to false both in the repo's config and in the local git repo's .git/config to asure that git doesn't authenticate on SSL certs. The server has to encrypt the connection. Again, following the book's and book's URL correction, assuming the proper settings of paths for our repos, it fails and leave me with either
fatal: https://git.host.de/git/test.git/info/refs not valid: could not determine hash algorithm; is this a git repository?
or error 403 (I haven't the exact error code at hand, I moved on and you'll find the last settings below).
Authentication via LDAP always works as it still works on that webserver for any other service which ACL backend is LDAP.
I also tried several other HOWTOs, like
https://stackoverflow.com/questions/26734933/how-to-set-up-git-over-http
The last one I tried to follow is
http://wiki.flat.cl/index.php?title=Git,_Apache_and_HTTPS_with_a_free_certificate
and my /usrLocal/etc/apache24/Includes/httpd-git.conf looks
with recommendations fromCode:[/QUOTE] [QUOTE] SetEnv GIT_PROJECT_ROOT /pool/gitbase SetEnv REMOTE_USER $REDIRECT_REMOTE_USER #SetEnv GIT_HTTP_EXPORT_ALL AcceptPathInfo On #ScriptAlias /git/ /usr/local/libexec/git-core/git-http-backend 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/local/libexec/git-core/git-http-backend/$1 Alias /git /pool/gitbase <Directory "/usr/local/libexec/git-core/"> Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch <RequireAll> Require ssl Require user developer gituser root administrator </RequireAll> #<Files "git-http-backend"> #Require ssl #Require expr !(%{QUERY_STRING} -strmatch '*service=git-receive-pack*' || %{REQUEST_URI} =~ m#/git-receive-pack$#) #Require user developer gituser root administrator #AuthType basic #AuthName "Git Access" #AuthBasicProvider ldap-alias1 ldap-alias2 #</Files> AuthType basic AuthName "Git Access" AuthBasicProvider ldap-alias1 ldap-alias2 </Directory>
https://stackoverflow.com/questions/9008309/how-do-i-set-git-ssl-no-verify-for-specific-repos-only
to disable (and eliminate) SSL host verification mutually needed by git.
I can successfully authenticate when performing
git push -u origin master, but receive the error:
fatal: https://git.host.de/git/test.git/info/refs not valid: could not determine hash algorithm; is this a git repository?
(I have to issue username and password on the console after emitting the git command).
Apache's access log reports:
[...]
XX.XX.XX.XX - - [21/Mar/2021:12:29:27 +0000] "GET /git/test.git/info/refs?service=git-receive-pack HTTP/1.1" 401 1413 "-" "git/2.31.0" 848 6277
XX.XX.XX.XX - developer [21/Mar/2021:12:29:38 +0000] "GET /git/test.git/info/refs?service=git-receive-pack HTTP/1.1" 200 1689032 "-" "git/2.31.0" 1039 1692144
The first line indicates error 401 (which means UNAUTHORIZED) and searching the net for the error message received by the client trying to push to git indicates also some kind of access right violations. Most sites explaining to that error indicate problems of folder access right violation, but in this case, the whole repository's storage place is owned by www:www, so I'd exspect no error on that.
I'm helpless here after days of playing one HOWTO after another to solve the problem :-(