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

Last change on this file since 6308 was 6308, checked in by daduve, 3 years ago

fixing bug in xenial notify zero-installer

  • Property svn:executable set to *
File size: 12.3 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                        tmpfile=$(mktemp)
66                        `(dpkg -i $2 >> /tmp/zero-installer.log ; echo $?; rm /tmp/zero-install.log)>$tmpfile `&
67
68                        echo " " >> /tmp/zero-installer.log
69                        echo "Zero-center-------Your instruction is----------dpkg -i $2" >> /tmp/zero-installer.log
70                        echo "................................................................................." >> /tmp/zero-installer.log
71
72                        #Mientras que el fichero de ayuda existe es que estamos instalando
73                        #Cuando ya no exista saldremos del while
74                                while [ -f  "/tmp/zero-install.log" ]; do
75                                        #En la variable PERCENT almacenamos el tanto por cien que llevamos de descarga
76                                        #accediento a la ultima linea escrita en el fichero de ayuda y seleccionando solo el dato que necesitamos.
77                                        VAR=$( tail -1 /tmp/zero-installer.log  2>/dev/null )
78                                        #Hacemos echo de los datos que necesita el zenity
79                                        echo "#$MSG_INSTALLING $2.......$VAR" | cut -c1-85
80                                        #por ultimo entubamos la salida al zenity progress para que nos muestre el resultado en pantalla
81                                done | zenity --progress  --auto-close --pulsate --width 500 --title="Zero-Center-Installer" --no-cancel > /dev/null 2>&1
82                        echo "................................................................................." >> /tmp/zero-installer.log
83                        #if [ $TEST -eq 0 ]
84                        if [ `cat $tmpfile` -eq 0 ]
85       
86                        then
87                                echo "Zero-center-------Your package $NAME_PACK has been INSTALLED in your system"
88                                echo " " >> /tmp/zero-installer.log
89                                echo "Zero-center-------Your package $NAME_PACK has been INSTALLED in your system" >> /tmp/zero-installer.log
90                                echo "________________________________________________________________________________" >> /tmp/zero-installer.log
91                                echo " " >> /tmp/zero-installer.log
92                                su -c "notify-send -t 8000 -u normal -i zero-center 'Zero-Installer' '$NAME_PACK $MSG_FINISH_INSTALLED /tmp/zero-installer.log'" $USER
93                                exit 0
94                        else
95                                echo "Zero-center-------Your package $NAME_PACK has NOT been INSTALLED in your system"
96                                echo " " >> /tmp/zero-installer.log
97                                echo "Zero-center-------Your package $NAME_PACK has NOT been INSTALLED in your system" >> /tmp/zero-installer.log
98                                echo "________________________________________________________________________________" >> /tmp/zero-installer.log
99                                echo " " >> /tmp/zero-installer.log
100                                su -c 'notify-send -t 8000 -u normal -i zero-center "Zero-Installer" "$NAME_PACK $MSG_FINISH_UNINSTALLED /tmp/zero-installer.log" ' $USER
101                                exit 1
102                        fi
103                        rm $tmpfile 2>/dev/null
104                else
105                        #Creamos un fichero que nos servirá de ayuda para escribir y leer el tanto por cien del fichero descargado
106                        touch /tmp/zero-install.log
107                       
108                        INSTRUCCION=$1
109                       
110                        if [ "$INSTRUCCION" = "deinstall" ];then
111                                INSTRUCCION="remove"
112                        elif [ "$INSTRUCCION" = "install" ];then
113                                check_update_repos
114                        fi
115                       
116                        #En segundo plano realizaremos la instalacion del paquete almacenando su salida en nuestro log, eliminando nuestro fichero ayuda para salir del bucle.
117                        #TEST=`(apt-get $INSTRUCCION -y --allow-unauthenticated $2 >> /tmp/zero-installer.log ; echo $?;rm /tmp/zero-install.log) &`
118                        tmpfile=$(mktemp)
119                        `(apt-get $INSTRUCCION -y --allow-unauthenticated $2 >> /tmp/zero-installer.log ; echo $?;rm /tmp/zero-install.log)>$tmpfile`&
120
121                        echo "................................................................................." >> /tmp/zero-installer.log
122                        echo " " >> /tmp/zero-installer.log
123                        echo "Zero-center-------Your instruction is----------apt-get $INSTRUCCION -y --allow-unauthenticated $2" >> /tmp/zero-installer.log
124                        echo "................................................................................." >> /tmp/zero-installer.log
125
126                        #Mientras que el fichero de ayuda existe es que estamos instalando
127                        #Cuando ya no exista saldremos del while
128                                while [ -f  "/tmp/zero-install.log" ]; do
129                                        #En la variable PERCENT almacenamos el tanto por cien que llevamos de descarga
130                                        #accediento a la ultima linea escrita en el fichero de ayuda y seleccionando solo el dato que necesitamos.
131                                        VAR=$( tail -1 /tmp/zero-installer.log  2>/dev/null )
132                                        #Hacemos echo de los datos que necesita el zenity
133                                        echo "#$ACTION $2.......$VAR" | cut -c1-85
134                                        #por ultimo entubamos la salida al zenity progress para que nos muestre el resultado en pantalla
135                                done | zenity --progress  --auto-close --pulsate --width 500 --title="Zero-Center-Installer" --no-cancel > /dev/null 2>&1
136                        #if [ $TEST -eq 0 ]
137                        if [ `cat $tmpfile` -eq 0 ]
138                        then                   
139                                echo "Zero-center-------Your package $2 has been $FINISHED in your system"
140                                echo " " >> /tmp/zero-installer.log
141                                echo "Zero-center-------Your package $2 has been $FINISHED in your system" >> /tmp/zero-installer.log
142                                echo "________________________________________________________________________________" >> /tmp/zero-installer.log
143                                echo " " >> /tmp/zero-installer.log
144                                su -c "notify-send -t 8000 -u normal -i zero-center 'Zero-Installer' '$2 $MSG_FINISH_SYSTEM1 $FINISHED $MSG_FINISH_SYSTEM /tmp/zero-installer.log'" $USER
145                        else
146                                echo "Zero-center-------Your package $2 has NOT been $FINISHED in your system"
147                                echo " " >> /tmp/zero-installer.log
148                                echo "Zero-center-------Your package $2 has NOT been $FINISHED in your system" >> /tmp/zero-installer.log
149                                echo "________________________________________________________________________________" >> /tmp/zero-installer.log
150                                echo " " >> /tmp/zero-installer.log
151                                su -c "notify-send -t 8000 -u normal -i zero-center 'Zero-Installer' '$2 $MSG_FINISH_ERROR $FINISHED $MSG_FINISH_SYSTEM /tmp/zero-installer.log'" $USER
152                                exit 1
153                        fi
154                        rm $tmpfile 2>/dev/null
155                fi
156                }
157       
158        function check_update_repos {
159                #Only update repos if needed
160                if [ $(date +"%y%m%d") != $(date -r /var/cache/apt/pkgcache.bin +"%y%m%d") ]; then
161                        echo "Updating repos..."
162                        zero-repos-update
163                else
164                        echo "Repos up-to-date..."
165                fi
166        }
167
168       
169        function check_removed {
170               
171                #Testeamos si el paquete esta instalado, no haciendo nada en el caso afirmativo o instalandolo en el caso negativo.
172                TEST=$( dpkg-query -s $2 2> /dev/null| grep Status | cut -d " " -f 4 )
173                if [ "$TEST" = 'installed' ]; then
174                        echo "Package $2 already installed, do nothing"
175                        echo "Package $2 already installed, do nothing" >> /tmp/zero-installer.log
176                        echo "________________________________________________________________________________" >> /tmp/zero-installer.log
177                        echo " " >> /tmp/zero-installer.log
178                else
179                        main $1 $2                     
180                fi
181               
182        }
183       
184        function check_install {
185               
186                #Testeamos si el paquete esta quitado, no haciendo nada en el caso afirmativo o desinstalandolo en el caso negativo
187                TEST=$( dpkg-query -s $2 2> /dev/null| grep Status | cut -d " " -f 4 )
188                if [ "$TEST" != 'installed' ]; then
189                        echo "Package $2 already removed, do nothing"
190                        echo "Package $2 already removed, do nothing" >> /tmp/zero-installer.log
191                        echo "________________________________________________________________________________" >> /tmp/zero-installer.log
192                        echo " " >> /tmp/zero-installer.log
193                else
194                        main $1 $2     
195                fi
196       
197               
198        }
199       
200   function check_package {
201               
202                if [ $1 = "install" ] ; then
203                        ACTION="$MSG_INSTALLING"
204                        FINISHED="$MSG_INSTALLED"
205                        check_removed $1 $2
206                else
207                        ACTION="$MSG_REMOVING"
208                        FINISHED="$MSG_REMOVED"
209                        check_install $1 $2
210                fi
211        }
212       
213       
214        function check_parameters {
215             
216                #En esta funcion testeamos los parametros para que ambos sean coherentes
217                #Testeamos que el primer parámetro sea uno de los permitidos
218                if [ "$1" != "install" -a "$1" != "remove"  -a "$1" != "deinstall" ] ;then
219                        echo "You define a wrong action for your package, please check it. Now abort zero-installer command" >> /tmp/zero-installer.log
220                        helper -h
221                fi
222                #Testeamos el segundo parametro comprobando que existe en el repositorio, sino abortamos la instruccion.
223                LANG=en apt-cache show $2 | grep -i Version
224                if [ "$?" != "0" ]; then
225                        msg=$"Impossible to install $2, it dont exists in your repositories, abort zero-installer command"
226                        su -c "notify-send -t 10000 -u normal -i zero-center 'Zero-Installer' \"${msg}\"" $USER
227                        echo "Your package $2 don't exists in your repositories, abort zero-installer command"
228                        echo "Your package $2 don't exists in your repositories, abort zero-installer command" >> /tmp/zero-installer.log
229                        su -c "notify-send -t 10000 -u normal -i zero-center '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
230                        exit 1
231                fi
232        }
233       
234       
235        function check_list {
236       
237                #Testeamos si el tercer parametro nos indica dpkg y lo lanzamos ya
238                if [ "$1" == "-d" ]; then
239                        main "$1" "$2"
240                fi
241               
242                #Compruebo que es una lista y si lo es la recorro linea a linea
243                if [ "$1" = "-l"  ]; then
244                        oldIFS=$IFS     # conserva el separador de campo
245                        IFS=$'\n'
246                        for line in $(cat $2); do
247                                #En cada linea obtengo el paquete y la instruccion a realizar
248                                PACKAGE=$( echo "$line" | awk '1 { print  $1 }' )
249                                INSTRUCTION=$( echo "$line" | awk '1 { print  $2 }' )
250                                echo "You want $INSTRUCTION from your system this package, $PACKAGE"
251                                echo "You want $INSTRUCTION from your system this package, $PACKAGE" >> /tmp/zero-installer.log
252                                check_parameters $INSTRUCTION $PACKAGE
253                                check_package $INSTRUCTION $PACKAGE
254                        done
255                        IFS=$old_IFS
256                        exit 0
257                fi                     
258        }
259       
260       
261###################PROGRAMA PRINCIPAL#######################
262
263#Log para el zero-center
264if [ -f /tmp/zero-installer.log ]; then
265        rm  /tmp/zero-installer.log
266fi
267
268echo " " >> /tmp/zero-installer.log
269echo "------Zero-Installer-Resume--------" >> /tmp/zero-installer.log
270echo "" >> /tmp/zero-installer.log
271echo "If you detect any problem please contact with Lliurex Team lliurex@lliurex.net" >> /tmp/zero-installer.log
272echo "Or submit it in http://mestreacasa.gva.es/web/lliurex/forums" >> /tmp/zero-installer.log
273echo "" >> /tmp/zero-installer.log
274
275#Dentro del programa principal lo primero que hago es mirar si es una lista     
276check_list $1 $2
277#Chequeo si los parametros son correctos
278check_parameters $1 $2
279#Chequeo si el paquete esta instalado o quitado y hago lo que se me pide, si no esta hecho de antes.
280check_package $1 $2
281
282exit 0
283
284
Note: See TracBrowser for help on using the repository browser.