source: zero-center/trunk/fuentes/install-files/usr/bin/zero-installer @ 2053

Last change on this file since 2053 was 2053, checked in by Juanma, 3 years ago

Added error checking to apt/dpkg commands

  • Property svn:executable set to *
File size: 11.9 KB
Line 
1#!/bin/bash
2
3export TEXTDOMAIN="zero-center"
4
5MSG_INSTALLING=$(gettext "Installing")
6MSG_INSTALLED=$(gettext "Installed")
7MSG_REMOVING=$(gettext "Removing")
8MSG_REMOVED=$(gettext "Removed")
9MSG_FINISH_INSTALLED=$(gettext "has been INSTALLED in your system, and you can view the log in")
10MSG_FINISH_UNINSTALLED=$(gettext "has NOT been INSTALLED in your system, and you can view the log in")
11MSG_FINISH_SYSTEM1=$(gettext "has been")
12MSG_FINISH_ERROR=$(gettext "has NOT been")
13MSG_FINISH_SYSTEM=$(gettext "in your system, and you can view the log in")
14
15
16
17
18        function helper {
19                #Aqui listaremos las opciones del helper
20                if [ $1 = "--help" ] || [ $1 = "-h" ] || [ "$1" = "" ]; then
21                        echo
22                        echo "----ZERO-INSTALLER-HELPER----"
23                        echo
24                        echo "zero-installer <arg1> <arg2>"
25                        echo
26                        echo "arg1: Is the option to the package, install or remove"
27                        echo "arg2: Is the package"
28                        echo "arg3: -d option, indicate if you want install the package with dpkg"
29                        echo
30                        echo "example: zero-installer install hotpotatoes"
31                        echo
32                        echo "--------------------------------------------"
33                        echo
34                        echo "You can install deb packages with dpkg"
35                        echo "if you define argument 1 like -d"
36                        echo
37                        echo "example 2: zero-installer -d /tmp/google.deb"
38                        echo
39                        echo "--------------------------------------------"
40                        echo
41                        echo "You can define package list in a file with 2 arguments, for apt"
42                        echo
43                        echo  "<arg1> <arg2>"
44                        echo
45                        echo "<arg1> The name of package"
46                        echo "<arg> Instruction for package, install or remove"
47                        echo
48                        echo "zero-installer -l example.txt"
49                        echo
50                        exit 0
51                fi
52        }
53       
54       
55       
56        function main {
57               
58               
59                if [ "$1" == "-d" ]; then
60                       
61                        touch /tmp/zero-install.log
62                        NAME_PACK=$(echo $2 | rev | cut -d "/" -f1 | rev)                       
63                        #En segundo plano realizaremos la instalacion del paquete almacenando su salida en nuestro log, eliminando nuestro fichero ayuda para salir del bucle.
64                        TEST=`(dpkg -i $2 >> /tmp/zero-installer.log ; echo $?; rm /tmp/zero-install.log) &`
65                        echo " " >> /tmp/zero-installer.log
66                        echo "Zero-center-------Your instruction is----------dpkg -i $2" >> /tmp/zero-installer.log
67                        echo "................................................................................." >> /tmp/zero-installer.log
68
69                        #Mientras que el fichero de ayuda existe es que estamos instalando
70                        #Cuando ya no exista saldremos del while
71                                while [ -f  "/tmp/zero-install.log" ]; do
72                                        #En la variable PERCENT almacenamos el tanto por cien que llevamos de descarga
73                                        #accediento a la ultima linea escrita en el fichero de ayuda y seleccionando solo el dato que necesitamos.
74                                        VAR=$( tail -1 /tmp/zero-installer.log  2>/dev/null )
75                                        #Hacemos echo de los datos que necesita el zenity
76                                        echo "#$MSG_INSTALLING $2.......$VAR" | cut -c1-85
77                                        #por ultimo entubamos la salida al zenity progress para que nos muestre el resultado en pantalla
78                                done | zenity --progress  --auto-close --pulsate --width 500 --title="Zero-Center-Installer" --no-cancel > /dev/null 2>&1
79                        echo "................................................................................." >> /tmp/zero-installer.log
80                        if [ $TEST -eq 0 ]
81                        then
82                                echo "Zero-center-------Your package $NAME_PACK has been INSTALLED in your system"
83                                echo " " >> /tmp/zero-installer.log
84                                echo "Zero-center-------Your package $NAME_PACK has been INSTALLED in your system" >> /tmp/zero-installer.log
85                                echo "________________________________________________________________________________" >> /tmp/zero-installer.log
86                                echo " " >> /tmp/zero-installer.log
87                                su -c "notify-send -t 2000 -u normal -i /usr/share/icons/lliurex-neu/scalable/apps/zero-center.svg 'Zero-Installer' '$NAME_PACK $MSG_FINISH_INSTALLED /tmp/zero-installer.log'" $USER
88                                exit 0
89                        else
90                                echo "Zero-center-------Your package $NAME_PACK has NOT been INSTALLED in your system"
91                                echo " " >> /tmp/zero-installer.log
92                                echo "Zero-center-------Your package $NAME_PACK has NOT been INSTALLED in your system" >> /tmp/zero-installer.log
93                                echo "________________________________________________________________________________" >> /tmp/zero-installer.log
94                                echo " " >> /tmp/zero-installer.log
95                                su -c "notify-send -t 2000 -u normal -i /usr/share/icons/lliurex-neu/scalable/apps/zero-center.svg 'Zero-Installer' '$NAME_PACK $MSG_FINISH_UNINSTALLED /tmp/zero-installer.log'" $USER
96                                exit 1
97                        fi
98               
99                else
100                        #Creamos un fichero que nos servirá de ayuda para escribir y leer el tanto por cien del fichero descargado
101                        touch /tmp/zero-install.log
102                       
103                        INSTRUCCION=$1
104                       
105                        if [ "$INSTRUCCION" = "deinstall" ];then
106                                INSTRUCCION="remove"
107                        fi
108                       
109                        #En segundo plano realizaremos la instalacion del paquete almacenando su salida en nuestro log, eliminando nuestro fichero ayuda para salir del bucle.
110                        TEST=`(apt-get $INSTRUCCION -y --allow-unauthenticated $2 >> /tmp/zero-installer.log ; echo $?;rm /tmp/zero-install.log) &`
111                        echo "................................................................................." >> /tmp/zero-installer.log
112                        echo " " >> /tmp/zero-installer.log
113                        echo "Zero-center-------Your instruction is----------apt-get $INSTRUCCION -y --allow-unauthenticated $2" >> /tmp/zero-installer.log
114                        echo "................................................................................." >> /tmp/zero-installer.log
115
116                        #Mientras que el fichero de ayuda existe es que estamos instalando
117                        #Cuando ya no exista saldremos del while
118                                while [ -f  "/tmp/zero-install.log" ]; do
119                                        #En la variable PERCENT almacenamos el tanto por cien que llevamos de descarga
120                                        #accediento a la ultima linea escrita en el fichero de ayuda y seleccionando solo el dato que necesitamos.
121                                        VAR=$( tail -1 /tmp/zero-installer.log  2>/dev/null )
122                                        #Hacemos echo de los datos que necesita el zenity
123                                        echo "#$ACTION $2.......$VAR" | cut -c1-85
124                                        #por ultimo entubamos la salida al zenity progress para que nos muestre el resultado en pantalla
125                                done | zenity --progress  --auto-close --pulsate --width 500 --title="Zero-Center-Installer" --no-cancel > /dev/null 2>&1
126                        if [ $TEST -eq 0 ]
127                        then                   
128                                echo "Zero-center-------Your package $2 has been $FINISHED in your system"
129                                echo " " >> /tmp/zero-installer.log
130                                echo "Zero-center-------Your package $2 has been $FINISHED in your system" >> /tmp/zero-installer.log
131                                echo "________________________________________________________________________________" >> /tmp/zero-installer.log
132                                echo " " >> /tmp/zero-installer.log
133                                su -c "notify-send -t 2000 -u normal -i /usr/share/icons/lliurex-neu/scalable/apps/zero-center.svg 'Zero-Installer' '$2 $MSG_FINISH_SYSTEM1 $FINISHED $MSG_FINISH_SYSTEM /tmp/zero-installer.log'" $USER
134                        else
135                                echo "Zero-center-------Your package $2 has NOT been $FINISHED in your system"
136                                echo " " >> /tmp/zero-installer.log
137                                echo "Zero-center-------Your package $2 has NOT been $FINISHED in your system" >> /tmp/zero-installer.log
138                                echo "________________________________________________________________________________" >> /tmp/zero-installer.log
139                                echo " " >> /tmp/zero-installer.log
140                                su -c "notify-send -t 2000 -u normal -i /usr/share/icons/lliurex-neu/scalable/apps/zero-center.svg 'Zero-Installer' '$2 $MSG_FINISH_ERROR $FINISHED $MSG_FINISH_SYSTEM /tmp/zero-installer.log'" $USER
141                                exit 1
142                        fi
143                fi
144                }
145       
146       
147       
148        function check_removed {
149               
150                #Testeamos si el paquete esta instalado, no haciendo nada en el caso afirmativo o instalandolo en el caso negativo.
151                TEST=$( dpkg-query -s $2 2> /dev/null| grep Status | cut -d " " -f 4 )
152                if [ "$TEST" = 'installed' ]; then
153                        echo "Package $2 already installed, do nothing"
154                        echo "Package $2 already installed, do nothing" >> /tmp/zero-installer.log
155                        echo "________________________________________________________________________________" >> /tmp/zero-installer.log
156                        echo " " >> /tmp/zero-installer.log
157                else
158                        main $1 $2                     
159                fi
160               
161        }
162       
163        function check_install {
164               
165                #Testeamos si el paquete esta quitado, no haciendo nada en el caso afirmativo o desinstalandolo en el caso negativo
166                TEST=$( dpkg-query -s $2 2> /dev/null| grep Status | cut -d " " -f 4 )
167                if [ "$TEST" != 'installed' ]; then
168                        echo "Package $2 already removed, do nothing"
169                        echo "Package $2 already removed, do nothing" >> /tmp/zero-installer.log
170                        echo "________________________________________________________________________________" >> /tmp/zero-installer.log
171                        echo " " >> /tmp/zero-installer.log
172                else
173                        main $1 $2     
174                fi
175       
176               
177        }
178       
179        function check_package {
180               
181                if [ $1 = "install" ] ; then
182                        ACTION="$MSG_INSTALLING"
183                        FINISHED="$MSG_INSTALLED"
184                        check_removed $1 $2
185                else
186                        ACTION="$MSG_REMOVING"
187                        FINISHED="$MSG_REMOVED"
188                        check_install $1 $2
189                fi
190        }
191       
192       
193        function check_parameters {
194             
195                #En esta funcion testeamos los parametros para que ambos sean coherentes
196                #Testeamos que el primer parámetro sea uno de los permitidos
197                if [ "$1" != "install" -a "$1" != "remove"  -a "$1" != "deinstall" ] ;then
198                        echo "You define a wrong action for your package, please check it. Now abort zero-installer command" >> /tmp/zero-installer.log
199                        helper -h
200                fi
201                #Testeamos el segundo parametro comprobando que existe en el repositorio, sino abortamos la instruccion.
202                LANG=en apt-cache show $2 | grep -i Version
203                if [ "$?" != "0" ]; then
204                        su -c "notify-send -t 2000 -u normal -i /usr/share/icons/lliurex-neu/scalable/apps/zero-center.svg 'Zero-Installer' 'Impossible to install $2, it dont exists in your repositories, abort zero-installer command'" $USER
205                        echo "Your package $2 don't exists in your repositories, abort zero-installer command"
206                        echo "Your package $2 don't exists in your repositories, abort zero-installer command" >> /tmp/zero-installer.log
207                        #su -c "notify-send -t 2000 -u normal -i /usr/share/icons/lliurex-neu/scalable/apps/zero-center.svg 'Zero-Installer' 'Your package $2 DO NOT EXISTS in your repositories, abort zero-installer command, and you can view the log in /tmp/zero-installer.log. If you cannot resolve the problem please contact with Lliurex Team at http://mestreacasa.gva.es/web/lliurex/forums'" $USER
208                        exit 1
209                fi
210        }
211       
212       
213        function check_list {
214       
215                #Testeamos si el tercer parametro nos indica dpkg y lo lanzamos ya
216                if [ "$1" == "-d" ]; then
217                        main "$1" "$2"
218                fi
219               
220                #Compruebo que es una lista y si lo es la recorro linea a linea
221                if [ "$1" = "-l"  ]; then
222                        oldIFS=$IFS     # conserva el separador de campo
223                        IFS=$'\n'
224                        for line in $(cat $2); do
225                                #En cada linea obtengo el paquete y la instruccion a realizar
226                                PACKAGE=$( echo "$line" | awk '1 { print  $1 }' )
227                                INSTRUCTION=$( echo "$line" | awk '1 { print  $2 }' )
228                                echo "You want $INSTRUCTION from your system this package, $PACKAGE"
229                                echo "You want $INSTRUCTION from your system this package, $PACKAGE" >> /tmp/zero-installer.log
230                                check_parameters $INSTRUCTION $PACKAGE
231                                check_package $INSTRUCTION $PACKAGE
232                        done
233                        IFS=$old_IFS
234                        exit 0
235                fi                     
236        }
237       
238       
239###################PROGRAMA PRINCIPAL#######################
240
241#Log para el zero-center
242if [ -f /tmp/zero-installer.log ]; then
243        rm  /tmp/zero-installer.log
244fi
245
246echo " " >> /tmp/zero-installer.log
247echo "------Zero-Installer-Resume--------" >> /tmp/zero-installer.log
248echo "" >> /tmp/zero-installer.log
249echo "If you detect any problem please contact with Lliurex Team lliurex@lliurex.net" >> /tmp/zero-installer.log
250echo "Or submit it in http://mestreacasa.gva.es/web/lliurex/forums" >> /tmp/zero-installer.log
251echo "" >> /tmp/zero-installer.log
252
253#Dentro del programa principal lo primero que hago es mirar si es una lista     
254check_list $1 $2
255#Chequeo si los parametros son correctos
256check_parameters $1 $2
257#Chequeo si el paquete esta instalado o quitado y hago lo que se me pide, si no esta hecho de antes.
258check_package $1 $2
259
260exit 0
261
262
Note: See TracBrowser for help on using the repository browser.