git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* HOWTO set up a repository which can be pushed into over HTTP
@ 2006-08-04 18:38 Johannes Schindelin
  2006-08-04 19:12 ` Junio C Hamano
  0 siblings, 1 reply; 8+ messages in thread
From: Johannes Schindelin @ 2006-08-04 18:38 UTC (permalink / raw)
  To: git

Hi,

I set up such a repository twice now, and it is not exactly 
straight-forward. So, maybe some people find this useful:

This text assumes that you

- have an Apache webserver,
- can edit the configuration of it,
- can restart it, and
- have permissions to chown a directory

Step 1: setup a bare repository
-------------------------------

Create the directory (this assumes you have your Apache installed in
/usr/local/apache2):

	$ cd /usr/local/apache/htdocs
	$ mkdir my-new-repo.git

Initialize a bare repository

	$ cd my-new-repo.git
	$ git --bare init-db

Change the ownership to your webserver's credentials

	$ chown -R www.www .

If you do not know which user Apache runs as, you can alternatively do a 
"chmod -R a+w .", inspect the files which are created later on, and set 
the permissions appropriately.

Step 2: enable DAV on this repository
-------------------------------------

In your httpd.conf, make sure that this line exists:

	DAVLockDB "/usr/local/apache2/temp/DAV.lock"

Of course, it can point somewhere else, but the string is actually just a 
prefix in some Apache configurations, and therefore the _directory_ has to 
be writable by the user Apache runs as.

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>

The password file can be somewhere else, but it has to be readable by 
Apache.

You can create this file by

	$ htpasswd -c /usr/local/apache2/conf/passwd.git <user>

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.

Step 3: setup the client
------------------------

Make sure that you have HTTP support, i.e. your git was built with curl.
The easiest way to check is to look for the executable 'git-http-push'.

Then, add the following to your .netrc (you can do without, but will be
asked to input your password a _lot_ of times):

	machine <servername>
	login <username>
	password <password>

If you want to access the webserver by its IP, you have to type that in,
instead of the server name.

Now, add the remote in your existing repository which contains the project
you want to export:

	$ git-repo-config remote.upload.url \
		http://<username>@<servername>/my-new-repo.git/

It is important to put the last '/'; Without it, the server will send
a redirect which git-http-push does not (yet) understand, and git-http-push
will repeat the request inifinitely.

Step 4: make the initial push
-----------------------------

>From your client repository, do

	$ git-http-push upload master

(This assumes that the branch you want to export is called 'master' in your
client setup...)

Troubleshooting:
----------------

If git-http-push says

	Error: no DAV locking support on remote repo http://...

then it means the webserver did not accept your authentication. Make sure
that the user name and password matches in httpd.conf, .netrc and the URL
you are uploading to.

If git-http-push shows you an error (22/502) when trying to MOVE a blob,
it means that your webserver somehow does not recognize its name in the
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.

Ciao,
Dscho

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: HOWTO set up a repository which can be pushed into over HTTP
  2006-08-04 18:38 HOWTO set up a repository which can be pushed into over HTTP Johannes Schindelin
@ 2006-08-04 19:12 ` Junio C Hamano
  2006-08-04 22:45   ` Johannes Schindelin
  0 siblings, 1 reply; 8+ messages in thread
From: Junio C Hamano @ 2006-08-04 19:12 UTC (permalink / raw)
  To: Johannes Schindelin; +Cc: git

Nice addition to Documentation/howto/ I would presume...

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: HOWTO set up a repository which can be pushed into over HTTP
  2006-08-04 19:12 ` Junio C Hamano
@ 2006-08-04 22:45   ` Johannes Schindelin
  2006-08-07  7:55     ` Junio C Hamano
  0 siblings, 1 reply; 8+ messages in thread
From: Johannes Schindelin @ 2006-08-04 22:45 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git

Hi,

On Fri, 4 Aug 2006, Junio C Hamano wrote:

> Nice addition to Documentation/howto/ I would presume...

I actually planned to submit a patch with a file in that directory 
first... But then I read the files already in it, and they all look like 
they were emails first, which got -- presumably by several people finding 
it useful -- into a patch.

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?

