Commit 114ef7234f5ba9777183438f50a0772b6cea554f

Authored by edulucio
1 parent 267de902
Exists in master

Várias correções! Agora compatível com o RHEL7! By Questor

.directory 100644 → 100755
1 [Dolphin] 1 [Dolphin]
2 PreviewsShown=true 2 PreviewsShown=true
3 -Timestamp=2016,5,13,18,0,28 3 +Timestamp=2016,6,14,9,59,19
4 Version=3 4 Version=3
5 ViewMode=1 5 ViewMode=1
6 -  
7 -[Settings]  
8 -HiddenFilesShown=true  
LBConverter.tar.gz 100755 → 100644
No preview for this file type
ez_i.bash 0 → 100755
@@ -0,0 +1,1515 @@ @@ -0,0 +1,1515 @@
  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 +Version 1.0.0b
  6 +
  7 +Apache License
  8 +Version 2.0, January 2004
  9 +http://www.apache.org/licenses/
  10 +Copyright 2016 Eduardo Lúcio Amorim Costa
  11 +'
  12 +
  13 +# NOTE: Obtêm a pasta do script atual para que seja usado como
  14 +# caminho base/referência durante a instalação! By Questor
  15 +EZ_I_DIR_V="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
  16 +
  17 +# NOTE: Quando setado faz "ez_i" desabilitar algumas funções,
  18 +# notadamente aquelas que envolvem "perguntas ao usuário" e as
  19 +# gráficas! By Questor
  20 +EZ_I_SKIP_ON_V=0
  21 +
  22 +# > --------------------------------------------------------------------------
  23 +# UTILITÁRIOS!
  24 +# --------------------------------------
  25 +
  26 +f_enter_to_cont() {
  27 + : 'Solicitar ao usuário que pressione enter para continuar.
  28 +
  29 + Args:
  30 + INFO_P (Optional[int]): Se informado apresenta uma mensagem ao
  31 + usuário. Padrão 0.
  32 + '
  33 +
  34 + INFO_P=$1
  35 + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then
  36 + return 0
  37 + fi
  38 +
  39 + if [ ! -z "$INFO_P" ] ; then
  40 + f_div_section
  41 + echo "$INFO_P"
  42 + f_div_section
  43 + fi
  44 +
  45 + read -p "Press enter to continue..." nothing
  46 +}
  47 +
  48 +GET_USR_INPUT_R=""
  49 +f_get_usr_input() {
  50 + : 'Obter entradas digitadas pelo usuário.
  51 +
  52 + Permite autocomplete (tab). Enter para submeter a entrada.
  53 +
  54 + Args:
  55 + QUESTION_P (str): Pergunta a ser feita ao usuário.
  56 + ALLOW_EMPTY_P (Optional[int]): 0 - Não permite valor vazio; 1 - Permite
  57 + valor vazio. Padrão 0.
  58 +
  59 + Returns:
  60 + GET_USR_INPUT_R (str): Entrada digitada pelo usuário.
  61 + '
  62 +
  63 + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then
  64 + return 0
  65 + fi
  66 + QUESTION_P=$1
  67 + ALLOW_EMPTY_P=$2
  68 + if [ -z "$ALLOW_EMPTY_P" ] ; then
  69 + ALLOW_EMPTY_P=0
  70 + fi
  71 + GET_USR_INPUT_R=""
  72 + read -e -r -p "$QUESTION_P (use enter to confirm): " RESP_V
  73 + if [ -n "$RESP_V" ] ; then
  74 + GET_USR_INPUT_R="$RESP_V"
  75 + elif [ ${ALLOW_EMPTY_P} -eq 0 ] ; then
  76 + f_get_usr_input "$QUESTION_P" 0
  77 + fi
  78 +}
  79 +
  80 +f_get_usr_input_mult() {
  81 + : 'Obter determinada opção do usuário à partir de uma lista de
  82 + entrada.
  83 +
  84 + Permite autocomplete (tab). Enter para submeter a entrada.
  85 +
  86 + Args:
  87 + QUESTION_P (str): Pergunta a ser feita ao usuário (as
  88 + opções são exibidas automaticamente).
  89 + OPT_ARR_P (array): Array com a lista de opções possíveis. As posições
  90 + pares do array são as opções e as ímpares são a descrição dessas opções.
  91 + ALLOW_EMPTY_P (Optional[int]): 0 - Não permite valor vazio; 1 - Permite
  92 + valor vazio. Padrão 0.
  93 +
  94 + Returns:
  95 + GET_USR_INPUT_MULT_R (str): Entrada digitada pelo usuário.
  96 + '
  97 +
  98 + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then
  99 + return 0
  100 + fi
  101 + QUESTION_P=$1
  102 + OPT_ARR_P=("${!2}")
  103 + TOTAL_0=${#OPT_ARR_P[*]}
  104 + ALLOW_EMPTY_P=$3
  105 + if [ -z "$ALLOW_EMPTY_P" ] ; then
  106 + ALLOW_EMPTY_P=0
  107 + fi
  108 + USE_PIPE=""
  109 + POSSIBLE_OPT="(select your option and press enter: "
  110 + for (( i=0; i<=$(( $TOTAL_0 -1 )); i++ )) ; do
  111 + if [ $((i%2)) -eq 0 ]; then
  112 + # "even"
  113 + POSSIBLE_OPT=$POSSIBLE_OPT${OPT_ARR_P[$i]}" - "
  114 + else
  115 + # "odd"
  116 + if (( i <= $(( TOTAL_0 -2 )) )) ; then
  117 + USE_PIPE=" | "
  118 + else
  119 + USE_PIPE=""
  120 + fi
  121 + POSSIBLE_OPT=$POSSIBLE_OPT${OPT_ARR_P[$i]}$USE_PIPE
  122 + fi
  123 + done
  124 + POSSIBLE_OPT=$POSSIBLE_OPT")"
  125 + GET_USR_INPUT_MULT_R=""
  126 + read -e -r -p "$QUESTION_P
  127 +$POSSIBLE_OPT: " RESP_V
  128 + if [ -n "$RESP_V" ] ; then
  129 + for (( o=0; o<=$(( $TOTAL_0 -1 )); o++ )) ; do
  130 + if [ $((i%2)) -eq 0 ] && [ "$RESP_V" == "${OPT_ARR_P[$o]}" ] ; then
  131 + # "even"
  132 + GET_USR_INPUT_MULT_R="$RESP_V"
  133 + break
  134 + fi
  135 + done
  136 + if [ -z "$GET_USR_INPUT_MULT_R" ] ; then
  137 + f_get_usr_input_mult "$QUESTION_P" OPT_ARR_P[@] $ALLOW_EMPTY_P
  138 + fi
  139 + elif [ ${ALLOW_EMPTY_P} -eq 0 ] ; then
  140 + f_get_usr_input_mult "$QUESTION_P" OPT_ARR_P[@] 0
  141 + fi
  142 +}
  143 +
  144 +F_EZ_SED_ECP_R=""
  145 +f_ez_sed_ecp() {
  146 + : '"Escapar" strings para o comando "sed".
  147 +
  148 + Como há muitas semelhanças entre o escape para "sed" ("f_ez_sed") e
  149 + escape para "grep" ("f_fl_cont_str") optei por colocar essa
  150 + função como utilitária para as outras duas citadas.
  151 +
  152 + Args:
  153 + VAL_TO_ECP (str): Valor a ser "escapado".
  154 + DONT_ECP_NL (Optional[int]): 1 - Não "escapa" "\n" (quebra de
  155 + linha); 0 - "Escapa" "\n". Padrão 1.
  156 + DONT_ECP_SQ (Optional[int]): 1 - Não "escapa" "'" (aspas
  157 + simples); 0 - "Escapa" "'". Padrão 1. NOTE: Usado apenas pela
  158 + função "f_fl_cont_str".
  159 +
  160 + Returns:
  161 + F_EZ_SED_ECP_R (str): Valor "escapado".
  162 + '
  163 +
  164 + VAL_TO_ECP=$1
  165 + DONT_ECP_NL=$2
  166 + if [ -z "$DONT_ECP_NL" ] ; then
  167 + DONT_ECP_NL=1
  168 + fi
  169 + DONT_ECP_SQ=$3
  170 + if [ -z "$DONT_ECP_SQ" ] ; then
  171 + DONT_ECP_SQ=0
  172 + fi
  173 + F_EZ_SED_ECP_R=$VAL_TO_ECP
  174 + if [ ${DONT_ECP_NL} -eq 1 ] ; then
  175 + F_EZ_SED_ECP_R=$(echo "$F_EZ_SED_ECP_R" | sed 's/\\n/C0673CECED2D4A8FBA90C9B92B9508A8/g')
  176 + fi
  177 + F_EZ_SED_ECP_R=$(echo "$F_EZ_SED_ECP_R" | sed 's/[]\/$*.^|[]/\\&/g')
  178 + if [ ${DONT_ECP_SQ} -eq 0 ] ; then
  179 + F_EZ_SED_ECP_R=$(echo "$F_EZ_SED_ECP_R" | sed "s/'/\\\x27/g")
  180 + fi
  181 + if [ ${DONT_ECP_NL} -eq 1 ] ; then
  182 + F_EZ_SED_ECP_R=$(echo "$F_EZ_SED_ECP_R" | sed 's/C0673CECED2D4A8FBA90C9B92B9508A8/\\n/g')
  183 + fi
  184 +}
  185 +
  186 +f_ez_sed() {
  187 + : 'Facilitar o uso da funcionalidade "sed".
  188 +
  189 + Args:
  190 + TARGET (str): Valor a ser substituído por pelo valor de REPLACE.
  191 + REPLACE (str): Valor que irá substituir TARGET.
  192 + FILE (str): Arquivo no qual será feita a substituição.
  193 + ALL_OCCUR (Optional[int]): 0 - Fazer replace apenas na primeira
  194 + ocorrência; 1 - Fazer replace em todas as ocorrências. Padrão 0.
  195 + DONT_ESCAPE (Optional[int]): 0 - Faz escape das strings em
  196 + TARGET e REPLACE; 1 - Não faz escape das strings em TARGET e
  197 + REPLACE. Padrão 0.
  198 + DONT_ECP_NL (Optional[int]): 1 - Não "escapa" "\n" (quebra de
  199 + linha); 0 - "Escapa" "\n". Padrão 1.
  200 + REMOVE_LN (Optional[int]): 1 - Remove a linha que possui o
  201 + valor em TARGET; 0 - Faz o replace convencional. Padrão 0.
  202 + NTH_OCCUR (Optional[int]): Executará a operação escolhida
  203 + apenas sobre a ocorrência indicada; Se -1, não executa. Padrão -1.
  204 + '
  205 +
  206 + FILE=$3
  207 + ALL_OCCUR=$4
  208 + if [ -z "$ALL_OCCUR" ] ; then
  209 + ALL_OCCUR=0
  210 + fi
  211 + DONT_ESCAPE=$5
  212 + if [ -z "$DONT_ESCAPE" ] ; then
  213 + DONT_ESCAPE=0
  214 + fi
  215 + DONT_ECP_NL=$6
  216 + if [ -z "$DONT_ECP_NL" ] ; then
  217 + DONT_ECP_NL=1
  218 + fi
  219 + REMOVE_LN=$7
  220 + if [ -z "$REMOVE_LN" ] ; then
  221 + REMOVE_LN=0
  222 + fi
  223 + NTH_OCCUR=$8
  224 + if [ -z "$NTH_OCCUR" ] ; then
  225 + NTH_OCCUR=-1
  226 + fi
  227 + if [ ${DONT_ESCAPE} -eq 1 ] ; then
  228 + TARGET=$1
  229 + REPLACE=$2
  230 + else
  231 + f_ez_sed_ecp "$1" $DONT_ECP_NL
  232 + TARGET=$F_EZ_SED_ECP_R
  233 + f_ez_sed_ecp "$2" $DONT_ECP_NL
  234 + REPLACE=$F_EZ_SED_ECP_R
  235 + fi
  236 + if [ ${REMOVE_LN} -eq 1 ] ; then
  237 + if [ ${ALL_OCCUR} -eq 0 ] ; then
  238 + SED_RPL="'0,/$TARGET/{//d;}'"
  239 + else
  240 + SED_RPL="'/$TARGET/d'"
  241 + fi
  242 + eval "sed -i $SED_RPL $FILE"
  243 + else
  244 + if [ ${NTH_OCCUR} -gt -1 ] ; then
  245 +
  246 + # TODO: Tá TOSCO no último! Mas, não consegui uma forma de fazer
  247 + # replace em apenas determinada posição usando o "sed"! Para ser
  248 + # bem franco não sei se dá para fazer isso com o "sed"! By Questor
  249 + ((NTH_OCCUR++))
  250 + for (( i=0; i<$(( $NTH_OCCUR - 1 )); i++ )) ; do
  251 + SED_RPL="'0,/$TARGET/s//£§¢¬¨/g'"
  252 + eval "sed -i $SED_RPL $FILE"
  253 + done
  254 + SED_RPL="'0,/$TARGET/s//$REPLACE/g'"
  255 + eval "sed -i $SED_RPL $FILE"
  256 + SED_RPL="'s/£§¢¬¨/$TARGET/g'"
  257 + eval "sed -i $SED_RPL $FILE"
  258 + else
  259 + if [ ${ALL_OCCUR} -eq 0 ] ; then
  260 + SED_RPL="'0,/$TARGET/s//$REPLACE/g'"
  261 + else
  262 + SED_RPL="'s/$TARGET/$REPLACE/g'"
  263 + fi
  264 + eval "sed -i $SED_RPL $FILE"
  265 + fi
  266 + fi
  267 +}
  268 +
  269 +FL_CONT_STR_R=0
  270 +f_fl_cont_str() {
  271 + : 'Checar se um arquivo contêm determinada string.
  272 +
  273 + Args:
  274 + STR_TO_CH (str): Valor de string a ser verificado.
  275 + FILE (str): Arquivo no qual será feita a verificação.
  276 + COND_MSG_P (Optional[str]): Mensagem a ser exibida se
  277 + verdadeira a verificação. Se vazio ou não informado não será
  278 + exibida mensagem.
  279 + CHK_INVERT (Optional[int]): Inverter a lógica da checagem.
  280 + Padrão 0.
  281 + DONT_ESCAPE (Optional[int]): 0 - Faz escape da string em
  282 + STR_TO_CH; 1 - Não faz escape das strings em STR_TO_CH. Padrão 0.
  283 + DONT_ECP_NL (Optional[int]): 1 - Não "escapa" "\n" (quebra de
  284 + linha); 0 - "Escapa" "\n". Padrão 1.
  285 +
  286 + Returns:
  287 + FL_CONT_STR_R (int): 1 - Se verdadeiro para a condição
  288 + analisada; 0 - Se falso para a condição analisada.
  289 + '
  290 +
  291 + STR_TO_CH=$1
  292 + FILE=$2
  293 + COND_MSG_P=$3
  294 + CHK_INVERT=$4
  295 + DONT_ESCAPE=$5
  296 +
  297 + if [ -z "$DONT_ESCAPE" ] ; then
  298 + DONT_ESCAPE=0
  299 + fi
  300 + if [ ${DONT_ESCAPE} -eq 0 ] ; then
  301 + DONT_ECP_NL=$6
  302 + if [ -z "$DONT_ECP_NL" ] ; then
  303 + DONT_ECP_NL=1
  304 + fi
  305 + f_ez_sed_ecp "$STR_TO_CH" $DONT_ECP_NL 1
  306 + STR_TO_CH=$F_EZ_SED_ECP_R
  307 + fi
  308 +
  309 + if [ -z "$CHK_INVERT" ] ; then
  310 + CHK_INVERT=0
  311 + fi
  312 + FL_CONT_STR_R=0
  313 + if [ ${CHK_INVERT} -eq 0 ] ; then
  314 + if grep -q "$STR_TO_CH" "$FILE"; then
  315 + FL_CONT_STR_R=1
  316 + fi
  317 + else
  318 + if ! grep -q "$STR_TO_CH" "$FILE"; then
  319 + FL_CONT_STR_R=1
  320 + fi
  321 + fi
  322 + if [ ${EZ_I_SKIP_ON_V} -eq 0 ] && [ ${FL_CONT_STR_R} -eq 1 ] && [ ! -z "$COND_MSG_P" ] ; then
  323 + f_div_section
  324 + echo "$COND_MSG_P"
  325 + f_div_section
  326 + f_enter_to_cont
  327 + fi
  328 +}
  329 +
  330 +CHK_FD_FL_R=0
  331 +f_chk_fd_fl() {
  332 + : 'Verificar se determinado diretório ou arquivo existe.
  333 +
  334 + Args:
  335 + TARGET (str): Diretório ou arquivo qual se quer verificar.
  336 + CHK_TYPE (str): "d" - Checar por diretório; "f" - Checar por
  337 + arquivo.
  338 +
  339 + Returns:
  340 + CHK_FD_FL_R (int): 1 - True; 0 - False.
  341 + '
  342 +
  343 + CHK_FD_FL_R=0
  344 + TARGET=$1
  345 + CHK_TYPE=$2
  346 + if [ "$CHK_TYPE" == "f" ] ; then
  347 + if [ -f "$TARGET" ] ; then
  348 + CHK_FD_FL_R=1
  349 + fi
  350 + fi
  351 + if [ "$CHK_TYPE" == "d" ] ; then
  352 + if [ -d "$TARGET" ] ; then
  353 + CHK_FD_FL_R=1
  354 + fi
  355 + fi
  356 +}
  357 +
  358 +F_PACK_IS_INST_R=0
  359 +f_pack_is_inst() {
  360 + : 'Checar se um pacote está instalado.
  361 +
  362 + Args:
  363 + PACKAGE_NM_P (str): Nome do pacote.
  364 + PACK_MANAG (str): Tipo de gerenciador de pacotes. "yum",
  365 + "apt-get" e "zypper" são suportados. Em caso diverso o script
  366 + exibe erro e para.
  367 + EXIST_MSG_P (Optional[str]): Mensagem a ser exibida se o
  368 + pacote já estiver instalado. Se vazio ou não informado não será
  369 + exibida mensagem.
  370 + SKIP_MSG_P (Optional[int]): 1 - Omite a mensagem; 0 - Não omite a
  371 + mensagem. Padrão 1.
  372 +
  373 + Returns:
  374 + F_PACK_IS_INST_R (int): 1 - Instalado; 0 - Não instalado.
  375 + '
  376 +
  377 + PACKAGE_NM_P=$1
  378 + PACK_MANAG=$2
  379 + EXIST_MSG_P=$3
  380 + SKIP_MSG_P=$4
  381 +
  382 + if [ -z "$SKIP_MSG_P" ] ; then
  383 + SKIP_MSG_P=1
  384 + fi
  385 + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then
  386 + SKIP_MSG_P=1
  387 + fi
  388 +
  389 + F_PACK_IS_INST_R=0
  390 + if [ "$PACK_MANAG" == "yum" ] ; then
  391 + if yum list installed "$PACKAGE_NM_P" >/dev/null 2>&1; then
  392 + if [ ${SKIP_MSG_P} -eq 0 ] && [ ! -z "$EXIST_MSG_P" ] ; then
  393 + f_div_section
  394 + echo "$EXIST_MSG_P"
  395 + f_div_section
  396 + f_enter_to_cont
  397 + fi
  398 + F_PACK_IS_INST_R=1
  399 + else
  400 + F_PACK_IS_INST_R=0
  401 + fi
  402 + elif [ "$PACK_MANAG" == "apt-get" ] ; then
  403 + if dpkg -s "$PACKAGE_NM_P" &> /dev/null; then
  404 + if [ ${SKIP_MSG_P} -eq 0 ] && [ ! -z "$EXIST_MSG_P" ] ; then
  405 + f_div_section
  406 + echo "$EXIST_MSG_P"
  407 + f_div_section
  408 + f_enter_to_cont
  409 + fi
  410 + F_PACK_IS_INST_R=1
  411 + else
  412 + F_PACK_IS_INST_R=0
  413 + fi
  414 + elif [ "$PACK_MANAG" == "zypper" ] ; then
  415 + if zypper se -i --match-word "$PACKAGE_NM_P" > /dev/null 2>&1; then
  416 + if [ ${SKIP_MSG_P} -eq 0 ] && [ ! -z "$EXIST_MSG_P" ] ; then
  417 + f_div_section
  418 + echo "$EXIST_MSG_P"
  419 + f_div_section
  420 + f_enter_to_cont
  421 + fi
  422 + F_PACK_IS_INST_R=1
  423 + else
  424 + F_PACK_IS_INST_R=0
  425 + fi
  426 + else
  427 + f_div_section
  428 + echo "ERROR! Not implemented for \"$PACK_MANAG\"!"
  429 + f_div_section
  430 + f_enter_to_cont
  431 + fi
  432 +}
  433 +
  434 +F_CHK_BY_PATH_HLP_R=0
  435 +f_chk_by_path_hlp() {
  436 + : 'Checar se um aplicativo/pacote/arquivo está presente/instalado
  437 + verificando-o através do seu caminho físico informando.
  438 +
  439 + Args:
  440 + PATH_VER_P (str): Caminho físico para o aplicativo/pacote.
  441 + VER_TYPE_P (str): Se o caminho físico é para um diretório ("d")
  442 + ou arquivo ("f").
  443 + EXIST_MSG_P (Optional[str]): Mensagem a ser "printada" caso o
  444 + aplicativo/pacote/arquivo exista. Se não informado ou vazio não
  445 + exibe a mensagem.
  446 + SKIP_MSG_P (Optional[int]): Não exibir mensagem.
  447 +
  448 + Returns:
  449 + F_CHK_BY_PATH_HLP_R (int): 0 - Não existe; 1 - Existe
  450 + ("printa" menssagem contida em EXIST_MSG_P).
  451 + '
  452 +
  453 + PATH_VER_P=$1
  454 + VER_TYPE_P=$2
  455 + EXIST_MSG_P=$3
  456 + SKIP_MSG_P=$4
  457 + if [ -z "$SKIP_MSG_P" ] ; then
  458 + SKIP_MSG_P=0
  459 + fi
  460 + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then
  461 + SKIP_MSG_P=1
  462 + fi
  463 +
  464 + F_CHK_BY_PATH_HLP_R=0
  465 + f_chk_fd_fl "$PATH_VER_P" "$VER_TYPE_P"
  466 + if [ ${CHK_FD_FL_R} -eq 0 ] ; then
  467 + F_CHK_BY_PATH_HLP_R=0
  468 + else
  469 + if [ ${SKIP_MSG_P} -eq 0 ] && [ ! -z "$EXIST_MSG_P" ]; then
  470 + f_div_section
  471 + echo "$EXIST_MSG_P"
  472 + f_div_section
  473 + f_enter_to_cont
  474 + fi
  475 + F_CHK_BY_PATH_HLP_R=1
  476 + fi
  477 +}
  478 +
  479 +F_CHK_IPTABLES_R=0
  480 +f_chk_iptables() {
  481 + : 'Fazer verificações usando "iptables".
  482 +
  483 + Trata-se de um utilitário para fazer verificações diversas usando o
  484 + comando "iptables" NORMALMENTE CHECAR DE DETERMINADA PORTA ESTÁ
  485 + ABERTA.
  486 +
  487 + Ex 1.: f_chk_iptables 80
  488 + Ex 2.: f_chk_iptables 80 "Já está aberta!"
  489 + Ex 3.: f_chk_iptables 80 "Já está aberta!" 0 "ACCEPT" "tcp" "NEW"
  490 + Ex 4.: f_chk_iptables 80 "Já está aberta!" 0 "ACCEPT" "tcp" "NEW" 5
  491 +
  492 + Args:
  493 + PORT_P (int): Porta a ser verificada.
  494 + MSG_P (Optional[str]): Mensagem a ser exibida em caso de
  495 + verdadeiro para a verificação (normalmente porta aberta). Se vazio
  496 + ou não informado não será exibida mensagem.
  497 + SKIP_MSG_P (Optional[int]): Não exibir mensagem.
  498 + Padrão 0.
  499 + TARGET_P (Optional[str]): Padrão "ACCEPT".
  500 + PROT_P (Optional[str]): Padrão "tcp".
  501 + STATE_P (str): Padrão "".
  502 + POS_IN_CHAIN_P (int): Padrão "".
  503 +
  504 + Returns:
  505 + F_CHK_IPTABLES_R (int): 1 - Verdadeiro para a verificação;
  506 + 0 - Falso para a verificação.
  507 + '
  508 +
  509 + PORT_P=$1
  510 + MSG_P=$2
  511 + SKIP_MSG_P=$3
  512 +
  513 + if [ -z "$SKIP_MSG_P" ] ; then
  514 + SKIP_MSG_P=0
  515 + fi
  516 + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then
  517 + SKIP_MSG_P=1
  518 + fi
  519 +
  520 + TARGET_P=$4
  521 + if [ -z "$TARGET_P" ] ; then
  522 + TARGET_P="ACCEPT"
  523 + fi
  524 + PROT_P=$5
  525 + if [ -z "$PROT_P" ] ; then
  526 + PROT_P="tcp"
  527 + fi
  528 + STATE_P=$6
  529 + if [ -z "$STATE_P" ] ; then
  530 + STATE_P=""
  531 + else
  532 + STATE_P="state $STATE_P "
  533 + fi
  534 + POS_IN_CHAIN_P=$7
  535 + if [ -z "$POS_IN_CHAIN_P" ] ; then
  536 + POS_IN_CHAIN_P=""
  537 + else
  538 + POS_IN_CHAIN_P=$(printf "%-9s" $POS_IN_CHAIN_P)
  539 + fi
  540 + # 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 ")
  541 + GREP_OUT=$(iptables -vnL --line-numbers | grep "$POS_IN_CHAIN_P" | grep "$TARGET_P" | grep "$PROT_P" | grep "dpt:$PORT_P ")
  542 + if [ $? -eq 1 ] ; then
  543 + F_CHK_IPTABLES_R=1
  544 + else
  545 + if [ ${SKIP_MSG_P} -eq 0 ] && [ ! -z "$MSG_P" ] ; then
  546 + f_div_section
  547 + echo "$MSG_P"
  548 + f_div_section
  549 + f_enter_to_cont
  550 + fi
  551 + F_CHK_IPTABLES_R=0
  552 + fi
  553 +}
  554 +
  555 +F_IS_NOT_RUNNING_R=0
  556 +f_is_not_running() {
  557 + : 'Checar de determinado processo (pode ser um serviço) está
  558 + rodando.
  559 +
  560 + Args:
  561 + PROC_NM_P (str): Nome do processo (pode ser um serviço).
  562 + COND_MSG_P (Optional[str]): Mensagem a ser exibida se
  563 + verdadeira a verificação. Se vazio ou não informado não será
  564 + exibida mensagem.
  565 + CHK_INVERT (Optional[int]): Inverter a lógica da checagem.
  566 + Padrão 0.
  567 +
  568 + Returns:
  569 + F_IS_NOT_RUNNING_R (int): 1 - Se verdadeiro para a condição
  570 + analisada; 0 - Se falso para a condição analisada.
  571 + '
  572 +
  573 + PROC_NM_P=$1
  574 + COND_MSG_P=$2
  575 + CHK_INVERT=$3
  576 + if [ -z "$CHK_INVERT" ] ; then
  577 + CHK_INVERT=0
  578 + fi
  579 + F_IS_NOT_RUNNING_R=0
  580 +
  581 + # NOTE: A verificação "grep -v grep" é para que ele não dê positivo
  582 + # para o próprio comando grep! By Questor
  583 + F_IS_NOT_RUNNING_R=0
  584 + if [ ${CHK_INVERT} -eq 0 ] ; then
  585 + if ! ps aux | grep -v "grep" | grep "$PROC_NM_P" > /dev/null ; then
  586 + F_IS_NOT_RUNNING_R=1
  587 + fi
  588 + else
  589 + if ps aux | grep -v "grep" | grep "$PROC_NM_P" > /dev/null ; then
  590 + F_IS_NOT_RUNNING_R=1
  591 + fi
  592 + fi
  593 + if [ ${EZ_I_SKIP_ON_V} -eq 0 ] && [ ${F_IS_NOT_RUNNING_R} -eq 1 ] && [ ! -z "$COND_MSG_P" ] ; then
  594 + f_div_section
  595 + echo "$COND_MSG_P"
  596 + f_div_section
  597 + f_enter_to_cont
  598 + fi
  599 +}
  600 +
  601 +F_GET_STDERR_R=""
  602 +F_GET_STDOUT_R=""
  603 +F_GET_EXIT_CODE_R=0
  604 +f_get_stderr_stdout() {
  605 + : 'Executar um comando e colocar a saída de stderr e stdout nas
  606 + variáveis "F_GET_STDERR_R" e "F_GET_STDOUT_R"!.
  607 +
  608 + Args:
  609 + CMD_TO_EXEC (str): Comando a ser executado.
  610 +
  611 + Returns:
  612 + F_GET_STDERR_R (str): Saída para stderr.
  613 + F_GET_STDOUT_R (str): Saída para stdout.
  614 + '
  615 +
  616 + CMD_TO_EXEC=$1
  617 + F_GET_STDERR_R=""
  618 + F_GET_STDOUT_R=""
  619 + unset t_std t_err t_ret
  620 + eval "$( eval "$CMD_TO_EXEC" 2> >(t_err=$(cat); typeset -p t_err) > >(t_std=$(cat); typeset -p t_std); t_ret=$?; typeset -p t_ret )"
  621 + F_GET_EXIT_CODE_R=$t_ret
  622 + F_GET_STDERR_R=$t_err
  623 + F_GET_STDOUT_R=$t_std
  624 +}
  625 +
  626 +F_BAK_PATH_R=""
  627 +F_BAK_MD_R=0
  628 +f_ez_mv_bak() {
  629 + : 'Modifica o nome de um arquivo ou pasta para um nome de backup.
  630 +
  631 + Adiciona um sufixo ao nome no formato: "-D%Y-%m-%d-T%H-%M-%S.bak".
  632 +
  633 + Args:
  634 + TARGET (str): Caminho para o arquivo ou pasta alvo.
  635 + CONF_MSG_P (Optional[str]): Verificar se o usuário deseja ou
  636 + não backup. Se vazio ou não informado não será exibida mensagem.
  637 + SKIP_MSG_P (Optional[int]): 0 - Exibe a mensagem informada; 1 - Não
  638 + exibe a mensagem informada. Padrão 0.
  639 + USE_COPY_P (Optional[int]): 0 - Define um novo nome para o alvo; 1 -
  640 + Faz uma cópia do alvo com um novo nome. Padrão 0.
  641 + DONT_CONFIRM_IF_EXISTS_P (Optional[int]): 0 - Verifica; 1 - Não verifica.
  642 + Padrão 0.
  643 +
  644 + Returns:
  645 + F_BAK_PATH_R (str): Caminho para o arquivo ou pasta alvo com o
  646 + novo nome.
  647 + F_BAK_NAME_R (str): Nome do arquivo recém criado.
  648 + F_BAK_MD_R (int): 1 - Backup realizado; 0 - Backup não
  649 + realizado.
  650 + '
  651 +
  652 + TARGET=$1
  653 + CONF_MSG_P=$2
  654 + SKIP_MSG_P=$3
  655 + if [ -z "$SKIP_MSG_P" ] ; then
  656 + SKIP_MSG_P=0
  657 + fi
  658 + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then
  659 + SKIP_MSG_P=1
  660 + fi
  661 + USE_COPY_P=$4
  662 + if [ -z "$USE_COPY_P" ] ; then
  663 + USE_COPY_P=0
  664 + fi
  665 + DONT_CONFIRM_IF_EXISTS_P=$5
  666 + if [ -z "$DONT_CONFIRM_IF_EXISTS_P" ] ; then
  667 + DONT_CONFIRM_IF_EXISTS_P=0
  668 + fi
  669 + MK_BAK=1
  670 + F_BAK_PATH_R=""
  671 + F_BAK_NAME_R=""
  672 + F_BAK_MD_R=0
  673 +
  674 + if [[ -e $TARGET ]]; then
  675 + if [ ${SKIP_MSG_P} -eq 0 ] && [ ! -z "$CONF_MSG_P" ] ; then
  676 + f_div_section
  677 + f_yes_no "$CONF_MSG_P"
  678 + f_div_section
  679 + MK_BAK=$YES_NO_R
  680 + fi
  681 + if [ ${MK_BAK} -eq 1 ] ; then
  682 + SUFFIX=$(date +"-D%Y-%m-%d-T%H-%M-%S.bak")
  683 + NEW_NAME="$TARGET$SUFFIX"
  684 + if [ ${USE_COPY_P} -eq 0 ] ; then
  685 + mv "$TARGET" "$NEW_NAME"
  686 + elif [ ${USE_COPY_P} -eq 1 ] ; then
  687 + cp "$TARGET" "$NEW_NAME"
  688 + fi
  689 + F_BAK_PATH_R=$NEW_NAME
  690 + F_BAK_NAME_R="${NEW_NAME##*/}"
  691 + F_BAK_MD_R=1
  692 + fi
  693 + else
  694 + if [ ${DONT_CONFIRM_IF_EXISTS_P} -eq 0 ] ; then
  695 + f_enter_to_cont "ERROR! The target does not exist!"
  696 + fi
  697 + fi
  698 +}
  699 +
  700 +f_error_exit() {
  701 + : '"Printa" uma mensagem de erro e encerra o instalador.
  702 +
  703 + Args:
  704 + ERROR_CAUSE_P (Optional[str]): Causa do erro.
  705 + '
  706 +
  707 + EZ_I_S_ON_HOLDER=$EZ_I_SKIP_ON_V
  708 + EZ_I_SKIP_ON_V=0
  709 + ERROR_CAUSE_P=$1
  710 + echo
  711 + f_open_section "E R R O R !"
  712 + ERROR_MSG_NOW_P="AN ERROR OCCURRED AND THIS INSTALLER WAS CLOSED!"
  713 + if [ ! -z "$ERROR_CAUSE_P" ] ; then
  714 + ERROR_MSG_NOW_P="$ERROR_MSG_NOW_P ERROR: \"$ERROR_CAUSE_P\""
  715 + fi
  716 + echo "$ERROR_MSG_NOW_P"
  717 + echo
  718 + f_close_section
  719 + EZ_I_SKIP_ON_V=$EZ_I_S_ON_HOLDER
  720 + exit 1
  721 +}
  722 +
  723 +f_warning_msg() {
  724 + : '"Printa" uma mensagem de aviso.
  725 +
  726 + Args:
  727 + WARNING_P (str): aviso.
  728 + ASK_FOR_CONT_P (Optional[int]): 1 - Checa se o usuário deseja
  729 + continuar com a instalação; 0 - Solicita que pressione "enter".
  730 + Padrão 0.
  731 + '
  732 +
  733 + EZ_I_S_ON_HOLDER=$EZ_I_SKIP_ON_V
  734 + EZ_I_SKIP_ON_V=0
  735 + WARNING_P=$1
  736 + ASK_FOR_CONT_P=$2
  737 + if [ -z "$ASK_FOR_CONT_P" ] ; then
  738 + ASK_FOR_CONT_P=0
  739 + fi
  740 + echo
  741 + f_open_section "W A R N I N G !"
  742 + echo "$WARNING_P"
  743 + echo
  744 + f_close_section
  745 + if [ ${ASK_FOR_CONT_P} -eq 0 ] ; then
  746 + f_enter_to_cont
  747 + else
  748 + f_continue
  749 + fi
  750 + EZ_I_SKIP_ON_V=$EZ_I_S_ON_HOLDER
  751 +}
  752 +
  753 +f_continue() {
  754 + : 'Questionar ao usuário se deseja continuar ou parar a instalação.
  755 +
  756 + Args:
  757 + NOTE_P (Optional[str]): Informações adicionais ao usuário.
  758 + '
  759 +
  760 + NOTE_P=$1
  761 + f_div_section
  762 + if [ -z "$NOTE_P" ] ; then
  763 + NOTE_P=""
  764 + else
  765 + NOTE_P=" (NOTE: \"$NOTE_P\")"
  766 + fi
  767 +
  768 + f_yes_no "CONTINUE? (USE \"n\" TO STOP THIS INSTALLER)$NOTE_P"
  769 + f_div_section
  770 + if [ ${YES_NO_R} -eq 0 ] ; then
  771 + exit 0
  772 + fi
  773 +}
  774 +
  775 +F_SPLIT_R=()
  776 +f_split() {
  777 + : 'Faz "split" em uma dada string e devolve um array.
  778 +
  779 + Args:
  780 + TARGET_P (str): String alvo do "split".
  781 + DELIMITER_P (Optional[str]): Delimitador usado no "split".
  782 + Se não informado o split vai ser feito por espaços em branco.
  783 +
  784 + Returns:
  785 + F_SPLIT_R (array): Array com a string fornecida separada pelo
  786 + delimitador informado.
  787 + '
  788 +
  789 + F_SPLIT_R=()
  790 + TARGET_P=$1
  791 + DELIMITER_P=$2
  792 + if [ -z "$DELIMITER_P" ] ; then
  793 + DELIMITER_P=" "
  794 + fi
  795 +
  796 + REMOVE_N=1
  797 + if [ "$DELIMITER_P" == "\n" ] ; then
  798 + REMOVE_N=0
  799 + fi
  800 +
  801 + if [ ${REMOVE_N} -eq 1 ] ; then
  802 +
  803 + # NOTE: Devido a limitações do bash temos alguns problemas para
  804 + # poder obter a saída de um split via awk dentro de um array e
  805 + # por isso precisamos do uso da "quebra de linha" (\n) para
  806 + # termos sucesso! Visto isso, removemos as quebras de linha
  807 + # momentaneamente depois as reintegramos! By Questor
  808 + TARGET_P=$(echo "$TARGET_P" | awk 'BEGIN {RS="dn" } {gsub("\n","£§¢¬¨") ;printf $0 }')
  809 + fi
  810 +
  811 + SPLIT_NOW=$(awk -F"$DELIMITER_P" '{for(i=1;i<=NF;i++){printf "%s\n", $i}}' <<<"${TARGET_P}")
  812 +
  813 + while IFS= read -r LINE_NOW; do
  814 + if [ ${REMOVE_N} -eq 1 ] ; then
  815 + LN_NOW_WITH_N=$(awk 'BEGIN {RS="dn"} {gsub("£§¢¬¨","\n") ;printf $0 }' <<<"${LINE_NOW}")
  816 + F_SPLIT_R+=("$LN_NOW_WITH_N")
  817 + else
  818 + F_SPLIT_R+=("$LINE_NOW")
  819 + fi
  820 + done <<< "$SPLIT_NOW"
  821 +}
  822 +
  823 +F_ABOUT_DISTRO_R=()
  824 +f_about_distro() {
  825 + : 'Obter informações sobre a distro.
  826 +
  827 + Returns:
  828 + F_ABOUT_DISTRO_R (array): Array com informações sobre a
  829 + distro na seguinte ordem: NAME, VERSION, BASED e ARCH.
  830 + '
  831 +
  832 + F_ABOUT_DISTRO_R=()
  833 + f_get_stderr_stdout "cat /etc/*-release"
  834 + ABOUT_INFO=$F_GET_STDOUT_R
  835 +
  836 + if [[ $ABOUT_INFO == *"ID=debian"* ]] ; then
  837 + f_split "$ABOUT_INFO" "\n"
  838 + F_SPLIT_R_0=("${F_SPLIT_R[@]}")
  839 + TOTAL_0=${#F_SPLIT_R_0[*]}
  840 + for (( i=0; i<=$(( $TOTAL_0 -1 )); i++ )) ; do
  841 + f_split "${F_SPLIT_R_0[$i]}" "="
  842 + F_SPLIT_R_1=("${F_SPLIT_R[@]}")
  843 + TOTAL_1=${#F_SPLIT_R_1[*]}
  844 + for (( o=0; o<=$(( $TOTAL_1 -1 )); o++ )) ; do
  845 + p=$[$o+1]
  846 + case "${F_SPLIT_R_1[$o]}" in
  847 + "NAME")
  848 + f_split "${F_SPLIT_R_1[$p]}" "\""
  849 + F_SPLIT_R_2=("${F_SPLIT_R[@]}")
  850 + F_ABOUT_DISTRO_R+=("${F_SPLIT_R_2[1]}")
  851 + ;;
  852 + "VERSION_ID")
  853 + f_split "${F_SPLIT_R_1[$p]}" "\""
  854 + F_SPLIT_R_3=("${F_SPLIT_R[@]}")
  855 + F_ABOUT_DISTRO_R+=("${F_SPLIT_R_3[1]}")
  856 + ;;
  857 + *)
  858 +
  859 + ;;
  860 + esac
  861 + done
  862 + done
  863 + F_ABOUT_DISTRO_R+=("Debian")
  864 + elif [[ $ABOUT_INFO == *"ID=\"sles\""* ]] ; then
  865 + f_split "$ABOUT_INFO" "\n"
  866 + F_SPLIT_R_0=("${F_SPLIT_R[@]}")
  867 + TOTAL_0=${#F_SPLIT_R_0[*]}
  868 + for (( i=0; i<=$(( $TOTAL_0 -1 )); i++ )) ; do
  869 + f_split "${F_SPLIT_R_0[$i]}" "="
  870 + F_SPLIT_R_1=("${F_SPLIT_R[@]}")
  871 + TOTAL_1=${#F_SPLIT_R_1[*]}
  872 + for (( o=0; o<=$(( $TOTAL_1 -1 )); o++ )) ; do
  873 + p=$[$o+1]
  874 + case "${F_SPLIT_R_1[$o]}" in
  875 + "NAME")
  876 + f_split "${F_SPLIT_R_1[$p]}" "\""
  877 + F_SPLIT_R_2=("${F_SPLIT_R[@]}")
  878 + F_ABOUT_DISTRO_R+=("${F_SPLIT_R_2[1]}")
  879 + ;;
  880 + "VERSION_ID")
  881 + f_split "${F_SPLIT_R_1[$p]}" "\""
  882 + F_SPLIT_R_3=("${F_SPLIT_R[@]}")
  883 + F_ABOUT_DISTRO_R+=("${F_SPLIT_R_3[1]}")
  884 + ;;
  885 + *)
  886 +
  887 + ;;
  888 + esac
  889 + done
  890 + done
  891 + F_ABOUT_DISTRO_R+=("Suse")
  892 + elif [[ $ABOUT_INFO == *"ID=opensuse"* ]] ||
  893 + [[ $ABOUT_INFO == *"ID_LIKE=\"suse\""* ]] ; then
  894 + f_split "$ABOUT_INFO" "\n"
  895 + F_SPLIT_R_0=("${F_SPLIT_R[@]}")
  896 + TOTAL_0=${#F_SPLIT_R_0[*]}
  897 + for (( i=0; i<=$(( $TOTAL_0 -1 )); i++ )) ; do
  898 + f_split "${F_SPLIT_R_0[$i]}" "="
  899 + F_SPLIT_R_1=("${F_SPLIT_R[@]}")
  900 + TOTAL_1=${#F_SPLIT_R_1[*]}
  901 + for (( o=0; o<=$(( $TOTAL_1 -1 )); o++ )) ; do
  902 + p=$[$o+1]
  903 + case "${F_SPLIT_R_1[$o]}" in
  904 + "NAME")
  905 + F_ABOUT_DISTRO_R+=("${F_SPLIT_R_1[$p]}")
  906 + ;;
  907 + "VERSION_ID")
  908 + f_split "${F_SPLIT_R_1[$p]}" "\""
  909 + F_SPLIT_R_3=("${F_SPLIT_R[@]}")
  910 + F_ABOUT_DISTRO_R+=("${F_SPLIT_R_3[1]}")
  911 + ;;
  912 + *)
  913 +
  914 + ;;
  915 + esac
  916 + done
  917 + done
  918 + F_ABOUT_DISTRO_R+=("Suse")
  919 + elif [[ $ABOUT_INFO == *"DISTRIB_ID=Ubuntu"* ]] ||
  920 + [[ $ABOUT_INFO == *"ID_LIKE=debian"* ]] ; then
  921 + f_split "$ABOUT_INFO" "\n"
  922 + F_SPLIT_R_0=("${F_SPLIT_R[@]}")
  923 + TOTAL_0=${#F_SPLIT_R_0[*]}
  924 + for (( i=0; i<=$(( $TOTAL_0 -1 )); i++ )) ; do
  925 + f_split "${F_SPLIT_R_0[$i]}" "="
  926 + F_SPLIT_R_1=("${F_SPLIT_R[@]}")
  927 + TOTAL_1=${#F_SPLIT_R_1[*]}
  928 + for (( o=0; o<=$(( $TOTAL_1 -1 )); o++ )) ; do
  929 + p=$[$o+1]
  930 + case "${F_SPLIT_R_1[$o]}" in
  931 + "DISTRIB_ID")
  932 + F_ABOUT_DISTRO_R+=("${F_SPLIT_R_1[$p]}")
  933 + ;;
  934 + "DISTRIB_RELEASE")
  935 + F_ABOUT_DISTRO_R+=("${F_SPLIT_R_1[$p]}")
  936 + ;;
  937 + *)
  938 +
  939 + ;;
  940 + esac
  941 + done
  942 + done
  943 + F_ABOUT_DISTRO_R+=("Debian")
  944 + elif [[ $ABOUT_INFO == *"CentOS release 6"* ]] ; then
  945 + # NOTE: Para a geração CentOS 6.X! By Questor
  946 +
  947 + f_split "$ABOUT_INFO" "\n"
  948 + F_SPLIT_R_0=("${F_SPLIT_R[1]}")
  949 + f_split "${F_SPLIT_R_0[0]}" " "
  950 + F_SPLIT_R_1=("${F_SPLIT_R[@]}")
  951 + F_ABOUT_DISTRO_R+=("${F_SPLIT_R_1[0]}")
  952 + F_ABOUT_DISTRO_R+=("${F_SPLIT_R_1[2]}")
  953 + F_ABOUT_DISTRO_R+=("RedHat")
  954 + elif [[ $ABOUT_INFO == *"CentOS Linux release 7"* ]] ; then
  955 + # NOTE: Para a geração CentOS 7.X! By Questor
  956 +
  957 + f_split "$ABOUT_INFO" "\n"
  958 + F_SPLIT_R_0=("${F_SPLIT_R[@]}")
  959 + TOTAL_0=${#F_SPLIT_R_0[*]}
  960 + for (( i=0; i<=$(( $TOTAL_0 -1 )); i++ )) ; do
  961 + f_split "${F_SPLIT_R_0[$i]}" "="
  962 + F_SPLIT_R_1=("${F_SPLIT_R[@]}")
  963 + TOTAL_1=${#F_SPLIT_R_1[*]}
  964 + for (( o=0; o<=$(( $TOTAL_1 -1 )); o++ )) ; do
  965 + p=$[$o+1]
  966 + case "${F_SPLIT_R_1[$o]}" in
  967 + "NAME")
  968 + f_split "${F_SPLIT_R_1[$p]}" "\""
  969 + F_SPLIT_R_2=("${F_SPLIT_R[@]}")
  970 + F_ABOUT_DISTRO_R+=("${F_SPLIT_R_2[1]}")
  971 + ;;
  972 + "VERSION_ID")
  973 + f_split "${F_SPLIT_R_1[$p]}" "\""
  974 + F_SPLIT_R_3=("${F_SPLIT_R[@]}")
  975 + F_ABOUT_DISTRO_R+=("${F_SPLIT_R_3[1]}")
  976 + ;;
  977 + *)
  978 +
  979 + ;;
  980 + esac
  981 + done
  982 + done
  983 + F_ABOUT_DISTRO_R+=("RedHat")
  984 + elif [[ $ABOUT_INFO == *"Red Hat Enterprise Linux Server"* ]] ||
  985 + [[ $ABOUT_INFO == *"VERSION_ID=\"7."* ]]; then
  986 + # NOTE: Para a geração RHEL 7.X! By Questor
  987 +
  988 + f_split "$ABOUT_INFO" "\n"
  989 + F_SPLIT_R_0=("${F_SPLIT_R[@]}")
  990 + TOTAL_0=${#F_SPLIT_R_0[*]}
  991 + for (( i=0; i<=$(( $TOTAL_0 -1 )); i++ )) ; do
  992 + f_split "${F_SPLIT_R_0[$i]}" "="
  993 + F_SPLIT_R_1=("${F_SPLIT_R[@]}")
  994 + TOTAL_1=${#F_SPLIT_R_1[*]}
  995 + for (( o=0; o<=$(( $TOTAL_1 -1 )); o++ )) ; do
  996 + p=$[$o+1]
  997 + case "${F_SPLIT_R_1[$o]}" in
  998 + "NAME")
  999 + f_split "${F_SPLIT_R_1[$p]}" "\""
  1000 + F_SPLIT_R_2=("${F_SPLIT_R[@]}")
  1001 + F_ABOUT_DISTRO_R+=("${F_SPLIT_R_2[1]}")
  1002 + ;;
  1003 + "VERSION_ID")
  1004 + f_split "${F_SPLIT_R_1[$p]}" "\""
  1005 + F_SPLIT_R_3=("${F_SPLIT_R[@]}")
  1006 + F_ABOUT_DISTRO_R+=("${F_SPLIT_R_3[1]}")
  1007 + ;;
  1008 + *)
  1009 +
  1010 + ;;
  1011 + esac
  1012 + done
  1013 + done
  1014 + F_ABOUT_DISTRO_R+=("RedHat")
  1015 + elif [[ $ABOUT_INFO == *"Red Hat Enterprise Linux Server release "* ]] ; then
  1016 + f_split "$ABOUT_INFO" "\n"
  1017 + F_SPLIT_R_0=("${F_SPLIT_R[1]}")
  1018 + f_split "${F_SPLIT_R_0[0]}" " "
  1019 + F_SPLIT_R_1=("${F_SPLIT_R[@]}")
  1020 + F_ABOUT_DISTRO_R+=("Red Hat Enterprise Linux Server")
  1021 + F_ABOUT_DISTRO_R+=("${F_SPLIT_R_1[6]}")
  1022 + F_ABOUT_DISTRO_R+=("RedHat")
  1023 + else
  1024 + F_ABOUT_DISTRO_R+=("Unknown")
  1025 + F_ABOUT_DISTRO_R+=("Unknown")
  1026 + F_ABOUT_DISTRO_R+=("Unknown")
  1027 + fi
  1028 + F_ABOUT_DISTRO_R+=($(arch))
  1029 +}
  1030 +
  1031 +F_IS_ROOT_R=1
  1032 +f_is_root() {
  1033 + : 'Checar se o usuário é root.
  1034 +
  1035 + Args:
  1036 + CHK_ONLY_P (Optional[int]): 1 - Apenas verifica e retorna o
  1037 + resultado; 0 - Se não for root emite erro e encerra a execução.
  1038 + Padrão 0.
  1039 +
  1040 + Returns:
  1041 + F_IS_ROOT_R (int): 1 - É root; 0 - Não é root.
  1042 + '
  1043 +
  1044 + CHK_ONLY_P=$1
  1045 + if [ -z "$CHK_ONLY_P" ] ; then
  1046 + CHK_ONLY_P=0
  1047 + fi
  1048 +
  1049 + F_IS_ROOT_R=1
  1050 + if [[ $EUID -ne 0 ]]; then
  1051 + f_enter_to_cont "ERROR! You need to be root!"
  1052 + F_IS_ROOT_R=0
  1053 + if [ ${CHK_ONLY_P} -eq 0 ] ; then
  1054 + f_error_exit
  1055 + fi
  1056 + fi
  1057 +}
  1058 +
  1059 +F_CHK_DISTRO_STATUS_R=""
  1060 +f_chk_distro_status() {
  1061 + : 'Verifica se a distro informada está subscrita e/ou registrada
  1062 + e/ou ativa perante os recursos informados.
  1063 +
  1064 + Args:
  1065 + DISTRO_NAME_P (str): Nome da distro sobre a qual será executada
  1066 + verificação.
  1067 + RESOURCES_ARR_P (array): Array com a lista de recursos a serem
  1068 + verificados na distro alvo.
  1069 +
  1070 + Returns:
  1071 + F_CHK_DISTRO_STATUS_R (str): Possui a saída do comando de
  1072 + verificação executado.
  1073 + '
  1074 +
  1075 + F_CHECK_RHEL_R=""
  1076 + DISTRO_NAME_P=$1
  1077 + RESOURCES_ARR_P=("${!2}")
  1078 + TOTAL_2=${#RESOURCES_ARR_P[*]}
  1079 + RES_OK_ARR=()
  1080 + REDHAT_ACTV=0
  1081 +
  1082 + CHK_RES_CMD=""
  1083 + if [ "$DISTRO_NAME_P" == "RedHat" ] ; then
  1084 + CHK_RES_CMD="subscription-manager list --consumed"
  1085 + f_get_stderr_stdout "$CHK_RES_CMD"
  1086 + F_CHK_DISTRO_STATUS_R=$F_GET_STDOUT_R
  1087 +
  1088 + # NOTE: To debug! By Questor
  1089 +# F_GET_STDOUT_R="No consumed subscription pools to list
  1090 +# "
  1091 +
  1092 + if [[ $F_GET_STDOUT_R == *"No consumed subscription pools to list"* ]] ; then
  1093 + f_get_stderr_stdout "yum repolist"
  1094 + F_CHK_DISTRO_STATUS_R=$F_GET_STDOUT_R
  1095 +
  1096 + # NOTE: To debug! By Questor
  1097 +# F_GET_STDOUT_R="Loaded plugins: product-id, rhnplugin, security, subscription-manager
  1098 +# This system is receiving updates from RHN Classic or RHN Satellite.
  1099 +# repo id repo name status
  1100 +# epel Extra Packages for Enterprise Linux 6 12125
  1101 +# rhel-x86_64-server-6 Red Hat Enterprise Linux Server (v. 6 14725
  1102 +# rhel-x86_64-server-optional-6 RHEL Server Optional (v. 6 64-bit x86_ 8257
  1103 +# rhel-x86_64-server-supplementary-6 RHEL Server Supplementary (v. 6 64-bit 483
  1104 +# repolist: 35590
  1105 +# "
  1106 +
  1107 + if [[ $F_GET_STDOUT_R == *"RHN Classic or Red Hat Satellite"* ]] ; then
  1108 + WAR_MSGS_STR="THE REDHAT IS APPARENTLY USING \"RHN Classic\" OR \"Red Hat Satellite\" TO ACCESS ITS RESOURCES!
  1109 +THIS INSTALLER WILL NOT VALIDATE THESE RESOURCES!"
  1110 + WAR_MSGS_STR+=$'\n\n'"FOR MORE INFORMATION TRY: \"yum repolist\"."
  1111 + f_warning_msg "$WAR_MSGS_STR" 1
  1112 + return 0
  1113 + fi
  1114 + else
  1115 + f_split "$F_GET_STDOUT_R" "Subscription Name:"
  1116 + fi
  1117 + elif [ "$DISTRO_NAME_P" == "SLES" ] ; then
  1118 + CHK_RES_CMD="zypper sl"
  1119 + f_get_stderr_stdout "$CHK_RES_CMD"
  1120 + f_split "$F_GET_STDOUT_R" "\n"
  1121 + F_CHK_DISTRO_STATUS_R=$F_GET_STDOUT_R
  1122 + fi
  1123 +
  1124 + F_SPLIT_R_0=("${F_SPLIT_R[@]}")
  1125 + TOTAL_0=${#F_SPLIT_R_0[*]}
  1126 + for (( i=0; i<=$(( $TOTAL_0 -1 )); i++ )) ; do
  1127 + if [[ "$DISTRO_NAME_P" == "RedHat" ]] ; then
  1128 + f_split "${F_SPLIT_R_0[$i]}" "\n"
  1129 + F_SPLIT_R_1=("${F_SPLIT_R[@]}")
  1130 + TOTAL_1=${#F_SPLIT_R_1[*]}
  1131 + CHK_ACTV=0
  1132 + for (( o=0; o<=$(( $TOTAL_1 -1 )); o++ )) ; do
  1133 + if [[ "${F_SPLIT_R_1[$o]}" == "Provides:"* ]] ; then
  1134 + CHK_ACTV=1
  1135 + fi
  1136 + if [ ${CHK_ACTV} -eq 1 ] ; then
  1137 + for (( w=0; w<=$(( $TOTAL_2 -1 )); w++ )) ; do
  1138 + if [[ "${F_SPLIT_R_1[$o]}" == *"${RESOURCES_ARR_P[$w]}" ]] ; then
  1139 + RES_OK_ARR+=($w)
  1140 + break
  1141 + fi
  1142 + done
  1143 + if [ ${REDHAT_ACTV} -eq 0 ] &&
  1144 + [[ "${F_SPLIT_R_1[$o]}" == "Active:"* ]] &&
  1145 + [[ "${F_SPLIT_R_1[$o]}" == *"True" ]] ; then
  1146 + REDHAT_ACTV=1
  1147 + fi
  1148 + fi
  1149 + done
  1150 + elif [[ "$DISTRO_NAME_P" == "SLES" ]] ; then
  1151 + REDHAT_ACTV=1
  1152 + f_split "${F_SPLIT_R_0[$i]}" "|"
  1153 + F_SPLIT_R_1=("${F_SPLIT_R[@]}")
  1154 + for (( w=0; w<=$(( $TOTAL_2 -1 )); w++ )) ; do
  1155 + if [[ "${F_SPLIT_R_1[1]}" == *"${RESOURCES_ARR_P[$w]}"* ]] ; then
  1156 + if [[ "${F_SPLIT_R_1[3]}" == *"Yes"* ]] ; then
  1157 + if [[ "${F_SPLIT_R_1[5]}" == *"Yes"* ]] ; then
  1158 + RES_OK_ARR+=($w)
  1159 + break
  1160 + fi
  1161 + fi
  1162 + fi
  1163 + done
  1164 + fi
  1165 + done
  1166 +
  1167 + WARNINGS_MSGS=()
  1168 + TOTAL_3=${#RES_OK_ARR[*]}
  1169 + for (( z=0; z<=$(( $TOTAL_2 -1 )); z++ )) ; do
  1170 + RES_OK_NOW=1
  1171 + for (( t=0; t<=$(( $TOTAL_3 -1 )); t++ )) ; do
  1172 + if (( ${RES_OK_ARR[$t]} == $z )); then
  1173 + RES_OK_NOW=0
  1174 + break
  1175 + fi
  1176 + done
  1177 + if (( $RES_OK_NOW == 1 )); then
  1178 + WARNINGS_MSGS+=("$DISTRO_NAME_P does not have access to this resource: \"${RESOURCES_ARR_P[$z]}\".")
  1179 + fi
  1180 + done
  1181 +
  1182 + # NOTE: Essa verificação é específica para o SLES. Não encontrei uma forma
  1183 + # melhor de fazê-la... mas funciona bem! By Questor
  1184 + if [[ "$DISTRO_NAME_P" == "SLES" ]] ; then
  1185 + CHK_RES_CMD=""
  1186 + f_get_stderr_stdout "zypper --non-interactive se hfsdfsdufnmfdns"
  1187 + f_split "$F_GET_STDERR_R" "\n"
  1188 + F_SPLIT_R_2=("${F_SPLIT_R[@]}")
  1189 + if [[ "${F_SPLIT_R_2[0]}" == *"Permission to access "* ]] && [[ "${F_SPLIT_R_2[0]}" == *" denied."* ]] ; then
  1190 + WARNINGS_MSGS+=("${F_SPLIT_R_2[0]}")
  1191 + fi
  1192 + fi
  1193 +
  1194 + TOTAL_4=${#WARNINGS_MSGS[*]}
  1195 + WAR_MSGS_STR=""
  1196 + USE_NEWLINE=""
  1197 + if [ ! $TOTAL_4 -eq 0 ] || [ $REDHAT_ACTV -eq 0 ]; then
  1198 + WAR_MSGS_STR="SOME PROBLEM APPEAR TO HAVE BEEN DETECTED ON"
  1199 + if [[ "$DISTRO_NAME_P" == "RedHat" ]] ; then
  1200 + WAR_MSGS_STR+=" REDHAT SUBSCRIPTION! "
  1201 + elif [[ "$DISTRO_NAME_P" == "SLES" ]] ; then
  1202 + WAR_MSGS_STR+=" SLES REGISTRATION! "
  1203 + fi
  1204 + WAR_MSGS_STR+="PLEASE CHECK IT!"
  1205 + for (( y=0; y<=$(( $TOTAL_4 -1 )); y++ )) ; do
  1206 + if (( $y == 0 )); then
  1207 + WAR_MSGS_STR+=$'\n\n'
  1208 + else
  1209 + USE_NEWLINE=$'\n'
  1210 + fi
  1211 + WAR_MSGS_STR+="$USE_NEWLINE -> ${WARNINGS_MSGS[$y]}"
  1212 + done
  1213 + if [ ! -z "$CHK_RES_CMD" ] ; then
  1214 + WAR_MSGS_STR+=$'\n\n'"FOR MORE INFORMATION TRY: \"$CHK_RES_CMD\"."
  1215 + fi
  1216 + f_warning_msg "$WAR_MSGS_STR" 1
  1217 + fi
  1218 +}
  1219 +
  1220 +F_STR_TRIM_R=""
  1221 +f_str_trim(){
  1222 + : 'Remover caracteres em branco (espaços) antes e/ou depois da string
  1223 + informada.
  1224 +
  1225 + Args:
  1226 + STR_VAL_P (str): String a ser ajustada.
  1227 + TRIM_MODE_P (Optional[int]): 0 - Remove à esquerda (leading); 1 -
  1228 + Remove à direita (trailing); 2 - Remove em ambos os lados. Padrão 0.
  1229 +
  1230 + Returns:
  1231 + F_STR_TRIM_R (str): String ajustada.
  1232 + '
  1233 +
  1234 + STR_VAL_P=$1
  1235 + TRIM_MODE_P=$2
  1236 + if [ -z "$TRIM_MODE_P" ] ; then
  1237 + TRIM_MODE_P=0
  1238 + fi
  1239 +
  1240 + case $TRIM_MODE_P in
  1241 + 0)
  1242 + STR_VAL_P="${STR_VAL_P#"${STR_VAL_P%%[![:space:]]*}"}"
  1243 + ;;
  1244 + 1)
  1245 + STR_VAL_P="${STR_VAL_P%"${STR_VAL_P##*[![:space:]]}"}"
  1246 + ;;
  1247 + 2)
  1248 + STR_VAL_P="${STR_VAL_P#"${STR_VAL_P%%[![:space:]]*}"}"
  1249 + STR_VAL_P="${STR_VAL_P%"${STR_VAL_P##*[![:space:]]}"}"
  1250 + ;;
  1251 + esac
  1252 + F_STR_TRIM_R="$STR_VAL_P"
  1253 +}
  1254 +
  1255 +F_SRV_MEMORY_R=0
  1256 +f_srv_memory() {
  1257 + : 'Informar sobre a memória do servidor.
  1258 +
  1259 + Returns:
  1260 + F_SRV_MEMORY_R (int): Quantidade de memória RAM do servidor em KBs.
  1261 + '
  1262 +
  1263 + f_get_stderr_stdout "cat /proc/meminfo"
  1264 + f_split "$F_GET_STDOUT_R" "\n"
  1265 + f_split "${F_SPLIT_R[0]}" "MemTotal:"
  1266 + f_split "${F_SPLIT_R[1]}" "kB"
  1267 + f_str_trim "${F_SPLIT_R[0]}" 2
  1268 + F_SRV_MEMORY_R=$F_STR_TRIM_R
  1269 +}
  1270 +
  1271 +# < --------------------------------------------------------------------------
  1272 +
  1273 +# > --------------------------------------------------------------------------
  1274 +# GRAFICO!
  1275 +# --------------------------------------
  1276 +
  1277 +f_indent() {
  1278 + : 'Definir uma tabulação para uma string informada.
  1279 +
  1280 + Exemplo de uso: echo "<STR_VALUE>" | f_indent 4
  1281 +
  1282 + Args:
  1283 + LEVEL_P (int): 2, 4 ou 8 espaços.
  1284 + '
  1285 +
  1286 + LEVEL_P=$1
  1287 + if [ ${LEVEL_P} -eq 2 ] ; then
  1288 + sed 's/^/ /';
  1289 + fi
  1290 + if [ ${LEVEL_P} -eq 4 ] ; then
  1291 + sed 's/^/ /';
  1292 + fi
  1293 + if [ ${LEVEL_P} -eq 8 ] ; then
  1294 + sed 's/^/ /';
  1295 + fi
  1296 +}
  1297 +
  1298 +f_open_main_section() {
  1299 + : 'Printar abertura de uma seção principal (agrupa outras seções).'
  1300 +
  1301 + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then
  1302 + return 0
  1303 + fi
  1304 + TITLE_P=$1
  1305 + echo "> =================================================================="
  1306 + if [ -n "$TITLE_P" ] ; then
  1307 + echo "$TITLE_P"
  1308 + f_div_section
  1309 + echo
  1310 + fi
  1311 +}
  1312 +
  1313 +f_close_main_section() {
  1314 + : 'Printar fechamento de uma seção principal (agrupa outras seções).'
  1315 +
  1316 + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then
  1317 + return 0
  1318 + fi
  1319 + echo "< =================================================================="
  1320 + echo
  1321 +}
  1322 +
  1323 +f_open_section() {
  1324 + : 'Printar abertura de uma seção.'
  1325 +
  1326 + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then
  1327 + return 0
  1328 + fi
  1329 + TITLE_P=$1
  1330 + echo "> ------------------------------------------------"
  1331 + if [ -n "$TITLE_P" ] ; then
  1332 + echo "$TITLE_P"
  1333 + f_div_section
  1334 + echo
  1335 + fi
  1336 +}
  1337 +
  1338 +f_close_section() {
  1339 + : 'Printar fechamento de uma seção.'
  1340 +
  1341 + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then
  1342 + return 0
  1343 + fi
  1344 + echo "< ------------------------------------------------"
  1345 + echo
  1346 +}
  1347 +
  1348 +f_div_section() {
  1349 + : 'Printar divisão em uma seção.'
  1350 +
  1351 + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then
  1352 + return 0
  1353 + fi
  1354 + echo "----------------------------------"
  1355 +}
  1356 +
  1357 +f_sub_section() {
  1358 + : 'Printar uma subseção.
  1359 +
  1360 + Args:
  1361 + TITLE_P (str): Título da subseção.
  1362 + TEXT_P (str): Texto da subseção.
  1363 + '
  1364 +
  1365 + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then
  1366 + return 0
  1367 + fi
  1368 + TITLE_P=$1
  1369 + TEXT_P=$2
  1370 + echo "> $TITLE_P" | f_indent 2
  1371 + echo
  1372 + echo "$TEXT_P" | f_indent 4
  1373 + echo
  1374 +}
  1375 +
  1376 +# < --------------------------------------------------------------------------
  1377 +
  1378 +# > --------------------------------------------------------------------------
  1379 +# APRESENTAÇÃO!
  1380 +# --------------------------------------
  1381 +
  1382 +f_begin() {
  1383 + : 'Printar uma abertura/apresentação para o instalador do produto.
  1384 +
  1385 + Usar no início da instalação.
  1386 +
  1387 + Args:
  1388 + TITLE_P (str): Título.
  1389 + VERSION_P (str): Versão do produto.
  1390 + ABOUT_P (str): Sobre o produto.
  1391 + WARNINGS_P (str): Avisos antes de continuar.
  1392 + COMPANY_P (str): Informações sobre a empresa.
  1393 + '
  1394 +
  1395 + clear
  1396 + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then
  1397 + return 0
  1398 + fi
  1399 + TITLE_P=$1
  1400 + VERSION_P=$2
  1401 + ABOUT_P=$3
  1402 + WARNINGS_P=$4
  1403 + COMPANY_P=$5
  1404 + f_open_section "$TITLE_P ($VERSION_P)"
  1405 + f_sub_section "ABOUT:" "$ABOUT_P"
  1406 + f_sub_section "WARNINGS:" "$WARNINGS_P"
  1407 + f_div_section
  1408 + echo "$COMPANY_P"
  1409 + f_close_section
  1410 + f_enter_to_cont
  1411 + clear
  1412 +}
  1413 +
  1414 +f_end() {
  1415 + : 'Printar uma fechamento/encerramento para o instalador do produto.
  1416 +
  1417 + Usar no final da instalação.
  1418 +
  1419 + Args:
  1420 + TITLE_P (str): Título.
  1421 + USEFUL_INFO_P (str): Informações úteis (uso básico etc...).
  1422 + '
  1423 +
  1424 + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then
  1425 + return 0
  1426 + fi
  1427 + TITLE_P=$1
  1428 + USEFUL_INFO_P=$2
  1429 + f_open_section "$TITLE_P"
  1430 + f_sub_section "USEFUL INFORMATION:" "$USEFUL_INFO_P"
  1431 + f_close_section
  1432 +}
  1433 +
  1434 +f_terms_licen() {
  1435 + : 'Printar os termos de licença/uso do produto.
  1436 +
  1437 + Pede que o usuário concorde com os termos.
  1438 +
  1439 + Args:
  1440 + TERMS_LICEN_P (str): Termos de licença/uso do produto.
  1441 + '
  1442 +
  1443 + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then
  1444 + return 0
  1445 + fi
  1446 + TERMS_LICEN_P=$1
  1447 + f_open_section "LICENSE/TERMS:"
  1448 + echo "$TERMS_LICEN_P" | f_indent 2
  1449 + echo
  1450 + f_div_section
  1451 + TITLE_F="BY ANSWERING YES (y) YOU WILL AGREE WITH TERMS AND CONDITIONS "\
  1452 +"PRESENTED! PROCEED?"
  1453 + f_yes_no "$TITLE_F"
  1454 + TITLE_F=""
  1455 + f_close_section
  1456 + sleep 1
  1457 + if [ ${YES_NO_R} -eq 0 ] ; then
  1458 + exit 0
  1459 + fi
  1460 + clear
  1461 +}
  1462 +
  1463 +f_instruct() {
  1464 + : 'Printar instruções sobre o produto.
  1465 +
  1466 + Args:
  1467 + INSTRUCT_P (str): Instruções sobre o produto.
  1468 + '
  1469 +
  1470 + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then
  1471 + return 0
  1472 + fi
  1473 + INSTRUCT_P=$1
  1474 + f_open_section "INSTRUCTIONS:"
  1475 + echo "$INSTRUCT_P" | f_indent 2
  1476 + echo
  1477 + f_close_section
  1478 + f_enter_to_cont
  1479 + clear
  1480 +}
  1481 +
  1482 +# < --------------------------------------------------------------------------
  1483 +
  1484 +# > --------------------------------------------------------------------------
  1485 +# ESQUEMAS CONDICIONAIS!
  1486 +# --------------------------------------
  1487 +
  1488 +YES_NO_R=0
  1489 +f_yes_no() {
  1490 + : 'Questiona ao usuário "yes" ou "no" sobre determinado algo.
  1491 +
  1492 + Args:
  1493 + QUESTION_P (str): Questionamento a ser feito.
  1494 +
  1495 + Returns:
  1496 + YES_NO_R (int): 1 - Yes; 0 - No.
  1497 + '
  1498 +
  1499 + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then
  1500 + return 0
  1501 + fi
  1502 + QUESTION_P=$1
  1503 + YES_NO_R=0
  1504 + read -r -p "$QUESTION_P (y/n) " RESP_V
  1505 + if [[ $RESP_V =~ ^([sS]|[yY])$ ]] ; then
  1506 + YES_NO_R=1
  1507 + elif [[ $RESP_V =~ ^([nN])$ ]] ; then
  1508 + echo "NO!"
  1509 + YES_NO_R=0
  1510 + else
  1511 + f_yes_no "$QUESTION_P"
  1512 + fi
  1513 +}
  1514 +
  1515 +# < --------------------------------------------------------------------------
@@ -1,1250 +0,0 @@ @@ -1,1250 +0,0 @@
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. "yum",  
277 - "apt-get" e "zypper" são suportados. Em caso diverso o script  
278 - exibe erro e para.  
279 - EXIST_MSG_P (Optional[str]): Mensagem a ser exibida se o  
280 - pacote já estiver instalado. Se vazio ou não informado não será  
281 - exibida mensagem.  
282 - SKIP_MSG_P (Optional[int]): Omite a mensagem. Padrão 0.  
283 -  
284 - Returns:  
285 - F_PACK_IS_INST_R (int): 1 - Instalado; 0 - Não instalado.  
286 - '  
287 -  
288 - PACKAGE_NM_P=$1  
289 - PACK_MANAG=$2  
290 - EXIST_MSG_P=$3  
291 - SKIP_MSG_P=$4  
292 -  
293 - if [ -z "$SKIP_MSG_P" ] ; then  
294 - SKIP_MSG_P=0  
295 - fi  
296 - if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then  
297 - SKIP_MSG_P=1  
298 - fi  
299 -  
300 - F_PACK_IS_INST_R=0  
301 - if [ "$PACK_MANAG" == "yum" ] ; then  
302 - if yum list installed "$PACKAGE_NM_P" >/dev/null 2>&1; then  
303 - if [ ${SKIP_MSG_P} -eq 0 ] && [ ! -z "$EXIST_MSG_P" ] ; then  
304 - f_div_section  
305 - echo "$EXIST_MSG_P"  
306 - f_div_section  
307 - f_enter_to_cont  
308 - fi  
309 - F_PACK_IS_INST_R=1  
310 - else  
311 - F_PACK_IS_INST_R=0  
312 - fi  
313 - elif [ "$PACK_MANAG" == "apt-get" ] ; then  
314 - if dpkg -s "$PACKAGE_NM_P" &> /dev/null; then  
315 - if [ ${SKIP_MSG_P} -eq 0 ] && [ ! -z "$EXIST_MSG_P" ] ; then  
316 - f_div_section  
317 - echo "$EXIST_MSG_P"  
318 - f_div_section  
319 - f_enter_to_cont  
320 - fi  
321 - F_PACK_IS_INST_R=1  
322 - else  
323 - F_PACK_IS_INST_R=0  
324 - fi  
325 - elif [ "$PACK_MANAG" == "zypper" ] ; then  
326 - if zypper se -i --match-word "$PACKAGE_NM_P" > /dev/null 2>&1; then  
327 - if [ ${SKIP_MSG_P} -eq 0 ] && [ ! -z "$EXIST_MSG_P" ] ; then  
328 - f_div_section  
329 - echo "$EXIST_MSG_P"  
330 - f_div_section  
331 - f_enter_to_cont  
332 - fi  
333 - F_PACK_IS_INST_R=1  
334 - else  
335 - F_PACK_IS_INST_R=0  
336 - fi  
337 - else  
338 - f_div_section  
339 - echo "ERROR! Not implemented for \"$PACK_MANAG\"!"  
340 - f_div_section  
341 - f_enter_to_cont  
342 - fi  
343 -}  
344 -  
345 -F_CHK_BY_PATH_HLP_R=0  
346 -f_chk_by_path_hlp() {  
347 - : 'Checar se um aplicativo/pacote/arquivo está presente/instalado  
348 - verificando-o através do seu caminho físico informando.  
349 -  
350 - Args:  
351 - PATH_VER_P (str): Caminho físico para o aplicativo/pacote.  
352 - VER_TYPE_P (str): Se o caminho físico é para um diretório ("d")  
353 - ou arquivo ("f").  
354 - EXIST_MSG_P (Optional[str]): Mensagem a ser "printada" caso o  
355 - aplicativo/pacote/arquivo exista. Se não informado ou vazio não  
356 - exibe a mensagem.  
357 - SKIP_MSG_P (Optional[int]): Não exibir mensagem.  
358 -  
359 - Returns:  
360 - F_CHK_BY_PATH_HLP_R (int): 0 - Não existe; 1 - Existe  
361 - ("printa" menssagem contida em EXIST_MSG_P).  
362 - '  
363 -  
364 - PATH_VER_P=$1  
365 - VER_TYPE_P=$2  
366 - EXIST_MSG_P=$3  
367 - SKIP_MSG_P=$4  
368 - if [ -z "$SKIP_MSG_P" ] ; then  
369 - SKIP_MSG_P=0  
370 - fi  
371 - if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then  
372 - SKIP_MSG_P=1  
373 - fi  
374 -  
375 - F_CHK_BY_PATH_HLP_R=0  
376 - f_chk_fd_fl "$PATH_VER_P" "$VER_TYPE_P"  
377 - if [ ${CHK_FD_FL_R} -eq 0 ] ; then  
378 - F_CHK_BY_PATH_HLP_R=0  
379 - else  
380 - if [ ${SKIP_MSG_P} -eq 0 ] && [ ! -z "$EXIST_MSG_P" ]; then  
381 - f_div_section  
382 - echo "$EXIST_MSG_P"  
383 - f_div_section  
384 - f_enter_to_cont  
385 - fi  
386 - F_CHK_BY_PATH_HLP_R=1  
387 - fi  
388 -}  
389 -  
390 -F_CHK_IPTABLES_R=0  
391 -f_chk_iptables() {  
392 - : 'Fazer verificações usando "iptables".  
393 -  
394 - Trata-se de um utilitário para fazer verificações diversas usando o  
395 - comando "iptables" NORMALMENTE CHECAR DE DETERMINADA PORTA ESTÁ  
396 - ABERTA.  
397 -  
398 - Ex 1.: f_chk_iptables 80  
399 - Ex 2.: f_chk_iptables 80 "Já está aberta!"  
400 - Ex 3.: f_chk_iptables 80 "Já está aberta!" 0 "ACCEPT" "tcp" "NEW"  
401 - Ex 4.: f_chk_iptables 80 "Já está aberta!" 0 "ACCEPT" "tcp" "NEW" 5  
402 -  
403 - Args:  
404 - PORT_P (int): Porta a ser verificada.  
405 - MSG_P (Optional[str]): Mensagem a ser exibida em caso de  
406 - verdadeiro para a verificação (normalmente porta aberta). Se vazio  
407 - ou não informado não será exibida mensagem.  
408 - SKIP_MSG_P (Optional[int]): Não exibir mensagem.  
409 - Padrão 0.  
410 - TARGET_P (Optional[str]): Padrão "ACCEPT".  
411 - PROT_P (Optional[str]): Padrão "tcp".  
412 - STATE_P (str): Padrão "".  
413 - POS_IN_CHAIN_P (int): Padrão "".  
414 -  
415 - Returns:  
416 - F_CHK_IPTABLES_R (int): 1 - Verdadeiro para a verificação;  
417 - 0 - Falso para a verificação.  
418 - '  
419 -  
420 - PORT_P=$1  
421 - MSG_P=$2  
422 - SKIP_MSG_P=$3  
423 -  
424 - if [ -z "$SKIP_MSG_P" ] ; then  
425 - SKIP_MSG_P=0  
426 - fi  
427 - if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then  
428 - SKIP_MSG_P=1  
429 - fi  
430 -  
431 - TARGET_P=$4  
432 - if [ -z "$TARGET_P" ] ; then  
433 - TARGET_P="ACCEPT"  
434 - fi  
435 - PROT_P=$5  
436 - if [ -z "$PROT_P" ] ; then  
437 - PROT_P="tcp"  
438 - fi  
439 - STATE_P=$6  
440 - if [ -z "$STATE_P" ] ; then  
441 - STATE_P=""  
442 - else  
443 - STATE_P="state $STATE_P "  
444 - fi  
445 - POS_IN_CHAIN_P=$7  
446 - if [ -z "$POS_IN_CHAIN_P" ] ; then  
447 - POS_IN_CHAIN_P=""  
448 - else  
449 - POS_IN_CHAIN_P=$(printf "%-9s" $POS_IN_CHAIN_P)  
450 - fi  
451 - 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")  
452 - if [ $? -eq 1 ] ; then  
453 - F_CHK_IPTABLES_R=1  
454 - else  
455 - if [ ${SKIP_MSG_P} -eq 0 ] && [ ! -z "$MSG_P" ] ; then  
456 - f_div_section  
457 - echo "$MSG_P"  
458 - f_div_section  
459 - f_enter_to_cont  
460 - fi  
461 - F_CHK_IPTABLES_R=0  
462 - fi  
463 -}  
464 -  
465 -F_IS_NOT_RUNNING_R=0  
466 -f_is_not_running() {  
467 - : 'Checar de determinado processo (pode ser um serviço) está  
468 - rodando.  
469 -  
470 - Args:  
471 - PROC_NM_P (str): Nome do processo (pode ser um serviço).  
472 - COND_MSG_P (Optional[str]): Mensagem a ser exibida se  
473 - verdadeira a verificação. Se vazio ou não informado não será  
474 - exibida mensagem.  
475 - CHK_INVERT (Optional[int]): Inverter a lógica da checagem.  
476 - Padrão 0.  
477 -  
478 - Returns:  
479 - F_IS_NOT_RUNNING_R (int): 1 - Se verdadeiro para a condição  
480 - analisada; 0 - Se falso para a condição analisada.  
481 - '  
482 -  
483 - PROC_NM_P=$1  
484 - COND_MSG_P=$2  
485 - CHK_INVERT=$3  
486 - if [ -z "$CHK_INVERT" ] ; then  
487 - CHK_INVERT=0  
488 - fi  
489 - F_IS_NOT_RUNNING_R=0  
490 -  
491 - # NOTE: A verificação "grep -v grep" é para que ele não dê positivo  
492 - # para o próprio comando grep! By Questor  
493 - F_IS_NOT_RUNNING_R=0  
494 - if [ ${CHK_INVERT} -eq 0 ] ; then  
495 - if ! ps aux | grep -v "grep" | grep "$PROC_NM_P" > /dev/null ; then  
496 - F_IS_NOT_RUNNING_R=1  
497 - fi  
498 - else  
499 - if ps aux | grep -v "grep" | grep "$PROC_NM_P" > /dev/null ; then  
500 - F_IS_NOT_RUNNING_R=1  
501 - fi  
502 - fi  
503 - if [ ${EZ_I_SKIP_ON_V} -eq 0 ] && [ ${F_IS_NOT_RUNNING_R} -eq 1 ] && [ ! -z "$COND_MSG_P" ] ; then  
504 - f_div_section  
505 - echo "$COND_MSG_P"  
506 - f_div_section  
507 - f_enter_to_cont  
508 - fi  
509 -}  
510 -  
511 -F_GET_STDERR_R=""  
512 -F_GET_STDOUT_R=""  
513 -F_GET_EXIT_CODE_R=0  
514 -f_get_stderr_stdout() {  
515 - : 'Executar um comando e colocar a saída de stderr e stdout nas  
516 - variáveis "F_GET_STDERR_R" e "F_GET_STDOUT_R"!.  
517 -  
518 - Args:  
519 - CMD_TO_EXEC (str): Comando a ser executado.  
520 -  
521 - Returns:  
522 - F_GET_STDERR_R (str): Saída para stderr.  
523 - F_GET_STDOUT_R (str): Saída para stdout.  
524 - '  
525 -  
526 - CMD_TO_EXEC=$1  
527 - F_GET_STDERR_R=""  
528 - F_GET_STDOUT_R=""  
529 - unset t_std t_err t_ret  
530 - eval "$( eval "$CMD_TO_EXEC" 2> >(t_err=$(cat); typeset -p t_err) > >(t_std=$(cat); typeset -p t_std); t_ret=$?; typeset -p t_ret )"  
531 - F_GET_EXIT_CODE_R=$t_ret  
532 - F_GET_STDERR_R=$t_err  
533 - F_GET_STDOUT_R=$t_std  
534 -}  
535 -  
536 -F_BAK_PATH_R=""  
537 -F_BAK_MD_R=0  
538 -f_ez_mv_bak() {  
539 - : 'Modifica o nome de um arquivo ou pasta para um nome de backup.  
540 -  
541 - Adiciona um sufixo ao nome no formato: "-D%Y-%m-%d-T%H-%M-%S.bak".  
542 -  
543 - Args:  
544 - TARGET (str): Caminho para o arquivo ou pasta alvo.  
545 - CONF_MSG_P (Optional[str]): Verificar se o usuário deseja ou  
546 - não backup. Se vazio ou não informado não será exibida mensagem.  
547 - SKIP_MSG_P (Optional[int]): Não exibir mensagem. Padrão 0.  
548 -  
549 - Returns:  
550 - F_BAK_PATH_R (str): Caminho para o arquivo ou pasta alvo com o  
551 - novo nome.  
552 - F_BAK_NAME_R (str): Nome do arquivo recém criado.  
553 - F_BAK_MD_R (int): 1 - Backup realizado; 0 - Backup não  
554 - realizado.  
555 - '  
556 -  
557 - TARGET=$1  
558 - CONF_MSG_P=$2  
559 - SKIP_MSG_P=$3  
560 - if [ -z "$SKIP_MSG_P" ] ; then  
561 - SKIP_MSG_P=0  
562 - fi  
563 - if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then  
564 - SKIP_MSG_P=1  
565 - fi  
566 -  
567 - MK_BAK=1  
568 - F_BAK_PATH_R=""  
569 - F_BAK_NAME_R=""  
570 - F_BAK_MD_R=0  
571 -  
572 - if [ ${SKIP_MSG_P} -eq 0 ] && [ ! -z "$CONF_MSG_P" ] ; then  
573 - f_div_section  
574 - f_yes_no "$CONF_MSG_P"  
575 - f_div_section  
576 - MK_BAK=$YES_NO_R  
577 - fi  
578 - if [ ${MK_BAK} -eq 1 ] ; then  
579 - SUFFIX=$(date +"-D%Y-%m-%d-T%H-%M-%S.bak")  
580 - NEW_NAME="$TARGET$SUFFIX"  
581 - mv "$TARGET" "$NEW_NAME"  
582 - F_BAK_PATH_R=$NEW_NAME  
583 - F_BAK_NAME_R="${NEW_NAME##*/}"  
584 - F_BAK_MD_R=1  
585 - fi  
586 -}  
587 -  
588 -f_error_exit() {  
589 - : '"Printa" uma mensagem de erro e encerra o instalador.  
590 -  
591 - Args:  
592 - ERROR_CAUSE_P (Optional[str]): Causa do erro.  
593 - '  
594 -  
595 - EZ_I_S_ON_HOLDER=$EZ_I_SKIP_ON_V  
596 - EZ_I_SKIP_ON_V=0  
597 - ERROR_CAUSE_P=$1  
598 - echo  
599 - f_open_section "E R R O R !"  
600 - ERROR_MSG_NOW_P="AN ERROR OCCURRED AND THIS INSTALLER WAS CLOSED!"  
601 - if [ ! -z "$ERROR_CAUSE_P" ] ; then  
602 - ERROR_MSG_NOW_P="$ERROR_MSG_NOW_P ERROR: \"$ERROR_CAUSE_P\""  
603 - fi  
604 - echo "$ERROR_MSG_NOW_P"  
605 - echo  
606 - f_close_section  
607 - EZ_I_SKIP_ON_V=$EZ_I_S_ON_HOLDER  
608 - exit 1  
609 -}  
610 -  
611 -f_warning_msg() {  
612 - : '"Printa" uma mensagem de aviso.  
613 -  
614 - Args:  
615 - WARNING_P (str): aviso.  
616 - ASK_FOR_CONT_P (Optional[int]): 1 - Checa se o usuário deseja  
617 - continuar com a instalação; 0 - Solicita que pressione "enter".  
618 - Padrão 0.  
619 - '  
620 -  
621 - EZ_I_S_ON_HOLDER=$EZ_I_SKIP_ON_V  
622 - EZ_I_SKIP_ON_V=0  
623 - WARNING_P=$1  
624 - ASK_FOR_CONT_P=$2  
625 - if [ -z "$ASK_FOR_CONT_P" ] ; then  
626 - ASK_FOR_CONT_P=0  
627 - fi  
628 - echo  
629 - f_open_section "W A R N I N G !"  
630 - echo "$WARNING_P"  
631 - echo  
632 - f_close_section  
633 - if [ ${ASK_FOR_CONT_P} -eq 0 ] ; then  
634 - f_enter_to_cont  
635 - else  
636 - f_continue  
637 - fi  
638 - EZ_I_SKIP_ON_V=$EZ_I_S_ON_HOLDER  
639 -}  
640 -  
641 -f_continue() {  
642 - : 'Questionar ao usuário se deseja continuar ou parar a instalação.  
643 -  
644 - Args:  
645 - NOTE_P (Optional[str]): Informações adicionais ao usuário.  
646 - '  
647 -  
648 - NOTE_P=$1  
649 - f_div_section  
650 - if [ -z "$NOTE_P" ] ; then  
651 - NOTE_P=""  
652 - else  
653 - NOTE_P=" (NOTE: \"$NOTE_P\")"  
654 - fi  
655 -  
656 - f_yes_no "CONTINUE? (USE \"n\" TO STOP THIS INSTALLER)$NOTE_P"  
657 - f_div_section  
658 - if [ ${YES_NO_R} -eq 0 ] ; then  
659 - exit 0  
660 - fi  
661 -}  
662 -  
663 -F_SPLIT_R=()  
664 -f_split() {  
665 - : 'Faz "split" em uma dada string e devolve um array.  
666 -  
667 - Args:  
668 - TARGET_P (str): String alvo do "split".  
669 - DELIMITER_P (Optional[str]): Delimitador usado no "split".  
670 - Se não informado o split vai ser feito por espaços em branco.  
671 -  
672 - Returns:  
673 - F_SPLIT_R (array): Array com a string fornecida separada pelo  
674 - delimitador informado.  
675 - '  
676 -  
677 - F_SPLIT_R=()  
678 - TARGET_P=$1  
679 - DELIMITER_P=$2  
680 - if [ -z "$DELIMITER_P" ] ; then  
681 - DELIMITER_P=" "  
682 - fi  
683 -  
684 - REMOVE_N=1  
685 - if [ "$DELIMITER_P" == "\n" ] ; then  
686 - REMOVE_N=0  
687 - fi  
688 -  
689 - if [ ${REMOVE_N} -eq 1 ] ; then  
690 -  
691 - # NOTE: Devido a limitações do bash temos alguns problemas para  
692 - # poder obter a saída de um split via awk dentro de um array e  
693 - # por isso precisamos do uso da "quebra de linha" (\n) para  
694 - # termos sucesso! Visto isso, removemos as quebras de linha  
695 - # momentaneamente depois as reintegramos! By Questor  
696 - TARGET_P=$(echo "$TARGET_P" | awk 'BEGIN {RS="dn" } {gsub("\n","£§¢¬¨") ;printf $0 }')  
697 - fi  
698 -  
699 - SPLIT_NOW=$(awk -F"$DELIMITER_P" '{for(i=1;i<=NF;i++){printf "%s\n", $i}}' <<<"${TARGET_P}")  
700 -  
701 - while IFS= read -r LINE_NOW; do  
702 - if [ ${REMOVE_N} -eq 1 ] ; then  
703 - LN_NOW_WITH_N=$(awk 'BEGIN {RS="dn"} {gsub("£§¢¬¨","\n") ;printf $0 }' <<<"${LINE_NOW}")  
704 - F_SPLIT_R+=("$LN_NOW_WITH_N")  
705 - else  
706 - F_SPLIT_R+=("$LINE_NOW")  
707 - fi  
708 - done <<< "$SPLIT_NOW"  
709 -}  
710 -  
711 -F_ABOUT_DISTRO_R=()  
712 -f_about_distro() {  
713 - : 'Obter informações sobre a distro.  
714 -  
715 - Returns:  
716 - F_ABOUT_DISTRO_R (array): Array com informações sobre a  
717 - distro na seguinte ordem: NAME, VERSION, BASED e ARCH.  
718 - '  
719 -  
720 - F_ABOUT_DISTRO_R=()  
721 - f_get_stderr_stdout "cat /etc/*-release"  
722 - ABOUT_INFO=$F_GET_STDOUT_R  
723 -  
724 - if [[ $ABOUT_INFO == *"ID=debian"* ]] ; then  
725 - f_split "$ABOUT_INFO" "\n"  
726 - F_SPLIT_R_0=("${F_SPLIT_R[@]}")  
727 - TOTAL_0=${#F_SPLIT_R_0[*]}  
728 - for (( i=0; i<=$(( $TOTAL_0 -1 )); i++ )) ; do  
729 - f_split "${F_SPLIT_R_0[$i]}" "="  
730 - F_SPLIT_R_1=("${F_SPLIT_R[@]}")  
731 - TOTAL_1=${#F_SPLIT_R_1[*]}  
732 - for (( o=0; o<=$(( $TOTAL_1 -1 )); o++ )) ; do  
733 - p=$[$o+1]  
734 - case "${F_SPLIT_R_1[$o]}" in  
735 - "NAME")  
736 - f_split "${F_SPLIT_R_1[$p]}" "\""  
737 - F_SPLIT_R_2=("${F_SPLIT_R[@]}")  
738 - F_ABOUT_DISTRO_R+=("${F_SPLIT_R_2[1]}")  
739 - ;;  
740 - "VERSION_ID")  
741 - f_split "${F_SPLIT_R_1[$p]}" "\""  
742 - F_SPLIT_R_3=("${F_SPLIT_R[@]}")  
743 - F_ABOUT_DISTRO_R+=("${F_SPLIT_R_3[1]}")  
744 - ;;  
745 - *)  
746 -  
747 - ;;  
748 - esac  
749 - done  
750 - done  
751 - F_ABOUT_DISTRO_R+=("Debian")  
752 - elif [[ $ABOUT_INFO == *"ID=\"sles\""* ]] ; then  
753 - f_split "$ABOUT_INFO" "\n"  
754 - F_SPLIT_R_0=("${F_SPLIT_R[@]}")  
755 - TOTAL_0=${#F_SPLIT_R_0[*]}  
756 - for (( i=0; i<=$(( $TOTAL_0 -1 )); i++ )) ; do  
757 - f_split "${F_SPLIT_R_0[$i]}" "="  
758 - F_SPLIT_R_1=("${F_SPLIT_R[@]}")  
759 - TOTAL_1=${#F_SPLIT_R_1[*]}  
760 - for (( o=0; o<=$(( $TOTAL_1 -1 )); o++ )) ; do  
761 - p=$[$o+1]  
762 - case "${F_SPLIT_R_1[$o]}" in  
763 - "NAME")  
764 - f_split "${F_SPLIT_R_1[$p]}" "\""  
765 - F_SPLIT_R_2=("${F_SPLIT_R[@]}")  
766 - F_ABOUT_DISTRO_R+=("${F_SPLIT_R_2[1]}")  
767 - ;;  
768 - "VERSION_ID")  
769 - f_split "${F_SPLIT_R_1[$p]}" "\""  
770 - F_SPLIT_R_3=("${F_SPLIT_R[@]}")  
771 - F_ABOUT_DISTRO_R+=("${F_SPLIT_R_3[1]}")  
772 - ;;  
773 - *)  
774 -  
775 - ;;  
776 - esac  
777 - done  
778 - done  
779 - F_ABOUT_DISTRO_R+=("Suse")  
780 - elif [[ $ABOUT_INFO == *"ID=opensuse"* ]] ||  
781 - [[ $ABOUT_INFO == *"ID_LIKE=\"suse\""* ]] ; then  
782 - f_split "$ABOUT_INFO" "\n"  
783 - F_SPLIT_R_0=("${F_SPLIT_R[@]}")  
784 - TOTAL_0=${#F_SPLIT_R_0[*]}  
785 - for (( i=0; i<=$(( $TOTAL_0 -1 )); i++ )) ; do  
786 - f_split "${F_SPLIT_R_0[$i]}" "="  
787 - F_SPLIT_R_1=("${F_SPLIT_R[@]}")  
788 - TOTAL_1=${#F_SPLIT_R_1[*]}  
789 - for (( o=0; o<=$(( $TOTAL_1 -1 )); o++ )) ; do  
790 - p=$[$o+1]  
791 - case "${F_SPLIT_R_1[$o]}" in  
792 - "NAME")  
793 - F_ABOUT_DISTRO_R+=("${F_SPLIT_R_1[$p]}")  
794 - ;;  
795 - "VERSION_ID")  
796 - f_split "${F_SPLIT_R_1[$p]}" "\""  
797 - F_SPLIT_R_3=("${F_SPLIT_R[@]}")  
798 - F_ABOUT_DISTRO_R+=("${F_SPLIT_R_3[1]}")  
799 - ;;  
800 - *)  
801 -  
802 - ;;  
803 - esac  
804 - done  
805 - done  
806 - F_ABOUT_DISTRO_R+=("Suse")  
807 - elif [[ $ABOUT_INFO == *"DISTRIB_ID=Ubuntu"* ]] ||  
808 - [[ $ABOUT_INFO == *"ID_LIKE=debian"* ]] ; then  
809 - f_split "$ABOUT_INFO" "\n"  
810 - F_SPLIT_R_0=("${F_SPLIT_R[@]}")  
811 - TOTAL_0=${#F_SPLIT_R_0[*]}  
812 - for (( i=0; i<=$(( $TOTAL_0 -1 )); i++ )) ; do  
813 - f_split "${F_SPLIT_R_0[$i]}" "="  
814 - F_SPLIT_R_1=("${F_SPLIT_R[@]}")  
815 - TOTAL_1=${#F_SPLIT_R_1[*]}  
816 - for (( o=0; o<=$(( $TOTAL_1 -1 )); o++ )) ; do  
817 - p=$[$o+1]  
818 - case "${F_SPLIT_R_1[$o]}" in  
819 - "DISTRIB_ID")  
820 - F_ABOUT_DISTRO_R+=("${F_SPLIT_R_1[$p]}")  
821 - ;;  
822 - "DISTRIB_RELEASE")  
823 - F_ABOUT_DISTRO_R+=("${F_SPLIT_R_1[$p]}")  
824 - ;;  
825 - *)  
826 -  
827 - ;;  
828 - esac  
829 - done  
830 - done  
831 - F_ABOUT_DISTRO_R+=("Debian")  
832 - elif [[ $ABOUT_INFO == *"CentOS release "* ]] ; then  
833 - f_split "$ABOUT_INFO" "\n"  
834 - F_SPLIT_R_0=("${F_SPLIT_R[1]}")  
835 - f_split "${F_SPLIT_R_0[0]}" " "  
836 - F_SPLIT_R_1=("${F_SPLIT_R[@]}")  
837 - F_ABOUT_DISTRO_R+=("${F_SPLIT_R_1[0]}")  
838 - F_ABOUT_DISTRO_R+=("${F_SPLIT_R_1[2]}")  
839 - F_ABOUT_DISTRO_R+=("RedHat")  
840 - elif [[ $ABOUT_INFO == *"Red Hat Enterprise Linux Server release "* ]] ; then  
841 - f_split "$ABOUT_INFO" "\n"  
842 - F_SPLIT_R_0=("${F_SPLIT_R[1]}")  
843 - f_split "${F_SPLIT_R_0[0]}" " "  
844 - F_SPLIT_R_1=("${F_SPLIT_R[@]}")  
845 - F_ABOUT_DISTRO_R+=("Red Hat Enterprise Linux Server")  
846 - F_ABOUT_DISTRO_R+=("${F_SPLIT_R_1[6]}")  
847 - F_ABOUT_DISTRO_R+=("RedHat")  
848 - else  
849 - F_ABOUT_DISTRO_R+=("Unknown")  
850 - F_ABOUT_DISTRO_R+=("Unknown")  
851 - F_ABOUT_DISTRO_R+=("Unknown")  
852 - fi  
853 - F_ABOUT_DISTRO_R+=($(arch))  
854 -}  
855 -  
856 -F_IS_ROOT_R=1  
857 -f_is_root() {  
858 - : 'Checar se o usuário é root.  
859 -  
860 - Args:  
861 - CHK_ONLY_P (Optional[int]): 1 - Apenas verifica e retorna o  
862 - resultado; 0 - Se não for root emite erro e encerra a execução.  
863 - Padrão 0.  
864 -  
865 - Returns:  
866 - F_IS_ROOT_R (int): 1 - É root; 0 - Não é root.  
867 - '  
868 -  
869 - CHK_ONLY_P=$1  
870 - if [ -z "$CHK_ONLY_P" ] ; then  
871 - CHK_ONLY_P=0  
872 - fi  
873 -  
874 - F_IS_ROOT_R=1  
875 - if [[ $EUID -ne 0 ]]; then  
876 - f_enter_to_cont "ERROR! You need to be root!"  
877 - F_IS_ROOT_R=0  
878 - if [ ${CHK_ONLY_P} -eq 0 ] ; then  
879 - f_error_exit  
880 - fi  
881 - fi  
882 -}  
883 -  
884 -F_CHK_DISTRO_STATUS_R=""  
885 -f_chk_distro_status() {  
886 - : 'Verifica se a distro informada está subscrita e/ou registrada  
887 - e/ou ativa perante os recursos informados.  
888 -  
889 - Args:  
890 - DISTRO_NAME_P (str): Nome da distro sobre a qual será executada  
891 - verificação.  
892 - RESOURCES_ARR_P (str): Array com a lista de recursos a serem  
893 - verificados na distro alvo.  
894 -  
895 - Returns:  
896 - F_CHK_DISTRO_STATUS_R (str): Possui a saída do comando de  
897 - verificação executado.  
898 - '  
899 -  
900 - F_CHECK_RHEL_R=""  
901 - DISTRO_NAME_P=$1  
902 - RESOURCES_ARR_P=("${!2}")  
903 - TOTAL_2=${#RESOURCES_ARR_P[*]}  
904 - RES_OK_ARR=()  
905 - REDHAT_ACTV=0  
906 -  
907 - CHK_RES_CMD=""  
908 - if [ "$DISTRO_NAME_P" == "RedHat" ] ; then  
909 - CHK_RES_CMD="subscription-manager list --consumed"  
910 - f_get_stderr_stdout "$CHK_RES_CMD"  
911 - F_CHK_DISTRO_STATUS_R=$F_GET_STDOUT_R  
912 -  
913 - # NOTE: To debug! By Questor  
914 -# F_GET_STDOUT_R="No consumed subscription pools to list  
915 -# "  
916 -  
917 - if [[ $F_GET_STDOUT_R == *"No consumed subscription pools to list"* ]] ; then  
918 - f_get_stderr_stdout "yum repolist"  
919 - F_CHK_DISTRO_STATUS_R=$F_GET_STDOUT_R  
920 -  
921 - # NOTE: To debug! By Questor  
922 -# F_GET_STDOUT_R="Loaded plugins: product-id, rhnplugin, security, subscription-manager  
923 -# This system is receiving updates from RHN Classic or RHN Satellite.  
924 -# repo id repo name status  
925 -# epel Extra Packages for Enterprise Linux 6 12125  
926 -# rhel-x86_64-server-6 Red Hat Enterprise Linux Server (v. 6 14725  
927 -# rhel-x86_64-server-optional-6 RHEL Server Optional (v. 6 64-bit x86_ 8257  
928 -# rhel-x86_64-server-supplementary-6 RHEL Server Supplementary (v. 6 64-bit 483  
929 -# repolist: 35590  
930 -# "  
931 -  
932 - if [[ $F_GET_STDOUT_R == *"RHN Classic or RHN Satellite"* ]] ; then  
933 - WAR_MSGS_STR="REDHAT IS APPARENTLY USING \"RHN Classic\" OR \"RHN Satellite\" TO ACCESS ITS RESOURCES!  
934 -THIS INSTALLER WILL NOT VALIDATE THESE RESOURCES!"  
935 - WAR_MSGS_STR+=$'\n\n'"FOR MORE INFORMATION TRY: \"yum repolist\"."  
936 - f_warning_msg "$WAR_MSGS_STR" 1  
937 - return 0  
938 - fi  
939 - else  
940 - f_split "$F_GET_STDOUT_R" "Subscription Name:"  
941 - fi  
942 - elif [ "$DISTRO_NAME_P" == "SLES" ] ; then  
943 - CHK_RES_CMD="zypper sl"  
944 - f_get_stderr_stdout "$CHK_RES_CMD"  
945 - f_split "$F_GET_STDOUT_R" "\n"  
946 - F_CHK_DISTRO_STATUS_R=$F_GET_STDOUT_R  
947 - fi  
948 -  
949 - F_SPLIT_R_0=("${F_SPLIT_R[@]}")  
950 - TOTAL_0=${#F_SPLIT_R_0[*]}  
951 - for (( i=0; i<=$(( $TOTAL_0 -1 )); i++ )) ; do  
952 - if [[ "$DISTRO_NAME_P" == "RedHat" ]] ; then  
953 - f_split "${F_SPLIT_R_0[$i]}" "\n"  
954 - F_SPLIT_R_1=("${F_SPLIT_R[@]}")  
955 - TOTAL_1=${#F_SPLIT_R_1[*]}  
956 - CHK_ACTV=0  
957 - for (( o=0; o<=$(( $TOTAL_1 -1 )); o++ )) ; do  
958 - if [[ "${F_SPLIT_R_1[$o]}" == "Provides:"* ]] ; then  
959 - CHK_ACTV=1  
960 - fi  
961 - if [ ${CHK_ACTV} -eq 1 ] ; then  
962 - for (( w=0; w<=$(( $TOTAL_2 -1 )); w++ )) ; do  
963 - if [[ "${F_SPLIT_R_1[$o]}" == *"${RESOURCES_ARR_P[$w]}" ]] ; then  
964 - RES_OK_ARR+=($w)  
965 - break  
966 - fi  
967 - done  
968 - if [ ${REDHAT_ACTV} -eq 0 ] &&  
969 - [[ "${F_SPLIT_R_1[$o]}" == "Active:"* ]] &&  
970 - [[ "${F_SPLIT_R_1[$o]}" == *"True" ]] ; then  
971 - REDHAT_ACTV=1  
972 - fi  
973 - fi  
974 - done  
975 - elif [[ "$DISTRO_NAME_P" == "SLES" ]] ; then  
976 - REDHAT_ACTV=1  
977 - f_split "${F_SPLIT_R_0[$i]}" "|"  
978 - F_SPLIT_R_1=("${F_SPLIT_R[@]}")  
979 - for (( w=0; w<=$(( $TOTAL_2 -1 )); w++ )) ; do  
980 - if [[ "${F_SPLIT_R_1[1]}" == *"${RESOURCES_ARR_P[$w]}"* ]] ; then  
981 - if [[ "${F_SPLIT_R_1[3]}" == *"Yes"* ]] ; then  
982 - if [[ "${F_SPLIT_R_1[5]}" == *"Yes"* ]] ; then  
983 - RES_OK_ARR+=($w)  
984 - break  
985 - fi  
986 - fi  
987 - fi  
988 - done  
989 - fi  
990 - done  
991 -  
992 - WARNINGS_MSGS=()  
993 - TOTAL_3=${#RES_OK_ARR[*]}  
994 - for (( z=0; z<=$(( $TOTAL_2 -1 )); z++ )) ; do  
995 - RES_OK_NOW=1  
996 - for (( t=0; t<=$(( $TOTAL_3 -1 )); t++ )) ; do  
997 - if (( ${RES_OK_ARR[$t]} == $z )); then  
998 - RES_OK_NOW=0  
999 - break  
1000 - fi  
1001 - done  
1002 - if (( $RES_OK_NOW == 1 )); then  
1003 - WARNINGS_MSGS+=("$DISTRO_NAME_P does not have access to this resource: \"${RESOURCES_ARR_P[$z]}\".")  
1004 - fi  
1005 - done  
1006 -  
1007 - TOTAL_4=${#WARNINGS_MSGS[*]}  
1008 - WAR_MSGS_STR=""  
1009 - USE_NEWLINE=""  
1010 - if [ ! $TOTAL_4 -eq 0 ] || [ $REDHAT_ACTV -eq 0 ]; then  
1011 - WAR_MSGS_STR="SOME PROBLEM APPEAR TO HAVE BEEN DETECTED ON"  
1012 - if [[ "$DISTRO_NAME_P" == "RedHat" ]] ; then  
1013 - WAR_MSGS_STR+=" REDHAT SUBSCRIPTION! "  
1014 - elif [[ "$DISTRO_NAME_P" == "SLES" ]] ; then  
1015 - WAR_MSGS_STR+=" SLES REGISTRATION! "  
1016 - fi  
1017 - WAR_MSGS_STR+="PLEASE CHECK IT!"  
1018 - for (( y=0; y<=$(( $TOTAL_4 -1 )); y++ )) ; do  
1019 - if (( $y == 0 )); then  
1020 - WAR_MSGS_STR+=$'\n\n'  
1021 - else  
1022 - USE_NEWLINE=$'\n'  
1023 - fi  
1024 - WAR_MSGS_STR+="$USE_NEWLINE -> ${WARNINGS_MSGS[$y]}"  
1025 - done  
1026 - WAR_MSGS_STR+=$'\n\n'"FOR MORE INFORMATION TRY: \"$CHK_RES_CMD\"."  
1027 - f_warning_msg "$WAR_MSGS_STR" 1  
1028 - fi  
1029 -}  
1030 -  
1031 -# < --------------------------------------------------------------------------  
1032 -  
1033 -# > --------------------------------------------------------------------------  
1034 -# GRAFICO!  
1035 -# --------------------------------------  
1036 -  
1037 -f_indent() {  
1038 - : 'Definir uma tabulação para uma string informada.  
1039 -  
1040 - Exemplo de uso: echo "<STR_VALUE>" | f_indent 4  
1041 -  
1042 - Args:  
1043 - LEVEL_P (int): 2, 4 ou 8 espaços.  
1044 - '  
1045 -  
1046 - LEVEL_P=$1  
1047 - if [ ${LEVEL_P} -eq 2 ] ; then  
1048 - sed 's/^/ /';  
1049 - fi  
1050 - if [ ${LEVEL_P} -eq 4 ] ; then  
1051 - sed 's/^/ /';  
1052 - fi  
1053 - if [ ${LEVEL_P} -eq 8 ] ; then  
1054 - sed 's/^/ /';  
1055 - fi  
1056 -}  
1057 -  
1058 -f_open_section() {  
1059 - : 'Printar abertura de uma seção.'  
1060 -  
1061 - if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then  
1062 - return 0  
1063 - fi  
1064 - TITLE_P=$1  
1065 - echo "> ------------------------------------------------"  
1066 - if [ -n "$TITLE_P" ] ; then  
1067 - echo "$TITLE_P"  
1068 - f_div_section  
1069 - echo  
1070 - fi  
1071 -}  
1072 -  
1073 -f_close_section() {  
1074 - : 'Printar fechamento de uma seção.'  
1075 -  
1076 - if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then  
1077 - return 0  
1078 - fi  
1079 - echo "< ------------------------------------------------"  
1080 - echo  
1081 -}  
1082 -  
1083 -f_div_section() {  
1084 - : 'Printar divisão em uma seção.'  
1085 -  
1086 - if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then  
1087 - return 0  
1088 - fi  
1089 - echo "----------------------------------"  
1090 -}  
1091 -  
1092 -f_sub_section() {  
1093 - : 'Printar uma subseção.  
1094 -  
1095 - Args:  
1096 - TITLE_P (str): Título da subseção.  
1097 - TEXT_P (str): Texto da subseção.  
1098 - '  
1099 -  
1100 - if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then  
1101 - return 0  
1102 - fi  
1103 - TITLE_P=$1  
1104 - TEXT_P=$2  
1105 - echo "> $TITLE_P" | f_indent 2  
1106 - echo  
1107 - echo "$TEXT_P" | f_indent 4  
1108 - echo  
1109 -}  
1110 -  
1111 -# < --------------------------------------------------------------------------  
1112 -  
1113 -# > --------------------------------------------------------------------------  
1114 -# APRESENTAÇÃO!  
1115 -# --------------------------------------  
1116 -  
1117 -f_begin() {  
1118 - : 'Printar uma abertura/apresentação para o instalador do produto.  
1119 -  
1120 - Usar no início da instalação.  
1121 -  
1122 - Args:  
1123 - TITLE_P (str): Título.  
1124 - VERSION_P (str): Versão do produto.  
1125 - ABOUT_P (str): Sobre o produto.  
1126 - WARNINGS_P (str): Avisos antes de continuar.  
1127 - COMPANY_P (str): Informações sobre a empresa.  
1128 - '  
1129 -  
1130 - clear  
1131 - if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then  
1132 - return 0  
1133 - fi  
1134 - TITLE_P=$1  
1135 - VERSION_P=$2  
1136 - ABOUT_P=$3  
1137 - WARNINGS_P=$4  
1138 - COMPANY_P=$5  
1139 - f_open_section "$TITLE_P ($VERSION_P)"  
1140 - f_sub_section "ABOUT:" "$ABOUT_P"  
1141 - f_sub_section "WARNINGS:" "$WARNINGS_P"  
1142 - f_div_section  
1143 - echo "$COMPANY_P"  
1144 - f_close_section  
1145 - f_enter_to_cont  
1146 - clear  
1147 -}  
1148 -  
1149 -f_end() {  
1150 - : 'Printar uma fechamento/encerramento para o instalador do produto.  
1151 -  
1152 - Usar no final da instalação.  
1153 -  
1154 - Args:  
1155 - TITLE_P (str): Título.  
1156 - USEFUL_INFO_P (str): Informações úteis (uso básico etc...).  
1157 - '  
1158 -  
1159 - if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then  
1160 - return 0  
1161 - fi  
1162 - TITLE_P=$1  
1163 - USEFUL_INFO_P=$2  
1164 - f_open_section "$TITLE_P"  
1165 - f_sub_section "USEFUL INFORMATION:" "$USEFUL_INFO_P"  
1166 - f_close_section  
1167 -}  
1168 -  
1169 -f_terms_licen() {  
1170 - : 'Printar os termos de licença/uso do produto.  
1171 -  
1172 - Pede que o usuário concorde com os termos.  
1173 -  
1174 - Args:  
1175 - TERMS_LICEN_P (str): Termos de licença/uso do produto.  
1176 - '  
1177 -  
1178 - if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then  
1179 - return 0  
1180 - fi  
1181 - TERMS_LICEN_P=$1  
1182 - f_open_section "LICENSE/TERMS:"  
1183 - echo "$TERMS_LICEN_P" | f_indent 2  
1184 - echo  
1185 - f_div_section  
1186 - TITLE_F="BY ANSWERING YES (y) YOU WILL AGREE WITH TERMS AND CONDITIONS "\  
1187 -"PRESENTED! PROCEED?"  
1188 - f_yes_no "$TITLE_F"  
1189 - TITLE_F=""  
1190 - f_close_section  
1191 - sleep 1  
1192 - if [ ${YES_NO_R} -eq 0 ] ; then  
1193 - exit 0  
1194 - fi  
1195 - clear  
1196 -}  
1197 -  
1198 -f_instruct() {  
1199 - : 'Printar instruções sobre o produto.  
1200 -  
1201 - Args:  
1202 - INSTRUCT_P (str): Instruções sobre o produto.  
1203 - '  
1204 -  
1205 - if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then  
1206 - return 0  
1207 - fi  
1208 - INSTRUCT_P=$1  
1209 - f_open_section "INSTRUCTIONS:"  
1210 - echo "$INSTRUCT_P" | f_indent 2  
1211 - echo  
1212 - f_close_section  
1213 - f_enter_to_cont  
1214 - clear  
1215 -}  
1216 -  
1217 -# < --------------------------------------------------------------------------  
1218 -  
1219 -# > --------------------------------------------------------------------------  
1220 -# ESQUEMAS CONDICIONAIS!  
1221 -# --------------------------------------  
1222 -  
1223 -YES_NO_R=0  
1224 -f_yes_no() {  
1225 - : 'Questiona ao usuário "yes" ou "no" sobre determinado algo.  
1226 -  
1227 - Args:  
1228 - QUESTION_P (str): Questionamento a ser feito.  
1229 -  
1230 - Returns:  
1231 - YES_NO_R (int): 1 - Yes; 0 - No.  
1232 - '  
1233 -  
1234 - if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then  
1235 - return 0  
1236 - fi  
1237 - QUESTION_P=$1  
1238 - YES_NO_R=0  
1239 - read -r -p "$QUESTION_P (y/n) " RESP_V  
1240 - if [[ $RESP_V =~ ^([sS]|[yY])$ ]] ; then  
1241 - YES_NO_R=1  
1242 - elif [[ $RESP_V =~ ^([nN])$ ]] ; then  
1243 - echo "NO!"  
1244 - YES_NO_R=0  
1245 - else  
1246 - f_yes_no "$QUESTION_P"  
1247 - fi  
1248 -}  
1249 -  
1250 -# < --------------------------------------------------------------------------  
install.bash 0 → 100755
@@ -0,0 +1,1094 @@ @@ -0,0 +1,1094 @@
  1 +#!/bin/bash
  2 +
  3 +# > -----------------------------------------
  4 +# Run that script with bash even if the user use sh/dash or any sh like
  5 +# interpreter. This way it correctly works with either:
  6 +# "sh ./my_script.bash" or "bash ./my_script.bash" or "./my_script.bash"
  7 +
  8 +if [ -z "$BASH_VERSION" ]
  9 +then
  10 + exec bash "$0" "$@"
  11 +fi
  12 +
  13 +# < -----------------------------------------
  14 +
  15 +# NOTE: Evita problemas com caminhos relativos! By Questor
  16 +SCRIPTDIR_V="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
  17 +. $SCRIPTDIR_V/ez_i.bash
  18 +
  19 +# > --------------------------------------------------------------------------
  20 +# INÍCIO!
  21 +# --------------------------------------
  22 +
  23 +read -d '' TITLE_F <<"EOF"
  24 +LBC - LBConverter Installer
  25 +EOF
  26 +
  27 +# NOTE: Para versionamento usar "MAJOR.MINOR.REVISION.BUILDNUMBER"!
  28 +# Usar a mesma versão contida no setup.py! By Questor
  29 +# http://programmers.stackexchange.com/questions/24987/what-exactly-is-the-build-number-in-major-minor-buildnumber-revision
  30 +
  31 +read -d '' VERSION_F <<"EOF"
  32 +0.1.1.0
  33 +EOF
  34 +
  35 +read -d '' ABOUT_F <<"EOF"
  36 +This script will install LBC - LBConverter the LightBase OCR (Optical Character
  37 +Recognition)/data extractor component that obtain data from submitted files!
  38 +
  39 +Have fun! =D
  40 +EOF
  41 +
  42 +read -d '' WARNINGS_F <<"EOF"
  43 +- This installer is compatible with RHEL, SUSE, Debian or distributions
  44 +based on these.
  45 +
  46 +- We RECOMMEND you...
  47 + Install all the components (answer yes to everything) and use the default
  48 + values. Except contrary guidance!
  49 + Check for previous installations! If there is previous
  50 + installations consider this variant in the process!
  51 + Although this is not mandatory, do the installation process in an
  52 + exclusive machine for this.
  53 +
  54 +- We NOTICE you...
  55 + This installer assumes that the target distribution has a "standard
  56 + setup". This may include components such as firewall, SELinux
  57 + and others.
  58 +
  59 +- We WARNING you...
  60 + THIS INSTALLER AND RESULTING PRODUCTS COMES WITH ABSOLUTELY NO WARRANTY!
  61 + USE AT YOUR OWN RISK! WE ARE NOT RESPONSIBLE FOR ANY DAMAGE TO YOURSELF,
  62 + HARDWARE, OR CO-WORKERS. EXCEPT IN CASES WHERE THERE ARE SIGNED CONTRACT
  63 + THAT REGULATES THIS!
  64 +EOF
  65 +
  66 +read -d '' COMPANY_F <<"EOF"
  67 +BR Light LTDA - LightBase Consulting in Public Software/LightBase Consultoria em Software Público
  68 +Free Software + Our Ideas = Best Solution!/Software Livre + Nossas Idéias = Melhor Solução!
  69 ++55-61-3347-1949 - http://www.LightBase.com.br - Brasil-DF
  70 +EOF
  71 +
  72 +f_begin "$TITLE_F" "$VERSION_F" "$ABOUT_F" "$WARNINGS_F" "$COMPANY_F"
  73 +ABOUT_F=""
  74 +WARNINGS_F=""
  75 +
  76 +# < --------------------------------------------------------------------------
  77 +
  78 +# > --------------------------------------------------------------------------
  79 +# TERMOS E LICENÇA!
  80 +# --------------------------------------
  81 +
  82 +read -d '' TERMS_LICEN_F <<"EOF"
  83 +BY USING THIS INSTALLER YOU ARE AGREEING TO THE TERMS OF USE OF ALL
  84 +INVOLVED SOFTWARE!
  85 +EOF
  86 +
  87 +f_terms_licen "$TERMS_LICEN_F"
  88 +TERMS_LICEN_F=""
  89 +
  90 +# < --------------------------------------------------------------------------
  91 +
  92 +# > -----------------------------------------
  93 +# Checar se o usuário é root!
  94 +
  95 +f_is_root
  96 +
  97 +# < -----------------------------------------
  98 +
  99 +# > --------------------------------------------------------------------------
  100 +# INTRUÇÕES!
  101 +# --------------------------------------
  102 +
  103 +read -d '' INSTRUCT_F <<"EOF"
  104 +- TO CANCEL installation at any time use Ctrl+c!
  105 +EOF
  106 +
  107 +f_instruct "$INSTRUCT_F"
  108 +INSTRUCT_F=""
  109 +
  110 +# < --------------------------------------------------------------------------
  111 +
  112 +DISTRO_TYPE=""
  113 +DISTRO_NAME=""
  114 +# > -----------------------------------------
  115 +# Checar se a distro é compatível!
  116 +
  117 +f_open_section
  118 +f_about_distro
  119 +f_div_section
  120 +echo "DISTRO INFORMATION:"
  121 +f_div_section
  122 +echo "NAME: .... ${F_ABOUT_DISTRO_R[0]}"
  123 +echo "VERSION: . ${F_ABOUT_DISTRO_R[1]}"
  124 +echo "BASED: ... ${F_ABOUT_DISTRO_R[2]}"
  125 +echo "ARCH: .... ${F_ABOUT_DISTRO_R[3]}"
  126 +f_div_section
  127 +
  128 +if [[ "${F_ABOUT_DISTRO_R[2]}" == "Debian" ]] || [[ "${F_ABOUT_DISTRO_R[2]}" == "RedHat" ]] ||
  129 + [[ "${F_ABOUT_DISTRO_R[2]}" == "Suse" ]] ; then
  130 + if [[ "${F_ABOUT_DISTRO_R[2]}" == "Debian" ]] ; then
  131 + DISTRO_TYPE="DEB"
  132 + if [[ "${F_ABOUT_DISTRO_R[0]}" == "Ubuntu" ]] ; then
  133 + DISTRO_NAME="Ubuntu"
  134 + if [[ "${F_ABOUT_DISTRO_R[1]}" != "14.04" ]] ; then
  135 + f_div_section
  136 + f_yes_no "Linux version may be incompatible with this installer (expected: 14.04/obtained: ${F_ABOUT_DISTRO_R[1]})! Continue?"
  137 + if [ ${YES_NO_R} -eq 0 ] ; then
  138 + exit 0
  139 + fi
  140 + fi
  141 + elif [[ "${F_ABOUT_DISTRO_R[0]}" == "Debian GNU/Linux" ]] ; then
  142 + DISTRO_NAME="Debian"
  143 + if [[ "${F_ABOUT_DISTRO_R[1]}" != "8" ]] ; then
  144 + f_div_section
  145 + f_yes_no "Linux version may be incompatible with this installer (expected: 8/obtained: ${F_ABOUT_DISTRO_R[1]})! Continue?"
  146 + if [ ${YES_NO_R} -eq 0 ] ; then
  147 + exit 0
  148 + fi
  149 + fi
  150 + else
  151 + f_div_section
  152 + f_yes_no "Linux distro may be incompatible with this installer (expected: Ubuntu or Debian/obtained: ${F_ABOUT_DISTRO_R[0]})! Continue?"
  153 + if [ ${YES_NO_R} -eq 0 ] ; then
  154 + exit 0
  155 + fi
  156 + fi
  157 + elif [[ "${F_ABOUT_DISTRO_R[2]}" == "RedHat" ]] ; then
  158 + DISTRO_TYPE="RH"
  159 + if [[ "${F_ABOUT_DISTRO_R[0]}" == "Red Hat Enterprise Linux Server" ]] ; then
  160 + DISTRO_NAME="RedHat"
  161 + if [[ "${F_ABOUT_DISTRO_R[1]}" != "7"* ]] ; then
  162 + f_div_section
  163 + f_yes_no "Linux version may be incompatible with this installer (expected: 7.X/obtained: ${F_ABOUT_DISTRO_R[1]})! Continue?"
  164 + if [ ${YES_NO_R} -eq 0 ] ; then
  165 + exit 0
  166 + fi
  167 + fi
  168 + elif [[ "${F_ABOUT_DISTRO_R[0]}" == "CentOS Linux" ]] ; then
  169 + DISTRO_NAME="CentOS"
  170 + if [[ "${F_ABOUT_DISTRO_R[1]}" != "7"* ]] ; then
  171 + f_div_section
  172 + f_yes_no "Linux version may be incompatible with this installer (expected: 7.X/obtained: ${F_ABOUT_DISTRO_R[1]})! Continue?"
  173 + if [ ${YES_NO_R} -eq 0 ] ; then
  174 + exit 0
  175 + fi
  176 + fi
  177 + else
  178 + f_div_section
  179 + f_yes_no "Linux distro may be incompatible with this installer (expected: CentOS or Red Hat Enterprise Linux Server/obtained: ${F_ABOUT_DISTRO_R[0]})! Continue?"
  180 + if [ ${YES_NO_R} -eq 0 ] ; then
  181 + exit 0
  182 + fi
  183 + fi
  184 + elif [[ "${F_ABOUT_DISTRO_R[2]}" == "Suse" ]] ; then
  185 + DISTRO_TYPE="SUSE"
  186 + if [[ "${F_ABOUT_DISTRO_R[0]}" == "openSUSE" ]] ; then
  187 + DISTRO_NAME="openSUSE"
  188 + if [[ "${F_ABOUT_DISTRO_R[1]}" != "13."* ]] ; then
  189 + f_div_section
  190 + f_yes_no "Linux version may be incompatible with this installer (expected: 13.X/obtained: ${F_ABOUT_DISTRO_R[1]})! Continue?"
  191 + if [ ${YES_NO_R} -eq 0 ] ; then
  192 + exit 0
  193 + fi
  194 + fi
  195 + elif [[ "${F_ABOUT_DISTRO_R[0]}" == "SLES" ]] ; then
  196 + DISTRO_NAME="SLES"
  197 + if [[ "${F_ABOUT_DISTRO_R[1]}" != "12."* ]] ; then
  198 + f_div_section
  199 + f_yes_no "Linux version may be incompatible with this installer (expected: 12.X/obtained: ${F_ABOUT_DISTRO_R[1]})! Continue?"
  200 + if [ ${YES_NO_R} -eq 0 ] ; then
  201 + exit 0
  202 + fi
  203 + fi
  204 + else
  205 + f_div_section
  206 + f_yes_no "Linux distro may be incompatible with this installer (expected: openSUSE or SUSE Linux Enterprise Server/obtained: ${F_ABOUT_DISTRO_R[0]})! Continue?"
  207 + if [ ${YES_NO_R} -eq 0 ] ; then
  208 + exit 0
  209 + fi
  210 + fi
  211 + fi
  212 +
  213 + if [[ "${F_ABOUT_DISTRO_R[3]}" != "x86_64" ]] ; then
  214 + f_enter_to_cont "Linux architecture completely incompatible with this installer (expected: x86_64/obtained: ${F_ABOUT_DISTRO_R[3]})!"
  215 + exit 0
  216 + fi
  217 +else
  218 + f_enter_to_cont "Linux distro completely incompatible with this installer (expected: Debian (or based) or RedHat (or based) or SUSE (or based)/obtained: ${F_ABOUT_DISTRO_R[2]})!"
  219 + exit 0
  220 +fi
  221 +f_close_section
  222 +
  223 +# < -----------------------------------------
  224 +
  225 +# > -----------------------------------------
  226 +# Dá ao usuário a possibilidade de usar o instalador no modo rápido. Bom para
  227 +# conhecer/testar o sistema de forma simples sem preucupar-se com configurações!
  228 +
  229 +# NOTE: É possível forçar o processo de instalação no modo rápido setando
  230 +# "FAST_INST" com 1! By Questor
  231 +FAST_INST=0
  232 +if [ ${FAST_INST} -eq 0 ] ; then
  233 + f_open_section
  234 + f_div_section
  235 + f_yes_no "Use fast install (use default values for most of the options)?
  236 +
  237 +NOTE: RECOMMENDED FOR THOSE who want to KNOW and TEST the LB system components
  238 +quickly and easily. DO NOT USE FOR PRODUCTION ENVIRONMENT! If YES the
  239 +installation of all LB system components MUST AND WILL BE LOCAL!
  240 +
  241 +Use it?"
  242 + if [ ${YES_NO_R} -eq 1 ] ; then
  243 +
  244 + # NOTE: Essa variável serve apenas para "preservar" o valor
  245 + # setado pelo usuário sendo somente "leitura". A variável a
  246 + # ser usada nas regras deve ser "EZ_I_SKIP_ON_V" (ez_i.bash)! Essa
  247 + # estratégia serve para mudarmos o comportamento do "ez_i.bash"
  248 + # de acordo com as circunstâncias! By Questor
  249 + FAST_INST=1
  250 +
  251 + # NOTE: Essa variável é para consumo do "ez_i.bash", para que ele
  252 + # não execute algumas funções e torne o processo de
  253 + # instalação mais simples! By Questor
  254 + EZ_I_SKIP_ON_V=1
  255 + fi
  256 + f_close_section
  257 + sleep 1
  258 +fi
  259 +
  260 +# < -----------------------------------------
  261 +
  262 +# > -----------------------------------------
  263 +# Desabilita o SElinux!
  264 +
  265 +if [[ "$DISTRO_TYPE" == "RH" ]] ; then
  266 + EZ_I_SKIP_ON_V=0
  267 + f_open_section
  268 + f_div_section
  269 + f_yes_no "Disable SElinux (use "y" if you never did it)?"
  270 + if [ ${YES_NO_R} -eq 1 ] ; then
  271 + setenforce 0
  272 +
  273 + # NOTE: As condições abaixo visam evitar que o arquivo seja
  274 + # desnecessariamente e erroneamente modificado! By Questor
  275 + EZ_I_SKIP_ON_V=$FAST_INST
  276 + f_fl_cont_str "# SELINUX=enforcing" "/etc/sysconfig/selinux" "The file \"/etc/sysconfig/selinux\" probably has already been changed! Check it!"
  277 + EZ_I_SKIP_ON_V=0
  278 + if [ ${FL_CONT_STR_R} -eq 0 ] ; then
  279 + f_fl_cont_str "SELINUX=disabled" "/etc/sysconfig/selinux"
  280 + if [ ${FL_CONT_STR_R} -eq 0 ] ; then
  281 + f_ez_sed "SELINUX=enforcing" "# SELINUX=enforcing\nSELINUX=disabled" "/etc/sysconfig/selinux"
  282 + fi
  283 + fi
  284 + fi
  285 + f_close_section
  286 +fi
  287 +
  288 +# < -----------------------------------------
  289 +
  290 +# > -----------------------------------------
  291 +# Atualizar a distro (repositório)!
  292 +
  293 +EZ_I_SKIP_ON_V=$FAST_INST
  294 +f_open_section
  295 +if [[ "$DISTRO_TYPE" == "RH" ]] ; then
  296 + if [[ "$DISTRO_NAME" == "RedHat" ]] ; then
  297 + RESOURCES_ARR_P=("Red Hat Enterprise Linux Server")
  298 + f_chk_distro_status "$DISTRO_NAME" RESOURCES_ARR_P[@]
  299 + fi
  300 + f_div_section
  301 + f_yes_no "Update your distro? (\"y\" highly recommended)"
  302 + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] || [ ${YES_NO_R} -eq 1 ] ; then
  303 + yum -y update
  304 + fi
  305 + f_pack_is_inst "git" "yum" "\"git\" already installed!"
  306 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  307 + yum -y install git
  308 + fi
  309 +elif [[ "$DISTRO_TYPE" == "DEB" ]] ; then
  310 + f_div_section
  311 + f_yes_no "Update your distro? (\"y\" highly recommended)"
  312 + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] || [ ${YES_NO_R} -eq 1 ] ; then
  313 + apt-get -y update
  314 + fi
  315 + f_pack_is_inst "git" "apt-get" "\"git\" already installed!"
  316 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  317 + apt-get -y install git
  318 + fi
  319 +elif [[ "$DISTRO_TYPE" == "SUSE" ]] ; then
  320 + if [[ "$DISTRO_NAME" == "SLES" ]] ; then
  321 + RESOURCES_ARR_P=("SUSE_Linux_Enterprise_Server_12_SP1_x86_64"
  322 +"SUSE_Linux_Enterprise_Software_Development_Kit_12_SP1_x86_64"
  323 +"Web_and_Scripting_Module_12_x86_64")
  324 + f_chk_distro_status "SLES" RESOURCES_ARR_P[@]
  325 + fi
  326 + f_div_section
  327 + f_yes_no "Update your distro? (\"y\" highly recommended)"
  328 + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] || [ ${YES_NO_R} -eq 1 ] ; then
  329 + zypper --non-interactive update
  330 + fi
  331 + f_pack_is_inst "git-core" "zypper" "\"git-core\" already installed!"
  332 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  333 + zypper --non-interactive install git-core
  334 + fi
  335 +fi
  336 +f_close_section
  337 +
  338 +# < -----------------------------------------
  339 +
  340 +# > -----------------------------------------
  341 +# Instalar pacotes que são comuns a determinados componentes!
  342 +
  343 +F_COM_PKS_INSTALLED=0
  344 +f_common_packs() {
  345 + : 'Instalar pacotes que são comuns a determinados componentes.'
  346 +
  347 + if [ ${F_COM_PKS_INSTALLED} -eq 0 ] ; then
  348 + if [[ "$DISTRO_TYPE" == "RH" ]] ; then
  349 + f_pack_is_inst "gcc-c++" "yum" "\"gcc-c++\" already installed!"
  350 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  351 + yum -y install gcc-c++
  352 + fi
  353 + f_pack_is_inst "autoconf" "yum" "\"autoconf\" already installed!"
  354 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  355 + yum -y install autoconf
  356 + fi
  357 + f_pack_is_inst "automake" "yum" "\"automake\" already installed!"
  358 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  359 + yum -y install automake
  360 + fi
  361 + f_pack_is_inst "libtool" "yum" "\"libtool\" already installed!"
  362 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  363 + yum -y install libtool
  364 + fi
  365 + f_pack_is_inst "zlib-devel" "yum" "\"zlib-devel\" already installed!"
  366 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  367 + yum -y install zlib-devel
  368 + fi
  369 + elif [[ "$DISTRO_TYPE" == "DEB" ]] ; then
  370 + f_pack_is_inst "g++" "apt-get" "\"g++\" already installed!"
  371 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  372 + apt-get -y install g++
  373 + fi
  374 + f_pack_is_inst "autoconf" "apt-get" "\"autoconf\" already installed!"
  375 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  376 + apt-get -y install autoconf
  377 + fi
  378 + f_pack_is_inst "make" "apt-get" "\"make\" already installed!"
  379 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  380 + apt-get -y install make
  381 + fi
  382 + f_pack_is_inst "libtool" "apt-get" "\"libtool\" already installed!"
  383 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  384 + apt-get -y install libtool
  385 + fi
  386 + f_pack_is_inst "zlib1g-dev" "apt-get" "\"zlib1g-dev\" already installed!"
  387 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  388 + apt-get -y install zlib1g-dev
  389 + fi
  390 + elif [[ "$DISTRO_TYPE" == "SUSE" ]] ; then
  391 + f_pack_is_inst "gcc-c++" "zypper" "\"gcc-c++\" already installed!"
  392 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  393 + zypper --non-interactive install gcc-c++
  394 + fi
  395 + if [[ "$DISTRO_NAME" != "SLES" ]] ; then
  396 + f_pack_is_inst "autoconf" "zypper" "\"autoconf\" already installed!"
  397 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  398 + zypper --non-interactive install autoconf
  399 + fi
  400 + f_pack_is_inst "automake" "zypper" "\"automake\" already installed!"
  401 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  402 + zypper --non-interactive install automake
  403 + fi
  404 + f_pack_is_inst "make" "zypper" "\"make\" already installed!"
  405 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  406 + zypper --non-interactive install make
  407 + fi
  408 + f_pack_is_inst "libtool" "zypper" "\"libtool\" already installed!"
  409 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  410 + zypper --non-interactive install libtool
  411 + fi
  412 + fi
  413 + f_pack_is_inst "zlib-devel" "zypper" "\"zlib-devel\" already installed!"
  414 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  415 + zypper --non-interactive install zlib-devel
  416 + fi
  417 + fi
  418 + F_COM_PKS_INSTALLED=1
  419 + fi
  420 +}
  421 +
  422 +# < -----------------------------------------
  423 +
  424 +# > -----------------------------------------
  425 +# Passa comando para serviços conforme a distro em execução!
  426 +
  427 +f_svc_helper() {
  428 + : 'Passa comando para serviços conforme a distro em execução.
  429 +
  430 + Args:
  431 + SVC_HLP_NM_P (str): Nome do serviço.
  432 + SVC_HLP_CMD_P (str): Comando para o serviço executar.
  433 + SVC_HLP_IN_SILENCE (Optional[int]): 1 - Sem saída para o terminal;
  434 + 0 - Com saída para o terminal. Padrão 0.
  435 + '
  436 +
  437 + SVC_HLP_NM_P=$1
  438 + SVC_HLP_CMD_P=$2
  439 +
  440 + SVC_HLP_IN_SILENCE=$3
  441 + if [ -z "$SVC_HLP_IN_SILENCE" ] ; then
  442 + SVC_HLP_IN_SILENCE=0
  443 + fi
  444 + if [ ${SVC_HLP_IN_SILENCE} -eq 1 ] ; then
  445 + SVC_HLP_SILENCE_CMD=" &>/dev/null"
  446 + fi
  447 +
  448 + if [[ "$DISTRO_TYPE" == "RH" ]] ; then
  449 + eval "systemctl $SVC_HLP_CMD_P $SVC_HLP_NM_P.service$SVC_HLP_SILENCE_CMD"
  450 + elif [[ "$DISTRO_TYPE" == "SUSE" ]] ; then
  451 + eval "service $SVC_HLP_NM_P $SVC_HLP_CMD_P$SVC_HLP_SILENCE_CMD"
  452 + elif [[ "$DISTRO_TYPE" == "DEB" ]] ; then
  453 + eval "service $SVC_HLP_NM_P $SVC_HLP_CMD_P$SVC_HLP_SILENCE_CMD"
  454 + fi
  455 +}
  456 +
  457 +# < -----------------------------------------
  458 +
  459 +# > -----------------------------------------
  460 +# Abrir o firewall para uma porta definida para um dado serviço
  461 +
  462 +f_fire_hlp() {
  463 + : 'Abrir o firewall para uma porta definida para um dado serviço.
  464 +
  465 + Args:
  466 + FIRE_SVC_NM_P (str): Nome do serviço.
  467 + FIRE_PORT_P (int): Porta a ser aberta.
  468 + '
  469 +
  470 + FIRE_SVC_NM_P=$1
  471 + FIRE_PORT_P=$2
  472 + if [[ "$DISTRO_TYPE" == "RH" ]] || [[ "$DISTRO_TYPE" == "SUSE" ]] ; then
  473 + EZ_I_SKIP_ON_V=$FAST_INST
  474 + if [[ "$DISTRO_TYPE" == "RH" ]] ; then
  475 + f_div_section
  476 + f_yes_no "Open firewall for $FIRE_SVC_NM_P (TCP $FIRE_PORT_P)?"
  477 + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] || [ ${YES_NO_R} -eq 1 ] ; then
  478 + f_chk_iptables $FIRE_PORT_P "Port $FIRE_PORT_P is already open!" 0 "ACCEPT" "tcp" "NEW"
  479 + if [ ${F_CHK_IPTABLES_R} -eq 1 ] ; then
  480 + firewall-cmd --zone=public --add-port=$FIRE_PORT_P/tcp --permanent
  481 + firewall-cmd --reload
  482 + fi
  483 + fi
  484 + elif [[ "$DISTRO_TYPE" == "SUSE" ]] ; then
  485 + f_div_section
  486 + f_yes_no "Open firewall for $FIRE_SVC_NM_P (TCP $FIRE_PORT_P)?"
  487 + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] || [ ${YES_NO_R} -eq 1 ] ; then
  488 + f_chk_iptables $FIRE_PORT_P "Port $FIRE_PORT_P is already open!" 0 "ACCEPT" "tcp"
  489 + if [ ${F_CHK_IPTABLES_R} -eq 1 ] ; then
  490 + SuSEfirewall2 open EXT TCP $FIRE_PORT_P
  491 + SuSEfirewall2 stop
  492 + SuSEfirewall2 start
  493 + fi
  494 + fi
  495 + fi
  496 + fi
  497 +}
  498 +
  499 +# < -----------------------------------------
  500 +
  501 +# > --------------------------------------------------------------------------
  502 +# INSTALAÇÃO DO LBC - LBConverter!
  503 +# --------------------------------------
  504 +
  505 +BASE_INST_DIR_V="/usr/local/lb"
  506 +# > -----------------------------------------
  507 +# Criar o diretório base da instalação!
  508 +
  509 +f_create_base_dir() {
  510 + EZ_I_SKIP_ON_V=$FAST_INST
  511 + QUESTION_F="Insert where the base installation directory (name \"lb\") will be created (don't use \"/\" at the end).
  512 +Use empty for \"/usr/local\"!"
  513 + f_div_section
  514 + f_get_usr_input "$QUESTION_F" 1
  515 + QUESTION_F=""
  516 + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] || [ -z "$GET_USR_INPUT_R" ] ; then
  517 + f_chk_by_path_hlp "$BASE_INST_DIR_V" "d" "\"$BASE_INST_DIR_V\" directory already created!"
  518 + if [ ${F_CHK_BY_PATH_HLP_R} -eq 0 ] ; then
  519 + mkdir -p "$BASE_INST_DIR_V"
  520 + fi
  521 + else
  522 + BASE_INST_DIR_V="$GET_USR_INPUT_R/lb"
  523 + f_chk_by_path_hlp "$BASE_INST_DIR_V" "d" "\"$BASE_INST_DIR_V\" directory already created!"
  524 + if [ ${F_CHK_BY_PATH_HLP_R} -eq 0 ] ; then
  525 + mkdir -p "$BASE_INST_DIR_V"
  526 + fi
  527 + fi
  528 +}
  529 +
  530 +# < -----------------------------------------
  531 +
  532 +# > -----------------------------------------
  533 +# Instalar o virtualenv-1.11.6 no python2.X!
  534 +
  535 +PYTHON_2_X=""
  536 +VE_2_X=""
  537 +f_inst_ve_py2X() {
  538 + : 'Instala a virtualenv no Python2.X!
  539 +
  540 + Args:
  541 + DONT_PROMPT_TO_INST (Optional[int]): Não questiona o usuário se deseja
  542 + instalar. Padrão 0.
  543 + '
  544 +
  545 + DONT_PROMPT_TO_INST=$1
  546 + if [ -z "$DONT_PROMPT_TO_INST" ] ; then
  547 + DONT_PROMPT_TO_INST=0
  548 + fi
  549 + if [[ "$DISTRO_TYPE" == "RH" ]] ; then
  550 + PYTHON_2_X="2.7"
  551 + VE_2_X="ve27"
  552 + elif [[ "$DISTRO_TYPE" == "DEB" ]] || [[ "$DISTRO_TYPE" == "SUSE" ]] ; then
  553 + PYTHON_2_X="2.7"
  554 + VE_2_X="ve27"
  555 + fi
  556 + if [ ${DONT_PROMPT_TO_INST} -eq 1 ] || [ ${FAST_INST} -eq 1 ] ; then
  557 + EZ_I_SKIP_ON_V=1
  558 + else
  559 + EZ_I_SKIP_ON_V=$FAST_INST
  560 + f_div_section
  561 + fi
  562 + f_yes_no "Install virtualenv-1.11.6 on python$PYTHON_2_X?"
  563 + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] || [ ${YES_NO_R} -eq 1 ] ; then
  564 + EZ_I_SKIP_ON_V=$FAST_INST
  565 + if [[ "$DISTRO_TYPE" == "RH" ]] || [[ "$DISTRO_TYPE" == "SUSE" ]] ; then
  566 + f_chk_by_path_hlp "/usr/bin/virtualenv-$PYTHON_2_X" "f" "virtualenv-1.11.6 already installed!"
  567 + elif [[ "$DISTRO_TYPE" == "DEB" ]] ; then
  568 + f_chk_by_path_hlp "/usr/local/bin/virtualenv-$PYTHON_2_X" "f" "virtualenv-1.11.6 already installed!"
  569 + fi
  570 + if [ ${F_CHK_BY_PATH_HLP_R} -eq 0 ] ; then
  571 + if [[ "$DISTRO_TYPE" == "RH" ]] ; then
  572 + f_pack_is_inst "python-setuptools" "yum" "\"python-setuptools\" already installed!"
  573 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  574 + yum -y install python-setuptools
  575 + fi
  576 + elif [[ "$DISTRO_TYPE" == "DEB" ]] ; then
  577 + f_pack_is_inst "python-setuptools" "apt-get" "\"python-setuptools\" already installed!"
  578 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  579 + apt-get -y install python-setuptools
  580 + fi
  581 + elif [[ "$DISTRO_TYPE" == "SUSE" ]] ; then
  582 + # >>>>>>>>>>>>> * Para "zypper --non-interactive install python-setuptools", se o problema abaixo aparecer...
  583 +
  584 + # Problem: python-setuptools-5.4.1-2.1.4.noarch requires python, but this requirement cannot be provided
  585 + # uninstallable providers: python-2.7.8-1.1.x86_64[openSUSE-13.2-0]
  586 + # python3-3.4.1-4.2.1.x86_64[openSUSE-13.2-0]
  587 + # python-2.7.8-1.1.i586[repo-oss]
  588 + # python3-3.4.1-4.2.1.i586[repo-oss]
  589 + # python-2.7.8-1.1.x86_64[repo-oss]
  590 + # python3-3.4.1-4.2.1.x86_64[repo-oss]
  591 + # Solution 1: deinstallation of patterns-openSUSE-minimal_base-conflicts-20141007-2.1.x86_64
  592 + # Solution 2: do not install python-setuptools-5.4.1-2.1.4.noarch
  593 + # Solution 3: do not install python-setuptools-5.4.1-2.1.4.noarch
  594 + # Solution 4: break python-setuptools-5.4.1-2.1.4.noarch by ignoring some of its dependencies
  595 +
  596 + # Choose from above solutions by number or cancel [1/2/3/4/c] (c):
  597 +
  598 + # <<<<<<<<<<<<<
  599 +
  600 + # >>>>>>>>>>>>> * Usar 1 e y...
  601 +
  602 + # Choose from above solutions by number or cancel [1/2/3/4/c] (c): 1
  603 + # Resolving dependencies...
  604 + # Resolving package dependencies...
  605 +
  606 + # The following 4 NEW packages are going to be installed:
  607 + # libsqlite3-0 python python-setuptools python-xml
  608 +
  609 + # The following package is going to be REMOVED:
  610 + # patterns-openSUSE-minimal_base-conflicts
  611 +
  612 + # The following pattern is going to be REMOVED:
  613 + # minimal_base-conflicts
  614 +
  615 + # 4 new packages to install, 1 to remove.
  616 + # Overall download size: 1.1 MiB. Already cached: 0 B After the operation, additional 4.2 MiB will be used.
  617 + # Continue? [y/n/? shows all options] (y):
  618 +
  619 + # <<<<<<<<<<<<<
  620 +
  621 + # f_pack_is_inst "python-setuptools" "zypper" "\"python-setuptools\" already installed!"
  622 + # if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  623 + # zypper --non-interactive install python-setuptools
  624 + # zypper --non-interactive install python-devel
  625 + # fi
  626 + f_pack_is_inst "python-setuptools" "zypper" "\"python-setuptools\" already installed!"
  627 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  628 + f_get_stderr_stdout "zypper --non-interactive install python-setuptools"
  629 + if [[ $F_GET_STDERR_R$F_GET_STDOUT_R == *"Problem: python-setuptools-"* ]] &&
  630 + [[ $F_GET_STDERR_R$F_GET_STDOUT_R == *".noarch requires python, but this requirement cannot be provided"* ]] ; then
  631 + EZ_I_SKIP_ON_V=0
  632 + f_enter_to_cont "The package management \"zypper\" WILL ASK YOU FOR ADDITIONAL OPTIONS!
  633 +We highly recommended you answer \"1\" and \"y\", respectively!"
  634 + EZ_I_SKIP_ON_V=$FAST_INST
  635 + zypper install python-setuptools
  636 + zypper --non-interactive install python-devel
  637 + else
  638 + echo "$F_GET_STDERR_R$F_GET_STDOUT_R"
  639 + fi
  640 + fi
  641 + fi
  642 + f_common_packs
  643 + cd "$SCRIPTDIR_V"
  644 + cd ./other-srcs-n-apps
  645 + tar -zxvf virtualenv-1.11.6.tar.gz
  646 + cd virtualenv-1.11.6
  647 + python$PYTHON_2_X setup.py install
  648 + cd ..
  649 + rm -rf virtualenv-1.11.6
  650 + fi
  651 + fi
  652 + EZ_I_SKIP_ON_V=$FAST_INST
  653 +}
  654 +
  655 +# < -----------------------------------------
  656 +
  657 +# > -----------------------------------------
  658 +# Criar o ambiente virtual (python2.X)!
  659 +
  660 +f_create_ve2X() {
  661 + : 'Cria o ambiente virtual (python2.X)!
  662 +
  663 + Args:
  664 + DONT_PROMPT_TO_INST (Optional[int]): Não questiona o usuário se deseja
  665 + criar. Padrão 0.
  666 + '
  667 +
  668 + DONT_PROMPT_TO_INST=$1
  669 + if [ -z "$DONT_PROMPT_TO_INST" ] ; then
  670 + DONT_PROMPT_TO_INST=0
  671 + fi
  672 + if [ ${DONT_PROMPT_TO_INST} -eq 1 ] || [ ${FAST_INST} -eq 1 ] ; then
  673 + EZ_I_SKIP_ON_V=1
  674 + else
  675 + EZ_I_SKIP_ON_V=$FAST_INST
  676 + fi
  677 + f_enter_to_cont "Create the virtual environment (python$PYTHON_2_X)!"
  678 + EZ_I_SKIP_ON_V=$FAST_INST
  679 + f_chk_by_path_hlp "$BASE_INST_DIR_V/$VE_2_X" "d" "Virtual environment (python$PYTHON_2_X) already created in \"$BASE_INST_DIR_V/$VE_2_X\"!"
  680 + if [ ${F_CHK_BY_PATH_HLP_R} -eq 0 ] ; then
  681 + f_common_packs
  682 + cd "$BASE_INST_DIR_V"
  683 + virtualenv-$PYTHON_2_X $VE_2_X
  684 + mkdir "$BASE_INST_DIR_V/$VE_2_X/src"
  685 + fi
  686 + EZ_I_SKIP_ON_V=$FAST_INST
  687 +}
  688 +
  689 +# < -----------------------------------------
  690 +
  691 +# > -----------------------------------------
  692 +# Instalar o catdoc, unzip e ImageMagick para o LBConverter!
  693 +
  694 +f_inst_catdoc_unzip_imagemagick() {
  695 + : 'Instala os componentes catdoc, unzip e imagemagick.
  696 +
  697 + Args:
  698 + DONT_PROMPT_TO_INST (Optional[int]): Não questiona o usuário se deseja
  699 + instalar. Padrão 0.
  700 + '
  701 +
  702 + DONT_PROMPT_TO_INST=$1
  703 + if [ -z "$DONT_PROMPT_TO_INST" ] ; then
  704 + DONT_PROMPT_TO_INST=0
  705 + fi
  706 + if [ ${DONT_PROMPT_TO_INST} -eq 1 ] || [ ${FAST_INST} -eq 1 ] ; then
  707 + EZ_I_SKIP_ON_V=1
  708 + else
  709 + EZ_I_SKIP_ON_V=$FAST_INST
  710 + f_div_section
  711 + fi
  712 +
  713 + INST_CATDOC_UNZIP_IMAGMAG=""
  714 + if [[ "$DISTRO_TYPE" == "RH" ]] ; then
  715 + INST_CATDOC_UNZIP_IMAGMAG="Install catdoc, unzip and ImageMagick?"
  716 + elif [[ "$DISTRO_TYPE" == "DEB" ]] ; then
  717 + INST_CATDOC_UNZIP_IMAGMAG="Install catdoc, unzip and ImageMagick?"
  718 + elif [[ "$DISTRO_TYPE" == "SUSE" ]] ; then
  719 + INST_CATDOC_UNZIP_IMAGMAG="Install catdoc and ImageMagick?"
  720 + fi
  721 +
  722 + f_yes_no "$INST_CATDOC_UNZIP_IMAGMAG"
  723 + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] || [ ${YES_NO_R} -eq 1 ] ; then
  724 + EZ_I_SKIP_ON_V=$FAST_INST
  725 + UP_CATDOC=1
  726 + f_chk_by_path_hlp "$BASE_INST_DIR_V/$VE_2_X/lib/catdoc-0.94.2" "d" "catdoc-0.94.2 already installed in \"$BASE_INST_DIR_V/$VE_2_X/lib/catdoc-0.94.2\"!"
  727 + if [ ${F_CHK_BY_PATH_HLP_R} -eq 1 ] ; then
  728 + if [ ${EZ_I_SKIP_ON_V} -eq 0 ] ; then
  729 + f_div_section
  730 + f_yes_no "Update/reinstall catdoc-0.94.2? (\"y\" recommended)"
  731 + UP_CATDOC=$YES_NO_R
  732 + if [ ${UP_CATDOC} -eq 1 ] ; then
  733 + rm -rf "$BASE_INST_DIR_V/$VE_2_X/lib/catdoc-0.94.2"
  734 + fi
  735 + fi
  736 + fi
  737 + if [ ${UP_CATDOC} -eq 1 ] ; then
  738 + if [[ "$DISTRO_TYPE" == "RH" ]] ; then
  739 + f_common_packs
  740 + f_pack_is_inst "unzip" "yum" "\"unzip\" already installed!"
  741 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  742 + yum -y install unzip
  743 + fi
  744 + f_pack_is_inst "ImageMagick" "yum" "\"ImageMagick\" already installed!"
  745 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  746 + yum -y install ImageMagick
  747 + fi
  748 + elif [[ "$DISTRO_TYPE" == "DEB" ]] ; then
  749 + f_common_packs
  750 + f_pack_is_inst "unzip" "apt-get" "\"unzip\" already installed!"
  751 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  752 + apt-get -y install unzip
  753 + fi
  754 + f_pack_is_inst "imagemagick" "apt-get" "\"imagemagick\" already installed!"
  755 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  756 + apt-get -y install imagemagick
  757 + fi
  758 + elif [[ "$DISTRO_TYPE" == "SUSE" ]] ; then
  759 + f_common_packs
  760 + f_pack_is_inst "ImageMagick" "zypper" "\"ImageMagick\" already installed!"
  761 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  762 + zypper --non-interactive install ImageMagick
  763 + fi
  764 + fi
  765 + cd "$SCRIPTDIR_V"
  766 + cd ./other-srcs-n-apps
  767 + tar -zxvf catdoc-0.94.2.tar.gz
  768 + mv ./catdoc-0.94.2 $BASE_INST_DIR_V/$VE_2_X/lib
  769 + cd $BASE_INST_DIR_V/$VE_2_X/lib/catdoc-0.94.2
  770 + ./configure
  771 + make && make install
  772 + fi
  773 + fi
  774 + EZ_I_SKIP_ON_V=$FAST_INST
  775 +}
  776 +
  777 +# < -----------------------------------------
  778 +
  779 +# > -----------------------------------------
  780 +# Instalar o tesseract-ocr-3.02.02!
  781 +
  782 +f_inst_tesseract() {
  783 + : 'Instala o tesseract.
  784 +
  785 + Args:
  786 + DONT_PROMPT_TO_INST (Optional[int]): Não questiona o usuário se deseja
  787 + instalar. Padrão 0.
  788 + '
  789 +
  790 + DONT_PROMPT_TO_INST=$1
  791 + if [ -z "$DONT_PROMPT_TO_INST" ] ; then
  792 + DONT_PROMPT_TO_INST=0
  793 + fi
  794 + if [ ${DONT_PROMPT_TO_INST} -eq 1 ] || [ ${FAST_INST} -eq 1 ] ; then
  795 + EZ_I_SKIP_ON_V=1
  796 + else
  797 + EZ_I_SKIP_ON_V=$FAST_INST
  798 + f_div_section
  799 + fi
  800 + f_yes_no "Install tesseract-ocr-3.02.02?"
  801 + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] || [ ${YES_NO_R} -eq 1 ] ; then
  802 + EZ_I_SKIP_ON_V=$FAST_INST
  803 + UP_TESSERACT_OCR=1
  804 + f_chk_by_path_hlp "/usr/local/lib/tesseract-ocr" "d" "tesseract-ocr-3.02.02 already installed in \"/usr/local/lib/tesseract-ocr\"!"
  805 + if [ ${F_CHK_BY_PATH_HLP_R} -eq 1 ] ; then
  806 + if [ ${EZ_I_SKIP_ON_V} -eq 0 ] ; then
  807 + f_div_section
  808 + f_yes_no "Update/reinstall tesseract-ocr-3.02.02? (\"y\" recommended)"
  809 + UP_TESSERACT_OCR=$YES_NO_R
  810 + fi
  811 + fi
  812 + if [ ${UP_TESSERACT_OCR} -eq 1 ] ; then
  813 + if [[ "$DISTRO_TYPE" == "RH" ]] ; then
  814 + f_common_packs
  815 + f_pack_is_inst "libpng12-devel" "yum" "\"libpng12-devel\" already installed!"
  816 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  817 + yum -y install libpng-devel
  818 + fi
  819 + f_pack_is_inst "libjpeg-turbo-devel" "yum" "\"libjpeg-turbo-devel\" already installed!"
  820 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  821 + yum -y install libjpeg-turbo-devel
  822 + fi
  823 + f_pack_is_inst "libtiff-devel" "yum" "\"libtiff-devel\" already installed!"
  824 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  825 + yum -y install libtiff-devel
  826 + fi
  827 + f_pack_is_inst "openjpeg-libs" "yum" "\"openjpeg-libs\" already installed!"
  828 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  829 + yum -y install openjpeg-libs
  830 + fi
  831 + f_pack_is_inst "giflib" "yum" "\"giflib\" already installed!"
  832 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  833 + yum -y install giflib
  834 + fi
  835 + if [[ "$DISTRO_NAME" == "RedHat" ]] ; then
  836 + f_pack_is_inst "libwebp" "yum" "\"libwebp\" already installed!"
  837 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  838 + yum -y install libwebp
  839 + fi
  840 + else
  841 + f_pack_is_inst "libwebp-devel" "yum" "\"libwebp-devel\" already installed!"
  842 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  843 + yum -y install libwebp-devel
  844 + fi
  845 + fi
  846 + elif [[ "$DISTRO_TYPE" == "DEB" ]] ; then
  847 + f_common_packs
  848 + f_pack_is_inst "libpng-dev" "apt-get" "\"libpng-dev\" already installed!"
  849 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  850 + apt-get -y install libpng-dev
  851 + fi
  852 + f_pack_is_inst "libjpeg-dev" "apt-get" "\"libjpeg-dev\" already installed!"
  853 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  854 + apt-get -y install libjpeg-dev
  855 + fi
  856 + f_pack_is_inst "libtiff-dev" "apt-get" "\"libtiff-dev\" already installed!"
  857 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  858 + apt-get -y install libtiff-dev
  859 + fi
  860 + f_pack_is_inst "libopenjpeg2" "apt-get" "\"libopenjpeg2\" already installed!"
  861 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  862 + apt-get -y install libopenjpeg2
  863 + fi
  864 + f_pack_is_inst "libgif-dev" "apt-get" "\"libgif-dev\" already installed!"
  865 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  866 + apt-get -y install libgif-dev
  867 + fi
  868 + f_pack_is_inst "libwebp-dev" "apt-get" "\"libwebp-dev\" already installed!"
  869 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  870 + apt-get -y install libwebp-dev
  871 + fi
  872 + elif [[ "$DISTRO_TYPE" == "SUSE" ]] ; then
  873 + f_common_packs
  874 + f_pack_is_inst "libpng-devel" "zypper" "\"libpng-devel\" already installed!"
  875 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  876 + zypper --non-interactive install libpng-devel
  877 + fi
  878 + f_pack_is_inst "libjpeg-devel" "zypper" "\"libjpeg-devel\" already installed!"
  879 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  880 + zypper --non-interactive install libjpeg-devel
  881 + fi
  882 + f_pack_is_inst "libtiff-devel" "zypper" "\"libtiff-devel\" already installed!"
  883 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  884 + zypper --non-interactive install libtiff-devel
  885 + fi
  886 + if [[ "$DISTRO_NAME" != "SLES" ]] ; then
  887 + f_pack_is_inst "libopenjp2-7" "zypper" "\"libopenjp2-7\" already installed!"
  888 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  889 + zypper --non-interactive install libopenjp2-7
  890 + fi
  891 + fi
  892 + f_pack_is_inst "libgif6" "zypper" "\"libgif6\" already installed!"
  893 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  894 + zypper --non-interactive install libgif6
  895 + fi
  896 + f_pack_is_inst "libwebp-devel" "zypper" "\"libwebp-devel\" already installed!"
  897 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  898 + zypper --non-interactive install libwebp-devel
  899 + fi
  900 + fi
  901 +
  902 + cd "$SCRIPTDIR_V"
  903 + cd ./other-srcs-n-apps
  904 +
  905 + tar -zxvf leptonica-1.71.tar.gz
  906 + mv ./leptonica-1.71 /usr/local/lib
  907 + cd /usr/local/lib/leptonica-1.71
  908 + ./autobuild
  909 + ./configure
  910 + make -j 4 && make install
  911 +
  912 + cd "$SCRIPTDIR_V"
  913 + cd ./other-srcs-n-apps
  914 +
  915 + tar -zxvf tesseract-ocr-3.02.02.tar.gz
  916 + mv ./tesseract-ocr /usr/local/lib
  917 + cd /usr/local/lib/tesseract-ocr
  918 + ./autogen.sh
  919 + ./configure
  920 + make -j 4 && make install
  921 + ldconfig
  922 +
  923 + cd "$SCRIPTDIR_V"
  924 + cd ./other-srcs-n-apps
  925 +
  926 + tar -zxvf tesseract-ocr-3.01.eng.tar.gz
  927 + tar -zxvf tesseract-ocr-3.02.por.tar.gz
  928 + mv ./tesseract-ocr /usr/local/lib/tesseract-ocr
  929 + cp /usr/local/lib/tesseract-ocr/tesseract-ocr/tessdata/eng.traineddata /usr/local/share/tessdata
  930 + export TESSDATA_PREFIX=/usr/local/lib/tesseract-ocr/tesseract-ocr
  931 +
  932 + fi
  933 + fi
  934 + EZ_I_SKIP_ON_V=$FAST_INST
  935 +}
  936 +
  937 +# < -----------------------------------------
  938 +
  939 +# > -----------------------------------------
  940 +# Instalar as dependências python2.X do LBC - LBConverter!
  941 +
  942 +f_inst_lbc_py_packs() {
  943 + : 'Instala as dependências do LBI - LBIndex!
  944 +
  945 + Args:
  946 + DONT_PROMPT_TO_INST (Optional[int]): Não questiona o usuário se deseja
  947 + instalar. Padrão 0.
  948 + '
  949 +
  950 + DONT_PROMPT_TO_INST=$1
  951 + if [ -z "$DONT_PROMPT_TO_INST" ] ; then
  952 + DONT_PROMPT_TO_INST=0
  953 + fi
  954 + if [ ${DONT_PROMPT_TO_INST} -eq 1 ] || [ ${FAST_INST} -eq 1 ] ; then
  955 + EZ_I_SKIP_ON_V=1
  956 + else
  957 + EZ_I_SKIP_ON_V=$FAST_INST
  958 + fi
  959 + cd "$SCRIPTDIR_V"
  960 + bash py-packs-LBConverter.bash "$EZ_I_SKIP_ON_V" "$BASE_INST_DIR_V" "$PYTHON_2_X" "$VE_2_X"
  961 + EZ_I_SKIP_ON_V=$FAST_INST
  962 +}
  963 +
  964 +# < -----------------------------------------
  965 +
  966 +HTTP_PORT_F=6544
  967 +# > -----------------------------------------
  968 +# Instalar e configurar o LBC - LBConverter!
  969 +
  970 +EZ_I_SKIP_ON_V=$FAST_INST
  971 +f_open_main_section
  972 +f_div_section
  973 +f_yes_no "Install the LBC - LBConverter?"
  974 +if [ ${EZ_I_SKIP_ON_V} -eq 1 ] || [ ${YES_NO_R} -eq 1 ] ; then
  975 +
  976 + # NOTE: As funções abaixo provêm recursos necessários ao
  977 + # LBC - LBConverter! By Questor
  978 + f_create_base_dir
  979 + f_inst_ve_py2X 1
  980 + f_create_ve2X 1
  981 + f_inst_catdoc_unzip_imagemagick 1
  982 + f_inst_tesseract 1
  983 + f_inst_lbc_py_packs 1
  984 +
  985 + f_chk_by_path_hlp "$BASE_INST_DIR_V/$VE_2_X/src/LBConverter" "d" "\"LBConverter\" already installed in \"$BASE_INST_DIR_V/$VE_2_X/src\"!"
  986 + F_BAK_MD_R=1
  987 + if [ ${F_CHK_BY_PATH_HLP_R} -eq 1 ] ; then
  988 + f_ez_mv_bak "$BASE_INST_DIR_V/$VE_2_X/src/LBConverter" "Backup old version and update? (\"y\" recommended)"
  989 + fi
  990 + if [ ${F_BAK_MD_R} -eq 1 ] ; then
  991 + cd "$SCRIPTDIR_V"
  992 + tar -zxvf LBConverter.tar.gz
  993 + mv "$SCRIPTDIR_V/LBConverter" "$BASE_INST_DIR_V/$VE_2_X/src/"
  994 + cd "$BASE_INST_DIR_V/$VE_2_X/src/LBConverter"
  995 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
  996 +
  997 + \cp "$BASE_INST_DIR_V/$VE_2_X/src/LBConverter/lbconverter-dist" "$BASE_INST_DIR_V/$VE_2_X/src/LBConverter/lbconverter-prov"
  998 +
  999 + if [[ "$DISTRO_TYPE" == "RH" ]] || [[ "$DISTRO_TYPE" == "SUSE" ]] ; then
  1000 + f_ez_sed "<LBI_SCRIPT_HEAD>" "# chkconfig: 2345 99 01\n# description: Esquema de inicialização do LBConverter\n# processname: lbconverter" "$BASE_INST_DIR_V/$VE_2_X/src/LBConverter/lbconverter-prov"
  1001 + elif [[ "$DISTRO_TYPE" == "DEB" ]] ; then
  1002 + f_ez_sed "<LBI_SCRIPT_HEAD>" "### BEGIN INIT INFO\n# Provides: lbconverter\n# Required-Start: \$remote_fs \$syslog\n# Required-Stop: \$remote_fs \$syslog\n# Default-Start: 2 3 4 5\n# Default-Stop: 0 1 6\n# Short-Description: Start daemon at boot time\n# Description: Enable service provided by daemon.\n### END INIT INFO" "$BASE_INST_DIR_V/$VE_2_X/src/LBConverter/lbconverter-prov"
  1003 + fi
  1004 +
  1005 + f_ez_sed "<LBCONVERTERMG_PATH>" "$BASE_INST_DIR_V/$VE_2_X/src/LBConverter/lbconvertermg" "$BASE_INST_DIR_V/$VE_2_X/src/LBConverter/lbconverter-prov"
  1006 + rm -rf "/etc/init.d/lbconverter"
  1007 + mv "$BASE_INST_DIR_V/$VE_2_X/src/LBConverter/lbconverter-prov" "/etc/init.d/lbconverter"
  1008 +
  1009 + cd /etc/init.d/
  1010 + if [[ "$DISTRO_TYPE" == "RH" ]] || [[ "$DISTRO_TYPE" == "SUSE" ]] ; then
  1011 +
  1012 + # TODO: A linha logo abaixo é realmente necessária? Rever p/ os outros instaladores tb! By Questor
  1013 + chmod 755 lbconverter
  1014 + chkconfig --add lbconverter &>/dev/null
  1015 + chkconfig --level 345 lbconverter on
  1016 + elif [[ "$DISTRO_TYPE" == "DEB" ]] ; then
  1017 + update-rc.d -f lbconverter remove &>/dev/null
  1018 + chmod +x ./lbconverter
  1019 + update-rc.d lbconverter defaults
  1020 + fi
  1021 +
  1022 + \cp "$BASE_INST_DIR_V/$VE_2_X/src/LBConverter/lbconvertermg-dist" "$BASE_INST_DIR_V/$VE_2_X/src/LBConverter/lbconvertermg"
  1023 + f_ez_sed "<VIRTUALENV_PATH>" "$BASE_INST_DIR_V/$VE_2_X" "$BASE_INST_DIR_V/$VE_2_X/src/LBConverter/lbconvertermg"
  1024 +
  1025 + LBG_URL_F="http://127.0.0.1:8008/lbg"
  1026 + QUESTION_F="Enter the LBG - LBGenerator URL.
  1027 +Use empty for \"$LBG_URL_F\" (LOCALHOST)!"
  1028 +
  1029 + f_div_section
  1030 + f_get_usr_input "$QUESTION_F" 1
  1031 + QUESTION_F=""
  1032 + if [ -n "$GET_USR_INPUT_R" ] ; then
  1033 + LBG_URL_F=$GET_USR_INPUT_R
  1034 + fi
  1035 +
  1036 + QUESTION_F="Enter the port number for http service.
  1037 +Use empty for \"$HTTP_PORT_F\" (recommended)!"
  1038 +
  1039 + f_div_section
  1040 + f_get_usr_input "$QUESTION_F" 1
  1041 + QUESTION_F=""
  1042 + if [ -n "$GET_USR_INPUT_R" ] ; then
  1043 + HTTP_PORT_F=$GET_USR_INPUT_R
  1044 + fi
  1045 +
  1046 + \cp "$BASE_INST_DIR_V/$VE_2_X/src/LBConverter/production.ini-dist" "$BASE_INST_DIR_V/$VE_2_X/src/LBConverter/production.ini"
  1047 + f_ez_sed "<HTTP_SERVICE_PORT_NUM>" "$HTTP_PORT_F" "$BASE_INST_DIR_V/$VE_2_X/src/LBConverter/production.ini"
  1048 + f_ez_sed "<MACHINE_IP_OR_NAME>" "$LBG_URL_F" "$BASE_INST_DIR_V/$VE_2_X/src/LBConverter/production.ini"
  1049 +
  1050 + f_svc_helper "lbconverter" "restart"
  1051 + fi
  1052 + f_fire_hlp "lbconverter" $HTTP_PORT_F
  1053 +fi
  1054 +f_close_main_section
  1055 +
  1056 +# < -----------------------------------------
  1057 +
  1058 +# < --------------------------------------------------------------------------
  1059 +
  1060 +# > --------------------------------------------------------------------------
  1061 +# FINAL!
  1062 +# --------------------------------------
  1063 +
  1064 +EZ_I_SKIP_ON_V=0
  1065 +read -d '' TITLE_F <<"EOF"
  1066 +Installer finished! Thanks!
  1067 +EOF
  1068 +
  1069 +LBC_SVC_SYNTAX=""
  1070 +if [[ "$DISTRO_TYPE" == "RH" ]] ; then
  1071 + LBC_SVC_SYNTAX="systemctl start lbconverter.service
  1072 + systemctl stop lbconverter.service"
  1073 +else
  1074 + LBC_SVC_SYNTAX="service lbconverter start
  1075 + service lbconverter stop"
  1076 +fi
  1077 +
  1078 +USEFUL_INFO_F="To configure...
  1079 + vi $BASE_INST_DIR_V/$VE_2_X/src/LBConverter/production.ini
  1080 +
  1081 +python$PYTHON_2_X virtual environment path...
  1082 + $BASE_INST_DIR_V/$VE_2_X
  1083 +
  1084 +To start/stop...
  1085 + $LBC_SVC_SYNTAX
  1086 +
  1087 +Log...
  1088 + less /var/log/lbconverter.log"
  1089 +
  1090 +f_end "$TITLE_F" "$USEFUL_INFO_F"
  1091 +TITLE_F=""
  1092 +USEFUL_INFO_F=""
  1093 +
  1094 +# < --------------------------------------------------------------------------
