Commit b6be55bcaa8a096bfad663907b97886dcb5e5257
0 parents
Exists in
master
Initial commit! By Questor
Showing
36 changed files
with
1543 additions
and
0 deletions
Show diff stats
No preview for this file type
1 | +++ a/ez_i.sh | |
... | ... | @@ -0,0 +1,823 @@ |
1 | +#!/bin/bash | |
2 | +: 'Trata-se de um módulo que oferece uma série de funcionalidades para | |
3 | +criar um instalador usando "bash". | |
4 | + | |
5 | +Apache License | |
6 | +Version 2.0, January 2004 | |
7 | +http://www.apache.org/licenses/ | |
8 | +Copyright 2016 Eduardo Lúcio Amorim Costa | |
9 | +' | |
10 | + | |
11 | +# NOTE: Obtêm a pasta do script atual para que seja usado como | |
12 | +# caminho base/referência durante a instalação! By Questor | |
13 | +EZ_I_DIR_V="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" | |
14 | + | |
15 | +# NOTE: Quando setado faz "ez_i" desabilitar algumas funções, | |
16 | +# notadamente aquelas que envolvem "perguntas ao usuário" e as | |
17 | +# gráficas! By Questor | |
18 | +EZ_I_SKIP_ON_V=0 | |
19 | + | |
20 | +# > -------------------------------------------------------------------------- | |
21 | +# UTILITÁRIOS! | |
22 | +# -------------------------------------- | |
23 | + | |
24 | +f_enter_to_cont() { | |
25 | + : 'Solicitar ao usuário que pressione enter para continuar. | |
26 | + | |
27 | + Args: | |
28 | + INFO_P (Optional[str]): Se informado apresenta uma mensagem ao | |
29 | + usuário. | |
30 | + ' | |
31 | + | |
32 | + INFO_P=$1 | |
33 | + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then | |
34 | + return 0 | |
35 | + fi | |
36 | + | |
37 | + if [ ! -z "$INFO_P" ] ; then | |
38 | + f_div_section | |
39 | + echo "$INFO_P" | |
40 | + f_div_section | |
41 | + fi | |
42 | + | |
43 | + read -p "Press enter to continue..." nothing | |
44 | +} | |
45 | + | |
46 | +GET_USR_INPUT_R="" | |
47 | +f_get_usr_input() { | |
48 | + : 'Obter entradas digitadas pelo usuário. | |
49 | + | |
50 | + Permite autocomplete (tab). Enter para submeter a entrada. | |
51 | + | |
52 | + Args: | |
53 | + QUESTION_P (str): Pergunta a ser feita ao usuário. | |
54 | + ALLOW_EMPTY_P (Optional[int]): 0 - Não permite valor vazio; 1 - Permite | |
55 | + valor vazio. Padrão 0. | |
56 | + | |
57 | + Returns: | |
58 | + GET_USR_INPUT_R (str): Entrada digitada pelo usuário. | |
59 | + ' | |
60 | + | |
61 | + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then | |
62 | + return 0 | |
63 | + fi | |
64 | + QUESTION_P=$1 | |
65 | + ALLOW_EMPTY_P=$2 | |
66 | + if [ -z "$ALLOW_EMPTY_P" ] ; then | |
67 | + ALLOW_EMPTY_P=0 | |
68 | + fi | |
69 | + GET_USR_INPUT_R="" | |
70 | + read -e -r -p "$QUESTION_P (use enter to confirm): " RESP_V | |
71 | + if [ -n "$RESP_V" ] ; then | |
72 | + GET_USR_INPUT_R="$RESP_V" | |
73 | + elif [ ${ALLOW_EMPTY_P} -eq 0 ] ; then | |
74 | + f_get_usr_input "$QUESTION_P" 0 | |
75 | + fi | |
76 | +} | |
77 | + | |
78 | +F_EZ_SED_ECP_R="" | |
79 | +f_ez_sed_ecp() { | |
80 | + : '"Escapar" strings para o comando "sed". | |
81 | + | |
82 | + Como há muitas semelhanças entre o escape para "sed" ("f_ez_sed") e | |
83 | + escape para "grep" ("f_fl_cont_str") optei por colocar essa | |
84 | + função como utilitária para as outras duas citadas. | |
85 | + | |
86 | + Args: | |
87 | + VAL_TO_ECP (str): Valor a ser "escapado". | |
88 | + DONT_ECP_NL (Optional[int]): 0 - Não "escapa" "\n" (quebra de | |
89 | + linha); 1 - "Escapa" "\n". Padrão 1. | |
90 | + DONT_ECP_SQ (Optional[int]): 0 - Não "escapa" "'" (aspas | |
91 | + simples); 1 - "Escapa" "'". Padrão 0. NOTE: Usado apenas pela | |
92 | + função "f_fl_cont_str". | |
93 | + | |
94 | + Returns: | |
95 | + F_EZ_SED_ECP_R (str): Valor "escapado". | |
96 | + ' | |
97 | + | |
98 | + VAL_TO_ECP=$1 | |
99 | + DONT_ECP_NL=$2 | |
100 | + if [ -z "$DONT_ECP_NL" ] ; then | |
101 | + DONT_ECP_NL=1 | |
102 | + fi | |
103 | + DONT_ECP_SQ=$3 | |
104 | + if [ -z "$DONT_ECP_SQ" ] ; then | |
105 | + DONT_ECP_SQ=0 | |
106 | + fi | |
107 | + F_EZ_SED_ECP_R=$VAL_TO_ECP | |
108 | + if [ ${DONT_ECP_NL} -eq 1 ] ; then | |
109 | + F_EZ_SED_ECP_R=$(echo "$F_EZ_SED_ECP_R" | sed 's/\\n/C0673CECED2D4A8FBA90C9B92B9508A8/g') | |
110 | + fi | |
111 | + F_EZ_SED_ECP_R=$(echo "$F_EZ_SED_ECP_R" | sed 's/[]\/$*.^|[]/\\&/g') | |
112 | + if [ ${DONT_ECP_SQ} -eq 0 ] ; then | |
113 | + F_EZ_SED_ECP_R=$(echo "$F_EZ_SED_ECP_R" | sed "s/'/\\\x27/g") | |
114 | + fi | |
115 | + if [ ${DONT_ECP_NL} -eq 1 ] ; then | |
116 | + F_EZ_SED_ECP_R=$(echo "$F_EZ_SED_ECP_R" | sed 's/C0673CECED2D4A8FBA90C9B92B9508A8/\\n/g') | |
117 | + fi | |
118 | +} | |
119 | + | |
120 | +f_ez_sed() { | |
121 | + : 'Facilitar o uso da funcionalidade "sed". | |
122 | + | |
123 | + Args: | |
124 | + TARGET (str): Valor a ser substituído por pelo valor de REPLACE. | |
125 | + REPLACE (str): Valor que irá substituir TARGET. | |
126 | + FILE (str): Arquivo no qual será feita a substituição. | |
127 | + ALL_OCCUR (Optional[int]): 0 - Fazer replace apenas na primeira | |
128 | + ocorrência; 1 - Fazer replace em todas as ocorrências. Padrão 0. | |
129 | + DONT_ESCAPE (Optional[int]): 0 - Faz escape das strings em | |
130 | + TARGET e REPLACE; 1 - Não faz escape das strings em TARGET e | |
131 | + REPLACE. Padrão 0. | |
132 | + DONT_ECP_NL (Optional[int]): 1 - Não "escapa" "\n" (quebra de | |
133 | + linha); 0 - "Escapa" "\n". Padrão 1. | |
134 | + REMOVE_LN (Optional[int]): 1 - Remove a linha que possui o | |
135 | + valor em TARGET; 0 - Faz o replace convencional. Padrão 0. | |
136 | + ' | |
137 | + | |
138 | + FILE=$3 | |
139 | + ALL_OCCUR=$4 | |
140 | + if [ -z "$ALL_OCCUR" ] ; then | |
141 | + ALL_OCCUR=0 | |
142 | + fi | |
143 | + DONT_ESCAPE=$5 | |
144 | + if [ -z "$DONT_ESCAPE" ] ; then | |
145 | + DONT_ESCAPE=0 | |
146 | + fi | |
147 | + DONT_ECP_NL=$6 | |
148 | + if [ -z "$DONT_ECP_NL" ] ; then | |
149 | + DONT_ECP_NL=1 | |
150 | + fi | |
151 | + REMOVE_LN=$7 | |
152 | + if [ -z "$REMOVE_LN" ] ; then | |
153 | + REMOVE_LN=0 | |
154 | + fi | |
155 | + if [ ${DONT_ESCAPE} -eq 1 ] ; then | |
156 | + TARGET=$1 | |
157 | + REPLACE=$2 | |
158 | + else | |
159 | + f_ez_sed_ecp "$1" $DONT_ECP_NL | |
160 | + TARGET=$F_EZ_SED_ECP_R | |
161 | + f_ez_sed_ecp "$2" $DONT_ECP_NL | |
162 | + REPLACE=$F_EZ_SED_ECP_R | |
163 | + fi | |
164 | + if [ ${REMOVE_LN} -eq 1 ] ; then | |
165 | + if [ ${ALL_OCCUR} -eq 0 ] ; then | |
166 | + SED_RPL="'0,/$TARGET/{//d;}'" | |
167 | + else | |
168 | + SED_RPL="'/$TARGET/d'" | |
169 | + fi | |
170 | + eval "sed -i $SED_RPL $FILE" | |
171 | + else | |
172 | + if [ ${ALL_OCCUR} -eq 0 ] ; then | |
173 | + SED_RPL="'0,/$TARGET/s//$REPLACE/g'" | |
174 | + else | |
175 | + SED_RPL="'s/$TARGET/$REPLACE/g'" | |
176 | + fi | |
177 | + eval "sed -i $SED_RPL $FILE" | |
178 | + fi | |
179 | +} | |
180 | + | |
181 | +FL_CONT_STR_R=0 | |
182 | +f_fl_cont_str() { | |
183 | + : 'Checar se um arquivo contêm determinada string. | |
184 | + | |
185 | + Args: | |
186 | + STR_TO_CH (str): Valor de string a ser verificado. | |
187 | + FILE (str): Arquivo no qual será feita a verificação. | |
188 | + COND_MSG_P (Optional[str]): Mensagem a ser exibida se | |
189 | + verdadeira a verificação. Se vazio ou não informado não será | |
190 | + exibida mensagem. | |
191 | + CHK_INVERT (Optional[int]): Inverter a lógica da checagem. | |
192 | + Padrão 0. | |
193 | + DONT_ESCAPE (Optional[int]): 0 - Faz escape da string em | |
194 | + STR_TO_CH; 1 - Não faz escape das strings em STR_TO_CH. Padrão 0. | |
195 | + DONT_ECP_NL (Optional[int]): 1 - Não "escapa" "\n" (quebra de | |
196 | + linha); 0 - "Escapa" "\n". Padrão 1. | |
197 | + | |
198 | + Returns: | |
199 | + FL_CONT_STR_R (int): 1 - Se verdadeiro para a condição | |
200 | + analisada; 0 - Se falso para a condição analisada. | |
201 | + ' | |
202 | + | |
203 | + STR_TO_CH=$1 | |
204 | + FILE=$2 | |
205 | + COND_MSG_P=$3 | |
206 | + CHK_INVERT=$4 | |
207 | + DONT_ESCAPE=$5 | |
208 | + | |
209 | + if [ -z "$DONT_ESCAPE" ] ; then | |
210 | + DONT_ESCAPE=0 | |
211 | + fi | |
212 | + if [ ${DONT_ESCAPE} -eq 0 ] ; then | |
213 | + DONT_ECP_NL=$6 | |
214 | + if [ -z "$DONT_ECP_NL" ] ; then | |
215 | + DONT_ECP_NL=1 | |
216 | + fi | |
217 | + f_ez_sed_ecp "$STR_TO_CH" $DONT_ECP_NL 1 | |
218 | + STR_TO_CH=$F_EZ_SED_ECP_R | |
219 | + fi | |
220 | + | |
221 | + if [ -z "$CHK_INVERT" ] ; then | |
222 | + CHK_INVERT=0 | |
223 | + fi | |
224 | + FL_CONT_STR_R=0 | |
225 | + if [ ${CHK_INVERT} -eq 0 ] ; then | |
226 | + if grep -q "$STR_TO_CH" "$FILE"; then | |
227 | + FL_CONT_STR_R=1 | |
228 | + fi | |
229 | + else | |
230 | + if ! grep -q "$STR_TO_CH" "$FILE"; then | |
231 | + FL_CONT_STR_R=1 | |
232 | + fi | |
233 | + fi | |
234 | + if [ ${EZ_I_SKIP_ON_V} -eq 0 ] && [ ${FL_CONT_STR_R} -eq 1 ] && [ ! -z "$COND_MSG_P" ] ; then | |
235 | + f_div_section | |
236 | + echo "$COND_MSG_P" | |
237 | + f_div_section | |
238 | + f_enter_to_cont | |
239 | + fi | |
240 | +} | |
241 | + | |
242 | +CHK_FD_FL_R=0 | |
243 | +f_chk_fd_fl() { | |
244 | + : 'Verificar se determinado diretório ou arquivo existe. | |
245 | + | |
246 | + Args: | |
247 | + TARGET (str): Diretório ou arquivo qual se quer verificar. | |
248 | + CHK_TYPE (str): "d" - Checar por diretório; "f" - Checar por | |
249 | + arquivo. | |
250 | + | |
251 | + Returns: | |
252 | + CHK_FD_FL_R (int): 1 - True; 0 - False. | |
253 | + ' | |
254 | + | |
255 | + CHK_FD_FL_R=0 | |
256 | + TARGET=$1 | |
257 | + CHK_TYPE=$2 | |
258 | + if [ "$CHK_TYPE" == "f" ] ; then | |
259 | + if [ -f "$TARGET" ] ; then | |
260 | + CHK_FD_FL_R=1 | |
261 | + fi | |
262 | + fi | |
263 | + if [ "$CHK_TYPE" == "d" ] ; then | |
264 | + if [ -d "$TARGET" ] ; then | |
265 | + CHK_FD_FL_R=1 | |
266 | + fi | |
267 | + fi | |
268 | +} | |
269 | + | |
270 | +F_PACK_IS_INST_R=0 | |
271 | +f_pack_is_inst() { | |
272 | + : 'Checar se um pacote está instalado. | |
273 | + | |
274 | + Args: | |
275 | + PACKAGE_NM_P (str): Nome do pacote. | |
276 | + PACK_MANAG (str): Tipo de gerenciador de pacotes. Apenas yum é | |
277 | + suportado. Em caso diverso o script exibe erro e para. | |
278 | + EXIST_MSG_P (Optional[str]): Mensagem a ser exibida se o | |
279 | + pacote já estiver instalado. Se vazio ou não informado não será | |
280 | + exibida mensagem. | |
281 | + SKIP_MSG_P (Optional[int]): Omite a mensagem. Padrão 0. | |
282 | + | |
283 | + Returns: | |
284 | + F_PACK_IS_INST_R (int): 1 - Instalado; 0 - Não instalado. | |
285 | + ' | |
286 | + | |
287 | + PACKAGE_NM_P=$1 | |
288 | + PACK_MANAG=$2 | |
289 | + EXIST_MSG_P=$3 | |
290 | + SKIP_MSG_P=$4 | |
291 | + | |
292 | + if [ -z "$SKIP_MSG_P" ] ; then | |
293 | + SKIP_MSG_P=0 | |
294 | + fi | |
295 | + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then | |
296 | + SKIP_MSG_P=1 | |
297 | + fi | |
298 | + | |
299 | + F_PACK_IS_INST_R=0 | |
300 | + if [ "$PACK_MANAG" == "yum" ] ; then | |
301 | + if yum list installed "$PACKAGE_NM_P" >/dev/null 2>&1; then | |
302 | + if [ ${SKIP_MSG_P} -eq 0 ] && [ ! -z "$EXIST_MSG_P" ] ; then | |
303 | + f_div_section | |
304 | + echo "$EXIST_MSG_P" | |
305 | + f_div_section | |
306 | + f_enter_to_cont | |
307 | + fi | |
308 | + F_PACK_IS_INST_R=1 | |
309 | + else | |
310 | + F_PACK_IS_INST_R=0 | |
311 | + fi | |
312 | + else | |
313 | + f_div_section | |
314 | + echo "ERROR! Not implemented for \"$PACK_MANAG\"!" | |
315 | + f_div_section | |
316 | + f_enter_to_cont | |
317 | + fi | |
318 | +} | |
319 | + | |
320 | +F_CHK_BY_PATH_HLP_R=0 | |
321 | +f_chk_by_path_hlp() { | |
322 | + : 'Checar se um aplicativo/pacote/arquivo está presente/instalado | |
323 | + verificando-o através do seu caminho físico informando. | |
324 | + | |
325 | + Args: | |
326 | + PATH_VER_P (str): Caminho físico para o aplicativo/pacote. | |
327 | + VER_TYPE_P (str): Se o caminho físico é para um diretório ("d") | |
328 | + ou arquivo ("f"). | |
329 | + EXIST_MSG_P (Optional[str]): Mensagem a ser "printada" caso o | |
330 | + aplicativo/pacote/arquivo exista. Se não informado ou vazio não | |
331 | + exibe a mensagem. | |
332 | + SKIP_MSG_P (Optional[int]): Não exibir mensagem. | |
333 | + | |
334 | + Returns: | |
335 | + F_CHK_BY_PATH_HLP_R (int): 0 - Não existe; 1 - Existe | |
336 | + ("printa" menssagem contida em EXIST_MSG_P). | |
337 | + ' | |
338 | + | |
339 | + PATH_VER_P=$1 | |
340 | + VER_TYPE_P=$2 | |
341 | + EXIST_MSG_P=$3 | |
342 | + SKIP_MSG_P=$4 | |
343 | + if [ -z "$SKIP_MSG_P" ] ; then | |
344 | + SKIP_MSG_P=0 | |
345 | + fi | |
346 | + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then | |
347 | + SKIP_MSG_P=1 | |
348 | + fi | |
349 | + | |
350 | + F_CHK_BY_PATH_HLP_R=0 | |
351 | + f_chk_fd_fl "$PATH_VER_P" "$VER_TYPE_P" | |
352 | + if [ ${CHK_FD_FL_R} -eq 0 ] ; then | |
353 | + F_CHK_BY_PATH_HLP_R=0 | |
354 | + else | |
355 | + if [ ${SKIP_MSG_P} -eq 0 ] && [ ! -z "$EXIST_MSG_P" ]; then | |
356 | + f_div_section | |
357 | + echo "$EXIST_MSG_P" | |
358 | + f_div_section | |
359 | + f_enter_to_cont | |
360 | + fi | |
361 | + F_CHK_BY_PATH_HLP_R=1 | |
362 | + fi | |
363 | +} | |
364 | + | |
365 | +F_CHK_IPTABLES_R=0 | |
366 | +f_chk_iptables() { | |
367 | + : 'Fazer verificações usando "iptables". | |
368 | + | |
369 | + Trata-se de um utilitário para fazer verificações diversas usando o | |
370 | + comando "iptables" NORMALMENTE CHECAR DE DETERMINADA PORTA ESTÁ | |
371 | + ABERTA. | |
372 | + | |
373 | + Ex 1.: f_chk_iptables 80 | |
374 | + Ex 2.: f_chk_iptables 80 "Já está aberta!" | |
375 | + Ex 3.: f_chk_iptables 80 "Já está aberta!" 0 "ACCEPT" "tcp" "NEW" | |
376 | + Ex 4.: f_chk_iptables 80 "Já está aberta!" 0 "ACCEPT" "tcp" "NEW" 5 | |
377 | + | |
378 | + Args: | |
379 | + PORT_P (int): Porta a ser verificada. | |
380 | + MSG_P (Optional[str]): Mensagem a ser exibida em caso de | |
381 | + verdadeiro para a verificação (normalmente porta aberta). Se vazio | |
382 | + ou não informado não será exibida mensagem. | |
383 | + SKIP_MSG_P (Optional[int]): Não exibir mensagem. | |
384 | + Padrão 0. | |
385 | + TARGET_P (Optional[str]): Padrão "ACCEPT". | |
386 | + PROT_P (Optional[str]): Padrão "tcp". | |
387 | + STATE_P (str): Padrão "". | |
388 | + POS_IN_CHAIN_P (int): Padrão "". | |
389 | + | |
390 | + Returns: | |
391 | + F_CHK_IPTABLES_R (int): 1 - Verdadeiro para a verificação; | |
392 | + 0 - Falso para a verificação. | |
393 | + ' | |
394 | + | |
395 | + PORT_P=$1 | |
396 | + MSG_P=$2 | |
397 | + SKIP_MSG_P=$3 | |
398 | + | |
399 | + if [ -z "$SKIP_MSG_P" ] ; then | |
400 | + SKIP_MSG_P=0 | |
401 | + fi | |
402 | + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then | |
403 | + SKIP_MSG_P=1 | |
404 | + fi | |
405 | + | |
406 | + TARGET_P=$4 | |
407 | + if [ -z "$TARGET_P" ] ; then | |
408 | + TARGET_P="ACCEPT" | |
409 | + fi | |
410 | + PROT_P=$5 | |
411 | + if [ -z "$PROT_P" ] ; then | |
412 | + PROT_P="tcp" | |
413 | + fi | |
414 | + STATE_P=$6 | |
415 | + if [ -z "$STATE_P" ] ; then | |
416 | + STATE_P="" | |
417 | + else | |
418 | + STATE_P="state $STATE_P " | |
419 | + fi | |
420 | + POS_IN_CHAIN_P=$7 | |
421 | + if [ -z "$POS_IN_CHAIN_P" ] ; then | |
422 | + POS_IN_CHAIN_P="" | |
423 | + else | |
424 | + POS_IN_CHAIN_P=$(printf "%-9s" $POS_IN_CHAIN_P) | |
425 | + fi | |
426 | + GREP_OUT=$(iptables -vnL --line-numbers | grep "$POS_IN_CHAIN_P" | grep "$TARGET_P" | grep "$PROT_P" | grep "$STATE_P$PROT_P dpt:$PORT_P") | |
427 | + if [ $? -eq 1 ] ; then | |
428 | + F_CHK_IPTABLES_R=1 | |
429 | + else | |
430 | + if [ ${SKIP_MSG_P} -eq 0 ] && [ ! -z "$MSG_P" ] ; then | |
431 | + f_div_section | |
432 | + echo "$MSG_P" | |
433 | + f_div_section | |
434 | + f_enter_to_cont | |
435 | + fi | |
436 | + F_CHK_IPTABLES_R=0 | |
437 | + fi | |
438 | +} | |
439 | + | |
440 | +F_IS_NOT_RUNNING_R=0 | |
441 | +f_is_not_running() { | |
442 | + : 'Checar de determinado processo (pode ser um serviço) está | |
443 | + rodando. | |
444 | + | |
445 | + Args: | |
446 | + PROC_NM_P (str): Nome do processo (pode ser um serviço). | |
447 | + COND_MSG_P (Optional[str]): Mensagem a ser exibida se | |
448 | + verdadeira a verificação. Se vazio ou não informado não será | |
449 | + exibida mensagem. | |
450 | + CHK_INVERT (Optional[int]): Inverter a lógica da checagem. | |
451 | + Padrão 0. | |
452 | + | |
453 | + Returns: | |
454 | + F_IS_NOT_RUNNING_R (int): 1 - Se verdadeiro para a condição | |
455 | + analisada; 0 - Se falso para a condição analisada. | |
456 | + ' | |
457 | + | |
458 | + PROC_NM_P=$1 | |
459 | + COND_MSG_P=$2 | |
460 | + CHK_INVERT=$3 | |
461 | + if [ -z "$CHK_INVERT" ] ; then | |
462 | + CHK_INVERT=0 | |
463 | + fi | |
464 | + F_IS_NOT_RUNNING_R=0 | |
465 | + # NOTE: A verificação "grep -v grep" é para que ele não dê positivo | |
466 | + # para o próprio comando grep! By Questor | |
467 | + F_IS_NOT_RUNNING_R=0 | |
468 | + if [ ${CHK_INVERT} -eq 0 ] ; then | |
469 | + if ! ps aux | grep -v "grep" | grep "$PROC_NM_P" > /dev/null ; then | |
470 | + F_IS_NOT_RUNNING_R=1 | |
471 | + fi | |
472 | + else | |
473 | + if ps aux | grep -v "grep" | grep "$PROC_NM_P" > /dev/null ; then | |
474 | + F_IS_NOT_RUNNING_R=1 | |
475 | + fi | |
476 | + fi | |
477 | + if [ ${EZ_I_SKIP_ON_V} -eq 0 ] && [ ${F_IS_NOT_RUNNING_R} -eq 1 ] && [ ! -z "$COND_MSG_P" ] ; then | |
478 | + f_div_section | |
479 | + echo "$COND_MSG_P" | |
480 | + f_div_section | |
481 | + f_enter_to_cont | |
482 | + fi | |
483 | +} | |
484 | + | |
485 | +F_GET_STDERR_R="" | |
486 | +F_GET_STDOUT_R="" | |
487 | +f_get_stderr_stdout() { | |
488 | + : 'Executar um comando e colocar a saída de stderr e stdout nas | |
489 | + variáveis "F_GET_STDERR_R" e "F_GET_STDOUT_R"!. | |
490 | + | |
491 | + Args: | |
492 | + CMD_TO_EXEC (str): Comando a ser executado. | |
493 | + | |
494 | + Returns: | |
495 | + F_GET_STDERR_R (str): Saída para stderr. | |
496 | + F_GET_STDOUT_R (str): Saída para stdout. | |
497 | + ' | |
498 | + | |
499 | + CMD_TO_EXEC=$1 | |
500 | + F_GET_STDERR_R="" | |
501 | + F_GET_STDOUT_R="" | |
502 | + unset t_std t_err | |
503 | + eval "$( eval "$CMD_TO_EXEC" 2> >(t_err=$(cat); typeset -p t_err) > >(t_std=$(cat); typeset -p t_std) )" | |
504 | + F_GET_STDERR_R=$t_err | |
505 | + F_GET_STDOUT_R=$t_std | |
506 | +} | |
507 | + | |
508 | +F_BAK_PATH_R="" | |
509 | +F_BAK_MD_R=0 | |
510 | +f_ez_mv_bak() { | |
511 | + : 'Modifica o nome de um arquivo ou pasta para um nome de backup. | |
512 | + | |
513 | + Adiciona um sufixo ao nome no formato: "-D%Y-%m-%d-T%H-%M-%S.bak". | |
514 | + | |
515 | + Args: | |
516 | + TARGET (str): Caminho para o arquivo ou pasta alvo. | |
517 | + CONF_MSG_P (Optional[str]): Verificar se o usuário deseja ou | |
518 | + não backup. Se vazio ou não informado não será exibida mensagem. | |
519 | + SKIP_MSG_P (Optional[int]): Não exibir mensagem. Padrão 0. | |
520 | + | |
521 | + Returns: | |
522 | + F_BAK_PATH_R (str): Caminho para o arquivo ou pasta alvo com o | |
523 | + novo nome. | |
524 | + F_BAK_NAME_R (str): Nome do arquivo recém criado. | |
525 | + F_BAK_MD_R (int): 1 - Backup realizado; 0 - Backup não | |
526 | + realizado. | |
527 | + ' | |
528 | + | |
529 | + TARGET=$1 | |
530 | + CONF_MSG_P=$2 | |
531 | + SKIP_MSG_P=$3 | |
532 | + if [ -z "$SKIP_MSG_P" ] ; then | |
533 | + SKIP_MSG_P=0 | |
534 | + fi | |
535 | + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then | |
536 | + SKIP_MSG_P=1 | |
537 | + fi | |
538 | + | |
539 | + | |
540 | + MK_BAK=1 | |
541 | + F_BAK_PATH_R="" | |
542 | + F_BAK_NAME_R="" | |
543 | + F_BAK_MD_R=0 | |
544 | + | |
545 | + if [ ${SKIP_MSG_P} -eq 0 ] && [ ! -z "$CONF_MSG_P" ] ; then | |
546 | + f_div_section | |
547 | + f_yes_no "$CONF_MSG_P" | |
548 | + f_div_section | |
549 | + MK_BAK=$YES_NO_R | |
550 | + fi | |
551 | + if [ ${MK_BAK} -eq 1 ] ; then | |
552 | + SUFFIX=$(date +"-D%Y-%m-%d-T%H-%M-%S.bak") | |
553 | + NEW_NAME="$TARGET$SUFFIX" | |
554 | + mv "$TARGET" "$NEW_NAME" | |
555 | + F_BAK_PATH_R=$NEW_NAME | |
556 | + F_BAK_NAME_R="${NEW_NAME##*/}" | |
557 | + F_BAK_MD_R=1 | |
558 | + fi | |
559 | +} | |
560 | + | |
561 | +f_error_exit() { | |
562 | + : '"Printa" uma mensagem de erro e encerra o instalador. | |
563 | + | |
564 | + Args: | |
565 | + ERROR_CAUSE_P (Optional[str]): Causa do erro. | |
566 | + ' | |
567 | + | |
568 | + ERROR_CAUSE_P=$1 | |
569 | + echo | |
570 | + f_open_section "E R R O R !" | |
571 | + ERROR_MSG_NOW_P="AN ERROR OCCURRED AND THIS INSTALLER WAS CLOSED!" | |
572 | + if [ ! -z "$ERROR_CAUSE_P" ] ; then | |
573 | + ERROR_MSG_NOW_P="$ERROR_MSG_NOW_P ERROR: \"$ERROR_CAUSE_P\"" | |
574 | + fi | |
575 | + echo "$ERROR_MSG_NOW_P" | |
576 | + echo | |
577 | + f_close_section | |
578 | + exit 1 | |
579 | +} | |
580 | + | |
581 | +f_continue() { | |
582 | + : 'Questionar ao usuário se deseja continuar ou parar a instalação. | |
583 | + | |
584 | + Args: | |
585 | + NOTE_P (Optional[str]): Informações adicionais ao usuário. | |
586 | + ' | |
587 | + | |
588 | + NOTE_P=$1 | |
589 | + f_div_section | |
590 | + if [ -z "$NOTE_P" ] ; then | |
591 | + NOTE_P="" | |
592 | + else | |
593 | + NOTE_P=" (NOTE: \"$NOTE_P\")" | |
594 | + fi | |
595 | + | |
596 | + f_yes_no "CONTINUE? (USE \"n\" TO STOP THIS INSTALLER)$NOTE_P" | |
597 | + f_div_section | |
598 | + if [ ${YES_NO_R} -eq 0 ] ; then | |
599 | + exit 0 | |
600 | + fi | |
601 | +} | |
602 | + | |
603 | + | |
604 | +# < -------------------------------------------------------------------------- | |
605 | + | |
606 | +# > -------------------------------------------------------------------------- | |
607 | +# GRAFICO! | |
608 | +# -------------------------------------- | |
609 | + | |
610 | +f_indent() { | |
611 | + : 'Definir uma tabulação para uma string informada. | |
612 | + | |
613 | + Exemplo de uso: echo "<STR_VALUE>" | f_indent 4 | |
614 | + | |
615 | + Args: | |
616 | + LEVEL_P (int): 2, 4 ou 8 espaços. | |
617 | + ' | |
618 | + | |
619 | + LEVEL_P=$1 | |
620 | + if [ ${LEVEL_P} -eq 2 ] ; then | |
621 | + sed 's/^/ /'; | |
622 | + fi | |
623 | + if [ ${LEVEL_P} -eq 4 ] ; then | |
624 | + sed 's/^/ /'; | |
625 | + fi | |
626 | + if [ ${LEVEL_P} -eq 8 ] ; then | |
627 | + sed 's/^/ /'; | |
628 | + fi | |
629 | +} | |
630 | + | |
631 | +f_open_section() { | |
632 | + : 'Printar abertura de uma seção.' | |
633 | + | |
634 | + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then | |
635 | + return 0 | |
636 | + fi | |
637 | + TITLE_P=$1 | |
638 | + echo "> ------------------------------------------------" | |
639 | + if [ -n "$TITLE_P" ] ; then | |
640 | + echo "$TITLE_P" | |
641 | + f_div_section | |
642 | + echo | |
643 | + fi | |
644 | +} | |
645 | + | |
646 | +f_close_section() { | |
647 | + : 'Printar fechamento de uma seção.' | |
648 | + | |
649 | + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then | |
650 | + return 0 | |
651 | + fi | |
652 | + echo "< ------------------------------------------------" | |
653 | + echo | |
654 | +} | |
655 | + | |
656 | +f_div_section() { | |
657 | + : 'Printar divisão em uma seção.' | |
658 | + | |
659 | + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then | |
660 | + return 0 | |
661 | + fi | |
662 | + echo "----------------------------------" | |
663 | +} | |
664 | + | |
665 | +f_sub_section() { | |
666 | + : 'Printar uma subseção. | |
667 | + | |
668 | + Args: | |
669 | + TITLE_P (str): Título da subseção. | |
670 | + TEXT_P (str): Texto da subseção. | |
671 | + ' | |
672 | + | |
673 | + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then | |
674 | + return 0 | |
675 | + fi | |
676 | + TITLE_P=$1 | |
677 | + TEXT_P=$2 | |
678 | + echo "> $TITLE_P" | f_indent 2 | |
679 | + echo | |
680 | + echo "$TEXT_P" | f_indent 4 | |
681 | + echo | |
682 | +} | |
683 | + | |
684 | +# < -------------------------------------------------------------------------- | |
685 | + | |
686 | +# > -------------------------------------------------------------------------- | |
687 | +# APRESENTAÇÃO! | |
688 | +# -------------------------------------- | |
689 | + | |
690 | +f_begin() { | |
691 | + : 'Printar uma abertura/apresentação para o instalador do produto. | |
692 | + | |
693 | + Usar no início da instalação. | |
694 | + | |
695 | + Args: | |
696 | + TITLE_P (str): Título. | |
697 | + VERSION_P (str): Versão do produto. | |
698 | + ABOUT_P (str): Sobre o produto. | |
699 | + WARNINGS_P (str): Avisos antes de continuar. | |
700 | + COMPANY_P (str): Informações sobre a empresa. | |
701 | + ' | |
702 | + | |
703 | + clear | |
704 | + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then | |
705 | + return 0 | |
706 | + fi | |
707 | + TITLE_P=$1 | |
708 | + VERSION_P=$2 | |
709 | + ABOUT_P=$3 | |
710 | + WARNINGS_P=$4 | |
711 | + COMPANY_P=$5 | |
712 | + f_open_section "$TITLE_P ($VERSION_P)" | |
713 | + f_sub_section "ABOUT:" "$ABOUT_P" | |
714 | + f_sub_section "WARNINGS:" "$WARNINGS_P" | |
715 | + f_div_section | |
716 | + echo "$COMPANY_P" | |
717 | + f_close_section | |
718 | + f_enter_to_cont | |
719 | + clear | |
720 | +} | |
721 | + | |
722 | +f_end() { | |
723 | + : 'Printar uma fechamento/encerramento para o instalador do produto. | |
724 | + | |
725 | + Usar no final da instalação. | |
726 | + | |
727 | + Args: | |
728 | + TITLE_P (str): Título. | |
729 | + USEFUL_INFO_P (str): Informações úteis (uso básico etc...). | |
730 | + ' | |
731 | + | |
732 | + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then | |
733 | + return 0 | |
734 | + fi | |
735 | + TITLE_P=$1 | |
736 | + USEFUL_INFO_P=$2 | |
737 | + f_open_section "$TITLE_P" | |
738 | + f_sub_section "USEFUL INFORMATION:" "$USEFUL_INFO_P" | |
739 | + f_close_section | |
740 | +} | |
741 | + | |
742 | +f_terms_licen() { | |
743 | + : 'Printar os termos de licença/uso do produto. | |
744 | + | |
745 | + Pede que o usuário concorde com os termos. | |
746 | + | |
747 | + Args: | |
748 | + TERMS_LICEN_P (str): Termos de licença/uso do produto. | |
749 | + ' | |
750 | + | |
751 | + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then | |
752 | + return 0 | |
753 | + fi | |
754 | + TERMS_LICEN_P=$1 | |
755 | + f_open_section "LICENSE/TERMS:" | |
756 | + echo "$TERMS_LICEN_P" | f_indent 2 | |
757 | + echo | |
758 | + f_div_section | |
759 | + TITLE_F="BY ANSWERING YES (y) YOU WILL AGREE WITH TERMS AND CONDITIONS "\ | |
760 | +"PRESENTED! PROCEED?" | |
761 | + f_yes_no "$TITLE_F" | |
762 | + TITLE_F="" | |
763 | + f_close_section | |
764 | + sleep 1 | |
765 | + if [ ${YES_NO_R} -eq 0 ] ; then | |
766 | + exit 0 | |
767 | + fi | |
768 | + clear | |
769 | +} | |
770 | + | |
771 | +f_instruct() { | |
772 | + : 'Printar instruções sobre o produto. | |
773 | + | |
774 | + Args: | |
775 | + INSTRUCT_P (str): Instruções sobre o produto. | |
776 | + ' | |
777 | + | |
778 | + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then | |
779 | + return 0 | |
780 | + fi | |
781 | + INSTRUCT_P=$1 | |
782 | + f_open_section "INSTRUCTIONS:" | |
783 | + echo "$INSTRUCT_P" | f_indent 2 | |
784 | + echo | |
785 | + f_close_section | |
786 | + f_enter_to_cont | |
787 | + clear | |
788 | +} | |
789 | + | |
790 | +# < -------------------------------------------------------------------------- | |
791 | + | |
792 | +# > -------------------------------------------------------------------------- | |
793 | +# ESQUEMAS CONDICIONAIS! | |
794 | +# -------------------------------------- | |
795 | + | |
796 | +YES_NO_R=0 | |
797 | +f_yes_no() { | |
798 | + : 'Questiona ao usuário "yes" ou "no" sobre determinado algo. | |
799 | + | |
800 | + Args: | |
801 | + QUESTION_P (str): Questionamento a ser feito. | |
802 | + | |
803 | + Returns: | |
804 | + YES_NO_R (int): 1 - Yes; 0 - No. | |
805 | + ' | |
806 | + | |
807 | + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then | |
808 | + return 0 | |
809 | + fi | |
810 | + QUESTION_P=$1 | |
811 | + YES_NO_R=0 | |
812 | + read -r -p "$QUESTION_P (y/n) " RESP_V | |
813 | + if [[ $RESP_V =~ ^([sS]|[yY])$ ]] ; then | |
814 | + YES_NO_R=1 | |
815 | + elif [[ $RESP_V =~ ^([nN])$ ]] ; then | |
816 | + echo "NO!" | |
817 | + YES_NO_R=0 | |
818 | + else | |
819 | + f_yes_no "$QUESTION_P" | |
820 | + fi | |
821 | +} | |
822 | + | |
823 | +# < -------------------------------------------------------------------------- | ... | ... |
1 | +++ a/install.sh | |
... | ... | @@ -0,0 +1,480 @@ |
1 | +#!/bin/bash | |
2 | + | |
3 | +# NOTE: Evita problemas com caminhos relativos! By Questor | |
4 | +SCRIPTDIR_V="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" | |
5 | +. $SCRIPTDIR_V/ez_i.sh | |
6 | + | |
7 | +# > -------------------------------------------------------------------------- | |
8 | +# INÍCIO! | |
9 | +# -------------------------------------- | |
10 | + | |
11 | +read -d '' TITLE_F <<"EOF" | |
12 | +LBC - LBConverter Installer | |
13 | +EOF | |
14 | + | |
15 | +read -d '' VERSION_F <<"EOF" | |
16 | +1.0.0.0 | |
17 | +EOF | |
18 | + | |
19 | +read -d '' ABOUT_F <<"EOF" | |
20 | +This script will install LBC - LBConverter the LightBase OCR (Optical Character | |
21 | +Recognition)/data extractor component that obtain data from submitted files! | |
22 | + | |
23 | +Have fun! =D | |
24 | +EOF | |
25 | + | |
26 | +read -d '' WARNINGS_F <<"EOF" | |
27 | +- Installer designed for CentOS 6 AMD64/RHEL 6 AMD64! | |
28 | + | |
29 | +- We RECOMMEND you... | |
30 | + Install all the components (answer yes to everything). Except | |
31 | + contrary guidance! | |
32 | + Check for previous installations! If there is previous | |
33 | + installations consider this variant in the process! | |
34 | +- We WARNING you... | |
35 | + USE AT YOUR OWN RISK: WE ARE NOT RESPONSIBLE FOR ANY DAMAGE TO | |
36 | +YOURSELF, HARDWARE, OR CO-WORKERS. EXCEPT IN CASES WHERE THERE ARE | |
37 | +SIGNED CONTRACT THAT REGULATES THIS! | |
38 | +EOF | |
39 | + | |
40 | +read -d '' COMPANY_F <<"EOF" | |
41 | +BR Light LTDA - LightBase Consulting in Public Software/LightBase Consultoria em Software Público | |
42 | +Free Software + Our Ideas = Best Solution!/Software Livre + Nossas Idéias = Melhor Solução! | |
43 | ++55-61-3347-1949 - http://www.LightBase.com.br - Brasil-DF | |
44 | +EOF | |
45 | + | |
46 | +f_begin "$TITLE_F" "$VERSION_F" "$ABOUT_F" "$WARNINGS_F" "$COMPANY_F" | |
47 | +ABOUT_F="" | |
48 | +WARNINGS_F="" | |
49 | + | |
50 | +# < -------------------------------------------------------------------------- | |
51 | + | |
52 | +# > -------------------------------------------------------------------------- | |
53 | +# TERMOS E LICENÇA! | |
54 | +# -------------------------------------- | |
55 | + | |
56 | +read -d '' TERMS_LICEN_F <<"EOF" | |
57 | +BY USING THIS INSTALLER YOU ARE AGREEING TO THE TERMS OF USE OF ALL INVOLVED SOFTWARE! | |
58 | +EOF | |
59 | + | |
60 | +f_terms_licen "$TERMS_LICEN_F" | |
61 | +TERMS_LICEN_F="" | |
62 | + | |
63 | +# < -------------------------------------------------------------------------- | |
64 | + | |
65 | +# > -------------------------------------------------------------------------- | |
66 | +# INTRUÇÕES! | |
67 | +# -------------------------------------- | |
68 | + | |
69 | +read -d '' INSTRUCT_F <<"EOF" | |
70 | +- To run this script YOU NEED to be root! | |
71 | + | |
72 | +- TO CANCEL installation at any time use Ctrl+c! | |
73 | +EOF | |
74 | + | |
75 | +f_instruct "$INSTRUCT_F" | |
76 | +INSTRUCT_F="" | |
77 | + | |
78 | +# < -------------------------------------------------------------------------- | |
79 | + | |
80 | +# > ----------------------------------------- | |
81 | +# Dá ao usuário mais avançado a possibilideade de usar o instalador | |
82 | +# simplificado! | |
83 | + | |
84 | +# NOTE: É possível forçar o processo de instalção simplificado setando | |
85 | +# "SIMPLE_INST" com 1! By Questor | |
86 | +SIMPLE_INST=0 | |
87 | +if [ ${SIMPLE_INST} -eq 0 ] ; then | |
88 | + f_open_section | |
89 | + f_yes_no "Use simple install (using a default value for most of the options)?" | |
90 | + if [ ${YES_NO_R} -eq 1 ] ; then | |
91 | + | |
92 | + # NOTE: Essa variável serve apenas para "preservar" o valor | |
93 | + # setado pelo usuário sendo somente "leitura". A variável a | |
94 | + # ser usada nas regras deve ser "EZ_I_SKIP_ON_V" (ez_i.sh)! Essa | |
95 | + # estratégia serve para mudarmos o comportamento do "ez_i.sh" | |
96 | + # de acordo com as circunstâncias! By Questor | |
97 | + SIMPLE_INST=1 | |
98 | + | |
99 | + # NOTE: Essa variável é para consumo do "ez_i.sh", para que ele | |
100 | + # não execute algumas funções e simplifique o processo de | |
101 | + # instalação! By Questor | |
102 | + EZ_I_SKIP_ON_V=1 | |
103 | + fi | |
104 | + f_close_section | |
105 | + sleep 1 | |
106 | +fi | |
107 | + | |
108 | +# < ----------------------------------------- | |
109 | + | |
110 | +# > ----------------------------------------- | |
111 | +# Garantir o encodamento correto para evitar problemas de | |
112 | +# compatibilidade! | |
113 | + | |
114 | +EZ_I_SKIP_ON_V=$SIMPLE_INST | |
115 | +f_open_section | |
116 | +read -d '' TITLE_F <<"EOF" | |
117 | +Set terminal encode? (recommended for Windows terminal clients) | |
118 | +EOF | |
119 | + | |
120 | +f_yes_no "$TITLE_F" | |
121 | +TITLE_F="" | |
122 | +if [ ${EZ_I_SKIP_ON_V} -eq 1 ] || [ ${YES_NO_R} -eq 1 ] ; then | |
123 | + export LANG=pt_BR.utf8 | |
124 | +fi | |
125 | +f_close_section | |
126 | + | |
127 | +# < ----------------------------------------- | |
128 | + | |
129 | +# > ----------------------------------------- | |
130 | +# Desabilita o SElinux! | |
131 | + | |
132 | +EZ_I_SKIP_ON_V=0 | |
133 | +f_open_section | |
134 | +read -d '' TITLE_F <<"EOF" | |
135 | +Disable SElinux (use "y" if you never did it)? | |
136 | +EOF | |
137 | + | |
138 | +f_yes_no "$TITLE_F" | |
139 | +TITLE_F="" | |
140 | +if [ ${YES_NO_R} -eq 1 ] ; then | |
141 | + setenforce 0 | |
142 | + | |
143 | + # NOTE: As condições abaixo visam evitar que o arquivo seja | |
144 | + # desnecessariamente e erroneamente modificado! By Questor | |
145 | + EZ_I_SKIP_ON_V=$SIMPLE_INST | |
146 | + f_fl_cont_str "# SELINUX=enforcing" "/etc/sysconfig/selinux" "The file \"/etc/sysconfig/selinux\" probably has already been changed! Check it!" | |
147 | + EZ_I_SKIP_ON_V=0 | |
148 | + if [ ${FL_CONT_STR_R} -eq 0 ] ; then | |
149 | + f_fl_cont_str "SELINUX=disabled" "/etc/sysconfig/selinux" | |
150 | + if [ ${FL_CONT_STR_R} -eq 0 ] ; then | |
151 | + f_ez_sed "SELINUX=enforcing" "# SELINUX=enforcing\nSELINUX=disabled" "/etc/sysconfig/selinux" | |
152 | + fi | |
153 | + fi | |
154 | +fi | |
155 | +f_close_section | |
156 | + | |
157 | +# < ----------------------------------------- | |
158 | + | |
159 | +BASE_INST_DIR_V="/usr/local/lb" | |
160 | +# > ----------------------------------------- | |
161 | +# Criar o diretório base da instalação! | |
162 | + | |
163 | +EZ_I_SKIP_ON_V=$SIMPLE_INST | |
164 | +f_open_section | |
165 | +QUESTION_F="Insert where the base installation directory (\"lb\") will be created (don't use \"/\" at the end). | |
166 | +Use empty for \"/usr/local\"!" | |
167 | + | |
168 | +f_get_usr_input "$QUESTION_F" 1 | |
169 | +QUESTION_F="" | |
170 | +if [ ${EZ_I_SKIP_ON_V} -eq 1 ] || [ -z "$GET_USR_INPUT_R" ] ; then | |
171 | + f_chk_by_path_hlp "$BASE_INST_DIR_V" "d" "\"$BASE_INST_DIR_V\" directory already created!" | |
172 | + if [ ${F_CHK_BY_PATH_HLP_R} -eq 0 ] ; then | |
173 | + mkdir -p "$BASE_INST_DIR_V" | |
174 | + fi | |
175 | +else | |
176 | + BASE_INST_DIR_V="$GET_USR_INPUT_R/lb" | |
177 | + f_chk_by_path_hlp "$BASE_INST_DIR_V" "d" "\"$BASE_INST_DIR_V\" directory already created!" | |
178 | + if [ ${F_CHK_BY_PATH_HLP_R} -eq 0 ] ; then | |
179 | + mkdir -p "$BASE_INST_DIR_V" | |
180 | + fi | |
181 | +fi | |
182 | +f_close_section | |
183 | + | |
184 | +# < ----------------------------------------- | |
185 | + | |
186 | +# > ----------------------------------------- | |
187 | +# Instalar o virtualenv-1.11.6 no python2.6! | |
188 | + | |
189 | +EZ_I_SKIP_ON_V=$SIMPLE_INST | |
190 | +f_open_section | |
191 | +read -d '' TITLE_F <<"EOF" | |
192 | +Install virtualenv-1.11.6 on python2.6? | |
193 | +EOF | |
194 | + | |
195 | +f_yes_no "$TITLE_F" | |
196 | +TITLE_F="" | |
197 | +if [ ${EZ_I_SKIP_ON_V} -eq 1 ] || [ ${YES_NO_R} -eq 1 ] ; then | |
198 | + f_chk_by_path_hlp "/usr/bin/virtualenv-2.6" "f" "virtualenv-1.11.6 already installed!" | |
199 | + if [ ${F_CHK_BY_PATH_HLP_R} -eq 0 ] ; then | |
200 | + cd "$SCRIPTDIR_V" | |
201 | + cd ./other-srcs-n-apps | |
202 | + tar -zxvf virtualenv-1.11.6.tar.gz | |
203 | + cd virtualenv-1.11.6 | |
204 | + python2.6 setup.py install | |
205 | + cd .. | |
206 | + rm -rf virtualenv-1.11.6 | |
207 | + fi | |
208 | +fi | |
209 | +f_close_section | |
210 | + | |
211 | +# < ----------------------------------------- | |
212 | + | |
213 | +# > ----------------------------------------- | |
214 | +# Criar o ambiente virtual (python2.6)! | |
215 | + | |
216 | +EZ_I_SKIP_ON_V=$SIMPLE_INST | |
217 | +f_open_section | |
218 | +f_enter_to_cont "Create the virtual environment (python2.6)!" | |
219 | + | |
220 | +f_chk_by_path_hlp "$BASE_INST_DIR_V/ve26" "d" "Virtual environment (python2.6) already created in \"$BASE_INST_DIR_V/ve26\"!" | |
221 | +if [ ${F_CHK_BY_PATH_HLP_R} -eq 0 ] ; then | |
222 | + cd "$BASE_INST_DIR_V" | |
223 | + virtualenv-2.6 ve26 | |
224 | + mkdir "$BASE_INST_DIR_V/ve26/src" | |
225 | + f_enter_to_cont "Virtual environment created in \"$BASE_INST_DIR_V/ve26\"!" | |
226 | +fi | |
227 | +f_close_section | |
228 | + | |
229 | +# < ----------------------------------------- | |
230 | + | |
231 | +# > ----------------------------------------- | |
232 | +# Instalar o catdoc, unzip e ImageMagick para o LBConverter! | |
233 | + | |
234 | +EZ_I_SKIP_ON_V=$SIMPLE_INST | |
235 | +f_open_section | |
236 | +f_yes_no "Install catdoc, unzip and ImageMagick?" | |
237 | +TITLE_F="" | |
238 | +if [ ${EZ_I_SKIP_ON_V} -eq 1 ] || [ ${YES_NO_R} -eq 1 ] ; then | |
239 | + | |
240 | + UP_CATDOC=1 | |
241 | + f_chk_by_path_hlp "$BASE_INST_DIR_V/ve26/lib/catdoc-0.94.2" "d" "catdoc-0.94.2 already installed in \"$BASE_INST_DIR_V/ve26/lib/catdoc-0.94.2\"!" | |
242 | + if [ ${F_CHK_BY_PATH_HLP_R} -eq 1 ] ; then | |
243 | + if [ ${EZ_I_SKIP_ON_V} -eq 0 ] ; then | |
244 | + f_div_section | |
245 | + f_yes_no "Update/reinstall catdoc-0.94.2? (\"y\" recommended)" | |
246 | + f_div_section | |
247 | + UP_CATDOC=$YES_NO_R | |
248 | + if [ ${UP_CATDOC} -eq 1 ] ; then | |
249 | + rm -rf "$BASE_INST_DIR_V/ve26/lib/catdoc-0.94.2" | |
250 | + fi | |
251 | + fi | |
252 | + fi | |
253 | + if [ ${UP_CATDOC} -eq 1 ] ; then | |
254 | + | |
255 | + f_pack_is_inst "gcc-c++" "yum" "\"gcc-c++\" already installed!" | |
256 | + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then | |
257 | + yum -y install gcc-c++ | |
258 | + fi | |
259 | + f_pack_is_inst "unzip" "yum" "\"unzip\" already installed!" | |
260 | + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then | |
261 | + yum -y install unzip | |
262 | + fi | |
263 | + f_pack_is_inst "ImageMagick" "yum" "\"ImageMagick\" already installed!" | |
264 | + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then | |
265 | + yum -y install ImageMagick | |
266 | + fi | |
267 | + | |
268 | + cd "$SCRIPTDIR_V" | |
269 | + cd ./other-srcs-n-apps | |
270 | + tar -zxvf catdoc-0.94.2.tar.gz | |
271 | + mv ./catdoc-0.94.2 $BASE_INST_DIR_V/ve26/lib | |
272 | + cd $BASE_INST_DIR_V/ve26/lib/catdoc-0.94.2 | |
273 | + ./configure | |
274 | + make && make install | |
275 | + fi | |
276 | +fi | |
277 | +f_close_section | |
278 | + | |
279 | +# < ----------------------------------------- | |
280 | + | |
281 | +# > ----------------------------------------- | |
282 | +# Instalar o tesseract-ocr-3.02.02! | |
283 | + | |
284 | +EZ_I_SKIP_ON_V=$SIMPLE_INST | |
285 | +f_open_section | |
286 | +f_yes_no "Install tesseract-ocr-3.02.02?" | |
287 | +TITLE_F="" | |
288 | +if [ ${EZ_I_SKIP_ON_V} -eq 1 ] || [ ${YES_NO_R} -eq 1 ] ; then | |
289 | + | |
290 | + UP_TESSERACT_OCR=1 | |
291 | + f_chk_by_path_hlp "/usr/local/lib/tesseract-ocr" "d" "tesseract-ocr-3.02.02 already installed in \"/usr/local/lib/tesseract-ocr\"!" | |
292 | + if [ ${F_CHK_BY_PATH_HLP_R} -eq 1 ] ; then | |
293 | + if [ ${EZ_I_SKIP_ON_V} -eq 0 ] ; then | |
294 | + f_div_section | |
295 | + f_yes_no "Update/reinstall tesseract-ocr-3.02.02? (\"y\" recommended)" | |
296 | + f_div_section | |
297 | + UP_TESSERACT_OCR=$YES_NO_R | |
298 | + fi | |
299 | + fi | |
300 | + if [ ${UP_TESSERACT_OCR} -eq 1 ] ; then | |
301 | + f_pack_is_inst "libpng-devel" "yum" "\"libpng-devel\" already installed!" | |
302 | + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then | |
303 | + yum -y install libpng-devel | |
304 | + fi | |
305 | + f_pack_is_inst "libjpeg-turbo-devel" "yum" "\"libjpeg-devel\" already installed!" | |
306 | + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then | |
307 | + yum -y install libjpeg-devel | |
308 | + fi | |
309 | + f_pack_is_inst "libtiff-devel" "yum" "\"libtiff-devel\" already installed!" | |
310 | + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then | |
311 | + yum -y install libtiff-devel | |
312 | + fi | |
313 | + f_pack_is_inst "libtool" "yum" "\"libtool\" already installed!" | |
314 | + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then | |
315 | + yum -y install libtool | |
316 | + fi | |
317 | + f_pack_is_inst "automake" "yum" "\"automake\" already installed!" | |
318 | + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then | |
319 | + yum -y install automake | |
320 | + fi | |
321 | + f_pack_is_inst "autoconf" "yum" "\"autoconf\" already installed!" | |
322 | + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then | |
323 | + yum -y install autoconf | |
324 | + fi | |
325 | + | |
326 | + cd "$SCRIPTDIR_V" | |
327 | + cd ./other-srcs-n-apps | |
328 | + | |
329 | + tar -zxvf leptonica-1.71.tar.gz | |
330 | + mv ./leptonica-1.71 /usr/local/lib | |
331 | + cd /usr/local/lib/leptonica-1.71 | |
332 | + ./configure | |
333 | + make && make install | |
334 | + | |
335 | + cd "$SCRIPTDIR_V" | |
336 | + cd ./other-srcs-n-apps | |
337 | + | |
338 | + tar -zxvf tesseract-ocr-3.02.02.tar.gz | |
339 | + mv ./tesseract-ocr /usr/local/lib | |
340 | + cd /usr/local/lib/tesseract-ocr | |
341 | + ./autogen.sh | |
342 | + ./configure | |
343 | + make & make install | |
344 | + ldconfig | |
345 | + | |
346 | + cd "$SCRIPTDIR_V" | |
347 | + cd ./other-srcs-n-apps | |
348 | + | |
349 | + tar -zxvf tesseract-ocr-3.01.eng.tar.gz | |
350 | + tar -zxvf tesseract-ocr-3.02.por.tar.gz | |
351 | + mv ./tesseract-ocr /usr/local/lib/tesseract-ocr | |
352 | + cp /usr/local/lib/tesseract-ocr/tesseract-ocr/tessdata/eng.traineddata /usr/local/share/tessdata | |
353 | + export TESSDATA_PREFIX=/usr/local/lib/tesseract-ocr/tesseract-ocr | |
354 | + | |
355 | + fi | |
356 | +fi | |
357 | +f_close_section | |
358 | + | |
359 | +# < ----------------------------------------- | |
360 | + | |
361 | +# > ----------------------------------------- | |
362 | +# Instalar as dependências python2.6 da LBC - LBConverter! | |
363 | + | |
364 | +EZ_I_SKIP_ON_V=$SIMPLE_INST | |
365 | +cd "$SCRIPTDIR_V" | |
366 | +sh py-packs-LBConverter.sh "$EZ_I_SKIP_ON_V" "$BASE_INST_DIR_V" | |
367 | + | |
368 | +# < ----------------------------------------- | |
369 | + | |
370 | +HTTP_PORT_F=6544 | |
371 | +# > ----------------------------------------- | |
372 | +# Instalar e configurar o LBC - LBConverter! | |
373 | + | |
374 | +EZ_I_SKIP_ON_V=$SIMPLE_INST | |
375 | +f_open_section | |
376 | +f_yes_no "Install the LBC - LBConverter?" | |
377 | +TITLE_F="" | |
378 | +if [ ${EZ_I_SKIP_ON_V} -eq 1 ] || [ ${YES_NO_R} -eq 1 ] ; then | |
379 | + | |
380 | + f_chk_by_path_hlp "$BASE_INST_DIR_V/ve26/src/LBConverter" "d" "\"LBConverter\" already installed in \"$BASE_INST_DIR_V/ve26/src\"!" | |
381 | + F_BAK_MD_R=1 | |
382 | + if [ ${F_CHK_BY_PATH_HLP_R} -eq 1 ] ; then | |
383 | + f_ez_mv_bak "$BASE_INST_DIR_V/ve26/src/LBConverter" "Backup old version and update? (\"y\" recommended)" | |
384 | + fi | |
385 | + if [ ${F_BAK_MD_R} -eq 1 ] ; then | |
386 | + | |
387 | + cd "$SCRIPTDIR_V" | |
388 | + tar -zxvf LBConverter.tar.gz | |
389 | + mv "$SCRIPTDIR_V/LBConverter" "$BASE_INST_DIR_V/ve26/src/" | |
390 | + cd "$BASE_INST_DIR_V/ve26/src/LBConverter" | |
391 | + eval "$BASE_INST_DIR_V/ve26/bin/python2.6 setup.py install" | |
392 | + | |
393 | + f_enter_to_cont "Configure LBC - LBConverter!" | |
394 | + \cp "$BASE_INST_DIR_V/ve26/src/LBConverter/lbconverter-dist" "$BASE_INST_DIR_V/ve26/src/LBConverter/lbconverter-prov" | |
395 | + f_ez_sed "<LBCONVERTERMG_PATH>" "$BASE_INST_DIR_V/ve26/src/LBConverter/lbconvertermg" "$BASE_INST_DIR_V/ve26/src/LBConverter/lbconverter-prov" | |
396 | + rm -rf "/etc/init.d/lbconverter" | |
397 | + mv "$BASE_INST_DIR_V/ve26/src/LBConverter/lbconverter-prov" "/etc/init.d/lbconverter" | |
398 | + | |
399 | + chmod 755 -R /etc/init.d/ | |
400 | + cd /etc/init.d/ | |
401 | + chkconfig --level 2345 lbconverter on | |
402 | + | |
403 | + \cp "$BASE_INST_DIR_V/ve26/src/LBConverter/lbconvertermg-dist" "$BASE_INST_DIR_V/ve26/src/LBConverter/lbconvertermg" | |
404 | + f_ez_sed "<VIRTUALENV_PATH>" "$BASE_INST_DIR_V/ve26" "$BASE_INST_DIR_V/ve26/src/LBConverter/lbconvertermg" | |
405 | + | |
406 | + LBG_URL_F="http://127.0.0.1/lbg" | |
407 | + QUESTION_F="Enter the LBG - LBGenerator URL. | |
408 | +Use empty for \"$LBG_URL_F\" (LOCALHOST)!" | |
409 | + | |
410 | + f_get_usr_input "$QUESTION_F" 1 | |
411 | + QUESTION_F="" | |
412 | + if [ -n "$GET_USR_INPUT_R" ] ; then | |
413 | + LBG_URL_F=$GET_USR_INPUT_R | |
414 | + fi | |
415 | + | |
416 | + QUESTION_F="Enter the port number for http service. | |
417 | +Use empty for \"$HTTP_PORT_F\" (recommended)!" | |
418 | + | |
419 | + f_get_usr_input "$QUESTION_F" 1 | |
420 | + QUESTION_F="" | |
421 | + if [ -n "$GET_USR_INPUT_R" ] ; then | |
422 | + HTTP_PORT_F=$GET_USR_INPUT_R | |
423 | + fi | |
424 | + | |
425 | + \cp "$BASE_INST_DIR_V/ve26/src/LBConverter/production.ini-dist" "$BASE_INST_DIR_V/ve26/src/LBConverter/production.ini" | |
426 | + f_ez_sed "<HTTP_SERVICE_PORT_NUM>" "$HTTP_PORT_F" "$BASE_INST_DIR_V/ve26/src/LBConverter/production.ini" | |
427 | + f_ez_sed "<MACHINE_IP_OR_NAME>" "$LBG_URL_F" "$BASE_INST_DIR_V/ve26/src/LBConverter/production.ini" | |
428 | + | |
429 | + service lbconverter restart | |
430 | + fi | |
431 | +fi | |
432 | +f_close_section | |
433 | + | |
434 | +# < ----------------------------------------- | |
435 | + | |
436 | +# > ----------------------------------------- | |
437 | +# Abrir o firewall para o http service! | |
438 | + | |
439 | +EZ_I_SKIP_ON_V=0 | |
440 | +f_open_section | |
441 | +TITLE_F="Open firewall for http service (TCP $HTTP_PORT_F)?" | |
442 | + | |
443 | +f_yes_no "$TITLE_F" | |
444 | +TITLE_F="" | |
445 | +if [ ${YES_NO_R} -eq 1 ]; then | |
446 | + f_chk_iptables ${HTTP_PORT_F} "Port $HTTP_PORT_F is already open!" 0 "ACCEPT" "tcp" "NEW" | |
447 | + if [ ${F_CHK_IPTABLES_R} -eq 1 ] ; then | |
448 | + iptables -I INPUT 6 -p tcp -m state --state NEW -m tcp --dport ${HTTP_PORT_F} -j ACCEPT | |
449 | + service iptables save | |
450 | + service iptables restart | |
451 | + fi | |
452 | +fi | |
453 | +f_close_section | |
454 | + | |
455 | +# < ----------------------------------------- | |
456 | + | |
457 | +# > -------------------------------------------------------------------------- | |
458 | +# FINAL! | |
459 | +# -------------------------------------- | |
460 | + | |
461 | +EZ_I_SKIP_ON_V=0 | |
462 | +read -d '' TITLE_F <<"EOF" | |
463 | +Installer finished! Thanks! | |
464 | +EOF | |
465 | + | |
466 | +USEFUL_INFO_F="To configure... | |
467 | + vi $BASE_INST_DIR_V/ve26/src/LBConverter/production.ini | |
468 | + | |
469 | +To start/stop... | |
470 | + service lbconverter start | |
471 | + service lbconverter stop | |
472 | + | |
473 | +Log... | |
474 | + less /var/log/lbconverter.log" | |
475 | + | |
476 | +f_end "$TITLE_F" "$USEFUL_INFO_F" | |
477 | +TITLE_F="" | |
478 | +USEFUL_INFO_F="" | |
479 | + | |
480 | +# < -------------------------------------------------------------------------- | ... | ... |
No preview for this file type
1 | +++ a/other-srcs-n-apps/lbconverter | |
... | ... | @@ -0,0 +1,48 @@ |
1 | +#!/bin/bash | |
2 | +# chkconfig: 2345 99 01 | |
3 | +# description: Serviço de inicialização do LBConverter | |
4 | +# processname: lbconverter | |
5 | + | |
6 | +cd /usr/local/lbneo/virtenvlb2.6/src/LBConverter | |
7 | +Name=lbconverter | |
8 | +Start="/usr/local/lbneo/virtenvlb2.6/bin/python /usr/local/lbneo/virtenvlb2.6/src/LBConverter/lbconverter/ start" | |
9 | +Stop="/usr/local/lbneo/virtenvlb2.6/bin/python /usr/local/lbneo/virtenvlb2.6/src/LBConverter/lbconverter/ stop" | |
10 | +Pid=$(ps auxf | grep ${Name} | grep -v grep | awk '{print $2}') | |
11 | + | |
12 | +function startProgram(){ | |
13 | + if [ -z "${Pid}" ]; then | |
14 | + echo "${Name} is running" | |
15 | + else | |
16 | + echo "starting ${Name}..." | |
17 | + ${Start} | |
18 | + fi | |
19 | +} | |
20 | + | |
21 | +function stopProgram(){ | |
22 | + if [ -n "$Pid" ]; then | |
23 | + | |
24 | + ${Stop} | |
25 | + else | |
26 | + echo "${Name} not is running" | |
27 | + fi | |
28 | +} | |
29 | + | |
30 | +case "$1" in | |
31 | + start) | |
32 | + startProgram | |
33 | + ;; | |
34 | + stop) | |
35 | + stopProgram | |
36 | + ;; | |
37 | + restart) | |
38 | + stopProgram | |
39 | + startProgram | |
40 | + ;; | |
41 | + *) | |
42 | + N=/etc/init.d/$NAME | |
43 | + echo "Usage: $N {start|stop|restart|force-reload}" >&2 | |
44 | + exit 1 | |
45 | + ;; | |
46 | +esac | |
47 | + | |
48 | +exit 0 | ... | ... |
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
1 | +++ a/py-packs-LBConverter.sh | |
... | ... | @@ -0,0 +1,184 @@ |
1 | +#!/bin/bash | |
2 | + | |
3 | +# Instalação das dependências do LBC - LBConverter no python2.6! | |
4 | + | |
5 | +. ./ez_i.sh | |
6 | + | |
7 | +SKIP_ON_V=$1 | |
8 | +if [ -z "$SKIP_ON_V" ] ; then | |
9 | + SKIP_ON_V=0 | |
10 | +fi | |
11 | + | |
12 | +BASE_INST_DIR_V=$2 | |
13 | + | |
14 | +# > ----------------------------------------- | |
15 | +# Informar o diretório base da instalação! | |
16 | + | |
17 | +if [ -z "$BASE_INST_DIR_V" ] ; then | |
18 | + f_open_section | |
19 | + BASE_INST_DIR_V="/usr/local/lb" | |
20 | + | |
21 | + QUESTION_F="Enter the installation directory. | |
22 | + Use empty for \"$BASE_INST_DIR_V\"!" | |
23 | + | |
24 | + f_get_usr_input "$QUESTION_F" 1 | |
25 | + QUESTION_F="" | |
26 | + if [ -n "$GET_USR_INPUT_R" ] ; then | |
27 | + BASE_INST_DIR_V="$GET_USR_INPUT_R/lb" | |
28 | + fi | |
29 | + f_close_section | |
30 | +fi | |
31 | + | |
32 | +# < ----------------------------------------- | |
33 | + | |
34 | +f_open_section | |
35 | + | |
36 | +TITLE_F="Install LBC - LBConverter dependencies for python2.6?" | |
37 | + | |
38 | +f_yes_no "$TITLE_F" | |
39 | +TITLE_F="" | |
40 | + | |
41 | +if [ ${SKIP_ON_V} -eq 1 ] || [ ${YES_NO_R} -eq 1 ] ; then | |
42 | + | |
43 | + cd "$SCRIPTDIR_V" | |
44 | + cd ./py-packs-LBConverter | |
45 | + | |
46 | + tar -zxvf ./ordereddict-1.1.tar.gz | |
47 | + cd ./ordereddict-1.1 | |
48 | + eval "$BASE_INST_DIR_V/ve26/bin/python2.6 setup.py install" | |
49 | + cd .. | |
50 | + rm -rf ./ordereddict-1.1 | |
51 | + | |
52 | + tar -zxvf ./configparser-3.3.0r2.tar.gz | |
53 | + cd ./configparser-3.3.0r2 | |
54 | + eval "$BASE_INST_DIR_V/ve26/bin/python2.6 setup.py install" | |
55 | + cd .. | |
56 | + rm -rf ./configparser-3.3.0r2 | |
57 | + | |
58 | + tar -zxvf ./pdfminer-20140328.tar.gz | |
59 | + cd ./pdfminer-20140328 | |
60 | + eval "$BASE_INST_DIR_V/ve26/bin/python2.6 setup.py install" | |
61 | + cd .. | |
62 | + rm -rf ./pdfminer-20140328 | |
63 | + | |
64 | + tar -zxvf ./requests-2.3.0.tar.gz | |
65 | + cd ./requests-2.3.0 | |
66 | + eval "$BASE_INST_DIR_V/ve26/bin/python2.6 setup.py install" | |
67 | + cd .. | |
68 | + rm -rf ./requests-2.3.0 | |
69 | + | |
70 | + tar -zxvf ./PasteDeploy-1.5.2.tar.gz | |
71 | + cd ./PasteDeploy-1.5.2 | |
72 | + eval "$BASE_INST_DIR_V/ve26/bin/python2.6 setup.py install" | |
73 | + cd .. | |
74 | + rm -rf ./PasteDeploy-1.5.2 | |
75 | + | |
76 | + tar -zxvf ./venusian-1.0.tar.gz | |
77 | + cd ./venusian-1.0 | |
78 | + eval "$BASE_INST_DIR_V/ve26/bin/python2.6 setup.py install" | |
79 | + cd .. | |
80 | + rm -rf ./venusian-1.0 | |
81 | + | |
82 | + tar -zxvf ./translationstring-1.3.tar.gz | |
83 | + cd ./translationstring-1.3 | |
84 | + eval "$BASE_INST_DIR_V/ve26/bin/python2.6 setup.py install" | |
85 | + cd .. | |
86 | + rm -rf ./translationstring-1.3 | |
87 | + | |
88 | + tar -zxvf ./zope.deprecation-4.1.2.tar.gz | |
89 | + cd ./zope.deprecation-4.1.2 | |
90 | + eval "$BASE_INST_DIR_V/ve26/bin/python2.6 setup.py install" | |
91 | + cd .. | |
92 | + rm -rf ./zope.deprecation-4.1.2 | |
93 | + | |
94 | + tar -zxvf ./zope.interface-4.1.3.tar.gz | |
95 | + cd ./zope.interface-4.1.3 | |
96 | + eval "$BASE_INST_DIR_V/ve26/bin/python2.6 setup.py install" | |
97 | + cd .. | |
98 | + rm -rf ./zope.interface-4.1.3 | |
99 | + | |
100 | + tar -zxvf ./repoze.lru-0.6.tar.gz | |
101 | + cd ./repoze.lru-0.6 | |
102 | + eval "$BASE_INST_DIR_V/ve26/bin/python2.6 setup.py install" | |
103 | + cd .. | |
104 | + rm -rf ./repoze.lru-0.6 | |
105 | + | |
106 | + tar -zxvf ./WebOb-1.5.1.tar.gz | |
107 | + cd ./WebOb-1.5.1 | |
108 | + eval "$BASE_INST_DIR_V/ve26/bin/python2.6 setup.py install" | |
109 | + cd .. | |
110 | + rm -rf ./WebOb-1.5.1 | |
111 | + | |
112 | + tar -zxvf ./pyramid-1.6b2.tar.gz | |
113 | + cd ./pyramid-1.6b2 | |
114 | + eval "$BASE_INST_DIR_V/ve26/bin/python2.6 setup.py install" | |
115 | + cd .. | |
116 | + rm -rf ./pyramid-1.6b2 | |
117 | + | |
118 | + tar -zxvf ./pbr-0.10.0.tar.gz | |
119 | + cd ./pbr-0.10.0 | |
120 | + eval "$BASE_INST_DIR_V/ve26/bin/python2.6 setup.py install" | |
121 | + cd .. | |
122 | + rm -rf ./pbr-0.10.0 | |
123 | + | |
124 | + tar -zxvf ./linecache2-1.0.0.tar.gz | |
125 | + cd ./linecache2-1.0.0 | |
126 | + eval "$BASE_INST_DIR_V/ve26/bin/python2.6 setup.py install" | |
127 | + cd .. | |
128 | + rm -rf ./linecache2-1.0.0 | |
129 | + | |
130 | + tar -zxvf ./traceback2-1.4.0.tar.gz | |
131 | + cd ./traceback2-1.4.0 | |
132 | + eval "$BASE_INST_DIR_V/ve26/bin/python2.6 setup.py install" | |
133 | + cd .. | |
134 | + rm -rf ./traceback2-1.4.0 | |
135 | + | |
136 | + tar -zxvf ./six-1.7.2.tar.gz | |
137 | + cd ./six-1.7.2 | |
138 | + eval "$BASE_INST_DIR_V/ve26/bin/python2.6 setup.py install" | |
139 | + cd .. | |
140 | + rm -rf ./six-1.7.2 | |
141 | + | |
142 | + tar -zxvf ./argparse-1.3.0.tar.gz | |
143 | + cd ./argparse-1.3.0 | |
144 | + eval "$BASE_INST_DIR_V/ve26/bin/python2.6 setup.py install" | |
145 | + cd .. | |
146 | + rm -rf ./argparse-1.3.0 | |
147 | + | |
148 | + tar -zxvf ./unittest2-1.0.1.tar.gz | |
149 | + cd ./unittest2-1.0.1 | |
150 | + eval "$BASE_INST_DIR_V/ve26/bin/python2.6 setup.py install" | |
151 | + cd .. | |
152 | + rm -rf ./unittest2-1.0.1 | |
153 | + | |
154 | + tar -zxvf ./Chameleon-2.24.tar.gz | |
155 | + cd ./Chameleon-2.24 | |
156 | + eval "$BASE_INST_DIR_V/ve26/bin/python2.6 setup.py install" | |
157 | + cd .. | |
158 | + rm -rf ./Chameleon-2.24 | |
159 | + | |
160 | + tar -zxvf ./pyramid_chameleon-0.3.tar.gz | |
161 | + cd ./pyramid_chameleon-0.3 | |
162 | + eval "$BASE_INST_DIR_V/ve26/bin/python2.6 setup.py install" | |
163 | + cd .. | |
164 | + rm -rf ./pyramid_chameleon-0.3 | |
165 | + | |
166 | + tar -zxvf ./waitress-0.8.10.tar.gz | |
167 | + cd ./waitress-0.8.10 | |
168 | + eval "$BASE_INST_DIR_V/ve26/bin/python2.6 setup.py install" | |
169 | + cd .. | |
170 | + rm -rf ./waitress-0.8.10 | |
171 | + | |
172 | + tar -zxvf ./xlrd-0.9.4.tar.gz | |
173 | + cd ./xlrd-0.9.4 | |
174 | + eval "$BASE_INST_DIR_V/ve26/bin/python2.6 setup.py install" | |
175 | + cd .. | |
176 | + rm -rf ./xlrd-0.9.4 | |
177 | + | |
178 | + tar -zxvf ./BeautifulSoup-3.2.1.tar.gz | |
179 | + cd ./BeautifulSoup-3.2.1 | |
180 | + eval "$BASE_INST_DIR_V/ve26/bin/python2.6 setup.py install" | |
181 | + cd .. | |
182 | + rm -rf ./BeautifulSoup-3.2.1 | |
183 | + | |
184 | +fi | ... | ... |
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type