TL;DR;  The current issue is this error:

        error: cannot run upload-pack: No such file or directory


Steps:

1) OpenBSD 6.5 fresh install

2) pkg_add git

3) make /var/www/dev/null

       # mkdir dev
       # mknod dev/null c 2 2
       # chmod 666 dev/null

4) put `git-http-backend` into jail

       # for f in `ldd /usr/local/libexec/git/git-http-backend | grep '/usr/' | 
grep -v ':' | awk '{print $7}'`; do
             d=`dirname $f | sed 's#^/##'`
             mkdir -p $d
             cp $f $d
          done

5) put `git-upload-pack` into jail

       # for f in `ldd /usr/local/libexec/git/git-upload-pack  | grep '/usr/' | 
grep -v ':' | awk '{print $7}'`; do
             d=`dirname $f | sed 's#^/##'`
             mkdir -p $d
             cp $f $d
          done

6) set /etc/httpd.conf

      server "default" {
          listen on 0.0.0.0 port 80

          # these two rules are trying to match 
https://git-scm.com/docs/git-http-backend 
<https://git-scm.com/docs/git-http-backend>,
          # but I suspect that I botched them...
          location match 
"^.*\.git/objects/([0-9a-f]+/[0-9a-f]+|pack/pack-[0-9a-f]+.(pack|idx))$" {
            request rewrite "/usr/local/libexec/git/git-http-backend/%1"
          }
          location match 
"^.*\.git/(HEAD|info/refs|objects/info/.*|git-(upload|receive)-pack)$" {
            request rewrite "/usr/local/libexec/git/git-http-backend/%1"
          }

          location "/docs/*" { 
              fastcgi {
                  socket "/run/slowcgi.sock"
                  param DOCUMENT_ROOT "/"
                  param GIT_HTTP_EXPORT_ALL ""
                  param GIT_PROJECT_ROOT "/git-repos"
                  param SCRIPT_FILENAME 
"/usr/local/libexec/git/git-http-backend"
              }
          }
      }

7) create "docs" repo:

      # mkdir git-repos
      # git init --bare git-repos/docs
      # cd git-repos/docs/; git update-server-info; cd -

8) In one window:

      # httpd -d -vv

9) In another window:

      # slowcgi -d

10) In a 3rd window:

      # git clone http://127.0.0.1/docs <http://127.0.0.1/docs>
      Cloning into 'docs'...
      fatal: Could not read from remote repository.

      Please make sure you have the correct access rights
      and the repository exists.

11) Observe output in the `httpd` window:

      error: cannot run upload-pack: No such file or directory

      default 127.0.0.1 - - [17/Jan/2020:11:36:35 -0500] "GET 
/docs/info/refs?service=git-upload-pack HTTP/1.1" 200 0
      server default, client 1 (1 active), 127.0.0.1:47830 -> 127.0.0.1, closed

    Notables here:

        # ls -l git-repos/docs/info/refs                                        
                                                                                
                                                             
        -rw-r--r--  1 root  daemon  0 Jan 17 11:50 git-repos/docs/info/refs

        # file git-repos/docs/info/refs   
        git-repos/docs/info/refs: empty

        (but, from experience, I know that this is a text file, not something 
that might take an HTTP query parameter)

12) Observe output in the `slowcgi` window:

      slowcgi: inflight incremented, now 1                                      
                                   
      slowcgi: version:         1                                               
                                   
      slowcgi: type:            1                                               
                                   
      slowcgi: requestId:       1                  
      slowcgi: contentLength:   8       
      slowcgi: paddingLength:   0                                               
                                                                                
                                                       
      slowcgi: reserved:        0
      slowcgi: role             1
      slowcgi: flags            0
      slowcgi: version:         1
      slowcgi: type:            4
      slowcgi: requestId:       1
      slowcgi: contentLength:   729
      slowcgi: paddingLength:   0                                               
                                                                                
                                                       
      slowcgi: reserved:        0
      slowcgi: env[0], PATH_INFO=/docs/info/refs
      slowcgi: env[1], SCRIPT_NAME=
      slowcgi: env[2], SCRIPT_FILENAME=/
      slowcgi: env[3], QUERY_STRING=service=git-upload-pack
      slowcgi: env[4], DOCUMENT_ROOT=/htdocs
      slowcgi: env[5], DOCUMENT_URI=/docs/info/refs
      slowcgi: env[6], GATEWAY_INTERFACE=CGI/1.1                                
                                                                                
                                                       
      slowcgi: env[7], HTTP_ACCEPT=*/*
      slowcgi: env[8], HTTP_ACCEPT_ENCODING=deflate, gzip
      slowcgi: env[9], HTTP_HOST=127.0.0.1
      slowcgi: env[10], HTTP_PRAGMA=no-cache
      slowcgi: env[11], HTTP_USER_AGENT=git/2.21.0
      slowcgi: env[12], GIT_PROJECT_ROOT=/git-repos
      slowcgi: env[13], GIT_HTTP_EXPORT_ALL=
      slowcgi: env[14], SCRIPT_FILENAME=/usr/local/libexec/git/git-http-backend 
                                                                                
                                                       
      slowcgi: env[15], GIT_PROJECT_ROOT=/git-repos
      slowcgi: env[16], GIT_HTTP_EXPORT_ALL=
      slowcgi: env[17], SCRIPT_FILENAME=/usr/local/libexec/git/git-http-backend
      slowcgi: env[18], REMOTE_ADDR=127.0.0.1
      slowcgi: env[19], REMOTE_PORT=47830
      slowcgi: env[20], REQUEST_METHOD=GET
      slowcgi: env[21], REQUEST_URI=/docs/info/refs?service=git-upload-pack
      slowcgi: env[22], SERVER_ADDR=127.0.0.1                                   
                                                                                
                                                       
      slowcgi: env[23], SERVER_PORT=80
      slowcgi: env[24], SERVER_NAME=default
      slowcgi: env[25], SERVER_PROTOCOL=HTTP/1.1
      slowcgi: env[26], SERVER_SOFTWARE=OpenBSD httpd
      slowcgi: version:         1
      slowcgi: type:            4
      slowcgi: requestId:       1
      slowcgi: contentLength:   0                                               
                                                                                
                                                       
      slowcgi: paddingLength:   0
      slowcgi: reserved:        0
      slowcgi: fork: /usr/local/libexec/git/git-http-backend 
      slowcgi: version:         1
      slowcgi: type:            5
      slowcgi: requestId:       1
      slowcgi: contentLength:   0
      slowcgi: paddingLength:   0                                               
                                                                                
                                                       
      slowcgi: reserved:        0
      slowcgi: resp version:         1
      slowcgi: resp type:            6
      slowcgi: resp requestId:       1
      slowcgi: resp contentLength:   172
      slowcgi: resp paddingLength:   4
      slowcgi: resp reserved:        0
      slowcgi: wait: /usr/local/libexec/git/git-http-backend                    
                                                                                
                                                       
      slowcgi: resp version:         1
      slowcgi: resp type:            6
      slowcgi: resp requestId:       1
      slowcgi: resp contentLength:   34
      slowcgi: resp paddingLength:   6
      slowcgi: resp reserved:        0
      slowcgi: resp version:         1
      slowcgi: resp type:            7                                          
                                                                                
                                                       
      slowcgi: resp requestId:       1
      slowcgi: resp contentLength:   57
      slowcgi: resp paddingLength:   7
      slowcgi: resp reserved:        0
      slowcgi: resp version:         1
      slowcgi: resp type:            6
      slowcgi: resp requestId:       1
      slowcgi: resp contentLength:   0                                          
                                                                                
                                                       
      slowcgi: resp paddingLength:   0
      slowcgi: resp reserved:        0
      slowcgi: resp version:         1
      slowcgi: resp type:            7
      slowcgi: resp requestId:       1
      slowcgi: resp contentLength:   0
      slowcgi: resp paddingLength:   0
      slowcgi: resp reserved:        0                                          
                                                                                
                                                        
      slowcgi: resp version:         1
      slowcgi: resp type:            3
      slowcgi: resp requestId:       1
      slowcgi: resp contentLength:   8
      slowcgi: resp paddingLength:   0
      slowcgi: resp reserved:        0
      slowcgi: resp appStatus:       1
      slowcgi: resp protocolStatus:  0



Thanks in advance!

Kent



Reply via email to