install.sh
@@ -1,886 +0,0 @@ @@ -1,886 +0,0 @@
1 -#!/bin/bash  
2 -  
3 -# > -----------------------------------------  
4 -# Run that script with bash even if the user use sh/dash or any sh like  
5 -# interpreter. This way it correctly works with either:  
6 -# "sh ./my_script.sh" or "bash ./my_script.sh" or "./my_script.sh"  
7 -  
8 -if [ -z "$BASH_VERSION" ]  
9 -then  
10 - exec bash "$0" "$@"  
11 -fi  
12 -  
13 -# < -----------------------------------------  
14 -  
15 -# NOTE: Evita problemas com caminhos relativos! By Questor  
16 -SCRIPTDIR_V="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"  
17 -. $SCRIPTDIR_V/ez_i.sh  
18 -  
19 -# > --------------------------------------------------------------------------  
20 -# INÍCIO!  
21 -# --------------------------------------  
22 -  
23 -read -d '' TITLE_F <<"EOF"  
24 -LBC - LBConverter Installer  
25 -EOF  
26 -  
27 -read -d '' VERSION_F <<"EOF"  
28 -1.0.0.0  
29 -EOF  
30 -  
31 -read -d '' ABOUT_F <<"EOF"  
32 -This script will install LBC - LBConverter the LightBase OCR (Optical Character  
33 -Recognition)/data extractor component that obtain data from submitted files!  
34 -  
35 -Have fun! =D  
36 -EOF  
37 -  
38 -read -d '' WARNINGS_F <<"EOF"  
39 -- This installer is compatible with RHEL, SUSE, Debian or distributions  
40 -based on these.  
41 -  
42 -- We RECOMMEND you...  
43 - Install all the components (answer yes to everything). Except  
44 - contrary guidance!  
45 - Check for previous installations! If there is previous  
46 - installations consider this variant in the process!  
47 - Although this is not mandatory, do the installation process in an  
48 - exclusive machine for this.  
49 -  
50 -- We NOTICE you...  
51 - This installer assumes that the target distribution has a "standard  
52 - setup". This may include components such as firewall, SELinux  
53 - and others.  
54 -  
55 -- We WARNING you...  
56 - THIS INSTALLER AND RESULTING PRODUCTS COMES WITH ABSOLUTELY NO WARRANTY!  
57 - USE AT YOUR OWN RISK! WE ARE NOT RESPONSIBLE FOR ANY DAMAGE TO YOURSELF,  
58 - HARDWARE, OR CO-WORKERS. EXCEPT IN CASES WHERE THERE ARE SIGNED CONTRACT  
59 - THAT REGULATES THIS!  
60 -EOF  
61 -  
62 -read -d '' COMPANY_F <<"EOF"  
63 -BR Light LTDA - LightBase Consulting in Public Software/LightBase Consultoria em Software Público  
64 -Free Software + Our Ideas = Best Solution!/Software Livre + Nossas Idéias = Melhor Solução!  
65 -+55-61-3347-1949 - http://www.LightBase.com.br - Brasil-DF  
66 -EOF  
67 -  
68 -f_begin "$TITLE_F" "$VERSION_F" "$ABOUT_F" "$WARNINGS_F" "$COMPANY_F"  
69 -ABOUT_F=""  
70 -WARNINGS_F=""  
71 -  
72 -# < --------------------------------------------------------------------------  
73 -  
74 -# > --------------------------------------------------------------------------  
75 -# TERMOS E LICENÇA!  
76 -# --------------------------------------  
77 -  
78 -read -d '' TERMS_LICEN_F <<"EOF"  
79 -BY USING THIS INSTALLER YOU ARE AGREEING TO THE TERMS OF USE OF ALL  
80 -INVOLVED SOFTWARE!  
81 -EOF  
82 -  
83 -f_terms_licen "$TERMS_LICEN_F"  
84 -TERMS_LICEN_F=""  
85 -  
86 -# < --------------------------------------------------------------------------  
87 -  
88 -# > -----------------------------------------  
89 -# Checar se o usuário é root!  
90 -  
91 -f_is_root  
92 -  
93 -# < -----------------------------------------  
94 -  
95 -# > --------------------------------------------------------------------------  
96 -# INTRUÇÕES!  
97 -# --------------------------------------  
98 -  
99 -read -d '' INSTRUCT_F <<"EOF"  
100 -- TO CANCEL installation at any time use Ctrl+c!  
101 -EOF  
102 -  
103 -f_instruct "$INSTRUCT_F"  
104 -INSTRUCT_F=""  
105 -  
106 -# < --------------------------------------------------------------------------  
107 -  
108 -DISTRO_TYPE=""  
109 -DISTRO_NAME=""  
110 -# > -----------------------------------------  
111 -# Checar se a distro é compatível!  
112 -  
113 -f_open_section  
114 -f_about_distro  
115 -f_div_section  
116 -echo "DISTRO INFORMATION:"  
117 -f_div_section  
118 -echo "NAME: .... ${F_ABOUT_DISTRO_R[0]}"  
119 -echo "VERSION: . ${F_ABOUT_DISTRO_R[1]}"  
120 -echo "BASED: ... ${F_ABOUT_DISTRO_R[2]}"  
121 -echo "ARCH: .... ${F_ABOUT_DISTRO_R[3]}"  
122 -f_div_section  
123 -  
124 -if [[ "${F_ABOUT_DISTRO_R[2]}" == "Debian" ]] || [[ "${F_ABOUT_DISTRO_R[2]}" == "RedHat" ]] ||  
125 - [[ "${F_ABOUT_DISTRO_R[2]}" == "Suse" ]] ; then  
126 - if [[ "${F_ABOUT_DISTRO_R[2]}" == "Debian" ]] ; then  
127 - DISTRO_TYPE="DEB"  
128 - if [[ "${F_ABOUT_DISTRO_R[0]}" == "Ubuntu" ]] ; then  
129 - DISTRO_NAME="Ubuntu"  
130 - if [[ "${F_ABOUT_DISTRO_R[1]}" != "14.04" ]] ; then  
131 - f_div_section  
132 - f_yes_no "Linux version may be incompatible with this installer (expected: 14.04/obtained: ${F_ABOUT_DISTRO_R[1]})! Continue?"  
133 - f_div_section  
134 - if [ ${YES_NO_R} -eq 0 ] ; then  
135 - exit 0  
136 - fi  
137 - fi  
138 - elif [[ "${F_ABOUT_DISTRO_R[0]}" == "Debian GNU/Linux" ]] ; then  
139 - DISTRO_NAME="Debian"  
140 - if [[ "${F_ABOUT_DISTRO_R[1]}" != "8" ]] ; then  
141 - f_div_section  
142 - f_yes_no "Linux version may be incompatible with this installer (expected: 8/obtained: ${F_ABOUT_DISTRO_R[1]})! Continue?"  
143 - f_div_section  
144 - if [ ${YES_NO_R} -eq 0 ] ; then  
145 - exit 0  
146 - fi  
147 - fi  
148 - else  
149 - f_div_section  
150 - f_yes_no "Linux distro may be incompatible with this installer (expected: Ubuntu or Debian/obtained: ${F_ABOUT_DISTRO_R[0]})! Continue?"  
151 - f_div_section  
152 - if [ ${YES_NO_R} -eq 0 ] ; then  
153 - exit 0  
154 - fi  
155 - fi  
156 - elif [[ "${F_ABOUT_DISTRO_R[2]}" == "RedHat" ]] ; then  
157 - DISTRO_TYPE="RH"  
158 - if [[ "${F_ABOUT_DISTRO_R[0]}" == "Red Hat Enterprise Linux Server" ]] ; then  
159 - DISTRO_NAME="RedHat"  
160 - if [[ "${F_ABOUT_DISTRO_R[1]}" != "6."* ]] ; then  
161 - f_div_section  
162 - f_yes_no "Linux version may be incompatible with this installer (expected: 6.X/obtained: ${F_ABOUT_DISTRO_R[1]})! Continue?"  
163 - f_div_section  
164 - if [ ${YES_NO_R} -eq 0 ] ; then  
165 - exit 0  
166 - fi  
167 - fi  
168 - elif [[ "${F_ABOUT_DISTRO_R[0]}" == "CentOS" ]] ; then  
169 - DISTRO_NAME="CentOS"  
170 - if [[ "${F_ABOUT_DISTRO_R[1]}" != "6."* ]] ; then  
171 - f_div_section  
172 - f_yes_no "Linux version may be incompatible with this installer (expected: 6.X/obtained: ${F_ABOUT_DISTRO_R[1]})! Continue?"  
173 - f_div_section  
174 - if [ ${YES_NO_R} -eq 0 ] ; then  
175 - exit 0  
176 - fi  
177 - fi  
178 - else  
179 - f_div_section  
180 - f_yes_no "Linux distro may be incompatible with this installer (expected: CentOS or Red Hat Enterprise Linux Server/obtained: ${F_ABOUT_DISTRO_R[0]})! Continue?"  
181 - f_div_section  
182 - if [ ${YES_NO_R} -eq 0 ] ; then  
183 - exit 0  
184 - fi  
185 - fi  
186 - elif [[ "${F_ABOUT_DISTRO_R[2]}" == "Suse" ]] ; then  
187 - DISTRO_TYPE="SUSE"  
188 - if [[ "${F_ABOUT_DISTRO_R[0]}" == "openSUSE" ]] ; then  
189 - DISTRO_NAME="openSUSE"  
190 - if [[ "${F_ABOUT_DISTRO_R[1]}" != "13."* ]] ; then  
191 - f_div_section  
192 - f_yes_no "Linux version may be incompatible with this installer (expected: 13.X/obtained: ${F_ABOUT_DISTRO_R[1]})! Continue?"  
193 - f_div_section  
194 - if [ ${YES_NO_R} -eq 0 ] ; then  
195 - exit 0  
196 - fi  
197 - fi  
198 - elif [[ "${F_ABOUT_DISTRO_R[0]}" == "SLES" ]] ; then  
199 - DISTRO_NAME="SLES"  
200 - if [[ "${F_ABOUT_DISTRO_R[1]}" != "12."* ]] ; then  
201 - f_div_section  
202 - f_yes_no "Linux version may be incompatible with this installer (expected: 12.X/obtained: ${F_ABOUT_DISTRO_R[1]})! Continue?"  
203 - f_div_section  
204 - if [ ${YES_NO_R} -eq 0 ] ; then  
205 - exit 0  
206 - fi  
207 - fi  
208 - else  
209 - f_div_section  
210 - f_yes_no "Linux distro may be incompatible with this installer (expected: openSUSE or SUSE Linux Enterprise Server/obtained: ${F_ABOUT_DISTRO_R[0]})! Continue?"  
211 - f_div_section  
212 - if [ ${YES_NO_R} -eq 0 ] ; then  
213 - exit 0  
214 - fi  
215 - fi  
216 - fi  
217 -  
218 - if [[ "${F_ABOUT_DISTRO_R[3]}" != "x86_64" ]] ; then  
219 - f_enter_to_cont "Linux architecture completely incompatible with this installer (expected: x86_64/obtained: ${F_ABOUT_DISTRO_R[3]})!"  
220 - exit 0  
221 - fi  
222 -else  
223 - f_enter_to_cont "Linux distro completely incompatible with this installer (expected: Debian(or based) or RedHat(or based) or SUSE(or based)/obtained: ${F_ABOUT_DISTRO_R[2]})!"  
224 - exit 0  
225 -fi  
226 -f_close_section  
227 -  
228 -# < -----------------------------------------  
229 -  
230 -# > -----------------------------------------  
231 -# Dá ao usuário mais avançado a possibilideade de usar o instalador  
232 -# simplificado!  
233 -  
234 -# NOTE: É possível forçar o processo de instalção simplificado setando  
235 -# "SIMPLE_INST" com 1! By Questor  
236 -SIMPLE_INST=0  
237 -if [ ${SIMPLE_INST} -eq 0 ] ; then  
238 - f_open_section  
239 - f_yes_no "Use simple install (use default values for most of the options)?"  
240 - if [ ${YES_NO_R} -eq 1 ] ; then  
241 -  
242 - # NOTE: Essa variável serve apenas para "preservar" o valor  
243 - # setado pelo usuário sendo somente "leitura". A variável a  
244 - # ser usada nas regras deve ser "EZ_I_SKIP_ON_V" (ez_i.sh)! Essa  
245 - # estratégia serve para mudarmos o comportamento do "ez_i.sh"  
246 - # de acordo com as circunstâncias! By Questor  
247 - SIMPLE_INST=1  
248 -  
249 - # NOTE: Essa variável é para consumo do "ez_i.sh", para que ele  
250 - # não execute algumas funções e simplifique o processo de  
251 - # instalação! By Questor  
252 - EZ_I_SKIP_ON_V=1  
253 - fi  
254 - f_close_section  
255 - sleep 1  
256 -fi  
257 -  
258 -# < -----------------------------------------  
259 -  
260 -# > -----------------------------------------  
261 -# Garantir o encodamento correto para evitar problemas de  
262 -# compatibilidade!  
263 -  
264 -if [ ${SIMPLE_INST} -eq 0 ] ; then  
265 - EZ_I_SKIP_ON_V=$SIMPLE_INST  
266 - f_open_section  
267 - f_yes_no "Set terminal encode? (in some cases recommended for Windows ssh clients)"  
268 - if [ ${EZ_I_SKIP_ON_V} -eq 1 ] || [ ${YES_NO_R} -eq 1 ] ; then  
269 - export LANG=pt_BR.utf8  
270 - fi  
271 - f_close_section  
272 -fi  
273 -  
274 -# < -----------------------------------------  
275 -  
276 -# > -----------------------------------------  
277 -# Desabilita o SElinux!  
278 -  
279 -if [[ "$DISTRO_TYPE" == "RH" ]] ; then  
280 - EZ_I_SKIP_ON_V=0  
281 - f_open_section  
282 - f_yes_no "Disable SElinux (use "y" if you never did it)?"  
283 - if [ ${YES_NO_R} -eq 1 ] ; then  
284 - setenforce 0  
285 -  
286 - # NOTE: As condições abaixo visam evitar que o arquivo seja  
287 - # desnecessariamente e erroneamente modificado! By Questor  
288 - EZ_I_SKIP_ON_V=$SIMPLE_INST  
289 - f_fl_cont_str "# SELINUX=enforcing" "/etc/sysconfig/selinux" "The file \"/etc/sysconfig/selinux\" probably has already been changed! Check it!"  
290 - EZ_I_SKIP_ON_V=0  
291 - if [ ${FL_CONT_STR_R} -eq 0 ] ; then  
292 - f_fl_cont_str "SELINUX=disabled" "/etc/sysconfig/selinux"  
293 - if [ ${FL_CONT_STR_R} -eq 0 ] ; then  
294 - f_ez_sed "SELINUX=enforcing" "# SELINUX=enforcing\nSELINUX=disabled" "/etc/sysconfig/selinux"  
295 - fi  
296 - fi  
297 - fi  
298 - f_close_section  
299 -fi  
300 -  
301 -# < -----------------------------------------  
302 -  
303 -# > -----------------------------------------  
304 -# Atualizar a distro (repositório)!  
305 -  
306 -EZ_I_SKIP_ON_V=$SIMPLE_INST  
307 -if [[ "$DISTRO_TYPE" == "RH" ]] ; then  
308 - if [[ "$DISTRO_NAME" == "RedHat" ]] ; then  
309 - RESOURCES_ARR_P=("Red Hat Enterprise Linux Server")  
310 - f_chk_distro_status "$DISTRO_NAME" RESOURCES_ARR_P[@]  
311 - fi  
312 - f_div_section  
313 - f_yes_no "Update your distro? (\"y\" highly recommended)"  
314 - f_div_section  
315 - if [ ${EZ_I_SKIP_ON_V} -eq 1 ] || [ ${YES_NO_R} -eq 1 ] ; then  
316 - yum -y update  
317 - fi  
318 - f_pack_is_inst "git" "yum" "\"git\" already installed!"  
319 - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then  
320 - yum -y install git  
321 - fi  
322 -elif [[ "$DISTRO_TYPE" == "DEB" ]] ; then  
323 - f_div_section  
324 - f_yes_no "Update your distro? (\"y\" highly recommended)"  
325 - f_div_section  
326 - if [ ${EZ_I_SKIP_ON_V} -eq 1 ] || [ ${YES_NO_R} -eq 1 ] ; then  
327 - apt-get -y update  
328 - fi  
329 - f_pack_is_inst "git" "apt-get" "\"git\" already installed!"  
330 - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then  
331 - apt-get -y install git  
332 - fi  
333 -elif [[ "$DISTRO_TYPE" == "SUSE" ]] ; then  
334 - if [[ "$DISTRO_NAME" == "SLES" ]] ; then  
335 - RESOURCES_ARR_P=("SUSE_Linux_Enterprise_Server_12_SP1_x86_64"  
336 -"SUSE_Linux_Enterprise_Software_Development_Kit_12_SP1_x86_64"  
337 -"Web_and_Scripting_Module_12_x86_64")  
338 - f_chk_distro_status "SLES" RESOURCES_ARR_P[@]  
339 - fi  
340 - f_div_section  
341 - f_yes_no "Update your distro? (\"y\" highly recommended)"  
342 - f_div_section  
343 - if [ ${EZ_I_SKIP_ON_V} -eq 1 ] || [ ${YES_NO_R} -eq 1 ] ; then  
344 - zypper --non-interactive update  
345 - fi  
346 - f_pack_is_inst "git-core" "zypper" "\"git-core\" already installed!"  
347 - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then  
348 - zypper --non-interactive install git-core  
349 - fi  
350 -fi  
351 -  
352 -# < -----------------------------------------  
353 -  
354 -BASE_INST_DIR_V="/usr/local/lb"  
355 -# > -----------------------------------------  
356 -# Criar o diretório base da instalação!  
357 -  
358 -EZ_I_SKIP_ON_V=$SIMPLE_INST  
359 -f_open_section  
360 -QUESTION_F="Insert where the base installation directory (\"lb\") will be created (don't use \"/\" at the end).  
361 -Use empty for \"/usr/local\"!"  
362 -  
363 -f_get_usr_input "$QUESTION_F" 1  
364 -QUESTION_F=""  
365 -if [ ${EZ_I_SKIP_ON_V} -eq 1 ] || [ -z "$GET_USR_INPUT_R" ] ; then  
366 - f_chk_by_path_hlp "$BASE_INST_DIR_V" "d" "\"$BASE_INST_DIR_V\" directory already created!"  
367 - if [ ${F_CHK_BY_PATH_HLP_R} -eq 0 ] ; then  
368 - mkdir -p "$BASE_INST_DIR_V"  
369 - fi  
370 -else  
371 - BASE_INST_DIR_V="$GET_USR_INPUT_R/lb"  
372 - f_chk_by_path_hlp "$BASE_INST_DIR_V" "d" "\"$BASE_INST_DIR_V\" directory already created!"  
373 - if [ ${F_CHK_BY_PATH_HLP_R} -eq 0 ] ; then  
374 - mkdir -p "$BASE_INST_DIR_V"  
375 - fi  
376 -fi  
377 -f_close_section  
378 -  
379 -# < -----------------------------------------  
380 -  
381 -# > -----------------------------------------  
382 -# Instalar pacotes que são comuns a determinados componentes!  
383 -  
384 -F_COM_PKS_INSTALLED=0  
385 -f_common_packs() {  
386 - : 'Instalar pacotes que são comuns a determinados componentes.'  
387 -  
388 - if [ ${F_COM_PKS_INSTALLED} -eq 0 ] ; then  
389 - if [[ "$DISTRO_TYPE" == "RH" ]] ; then  
390 - f_pack_is_inst "gcc-c++" "yum" "\"gcc-c++\" already installed!"  
391 - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then  
392 - yum -y install gcc-c++  
393 - fi  
394 - f_pack_is_inst "autoconf" "yum" "\"autoconf\" already installed!"  
395 - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then  
396 - yum -y install autoconf  
397 - fi  
398 - f_pack_is_inst "automake" "yum" "\"automake\" already installed!"  
399 - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then  
400 - yum -y install automake  
401 - fi  
402 - f_pack_is_inst "libtool" "yum" "\"libtool\" already installed!"  
403 - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then  
404 - yum -y install libtool  
405 - fi  
406 - f_pack_is_inst "zlib-devel" "yum" "\"zlib-devel\" already installed!"  
407 - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then  
408 - yum -y install zlib-devel  
409 - fi  
410 - elif [[ "$DISTRO_TYPE" == "DEB" ]] ; then  
411 - f_pack_is_inst "g++" "apt-get" "\"g++\" already installed!"  
412 - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then  
413 - apt-get -y install g++  
414 - fi  
415 - f_pack_is_inst "autoconf" "apt-get" "\"autoconf\" already installed!"  
416 - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then  
417 - apt-get -y install autoconf  
418 - fi  
419 - f_pack_is_inst "make" "apt-get" "\"make\" already installed!"  
420 - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then  
421 - apt-get -y install make  
422 - fi  
423 - f_pack_is_inst "libtool" "apt-get" "\"libtool\" already installed!"  
424 - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then  
425 - apt-get -y install libtool  
426 - fi  
427 - f_pack_is_inst "zlib1g-dev" "apt-get" "\"zlib1g-dev\" already installed!"  
428 - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then  
429 - apt-get -y install zlib1g-dev  
430 - fi  
431 - elif [[ "$DISTRO_TYPE" == "SUSE" ]] ; then  
432 - f_pack_is_inst "gcc-c++" "zypper" "\"gcc-c++\" already installed!"  
433 - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then  
434 - zypper --non-interactive install gcc-c++  
435 - fi  
436 - if [[ "$DISTRO_NAME" != "SLES" ]] ; then  
437 - f_pack_is_inst "autoconf" "zypper" "\"autoconf\" already installed!"  
438 - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then  
439 - zypper --non-interactive install autoconf  
440 - fi  
441 - f_pack_is_inst "automake" "zypper" "\"automake\" already installed!"  
442 - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then  
443 - zypper --non-interactive install automake  
444 - fi  
445 - f_pack_is_inst "make" "zypper" "\"make\" already installed!"  
446 - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then  
447 - zypper --non-interactive install make  
448 - fi  
449 - f_pack_is_inst "libtool" "zypper" "\"libtool\" already installed!"  
450 - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then  
451 - zypper --non-interactive install libtool  
452 - fi  
453 - fi  
454 - f_pack_is_inst "zlib-devel" "zypper" "\"zlib-devel\" already installed!"  
455 - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then  
456 - zypper --non-interactive install zlib-devel  
457 - fi  
458 - fi  
459 - F_COM_PKS_INSTALLED=1  
460 - fi  
461 -}  
462 -  
463 -# < -----------------------------------------  
464 -  
465 -# > -----------------------------------------  
466 -# Instalar o virtualenv-1.11.6 no python2.X!  
467 -  
468 -PYTHON_2_X=""  
469 -VE_2_X=""  
470 -if [[ "$DISTRO_TYPE" == "RH" ]] ; then  
471 - PYTHON_2_X="2.6"  
472 - VE_2_X="ve26"  
473 -elif [[ "$DISTRO_TYPE" == "DEB" ]] || [[ "$DISTRO_TYPE" == "SUSE" ]] ; then  
474 - PYTHON_2_X="2.7"  
475 - VE_2_X="ve27"  
476 -fi  
477 -EZ_I_SKIP_ON_V=$SIMPLE_INST  
478 -f_open_section  
479 -f_yes_no "Install virtualenv-1.11.6 on python$PYTHON_2_X?"  
480 -if [ ${EZ_I_SKIP_ON_V} -eq 1 ] || [ ${YES_NO_R} -eq 1 ] ; then  
481 - if [[ "$DISTRO_TYPE" == "RH" ]] ; then  
482 - f_chk_by_path_hlp "/usr/bin/virtualenv-$PYTHON_2_X" "f" "virtualenv-1.11.6 already installed!"  
483 - elif [[ "$DISTRO_TYPE" == "DEB" ]] || [[ "$DISTRO_TYPE" == "SUSE" ]] ; then  
484 - f_chk_by_path_hlp "/usr/local/bin/virtualenv-$PYTHON_2_X" "f" "virtualenv-1.11.6 already installed!"  
485 - fi  
486 - if [[ "$DISTRO_TYPE" == "RH" ]] ; then  
487 - f_pack_is_inst "python-setuptools" "yum" "\"python-setuptools\" already installed!"  
488 - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then  
489 - yum -y install python-setuptools  
490 - fi  
491 - elif [[ "$DISTRO_TYPE" == "DEB" ]] ; then  
492 - f_pack_is_inst "python-setuptools" "apt-get" "\"python-setuptools\" already installed!"  
493 - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then  
494 - apt-get -y install python-setuptools  
495 - fi  
496 - elif [[ "$DISTRO_TYPE" == "SUSE" ]] ; then  
497 - f_pack_is_inst "python-setuptools" "zypper" "\"python-setuptools\" already installed!"  
498 - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then  
499 - zypper --non-interactive install python-setuptools  
500 - fi  
501 - fi  
502 - if [ ${F_CHK_BY_PATH_HLP_R} -eq 0 ] ; then  
503 - f_common_packs  
504 - cd "$SCRIPTDIR_V"  
505 - cd ./other-srcs-n-apps  
506 - tar -zxvf virtualenv-1.11.6.tar.gz  
507 - cd virtualenv-1.11.6  
508 - python$PYTHON_2_X setup.py install  
509 - cd ..  
510 - rm -rf virtualenv-1.11.6  
511 - fi  
512 -fi  
513 -f_close_section  
514 -  
515 -# < -----------------------------------------  
516 -  
517 -# > -----------------------------------------  
518 -# Criar o ambiente virtual (python2.X)!  
519 -  
520 -EZ_I_SKIP_ON_V=$SIMPLE_INST  
521 -f_open_section  
522 -f_enter_to_cont "Create the virtual environment (python$PYTHON_2_X)!"  
523 -f_chk_by_path_hlp "$BASE_INST_DIR_V/$VE_2_X" "d" "Virtual environment (python$PYTHON_2_X) already created in \"$BASE_INST_DIR_V/$VE_2_X\"!"  
524 -if [ ${F_CHK_BY_PATH_HLP_R} -eq 0 ] ; then  
525 - f_common_packs  
526 - cd "$BASE_INST_DIR_V"  
527 - virtualenv-$PYTHON_2_X $VE_2_X  
528 - mkdir "$BASE_INST_DIR_V/$VE_2_X/src"  
529 - f_enter_to_cont "Virtual environment created in \"$BASE_INST_DIR_V/$VE_2_X\"!"  
530 -fi  
531 -f_close_section  
532 -  
533 -# < -----------------------------------------  
534 -  
535 -# > -----------------------------------------  
536 -# Instalar o catdoc, unzip e ImageMagick para o LBConverter!  
537 -  
538 -EZ_I_SKIP_ON_V=$SIMPLE_INST  
539 -f_open_section  
540 -INST_CATDOC_UNZIP_IMAGMAG=""  
541 -if [[ "$DISTRO_TYPE" == "RH" ]] ; then  
542 - INST_CATDOC_UNZIP_IMAGMAG="Install catdoc, unzip and ImageMagick?"  
543 -elif [[ "$DISTRO_TYPE" == "DEB" ]] ; then  
544 - INST_CATDOC_UNZIP_IMAGMAG="Install catdoc, unzip and ImageMagick?"  
545 -elif [[ "$DISTRO_TYPE" == "SUSE" ]] ; then  
546 - INST_CATDOC_UNZIP_IMAGMAG="Install catdoc and ImageMagick?"  
547 -fi  
548 -f_yes_no "$INST_CATDOC_UNZIP_IMAGMAG"  
549 -if [ ${EZ_I_SKIP_ON_V} -eq 1 ] || [ ${YES_NO_R} -eq 1 ] ; then  
550 -  
551 - UP_CATDOC=1  
552 - f_chk_by_path_hlp "$BASE_INST_DIR_V/$VE_2_X/lib/catdoc-0.94.2" "d" "catdoc-0.94.2 already installed in \"$BASE_INST_DIR_V/$VE_2_X/lib/catdoc-0.94.2\"!"  
553 - if [ ${F_CHK_BY_PATH_HLP_R} -eq 1 ] ; then  
554 - if [ ${EZ_I_SKIP_ON_V} -eq 0 ] ; then  
555 - f_div_section  
556 - f_yes_no "Update/reinstall catdoc-0.94.2? (\"y\" recommended)"  
557 - f_div_section  
558 - UP_CATDOC=$YES_NO_R  
559 - if [ ${UP_CATDOC} -eq 1 ] ; then  
560 - rm -rf "$BASE_INST_DIR_V/$VE_2_X/lib/catdoc-0.94.2"  
561 - fi  
562 - fi  
563 - fi  
564 - if [ ${UP_CATDOC} -eq 1 ] ; then  
565 - if [[ "$DISTRO_TYPE" == "RH" ]] ; then  
566 - f_common_packs  
567 - f_pack_is_inst "unzip" "yum" "\"unzip\" already installed!"  
568 - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then  
569 - yum -y install unzip  
570 - fi  
571 - f_pack_is_inst "ImageMagick" "yum" "\"ImageMagick\" already installed!"  
572 - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then  
573 - yum -y install ImageMagick  
574 - fi  
575 - elif [[ "$DISTRO_TYPE" == "DEB" ]] ; then  
576 - f_common_packs  
577 - f_pack_is_inst "unzip" "apt-get" "\"unzip\" already installed!"  
578 - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then  
579 - apt-get -y install unzip  
580 - fi  
581 - f_pack_is_inst "imagemagick" "apt-get" "\"imagemagick\" already installed!"  
582 - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then  
583 - apt-get -y install imagemagick  
584 - fi  
585 - elif [[ "$DISTRO_TYPE" == "SUSE" ]] ; then  
586 - f_common_packs  
587 - f_pack_is_inst "ImageMagick" "zypper" "\"ImageMagick\" already installed!"  
588 - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then  
589 - zypper --non-interactive install ImageMagick  
590 - fi  
591 - fi  
592 - cd "$SCRIPTDIR_V"  
593 - cd ./other-srcs-n-apps  
594 - tar -zxvf catdoc-0.94.2.tar.gz  
595 - mv ./catdoc-0.94.2 $BASE_INST_DIR_V/$VE_2_X/lib  
596 - cd $BASE_INST_DIR_V/$VE_2_X/lib/catdoc-0.94.2  
597 - ./configure  
598 - make && make install  
599 - fi  
600 -fi  
601 -f_close_section  
602 -  
603 -# < -----------------------------------------  
604 -  
605 -# > -----------------------------------------  
606 -# Instalar o tesseract-ocr-3.02.02!  
607 -  
608 -EZ_I_SKIP_ON_V=$SIMPLE_INST  
609 -f_open_section  
610 -f_yes_no "Install tesseract-ocr-3.02.02?"  
611 -if [ ${EZ_I_SKIP_ON_V} -eq 1 ] || [ ${YES_NO_R} -eq 1 ] ; then  
612 -  
613 - UP_TESSERACT_OCR=1  
614 - f_chk_by_path_hlp "/usr/local/lib/tesseract-ocr" "d" "tesseract-ocr-3.02.02 already installed in \"/usr/local/lib/tesseract-ocr\"!"  
615 - if [ ${F_CHK_BY_PATH_HLP_R} -eq 1 ] ; then  
616 - if [ ${EZ_I_SKIP_ON_V} -eq 0 ] ; then  
617 - f_div_section  
618 - f_yes_no "Update/reinstall tesseract-ocr-3.02.02? (\"y\" recommended)"  
619 - f_div_section  
620 - UP_TESSERACT_OCR=$YES_NO_R  
621 - fi  
622 - fi  
623 - if [ ${UP_TESSERACT_OCR} -eq 1 ] ; then  
624 - if [[ "$DISTRO_TYPE" == "RH" ]] ; then  
625 - f_common_packs  
626 - f_pack_is_inst "libpng12-devel" "yum" "\"libpng12-devel\" already installed!"  
627 - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then  
628 - yum -y install libpng-devel  
629 - fi  
630 - f_pack_is_inst "libjpeg-turbo-devel" "yum" "\"libjpeg-turbo-devel\" already installed!"  
631 - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then  
632 - yum -y install libjpeg-turbo-devel  
633 - fi  
634 - f_pack_is_inst "libtiff-devel" "yum" "\"libtiff-devel\" already installed!"  
635 - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then  
636 - yum -y install libtiff-devel  
637 - fi  
638 - f_pack_is_inst "openjpeg-libs" "yum" "\"openjpeg-libs\" already installed!"  
639 - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then  
640 - yum -y install openjpeg-libs  
641 - fi  
642 - f_pack_is_inst "giflib" "yum" "\"giflib\" already installed!"  
643 - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then  
644 - yum -y install giflib  
645 - fi  
646 -  
647 - # NOTE: Esse pacote só existe no CentOS 7! By Questor  
648 - # f_pack_is_inst "libwebp-devel" "yum" "\"libwebp-devel\" already installed!"  
649 - # if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then  
650 - # yum -y install libwebp-devel  
651 - # fi  
652 - elif [[ "$DISTRO_TYPE" == "DEB" ]] ; then  
653 - f_common_packs  
654 - f_pack_is_inst "libpng-dev" "apt-get" "\"libpng-dev\" already installed!"  
655 - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then  
656 - apt-get -y install libpng-dev  
657 - fi  
658 - f_pack_is_inst "libjpeg-dev" "apt-get" "\"libjpeg-dev\" already installed!"  
659 - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then  
660 - apt-get -y install libjpeg-dev  
661 - fi  
662 - f_pack_is_inst "libtiff-dev" "apt-get" "\"libtiff-dev\" already installed!"  
663 - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then  
664 - apt-get -y install libtiff-dev  
665 - fi  
666 - f_pack_is_inst "libopenjpeg2" "apt-get" "\"libopenjpeg2\" already installed!"  
667 - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then  
668 - apt-get -y install libopenjpeg2  
669 - fi  
670 - f_pack_is_inst "libgif-dev" "apt-get" "\"libgif-dev\" already installed!"  
671 - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then  
672 - apt-get -y install libgif-dev  
673 - fi  
674 - f_pack_is_inst "libwebp-dev" "apt-get" "\"libwebp-dev\" already installed!"  
675 - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then  
676 - apt-get -y install libwebp-dev  
677 - fi  
678 - elif [[ "$DISTRO_TYPE" == "SUSE" ]] ; then  
679 - f_common_packs  
680 - f_pack_is_inst "libpng-devel" "zypper" "\"libpng-devel\" already installed!"  
681 - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then  
682 - zypper --non-interactive install libpng-devel  
683 - fi  
684 - f_pack_is_inst "libjpeg-devel" "zypper" "\"libjpeg-devel\" already installed!"  
685 - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then  
686 - zypper --non-interactive install libjpeg-devel  
687 - fi  
688 - f_pack_is_inst "libtiff-devel" "zypper" "\"libtiff-devel\" already installed!"  
689 - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then  
690 - zypper --non-interactive install libtiff-devel  
691 - fi  
692 - if [[ "$DISTRO_NAME" != "SLES" ]] ; then  
693 - f_pack_is_inst "libopenjp2-7" "zypper" "\"libopenjp2-7\" already installed!"  
694 - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then  
695 - zypper --non-interactive install libopenjp2-7  
696 - fi  
697 - fi  
698 - f_pack_is_inst "libgif6" "zypper" "\"libgif6\" already installed!"  
699 - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then  
700 - zypper --non-interactive install libgif6  
701 - fi  
702 - f_pack_is_inst "libwebp-devel" "zypper" "\"libwebp-devel\" already installed!"  
703 - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then  
704 - zypper --non-interactive install libwebp-devel  
705 - fi  
706 - fi  
707 -  
708 - cd "$SCRIPTDIR_V"  
709 - cd ./other-srcs-n-apps  
710 -  
711 - tar -zxvf leptonica-1.71.tar.gz  
712 - mv ./leptonica-1.71 /usr/local/lib  
713 - cd /usr/local/lib/leptonica-1.71  
714 - ./autobuild  
715 - ./configure  
716 - make -j 4 && make install  
717 -  
718 - cd "$SCRIPTDIR_V"  
719 - cd ./other-srcs-n-apps  
720 -  
721 - tar -zxvf tesseract-ocr-3.02.02.tar.gz  
722 - mv ./tesseract-ocr /usr/local/lib  
723 - cd /usr/local/lib/tesseract-ocr  
724 - ./autogen.sh  
725 - ./configure  
726 - make -j 4 && make install  
727 - ldconfig  
728 -  
729 - cd "$SCRIPTDIR_V"  
730 - cd ./other-srcs-n-apps  
731 -  
732 - tar -zxvf tesseract-ocr-3.01.eng.tar.gz  
733 - tar -zxvf tesseract-ocr-3.02.por.tar.gz  
734 - mv ./tesseract-ocr /usr/local/lib/tesseract-ocr  
735 - cp /usr/local/lib/tesseract-ocr/tesseract-ocr/tessdata/eng.traineddata /usr/local/share/tessdata  
736 - export TESSDATA_PREFIX=/usr/local/lib/tesseract-ocr/tesseract-ocr  
737 -  
738 - fi  
739 -fi  
740 -f_close_section  
741 -  
742 -# < -----------------------------------------  
743 -  
744 -# > -----------------------------------------  
745 -# Instalar as dependências python2.X da LBC - LBConverter!  
746 -  
747 -EZ_I_SKIP_ON_V=$SIMPLE_INST  
748 -cd "$SCRIPTDIR_V"  
749 -bash py-packs-LBConverter.sh "$EZ_I_SKIP_ON_V" "$BASE_INST_DIR_V" "$PYTHON_2_X" "$VE_2_X"  
750 -  
751 -# < -----------------------------------------  
752 -  
753 -HTTP_PORT_F=6544  
754 -# > -----------------------------------------  
755 -# Instalar e configurar o LBC - LBConverter!  
756 -  
757 -EZ_I_SKIP_ON_V=$SIMPLE_INST  
758 -f_open_section  
759 -f_yes_no "Install the LBC - LBConverter?"  
760 -if [ ${EZ_I_SKIP_ON_V} -eq 1 ] || [ ${YES_NO_R} -eq 1 ] ; then  
761 -  
762 - f_chk_by_path_hlp "$BASE_INST_DIR_V/$VE_2_X/src/LBConverter" "d" "\"LBConverter\" already installed in \"$BASE_INST_DIR_V/$VE_2_X/src\"!"  
763 - F_BAK_MD_R=1  
764 - if [ ${F_CHK_BY_PATH_HLP_R} -eq 1 ] ; then  
765 - f_ez_mv_bak "$BASE_INST_DIR_V/$VE_2_X/src/LBConverter" "Backup old version and update? (\"y\" recommended)"  
766 - fi  
767 - if [ ${F_BAK_MD_R} -eq 1 ] ; then  
768 - cd "$SCRIPTDIR_V"  
769 - tar -zxvf LBConverter.tar.gz  
770 - mv "$SCRIPTDIR_V/LBConverter" "$BASE_INST_DIR_V/$VE_2_X/src/"  
771 - cd "$BASE_INST_DIR_V/$VE_2_X/src/LBConverter"  
772 - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"  
773 -  
774 - f_enter_to_cont "Configure LBC - LBConverter!"  
775 - \cp "$BASE_INST_DIR_V/$VE_2_X/src/LBConverter/lbconverter-dist" "$BASE_INST_DIR_V/$VE_2_X/src/LBConverter/lbconverter-prov"  
776 -  
777 - if [[ "$DISTRO_TYPE" == "RH" ]] || [[ "$DISTRO_TYPE" == "SUSE" ]] ; then  
778 - f_ez_sed "<LBI_SCRIPT_HEAD>" "# chkconfig: 2345 99 01\n# description: Esquema de inicialização do LBConverter\n# processname: lbconverter" "$BASE_INST_DIR_V/$VE_2_X/src/LBConverter/lbconverter-prov"  
779 - elif [[ "$DISTRO_TYPE" == "DEB" ]] ; then  
780 - f_ez_sed "<LBI_SCRIPT_HEAD>" "### BEGIN INIT INFO\n# Provides: lbconverter\n# Required-Start: \$remote_fs \$syslog\n# Required-Stop: \$remote_fs \$syslog\n# Default-Start: 2 3 4 5\n# Default-Stop: 0 1 6\n# Short-Description: Start daemon at boot time\n# Description: Enable service provided by daemon.\n### END INIT INFO" "$BASE_INST_DIR_V/$VE_2_X/src/LBConverter/lbconverter-prov"  
781 - fi  
782 -  
783 - f_ez_sed "<LBCONVERTERMG_PATH>" "$BASE_INST_DIR_V/$VE_2_X/src/LBConverter/lbconvertermg" "$BASE_INST_DIR_V/$VE_2_X/src/LBConverter/lbconverter-prov"  
784 - rm -rf "/etc/init.d/lbconverter"  
785 - mv "$BASE_INST_DIR_V/$VE_2_X/src/LBConverter/lbconverter-prov" "/etc/init.d/lbconverter"  
786 -  
787 - chmod 755 -R /etc/init.d/  
788 - cd /etc/init.d/  
789 -  
790 - if [[ "$DISTRO_TYPE" == "RH" ]] || [[ "$DISTRO_TYPE" == "SUSE" ]] ; then  
791 - chkconfig --level 2345 lbconverter on  
792 - elif [[ "$DISTRO_TYPE" == "DEB" ]] ; then  
793 - update-rc.d -f lbconverter remove  
794 - update-rc.d lbconverter defaults  
795 - fi  
796 -  
797 - \cp "$BASE_INST_DIR_V/$VE_2_X/src/LBConverter/lbconvertermg-dist" "$BASE_INST_DIR_V/$VE_2_X/src/LBConverter/lbconvertermg"  
798 - f_ez_sed "<VIRTUALENV_PATH>" "$BASE_INST_DIR_V/$VE_2_X" "$BASE_INST_DIR_V/$VE_2_X/src/LBConverter/lbconvertermg"  
799 -  
800 - LBG_URL_F="http://127.0.0.1/lbg"  
801 - QUESTION_F="Enter the LBG - LBGenerator URL.  
802 -Use empty for \"$LBG_URL_F\" (LOCALHOST)!"  
803 -  
804 - f_get_usr_input "$QUESTION_F" 1  
805 - QUESTION_F=""  
806 - if [ -n "$GET_USR_INPUT_R" ] ; then  
807 - LBG_URL_F=$GET_USR_INPUT_R  
808 - fi  
809 -  
810 - QUESTION_F="Enter the port number for http service.  
811 -Use empty for \"$HTTP_PORT_F\" (recommended)!"  
812 -  
813 - f_get_usr_input "$QUESTION_F" 1  
814 - QUESTION_F=""  
815 - if [ -n "$GET_USR_INPUT_R" ] ; then  
816 - HTTP_PORT_F=$GET_USR_INPUT_R  
817 - fi  
818 -  
819 - \cp "$BASE_INST_DIR_V/$VE_2_X/src/LBConverter/production.ini-dist" "$BASE_INST_DIR_V/$VE_2_X/src/LBConverter/production.ini"  
820 - f_ez_sed "<HTTP_SERVICE_PORT_NUM>" "$HTTP_PORT_F" "$BASE_INST_DIR_V/$VE_2_X/src/LBConverter/production.ini"  
821 - f_ez_sed "<MACHINE_IP_OR_NAME>" "$LBG_URL_F" "$BASE_INST_DIR_V/$VE_2_X/src/LBConverter/production.ini"  
822 -  
823 - service lbconverter restart  
824 - fi  
825 -fi  
826 -f_close_section  
827 -  
828 -# < -----------------------------------------  
829 -  
830 -# > -----------------------------------------  
831 -# Abrir o firewall para o http service!  
832 -  
833 -if [[ "$DISTRO_TYPE" == "RH" ]] || [[ "$DISTRO_TYPE" == "SUSE" ]] ; then  
834 - EZ_I_SKIP_ON_V=$SIMPLE_INST  
835 - f_open_section  
836 - if [[ "$DISTRO_TYPE" == "RH" ]] ; then  
837 - f_yes_no "Open firewall for http service (TCP $HTTP_PORT_F)?"  
838 - if [ ${EZ_I_SKIP_ON_V} -eq 1 ] || [ ${YES_NO_R} -eq 1 ] ; then  
839 - f_chk_iptables ${HTTP_PORT_F} "Port $HTTP_PORT_F is already open!" 0 "ACCEPT" "tcp" "NEW"  
840 - if [ ${F_CHK_IPTABLES_R} -eq 1 ] ; then  
841 - iptables -I INPUT 6 -p tcp -m state --state NEW -m tcp --dport ${HTTP_PORT_F} -j ACCEPT  
842 - service iptables save  
843 - service iptables restart  
844 - fi  
845 - fi  
846 - f_close_section  
847 - elif [[ "$DISTRO_TYPE" == "SUSE" ]] ; then  
848 - f_yes_no "Open firewall for http service (TCP $HTTP_PORT_F)?"  
849 - if [ ${EZ_I_SKIP_ON_V} -eq 1 ] || [ ${YES_NO_R} -eq 1 ] ; then  
850 - f_chk_iptables ${HTTP_PORT_F} "Port $HTTP_PORT_F is already open!" 0 "ACCEPT" "tcp"  
851 - if [ ${F_CHK_IPTABLES_R} -eq 1 ] ; then  
852 - SuSEfirewall2 open EXT TCP ${HTTP_PORT_F}  
853 - SuSEfirewall2 stop  
854 - SuSEfirewall2 start  
855 - fi  
856 - fi  
857 - fi  
858 - f_close_section  
859 -fi  
860 -  
861 -# < -----------------------------------------  
862 -  
863 -# > --------------------------------------------------------------------------  
864 -# FINAL!  
865 -# --------------------------------------  
866 -  
867 -EZ_I_SKIP_ON_V=0  
868 -read -d '' TITLE_F <<"EOF"  
869 -Installer finished! Thanks!  
870 -EOF  
871 -  
872 -USEFUL_INFO_F="To configure...  
873 - vi $BASE_INST_DIR_V/$VE_2_X/src/LBConverter/production.ini  
874 -  
875 -To start/stop...  
876 - service lbconverter start  
877 - service lbconverter stop  
878 -  
879 -Log...  
880 - less /var/log/lbconverter.log"  
881 -  
882 -f_end "$TITLE_F" "$USEFUL_INFO_F"  
883 -TITLE_F=""  
884 -USEFUL_INFO_F=""  
885 -  
886 -# < --------------------------------------------------------------------------  
other-srcs-n-apps/lbconverter
@@ -1,48 +0,0 @@ @@ -1,48 +0,0 @@
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  
py-packs-LBConverter.bash 0 → 100755
@@ -0,0 +1,193 @@ @@ -0,0 +1,193 @@
  1 +#!/bin/bash
  2 +
  3 +# Instalação das dependências do LBC - LBConverter no python2.X!
  4 +
  5 +. ./ez_i.bash
  6 +
  7 +EZ_I_SKIP_ON_V=$1
  8 +if [ -z "$EZ_I_SKIP_ON_V" ] ; then
  9 + EZ_I_SKIP_ON_V=0
  10 +fi
  11 +
  12 +BASE_INST_DIR_V=$2
  13 +# > -----------------------------------------
  14 +# Informar o diretório base da instalação!
  15 +
  16 +if [ -z "$BASE_INST_DIR_V" ] ; then
  17 + f_open_section
  18 + BASE_INST_DIR_V="/usr/local/lb"
  19 +
  20 + QUESTION_F="Enter the installation directory.
  21 + Use empty for \"$BASE_INST_DIR_V\"!"
  22 +
  23 + f_get_usr_input "$QUESTION_F" 1
  24 + QUESTION_F=""
  25 + if [ -n "$GET_USR_INPUT_R" ] ; then
  26 + BASE_INST_DIR_V="$GET_USR_INPUT_R/lb"
  27 + fi
  28 + f_close_section
  29 +fi
  30 +
  31 +# < -----------------------------------------
  32 +
  33 +PYTHON_2_X=$3
  34 +if [ -z "$PYTHON_2_X" ] ; then
  35 + PYTHON_2_X="2.6"
  36 +fi
  37 +
  38 +VE_2_X=$4
  39 +if [ -z "$VE_2_X" ] ; then
  40 + VE_2_X="ve26"
  41 +fi
  42 +
  43 +f_open_section
  44 +
  45 +TITLE_F="Install LBC - LBConverter dependencies for python$PYTHON_2_X?"
  46 +
  47 +f_yes_no "$TITLE_F"
  48 +TITLE_F=""
  49 +
  50 +if [ ${EZ_I_SKIP_ON_V} -eq 1 ] || [ ${YES_NO_R} -eq 1 ] ; then
  51 +
  52 + cd "$SCRIPTDIR_V"
  53 + cd ./py-packs-LBConverter
  54 +
  55 + tar -zxvf ./ordereddict-1.1.tar.gz
  56 + cd ./ordereddict-1.1
  57 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
  58 + cd ..
  59 + rm -rf ./ordereddict-1.1
  60 +
  61 + tar -zxvf ./configparser-3.3.0r2.tar.gz
  62 + cd ./configparser-3.3.0r2
  63 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
  64 + cd ..
  65 + rm -rf ./configparser-3.3.0r2
  66 +
  67 + tar -zxvf ./pdfminer-20140328.tar.gz
  68 + cd ./pdfminer-20140328
  69 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
  70 + cd ..
  71 + rm -rf ./pdfminer-20140328
  72 +
  73 + tar -zxvf ./requests-2.3.0.tar.gz
  74 + cd ./requests-2.3.0
  75 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
  76 + cd ..
  77 + rm -rf ./requests-2.3.0
  78 +
  79 + tar -zxvf ./PasteDeploy-1.5.2.tar.gz
  80 + cd ./PasteDeploy-1.5.2
  81 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
  82 + cd ..
  83 + rm -rf ./PasteDeploy-1.5.2
  84 +
  85 + tar -zxvf ./venusian-1.0.tar.gz
  86 + cd ./venusian-1.0
  87 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
  88 + cd ..
  89 + rm -rf ./venusian-1.0
  90 +
  91 + tar -zxvf ./translationstring-1.3.tar.gz
  92 + cd ./translationstring-1.3
  93 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
  94 + cd ..
  95 + rm -rf ./translationstring-1.3
  96 +
  97 + tar -zxvf ./zope.deprecation-4.1.2.tar.gz
  98 + cd ./zope.deprecation-4.1.2
  99 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
  100 + cd ..
  101 + rm -rf ./zope.deprecation-4.1.2
  102 +
  103 + tar -zxvf ./zope.interface-4.1.3.tar.gz
  104 + cd ./zope.interface-4.1.3
  105 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
  106 + cd ..
  107 + rm -rf ./zope.interface-4.1.3
  108 +
  109 + tar -zxvf ./repoze.lru-0.6.tar.gz
  110 + cd ./repoze.lru-0.6
  111 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
  112 + cd ..
  113 + rm -rf ./repoze.lru-0.6
  114 +
  115 + tar -zxvf ./WebOb-1.5.1.tar.gz
  116 + cd ./WebOb-1.5.1
  117 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
  118 + cd ..
  119 + rm -rf ./WebOb-1.5.1
  120 +
  121 + tar -zxvf ./pyramid-1.6b2.tar.gz
  122 + cd ./pyramid-1.6b2
  123 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
  124 + cd ..
  125 + rm -rf ./pyramid-1.6b2
  126 +
  127 + tar -zxvf ./pbr-0.10.0.tar.gz
  128 + cd ./pbr-0.10.0
  129 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
  130 + cd ..
  131 + rm -rf ./pbr-0.10.0
  132 +
  133 + tar -zxvf ./linecache2-1.0.0.tar.gz
  134 + cd ./linecache2-1.0.0
  135 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
  136 + cd ..
  137 + rm -rf ./linecache2-1.0.0
  138 +
  139 + tar -zxvf ./traceback2-1.4.0.tar.gz
  140 + cd ./traceback2-1.4.0
  141 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
  142 + cd ..
  143 + rm -rf ./traceback2-1.4.0
  144 +
  145 + tar -zxvf ./six-1.7.2.tar.gz
  146 + cd ./six-1.7.2
  147 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
  148 + cd ..
  149 + rm -rf ./six-1.7.2
  150 +
  151 + tar -zxvf ./argparse-1.3.0.tar.gz
  152 + cd ./argparse-1.3.0
  153 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
  154 + cd ..
  155 + rm -rf ./argparse-1.3.0
  156 +
  157 + tar -zxvf ./unittest2-1.0.1.tar.gz
  158 + cd ./unittest2-1.0.1
  159 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
  160 + cd ..
  161 + rm -rf ./unittest2-1.0.1
  162 +
  163 + tar -zxvf ./Chameleon-2.24.tar.gz
  164 + cd ./Chameleon-2.24
  165 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
  166 + cd ..
  167 + rm -rf ./Chameleon-2.24
  168 +
  169 + tar -zxvf ./pyramid_chameleon-0.3.tar.gz
  170 + cd ./pyramid_chameleon-0.3
  171 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
  172 + cd ..
  173 + rm -rf ./pyramid_chameleon-0.3
  174 +
  175 + tar -zxvf ./waitress-0.8.10.tar.gz
  176 + cd ./waitress-0.8.10
  177 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
  178 + cd ..
  179 + rm -rf ./waitress-0.8.10
  180 +
  181 + tar -zxvf ./xlrd-0.9.4.tar.gz
  182 + cd ./xlrd-0.9.4
  183 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
  184 + cd ..
  185 + rm -rf ./xlrd-0.9.4
  186 +
  187 + tar -zxvf ./BeautifulSoup-3.2.1.tar.gz
  188 + cd ./BeautifulSoup-3.2.1
  189 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
  190 + cd ..
  191 + rm -rf ./BeautifulSoup-3.2.1
  192 +
  193 +fi
