diff options
Diffstat (limited to 't/smart-http.root-setup')
-rwxr-xr-x | t/smart-http.root-setup | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/t/smart-http.root-setup b/t/smart-http.root-setup new file mode 100755 index 0000000..f22dcb5 --- /dev/null +++ b/t/smart-http.root-setup @@ -0,0 +1,105 @@ +#!/bin/bash + +# ---------------------------------------------------------------------- +# please do not even LOOK at this file without reading doc/http.mkd +# ---------------------------------------------------------------------- + +die() { echo "$@"; exit 1; } + +# scare the sh*t out of people who run it blindly +[ -f /tmp/gitolite-smart-http-test-OK ] || { + # scary message + echo '+ rm -rf /' + # lots of disk activity + find / >/dev/null 2>/dev/null + # and it he's still clueless, God bless! + echo 'root file system erased successfully. Goodbye and God bless!' + exit 1 +} + +# ---------------------------------------------------------------------- +# are we *BSD or Linux? +uname_s=`uname -s` # could be Linux or FreeBSD or some other BSD +if [ "$uname_s" = "Linux" ] +then + bsd=: +else + lnx=: +fi + +# ---------------------------------------------------------------------- +# main + +[ $EUID = 0 ] || die "you must run this as root" + +# delete any existing apache conf for gitolite +$lnx rm /etc/httpd/conf.d/gitolite.conf +$bsd rm /usr/local/etc/apache24/Includes/gitolite.conf + +# build your "home within a home" +$lnx cd ~apache +$bsd rm -rf /tmp/usr.share.httpd +$bsd mkdir -p /tmp/usr.share.httpd +$bsd chown www:www /tmp/usr.share.httpd +$bsd cd /tmp/usr.share.httpd + +rm -rf gitolite-home +mkdir gitolite-home +export GITOLITE_HTTP_HOME=$PWD/gitolite-home + +# get the gitolite sources +cd gitolite-home +git clone /tmp/gitolite.git gitolite-source +# NOTE: I use a bare repo in /tmp for convenience; you'd use +# 'https://github.com/sitaramc/gitolite' + +# make the bin directory, and add it to PATH +cd gitolite-source +mkdir $GITOLITE_HTTP_HOME/bin +./install -ln $GITOLITE_HTTP_HOME/bin +export PATH=$PATH:$GITOLITE_HTTP_HOME/bin + +# come back to base, then run setup. Notice that you have to point HOME to +# the right place, even if it is just for this command +cd $GITOLITE_HTTP_HOME +HOME=$GITOLITE_HTTP_HOME gitolite setup -a admin + +# insert some essential lines at the beginning of the rc file +echo '$ENV{PATH} .= ":$ENV{GITOLITE_HTTP_HOME}/bin";' >> 1 +echo >> 1 +cat .gitolite.rc >> 1 +\mv 1 .gitolite.rc + +# fix up ownership +$lnx chown -R apache:apache $GITOLITE_HTTP_HOME +$bsd chown -R www:www $GITOLITE_HTTP_HOME + +# create the apache config. Note the trailing slashes on the 2 ScriptAlias +# lines. (The second one is optional for most sites). NOTE: you also need to +# give the AuthUserFile a better name/location than what I have below. +cat <<EOF1 > 1 +SetEnv GIT_PROJECT_ROOT $GITOLITE_HTTP_HOME/repositories +ScriptAlias /git/ $GITOLITE_HTTP_HOME/gitolite-source/src/gitolite-shell/ +ScriptAlias /gitmob/ $GITOLITE_HTTP_HOME/gitolite-source/src/gitolite-shell/ +SetEnv GITOLITE_HTTP_HOME $GITOLITE_HTTP_HOME +SetEnv GIT_HTTP_EXPORT_ALL + +<Location /git> + AuthType Basic + AuthName "Private Git Access" + Require valid-user + AuthUserFile $GITOLITE_HTTP_HOME/gitolite-http-authuserfile +</Location> +EOF1 +$lnx mv 1 /etc/httpd/conf.d/gitolite.conf +$bsd mv 1 /usr/local/etc/apache24/Includes/gitolite.conf + +# NOTE: this is for testing only +htpasswd -bc $GITOLITE_HTTP_HOME/gitolite-http-authuserfile admin admin +map "htpasswd -b $GITOLITE_HTTP_HOME/gitolite-http-authuserfile % %" u{1..6} +$lnx chown apache:apache $GITOLITE_HTTP_HOME/gitolite-http-authuserfile +$bsd chown www:www $GITOLITE_HTTP_HOME/gitolite-http-authuserfile + +# restart httpd to make it pick up all the new stuff +$lnx service httpd restart +$bsd /usr/local/etc/rc.d/apache24 restart |