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

Last change on this file since 5560 was 5560, checked in by mabarracus, 3 years ago

Complete code rewrite
New database model
Improved performance & optimization
Extended information about clients
Fixed older bugs
New testing framework
Fix postinst exit code

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