Ciao,
Dscho

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: HOWTO set up a repository which can be pushed into over HTTP
  2006-08-04 22:45   ` Johannes Schindelin
@ 2006-08-07  7:55     ` Junio C Hamano
  2006-08-08 19:02       ` Rutger Nijlunsing
  0 siblings, 1 reply; 8+ messages in thread
From: Junio C Hamano @ 2006-08-07  7:55 UTC (permalink / raw)
  To: Johannes Schindelin; +Cc: git

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?

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: HOWTO set up a repository which can be pushed into over HTTP
  2006-08-07  7:55     ` Junio C Hamano
@ 2006-08-08 19:02       ` Rutger Nijlunsing
  2006-08-08 23:11         ` Johannes Schindelin
  0 siblings, 1 reply; 8+ messages in thread
From: Rutger Nijlunsing @ 2006-08-08 19:02 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Johannes Schindelin, git

[-- Attachment #1: Type: text/plain, Size: 1204 bytes --]

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.

Find attached updated HOWTO with specific information for Debian
users, and a patch to git to git-http-push since initially WebDAV gave
me MOVE 22/404 errors.

--
Rutger Nijlunsing ---------------------------------- eludias ed dse.nl
never attribute to a conspiracy which can be explained by incompetence
----------------------------------------------------------------------

[-- Attachment #2: howto --]
[-- Type: text/plain, Size: 5546 bytes --]

HOWTO: Setting up a git repository which can be pushed into and pulled
from over HTTP.

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

- can restart it.
  'apachectl --graceful' might do.

  On Debian:
    $ /etc/init.d/apache2 restart

- have permissions to chown a directory

In effect, this probably means you're going to be root.


Step 1: setup a bare GIT repository
-----------------------------------

Create the directory (this assumes you have your Apache installed in
/usr/local/apache2):

    $ cd /usr/local/apache/htdocs
    $ mkdir my-new-repo.git

  On Debian:

    $ cd /var/www
    $ mkdir my-new-repo.git


Initialize a bare repository
 
    $ cd my-new-repo.git
    $ git --bare init-db


Change the ownership to your webserver's credentials
 
    $ chown -R www.www .

  On Debian:

    $ chown -R www-data.www-data .


If you do not know which user Apache runs as, you can alternatively do
a "chmod -R a+w .", inspect the files which are created later on, and
set the permissions appropriately.

Restart apache2, and check whether http://server/my-new-repo.git gives
a directory listing. If not, check whether apache started up
succesfully.


Step 2: enable DAV on this repository
-------------------------------------

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:

    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

Of course, it can point somewhere else, but the string is actually just a 
prefix in some Apache configurations, and therefore the _directory_ has to 
be writable by the user Apache runs as.

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>

  On Debian:
    Create (or add to) /etc/apache2/conf.d/git.conf :

    <Location /my-new-repo.git>
       DAV on
       AuthType Basic
       AuthName "Git"
       AuthUserFile /etc/apache2/passwd.git
       Require valid-user
    </Location>

The password file can be somewhere else, but it has to be readable by
Apache and preferably not readable by the world.

Create this file by
    $ htpasswd -c /usr/local/apache2/conf/passwd.git <user>

    On Debian:
      $ htpasswd -c /etc/apache2/passwd.git <user>

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.

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.

On Debian:

   To test the WebDAV part, do:

   $ apt-get install litmus
   $ litmus http://<servername>/my-new-repo.git <username> <password>

   Mosts tests should pass.


Step 3: setup the client
------------------------
 
Make sure that you have HTTP support, i.e. your git was built with curl.
The easiest way to check is to look for the executable 'git-http-push'.

Then, add the following to your ~/.netrc (you can do without, but will be
asked to input your password a _lot_ of times):

    machine <servername>
    login <username>
    password <password>

...and set permissions:
     chmod 600 ~/.netrc

    On Windows, use %HOMEDRIVE%%HOMEPATH%.netrc instead.

If you want to access the webserver by its IP, you have to type that in,
instead of the server name.

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 .


Now, add the remote in your existing repository which contains the project
you want to export:
 
   $ git-repo-config remote.upload.url \
       http://<username>@<servername>/my-new-repo.git/

It is important to put the last '/'; Without it, the server will send
a redirect which git-http-push does not (yet) understand, and git-http-push
will repeat the request inifinitely.


Step 4: make the initial push
-----------------------------

>From your client repository, do

   $ 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.


Troubleshooting:
----------------

If git-http-push says

   Error: no DAV locking support on remote repo http://...

then it means the webserver did not accept your authentication. Make sure
that the user name and password matches in httpd.conf, .netrc and the URL
you are uploading to.

If git-http-push shows you an error (22/502) when trying to MOVE a blob,
it means that your webserver somehow does not recognize its name in the
request; This can happen when you start Apache, but then disable the
network interface. A simple restart of Apache helps.

Errors like (22/502) are of format (curl error code/http error
code). So (22/404) means something like 'not found' at the server.

Reading /usr/local/apache2/logs/error_log is often helpful.
On Debian: Read /var/log/apache2/error.log instead.


[-- Attachment #3: commit-bd1ba73 --]
[-- Type: text/plain, Size: 980 bytes --]

commit bd1ba734176277034c6e4b33eb68fde170286538
Author: Rutger Nijlunsing <git@tux.tmfweb.nl>
Date:   Tue Aug 8 14:17:38 2006 +0200

    http-push: Use '_token' instead of '.token' as temporary file before renaming.
    
    WebDAV on Debian unstable cannot handle renames on WebDAV from
    file.ext to newfile (without ext) when newfile* already
    exists. Normally, git creates a file like 'objects/xx/sha1.token',
    which is renamed to 'objects/xx/sha1' when transferred completely.
    
    Just use '_' instead of '.' so WebDAV doesn't see it as an extension
    change.

diff --git a/http-push.c b/http-push.c
index 4021e7d..d45733e 100644
--- a/http-push.c
+++ b/http-push.c
@@ -530,7 +530,7 @@ static void start_put(struct transfer_re
 	request->dest = xmalloc(strlen(request->url) + 14);
 	sprintf(request->dest, "Destination: %s", request->url);
 	posn += 38;
-	*(posn++) = '.';
+	*(posn++) = '_';
 	strcpy(posn, request->lock->token);
 
 	slot = get_active_slot();

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: HOWTO set up a repository which can be pushed into over HTTP
  2006-08-08 19:02       ` Rutger Nijlunsing
@ 2006-08-08 23:11         ` Johannes Schindelin
  2006-08-09 19:31           ` Rutger Nijlunsing
  0 siblings, 1 reply; 8+ messages in thread
From: Johannes Schindelin @ 2006-08-08 23:11 UTC (permalink / raw)
  To: git; +Cc: Junio C Hamano, git

[-- Attachment #1: Type: TEXT/PLAIN, Size: 7646 bytes --]

Hi,

On Tue, 8 Aug 2006, Rutger Nijlunsing wrote:

> 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 ;-)

> -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.

> -	$ 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".

>  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.

>  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...)

>  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?

> +    <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").

> +
> +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.

> +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?

> +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?

>  >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.

>  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

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: HOWTO set up a repository which can be pushed into over HTTP
  2006-08-08 23:11         ` Johannes Schindelin
@ 2006-08-09 19:31           ` Rutger Nijlunsing
  2006-08-09 20:20             ` Johannes Schindelin
  0 siblings, 1 reply; 8+ messages in thread
From: Rutger Nijlunsing @ 2006-08-09 19:31 UTC (permalink / raw)
  To: Johannes Schindelin; +Cc: git, Junio C Hamano, git

> > 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 ;-)

Ok, I send it out. Don't know if I did it proper...


> > -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.

Ok, but I find it always very convenient when someone describes the
situation for _me_. So if other distro's would join in, I would be
delighted. And indeed a general fallback to the Apache documentation
would be good for all distro's (+ homegrown) not covered.

However, Debian already differs quite some from the defaults. I wrote
this addendum to the documentation _because_ it costed me quite some
time since Debian tries to be different.

Debian seperates as much as possible into different files and
directories to be able to easily install and deinstall modules with
the package manager. And it has scripts to manage those directories.

> > +
> > +- 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.

If you're on a production machine with a webserver already in
production, you're probably not using this tutorial (I hope).

If you're downloading a large iso, recent browsers have 'resume'
buttons. The internet has never been very reliable.

If you're on Debian, '/etc/init.d/apache2 restart' is the same as
'/etc/init.d/apache2 force-reload', so no interruptions.

...but warning is always good :)


> > +  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".

Nope. On Debian, httpd.conf is a placeholder which does not contain
anything expect for:

# This is here for backwards compatability reasons and to support
#  installing 3rd party modules directly via apxs2, rather than
#  through the /etc/apache2/mods-{available,enabled} mechanism.
#
#LoadModule mod_placeholder /usr/lib/apache2/modules/mod_placeholder.so

And the grep gives nothing. Doing a recursive grep gives:

/etc/apache2$ grep -r DocumentRoot * 
sites-available/default:        DocumentRoot /var/www
sites-enabled/000-default:      DocumentRoot /var/www

...where sites-enabled is a link to sites-available.


> >  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".

Both come up empty on Debian. The uid + gid appear to be in apache2.conf :

/etc/apache2$ grep ^User *         
apache2.conf:User www-data


> > +  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

No, a2enmod is the recommended way to enable modules. It adds symlinks
from the /etc/apache2/mods-enabled to /etc/apache2/mods-available.

I got those from http://www.debian-administration.org/articles/285

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

According to http://www.debian-administration.org/articles/285, I had
to. Didn't check it myself, though.

> > +  On Debian:
> > +    Create (or add to) /etc/apache2/conf.d/git.conf :
> 
> Is this picked up automatically?

Yup. From /etc/apache2/README:

...
conf.d/

        Files in this directory are included by this line in
        apache2.conf:

        # Include generic snippets of statements
        Include /etc/apache2/conf.d

        This is a good place to add additional configuration
        directives.

httpd.conf

        Empty file.
...



> > +    <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").

Ok, a merge could be done, but AuthUserFile is different.
Something like
    +       AuthUserFile <passwd-file>
then.

> > +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?

The renaming bug I found by using Windows Internet Explorer -> Open Location ->
http://<servername>/my-new-repo.git [x] Open as webfolder -> login,
and copy a file to it, rename it, ...

Another interactive tool is cadaver (see
http://www.debian-administration.org/articles/285 again).

With FUSE + fusedav you can mount a WebDAV like a normal filesystem
(which is cool ;)

> > -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.

Ok.

> > +    On Windows, use %HOMEDRIVE%%HOMEPATH%.netrc instead.
> 
> Huh? You want to access it with something else than cygwin?

You're right, Cygwin should have $HOME set.

> > +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?

Don't know, but I think most people who have apache2 installed have
better things to worry about :) Might want to add the dependancy
explicitly in the document, yes.

> > -	$ 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.

It took me a while to figure out, I (incorrectly) assumed 'upload' was
the name of the remote branch. And git-http-push didn't work at once,
so I got it working with some extra options before I realised it
should be 'git push' instead.


> >  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.

You deleted those two lines (look at the version I sent), so jut put
them back :)


Do you want to finish it, or should I do a reedit?

Regards,
Rutger.

-- 
Rutger Nijlunsing ---------------------------------- eludias ed dse.nl
never attribute to a conspiracy which can be explained by incompetence
----------------------------------------------------------------------

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: HOWTO set up a repository which can be pushed into over HTTP
  2006-08-09 19:31           ` Rutger Nijlunsing
@ 2006-08-09 20:20             ` Johannes Schindelin
  0 siblings, 0 replies; 8+ messages in thread
From: Johannes Schindelin @ 2006-08-09 20:20 UTC (permalink / raw)
  To: git; +Cc: Junio C Hamano, git

Hi,

On Wed, 9 Aug 2006, Rutger Nijlunsing wrote:

> > [...] but refer the user to the Apache manual if she cannot find it.
> 
> Ok, but I find it always very convenient when someone describes the
> situation for _me_. So if other distro's would join in, I would be
> delighted. And indeed a general fallback to the Apache documentation
> would be good for all distro's (+ homegrown) not covered.

If everybody did this, you would not _find_ your distro-specific things 
;-)

But I agree, Debian is a bureaucrat's dream. I positively _hate_ it. So 
much so, that I left Knoppix behind.

> [lots of explanations of Debian, Windows Explorer, etc.]

Thanks for clearing these up for me!

> Do you want to finish it, or should I do a reedit?

I am a little short on time, and I want to finish the merge-recur stuff, 
so I would be really grateful if you did it.

Ciao,
Dscho

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2006-08-09 20:20 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-08-04 18:38 HOWTO set up a repository which can be pushed into over HTTP Johannes Schindelin
2006-08-04 19:12 ` Junio C Hamano
2006-08-04 22:45   ` Johannes Schindelin
2006-08-07  7:55     ` Junio C Hamano
2006-08-08 19:02       ` Rutger Nijlunsing
2006-08-08 23:11         ` Johannes Schindelin
2006-08-09 19:31           ` Rutger Nijlunsing
2006-08-09 20:20             ` Johannes Schindelin

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).