source: lliurex-analytics-server/trunk/fuentes/debian/postinst @ 6926

Last change on this file since 6926 was 6926, checked in by mabarracus, 2 years ago

Fix bugs

File size: 12.0 KB
Line 
1#!/bin/sh
2# postinst script
3#
4# see: dh_installdeb(1)
5
6set -e
7# AVOID DECOMENT WITHOUT DEBCONF QUESTIONS
8#. /usr/share/debconf/confmodule
9
10# summary of how this script can be called:
11#        * <postinst> `configure' <most-recently-configured-version>
12#        * <old-postinst> `abort-upgrade' <new version>
13#        * <conflictor's-postinst> `abort-remove' `in-favour' <package>
14#          <new-version>
15#        * <postinst> `abort-remove'
16#        * <deconfigured's-postinst> `abort-deconfigure' `in-favour'
17#          <failed-install-package> <version> `removing'
18#          <conflicting-package> <version>
19# for details, see http://www.debian.org/doc/debian-policy/ or
20# the debian-policy package
21do_backup(){
22    USER=$1
23    PASS=$2
24    echo 'Doing backup into /etc/lliurex-analytics-server'
25    appdump="$(which mysqldump)"
26    if [ -z "$appdump" ]; then 
27        echo "Mysqldump not found"
28        return 0
29    fi
30    date="$(date +%s)"
31    mkdir -p /etc/lliurex-analytics-server
32    $($appdump $USER $PASS analytics | gzip -9 > /etc/lliurex-analytics-server/dump.$date ) || true
33}
34do_dialog(){
35    input=$(dialog      \
36        --title "$1"    \
37        --inputbox "$2" 0 0     \
38        3>&1 1>&2 2>&3 3>&-)
39        clear
40}
41ask_question(){
42    dialog --yesno "$1" 0 0
43    if [ $? -eq 0 ]; then
44        input=yes
45    else
46        input=no
47    fi
48    clear
49}
50
51case "$1" in
52    configure)
53    mysql_alive=""
54    retry=3
55    if [ -z "$mysql_alive" -a $retry -gt 0 ];then
56        mysql_alive="$(pidof mysqld || true)"
57        if [ -z "$mysql_alive" ]; then
58            echo "Trying to start mysql rc.d "
59            systemctl restart mysql || true
60            sleep 5
61        fi
62        retry=$(($retry -1))
63    fi
64    if [ $retry -eq 0 ];then
65        echo MySQL not running, no configuration possible, aborting...
66        exit 1
67    fi
68    ASK="no"
69
70#CHECK OLD CONFIG
71    if [ ! -d "/etc/lliurex-analytics-server" ]; then
72        ASK="yes"
73        echo "creating config directory"
74        mkdir /etc/lliurex-analytics-server
75    else
76        if [ -f "/etc/lliurex-analytics-server/config_db" ]; then
77            USER=$(cat /etc/lliurex-analytics-server/config_db|perl -ne '/user=(.*)/i && print $1')
78            PASS=$(cat /etc/lliurex-analytics-server/config_db|perl -ne '/pass=(.*)/i && print $1')
79            if [ -n "${USER}" -a -n "${PASS}" ]; then
80                RES=$(mysql -u${USER} -p${PASS} -N -s -Danalytics -e "show tables" 2>/dev/null || true)
81                if [ -n "${RES}" ]; then
82                    user="${USER}"
83                    pass="${PASS}"
84                    rootuser="-u${USER}"
85                    rootpass="-p${PASS}"
86                    ASK="no"
87                    echo "using user & pass from config_db file"
88                else
89                    echo "wrong user & pass into config_db file"
90                    ASK="yes"
91                fi
92            else
93                echo "user & pass not detected in config_db file"
94                ASK="yes"
95            fi
96        else
97            echo "config_db file not found"
98            ASK="yes"
99        fi
100    fi
101
102# ASK QUESTIONS
103    print_info="no"
104    ask_user="yes"
105    if [ "${ASK}" = "yes" ]; then
106        ask_question 'Desea configurar la base de datos analytics?'
107        if [ "x$input" = "xyes" ]; then
108            create_db=$input
109            ask_question 'Desea crear usuario para la tabla de la base de datos?'
110            create_user=$input
111            if [ "x$input" = "xyes" ]; then
112                do_dialog 'Database configuration' 'Nombre del usuario para crear:'
113                user=$input
114                do_dialog 'Database configuration' 'Password del usuario para crear:'
115                pass=$input
116            else
117                do_dialog 'Database configuration' 'Usuario con permiso en bd analytics?'
118                user=$input
119                do_dialog 'Database configuration' 'Password del usuario con permiso en bd analytics?'
120                pass=$input
121            fi
122            ask_root="yes"
123            if [ -f /etc/mysql/debian.cnf ]; then
124                root_test=$(mysql -u root -s -N -e "show databases" 2>/dev/null || true)
125                if [ -z "$root_test" ]; then
126                    rootuser=$(cat /etc/mysql/debian.cnf |grep -A 4 '\[client\]'|perl -ne '/user[ \t]*=[ \t]*(.*)/i && print $1')
127                    rootpass=$(cat /etc/mysql/debian.cnf |grep -A 4 '\[client\]'|perl -ne '/password[ \t]*=[ \t]*(.*)/i && print $1')
128                    if [ -n "$rootuser" -a -n "$rootpass" ]; then
129                        root_test=$(mysql -u $rootuser -p$rootpass -s -N -e "show databases" 2>/dev/null || true)
130                        if [ -n "$root_test" ]; then
131                            ask_root="no"
132                            rootuser="-u$rootuser"
133                            rootpass="-p$rootpass"
134                        fi
135                    fi
136                else
137                    ask_root="no"
138                    rootuser="-uroot"
139                    rootpass=""
140                fi
141            fi
142            if [ "x$ask_root" = "xyes" ]; then
143                do_dialog 'Database configuration' 'Mysql root user? (empty is root)'
144                if [ -z "$input" ]; then
145                    rootuser="root"
146                else
147                    rootuser=$input
148                fi
149                do_dialog 'Database configuration' 'Password root de mysql?'
150                rootpass=$input
151                root_test=$(mysql -u $rootuser -p$rootpass -s -N -e "show databases" 2>/dev/null || true)
152                if [ -z "$root_test" ]; then
153                    echo "Wrong password, leaving all unconfigured and aborting...."
154                    exit 0
155                else
156                    if [ -z "$rootuser" ]; then
157                        rootuser="-uroot"
158                    fi
159                    rootuser="-u$rootuser"
160                    if [ -z "$rootpass" ];then
161                        rootpass=""
162                    else
163                        rootpass="-p$rootpass"
164                    fi
165                fi
166            fi
167        else
168            print_info="yes"
169        fi
170    else
171    #ASK=no
172        create_db="no"
173        create_user="no"
174        ask_user="no"
175    fi
176
177# UPDATE DB FROM OLDER VERSIONS
178    do_backup "$rootuser" "$rootpass"
179
180    is_version_1=0
181    is_version_1_4=0
182
183    tables=$(mysql $rootuser $rootpass -s -N -Danalytics -e "show tables" 2>/dev/null || true)
184    if [ -n "$tables" ]; then
185        tables=$(echo $tables|grep historico_clients || true)
186        if [ -n "$tables" ]; then
187            is_version_1_4=1
188        else
189            tables=$(echo $tables|grep historico || true)
190            if [ -n "$tables" ]; then
191                is_version_1=1
192            fi
193        fi
194    fi
195    if [ "$is_version_1" = "1" ]; then
196        echo "Updating database from version 1"
197        mysql $rootuser $rootpass < /usr/lib/analytics-server/migrate_from_1.sql || true
198        create_db="no"
199    fi
200    if [ "$is_version_1_4" = "1" ]; then
201        echo "Updating database from version 1.4"
202        mysql $rootuser $rootpass < /usr/lib/analytics-server/migrate_from_1_4.sql || true
203        create_db="no"
204    fi
205
206    dumpfile="/usr/lib/analytics-server/analytics2.sql"
207
208    #keys=$(mysqldump $rootuser $rootpass analytics 2>/dev/null|egrep '^[[:space:]]*KEY'|wc -l)
209    #dumpfile="/usr/lib/analytics-server/analytics-0_1_3-to-0_1_4.sql"
210
211    #UPDATE FROM 0.1.3 to 0.1.4
212
213    #older_version="$2"
214    #target_update="0.1.4"
215
216    #need_update_to_0_1_4=no
217    #dpkg --compare-versions "$older_version" lt "$target_update" && need_update_to_0_1_4=yes
218    #if [ -z "$tables" -o $keys -ne 12 ]; then
219    #    need_update_to_0_1_4=yes
220    #    echo "failed database test for table historico_clients or keys"
221    #fi
222    #if [ "x$need_update_to_0_1_4" = "xyes" ]; then
223    #    echo Updating to database version upper than 0.1.4
224    #    if [ "x$dump_old_data" = "xyes" ]; then
225    #        mysqldump $rootuser $rootpass --no-create-info analytics > /tmp/__analytics_tmp__ 2>/dev/null
226    #    fi
227    #    mysql $rootuser $rootpass -s -N -e "drop database if exists analytics"
228    #    mysql $rootuser $rootpass < $dumpfile
229    #    mysql $rootuser $rootpass analytics < /tmp/__analytics_tmp__
230    #else
231    #    echo "Seems that database is newer than 0.1.4, skipping database migration"
232    #fi
233
234
235#INITIALIZE DB
236
237    if [ "x$create_db" = "xyes" ]; then
238        if [ "x$create_user" = "xyes" ]; then
239            mysql $rootuser $rootpass -s -N -e "create user '$user'@'%' identified by '$pass';" || true
240            mysql $rootuser $rootpass -s -N -e  "grant all privileges on analytics.* to '$user'@'%';" || true
241            mysql $rootuser $rootpass -s -N -e  "flush privileges;"
242            echo "user=$user" > /etc/lliurex-analytics-server/config_db
243            echo "pass=$pass" >> /etc/lliurex-analytics-server/config_db
244            chmod 750 /etc/lliurex-analytics-server/config_db
245        fi
246        mysql $rootuser $rootpass  < $dumpfile 
247    else
248        if [ "x$create_user" != "xyes" -a "${ask_user}" != "no" ]; then
249            do_dialog 'Analytics configuration' 'Usuario con permiso en bd analytics?'
250            user=$input
251            do_dialog 'Analytics configuration' 'Password del usuario con permiso en bd analytics?'
252            pass=$input
253            echo "user=$user" > /etc/lliurex-analytics-server/config_db
254            echo "pass=$pass" >> /etc/lliurex-analytics-server/config_db
255            chmod 640 /etc/lliurex-analytics-server/config_db
256        fi
257    fi
258
259    RES1=$(grep -o '@phpuser@' /usr/lib/analytics-server/analytics/config.php)
260    RES2=$(grep -o '@phppass@' /usr/lib/analytics-server/analytics/config.php)
261
262    if [ -f "/usr/lib/analytics-server/analytics/config.php" -a -n "${RES1}" -a -n "${RES2}" ]; then
263        sed -i.old -e "s/@phpuser@/$user/g" -e  "s/@phppass@/$pass/g" /usr/lib/analytics-server/analytics/config.php
264        rm /usr/lib/analytics-server/analytics/config.php.old
265        chmod 640 /usr/lib/analytics-server/analytics/config.php
266        apachectl_cmd=$(which apachectl)
267        apache_group=$(${apachectl_cmd} -t -D DUMP_RUN_CFG 2>/dev/null|perl -ne '/group:[ ]+name=\"(.*)\"/i && print $1')
268        if [ -z "${apache_group}" ]; then
269            echo "Warning: apache group not detected, falling back to www-data"
270            apache_group="www-data"
271        fi
272        chgrp ${apache_group} /usr/lib/analytics-server/analytics/config.php
273    else
274        echo "BUG !! WARNING: replace tags @phpuser@ & @phppass@ not found in /usr/lib/analytics-server/analytics/config.php"
275        echo "Installation may not work succesfully, report bug to developers"
276    fi
277
278    need_update_1_5=$(mysql $rootuser $rootpass -s -N -Danalytics -e "describe tmp_clients;" |grep ncpu |wc -l 2>/dev/null || true)
279    if [ "$need_update_1_5" = "0" ]; then
280        echo "Updating database to 1.5 format"
281        mysql $rootuser $rootpass < /usr/lib/analytics-server/update_allow_platformdata.sql || true
282    fi
283
284
285# CONFIG APACHE
286
287    if [ -e /usr/share/apache2/apache2-maintscript-helper ] ; then
288        . /usr/share/apache2/apache2-maintscript-helper
289        apache2_invoke enmod rewrite || exit $?
290        apache2_invoke ensite analytics || exit $?
291    fi
292
293    if [ "${print_info}" = "yes" ]; then
294            echo
295            echo "To import database schema use:"
296            echo ""
297            echo "echo \"create user '<user>'@'%' identified by '<password>';\" | mysql -u root -p<root_password>"
298            echo "echo \"grant all privileges on analytics.* to '<user>'@'%';\" | mysql -u root -p<root_password>"
299            echo "echo \"flush privileges; \" | mysql -u root -p<root_password>"
300            echo "mysql -u <user> -p<root_password> < /usr/lib/analytics-server/analytics.sql"
301            echo "After that, edit /usr/lib/analytics-server/analytics/config.php"
302            echo 
303            echo
304    fi
305   
306
307    ;;
308
309    abort-upgrade|abort-remove|abort-deconfigure)
310    ;;
311
312    *)
313        echo "postinst called with unknown argument \`$1'" >&2
314        exit 1
315    ;;
316esac
317
318# dh_installdeb will replace this with shell code automatically
319# generated by other debhelper scripts.
320
321#DEBHELPER#
322
323exit 0
324
325
Note: See TracBrowser for help on using the repository browser.