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
|