aboutsummaryrefslogtreecommitdiffstats
path: root/bin/install-as-user
blob: f8f1d1ee5d4a255993cfe9c6b52c3d78bd122d12 (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
133
134
135
136
137
138
139
140
141
142
#!/bin/sh

set -e
error_msg() { printf "\033[31m%s\033[0m\n" "$*"; }
notice_msg() { printf "\033[33m%s\033[0m " "$*"; }
done_msg() { printf "\033[32m%s\033[0m\n" "$*"; }
DONE_MSG=$(done_msg done)

if [ $# -ne 3 ]
then
    cat >&2 <<EOUSAGE
Usage: $0 <UNIX-USER> <HOST> <INSTALLATION-DIRECTORY>
EOUSAGE
    exit 1
fi

UNIX_USER="$1"
HOST="$2"
DIRECTORY="$3"

misuse() {
  echo The variable $1 was not defined, and it should be.
  echo This script should not be run directly.
  exit 1
}

[ -z "$DEVELOPMENT_INSTALL" ] && misuse DEVELOPMENT_INSTALL

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
    error_msg "The hostname $HOST didn't resolve to an IP address"
    exit 1
fi

if ! id "$UNIX_USER" 2> /dev/null > /dev/null
then
    error_msg "The user '$UNIX_USER' didn't exist."
    exit 1
fi

if [ "$(whoami)" != "$UNIX_USER" ]
then
    error_msg "This script should be run by the user '$UNIX_USER'."
    exit 1
fi

REPOSITORY="$DIRECTORY/fixmystreet"
LINK_DESTINATION="$HOME/fixmystreet"

ln -sfn "$REPOSITORY" $LINK_DESTINATION
cd "$REPOSITORY"

if [ ! "$DEVELOPMENT_INSTALL" = true ]; then
    echo -n "Adding crontab... "
    # Add regularly scheduled tasks to cron:
    TEMPORARY_CRONTAB=$(mktemp)
    echo crontab file is $TEMPORARY_CRONTAB
    cp "$REPOSITORY"/conf/crontab.example "$TEMPORARY_CRONTAB"
    sed -i \
        -e 's,$FMS,'"$REPOSITORY,g" \
        -e 's,$LOCK_DIR,'"$DIRECTORY,g" \
        "$TEMPORARY_CRONTAB"
    crontab $TEMPORARY_CRONTAB
    echo $DONE_MSG
fi

# Install the compass gem locally - it's required for generating the
# CSS:
echo "Setting up CSS... "
export GEM_HOME="$DIRECTORY/gems"
mkdir -p "$GEM_HOME"
export GEM_PATH=
export PATH="$GEM_HOME/bin:$PATH"

if ! grep -q 'Set up local gem directory for FixMyStreet' $HOME/.bashrc; then
    cat >>$HOME/.bashrc <<EOBRC

# Set up local gem directory for FixMyStreet
export GEM_HOME="$DIRECTORY/gems"
export GEM_PATH=
export PATH="\$GEM_HOME/bin:\$PATH"
EOBRC
fi

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
echo $DONE_MSG

# Write sensible values into the config file, if it doesn't already exist
if [ ! -f conf/general.yml ]; then
    echo -n "Setting up default conf/general.yml 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'," \
        -e "s,^( *DO_NOT_REPLY_EMAIL:).*,\\1 'help@$HOST'," \
        conf/general.yml-example > conf/general.yml
    echo $DONE_MSG
fi

echo "Installing required Perl modules - this may take some time"
cd "$REPOSITORY"
bin/install_perl_modules
echo $DONE_MSG

# Create the database if it doesn't exist:
echo -n "Setting up database... "
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" < "$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
else
    bin/cron-wrapper update-schema --commit
fi
echo $DONE_MSG

# Generate po and mo files (these invocations taken from Kagee's script):
echo "Creating locale .mo files"
bin/cron-wrapper bin/make_po FixMyStreet-EmptyHomes
bin/cron-wrapper bin/make_emptyhomes_welsh_po
commonlib/bin/gettext-makemo FixMyStreet
echo $DONE_MSG

bin/cron-wrapper update-all-reports