|
|
Message-ID: <20190326220225.GE23599@brightrain.aerifal.cx>
Date: Tue, 26 Mar 2019 18:02:25 -0400
From: Rich Felker <dalias@...c.org>
To: musl@...ts.openwall.com
Subject: Re: Supporting git access via smart HTTPS protocol for
musl-libc
On Tue, Mar 26, 2019 at 02:39:13PM -0600, Assaf Gordon wrote:
> Hello,
>
> I might be able to suggest few pointers on setting up git/http CGI access.
>
> The git package contains 'git-http-backend' (typically in /usr/lib/git-core)
> which is a cgi backend meant for smart/dump git cloning.
>
> On GNU Savannah we use NGINX with the following configuration:
>
> location = /r { return 302 $request_uri/; }
> location /r/ {
> autoindex on;
> alias /srv/git/;
> location ~ ^/r(/.*/(info/refs|git-upload-pack)$) {
> gzip off;
> include fastcgi_params;
> fastcgi_pass unix:/var/run/fcgiwrap.socket;
> fastcgi_param SCRIPT_FILENAME /usr/local/sbin/git-http-backend;
> fastcgi_param PATH_INFO $1;
> fastcgi_param GIT_HTTP_EXPORT_ALL true;
> fastcgi_param GIT_PROJECT_ROOT /srv/git;
> client_max_body_size 0;
> }
> }
>
> (You made your opinion on nginx clear, but this is just for reference for
> a working configuration).
>
> -----
>
> To run the backend manually, try variations of the following:
>
> $ REQUEST_METHOD=GET GIT_HTTP_EXPORT_ALL=true \
> GIT_PROJECT_ROOT=/home/gordon/projects/ PATH_INFO=/musl/.git/HEAD \
> /usr/lib/git-core/git-http-backend
>
> Content-Length: 23
> Content-Type: text/plain
> ref: refs/heads/master
>
> (running 'man git-http-bckend' will give more details about GIT_PROJECT_ROOT
> etc.).
>
> ----
>
> To run under busybox's httpd, I used the following contrived setup:
>
> mkdir www
> mkdir www/cgi-bin
> echo "hello world" > www/index.html
> cat<<EOF>www/cgi-bin/test.sh
> #!/bin/sh
> echo "Content-type: text/html"
> echo ""
> echo "Hello CGI World"
> EOF
> chmod a+x ./www/cgi-bin/test.sh
>
> busybox httpd -v -f -p 9999 -h ./www
>
> This will start the busybox httpd server, serving files from ./www folder.
> Assuming busybox/httpd was compiled with CGI support, the script in the
> 'cgi-bin' directory should "just work". Test with:
>
> $ curl http://localhost:9999/
> hello world
>
> $ curl http://localhost:9999/cgi-bin/test.sh
> Hello CGI World
>
> If the above worked, the CGI setup is fine and we can move on the git.
>
> ---
>
> Create the following wrapper in ./www/cgi-bin/ (any file name would work,
> but a file name without extension 'looks' better, e.g. 'view'):
>
> #!/bin/sh
> export GIT_HTTP_EXPORT_ALL=true
> export GIT_PROJECT_ROOT=/home/gordon/projects/
> export HTTP_CONTENT_ENCODING=gzip
> exec /usr/lib/git-core/git-http-backend
>
> and make it executable with "chmod a+x ./www/cgi-bin/view".
>
> This setup will serve ANY repository under the 'GIT_PROJECT_ROOT'.
> You can of course adjust as needed.
> In my case, I have '/home/gordon/projects/musl/',
> which is tested below like so:
>
> $ curl -D /dev/stderr http://localhost:9999/cgi-bin/view/musl/HEAD
> HTTP/1.0 200 OK
> Content-Length: 23
> Content-Type: text/plain
>
> ref: refs/heads/master
>
> The above curl command executed the 'view' script with PATH_INFO being
> '/musl/HEAD' - which is a request git-http-backend knows how to handle.
>
> If the above worked, cloning 'should work' as well:
>
> $ git clone http://localhost:9999/cgi-bin/view/musl
> Cloning into 'musl'...
> remote: Counting objects: 31250, done.
> remote: Compressing objects: 100% (9126/9126), done.
> remote: Total 31250 (delta 22523), reused 30465 (delta 21759)
> Receiving objects: 100% (31250/31250), 4.78 MiB | 0 bytes/s, done.
> Resolving deltas: 100% (22523/22523), done.
>
> ----
>
> Others in this thread talked about URL re-routing/aliasing.
> This would be useful to hide the "cgi-bin" part of the URL, but busybox's
> httpd doesn't support it. Having it in the URL isn't the end of the world
> if one insist on using a minimalistic web server.
>
> ----
>
> I haven't used thttpd, but it should work very similarly.
Thanks for the info. I've been playing with it, but haven't been able
to get it to work yet. I suspect thttpd is doing something broken with
the POST request since the git clone breaks during that. Going to look
at it in more detail later.
Rich
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.