Difference between revisions of "GitSetup"
(details of git setup on span) |
|||
| Line 1: | Line 1: | ||
== Git setup on span == | == Git setup on span == | ||
| − | + | The goal is to have a a shared, writeable repository for files controlling the setup of virtual machines, in particular site-info.def and friends, and firstboot scripts. | |
| − | + | The git version control software has very good branch management and is fully distributed in setup. All actions are committed to a local repository, and can be pushed to (or pulled from) other repositories. | |
| + | |||
| + | === Gitosis === | ||
| + | |||
| + | To have a shared writable repository nonetheless, gitosis is installed on span.nikhef.nl | ||
| + | |||
| + | [http://scie.nti.st/2007/11/14/hosting-git-repositories-the-easy-and-secure-way|Instructions for setting up gitosis] are found on-line and these were followed almost literally. | ||
| + | |||
| + | git clone git://eagain.net/gitosis.git | ||
| + | cd gitosis/ | ||
| + | sudo python setup.py install | ||
| + | sudo adduser -r -d /srv/git -c 'git version control' --shell /bin/sh git | ||
| + | sudo -u git gitosis-init < id-rsa.pub | ||
| + | |||
| + | The management of gitosis is through git! | ||
| + | |||
| + | git clone git@span:gitosis-admin.git | ||
| + | <manage the config file and keydir> | ||
| + | git commit | ||
| + | git push | ||
| + | |||
| + | Now it becomes interesting. After configuring write access to the 'siteinfo' repository, the local siteinfo repository was configured to push to git@span as well: | ||
| + | |||
| + | cd ~/src/siteinfo | ||
| + | git remote add shared git@span.nikhef.nl:siteinfo.git | ||
| + | git push shared | ||
| + | |||
| + | === Git-daemon === | ||
| + | |||
| + | It is convenient to have read-only anonymous access to selected repositories as well. First, through git-daemon. This comes with the git distribution so the following init script was installed as /etc/init.d/git-daemon. | ||
| + | |||
| + | #!/bin/sh | ||
| + | # | ||
| + | # Startup/shutdown script for Git Daemon | ||
| + | # | ||
| + | # Linux chkconfig stuff: | ||
| + | # | ||
| + | # chkconfig: 345 56 10 | ||
| + | # description: Startup/shutdown script for Git Daemon | ||
| + | # | ||
| + | . /etc/init.d/functions | ||
| + | |||
| + | DAEMON=git-daemon | ||
| + | ARGS='--base-path=/srv/git/repositories --detach --user=git --group=git' | ||
| + | |||
| + | prog=git-daemon | ||
| + | |||
| + | start () { | ||
| + | echo -n $"Starting $prog: " | ||
| + | |||
| + | # start daemon | ||
| + | daemon $DAEMON $ARGS | ||
| + | RETVAL=$? | ||
| + | echo | ||
| + | [ $RETVAL = 0 ] && touch /var/lock/git-daemon | ||
| + | return $RETVAL | ||
| + | } | ||
| + | |||
| + | stop () { | ||
| + | # stop daemon | ||
| + | echo -n $"Stopping $prog: " | ||
| + | killproc $DAEMON | ||
| + | RETVAL=$? | ||
| + | echo | ||
| + | [ $RETVAL = 0 ] && rm -f /var/lock/git-daemon | ||
| + | } | ||
| + | |||
| + | restart() { | ||
| + | stop | ||
| + | start | ||
| + | } | ||
| + | |||
| + | case $1 in | ||
| + | start) | ||
| + | start | ||
| + | ;; | ||
| + | stop) | ||
| + | stop | ||
| + | ;; | ||
| + | restart) | ||
| + | restart | ||
| + | ;; | ||
| + | status) | ||
| + | status $DAEMON | ||
| + | RETVAL=$? | ||
| + | ;; | ||
| + | *) | ||
| + | |||
| + | echo $"Usage: $prog {start|stop|restart|status}" | ||
| + | exit 3 | ||
| + | esac | ||
| + | |||
| + | exit $RETVAL | ||
| + | |||
| + | |||
| + | The git-daemon will only export repositories that have the file named | ||
| + | git-daemon-export-ok | ||
| + | in the root, and gitosis-admin is thereby excluded from public view. This file is not under version control. | ||
| + | |||
| + | === Gitweb === | ||
| + | instructions were found on [http://git.wiki.kernel.org/index.php/Gitweb|the Gitweb wiki]. | ||
The git installation on span is from DAG: | The git installation on span is from DAG: | ||
| Line 9: | Line 109: | ||
git-1.5.2.1-1.el5.rf | git-1.5.2.1-1.el5.rf | ||
| − | The web application gitweb.cgi is not included in the rpm, so it was built from the sources in the source rpm. | + | The web application gitweb.cgi is not included in the rpm, so it was built from the sources in the source rpm. The variable GITWEB_EXPORT_OK indicates the file name that flags public visibility for repositories, just like git-daemon. |
wget http://dag.wieers.com/rpm/packages/git/git-1.5.2.1-1.rf.src.rpm | wget http://dag.wieers.com/rpm/packages/git/git-1.5.2.1-1.rf.src.rpm | ||
| Line 16: | Line 116: | ||
tar xfj git-1.5.2.1.tar.bz2 | tar xfj git-1.5.2.1.tar.bz2 | ||
cd git-1.5.2.1 | cd git-1.5.2.1 | ||
| − | make GITWEB_PROJECTROOT=/srv/git prefix=/usr gitweb/gitweb.cgi | + | make GITWEB_PROJECTROOT=/srv/git/repositories GITWEB_EXPORT_OK=git-daemon-export-ok prefix=/usr gitweb/gitweb.cgi |
| + | sudo cp gitweb/gitweb.* /srv/git/gitweb/ | ||
| − | gitweb | + | The apache configuration in /etc/httpd/conf.d/git.conf: |
| + | Alias /git /srv/git/gitweb | ||
| − | + | <Directory /srv/git/gitweb > | |
| − | + | Options Indexes FollowSymLinks ExecCGI | |
| − | |||
| − | |||
| − | |||
| − | <Directory /srv/git > | ||
| − | |||
AddHandler cgi-script cgi | AddHandler cgi-script cgi | ||
| − | + | AllowOverride None | |
DirectoryIndex gitweb.cgi | DirectoryIndex gitweb.cgi | ||
RewriteEngine On | RewriteEngine On | ||
| Line 37: | Line 134: | ||
</Directory> | </Directory> | ||
| − | The | + | The repositories can be browsed at http://span.nikhef.nl/git/. |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
Revision as of 15:37, 16 February 2010
Git setup on span
The goal is to have a a shared, writeable repository for files controlling the setup of virtual machines, in particular site-info.def and friends, and firstboot scripts.
The git version control software has very good branch management and is fully distributed in setup. All actions are committed to a local repository, and can be pushed to (or pulled from) other repositories.
Gitosis
To have a shared writable repository nonetheless, gitosis is installed on span.nikhef.nl
for setting up gitosis are found on-line and these were followed almost literally.
git clone git://eagain.net/gitosis.git cd gitosis/ sudo python setup.py install sudo adduser -r -d /srv/git -c 'git version control' --shell /bin/sh git sudo -u git gitosis-init < id-rsa.pub
The management of gitosis is through git!
git clone git@span:gitosis-admin.git <manage the config file and keydir> git commit git push
Now it becomes interesting. After configuring write access to the 'siteinfo' repository, the local siteinfo repository was configured to push to git@span as well:
cd ~/src/siteinfo git remote add shared git@span.nikhef.nl:siteinfo.git git push shared
Git-daemon
It is convenient to have read-only anonymous access to selected repositories as well. First, through git-daemon. This comes with the git distribution so the following init script was installed as /etc/init.d/git-daemon.
#!/bin/sh
#
# Startup/shutdown script for Git Daemon
#
# Linux chkconfig stuff:
#
# chkconfig: 345 56 10
# description: Startup/shutdown script for Git Daemon
#
. /etc/init.d/functions
DAEMON=git-daemon
ARGS='--base-path=/srv/git/repositories --detach --user=git --group=git'
prog=git-daemon
start () {
echo -n $"Starting $prog: "
# start daemon
daemon $DAEMON $ARGS
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch /var/lock/git-daemon
return $RETVAL
}
stop () {
# stop daemon
echo -n $"Stopping $prog: "
killproc $DAEMON
RETVAL=$?
echo
[ $RETVAL = 0 ] && rm -f /var/lock/git-daemon
}
restart() {
stop
start
}
case $1 in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
status)
status $DAEMON
RETVAL=$?
;;
*)
echo $"Usage: $prog {start|stop|restart|status}"
exit 3
esac
exit $RETVAL
The git-daemon will only export repositories that have the file named
git-daemon-export-ok
in the root, and gitosis-admin is thereby excluded from public view. This file is not under version control.
Gitweb
instructions were found on Gitweb wiki.
The git installation on span is from DAG:
git-1.5.2.1-1.el5.rf
The web application gitweb.cgi is not included in the rpm, so it was built from the sources in the source rpm. The variable GITWEB_EXPORT_OK indicates the file name that flags public visibility for repositories, just like git-daemon.
wget http://dag.wieers.com/rpm/packages/git/git-1.5.2.1-1.rf.src.rpm rpm -i git-1.5.2.1-1.rf.src.rpm cd rpmbuild/SOURCES/ tar xfj git-1.5.2.1.tar.bz2 cd git-1.5.2.1 make GITWEB_PROJECTROOT=/srv/git/repositories GITWEB_EXPORT_OK=git-daemon-export-ok prefix=/usr gitweb/gitweb.cgi sudo cp gitweb/gitweb.* /srv/git/gitweb/
The apache configuration in /etc/httpd/conf.d/git.conf:
Alias /git /srv/git/gitweb
<Directory /srv/git/gitweb >
Options Indexes FollowSymLinks ExecCGI
AddHandler cgi-script cgi
AllowOverride None
DirectoryIndex gitweb.cgi
RewriteEngine On
RewriteBase /git
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.* /gitweb.cgi/$0 [L,PT]
</Directory>
The repositories can be browsed at http://span.nikhef.nl/git/.