Skip to content

Instantly share code, notes, and snippets.

@larruda
Created December 16, 2013 10:53
Show Gist options
  • Save larruda/7985284 to your computer and use it in GitHub Desktop.
Save larruda/7985284 to your computer and use it in GitHub Desktop.
Install Subversion 1.8.5 on Ubuntu 13.x (from WANDisco)
#!/bin/bash
#
# WANdisco Subversion install script.
# Copyright (C) 2013 WANdisco plc
#
# Please contact opensource@wandisco.com if you have any problems with this
# script.
set -e
SVN_VERSION=1.8.5-1
REPO_SERVER=${REPO_SERVER:-opensource.wandisco.com}
ARCH=$(uname -m)
# Functions
function handle_error()
{
echo
echo "There has been an error, exiting"
exit 2
}
function check_connection()
{
if which curl > /dev/null 2>&1; then
GET='curl -s -f'
elif which wget > /dev/null 2>&1; then
GET='wget -O - -q'
else
echo -n "You do not have curl or wget installed. At least one of these is "
echo "required to install WANdisco Subversion"
exit 1
fi
}
function check_root()
{
test $EUID -eq 0 ||
{
echo "You need to be root to install WANdisco subversion."
echo
echo "Please re-run this script as the root user."
exit 1
}
}
function unsupported()
{
echo "Your operating system is not currently supported."
echo
echo -n "Please visit http://www.wandisco.com/subversion/download for a list"
echo " of supported systems."
exit 1
}
function confirm()
{
local confirm=
local message=$1
local default=${2:-y}
local prompt=
test -n "$NON_INTERACTIVE" && return 0
prompt="$message ("
if test "$default" = "y"; then
prompt="${prompt}Y/n"
else
prompt="${prompt}y/N"
fi
prompt="$prompt) "
while test "$confirm" != "$default"; do
read -n 1 -p "$prompt" confirm
echo
confirm=${confirm:-$default}
confirm=${confirm/Y/y}
confirm=${confirm/N/n}
if test "$default" = "y"; then
test "$confirm" = "n" && return 1
test "$confirm" = "y" && return 0
else
test "$confirm" = "y" && return 1
test "$confirm" = "n" && return 0
fi
echo "Invalid input, please enter 'y' or 'n'"
done
return 0
}
function remove_other()
{
local other=$1
echo -n "You currently have subversion installed for another architecture "
echo -n "($other). This should be removed before installing "
echo "WANdisco Subversion."
echo
if ! confirm "Remove Subversion $other?"; then
echo "Exiting at user request"
exit 1
fi
case $OS in
rhel|centos) yum erase -y subversion.$other ;;
debian|ubuntu) apt-get -y --purge remove libsvn1:$other ;;
suse) zypper rm -y subversion.$other ;;
esac
return 0
}
function check_alternative_arch()
{
local other=
local confirm=
case $OS in
centos|rhel|suse)
for foreign in $(rpm --showrc | awk -F: '/compatible archs/{print $2}')
do
test "$foreign" = "$ARCH" && continue
if other=$(rpm -q --queryformat='%{arch}' \
subversion.$foreign 2>/dev/null); then
test -z "$other" && continue
remove_other $other
unset other
fi
done
;;
debian|ubuntu)
dpkg --print-foreign-architectures >/dev/null 2>&1 || return 0
ARCH=$(dpkg --print-architecture)
for foreign in $(dpkg --print-foreign-architectures); do
if other=$(dpkg-query -f '${Architecture}' -W libsvn1:$foreign \
2>/dev/null); then
remove_other $other
unset other
fi
done
;;
esac
test -z "$other" && return 0
return 0
}
function is_lsb()
{
which lsb_release >/dev/null 2>&1 || return 1
OS=$(lsb_release -si | tr A-Z a-z)
OS=${OS%% *}
OSVER=$(lsb_release -sr)
OSVER=${OSVER%%.*}
OSNAME=$(lsb_release -sc | tr A-Z a-z)
case $OS in
redhatenterpriseserver)
OS=rhel
;;
esac
return 0
}
function is_debian()
{
test -r /etc/debian_version || return 1
OS="debian"
OSVER=$(cat /etc/debian_version)
OSVER=${OSVER%%.*}
case "$OSVER" in
6) OSNAME="squeeze" ;;
7) OSNAME="wheezy" ;;
squeeze) OSNAME=$OSVER; OSVER=6 ;;
wheezy) OSNAME=$OSVER; OSVER=7 ;;
*) return 1 ;;
esac
return 0
}
function is_redhat()
{
local release=
test -r /etc/redhat-release || return 1
release=$(cat /etc/redhat-release | tr A-Z a-z)
OS=${release%% release *}
OSVER=${release##* release }
OSVER=${OSVER%%.*}
case $OS in
red*) OS="rhel" ;;
centos*) OS="centos" ;;
*) return 1 ;;
esac
return 0
}
function is_suse()
{
test -r /etc/SuSE-release || return 1
OS="suse"
OSVER=$(awk '$1 == "VERSION" {print $NF}' /etc/SuSE-release)
OSVER=${OSVER%%.*}
return 0
}
function find_os()
{
is_lsb && return 0
is_redhat && return 0
is_debian && return 0
is_suse && return 0
return 1
}
function check_os()
{
case $OS in
rhel|centos|suse|debian|ubuntu) return 0 ;;
*) return 1 ;;
esac
}
function find_pkg_version
{
case $OS in
rhel|centos|suse)
if ! PKG_VERSION=$(rpm -q --queryformat='%{version}-%{release}' \
subversion.$ARCH 2>/dev/null); then
return 1
fi
;;
debian|ubuntu)
PKG_VERSION=$(dpkg-query -f='${Version}' -W subversion 2>/dev/null)
PKG_VERSION=${PKG_VERSION%%+*}
;;
esac
return 0
}
function check_install()
{
if ! SVN=$(svn --version --quiet 2>/dev/null); then
echo "This script will install Subversion $SVN_VERSION."
echo
if ! confirm "Do you want to continue?"; then
echo
echo "Exiting at user request"
exit 1
fi
return 0
fi
find_pkg_version ||
{
echo -n "You currently have Subversion $SVN installed, however it's not "
echo -n "been installed with your systems package manager. Please remove "
echo "this version of Subversion and re-run this script."
echo
exit 2
}
if test "$PKG_VERSION" = "$SVN_VERSION"; then
echo "You currently have the latest version of Subversion installed."
exit 0
fi
echo -n "You currently have Subversion $PKG_VERSION installed. If you "
echo "continue with the installation it will be upgraded to $SVN_VERSION."
echo
if ! confirm "Do you want to continue?"; then
echo
echo "Exiting at user request"
exit 1
fi
return 0
}
function configure_apt_repo()
{
PKG_INSTALLER="apt-get -y install"
PKG_LIST="subversion libsvn-perl python-subversion subversion-tools"
SVN_RELEASE=${SVN_VERSION%.*}
SVN_RELEASE="svn${SVN_RELEASE//\./}"
rm -f /etc/apt/sources.list.d/WANdisco.list
cat <<EOF > /etc/apt/sources.list.d/WANdisco-$SVN_RELEASE.list
# WANdisco Open Source Repo
deb http://$REPO_SERVER/$OS precise $SVN_RELEASE
EOF
wget -q -O - http://$REPO_SERVER/wandisco-debian.gpg | \
apt-key add - >/dev/null 2>&1
apt-get update
}
function configure_yum_repo()
{
PKG_INSTALLER="yum install -y"
PKG_LIST="subversion subversion-perl subversion-python subversion-tools"
SVN_RELEASE="${SVN_VERSION%.*}"
rm -f /etc/yum.repos.d/WANdisco.repo /etc/yum.repos.d/WANdisco-rhel?.repo
cat <<EOF > /etc/yum.repos.d/WANdisco-svn$SVN_RELEASE.repo
[WANdisco-svn${SVN_RELEASE//\./}]
name=WANdisco SVN Repo $SVN_RELEASE
enabled=1
baseurl=http://$REPO_SERVER/$OS/$OSVER/svn-$SVN_RELEASE/RPMS/\$basearch/
gpgcheck=1
gpgkey=http://$REPO_SERVER/RPM-GPG-KEY-WANdisco
EOF
yum makecache
}
function configure_zypp_repo()
{
PKG_LIST="subversion subversion-perl subversion-python subversion-tools"
PKG_LIST="$PKG_LIST subversion-ruby"
SVN_RELEASE=${SVN_VERSION%.*}
SVN_RELEASE="svn${SVN_RELEASE//\./}"
PKG_INSTALLER="zypper install -y -f --from WANdisco-$SVN_RELEASE"
rm -f /etc/zypp/repos.d/WANdisco-suse11.repo \
/etc/zypp/repos.d/WANdisco-svn.repo
zypper rr WANdisco-$SVN_RELEASE > /dev/null 2>&1
rpm -q gpg-pubkey-3bbf077a-51260c0f >/dev/null 2>&1 || \
rpm --import http://$REPO_SERVER/RPM-GPG-KEY-WANdisco
zypper addservice --type=YUM http://$REPO_SERVER/suse/$SVN_RELEASE/ \
WANdisco-$SVN_RELEASE
zypper refresh
}
function configure_repo()
{
case $OS in
debian|ubuntu) configure_apt_repo ;;
rhel|centos) configure_yum_repo ;;
suse) configure_zypp_repo ;;
esac
}
function check_mod_dav()
{
HAS_MOD_DAV=
case $OS in
rhel|centos|suse)
rpm -q mod_dav_svn > /dev/null 2>&1 && HAS_MOD_DAV=1
rpm -q subversion-server > /dev/null 2>&1 && HAS_MOD_DAV=1
return 0
;;
debian|ubuntu)
dpkg-query -W libapache2-svn > /dev/null 2>&1 && HAS_MOD_DAV=1
return 0
;;
esac
}
function add_packages()
{
case $OS in
rhel|centos|suse) return 0 ;;
esac
PKG_LIST=$(dpkg-query -f '${Package} ${Source}\n' -W '*' | \
awk '$2 == "subversion" {print $1}')
return 0
}
function install_svn()
{
test -n "$SVN" && add_packages
$PKG_INSTALLER $PKG_LIST
}
function install_mod_dav()
{
test -n "$NO_MOD_DAV" && return 0
case $OS in
rhel|centos|suse) PKG_LIST="mod_dav_svn" ;;
debian|ubuntu) PKG_LIST="libapache2-svn" ;;
esac
$PKG_INSTALLER $PKG_LIST
}
# Main Script
trap handle_error ERR
cat <<EOF
:: :: :: # # ## #### ###### # ##### ##### #####
:::: :::: ::: # # # # ## ## # # # # # # # # #
::::::::::: ::: # # # # # # # # # # # # # #
::::::::::::: ::: # # # # # # # # # # # ##### # # #
::::::::::: ::: # # # # # # # # # # # # # # #
:::: :::: ::: ## ## # ## # # # # # # # # # # #
:: :: :: # # ## # # # ###### # ##### ##### #####
EOF
check_connection
find_os || unsupported
check_os || unsupported
check_root
check_alternative_arch
check_install
configure_repo
check_mod_dav
install_svn
echo "Subversion has been installed or upgraded successfully"
test -n "$HAS_MOD_DAV" && exit 0
echo
echo "Do you want to install the subversion server modules for apache?"
echo
if confirm "Install mod_dav_svn?"; then
install_mod_dav
fi
echo
echo "Installtion complete"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment