1 | #!/bin/bash |
---|
2 | |
---|
3 | export TEXTDOMAIN="zero-center" |
---|
4 | |
---|
5 | MSG_INSTALLING=$(gettext "Installing") |
---|
6 | MSG_INSTALLED=$(gettext "Installed") |
---|
7 | MSG_REMOVING=$(gettext "Removing") |
---|
8 | MSG_REMOVED=$(gettext "Removed") |
---|
9 | MSG_FINISH_INSTALLED=$(gettext "has been INSTALLED in your system, and you can view the log in") |
---|
10 | MSG_FINISH_UNINSTALLED=$(gettext "has NOT been INSTALLED in your system, and you can view the log in") |
---|
11 | MSG_FINISH_SYSTEM1=$(gettext "has been") |
---|
12 | MSG_FINISH_ERROR=$(gettext "has NOT been") |
---|
13 | MSG_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 5000 -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 5000 -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 5000 -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 5000 -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 5000 -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 5000 -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 |
---|
242 | if [ -f /tmp/zero-installer.log ]; then |
---|
243 | rm /tmp/zero-installer.log |
---|
244 | fi |
---|
245 | |
---|
246 | echo " " >> /tmp/zero-installer.log |
---|
247 | echo "------Zero-Installer-Resume--------" >> /tmp/zero-installer.log |
---|
248 | echo "" >> /tmp/zero-installer.log |
---|
249 | echo "If you detect any problem please contact with Lliurex Team lliurex@lliurex.net" >> /tmp/zero-installer.log |
---|
250 | echo "Or submit it in http://mestreacasa.gva.es/web/lliurex/forums" >> /tmp/zero-installer.log |
---|
251 | echo "" >> /tmp/zero-installer.log |
---|
252 | |
---|
253 | #Dentro del programa principal lo primero que hago es mirar si es una lista |
---|
254 | check_list $1 $2 |
---|
255 | #Chequeo si los parametros son correctos |
---|
256 | check_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. |
---|
258 | check_package $1 $2 |
---|
259 | |
---|
260 | exit 0 |
---|
261 | |
---|
262 | |
---|