py-packs-LBConverter.sh
@@ -1,193 +0,0 @@ @@ -1,193 +0,0 @@
1 -#!/bin/bash  
2 -  
3 -# Instalação das dependências do LBC - LBConverter no python2.X!  
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 -# Informar o diretório base da instalação!  
15 -  
16 -if [ -z "$BASE_INST_DIR_V" ] ; then  
17 - f_open_section  
18 - BASE_INST_DIR_V="/usr/local/lb"  
19 -  
20 - QUESTION_F="Enter the installation directory.  
21 - Use empty for \"$BASE_INST_DIR_V\"!"  
22 -  
23 - f_get_usr_input "$QUESTION_F" 1  
24 - QUESTION_F=""  
25 - if [ -n "$GET_USR_INPUT_R" ] ; then  
26 - BASE_INST_DIR_V="$GET_USR_INPUT_R/lb"  
27 - fi  
28 - f_close_section  
29 -fi  
30 -  
31 -# < -----------------------------------------  
32 -  
33 -PYTHON_2_X=$3  
34 -if [ -z "$PYTHON_2_X" ] ; then  
35 - PYTHON_2_X="2.6"  
36 -fi  
37 -  
38 -VE_2_X=$4  
39 -if [ -z "$VE_2_X" ] ; then  
40 - VE_2_X="ve26"  
41 -fi  
42 -  
43 -f_open_section  
44 -  
45 -TITLE_F="Install LBC - LBConverter dependencies for python$PYTHON_2_X?"  
46 -  
47 -f_yes_no "$TITLE_F"  
48 -TITLE_F=""  
49 -  
50 -if [ ${SKIP_ON_V} -eq 1 ] || [ ${YES_NO_R} -eq 1 ] ; then  
51 -  
52 - cd "$SCRIPTDIR_V"  
53 - cd ./py-packs-LBConverter  
54 -  
55 - tar -zxvf ./ordereddict-1.1.tar.gz  
56 - cd ./ordereddict-1.1  
57 - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"  
58 - cd ..  
59 - rm -rf ./ordereddict-1.1  
60 -  
61 - tar -zxvf ./configparser-3.3.0r2.tar.gz  
62 - cd ./configparser-3.3.0r2  
63 - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"  
64 - cd ..  
65 - rm -rf ./configparser-3.3.0r2  
66 -  
67 - tar -zxvf ./pdfminer-20140328.tar.gz  
68 - cd ./pdfminer-20140328  
69 - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"  
70 - cd ..  
71 - rm -rf ./pdfminer-20140328  
72 -  
73 - tar -zxvf ./requests-2.3.0.tar.gz  
74 - cd ./requests-2.3.0  
75 - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"  
76 - cd ..  
77 - rm -rf ./requests-2.3.0  
78 -  
79 - tar -zxvf ./PasteDeploy-1.5.2.tar.gz  
80 - cd ./PasteDeploy-1.5.2  
81 - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"  
82 - cd ..  
83 - rm -rf ./PasteDeploy-1.5.2  
84 -  
85 - tar -zxvf ./venusian-1.0.tar.gz  
86 - cd ./venusian-1.0  
87 - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"  
88 - cd ..  
89 - rm -rf ./venusian-1.0  
90 -  
91 - tar -zxvf ./translationstring-1.3.tar.gz  
92 - cd ./translationstring-1.3  
93 - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"  
94 - cd ..  
95 - rm -rf ./translationstring-1.3  
96 -  
97 - tar -zxvf ./zope.deprecation-4.1.2.tar.gz  
98 - cd ./zope.deprecation-4.1.2  
99 - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"  
100 - cd ..  
101 - rm -rf ./zope.deprecation-4.1.2  
102 -  
103 - tar -zxvf ./zope.interface-4.1.3.tar.gz  
104 - cd ./zope.interface-4.1.3  
105 - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"  
106 - cd ..  
107 - rm -rf ./zope.interface-4.1.3  
108 -  
109 - tar -zxvf ./repoze.lru-0.6.tar.gz  
110 - cd ./repoze.lru-0.6  
111 - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"  
112 - cd ..  
113 - rm -rf ./repoze.lru-0.6  
114 -  
115 - tar -zxvf ./WebOb-1.5.1.tar.gz  
116 - cd ./WebOb-1.5.1  
117 - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"  
118 - cd ..  
119 - rm -rf ./WebOb-1.5.1  
120 -  
121 - tar -zxvf ./pyramid-1.6b2.tar.gz  
122 - cd ./pyramid-1.6b2  
123 - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"  
124 - cd ..  
125 - rm -rf ./pyramid-1.6b2  
126 -  
127 - tar -zxvf ./pbr-0.10.0.tar.gz  
128 - cd ./pbr-0.10.0  
129 - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"  
130 - cd ..  
131 - rm -rf ./pbr-0.10.0  
132 -  
133 - tar -zxvf ./linecache2-1.0.0.tar.gz  
134 - cd ./linecache2-1.0.0  
135 - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"  
136 - cd ..  
137 - rm -rf ./linecache2-1.0.0  
138 -  
139 - tar -zxvf ./traceback2-1.4.0.tar.gz  
140 - cd ./traceback2-1.4.0  
141 - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"  
142 - cd ..  
143 - rm -rf ./traceback2-1.4.0  
144 -  
145 - tar -zxvf ./six-1.7.2.tar.gz  
146 - cd ./six-1.7.2  
147 - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"  
148 - cd ..  
149 - rm -rf ./six-1.7.2  
150 -  
151 - tar -zxvf ./argparse-1.3.0.tar.gz  
152 - cd ./argparse-1.3.0  
153 - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"  
154 - cd ..  
155 - rm -rf ./argparse-1.3.0  
156 -  
157 - tar -zxvf ./unittest2-1.0.1.tar.gz  
158 - cd ./unittest2-1.0.1  
159 - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"  
160 - cd ..  
161 - rm -rf ./unittest2-1.0.1  
162 -  
163 - tar -zxvf ./Chameleon-2.24.tar.gz  
164 - cd ./Chameleon-2.24  
165 - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"  
166 - cd ..  
167 - rm -rf ./Chameleon-2.24  
168 -  
169 - tar -zxvf ./pyramid_chameleon-0.3.tar.gz  
170 - cd ./pyramid_chameleon-0.3  
171 - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"  
172 - cd ..  
173 - rm -rf ./pyramid_chameleon-0.3  
174 -  
175 - tar -zxvf ./waitress-0.8.10.tar.gz  
176 - cd ./waitress-0.8.10  
177 - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"  
178 - cd ..  
179 - rm -rf ./waitress-0.8.10  
180 -  
181 - tar -zxvf ./xlrd-0.9.4.tar.gz  
182 - cd ./xlrd-0.9.4  
183 - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"  
184 - cd ..  
185 - rm -rf ./xlrd-0.9.4  
186 -  
187 - tar -zxvf ./BeautifulSoup-3.2.1.tar.gz  
188 - cd ./BeautifulSoup-3.2.1  
189 - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"  
190 - cd ..  
191 - rm -rf ./BeautifulSoup-3.2.1  
192 -  
193 -fi