Subversion Repositories ALCASAR

Rev

Rev 1413 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log

Rev Author Line No. Line
1413 richard 1
#!/bin/sh
2
 
3
#########################################################
4
#
5
# Installation script for SURFmap.
6
#
7
# Copyright (C) 2013 INVEA-TECH a.s.
8
# Author(s):    Rick Hofstede   <r.j.hofstede@utwente.nl>
9
#               Pavel Celeda    <celeda@invea-tech.com>
10
#
11
# LICENSE TERMS - 3-clause BSD license
12
#
13
# $Id: install.sh 626 2014-06-22 07:48:21Z rickhofstede $
14
#
15
#########################################################
16
 
17
SURFMAP_VER=3.3
18
SURFMAP_REL=SURFmap_v${SURFMAP_VER}.tar.gz
19
TMP_DIR=SURFmap
20
GEO_DB=GeoLiteCity.dat.gz
21
GEOv6_DB=GeoLiteCityv6.dat.gz
22
 
23
err () {
24
    printf "ERROR: ${*}\n"
25
    exit 1
26
}
27
 
28
err_line () {
29
    echo "-----"
30
    printf "ERROR: ${*}\n"
31
    exit 1
32
}
33
 
34
FRONTEND_ONLY=0             # Install/update frontend only
35
BACKEND_ONLY=0              # Install/update backend only
36
NFSEN_CONF_OVERWRITE=""     # Overwrite path to nfsen.conf (i.e., don't determine path automatically)
37
 
38
# http://wiki.bash-hackers.org/howto/getopts_tutorial
39
while getopts ":fbn:" opt; do
40
    case $opt in
41
        f)
42
            FRONTEND_ONLY=1
43
            ;;
44
        b)
45
            BACKEND_ONLY=1
46
            ;;
47
        n)
48
            NFSEN_CONF_OVERWRITE=$OPTARG
49
            ;;
50
        \?)
51
            err "Invalid option: -$OPTARG"
52
            exit 1
53
            ;;
54
        :)
55
            err "Option -$OPTARG requires an argument. Exiting..."
56
            exit 1
57
            ;;
58
    esac
59
done
60
 
61
if [ $FRONTEND_ONLY = 1 -a $BACKEND_ONLY = 1 ]; then
62
    err "You have specified two excluding options (-f and -b)."
63
fi
64
 
65
# Determine (based on combination of input parameters) whether frontend has to be installed
66
if [ $FRONTEND_ONLY = 1 ] || [ $FRONTEND_ONLY = 0 -a $BACKEND_ONLY = 0 ]; then
67
    INSTALL_FRONTEND=1
68
else
69
    INSTALL_FRONTEND=0
70
fi
71
 
72
# Determine (based on combination of input parameters) whether backend has to be installed
73
if [ $BACKEND_ONLY = 1 ] || [ $FRONTEND_ONLY = 0 -a $BACKEND_ONLY = 0 ]; then
74
    INSTALL_BACKEND=1
75
else
76
    INSTALL_BACKEND=0
77
fi
78
 
79
echo "SURFmap installation script"
80
echo "---------------------------"
81
 
82
# Discover NfSen configuration
83
NFSEN_VARFILE=/tmp/nfsen-tmp.conf
84
if [ ! -n "$(ps axo command | grep [n]fsend | grep -v nfsend-comm)" ]; then
85
    err "NfSen - nfsend not running; cannot detect nfsen.conf location. Exiting..."
86
fi
87
 
88
NFSEN_LIBEXECDIR=$(cat $(ps axo command= | grep -vE "(nfsend-comm|grep)" | grep -Eo "[^ ]+nfsend") | grep libexec | cut -d'"' -f2 | head -n 1)
89
 
90
if [ -z "${NFSEN_CONF_OVERWRITE}" ]; then
91
    NFSEN_CONF=$(cat ${NFSEN_LIBEXECDIR}/NfConf.pm | grep \/nfsen.conf | cut -d'"' -f2)
92
else
93
    NFSEN_CONF=$NFSEN_CONF_OVERWRITE
94
fi
95
 
