git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: HOWTO set up a repository which can be pushed into over HTTP

From
Johannes Schindelin <johannes.schindelin@gmx.de>
Date
Aug 8, 2006, 23:11 UTC
Message-ID
<Pine.LNX.4.63.0608090049480.1800@wbgn013.biozentrum.uni-wuerzburg.de>
In-Reply-To
<20060808190220.GA6001@nospam.com>
Hi,
On Tue, 8 Aug 2006, Rutger Nijlunsing wrote:
Show 18 quoted lines
> On Mon, Aug 07, 2006 at 12:55:43AM -0700, Junio C Hamano wrote:
> > Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:
> > 
> > > Do people find it useful? Or would you like to wait until I implement an 
> > > option in git-http-push to actually init an HTTP repo remotely?
> > 
> > I do not have need for push over http-dav at the moment myself,
> > but I would imagine I would certainly look for it when I would
> > need to later.
> > 
> > Do people find it useful?  More importantly, has somebody else
> > independently tried to follow the documentation and found the
> > description accurate and helpful?
> 
> Today I did try to follow it, and it made an otherwise impossible job
> for me doable, although still taking too much hours and a patch. The
> 'impossible job' for me had to do with my zero-apache experience and
> (probably) a bug in WebDAV.

Thank you for doing that valuable work! I think the patch is fine (take that as an Acked-by:); next time you might want to send it as a proper patch mail ;-)

Show 18 quoted lines
> -This text assumes that you
> -
> -- have an Apache webserver,
> -- can edit the configuration of it,
> -- can restart it, and
> +
> +What's needed:
> +
> +- Have an Apache webserver
> +
> +  On Debian:
> +    $ apt-get install apache2
> +    To get apache2 by default started,
> +    edit /etc/default/apache2 and set NO_START=0
> +
> +- can edit the configuration of it
> +
> +  On Debian: this means being able to edit files under /etc/apache2

On some other setups, it is /etc/httpd/. Since it is not specific to Debian, we might want to give some common options, but refer the user to the Apache manual if she cannot find it.

> +
> +- can restart it.
> +  'apachectl --graceful' might do.
It is Ã'apachectl graceful' here (without'--').
> +  On Debian:
> +    $ /etc/init.d/apache2 restart

This should work everywhere, except it might be called apache or httpd instead. However, please warn users that this interrupts (however briefly) a running webserver, and if you do that on a production machine, users just downloading an iso file might be rightfully upset.

>  - have permissions to chown a directory
>  
> +In effect, this probably means you're going to be root.
Right.
Show 9 quoted lines
> -	$ cd /usr/local/apache/htdocs
> -	$ mkdir my-new-repo.git
> +    $ cd /usr/local/apache/htdocs
> +    $ mkdir my-new-repo.git
> +
> +  On Debian:
> +
> +    $ cd /var/www
> +    $ mkdir my-new-repo.git

Again, it might be cooler to be a bit more portable: if the user found httpd.config, he could just "grep DocumentRoot /where/ever/httpd.conf".

Show 7 quoted lines
>  Change the ownership to your webserver's credentials
> + 
> +    $ chown -R www.www .
> +
> +  On Debian:
> +
> +    $ chown -R www-data.www-data .

Again, a better way would be to direct the user to "grep ^User httpd.conf" and "grep ^Group httpd.conf".

> +Restart apache2, and check whether http://server/my-new-repo.git gives
> +a directory listing. If not, check whether apache started up
> +succesfully.
A useful addition.
Show 17 quoted lines
>  Step 2: enable DAV on this repository
>  -------------------------------------
>  
> -In your httpd.conf, make sure that this line exists:
> +In your httpd.conf, make sure that this line exists which is the file
> +used for locking DAV operations:
> +
> +  DAVLockDB "/usr/local/apache2/temp/DAV.lock"
> +
> +  On Debian:
>  
> -	DAVLockDB "/usr/local/apache2/temp/DAV.lock"
> +    Enable the dav and dav_fs modules of apache:
> +    $ a2enmod dav_fs
> +    $ a2enmod dav
> +    The DAV lock is located in /etc/apache2/mods-available/dav_fs.conf:
> +      DAVLockDB /var/lock/apache2/DAVLock

I did not find a2enmod on my only Debian setup, so a more portable way would be to tell the user to insert the following lines in httpd.conf:

	LoadModule dav_module libexec/httpd/libdav.so
	AddModule mod_dav.c

(I do not know if there are setups where you have to load dav_fs explicitely...)

