aboutsummaryrefslogtreecommitdiffstats
path: root/bin/install-as-user
blob: c5e68764bbf28628d1adec81e26cbea58950292e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#!/bin/sh

set -e
set -x

DEFAULT_SERVER=false
if [ x"$1" = x"--default" ]
then
    DEFAULT_SERVER=true
    shift
fi

if [ $# -ne 2 ]
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.
EOUSAGE
    exit 1
fi

UNIX_USER="$1"
HOST="$2"
DB_NAME="fixmystreet"

# Check that the arguments we've been passed are sensible:

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

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

if [ "$(whoami)" != "$UNIX_USER" ]
then
    echo "This script should be run by the user '$UNIX_USER'."
    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"

ln -sfn "$FMS_REPOSITORY" $FMS_LINK_DESTINATION
cd "$FMS_REPOSITORY"

# Add regularly scheduled tasks to cron:

TEMPORARY_CRONTAB=$(mktemp)

echo crontab file is $TEMPORARY_CRONTAB

cp "$FMS_REPOSITORY"/conf/crontab.example "$TEMPORARY_CRONTAB"

sed -i \
    -e 's,$FMS,'"$FMS_REPOSITORY,g" \
    -e 's,$LOCK_DIR,'"$FMS_DIRECTORY,g" \
    "$TEMPORARY_CRONTAB"

crontab $TEMPORARY_CRONTAB

# Install the compass gem locally - it's required for generating the
# CSS:

export GEM_HOME="$FMS_DIRECTORY/gems"
mkdir -p "$GEM_HOME"
export GEM_PATH=
export PATH="$GEM_HOME/bin:$PATH"

gem install --no-ri --no-rdoc compass

# Use compass to generate the CSS, if it doesn't seem to already
# exist:

if [ ! -f web/cobrands/default/base.css ]
then
    bin/make_css
fi

# Write sensible values into the config file:

sed -r \
    -e "s,^( *FMS_DB_HOST:).*,\\1 ''," \
    -e "s,^( *FMS_DB_NAME:).*,\\1 '$DB_NAME'," \
    -e "s,^( *FMS_DB_USER:).*,\\1 '$UNIX_USER'," \
    -e "s,^( *BASE_URL:).*,\\1 'http://$HOST'," \
    -e "s,^( *EMAIL_DOMAIN:).*,\\1 '$HOST'," \
    -e "s,^( *CONTACT_EMAIL:).*,\\1 'help@$HOST'," \
    conf/general.yml-example > conf/general.yml

# Create the database if it doesn't exist:
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
fi

# Install the required Perl modules - this may take a very long time:

cd "$FMS_REPOSITORY"
bin/install_perl_modules

# 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

commonlib/bin/gettext-makemo FixMyStreet

# 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: $FMS_REPOSITORY/bin/cron-wrapper prove -r t