easy install: allow ports other than 22 for ssh to server

This commit is contained in:
Sitaram Chamarty 2009-10-11 14:08:14 +05:30
parent d78bbe8c3e
commit 0b81bfd6ec

View file

@ -26,9 +26,10 @@ prompt() {
} }
usage() { usage() {
cat <<EOFU cat <<EOFU
Usage: $0 user host admin_name Usage: $0 user host port admin_name
- "user" is the username on the server where you will be installing gitolite - "user" is the username on the server where you will be installing gitolite
- "host" is that server's hostname (or IP address is also fine) - "host" is that server's hostname (or IP address is also fine)
- "port" is optional
- "admin_name" is *your* name as you want it to appear in the eventual - "admin_name" is *your* name as you want it to appear in the eventual
gitolite config file gitolite config file
@ -61,18 +62,24 @@ EOFU
exit 1; exit 1;
} }
[[ -z $1 ]] && usage
[[ -z $3 ]] && usage [[ -z $3 ]] && usage
[[ "$1" =~ [^a-zA-Z0-9._-] ]] && die "user '$1' invalid"
[[ "$3" =~ [^a-zA-Z0-9._-] ]] && die "admin_name '$3' invalid"
# MANUAL: (info) we'll use "git" as the user, "server" as the host, and
# "sitaram" as the admin_name in example commands shown below, if any
user=$1 user=$1
host=$2 host=$2
admin_name=$3 admin_name=$3
# but if the 3rd arg is a number, that's a port number, and the 4th arg is the
# admin_name
port=22
[[ $3 =~ ^[0-9]+$ ]] && {
port=$3
[[ -z $4 ]] && usage
admin_name=$4
}
[[ "$user" =~ [^a-zA-Z0-9._-] ]] && die "user '$user' invalid"
[[ "$admin_name" =~ [^a-zA-Z0-9._-] ]] && die "admin_name '$admin_name' invalid"
# MANUAL: (info) we'll use "git" as the user, "server" as the host, and
# "sitaram" as the admin_name in example commands shown below, if any
# ---------------------------------------------------------------------- # ----------------------------------------------------------------------
# basic sanity checks # basic sanity checks
@ -93,7 +100,7 @@ ls src/gl-auth-command \
# is, running "ssh git@server" should log in straight away, without asking for # is, running "ssh git@server" should log in straight away, without asking for
# a password # a password
ssh -o PasswordAuthentication=no $user@$host pwd >/dev/null || ssh -p $port -o PasswordAuthentication=no $user@$host pwd >/dev/null ||
die "pubkey access didn't work; please set it up using 'ssh-copy-id' or something" die "pubkey access didn't work; please set it up using 'ssh-copy-id' or something"
# MANUAL: make sure there's no "gitolite-admin" directory in $HOME (actually # MANUAL: make sure there's no "gitolite-admin" directory in $HOME (actually
@ -152,14 +159,16 @@ fi
# The lines to be included look like this: # The lines to be included look like this:
# host gitolite # host gitolite
# hostname server
# user git # user git
# hostname server
# port 22
# identityfile ~/.ssh/sitaram # identityfile ~/.ssh/sitaram
echo " echo "
host gitolite host gitolite
hostname $host
user $user user $user
hostname $host
port $port
identityfile ~/.ssh/$admin_name" > $HOME/.ssh/.gl-stanza identityfile ~/.ssh/$admin_name" > $HOME/.ssh/.gl-stanza
if grep 'host *gitolite' $HOME/.ssh/config &>/dev/null if grep 'host *gitolite' $HOME/.ssh/config &>/dev/null
@ -191,8 +200,8 @@ rm $HOME/.ssh/.gl-stanza
# server, to a directory called (for example) "gitolite-install". You may # server, to a directory called (for example) "gitolite-install". You may
# have to create the directory first. # have to create the directory first.
ssh $user@$host mkdir -p gitolite-install ssh -p $port $user@$host mkdir -p gitolite-install
rsync -a src conf doc $user@$host:gitolite-install/ rsync -e "ssh -p $port" -a src conf doc $user@$host:gitolite-install/
# MANUAL: now log on to the server (ssh git@server) and get a command line. # MANUAL: now log on to the server (ssh git@server) and get a command line.
# This step is for your convenience; the script does it all from the client # This step is for your convenience; the script does it all from the client
@ -219,20 +228,20 @@ that all the paths etc. represent paths on the server!"
${VISUAL:-${EDITOR:-vi}} .gitolite.rc ${VISUAL:-${EDITOR:-vi}} .gitolite.rc
# copy the rc across # copy the rc across
scp .gitolite.rc $user@$host: scp -P $port .gitolite.rc $user@$host:
prompt "ignore any 'please edit this file' or 'run this command' type prompt "ignore any 'please edit this file' or 'run this command' type
lines in the next set of command outputs coming up. They're only lines in the next set of command outputs coming up. They're only
relevant for a manual install, not this one..." relevant for a manual install, not this one..."
# extract the GL_ADMINDIR and REPO_BASE locations # extract the GL_ADMINDIR and REPO_BASE locations
GL_ADMINDIR=$(ssh $user@$host "perl -e 'do \".gitolite.rc\"; print \$GL_ADMINDIR'") GL_ADMINDIR=$(ssh -p $port $user@$host "perl -e 'do \".gitolite.rc\"; print \$GL_ADMINDIR'")
REPO_BASE=$( ssh $user@$host "perl -e 'do \".gitolite.rc\"; print \$REPO_BASE'") REPO_BASE=$( ssh -p $port $user@$host "perl -e 'do \".gitolite.rc\"; print \$REPO_BASE'")
# MANUAL: still in the "gitolite-install" directory? Good. Run # MANUAL: still in the "gitolite-install" directory? Good. Run
# "src/install.pl" # "src/install.pl"
ssh $user@$host "cd gitolite-install; src/install.pl" ssh -p $port $user@$host "cd gitolite-install; src/install.pl"
# MANUAL: setup the initial config file. Edit $GL_ADMINDIR/conf/gitolite.conf # MANUAL: setup the initial config file. Edit $GL_ADMINDIR/conf/gitolite.conf
# and add at least the following lines to it: # and add at least the following lines to it:
@ -252,13 +261,13 @@ repo testing
" > gitolite.conf " > gitolite.conf
# send the config and the key to the remote # send the config and the key to the remote
scp gitolite.conf $user@$host:$GL_ADMINDIR/conf/ scp -P $port gitolite.conf $user@$host:$GL_ADMINDIR/conf/
scp $HOME/.ssh/$admin_name.pub $user@$host:$GL_ADMINDIR/keydir scp -P $port $HOME/.ssh/$admin_name.pub $user@$host:$GL_ADMINDIR/keydir
# MANUAL: cd to $GL_ADMINDIR and run "src/gl-compile-conf" # MANUAL: cd to $GL_ADMINDIR and run "src/gl-compile-conf"
ssh $user@$host "cd $GL_ADMINDIR; src/gl-compile-conf" ssh -p $port $user@$host "cd $GL_ADMINDIR; src/gl-compile-conf"
# ---------------------------------------------------------------------- # ----------------------------------------------------------------------
# hey lets go the whole hog on this; setup push-to-admin! # hey lets go the whole hog on this; setup push-to-admin!
@ -278,13 +287,13 @@ ssh $user@$host "cd $GL_ADMINDIR; src/gl-compile-conf"
echo "cd $REPO_BASE/gitolite-admin.git echo "cd $REPO_BASE/gitolite-admin.git
GIT_WORK_TREE=$GL_ADMINDIR git add conf/gitolite.conf keydir GIT_WORK_TREE=$GL_ADMINDIR git add conf/gitolite.conf keydir
GIT_WORK_TREE=$GL_ADMINDIR git commit -am start GIT_WORK_TREE=$GL_ADMINDIR git commit -am start
" | ssh $user@$host " | ssh -p $port $user@$host
# MANUAL: now that the admin repo is created, you have to set the hooks # MANUAL: now that the admin repo is created, you have to set the hooks
# properly. The install program does this. So cd back to the # properly. The install program does this. So cd back to the
# "gitolite-install" directory and run "src/install.pl" # "gitolite-install" directory and run "src/install.pl"
ssh $user@$host "cd gitolite-install; src/install.pl" ssh -p $port $user@$host "cd gitolite-install; src/install.pl"
prompt "now we will clone the gitolite-admin repo to your workstation prompt "now we will clone the gitolite-admin repo to your workstation
and see if it all hangs together. We'll do this in your \$HOME for now, and see if it all hangs together. We'll do this in your \$HOME for now,