96
# Parse nfsen.conf file
97
cat ${NFSEN_CONF} | grep -v \# | egrep '\$BASEDIR|\$BINDIR|\$LIBEXECDIR|\$HTMLDIR|\$FRONTEND_PLUGINDIR|\$BACKEND_PLUGINDIR|\$WWWGROUP|\$WWWUSER|\$USER' | tr -d ';' | tr -d ' ' | cut -c2- | sed 's,/",",g' > ${NFSEN_VARFILE}
98
. ${NFSEN_VARFILE}
99
rm -rf ${NFSEN_VARFILE}
100
 
101
SURFMAP_CONF=${FRONTEND_PLUGINDIR}/SURFmap/config.php
102
 
103
# Check permissions to install SURFmap - you must be ${USER} or root
104
if [ "$(id -u)" != "$(id -u ${USER})" ] && [ "$(id -u)" != "0" ]; then
105
    err "You do not have sufficient permissions to install SURFmap on this machine!"
106
fi
107
 
108
if [ "$(id -u)" = "$(id -u ${USER})" ]; then
109
    WWWUSER=${USER}     # we are installing as normal user
110
fi
111
 
112
# Download files from Web
113
if [ $(uname) = "FreeBSD" -o $(uname) = "OpenBSD" ]; then
114
    RETRIEVE_TOOL="fetch"
115
else
116
    RETRIEVE_TOOL="wget"
117
fi
118
 
119
 
120
# Move one directory-level up, if necessary, to be consistent with the case in which the tar-ball is unpacked (else-clause)
121
if [ -f install.sh ]; then
122
    cd ..
123
fi
124
 
125
# Check PHP dependencies
126
PHP_JSON=$(php -m | grep 'json' 2> /dev/null)
127
PHP_MBSTRING=$(php -m 2> /dev/null | grep 'mbstring')
128
PHP_PDOSQLITE=$(php -m 2> /dev/null | grep 'pdo_sqlite$') # The dollar-sign ($) makes sure that 'pdo_sqlite2' is not accepted
129
PHP_SOCKETS=$(php -m 2> /dev/null | grep '^sockets$')
130
PHP_XML=$(php -m 2> /dev/null | grep '^xml$')
131
 
132
if [ "$PHP_JSON" != "json" ]; then
133
    err "The PHP 'JSON' module is missing.\nDon't forget to restart your Web server after installing the package."
134
elif [ "$PHP_MBSTRING" != "mbstring" ]; then
135
    err "The PHP 'mbstring' module is missing.\nDon't forget to restart your Web server after installing the package."
136
elif [ "$PHP_PDOSQLITE" != "pdo_sqlite" ]; then
137
    err "The PHP PDO SQLite v3 module is missing.\nDon't forget to restart your Web server after installing the package."
138
elif [ "$PHP_SOCKETS" != "sockets" ]; then
139
    err "The PHP 'sockets' module is missing.\nDon't forget to restart your Web server after installing the package."
140
elif [ "$PHP_XML" != "xml" ]; then
141
    err "The PHP 'xml' module is missing.\nDon't forget to restart your Web server after installing the package."
142
fi
143
###################################################################################################
144
# Backup old SURFmap installation
145
SURFMAP_BACKUPDIR_FRONTEND=${FRONTEND_PLUGINDIR}/SURFmap-$(date +%s)
146
SURFMAP_BACKUPDIR_BACKEND=${BACKEND_PLUGINDIR}/SURFmap-$(date +%s)
147
if [ $INSTALL_FRONTEND = 1 -a -d ${FRONTEND_PLUGINDIR}/SURFmap ]; then
148
    echo "Backing up existing SURFmap (frontend) installation to ${SURFMAP_BACKUPDIR_FRONTEND}"
149
    mv ${FRONTEND_PLUGINDIR}/SURFmap ${SURFMAP_BACKUPDIR_FRONTEND}
150
fi
151
if [ $INSTALL_BACKEND = 1 -a -d ${BACKEND_PLUGINDIR}/SURFmap ]; then
152
    echo "Backing up existing SURFmap (backend) installation to ${SURFMAP_BACKUPDIR_BACKEND}"
153
    mv ${BACKEND_PLUGINDIR}/SURFmap ${SURFMAP_BACKUPDIR_BACKEND}
154
fi
155
 
