diff options
author | Mark Longair <mhl@pobox.com> | 2012-10-04 15:03:44 +0100 |
---|---|---|
committer | Mark Longair <mhl@pobox.com> | 2012-10-04 16:02:02 +0100 |
commit | 00b1e242cab3e194f8252b117e1218a78ebf592b (patch) | |
tree | cde4958bbd600cab5c54b8d40b766a9fc7e9131b | |
parent | 61bfbbe92a3225869520dbcb32f35069431fa84e (diff) |
Remove common install script code
pre-install-as-root is no longer the way that you should
invoke the install script; instead you should call the
install-site.sh script in commonlib/bin.
-rwxr-xr-x | bin/install-as-user | 47 | ||||
-rwxr-xr-x | bin/pre-install-as-root | 307 | ||||
-rw-r--r-- | bin/site-specific-install.sh | 54 |
3 files changed, 70 insertions, 338 deletions
diff --git a/bin/install-as-user b/bin/install-as-user index 49d7a4553..46dbcb65e 100755 --- a/bin/install-as-user +++ b/bin/install-as-user @@ -3,25 +3,17 @@ set -e set -x -DEFAULT_SERVER=false -if [ x"$1" = x"--default" ] -then - DEFAULT_SERVER=true - shift -fi - -if [ $# -ne 2 ] +if [ $# -ne 3 ] then cat >&2 <<EOUSAGE -Usage: $0 [--default] <UNIX-USER> <HOST> ---default means to install as the default site for this server, -rather than a virtualhost for HOST. +Usage: $0 <UNIX-USER> <HOST> <INSTALLATION-DIRECTORY> EOUSAGE exit 1 fi UNIX_USER="$1" HOST="$2" +DIRECTORY="$3" DB_NAME="fixmystreet" # Check that the arguments we've been passed are sensible: @@ -37,7 +29,6 @@ fi if ! id "$UNIX_USER" 2> /dev/null > /dev/null then echo "The user '$UNIX_USER' didn't exist." - echo "(You should have run \"sudo pre-install-as-root '$UNIX_USER' '$HOST'\" before this.)" exit 1 fi @@ -47,17 +38,11 @@ then exit 1 fi -if [ $DEFAULT_SERVER = true ] -then - FMS_DIRECTORY="/var/www/fixmystreet" -else - FMS_DIRECTORY="/var/www/$HOST" -fi -FMS_REPOSITORY="$FMS_DIRECTORY/fixmystreet" -FMS_LINK_DESTINATION="$HOME/fixmystreet" +REPOSITORY="$DIRECTORY/fixmystreet" +LINK_DESTINATION="$HOME/fixmystreet" -ln -sfn "$FMS_REPOSITORY" $FMS_LINK_DESTINATION -cd "$FMS_REPOSITORY" +ln -sfn "$REPOSITORY" $LINK_DESTINATION +cd "$REPOSITORY" # Add regularly scheduled tasks to cron: @@ -65,11 +50,11 @@ TEMPORARY_CRONTAB=$(mktemp) echo crontab file is $TEMPORARY_CRONTAB -cp "$FMS_REPOSITORY"/conf/crontab.example "$TEMPORARY_CRONTAB" +cp "$REPOSITORY"/conf/crontab.example "$TEMPORARY_CRONTAB" sed -i \ - -e 's,$FMS,'"$FMS_REPOSITORY,g" \ - -e 's,$LOCK_DIR,'"$FMS_DIRECTORY,g" \ + -e 's,$FMS,'"$REPOSITORY,g" \ + -e 's,$LOCK_DIR,'"$DIRECTORY,g" \ "$TEMPORARY_CRONTAB" crontab $TEMPORARY_CRONTAB @@ -77,7 +62,7 @@ crontab $TEMPORARY_CRONTAB # Install the compass gem locally - it's required for generating the # CSS: -export GEM_HOME="$FMS_DIRECTORY/gems" +export GEM_HOME="$DIRECTORY/gems" mkdir -p "$GEM_HOME" export GEM_PATH= export PATH="$GEM_HOME/bin:$PATH" @@ -108,15 +93,15 @@ if ! psql -l | egrep "^ *$DB_NAME *\|" > /dev/null then createdb --owner "$UNIX_USER" "$DB_NAME" echo 'CREATE LANGUAGE plpgsql;' | psql -U "$UNIX_USER" "$DB_NAME" || true - psql -U "$UNIX_USER" "$DB_NAME" < "$FMS_REPOSITORY"/db/schema.sql - psql -U "$UNIX_USER" "$DB_NAME" < "$FMS_REPOSITORY"/db/alert_types.sql - psql -U "$UNIX_USER" "$DB_NAME" < "$FMS_REPOSITORY"/db/generate_secret.sql + psql -U "$UNIX_USER" "$DB_NAME" < "$REPOSITORY"/db/schema.sql + psql -U "$UNIX_USER" "$DB_NAME" < "$REPOSITORY"/db/alert_types.sql + psql -U "$UNIX_USER" "$DB_NAME" < "$REPOSITORY"/db/generate_secret.sql fi # Generate po and mo files (these invocations taken from Kagee's script): -./bin/cron-wrapper ./bin/make_emptyhomes_po -./bin/cron-wrapper ./bin/make_emptyhomes_welsh_po +bin/cron-wrapper bin/make_emptyhomes_po +bin/cron-wrapper bin/make_emptyhomes_welsh_po commonlib/bin/gettext-makemo FixMyStreet diff --git a/bin/pre-install-as-root b/bin/pre-install-as-root deleted file mode 100755 index 8d4c9dd26..000000000 --- a/bin/pre-install-as-root +++ /dev/null @@ -1,307 +0,0 @@ -#!/bin/sh - -# On a clean Debian squeeze or Ubuntu precise installation you should -# be able to install FixMyStreet with: -# -# curl https://raw.github.com/mysociety/fixmystreet/master/bin/pre-install-as-root | \ -# sh -s fms whatever.compute.amazonaws.com -# -# ... where the first argument is the Unix user who will own the code -# and the application will run as, and the second argument is the -# public hostname for the server, which will be used for creating the -# named virtualhost. - -set -e -set -x - -SITE=fixmystreet - -DEFAULT_SERVER=false -if [ x"$1" = x"--default" ] -then - DEFAULT_SERVER=true - shift -fi - -# Install some packages that we will definitely need: -apt-get install -y git-core lockfile-progs rubygems curl dnsutils lsb-release - -# If we're not running on an EC2 instance, an empty body is returned -# by this request: -EC2_HOSTNAME=`curl -s http://169.254.169.254/latest/meta-data/public-hostname || true` - -usage_and_exit() { - cat >&2 <<EOUSAGE -Usage: $0 [--default] <UNIX-USER> [HOST] -HOST is only optional if you are running this on an EC2 instance. ---default means to install as the default site for this server, -rather than a virtualhost for HOST. -EOUSAGE - exit 1 -} - -if [ $# = 1 ] -then - if [ x = x$EC2_HOSTNAME ] - then - usage_and_exit - else - HOST="$EC2_HOSTNAME" - fi -elif [ $# = 2 ] -then - HOST="$2" -else - usage_and_exit -fi - -UNIX_USER="$1" - -if [ $DEFAULT_SERVER = true ] -then - DIRECTORY="/var/www/$SITE" -else - DIRECTORY="/var/www/$HOST" -fi -REPOSITORY="$DIRECTORY/$SITE" - -REPOSITORY_URL=git://github.com/mysociety/$SITE.git -BRANCH=master - -DISTRIBUTION="$(lsb_release -i -s | tr A-Z a-z)" -VERSION="$(lsb_release -c -s)" - -IP_ADDRESS_FOR_HOST="$(dig +short $HOST)" - -if [ x = x"$IP_ADDRESS_FOR_HOST" ] -then - echo "The hostname $HOST didn't resolve to an IP address" - exit 1 -fi - -generate_locales() { - # If language-pack-en is present, install that: - apt-get install -y language-pack-en || true - - # We get lots of locale errors if the en_GB.UTF-8 locale isn't - # present. (This is from Kagee's script.) - if [ "$(locale -a | egrep -i '^en_GB.utf-?8$' | wc -l)" = "1" ] - then - echo "en_GB.utf8 activated and generated" - else - echo "en_GB.utf8 not generated" - if [ x"$(grep -c '^en_GB.UTF-8 UTF-8' /etc/locale.gen)" = x1 ] - then - echo "'en_GB.UTF-8 UTF-8' already in /etc/locale.gen we will only generate" - else - echo "Appending 'en_GB.UTF-8 UTF-8' and 'cy_GB.UTF-8 UTF-8'" - echo "to /etc/locale.gen for generation" - echo "\nen_GB.UTF-8 UTF-8\ncy_GB.UTF-8 UTF-8" >> /etc/locale.gen - fi - echo "Generating new locales" - locale-gen - fi -} - -set_locale() { - echo 'LANG="en_GB.UTF-8"' > /etc/default/locale - export LANG="en_GB.UTF-8" -} - -add_unix_user() { - # Create the required user if it doesn't already exist: - if id "$1" 2> /dev/null > /dev/null - then - echo "The user $1 already exists." - else - adduser --disabled-password --gecos 'The FixMyStreet User' "$1" - fi -} - -add_postgresql_user() { - su -l -c "createuser --createdb --no-createrole --no-superuser '$UNIX_USER'" postgres || true -} - -update_apt_sources() { - if [ x"$DISTRIBUTION" = x"ubuntu" ] && [ x"$VERSION" = x"precise" ] - then - cat > /etc/apt/sources.list.d/mysociety-extra.list <<EOF -deb http://eu-west-1.ec2.archive.ubuntu.com/ubuntu/ precise multiverse -deb-src http://eu-west-1.ec2.archive.ubuntu.com/ubuntu/ precise multiverse -deb http://eu-west-1.ec2.archive.ubuntu.com/ubuntu/ precise-updates multiverse -deb-src http://eu-west-1.ec2.archive.ubuntu.com/ubuntu/ precise-updates multiverse -EOF - elif [ x"$DISTRIBUTION" = x"debian" ] && [ x"$VERSION" = x"squeeze" ] - then - # Install the basic packages we require: - cat > /etc/apt/sources.list.d/mysociety-extra.list <<EOF -# Debian mirror to use, including contrib and non-free: -deb http://the.earth.li/debian/ squeeze main contrib non-free -deb-src http://the.earth.li/debian/ squeeze main contrib non-free - -# Security Updates: -deb http://security.debian.org/ squeeze/updates main non-free -deb-src http://security.debian.org/ squeeze/updates main non-free - -# Debian Backports -deb http://backports.debian.org/debian-backports squeeze-backports main contrib non-free -deb-src http://backports.debian.org/debian-backports squeeze-backports main contrib non-free -EOF - else - echo Unsupport distribution and version combination $DISTRIBUTION $VERSION - exit 1 - fi - apt-get update -} - -clone_or_update_repository() { - # Clone the repository into place if the directory isn't already - # present: - if [ -d $REPOSITORY ] - then - echo the directory $REPOSITORY already exists - cd $REPOSITORY - git remote set-url origin "$REPOSITORY_URL" - git fetch origin - # Check that there are no uncommitted changes before doing a - # git reset --hard: - git diff --quiet || { echo "There were changes in the working tree in $REPOSITORY; exiting."; exit 1; } - git diff --cached --quiet || { echo "There were staged but uncommitted changes in $REPOSITORY; exiting."; exit 1; } - # If that was fine, carry on: - git reset --hard origin/"$BRANCH" - git submodule sync - git submodule update --recursive - else - PARENT="$(dirname $REPOSITORY)" - echo creating $PARENT - mkdir -p $PARENT - git clone --recursive --branch "$BRANCH" "$REPOSITORY_URL" "$REPOSITORY" - fi -} - -install_nginx() { - apt-get install -y nginx libfcgi-procmanager-perl -} - -add_website_to_nginx() { - UNIX_USER="$1" - HOST="$2" - REPOSITORY="$3" - NGINX_SITE="$HOST" - if [ $DEFAULT_SERVER = true ] - then - NGINX_SITE=default - fi - SITE_FILENAME=/etc/nginx/sites-available/"$NGINX_SITE" - SITE_LINK=/etc/nginx/sites-enabled/"$NGINX_SITE" - cp $REPOSITORY/conf/nginx.conf.example $SITE_FILENAME - sed -i "s,/var/www/$SITE,$DIRECTORY," $SITE_FILENAME - if [ $DEFAULT_SERVER = false ] - then - sed -i "/listen 80/a\ -\ server_name $HOST; -" $SITE_FILENAME - fi - ln -nsf "$SITE_FILENAME" "$SITE_LINK" - LOG_DIRECTORY="$(readlink -f $REPOSITORY/../logs)" - mkdir -p "$LOG_DIRECTORY" - chown -R "$UNIX_USER"."$UNIX_USER" "$LOG_DIRECTORY" - /etc/init.d/nginx restart -} - -install_sysvinit_script() { - SYSVINIT_FILENAME=/etc/init.d/$SITE - cp $REPOSITORY/conf/sysvinit.example $SYSVINIT_FILENAME - sed -i "s,/var/www/$SITE,$DIRECTORY,g" $SYSVINIT_FILENAME - sed -i "s/^ *USER=.*/USER=$UNIX_USER/" $SYSVINIT_FILENAME - chmod a+rx $SYSVINIT_FILENAME - update-rc.d $SITE start 20 2 3 4 5 . stop 20 0 1 6 . - /etc/init.d/$SITE restart -} - -install_website_packages() { - EXACT_PACKAGES="$1/conf/packages.$DISTRIBUTION-$VERSION" - PRECISE_PACKAGES="$1/conf/packages.ubuntu-precise" - SQUEEZE_PACKAGES="$1/conf/packages.debian-squeeze" - GENERIC_PACKAGES="$1/conf/packages" - # If there's an exact match for the distribution and release, use that: - if [ -e "$EXACT_PACKAGES" ] - then - PACKAGES_FILE="$EXACT_PACKAGES" - # Otherwise, if this is Ubuntu, and there's a version specifically - # for precise, use that: - elif [ x"$DISTRIBUTION" = x"ubuntu" ] && [ -e "$PRECISE_PACKAGES" ] - then - PACKAGES_FILE="$PRECISE_PACKAGES" - # Otherwise, if this is Debian, and there's a version specifically - # for squeeze, use that: - elif [ x"$DISTRIBUTION" = x"debian" ] && [ -e "$SQUEEZE_PACKAGES" ] - then - PACKAGES_FILE="$SQUEEZE_PACKAGES" - else - PACKAGES_FILE="$GENERIC_PACKAGES" - fi - xargs -a "$PACKAGES_FILE" apt-get -y install -} - -overwrite_rc_local() { - cat > /etc/rc.local <<EOF -#!/bin/sh -e - -su -l -c $REPOSITORY/bin/ec2-rewrite-conf $UNIX_USER -/etc/init.d/$SITE restart - -exit 0 - -EOF - chmod a+rx /etc/rc.local -} - -generate_locales -set_locale - -add_unix_user "$UNIX_USER" - -update_apt_sources - -# And remove one crippling package, if it's installed: -apt-get remove -y --purge apt-xapian-index || true - -clone_or_update_repository $REPOSITORY - -chown -R "$UNIX_USER"."$UNIX_USER" "$DIRECTORY" - -install_nginx - -install_website_packages "$REPOSITORY" - -su -l -c "touch '$DIRECTORY/admin-htpasswd'" "$UNIX_USER" - -add_website_to_nginx "$UNIX_USER" "$HOST" "$REPOSITORY" - -add_postgresql_user "$UNIX_USER" - -DEFAULT_PARAMETER='' -if [ $DEFAULT_SERVER = true ] -then - DEFAULT_PARAMETER='--default' -fi - -su -l -c "$REPOSITORY/bin/install-as-user $DEFAULT_PARAMETER '$UNIX_USER' '$HOST'" "$UNIX_USER" - -install_sysvinit_script - -if [ $DEFAULT_SERVER = true ] && [ x != x$EC2_HOSTNAME ] -then - # If we're setting up as the default on an EC2 instance, - # make sure the ec2-rewrite-conf script is called from - # /etc/rc.local - overwrite_rc_local -fi - -# Tell the user what to do next: - -echo Installation complete - you should now be able to view the site at: -echo http://$HOST/ -echo Or you can run the tests by switching to the "'$UNIX_USER'" user and -echo running: $REPOSITORY/bin/cron-wrapper prove -r t diff --git a/bin/site-specific-install.sh b/bin/site-specific-install.sh new file mode 100644 index 000000000..002413cfb --- /dev/null +++ b/bin/site-specific-install.sh @@ -0,0 +1,54 @@ +#!/bin/sh + +PARENT_SCRIPT_URL=https://github.com/mysociety/commonlib/blob/master/bin/install-site.sh + +misuse() { + echo The variable $1 was not defined, and it should be. + echo This script should not be run directly - instead, please run: + echo $PARENT_SCRIPT_URL + exit 1 +} + +# Strictly speaking we don't need to check all of these, but it might +# catch some errors made when changing install-site.sh + +[ -z "$DIRECTORY" ] && misuse DIRECTORY +[ -z "$UNIX_USER" ] && misuse UNIX_USER +[ -z "$REPOSITORY" ] && misuse REPOSITORY +[ -z "$REPOSITORY_URL" ] && misuse REPOSITORY_URL +[ -z "$BRANCH" ] && misuse BRANCH +[ -z "$SITE" ] && misuse SITE +[ -z "$DEFAULT_SERVER" ] && misuse DEFAULT_SERVER +[ -z "$EC2_HOSTNAME" ] && misuse EC2_HOSTNAME +[ -z "$HOST" ] && misuse HOST +[ -z "$DISTRIBUTION" ] && misuse DISTRIBUTION +[ -z "$VERSION" ] && misuse VERSION + +install_nginx + +install_website_packages + +su -l -c "touch '$DIRECTORY/admin-htpasswd'" "$UNIX_USER" + +add_website_to_nginx + +add_postgresql_user + +su -l -c "$REPOSITORY/bin/install-as-user '$UNIX_USER' '$HOST' '$DIRECTORY'" "$UNIX_USER" + +install_sysvinit_script + +if [ $DEFAULT_SERVER = true ] && [ x != x$EC2_HOSTNAME ] +then + # If we're setting up as the default on an EC2 instance, + # make sure the ec2-rewrite-conf script is called from + # /etc/rc.local + overwrite_rc_local +fi + +# Tell the user what to do next: + +echo Installation complete - you should now be able to view the site at: +echo http://$HOST/ +echo Or you can run the tests by switching to the "'$UNIX_USER'" user and +echo running: $REPOSITORY/bin/cron-wrapper prove -r t |