mailing list of musl libc
 help / color / mirror / code / Atom feed
From: Assaf Gordon <assafgordon@gmail.com>
To: musl@lists.openwall.com
Subject: Re: Supporting git access via smart HTTPS protocol for musl-libc
Date: Tue, 26 Mar 2019 14:39:13 -0600	[thread overview]
Message-ID: <CAHN-GmxZMx69Wf+Lwq8RaUQKx7Z=k19fX7sSsTref+g5jTwSdg@mail.gmail.com> (raw)
In-Reply-To: <20190326175700.GD23599@brightrain.aerifal.cx>

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.

Hope this helps,
regards,
 - assaf


  parent reply	other threads:[~2019-03-26 20:39 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20190324103306.GB1830@localhost>
     [not found] ` <20190326003411.GC1872@localhost>
2019-03-26  1:09   ` vlse
2019-03-26  1:17     ` A. Wilcox
2019-03-26  1:37       ` Rich Felker
2019-03-26  1:54         ` vlse
2019-03-26  2:59           ` Rich Felker
2019-03-26 10:02             ` vlse
2019-03-26 10:36               ` Laurent Bercot
2019-03-26 15:04               ` Rich Felker
2019-03-26 15:09                 ` Drew DeVault
2019-03-26 15:13                   ` Rich Felker
2019-03-26 15:43                     ` Drew DeVault
2019-03-26 15:47                       ` Rich Felker
2019-03-26 15:57                         ` Drew DeVault
2019-03-26 17:57                           ` Rich Felker
2019-03-26 20:32                             ` A. Wilcox
2019-03-26 20:39                             ` Assaf Gordon [this message]
2019-03-26 22:02                               ` Rich Felker
2019-03-26 22:32                                 ` Assaf Gordon
2019-03-26 23:58                                   ` Rich Felker
2019-03-27  0:15                                     ` Rich Felker
2019-03-27  5:39                                       ` vlse
2019-03-27 17:26                                         ` Assaf Gordon
2019-03-27 17:41                                           ` Assaf Gordon
2019-04-03  6:42                                           ` vlse
2019-03-26 10:19             ` Jens Gustedt
2019-03-26 10:30               ` vlse
2019-03-26 14:59               ` Rich Felker
2019-03-26  1:43       ` vlse
2019-03-26  2:29         ` A. Wilcox

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAHN-GmxZMx69Wf+Lwq8RaUQKx7Z=k19fX7sSsTref+g5jTwSdg@mail.gmail.com' \
    --to=assafgordon@gmail.com \
    --cc=musl@lists.openwall.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/musl/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).