156
# Install backend and frontend plugin files
157
echo "Installing SURFmap ${SURFMAP_VER} to ${FRONTEND_PLUGINDIR}/SURFmap"
158
if [ $INSTALL_FRONTEND = 1 ]; then
159
    cp -r ./${TMP_DIR}/frontend/* ${FRONTEND_PLUGINDIR}
160
fi
161
if [ $INSTALL_BACKEND = 1 ]; then
162
    cp -r ./${TMP_DIR}/backend/* ${BACKEND_PLUGINDIR}
163
fi
164
##################################################################################################################################################
165
# Deleting temporary files
166
# rm -rf ${TMP_DIR}
1418 richard 167
# rm -rf ${GEO_DB}
168
# rm -rf ${GEOv6_DB}
1413 richard 169
 
170
# Check whether an old SURFmap version was found and ask whether frontend configuration and data structures should be retained
171
if [ $INSTALL_FRONTEND = 1 -a -d ${SURFMAP_BACKUPDIR_FRONTEND} ]; then
172
    OLD_VER=$(cat ${SURFMAP_BACKUPDIR_FRONTEND}/version.php | grep -m1 \$version | awk '{print $3}' |  cut -d"\"" -f2)
173
    if [ ${OLD_VER} = ${SURFMAP_VER} ]; then
174
        while true; do
175
            read -p "Do you wish to keep the frontend configuration and data structures from your previous installation [y,n] (default: y)? " input
176
            case $input in
177
                [Nn]* ) break;;
178
                * )     echo "Copying backend configuration and data structures from previous installation..."
179
                        cp ${SURFMAP_BACKUPDIR_FRONTEND}/config.php ${FRONTEND_PLUGINDIR}/SURFmap/;
180
                        cp ${SURFMAP_BACKUPDIR_FRONTEND}/db/* ${FRONTEND_PLUGINDIR}/SURFmap/db/;
181
                        break;;
182
            esac
183
        done
184
    fi
185
fi
186
 
187
# Set permissions - owner and group
188
echo "Setting plugin file permissions - user \"${USER}\" and group \"${WWWGROUP}\""
189
if [ $INSTALL_FRONTEND = 1 ]; then
190
    chown -R ${USER}:${WWWGROUP} ${FRONTEND_PLUGINDIR}/SURFmap*
191
    chmod -R g+w ${FRONTEND_PLUGINDIR}/SURFmap/db
192
fi
193
if [ $INSTALL_BACKEND = 1 ]; then
194
    chown -R ${USER}:${WWWGROUP} ${BACKEND_PLUGINDIR}/SURFmap*
195
fi
196
 
197
# Update plugin configuration file - config.php. We use ',' as sed delimiter instead of escaping all '/' to '\/'.
198
echo "Updating plugin configuration file ${SURFMAP_CONF}"
199
 
200
# Check for proxy and update config.php accordingly
201
PROXY=$(env | grep -i http_proxy | awk '{ START=index($0,"=")+1; print substr($0,START) }')
202
if [ "$PROXY" != "" ]; then
203
    echo "HTTP proxy detected"
204
    sed -i.tmp "s,config\['use_proxy'\] = 0,config\['use_proxy'\] = 1,g" ${SURFMAP_CONF}
205
 
206
    PROXY_IP_PORT=$(echo ${PROXY} | awk '{ FROM=index($0,"//")+2; print substr($0,FROM) }')
207
    PROXY_IP=$(echo ${PROXY_IP_PORT} | awk '{ TO=index($0,":")-1; print substr($0,0,TO) }')
208
    PROXY_PORT=$(echo ${PROXY_IP_PORT} | awk '{ FROM=index($0,":")+1; print substr($0,FROM) }')
209
 
210
    OLD_PROXY_IP=$(grep "$config\['proxy_ip'\]" ${SURFMAP_CONF} | cut -d'"' -f2)
211
    OLD_PROXY_PORT=$(grep "$config\['proxy_port'\]" ${SURFMAP_CONF} | awk '{ FROM=index($0,"=")+2; TO=index($0,";"); print substr($0,FROM,TO-FROM) }')
212
 
213
    sed -i.tmp "s,${OLD_PROXY_IP},${PROXY_IP},g" ${SURFMAP_CONF}
214
    sed -i.tmp "s,${OLD_PROXY_PORT},${PROXY_PORT},g" ${SURFMAP_CONF}
215
fi
216
 
217
# Get my location information
218
cd ${FRONTEND_PLUGINDIR}/SURFmap/setup
219
MY_LOC=$(php retrievelocation.php | grep config_data | cut -d'>' -f2 | cut -d'<' -f1)
220
echo "Geocoding plugin location - ${MY_LOC}"
221
 
222
cd - > /dev/null
223
 
224
# Fill my location in plugin configuration file
225
if [ "${MY_LOC}" != "(UNKNOWN),(UNKNOWN),(UNKNOWN),(UNKNOWN),(UNKNOWN)" ]; then
226
    OLDENTRY=$(grep internal_domains ${SURFMAP_CONF} | cut -d'"' -f 6)
227
    sed -i.tmp "s/${OLDENTRY}/$(echo ${MY_LOC} | cut -d',' -f1)/g" ${SURFMAP_CONF}
228
 
229
    OLDENTRY=$(grep internal_domains ${SURFMAP_CONF} | cut -d'"' -f 10)
230
    NEWENTRY=$(echo ${MY_LOC} | cut -d',' -f2)
231
    if [ "${NEWENTRY}" = "(UNKNOWN)" ]; then
232
        NEWENTRY=""
233
    fi
234
    sed -i.tmp "s/${OLDENTRY}/${NEWENTRY}/g" ${SURFMAP_CONF}
235
 
236
    OLDENTRY=$(grep internal_domains ${SURFMAP_CONF} | cut -d'"' -f 14)
237
    NEWENTRY=$(echo ${MY_LOC} | cut -d',' -f3)
238
    if [ "${NEWENTRY}" = "(UNKNOWN)" ]; then
239
        NEWENTRY=""
240
    fi
241
    sed -i.tmp "s/${OLDENTRY}/${NEWENTRY}/g" ${SURFMAP_CONF}
242
 
243
    OLDENTRY=$(grep "$config\['map_center'\]" ${SURFMAP_CONF} | cut -d'"' -f2)
244
    NEWENTRY=$(echo ${MY_LOC} | cut -d',' -f4,5)
245
    if [ "${NEWENTRY}" != "(UNKNOWN),(UNKNOWN)" ]; then
246
        sed -i.tmp "s/${OLDENTRY}/${NEWENTRY}/g" ${SURFMAP_CONF}
247
    fi
248
fi
249
 
250
# Enable plugin
251
OLDENTRY=$(grep \@plugins ${NFSEN_CONF})
252
 
253
if grep "SURFmap" ${NFSEN_CONF} > /dev/null; then
254
    echo "Found 'SURFmap' in ${NFSEN_CONF}; assuming it is already configured"
255
else
256
    echo "Updating NfSen configuration file ${NFSEN_CONF}"
257
 
258
    # Check whether we are running Linux of BSD (BSD sed does not support inserting new lines (\n))
259
    if [ $(uname) = "Linux" ]; then
260
        sed -i.tmp "/SURFmap/d" ${NFSEN_CONF}
261
        sed -i.tmp "s/${OLDENTRY}/${OLDENTRY}\n    \[ 'live', 'SURFmap' ],/g" ${NFSEN_CONF}
262
    else # Something else (we assume *BSD)
263
        sed -i.tmp "s/${OLDENTRY}/${OLDENTRY}\ \[ 'live', 'SURFmap' ],/g" ${NFSEN_CONF}
264
    fi
265
fi
266
 
267
# Check whether an old SURFmap version was found and ask whether the backup of that version should be removed
268
if [ -d ${SURFMAP_BACKUPDIR_FRONTEND} -a -d ${SURFMAP_BACKUPDIR_BACKEND} ]; then
269
    while true; do
270
        read -p "Do you wish to remove the backup of your previous SURFmap installation [y,n] (default: n)? " input
271
        case $input in
272
            [Yy]* ) echo "Removing backup of previous installation..."
273
                    rm -rf ${SURFMAP_BACKUPDIR_FRONTEND} ${SURFMAP_BACKUPDIR_BACKEND}; 
274
                    break;;
275
            * )     break;;
276
        esac
277
    done
278
fi
279
 
280
echo "-----"
281
echo "Please restart/reload NfSen to finish installation (e.g., sudo ${BINDIR}/nfsen reload)"