Show 19 quoted lines
>  Then, add something like this to your httpd.conf
>  
> -	<Location /my-new-repo.git>
> -		DAV on
> -		AuthType Basic
> -		AuthName "Git"
> -		AuthUserFile /usr/local/apache2/conf/passwd.git
> -		Require valid-user
> -	</Location>
> +  <Location /my-new-repo.git>
> +     DAV on
> +     AuthType Basic
> +     AuthName "Git"
> +     AuthUserFile /usr/local/apache2/conf/passwd.git
> +     Require valid-user
> +  </Location>
> +
> +  On Debian:
> +    Create (or add to) /etc/apache2/conf.d/git.conf :
Is this picked up automatically?
Show 7 quoted lines
> +    <Location /my-new-repo.git>
> +       DAV on
> +       AuthType Basic
> +       AuthName "Git"
> +       AuthUserFile /etc/apache2/passwd.git
> +       Require valid-user
> +    </Location>
We should not violate the DRY principle ("Don´'Repeat Yourself").
Show 21 quoted lines
> +
> +The password file can be somewhere else, but it has to be readable by
> +Apache and preferably not readable by the world.
>  
> -The password file can be somewhere else, but it has to be readable by 
> -Apache.
> +Create this file by
> +    $ htpasswd -c /usr/local/apache2/conf/passwd.git <user>
>  
> -You can create this file by
> +    On Debian:
> +      $ htpasswd -c /etc/apache2/passwd.git <user>
>  
> -	$ htpasswd -c /usr/local/apache2/conf/passwd.git <user>
> -
> -you will be asked a password, and the file is created. Subsequent calls
> +You will be asked a password, and the file is created. Subsequent calls
>  to htpasswd should omit the '-c' option, since you want to append to the
>  existing file.
>  
> -You need to restart Apache; 'apachectl --graceful' is sufficient.
So, it was my fault to begin with: the '--' is wrong.
> +Now go to http://<username>@<servername>/my-new-repo.git in your
> +browser to check whether it asks for a password and accepts the right
> +password.
Helpful.
Show 6 quoted lines
> +On Debian:
> +
> +   To test the WebDAV part, do:
> +
> +   $ apt-get install litmus
> +   $ litmus http://<servername>/my-new-repo.git <username> <password>

There has to be a more portable way to test WebDAV, like an URL to type into a webbrowser. DAV wizards, anyone?

> -Then, add the following to your .netrc (you can do without, but will be
> +Then, add the following to your ~/.netrc (you can do without, but will be

Okay, I thought it was common knowledge where this resides. Although I would say $HOME/.netrc instead.

> +...and set permissions:
> +     chmod 600 ~/.netrc
Yeah, right. I always forget about this.
> +    On Windows, use %HOMEDRIVE%%HOMEPATH%.netrc instead.
Huh? You want to access it with something else than cygwin?
Show 5 quoted lines
> +To check whether all is OK, do:
> +
> +   curl --netrc --location -v http://<username>@<servername>/my-new-repo.git/
> +
> +...this should give a directory listing in HTML of /var/www/my-new-repo.git .
Does everybody who has libcurl installed, have curl installed also?
Show 11 quoted lines
>  >From your client repository, do
>  
> -	$ git-http-push upload master
> +   $ git push upload master
> +
> +This pushes branch 'master' (which is assumed to be the branch you
> +want to export) to repository called 'upload', which we previously
> +defined with git-repo-config.
>  
> -(This assumes that the branch you want to export is called 'master' in your
> -client setup...)
Your wording is much clearer.
Show 7 quoted lines
>  request; This can happen when you start Apache, but then disable the
>  network interface. A simple restart of Apache helps.
>  
> -In other cases, reading /usr/local/apache2/logs/error_log is often helpful.
> -
> +Errors like (22/502) are of format (curl error code/http error
> +code). So (22/404) means something like 'not found' at the server.
I think the error log is more useful than the http error codes.

Ciao, Dscho

Previous: Rutger NijlunsingNext: Rutger Nijlunsing
Message 6 of 8 in “HOWTO set up a repository which can be pushed into over HTTP”
  1. Johannes SchindelinAug 4, 2006
  2. Junio C HamanoAug 4, 2006
  3. Johannes SchindelinAug 4, 2006
  4. Junio C HamanoAug 7, 2006
  5. Rutger NijlunsingAug 8, 2006
  6. Johannes SchindelinAug 8, 2006
  7. Rutger NijlunsingAug 9, 2006
  8. Johannes SchindelinAug 9, 2006

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.