Commit 83fd41eb70e0b4ae9b1a5c5e28bf610a8f3b8344

Authored by edulucio
1 parent b81480bb
Exists in master

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

.directory 100644 → 100755
1 1 [Dolphin]
2   -PreviewsShown=true
3   -Timestamp=2016,5,13,17,57,48
  2 +Timestamp=2016,8,2,17,48,55
4 3 Version=3
5 4 ViewMode=1
6   -
7   -[Settings]
8   -HiddenFilesShown=true
... ...
LBIndex.tar.gz 100755 → 100644
No preview for this file type
ez_i.bash 0 → 100755
... ... @@ -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   -#!/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,932 @@
  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 +LBI - LBIndex Installer
  25 +EOF
  26 +
  27 +read -d '' VERSION_F <<"EOF"
  28 +0.1.1.0
  29 +EOF
  30 +
  31 +# NOTE: Para versionamento usar "MAJOR.MINOR.REVISION.BUILDNUMBER"!
  32 +# Usar a mesma versão contida no setup.py! By Questor
  33 +# http://programmers.stackexchange.com/questions/24987/what-exactly-is-the-build-number-in-major-minor-buildnumber-revision
  34 +
  35 +read -d '' ABOUT_F <<"EOF"
  36 +This script will install LBI - LBIndex the LightBase indexing component!
  37 +
  38 +Have fun! =D
  39 +EOF
  40 +
  41 +read -d '' WARNINGS_F <<"EOF"
  42 +- This installer is compatible with RHEL, SUSE, Debian or distributions
  43 +based on these.
  44 +
  45 +- We RECOMMEND you...
  46 + Install all the components (answer yes to everything) and use the default
  47 + values. Except contrary guidance!
  48 + Check for previous installations! If there is previous
  49 + installations consider this variant in the process!
  50 + Although this is not mandatory, do the installation process in an
  51 + exclusive machine for this.
  52 +
  53 +- We NOTICE you...
  54 + This installer assumes that the target distribution has a "standard
  55 + setup". This may include components such as firewall, SELinux
  56 + and others.
  57 +
  58 +- We WARNING you...
  59 + THIS INSTALLER AND RESULTING PRODUCTS COMES WITH ABSOLUTELY NO WARRANTY!
  60 + USE AT YOUR OWN RISK! WE ARE NOT RESPONSIBLE FOR ANY DAMAGE TO YOURSELF,
  61 + HARDWARE, OR CO-WORKERS. EXCEPT IN CASES WHERE THERE ARE SIGNED CONTRACT
  62 + THAT REGULATES THIS!
  63 +EOF
  64 +
  65 +read -d '' COMPANY_F <<"EOF"
  66 +BR Light LTDA - LightBase Consulting in Public Software/LightBase Consultoria em Software Público
  67 +Free Software + Our Ideas = Best Solution!/Software Livre + Nossas Idéias = Melhor Solução!
  68 ++55-61-3347-1949 - http://www.LightBase.com.br - Brasil-DF
  69 +EOF
  70 +
  71 +f_begin "$TITLE_F" "$VERSION_F" "$ABOUT_F" "$WARNINGS_F" "$COMPANY_F"
  72 +ABOUT_F=""
  73 +WARNINGS_F=""
  74 +
  75 +# < --------------------------------------------------------------------------
  76 +
  77 +# > --------------------------------------------------------------------------
  78 +# TERMOS E LICENÇA!
  79 +# --------------------------------------
  80 +
  81 +read -d '' TERMS_LICEN_F <<"EOF"
  82 +BY USING THIS INSTALLER YOU ARE AGREEING TO THE TERMS OF USE OF ALL
  83 +INVOLVED SOFTWARE!
  84 +EOF
  85 +
  86 +f_terms_licen "$TERMS_LICEN_F"
  87 +TERMS_LICEN_F=""
  88 +
  89 +# < --------------------------------------------------------------------------
  90 +
  91 +# > -----------------------------------------
  92 +# Checar se o usuário é root!
  93 +
  94 +f_is_root
  95 +
  96 +# < -----------------------------------------
  97 +
  98 +# > --------------------------------------------------------------------------
  99 +# INTRUÇÕES!
  100 +# --------------------------------------
  101 +
  102 +read -d '' INSTRUCT_F <<"EOF"
  103 +- TO CANCEL installation at any time use Ctrl+c!
  104 +EOF
  105 +
  106 +f_instruct "$INSTRUCT_F"
  107 +INSTRUCT_F=""
  108 +
  109 +# < --------------------------------------------------------------------------
  110 +
  111 +DISTRO_TYPE=""
  112 +DISTRO_NAME=""
  113 +# > -----------------------------------------
  114 +# Checar se a distro é compatível!
  115 +
  116 +f_open_section
  117 +f_about_distro
  118 +f_div_section
  119 +echo "DISTRO INFORMATION:"
  120 +f_div_section
  121 +echo "NAME: .... ${F_ABOUT_DISTRO_R[0]}"
  122 +echo "VERSION: . ${F_ABOUT_DISTRO_R[1]}"
  123 +echo "BASED: ... ${F_ABOUT_DISTRO_R[2]}"
  124 +echo "ARCH: .... ${F_ABOUT_DISTRO_R[3]}"
  125 +f_div_section
  126 +
  127 +if [[ "${F_ABOUT_DISTRO_R[2]}" == "Debian" ]] || [[ "${F_ABOUT_DISTRO_R[2]}" == "RedHat" ]] ||
  128 + [[ "${F_ABOUT_DISTRO_R[2]}" == "Suse" ]] ; then
  129 + if [[ "${F_ABOUT_DISTRO_R[2]}" == "Debian" ]] ; then
  130 + DISTRO_TYPE="DEB"
  131 + if [[ "${F_ABOUT_DISTRO_R[0]}" == "Ubuntu" ]] ; then
  132 + DISTRO_NAME="Ubuntu"
  133 + if [[ "${F_ABOUT_DISTRO_R[1]}" != "14.04" ]] ; then
  134 + f_div_section
  135 + f_yes_no "Linux version may be incompatible with this installer (expected: 14.04/obtained: ${F_ABOUT_DISTRO_R[1]})! Continue?"
  136 + if [ ${YES_NO_R} -eq 0 ] ; then
  137 + exit 0
  138 + fi
  139 + fi
  140 + elif [[ "${F_ABOUT_DISTRO_R[0]}" == "Debian GNU/Linux" ]] ; then
  141 + DISTRO_NAME="Debian"
  142 + if [[ "${F_ABOUT_DISTRO_R[1]}" != "8" ]] ; then
  143 + f_div_section
  144 + f_yes_no "Linux version may be incompatible with this installer (expected: 8/obtained: ${F_ABOUT_DISTRO_R[1]})! Continue?"
  145 + if [ ${YES_NO_R} -eq 0 ] ; then
  146 + exit 0
  147 + fi
  148 + fi
  149 + else
  150 + f_div_section
  151 + f_yes_no "Linux distro may be incompatible with this installer (expected: Ubuntu or Debian/obtained: ${F_ABOUT_DISTRO_R[0]})! Continue?"
  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]}" != "7"* ]] ; then
  161 + f_div_section
  162 + f_yes_no "Linux version may be incompatible with this installer (expected: 7.X/obtained: ${F_ABOUT_DISTRO_R[1]})! Continue?"
  163 + if [ ${YES_NO_R} -eq 0 ] ; then
  164 + exit 0
  165 + fi
  166 + fi
  167 + elif [[ "${F_ABOUT_DISTRO_R[0]}" == "CentOS Linux" ]] ; then
  168 + DISTRO_NAME="CentOS"
  169 + if [[ "${F_ABOUT_DISTRO_R[1]}" != "7"* ]] ; then
  170 + f_div_section
  171 + f_yes_no "Linux version may be incompatible with this installer (expected: 7.X/obtained: ${F_ABOUT_DISTRO_R[1]})! Continue?"
  172 + if [ ${YES_NO_R} -eq 0 ] ; then
  173 + exit 0
  174 + fi
  175 + fi
  176 + else
  177 + f_div_section
  178 + 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?"
  179 + if [ ${YES_NO_R} -eq 0 ] ; then
  180 + exit 0
  181 + fi
  182 + fi
  183 + elif [[ "${F_ABOUT_DISTRO_R[2]}" == "Suse" ]] ; then
  184 + DISTRO_TYPE="SUSE"
  185 + if [[ "${F_ABOUT_DISTRO_R[0]}" == "openSUSE" ]] ; then
  186 + DISTRO_NAME="openSUSE"
  187 + if [[ "${F_ABOUT_DISTRO_R[1]}" != "13."* ]] ; then
  188 + f_div_section
  189 + f_yes_no "Linux version may be incompatible with this installer (expected: 13.X/obtained: ${F_ABOUT_DISTRO_R[1]})! Continue?"
  190 + if [ ${YES_NO_R} -eq 0 ] ; then
  191 + exit 0
  192 + fi
  193 + fi
  194 + elif [[ "${F_ABOUT_DISTRO_R[0]}" == "SLES" ]] ; then
  195 + DISTRO_NAME="SLES"
  196 + if [[ "${F_ABOUT_DISTRO_R[1]}" != "12."* ]] ; then
  197 + f_div_section
  198 + f_yes_no "Linux version may be incompatible with this installer (expected: 12.X/obtained: ${F_ABOUT_DISTRO_R[1]})! Continue?"
  199 + if [ ${YES_NO_R} -eq 0 ] ; then
  200 + exit 0
  201 + fi
  202 + fi
  203 + else
  204 + f_div_section
  205 + 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?"
  206 + if [ ${YES_NO_R} -eq 0 ] ; then
  207 + exit 0
  208 + fi
  209 + fi
  210 + fi
  211 +
  212 + if [[ "${F_ABOUT_DISTRO_R[3]}" != "x86_64" ]] ; then
  213 + f_enter_to_cont "Linux architecture completely incompatible with this installer (expected: x86_64/obtained: ${F_ABOUT_DISTRO_R[3]})!"
  214 + exit 0
  215 + fi
  216 +else
  217 + 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]})!"
  218 + exit 0
  219 +fi
  220 +f_close_section
  221 +
  222 +# < -----------------------------------------
  223 +
  224 +# > -----------------------------------------
  225 +# Dá ao usuário a possibilidade de usar o instalador no modo rápido. Bom para
  226 +# conhecer/testar o sistema de forma simples sem preucupar-se com configurações!
  227 +
  228 +# NOTE: É possível forçar o processo de instalação no modo rápido setando
  229 +# "FAST_INST" com 1! By Questor
  230 +FAST_INST=0
  231 +if [ ${FAST_INST} -eq 0 ] ; then
  232 + f_open_section
  233 + f_div_section
  234 + f_yes_no "Use fast install (use default values for most of the options)?
  235 +
  236 +NOTE: RECOMMENDED FOR THOSE who want to KNOW and TEST the LB system components
  237 +quickly and easily. DO NOT USE FOR PRODUCTION ENVIRONMENT! If YES the
  238 +installation of all LB system components MUST AND WILL BE LOCAL!
  239 +
  240 +Use it?"
  241 + if [ ${YES_NO_R} -eq 1 ] ; then
  242 +
  243 + # NOTE: Essa variável serve apenas para "preservar" o valor
  244 + # setado pelo usuário sendo somente "leitura". A variável a
  245 + # ser usada nas regras deve ser "EZ_I_SKIP_ON_V" (ez_i.bash)! Essa
  246 + # estratégia serve para mudarmos o comportamento do "ez_i.bash"
  247 + # de acordo com as circunstâncias! By Questor
  248 + FAST_INST=1
  249 +
  250 + # NOTE: Essa variável é para consumo do "ez_i.bash", para que ele
  251 + # não execute algumas funções e torne o processo de
  252 + # instalação mais simples! By Questor
  253 + EZ_I_SKIP_ON_V=1
  254 + fi
  255 + f_close_section
  256 + sleep 1
  257 +fi
  258 +
  259 +# < -----------------------------------------
  260 +
  261 +# > -----------------------------------------
  262 +# Desabilita o SElinux!
  263 +
  264 +if [[ "$DISTRO_TYPE" == "RH" ]] ; then
  265 + EZ_I_SKIP_ON_V=0
  266 + f_open_section
  267 + f_div_section
  268 + f_yes_no "Disable SElinux (use "y" if you never did it)?"
  269 + if [ ${YES_NO_R} -eq 1 ] ; then
  270 + setenforce 0
  271 +
  272 + # NOTE: As condições abaixo visam evitar que o arquivo seja
  273 + # desnecessariamente e erroneamente modificado! By Questor
  274 + EZ_I_SKIP_ON_V=$FAST_INST
  275 + f_fl_cont_str "# SELINUX=enforcing" "/etc/sysconfig/selinux" "The file \"/etc/sysconfig/selinux\" probably has already been changed! Check it!"
  276 + EZ_I_SKIP_ON_V=0
  277 + if [ ${FL_CONT_STR_R} -eq 0 ] ; then
  278 + f_fl_cont_str "SELINUX=disabled" "/etc/sysconfig/selinux"
  279 + if [ ${FL_CONT_STR_R} -eq 0 ] ; then
  280 + f_ez_sed "SELINUX=enforcing" "# SELINUX=enforcing\nSELINUX=disabled" "/etc/sysconfig/selinux"
  281 + fi
  282 + fi
  283 + fi
  284 + f_close_section
  285 +fi
  286 +
  287 +# < -----------------------------------------
  288 +
  289 +# > -----------------------------------------
  290 +# Atualizar a distro (repositório)!
  291 +
  292 +EZ_I_SKIP_ON_V=$FAST_INST
  293 +f_open_section
  294 +if [[ "$DISTRO_TYPE" == "RH" ]] ; then
  295 + if [[ "$DISTRO_NAME" == "RedHat" ]] ; then
  296 + RESOURCES_ARR_P=("Red Hat Enterprise Linux Server")
  297 + f_chk_distro_status "$DISTRO_NAME" RESOURCES_ARR_P[@]
  298 + fi
  299 + f_div_section
  300 + f_yes_no "Update your distro? (\"y\" highly recommended)"
  301 + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] || [ ${YES_NO_R} -eq 1 ] ; then
  302 + yum -y update
  303 + fi
  304 + f_pack_is_inst "git" "yum" "\"git\" already installed!"
  305 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  306 + yum -y install git
  307 + fi
  308 +elif [[ "$DISTRO_TYPE" == "DEB" ]] ; then
  309 + f_div_section
  310 + f_yes_no "Update your distro? (\"y\" highly recommended)"
  311 + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] || [ ${YES_NO_R} -eq 1 ] ; then
  312 + apt-get -y update
  313 + fi
  314 + f_pack_is_inst "git" "apt-get" "\"git\" already installed!"
  315 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  316 + apt-get -y install git
  317 + fi
  318 +elif [[ "$DISTRO_TYPE" == "SUSE" ]] ; then
  319 + if [[ "$DISTRO_NAME" == "SLES" ]] ; then
  320 + RESOURCES_ARR_P=("SUSE_Linux_Enterprise_Server_12_SP1_x86_64"
  321 +"SUSE_Linux_Enterprise_Software_Development_Kit_12_SP1_x86_64"
  322 +"Web_and_Scripting_Module_12_x86_64")
  323 + f_chk_distro_status "SLES" RESOURCES_ARR_P[@]
  324 + fi
  325 + f_div_section
  326 + f_yes_no "Update your distro? (\"y\" highly recommended)"
  327 + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] || [ ${YES_NO_R} -eq 1 ] ; then
  328 + zypper --non-interactive update
  329 + fi
  330 + f_pack_is_inst "git-core" "zypper" "\"git-core\" already installed!"
  331 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  332 + zypper --non-interactive install git-core
  333 + fi
  334 +fi
  335 +f_close_section
  336 +
  337 +# < -----------------------------------------
  338 +
  339 +# > -----------------------------------------
  340 +# Instalar pacotes que são comuns a determinados componentes!
  341 +
  342 +F_COM_PKS_INSTALLED=0
  343 +f_common_packs() {
  344 + : 'Instalar pacotes que são comuns a determinados componentes.'
  345 +
  346 + if [ ${F_COM_PKS_INSTALLED} -eq 0 ] ; then
  347 + if [[ "$DISTRO_TYPE" == "RH" ]] ; then
  348 + f_pack_is_inst "gcc-c++" "yum" "\"gcc-c++\" already installed!"
  349 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  350 + yum -y install gcc-c++
  351 + fi
  352 + f_pack_is_inst "autoconf" "yum" "\"autoconf\" already installed!"
  353 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  354 + yum -y install autoconf
  355 + fi
  356 + f_pack_is_inst "automake" "yum" "\"automake\" already installed!"
  357 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  358 + yum -y install automake
  359 + fi
  360 + f_pack_is_inst "libtool" "yum" "\"libtool\" already installed!"
  361 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  362 + yum -y install libtool
  363 + fi
  364 + f_pack_is_inst "zlib-devel" "yum" "\"zlib-devel\" already installed!"
  365 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  366 + yum -y install zlib-devel
  367 + fi
  368 + f_pack_is_inst "postgresql-devel" "yum" "\"postgresql-devel\" already installed!"
  369 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  370 + yum -y install postgresql-devel
  371 + fi
  372 + elif [[ "$DISTRO_TYPE" == "DEB" ]] ; then
  373 + f_pack_is_inst "g++" "apt-get" "\"g++\" already installed!"
  374 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  375 + apt-get -y install g++
  376 + fi
  377 + f_pack_is_inst "autoconf" "apt-get" "\"autoconf\" already installed!"
  378 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  379 + apt-get -y install autoconf
  380 + fi
  381 + f_pack_is_inst "make" "apt-get" "\"make\" already installed!"
  382 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  383 + apt-get -y install make
  384 + fi
  385 + f_pack_is_inst "libtool" "apt-get" "\"libtool\" already installed!"
  386 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  387 + apt-get -y install libtool
  388 + fi
  389 + f_pack_is_inst "zlib1g-dev" "apt-get" "\"zlib1g-dev\" already installed!"
  390 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  391 + apt-get -y install zlib1g-dev
  392 + fi
  393 + f_pack_is_inst "libpq-dev" "apt-get" "\"libpq-dev\" already installed!"
  394 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  395 + apt-get -y install libpq-dev
  396 + fi
  397 + elif [[ "$DISTRO_TYPE" == "SUSE" ]] ; then
  398 + f_pack_is_inst "gcc-c++" "zypper" "\"gcc-c++\" already installed!"
  399 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  400 + zypper --non-interactive install gcc-c++
  401 + fi
  402 + if [[ "$DISTRO_NAME" != "SLES" ]] ; then
  403 + f_pack_is_inst "autoconf" "zypper" "\"autoconf\" already installed!"
  404 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  405 + zypper --non-interactive install autoconf
  406 + fi
  407 + f_pack_is_inst "automake" "zypper" "\"automake\" already installed!"
  408 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  409 + zypper --non-interactive install automake
  410 + fi
  411 + f_pack_is_inst "make" "zypper" "\"make\" already installed!"
  412 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  413 + zypper --non-interactive install make
  414 + fi
  415 + f_pack_is_inst "libtool" "zypper" "\"libtool\" already installed!"
  416 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  417 + zypper --non-interactive install libtool
  418 + fi
  419 + fi
  420 + f_pack_is_inst "zlib-devel" "zypper" "\"zlib-devel\" already installed!"
  421 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  422 + zypper --non-interactive install zlib-devel
  423 + fi
  424 + f_pack_is_inst "postgresql-devel" "zypper" "\"postgresql-devel\" already installed!"
  425 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  426 + zypper --non-interactive install postgresql-devel
  427 + fi
  428 + fi
  429 + F_COM_PKS_INSTALLED=1
  430 + fi
  431 +}
  432 +
  433 +# < -----------------------------------------
  434 +
  435 +# > -----------------------------------------
  436 +# Passa comando para serviços conforme a distro em execução!
  437 +
  438 +f_svc_helper() {
  439 + : 'Passa comando para serviços conforme a distro em execução.
  440 +
  441 + Args:
  442 + SVC_HLP_NM_P (str): Nome do serviço.
  443 + SVC_HLP_CMD_P (str): Comando para o serviço executar.
  444 + SVC_HLP_IN_SILENCE (Optional[int]): 1 - Sem saída para o terminal;
  445 + 0 - Com saída para o terminal. Padrão 0.
  446 + '
  447 +
  448 + SVC_HLP_NM_P=$1
  449 + SVC_HLP_CMD_P=$2
  450 +
  451 + SVC_HLP_IN_SILENCE=$3
  452 + if [ -z "$SVC_HLP_IN_SILENCE" ] ; then
  453 + SVC_HLP_IN_SILENCE=0
  454 + fi
  455 + if [ ${SVC_HLP_IN_SILENCE} -eq 1 ] ; then
  456 + SVC_HLP_SILENCE_CMD=" &>/dev/null"
  457 + fi
  458 +
  459 + if [[ "$DISTRO_TYPE" == "RH" ]] ; then
  460 + eval "systemctl $SVC_HLP_CMD_P $SVC_HLP_NM_P.service$SVC_HLP_SILENCE_CMD"
  461 + elif [[ "$DISTRO_TYPE" == "SUSE" ]] ; then
  462 + eval "service $SVC_HLP_NM_P $SVC_HLP_CMD_P$SVC_HLP_SILENCE_CMD"
  463 + elif [[ "$DISTRO_TYPE" == "DEB" ]] ; then
  464 + eval "service $SVC_HLP_NM_P $SVC_HLP_CMD_P$SVC_HLP_SILENCE_CMD"
  465 + fi
  466 +}
  467 +
  468 +# < -----------------------------------------
  469 +
  470 +# > -----------------------------------------
  471 +# Abrir o firewall para uma porta definida para um dado serviço
  472 +
  473 +f_fire_hlp() {
  474 + : 'Abrir o firewall para uma porta definida para um dado serviço.
  475 +
  476 + Args:
  477 + FIRE_SVC_NM_P (str): Nome do serviço.
  478 + FIRE_PORT_P (int): Porta a ser aberta.
  479 + '
  480 +
  481 + FIRE_SVC_NM_P=$1
  482 + FIRE_PORT_P=$2
  483 + if [[ "$DISTRO_TYPE" == "RH" ]] || [[ "$DISTRO_TYPE" == "SUSE" ]] ; then
  484 + EZ_I_SKIP_ON_V=$FAST_INST
  485 + if [[ "$DISTRO_TYPE" == "RH" ]] ; then
  486 + f_div_section
  487 + f_yes_no "Open firewall for $FIRE_SVC_NM_P (TCP $FIRE_PORT_P)?"
  488 + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] || [ ${YES_NO_R} -eq 1 ] ; then
  489 + f_chk_iptables $FIRE_PORT_P "Port $FIRE_PORT_P is already open!" 0 "ACCEPT" "tcp" "NEW"
  490 + if [ ${F_CHK_IPTABLES_R} -eq 1 ] ; then
  491 + firewall-cmd --zone=public --add-port=$FIRE_PORT_P/tcp --permanent
  492 + firewall-cmd --reload
  493 + fi
  494 + fi
  495 + elif [[ "$DISTRO_TYPE" == "SUSE" ]] ; then
  496 + f_div_section
  497 + f_yes_no "Open firewall for $FIRE_SVC_NM_P (TCP $FIRE_PORT_P)?"
  498 + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] || [ ${YES_NO_R} -eq 1 ] ; then
  499 + f_chk_iptables $FIRE_PORT_P "Port $FIRE_PORT_P is already open!" 0 "ACCEPT" "tcp"
  500 + if [ ${F_CHK_IPTABLES_R} -eq 1 ] ; then
  501 + SuSEfirewall2 open EXT TCP $FIRE_PORT_P
  502 + SuSEfirewall2 stop
  503 + SuSEfirewall2 start
  504 + fi
  505 + fi
  506 + fi
  507 + fi
  508 +}
  509 +
  510 +# < -----------------------------------------
  511 +
  512 +# > --------------------------------------------------------------------------
  513 +# INSTALAÇÃO DO LBI - LBIndex!
  514 +# --------------------------------------
  515 +
  516 +BASE_INST_DIR_V="/usr/local/lb"
  517 +# > -----------------------------------------
  518 +# Criar o diretório base da instalação!
  519 +
  520 +f_create_base_dir() {
  521 + EZ_I_SKIP_ON_V=$FAST_INST
  522 + QUESTION_F="Insert where the base installation directory (name \"lb\") will be created (don't use \"/\" at the end).
  523 +Use empty for \"/usr/local\"!"
  524 + f_div_section
  525 + f_get_usr_input "$QUESTION_F" 1
  526 + QUESTION_F=""
  527 + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] || [ -z "$GET_USR_INPUT_R" ] ; then
  528 + f_chk_by_path_hlp "$BASE_INST_DIR_V" "d" "\"$BASE_INST_DIR_V\" directory already created!"
  529 + if [ ${F_CHK_BY_PATH_HLP_R} -eq 0 ] ; then
  530 + mkdir -p "$BASE_INST_DIR_V"
  531 + fi
  532 + else
  533 + BASE_INST_DIR_V="$GET_USR_INPUT_R/lb"
  534 + f_chk_by_path_hlp "$BASE_INST_DIR_V" "d" "\"$BASE_INST_DIR_V\" directory already created!"
  535 + if [ ${F_CHK_BY_PATH_HLP_R} -eq 0 ] ; then
  536 + mkdir -p "$BASE_INST_DIR_V"
  537 + fi
  538 + fi
  539 +}
  540 +
  541 +# < -----------------------------------------
  542 +
  543 +# > -----------------------------------------
  544 +# Instalar o virtualenv-1.11.6 no python2.X!
  545 +
  546 +PYTHON_2_X=""
  547 +VE_2_X=""
  548 +f_inst_ve_py2X() {
  549 + : 'Instala a virtualenv no Python2.X!
  550 +
  551 + Args:
  552 + DONT_PROMPT_TO_INST (Optional[int]): Não questiona o usuário se deseja
  553 + instalar. Padrão 0.
  554 + '
  555 +
  556 + DONT_PROMPT_TO_INST=$1
  557 + if [ -z "$DONT_PROMPT_TO_INST" ] ; then
  558 + DONT_PROMPT_TO_INST=0
  559 + fi
  560 + if [[ "$DISTRO_TYPE" == "RH" ]] ; then
  561 + PYTHON_2_X="2.7"
  562 + VE_2_X="ve27"
  563 + elif [[ "$DISTRO_TYPE" == "DEB" ]] || [[ "$DISTRO_TYPE" == "SUSE" ]] ; then
  564 + PYTHON_2_X="2.7"
  565 + VE_2_X="ve27"
  566 + fi
  567 + if [ ${DONT_PROMPT_TO_INST} -eq 1 ] || [ ${FAST_INST} -eq 1 ] ; then
  568 + EZ_I_SKIP_ON_V=1
  569 + else
  570 + EZ_I_SKIP_ON_V=$FAST_INST
  571 + f_div_section
  572 + fi
  573 + f_yes_no "Install virtualenv-1.11.6 on python$PYTHON_2_X?"
  574 + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] || [ ${YES_NO_R} -eq 1 ] ; then
  575 + EZ_I_SKIP_ON_V=$FAST_INST
  576 + if [[ "$DISTRO_TYPE" == "RH" ]] || [[ "$DISTRO_TYPE" == "SUSE" ]] ; then
  577 + f_chk_by_path_hlp "/usr/bin/virtualenv-$PYTHON_2_X" "f" "virtualenv-1.11.6 already installed!"
  578 + elif [[ "$DISTRO_TYPE" == "DEB" ]] ; then
  579 + f_chk_by_path_hlp "/usr/local/bin/virtualenv-$PYTHON_2_X" "f" "virtualenv-1.11.6 already installed!"
  580 + fi
  581 + if [ ${F_CHK_BY_PATH_HLP_R} -eq 0 ] ; then
  582 + if [[ "$DISTRO_TYPE" == "RH" ]] ; then
  583 + f_pack_is_inst "python-setuptools" "yum" "\"python-setuptools\" already installed!"
  584 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  585 + yum -y install python-setuptools
  586 + fi
  587 + elif [[ "$DISTRO_TYPE" == "DEB" ]] ; then
  588 + f_pack_is_inst "python-setuptools" "apt-get" "\"python-setuptools\" already installed!"
  589 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  590 + apt-get -y install python-setuptools
  591 + fi
  592 + elif [[ "$DISTRO_TYPE" == "SUSE" ]] ; then
  593 + # >>>>>>>>>>>>> * Para "zypper --non-interactive install python-setuptools", se o problema abaixo aparecer...
  594 +
  595 + # Problem: python-setuptools-5.4.1-2.1.4.noarch requires python, but this requirement cannot be provided
  596 + # uninstallable providers: python-2.7.8-1.1.x86_64[openSUSE-13.2-0]
  597 + # python3-3.4.1-4.2.1.x86_64[openSUSE-13.2-0]
  598 + # python-2.7.8-1.1.i586[repo-oss]
  599 + # python3-3.4.1-4.2.1.i586[repo-oss]
  600 + # python-2.7.8-1.1.x86_64[repo-oss]
  601 + # python3-3.4.1-4.2.1.x86_64[repo-oss]
  602 + # Solution 1: deinstallation of patterns-openSUSE-minimal_base-conflicts-20141007-2.1.x86_64
  603 + # Solution 2: do not install python-setuptools-5.4.1-2.1.4.noarch
  604 + # Solution 3: do not install python-setuptools-5.4.1-2.1.4.noarch
  605 + # Solution 4: break python-setuptools-5.4.1-2.1.4.noarch by ignoring some of its dependencies
  606 +
  607 + # Choose from above solutions by number or cancel [1/2/3/4/c] (c):
  608 +
  609 + # <<<<<<<<<<<<<
  610 +
  611 + # >>>>>>>>>>>>> * Usar 1 e y...
  612 +
  613 + # Choose from above solutions by number or cancel [1/2/3/4/c] (c): 1
  614 + # Resolving dependencies...
  615 + # Resolving package dependencies...
  616 +
  617 + # The following 4 NEW packages are going to be installed:
  618 + # libsqlite3-0 python python-setuptools python-xml
  619 +
  620 + # The following package is going to be REMOVED:
  621 + # patterns-openSUSE-minimal_base-conflicts
  622 +
  623 + # The following pattern is going to be REMOVED:
  624 + # minimal_base-conflicts
  625 +
  626 + # 4 new packages to install, 1 to remove.
  627 + # Overall download size: 1.1 MiB. Already cached: 0 B After the operation, additional 4.2 MiB will be used.
  628 + # Continue? [y/n/? shows all options] (y):
  629 +
  630 + # <<<<<<<<<<<<<
  631 +
  632 + # f_pack_is_inst "python-setuptools" "zypper" "\"python-setuptools\" already installed!"
  633 + # if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  634 + # zypper --non-interactive install python-setuptools
  635 + # zypper --non-interactive install python-devel
  636 + # fi
  637 + f_pack_is_inst "python-setuptools" "zypper" "\"python-setuptools\" already installed!"
  638 + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
  639 + f_get_stderr_stdout "zypper --non-interactive install python-setuptools"
  640 + if [[ $F_GET_STDERR_R$F_GET_STDOUT_R == *"Problem: python-setuptools-"* ]] &&
  641 + [[ $F_GET_STDERR_R$F_GET_STDOUT_R == *".noarch requires python, but this requirement cannot be provided"* ]] ; then
  642 + EZ_I_SKIP_ON_V=0
  643 + f_enter_to_cont "The package management \"zypper\" WILL ASK YOU FOR ADDITIONAL OPTIONS!
  644 +We highly recommended you answer \"1\" and \"y\", respectively!"
  645 + EZ_I_SKIP_ON_V=$FAST_INST
  646 + zypper install python-setuptools
  647 + zypper --non-interactive install python-devel
  648 + else
  649 + echo "$F_GET_STDERR_R$F_GET_STDOUT_R"
  650 + fi
  651 + fi
  652 + fi
  653 + f_common_packs
  654 + cd "$SCRIPTDIR_V"
  655 + cd ./other-srcs-n-apps
  656 + tar -zxvf virtualenv-1.11.6.tar.gz
  657 + cd virtualenv-1.11.6
  658 + python$PYTHON_2_X setup.py install
  659 + cd ..
  660 + rm -rf virtualenv-1.11.6
  661 + fi
  662 + fi
  663 + EZ_I_SKIP_ON_V=$FAST_INST
  664 +}
  665 +
  666 +# < -----------------------------------------
  667 +
  668 +# > -----------------------------------------
  669 +# Criar o ambiente virtual (python2.X)!
  670 +
  671 +f_create_ve2X() {
  672 + : 'Cria o ambiente virtual (python2.X)!
  673 +
  674 + Args:
  675 + DONT_PROMPT_TO_INST (Optional[int]): Não questiona o usuário se deseja
  676 + criar. Padrão 0.
  677 + '
  678 +
  679 + DONT_PROMPT_TO_INST=$1
  680 + if [ -z "$DONT_PROMPT_TO_INST" ] ; then
  681 + DONT_PROMPT_TO_INST=0
  682 + fi
  683 + if [ ${DONT_PROMPT_TO_INST} -eq 1 ] || [ ${FAST_INST} -eq 1 ] ; then
  684 + EZ_I_SKIP_ON_V=1
  685 + else
  686 + EZ_I_SKIP_ON_V=$FAST_INST
  687 + fi
  688 + f_enter_to_cont "Create the virtual environment (python$PYTHON_2_X)!"
  689 + EZ_I_SKIP_ON_V=$FAST_INST
  690 + 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\"!"
  691 + if [ ${F_CHK_BY_PATH_HLP_R} -eq 0 ] ; then
  692 + f_common_packs
  693 + cd "$BASE_INST_DIR_V"
  694 + virtualenv-$PYTHON_2_X $VE_2_X
  695 + mkdir "$BASE_INST_DIR_V/$VE_2_X/src"
  696 + fi
  697 + EZ_I_SKIP_ON_V=$FAST_INST
  698 +}
  699 +
  700 +# < -----------------------------------------
  701 +
  702 +# > -----------------------------------------
  703 +# Instalar as dependências python da LIB - liblightbase!
  704 +
  705 +f_inst_lib_py_packs() {
  706 + : 'Instala a liblightbase!
  707 +
  708 + Args:
  709 + DONT_PROMPT_TO_INST (Optional[int]): Não questiona o usuário se deseja
  710 + instalar. Padrão 0.
  711 + '
  712 +
  713 + DONT_PROMPT_TO_INST=$1
  714 + if [ -z "$DONT_PROMPT_TO_INST" ] ; then
  715 + DONT_PROMPT_TO_INST=0
  716 + fi
  717 + if [ ${DONT_PROMPT_TO_INST} -eq 1 ] || [ ${FAST_INST} -eq 1 ] ; then
  718 + EZ_I_SKIP_ON_V=1
  719 + else
  720 + EZ_I_SKIP_ON_V=$FAST_INST
  721 + fi
  722 + cd "$SCRIPTDIR_V"
  723 + bash py-packs-liblightbase.bash "$EZ_I_SKIP_ON_V" "$BASE_INST_DIR_V" "$PYTHON_2_X" "$VE_2_X"
  724 + EZ_I_SKIP_ON_V=$FAST_INST
  725 +}
  726 +
  727 +# < -----------------------------------------
  728 +
  729 +
  730 +# > -----------------------------------------
  731 +# Instalar a LIB - liblightbase!
  732 +
  733 +f_inst_lib() {
  734 + : 'Instala a liblightbase!
  735 +
  736 + Args:
  737 + DONT_PROMPT_TO_INST (Optional[int]): Não questiona o usuário se deseja
  738 + instalar. Padrão 0.
  739 + '
  740 +
  741 + DONT_PROMPT_TO_INST=$1
  742 + if [ -z "$DONT_PROMPT_TO_INST" ] ; then
  743 + DONT_PROMPT_TO_INST=0
  744 + fi
  745 + if [ ${DONT_PROMPT_TO_INST} -eq 1 ] || [ ${FAST_INST} -eq 1 ] ; then
  746 + EZ_I_SKIP_ON_V=1
  747 + else
  748 + EZ_I_SKIP_ON_V=$FAST_INST
  749 + f_div_section
  750 + fi
  751 + f_yes_no "Install the LIB - liblightbase?"
  752 + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] || [ ${YES_NO_R} -eq 1 ] ; then
  753 + EZ_I_SKIP_ON_V=$FAST_INST
  754 + f_inst_lib_py_packs 1
  755 + f_chk_by_path_hlp "$BASE_INST_DIR_V/$VE_2_X/src/liblightbase" "d" "\"liblightbase\" already installed in \"$BASE_INST_DIR_V/$VE_2_X/src\"!"
  756 + F_BAK_MD_R=1
  757 + if [ ${F_CHK_BY_PATH_HLP_R} -eq 1 ] ; then
  758 + f_ez_mv_bak "$BASE_INST_DIR_V/$VE_2_X/src/liblightbase" "Backup old version and update? (\"y\" recommended)"
  759 + fi
  760 + if [ ${F_BAK_MD_R} -eq 1 ] ; then
  761 + cd "$SCRIPTDIR_V"
  762 + tar -zxvf liblightbase.tar.gz
  763 + mv "$SCRIPTDIR_V/liblightbase" "$BASE_INST_DIR_V/$VE_2_X/src/"
  764 + cd "$BASE_INST_DIR_V/$VE_2_X/src/liblightbase"
  765 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
  766 + fi
  767 + fi
  768 + EZ_I_SKIP_ON_V=$FAST_INST
  769 +}
  770 +
  771 +# < -----------------------------------------
  772 +
  773 +# > -----------------------------------------
  774 +# Instalar as dependências python2.X do LBI - LBIndex!
  775 +
  776 +f_inst_lbi_py_packs() {
  777 + : 'Instala as dependências do LBI - LBIndex!
  778 +
  779 + Args:
  780 + DONT_PROMPT_TO_INST (Optional[int]): Não questiona o usuário se deseja
  781 + instalar. Padrão 0.
  782 + '
  783 +
  784 + DONT_PROMPT_TO_INST=$1
  785 + if [ -z "$DONT_PROMPT_TO_INST" ] ; then
  786 + DONT_PROMPT_TO_INST=0
  787 + fi
  788 + if [ ${DONT_PROMPT_TO_INST} -eq 1 ] || [ ${FAST_INST} -eq 1 ] ; then
  789 + EZ_I_SKIP_ON_V=1
  790 + else
  791 + EZ_I_SKIP_ON_V=$FAST_INST
  792 + fi
  793 + cd "$SCRIPTDIR_V"
  794 + bash py-packs-LBIndex.bash "$EZ_I_SKIP_ON_V" "$BASE_INST_DIR_V" "$PYTHON_2_X" "$VE_2_X"
  795 + EZ_I_SKIP_ON_V=$FAST_INST
  796 +}
  797 +
  798 +# < -----------------------------------------
  799 +
  800 +HTTP_PORT_F=6543
  801 +# > -----------------------------------------
  802 +# Instalar e configurar o LBI - LBIndex!
  803 +
  804 +EZ_I_SKIP_ON_V=$FAST_INST
  805 +f_open_main_section
  806 +f_div_section
  807 +f_yes_no "Install the LBI - LBIndex?"
  808 +if [ ${EZ_I_SKIP_ON_V} -eq 1 ] || [ ${YES_NO_R} -eq 1 ] ; then
  809 +
  810 + # NOTE: As funções abaixo provêm recursos necessários ao
  811 + # LBI - LBIndex! By Questor
  812 + f_create_base_dir
  813 + f_inst_ve_py2X 1
  814 + f_create_ve2X 1
  815 + f_inst_lib 1
  816 + f_inst_lbi_py_packs 1
  817 +
  818 + f_chk_by_path_hlp "$BASE_INST_DIR_V/$VE_2_X/src/LBIndex" "d" "\"LBIndex\" already installed in \"$BASE_INST_DIR_V/$VE_2_X/src\"!"
  819 + F_BAK_MD_R=1
  820 + if [ ${F_CHK_BY_PATH_HLP_R} -eq 1 ] ; then
  821 + f_ez_mv_bak "$BASE_INST_DIR_V/$VE_2_X/src/LBIndex" "Backup old version and update? (\"y\" recommended)"
  822 + fi
  823 + if [ ${F_BAK_MD_R} -eq 1 ] ; then
  824 + cd "$SCRIPTDIR_V"
  825 + tar -zxvf LBIndex.tar.gz
  826 + mv "$SCRIPTDIR_V/LBIndex" "$BASE_INST_DIR_V/$VE_2_X/src/"
  827 + cd "$BASE_INST_DIR_V/$VE_2_X/src/LBIndex"
  828 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
  829 +
  830 + \cp "$BASE_INST_DIR_V/$VE_2_X/src/LBIndex/lbindex-dist" "$BASE_INST_DIR_V/$VE_2_X/src/LBIndex/lbindex-prov"
  831 +
  832 + if [[ "$DISTRO_TYPE" == "RH" ]] || [[ "$DISTRO_TYPE" == "SUSE" ]] ; then
  833 + f_ez_sed "<LBI_SCRIPT_HEAD>" "# chkconfig: 2345 99 01\n# description: Esquema de inicialização do LBIndex\n# processname: lbindex" "$BASE_INST_DIR_V/$VE_2_X/src/LBIndex/lbindex-prov"
  834 + elif [[ "$DISTRO_TYPE" == "DEB" ]] ; then
  835 + f_ez_sed "<LBI_SCRIPT_HEAD>" "### BEGIN INIT INFO\n# Provides: lbindex\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/LBIndex/lbindex-prov"
  836 + fi
  837 +
  838 + f_ez_sed "<LBINDEXMG_PATH>" "$BASE_INST_DIR_V/$VE_2_X/src/LBIndex/lbindexmg" "$BASE_INST_DIR_V/$VE_2_X/src/LBIndex/lbindex-prov"
  839 + rm -rf "/etc/init.d/lbindex"
  840 + mv "$BASE_INST_DIR_V/$VE_2_X/src/LBIndex/lbindex-prov" "/etc/init.d/lbindex"
  841 +
  842 + cd /etc/init.d/
  843 + if [[ "$DISTRO_TYPE" == "RH" ]] ; then
  844 +
  845 + chmod 755 lbindex
  846 + chkconfig --add lbindex &>/dev/null
  847 + chkconfig --level 345 lbindex on
  848 + elif [[ "$DISTRO_TYPE" == "SUSE" ]] ; then
  849 +
  850 + # TODO: A linha logo abaixo é realmente necessária? Rever p/ os outros instaladores tb! By Questor
  851 + chmod 755 lbindex
  852 + chkconfig --add lbindex &>/dev/null
  853 + chkconfig --level 345 lbindex on
  854 + elif [[ "$DISTRO_TYPE" == "DEB" ]] ; then
  855 + update-rc.d -f lbindex remove &>/dev/null
  856 + chmod +x ./lbindex
  857 + update-rc.d lbindex defaults
  858 + fi
  859 +
  860 + \cp "$BASE_INST_DIR_V/$VE_2_X/src/LBIndex/lbindexmg-dist" "$BASE_INST_DIR_V/$VE_2_X/src/LBIndex/lbindexmg"
  861 + f_ez_sed "<VIRTUALENV_PATH>" "$BASE_INST_DIR_V/$VE_2_X" "$BASE_INST_DIR_V/$VE_2_X/src/LBIndex/lbindexmg"
  862 +
  863 + LBG_URL_F="http://127.0.0.1:8008/lbg"
  864 + QUESTION_F="Enter the LBG - LBGenerator URL.
  865 +Use empty for \"$LBG_URL_F\" (LOCALHOST)!"
  866 +
  867 + f_div_section
  868 + f_get_usr_input "$QUESTION_F" 1
  869 + QUESTION_F=""
  870 + if [ -n "$GET_USR_INPUT_R" ] ; then
  871 + LBG_URL_F=$GET_USR_INPUT_R
  872 + fi
  873 +
  874 + QUESTION_F="Enter the port number for http service.
  875 +Use empty for \"$HTTP_PORT_F\" (recommended)!"
  876 +
  877 + f_div_section
  878 + f_get_usr_input "$QUESTION_F" 1
  879 + QUESTION_F=""
  880 + if [ -n "$GET_USR_INPUT_R" ] ; then
  881 + HTTP_PORT_F=$GET_USR_INPUT_R
  882 + fi
  883 +
  884 + \cp "$BASE_INST_DIR_V/$VE_2_X/src/LBIndex/production.ini-dist" "$BASE_INST_DIR_V/$VE_2_X/src/LBIndex/production.ini"
  885 + f_ez_sed "<HTTP_SERVICE_PORT_NUM>" "$HTTP_PORT_F" "$BASE_INST_DIR_V/$VE_2_X/src/LBIndex/production.ini"
  886 + f_ez_sed "<MACHINE_IP_OR_NAME>" "$LBG_URL_F" "$BASE_INST_DIR_V/$VE_2_X/src/LBIndex/production.ini"
  887 +
  888 + f_svc_helper "lbindex" "restart"
  889 + fi
  890 + f_fire_hlp "lbindex" $HTTP_PORT_F
  891 +fi
  892 +f_close_main_section
  893 +
  894 +# < -----------------------------------------
  895 +
  896 +# < --------------------------------------------------------------------------
  897 +
  898 +# > --------------------------------------------------------------------------
  899 +# FINAL!
  900 +# --------------------------------------
  901 +
  902 +EZ_I_SKIP_ON_V=0
  903 +read -d '' TITLE_F <<"EOF"
  904 +Installer finished! Thanks!
  905 +EOF
  906 +
  907 +LBI_SVC_SYNTAX=""
  908 +if [[ "$DISTRO_TYPE" == "RH" ]] ; then
  909 + LBI_SVC_SYNTAX="systemctl start lbindex.service
  910 + systemctl stop lbindex.service"
  911 +else
  912 + LBI_SVC_SYNTAX="service lbindex start
  913 + service lbindex stop"
  914 +fi
  915 +
  916 +USEFUL_INFO_F="To configure...
  917 + vi $BASE_INST_DIR_V/$VE_2_X/src/LBIndex/production.ini
  918 +
  919 +python$PYTHON_2_X virtual environment path...
  920 + $BASE_INST_DIR_V/$VE_2_X
  921 +
  922 +To start/stop...
  923 + $LBI_SVC_SYNTAX
  924 +
  925 +Log...
  926 + less /var/log/lbindex.log"
  927 +
  928 +f_end "$TITLE_F" "$USEFUL_INFO_F"
  929 +TITLE_F=""
  930 +USEFUL_INFO_F=""
  931 +
  932 +# < --------------------------------------------------------------------------
... ...
install.sh
... ... @@ -1,725 +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   -LBI - LBIndex Installer
25   -EOF
26   -
27   -read -d '' VERSION_F <<"EOF"
28   -0.1.1.0
29   -EOF
30   -
31   -read -d '' ABOUT_F <<"EOF"
32   -This script will install LBI - LBIndex the LightBase indexing component!
33   -
34   -Have fun! =D
35   -EOF
36   -
37   -read -d '' WARNINGS_F <<"EOF"
38   -- This installer is compatible with RHEL, SUSE, Debian or distributions
39   -based on these.
40   -
41   -- We RECOMMEND you...
42   - Install all the components (answer yes to everything). Except
43   - contrary guidance!
44   - Check for previous installations! If there is previous
45   - installations consider this variant in the process!
46   - Although this is not mandatory, do the installation process in an
47   - exclusive machine for this.
48   -
49   -- We NOTICE you...
50   - This installer assumes that the target distribution has a "standard
51   - setup". This may include components such as firewall, SELinux
52   - and others.
53   -
54   -- We WARNING you...
55   - THIS INSTALLER AND RESULTING PRODUCTS COMES WITH ABSOLUTELY NO WARRANTY!
56   - USE AT YOUR OWN RISK! WE ARE NOT RESPONSIBLE FOR ANY DAMAGE TO YOURSELF,
57   - HARDWARE, OR CO-WORKERS. EXCEPT IN CASES WHERE THERE ARE SIGNED CONTRACT
58   - THAT REGULATES THIS!
59   -EOF
60   -
61   -read -d '' COMPANY_F <<"EOF"
62   -BR Light LTDA - LightBase Consulting in Public Software/LightBase Consultoria em Software Público
63   -Free Software + Our Ideas = Best Solution!/Software Livre + Nossas Idéias = Melhor Solução!
64   -+55-61-3347-1949 - http://www.LightBase.com.br - Brasil-DF
65   -EOF
66   -
67   -f_begin "$TITLE_F" "$VERSION_F" "$ABOUT_F" "$WARNINGS_F" "$COMPANY_F"
68   -ABOUT_F=""
69   -WARNINGS_F=""
70   -
71   -# < --------------------------------------------------------------------------
72   -
73   -# > --------------------------------------------------------------------------
74   -# TERMOS E LICENÇA!
75   -# --------------------------------------
76   -
77   -read -d '' TERMS_LICEN_F <<"EOF"
78   -BY USING THIS INSTALLER YOU ARE AGREEING TO THE TERMS OF USE OF ALL
79   -INVOLVED SOFTWARE!
80   -EOF
81   -
82   -f_terms_licen "$TERMS_LICEN_F"
83   -TERMS_LICEN_F=""
84   -
85   -# < --------------------------------------------------------------------------
86   -
87   -# > -----------------------------------------
88   -# Checar se o usuário é root!
89   -
90   -f_is_root
91   -
92   -# < -----------------------------------------
93   -
94   -# > --------------------------------------------------------------------------
95   -# INTRUÇÕES!
96   -# --------------------------------------
97   -
98   -read -d '' INSTRUCT_F <<"EOF"
99   -- TO CANCEL installation at any time use Ctrl+c!
100   -EOF
101   -
102   -f_instruct "$INSTRUCT_F"
103   -INSTRUCT_F=""
104   -
105   -# < --------------------------------------------------------------------------
106   -
107   -DISTRO_TYPE=""
108   -DISTRO_NAME=""
109   -# > -----------------------------------------
110   -# Checar se a distro é compatível!
111   -
112   -f_open_section
113   -f_about_distro
114   -f_div_section
115   -echo "DISTRO INFORMATION:"
116   -f_div_section
117   -echo "NAME: .... ${F_ABOUT_DISTRO_R[0]}"
118   -echo "VERSION: . ${F_ABOUT_DISTRO_R[1]}"
119   -echo "BASED: ... ${F_ABOUT_DISTRO_R[2]}"
120   -echo "ARCH: .... ${F_ABOUT_DISTRO_R[3]}"
121   -f_div_section
122   -
123   -if [[ "${F_ABOUT_DISTRO_R[2]}" == "Debian" ]] || [[ "${F_ABOUT_DISTRO_R[2]}" == "RedHat" ]] ||
124   - [[ "${F_ABOUT_DISTRO_R[2]}" == "Suse" ]] ; then
125   - if [[ "${F_ABOUT_DISTRO_R[2]}" == "Debian" ]] ; then
126   - DISTRO_TYPE="DEB"
127   - if [[ "${F_ABOUT_DISTRO_R[0]}" == "Ubuntu" ]] ; then
128   - DISTRO_NAME="Ubuntu"
129   - if [[ "${F_ABOUT_DISTRO_R[1]}" != "14.04" ]] ; then
130   - f_div_section
131   - f_yes_no "Linux version may be incompatible with this installer (expected: 14.04/obtained: ${F_ABOUT_DISTRO_R[1]})! Continue?"
132   - f_div_section
133   - if [ ${YES_NO_R} -eq 0 ] ; then
134   - exit 0
135   - fi
136   - fi
137   - elif [[ "${F_ABOUT_DISTRO_R[0]}" == "Debian GNU/Linux" ]] ; then
138   - DISTRO_NAME="Debian"
139   - if [[ "${F_ABOUT_DISTRO_R[1]}" != "8" ]] ; then
140   - f_div_section
141   - f_yes_no "Linux version may be incompatible with this installer (expected: 8/obtained: ${F_ABOUT_DISTRO_R[1]})! Continue?"
142   - f_div_section
143   - if [ ${YES_NO_R} -eq 0 ] ; then
144   - exit 0
145   - fi
146   - fi
147   - else
148   - f_div_section
149   - f_yes_no "Linux distro may be incompatible with this installer (expected: Ubuntu or Debian/obtained: ${F_ABOUT_DISTRO_R[0]})! Continue?"
150   - f_div_section
151   - if [ ${YES_NO_R} -eq 0 ] ; then
152   - exit 0
153   - fi
154   - fi
155   - elif [[ "${F_ABOUT_DISTRO_R[2]}" == "RedHat" ]] ; then
156   - DISTRO_TYPE="RH"
157   - if [[ "${F_ABOUT_DISTRO_R[0]}" == "Red Hat Enterprise Linux Server" ]] ; then
158   - DISTRO_NAME="RedHat"
159   - if [[ "${F_ABOUT_DISTRO_R[1]}" != "6."* ]] ; then
160   - f_div_section
161   - f_yes_no "Linux version may be incompatible with this installer (expected: 6.X/obtained: ${F_ABOUT_DISTRO_R[1]})! Continue?"
162   - f_div_section
163   - if [ ${YES_NO_R} -eq 0 ] ; then
164   - exit 0
165   - fi
166   - fi
167   - elif [[ "${F_ABOUT_DISTRO_R[0]}" == "CentOS" ]] ; then
168   - DISTRO_NAME="CentOS"
169   - if [[ "${F_ABOUT_DISTRO_R[1]}" != "6."* ]] ; then
170   - f_div_section
171   - f_yes_no "Linux version may be incompatible with this installer (expected: 6.X/obtained: ${F_ABOUT_DISTRO_R[1]})! Continue?"
172   - f_div_section
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   - f_div_section
181   - if [ ${YES_NO_R} -eq 0 ] ; then
182   - exit 0
183   - fi
184   - fi
185   - elif [[ "${F_ABOUT_DISTRO_R[2]}" == "Suse" ]] ; then
186   - DISTRO_TYPE="SUSE"
187   - if [[ "${F_ABOUT_DISTRO_R[0]}" == "openSUSE" ]] ; then
188   - DISTRO_NAME="openSUSE"
189   - if [[ "${F_ABOUT_DISTRO_R[1]}" != "13."* ]] ; then
190   - f_div_section
191   - f_yes_no "Linux version may be incompatible with this installer (expected: 13.X/obtained: ${F_ABOUT_DISTRO_R[1]})! Continue?"
192   - f_div_section
193   - if [ ${YES_NO_R} -eq 0 ] ; then
194   - exit 0
195   - fi
196   - fi
197   - elif [[ "${F_ABOUT_DISTRO_R[0]}" == "SLES" ]] ; then
198   - DISTRO_NAME="SLES"
199   - if [[ "${F_ABOUT_DISTRO_R[1]}" != "12."* ]] ; then
200   - f_div_section
201   - f_yes_no "Linux version may be incompatible with this installer (expected: 12.X/obtained: ${F_ABOUT_DISTRO_R[1]})! Continue?"
202   - f_div_section
203   - if [ ${YES_NO_R} -eq 0 ] ; then
204   - exit 0
205   - fi
206   - fi
207   - else
208   - f_div_section
209   - 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?"
210   - f_div_section
211   - if [ ${YES_NO_R} -eq 0 ] ; then
212   - exit 0
213   - fi
214   - fi
215   - fi
216   -
217   - if [[ "${F_ABOUT_DISTRO_R[3]}" != "x86_64" ]] ; then
218   - f_enter_to_cont "Linux architecture completely incompatible with this installer (expected: x86_64/obtained: ${F_ABOUT_DISTRO_R[3]})!"
219   - exit 0
220   - fi
221   -else
222   - 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]})!"
223   - exit 0
224   -fi
225   -f_close_section
226   -
227   -# < -----------------------------------------
228   -
229   -# > -----------------------------------------
230   -# Dá ao usuário mais avançado a possibilideade de usar o instalador
231   -# simplificado!
232   -
233   -# NOTE: É possível forçar o processo de instalção simplificado setando
234   -# "SIMPLE_INST" com 1! By Questor
235   -SIMPLE_INST=0
236   -if [ ${SIMPLE_INST} -eq 0 ] ; then
237   - f_open_section
238   - f_yes_no "Use simple install (use default values for most of the options)?"
239   - if [ ${YES_NO_R} -eq 1 ] ; then
240   -
241   - # NOTE: Essa variável serve apenas para "preservar" o valor
242   - # setado pelo usuário sendo somente "leitura". A variável a
243   - # ser usada nas regras deve ser "EZ_I_SKIP_ON_V" (ez_i.sh)! Essa
244   - # estratégia serve para mudarmos o comportamento do "ez_i.sh"
245   - # de acordo com as circunstâncias! By Questor
246   - SIMPLE_INST=1
247   -
248   - # NOTE: Essa variável é para consumo do "ez_i.sh", para que ele
249   - # não execute algumas funções e simplifique o processo de
250   - # instalação! By Questor
251   - EZ_I_SKIP_ON_V=1
252   - fi
253   - f_close_section
254   - sleep 1
255   -fi
256   -
257   -# < -----------------------------------------
258   -
259   -# > -----------------------------------------
260   -# Garantir o encodamento correto para evitar problemas de
261   -# compatibilidade!
262   -
263   -if [ ${SIMPLE_INST} -eq 0 ] ; then
264   - EZ_I_SKIP_ON_V=$SIMPLE_INST
265   - f_open_section
266   - f_yes_no "Set terminal encode? (in some cases recommended for Windows ssh clients)"
267   - if [ ${EZ_I_SKIP_ON_V} -eq 1 ] || [ ${YES_NO_R} -eq 1 ] ; then
268   - export LANG=pt_BR.utf8
269   - fi
270   - f_close_section
271   -fi
272   -
273   -# < -----------------------------------------
274   -
275   -# > -----------------------------------------
276   -# Desabilita o SElinux!
277   -
278   -if [[ "$DISTRO_TYPE" == "RH" ]] ; then
279   - EZ_I_SKIP_ON_V=0
280   - f_open_section
281   - f_yes_no "Disable SElinux (use "y" if you never did it)?"
282   - if [ ${YES_NO_R} -eq 1 ] ; then
283   - setenforce 0
284   -
285   - # NOTE: As condições abaixo visam evitar que o arquivo seja
286   - # desnecessariamente e erroneamente modificado! By Questor
287   - EZ_I_SKIP_ON_V=$SIMPLE_INST
288   - f_fl_cont_str "# SELINUX=enforcing" "/etc/sysconfig/selinux" "The file \"/etc/sysconfig/selinux\" probably has already been changed! Check it!"
289   - EZ_I_SKIP_ON_V=0
290   - if [ ${FL_CONT_STR_R} -eq 0 ] ; then
291   - f_fl_cont_str "SELINUX=disabled" "/etc/sysconfig/selinux"
292   - if [ ${FL_CONT_STR_R} -eq 0 ] ; then
293   - f_ez_sed "SELINUX=enforcing" "# SELINUX=enforcing\nSELINUX=disabled" "/etc/sysconfig/selinux"
294   - fi
295   - fi
296   - fi
297   - f_close_section
298   -fi
299   -
300   -# < -----------------------------------------
301   -
302   -# > -----------------------------------------
303   -# Atualizar a distro (repositório)!
304   -
305   -EZ_I_SKIP_ON_V=$SIMPLE_INST
306   -if [[ "$DISTRO_TYPE" == "RH" ]] ; then
307   - if [[ "$DISTRO_NAME" == "RedHat" ]] ; then
308   - RESOURCES_ARR_P=("Red Hat Enterprise Linux Server")
309   - f_chk_distro_status "$DISTRO_NAME" RESOURCES_ARR_P[@]
310   - fi
311   - f_div_section
312   - f_yes_no "Update your distro? (\"y\" highly recommended)"
313   - f_div_section
314   - if [ ${EZ_I_SKIP_ON_V} -eq 1 ] || [ ${YES_NO_R} -eq 1 ] ; then
315   - yum -y update
316   - fi
317   - f_pack_is_inst "git" "yum" "\"git\" already installed!"
318   - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
319   - yum -y install git
320   - fi
321   -elif [[ "$DISTRO_TYPE" == "DEB" ]] ; then
322   - f_div_section
323   - f_yes_no "Update your distro? (\"y\" highly recommended)"
324   - f_div_section
325   - if [ ${EZ_I_SKIP_ON_V} -eq 1 ] || [ ${YES_NO_R} -eq 1 ] ; then
326   - apt-get -y update
327   - fi
328   - f_pack_is_inst "git" "apt-get" "\"git\" already installed!"
329   - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
330   - apt-get -y install git
331   - fi
332   -elif [[ "$DISTRO_TYPE" == "SUSE" ]] ; then
333   - if [[ "$DISTRO_NAME" == "SLES" ]] ; then
334   - RESOURCES_ARR_P=("SUSE_Linux_Enterprise_Server_12_SP1_x86_64"
335   -"SUSE_Linux_Enterprise_Software_Development_Kit_12_SP1_x86_64"
336   -"Web_and_Scripting_Module_12_x86_64")
337   - f_chk_distro_status "SLES" RESOURCES_ARR_P[@]
338   - fi
339   - f_div_section
340   - f_yes_no "Update your distro? (\"y\" highly recommended)"
341   - f_div_section
342   - if [ ${EZ_I_SKIP_ON_V} -eq 1 ] || [ ${YES_NO_R} -eq 1 ] ; then
343   - zypper --non-interactive update
344   - fi
345   - f_pack_is_inst "git-core" "zypper" "\"git-core\" already installed!"
346   - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
347   - zypper --non-interactive install git-core
348   - fi
349   -fi
350   -
351   -# < -----------------------------------------
352   -
353   -BASE_INST_DIR_V="/usr/local/lb"
354   -# > -----------------------------------------
355   -# Criar o diretório base da instalação!
356   -
357   -EZ_I_SKIP_ON_V=$SIMPLE_INST
358   -f_open_section
359   -QUESTION_F="Insert where the base installation directory (\"lb\") will be created (don't use \"/\" at the end).
360   -Use empty for \"/usr/local\"!"
361   -
362   -f_get_usr_input "$QUESTION_F" 1
363   -QUESTION_F=""
364   -if [ ${EZ_I_SKIP_ON_V} -eq 1 ] || [ -z "$GET_USR_INPUT_R" ] ; then
365   - f_chk_by_path_hlp "$BASE_INST_DIR_V" "d" "\"$BASE_INST_DIR_V\" directory already created!"
366   - if [ ${F_CHK_BY_PATH_HLP_R} -eq 0 ] ; then
367   - mkdir -p "$BASE_INST_DIR_V"
368   - fi
369   -else
370   - BASE_INST_DIR_V="$GET_USR_INPUT_R/lb"
371   - f_chk_by_path_hlp "$BASE_INST_DIR_V" "d" "\"$BASE_INST_DIR_V\" directory already created!"
372   - if [ ${F_CHK_BY_PATH_HLP_R} -eq 0 ] ; then
373   - mkdir -p "$BASE_INST_DIR_V"
374   - fi
375   -fi
376   -f_close_section
377   -
378   -# < -----------------------------------------
379   -
380   -# > -----------------------------------------
381   -# Instalar pacotes que são comuns a determinados componentes!
382   -
383   -F_COM_PKS_INSTALLED=0
384   -f_common_packs() {
385   - : 'Instalar pacotes que são comuns a determinados componentes.'
386   -
387   - if [ ${F_COM_PKS_INSTALLED} -eq 0 ] ; then
388   - if [[ "$DISTRO_TYPE" == "RH" ]] ; then
389   - f_pack_is_inst "gcc-c++" "yum" "\"gcc-c++\" already installed!"
390   - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
391   - yum -y install gcc-c++
392   - fi
393   - f_pack_is_inst "autoconf" "yum" "\"autoconf\" already installed!"
394   - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
395   - yum -y install autoconf
396   - fi
397   - f_pack_is_inst "automake" "yum" "\"automake\" already installed!"
398   - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
399   - yum -y install automake
400   - fi
401   - f_pack_is_inst "libtool" "yum" "\"libtool\" already installed!"
402   - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
403   - yum -y install libtool
404   - fi
405   - f_pack_is_inst "zlib-devel" "yum" "\"zlib-devel\" already installed!"
406   - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
407   - yum -y install zlib-devel
408   - fi
409   - f_pack_is_inst "postgresql-devel" "yum" "\"postgresql-devel\" already installed!"
410   - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
411   - yum -y install postgresql-devel
412   - fi
413   - elif [[ "$DISTRO_TYPE" == "DEB" ]] ; then
414   - f_pack_is_inst "g++" "apt-get" "\"g++\" already installed!"
415   - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
416   - apt-get -y install g++
417   - fi
418   - f_pack_is_inst "autoconf" "apt-get" "\"autoconf\" already installed!"
419   - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
420   - apt-get -y install autoconf
421   - fi
422   - f_pack_is_inst "make" "apt-get" "\"make\" already installed!"
423   - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
424   - apt-get -y install make
425   - fi
426   - f_pack_is_inst "libtool" "apt-get" "\"libtool\" already installed!"
427   - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
428   - apt-get -y install libtool
429   - fi
430   - f_pack_is_inst "zlib1g-dev" "apt-get" "\"zlib1g-dev\" already installed!"
431   - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
432   - apt-get -y install zlib1g-dev
433   - fi
434   - f_pack_is_inst "libpq-dev" "apt-get" "\"libpq-dev\" already installed!"
435   - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
436   - apt-get -y install libpq-dev
437   - fi
438   - elif [[ "$DISTRO_TYPE" == "SUSE" ]] ; then
439   - f_pack_is_inst "gcc-c++" "zypper" "\"gcc-c++\" already installed!"
440   - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
441   - zypper --non-interactive install gcc-c++
442   - fi
443   - if [[ "$DISTRO_NAME" != "SLES" ]] ; then
444   - f_pack_is_inst "autoconf" "zypper" "\"autoconf\" already installed!"
445   - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
446   - zypper --non-interactive install autoconf
447   - fi
448   - f_pack_is_inst "automake" "zypper" "\"automake\" already installed!"
449   - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
450   - zypper --non-interactive install automake
451   - fi
452   - f_pack_is_inst "make" "zypper" "\"make\" already installed!"
453   - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
454   - zypper --non-interactive install make
455   - fi
456   - f_pack_is_inst "libtool" "zypper" "\"libtool\" already installed!"
457   - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
458   - zypper --non-interactive install libtool
459   - fi
460   - fi
461   - f_pack_is_inst "zlib-devel" "zypper" "\"zlib-devel\" already installed!"
462   - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
463   - zypper --non-interactive install zlib-devel
464   - fi
465   - f_pack_is_inst "postgresql-devel" "zypper" "\"postgresql-devel\" already installed!"
466   - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
467   - zypper --non-interactive install postgresql-devel
468   - fi
469   - fi
470   - F_COM_PKS_INSTALLED=1
471   - fi
472   -}
473   -
474   -# > -----------------------------------------
475   -# Instalar o virtualenv-1.11.6 no python2.X!
476   -
477   -PYTHON_2_X=""
478   -VE_2_X=""
479   -if [[ "$DISTRO_TYPE" == "RH" ]] ; then
480   - PYTHON_2_X="2.6"
481   - VE_2_X="ve26"
482   -elif [[ "$DISTRO_TYPE" == "DEB" ]] || [[ "$DISTRO_TYPE" == "SUSE" ]] ; then
483   - PYTHON_2_X="2.7"
484   - VE_2_X="ve27"
485   -fi
486   -EZ_I_SKIP_ON_V=$SIMPLE_INST
487   -f_open_section
488   -f_yes_no "Install virtualenv-1.11.6 on python$PYTHON_2_X?"
489   -if [ ${EZ_I_SKIP_ON_V} -eq 1 ] || [ ${YES_NO_R} -eq 1 ] ; then
490   - if [[ "$DISTRO_TYPE" == "RH" ]] ; then
491   - f_chk_by_path_hlp "/usr/bin/virtualenv-$PYTHON_2_X" "f" "virtualenv-1.11.6 already installed!"
492   - elif [[ "$DISTRO_TYPE" == "DEB" ]] || [[ "$DISTRO_TYPE" == "SUSE" ]] ; then
493   - f_chk_by_path_hlp "/usr/local/bin/virtualenv-$PYTHON_2_X" "f" "virtualenv-1.11.6 already installed!"
494   - fi
495   - if [[ "$DISTRO_TYPE" == "RH" ]] ; then
496   - f_pack_is_inst "python-setuptools" "yum" "\"python-setuptools\" already installed!"
497   - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
498   - yum -y install python-setuptools
499   - fi
500   - elif [[ "$DISTRO_TYPE" == "DEB" ]] ; then
501   - f_pack_is_inst "python-setuptools" "apt-get" "\"python-setuptools\" already installed!"
502   - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
503   - apt-get -y install python-setuptools
504   - fi
505   - elif [[ "$DISTRO_TYPE" == "SUSE" ]] ; then
506   - f_pack_is_inst "python-setuptools" "zypper" "\"python-setuptools\" already installed!"
507   - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then
508   - zypper --non-interactive install python-setuptools
509   - fi
510   - fi
511   - if [ ${F_CHK_BY_PATH_HLP_R} -eq 0 ] ; then
512   - f_common_packs
513   - cd "$SCRIPTDIR_V"
514   - cd ./other-srcs-n-apps
515   - tar -zxvf virtualenv-1.11.6.tar.gz
516   - cd virtualenv-1.11.6
517   - python$PYTHON_2_X setup.py install
518   - cd ..
519   - rm -rf virtualenv-1.11.6
520   - fi
521   -fi
522   -f_close_section
523   -
524   -# < -----------------------------------------
525   -
526   -# > -----------------------------------------
527   -# Criar o ambiente virtual (python2.X)!
528   -
529   -EZ_I_SKIP_ON_V=$SIMPLE_INST
530   -f_open_section
531   -f_enter_to_cont "Create the virtual environment (python$PYTHON_2_X)!"
532   -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\"!"
533   -if [ ${F_CHK_BY_PATH_HLP_R} -eq 0 ] ; then
534   - f_common_packs
535   - cd "$BASE_INST_DIR_V"
536   - virtualenv-$PYTHON_2_X $VE_2_X
537   - mkdir "$BASE_INST_DIR_V/$VE_2_X/src"
538   - f_enter_to_cont "Virtual environment created in \"$BASE_INST_DIR_V/$VE_2_X\"!"
539   -fi
540   -f_close_section
541   -
542   -# < -----------------------------------------
543   -
544   -# > -----------------------------------------
545   -# Instalar as dependências python2.X da LIB - liblightbase!
546   -
547   -EZ_I_SKIP_ON_V=$SIMPLE_INST
548   -cd "$SCRIPTDIR_V"
549   -bash py-packs-liblightbase.sh "$EZ_I_SKIP_ON_V" "$BASE_INST_DIR_V" "$PYTHON_2_X" "$VE_2_X"
550   -
551   -# < -----------------------------------------
552   -
553   -# > -----------------------------------------
554   -# Instalar a LIB - liblightbase!
555   -
556   -EZ_I_SKIP_ON_V=$SIMPLE_INST
557   -f_open_section
558   -read -d '' TITLE_F <<"EOF"
559   -Install the LIB - liblightbase?
560   -EOF
561   -
562   -f_yes_no "$TITLE_F"
563   -TITLE_F=""
564   -if [ ${EZ_I_SKIP_ON_V} -eq 1 ] || [ ${YES_NO_R} -eq 1 ] ; then
565   - f_chk_by_path_hlp "$BASE_INST_DIR_V/$VE_2_X/src/liblightbase" "d" "\"liblightbase\" already installed in \"$BASE_INST_DIR_V/$VE_2_X/src\"!"
566   - F_BAK_MD_R=1
567   - if [ ${F_CHK_BY_PATH_HLP_R} -eq 1 ] ; then
568   - f_ez_mv_bak "$BASE_INST_DIR_V/$VE_2_X/src/liblightbase" "Backup old version and update? (\"y\" recommended)"
569   - fi
570   - if [ ${F_BAK_MD_R} -eq 1 ] ; then
571   - cd "$SCRIPTDIR_V"
572   - tar -zxvf liblightbase.tar.gz
573   - mv "$SCRIPTDIR_V/liblightbase" "$BASE_INST_DIR_V/$VE_2_X/src/"
574   - cd "$BASE_INST_DIR_V/$VE_2_X/src/liblightbase"
575   - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
576   - fi
577   -fi
578   -f_close_section
579   -
580   -# < -----------------------------------------
581   -
582   -# > -----------------------------------------
583   -# Instalar as dependências python do LBI - LBIndex!
584   -
585   -EZ_I_SKIP_ON_V=$SIMPLE_INST
586   -cd "$SCRIPTDIR_V"
587   -bash py-packs-LBIndex.sh "$EZ_I_SKIP_ON_V" "$BASE_INST_DIR_V" "$PYTHON_2_X" "$VE_2_X"
588   -
589   -# < -----------------------------------------
590   -
591   -HTTP_PORT_F=6543
592   -# > -----------------------------------------
593   -# Instalar e configurar o LBI - LBIndex!
594   -
595   -EZ_I_SKIP_ON_V=$SIMPLE_INST
596   -f_open_section
597   -f_yes_no "Install the LBI - LBIndex?"
598   -if [ ${EZ_I_SKIP_ON_V} -eq 1 ] || [ ${YES_NO_R} -eq 1 ] ; then
599   -
600   - f_chk_by_path_hlp "$BASE_INST_DIR_V/$VE_2_X/src/LBIndex" "d" "\"LBIndex\" already installed in \"$BASE_INST_DIR_V/$VE_2_X/src\"!"
601   - F_BAK_MD_R=1
602   - if [ ${F_CHK_BY_PATH_HLP_R} -eq 1 ] ; then
603   - f_ez_mv_bak "$BASE_INST_DIR_V/$VE_2_X/src/LBIndex" "Backup old version and update? (\"y\" recommended)"
604   - fi
605   - if [ ${F_BAK_MD_R} -eq 1 ] ; then
606   - cd "$SCRIPTDIR_V"
607   - tar -zxvf LBIndex.tar.gz
608   - mv "$SCRIPTDIR_V/LBIndex" "$BASE_INST_DIR_V/$VE_2_X/src/"
609   - cd "$BASE_INST_DIR_V/$VE_2_X/src/LBIndex"
610   - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
611   -
612   - f_enter_to_cont "Configure LBI - LBIndex!"
613   - \cp "$BASE_INST_DIR_V/$VE_2_X/src/LBIndex/lbindex-dist" "$BASE_INST_DIR_V/$VE_2_X/src/LBIndex/lbindex-prov"
614   -
615   - if [[ "$DISTRO_TYPE" == "RH" ]] || [[ "$DISTRO_TYPE" == "SUSE" ]] ; then
616   - f_ez_sed "<LBI_SCRIPT_HEAD>" "# chkconfig: 2345 99 01\n# description: Esquema de inicialização do LBIndex\n# processname: lbindex" "$BASE_INST_DIR_V/$VE_2_X/src/LBIndex/lbindex-prov"
617   - elif [[ "$DISTRO_TYPE" == "DEB" ]] ; then
618   - f_ez_sed "<LBI_SCRIPT_HEAD>" "### BEGIN INIT INFO\n# Provides: lbindex\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/LBIndex/lbindex-prov"
619   - fi
620   -
621   - f_ez_sed "<LBINDEXMG_PATH>" "$BASE_INST_DIR_V/$VE_2_X/src/LBIndex/lbindexmg" "$BASE_INST_DIR_V/$VE_2_X/src/LBIndex/lbindex-prov"
622   - rm -rf "/etc/init.d/lbindex"
623   - mv "$BASE_INST_DIR_V/$VE_2_X/src/LBIndex/lbindex-prov" "/etc/init.d/lbindex"
624   -
625   - chmod 755 -R /etc/init.d/
626   - cd /etc/init.d/
627   -
628   - if [[ "$DISTRO_TYPE" == "RH" ]] || [[ "$DISTRO_TYPE" == "SUSE" ]] ; then
629   - chkconfig --level 2345 lbindex on
630   - elif [[ "$DISTRO_TYPE" == "DEB" ]] ; then
631   - update-rc.d -f lbindex remove
632   - update-rc.d lbindex defaults
633   - chmod +x ./lbindex
634   - fi
635   -
636   - \cp "$BASE_INST_DIR_V/$VE_2_X/src/LBIndex/lbindexmg-dist" "$BASE_INST_DIR_V/$VE_2_X/src/LBIndex/lbindexmg"
637   - f_ez_sed "<VIRTUALENV_PATH>" "$BASE_INST_DIR_V/$VE_2_X" "$BASE_INST_DIR_V/$VE_2_X/src/LBIndex/lbindexmg"
638   -
639   - LBG_URL_F="http://127.0.0.1/lbg"
640   - QUESTION_F="Enter the LBG - LBGenerator URL.
641   -Use empty for \"$LBG_URL_F\" (LOCALHOST)!"
642   -
643   - f_get_usr_input "$QUESTION_F" 1
644   - QUESTION_F=""
645   - if [ -n "$GET_USR_INPUT_R" ] ; then
646   - LBG_URL_F=$GET_USR_INPUT_R
647   - fi
648   -
649   - QUESTION_F="Enter the port number for http service.
650   -Use empty for \"$HTTP_PORT_F\" (recommended)!"
651   -
652   - f_get_usr_input "$QUESTION_F" 1
653   - QUESTION_F=""
654   - if [ -n "$GET_USR_INPUT_R" ] ; then
655   - HTTP_PORT_F=$GET_USR_INPUT_R
656   - fi
657   -
658   - \cp "$BASE_INST_DIR_V/$VE_2_X/src/LBIndex/production.ini-dist" "$BASE_INST_DIR_V/$VE_2_X/src/LBIndex/production.ini"
659   - f_ez_sed "<HTTP_SERVICE_PORT_NUM>" "$HTTP_PORT_F" "$BASE_INST_DIR_V/$VE_2_X/src/LBIndex/production.ini"
660   - f_ez_sed "<MACHINE_IP_OR_NAME>" "$LBG_URL_F" "$BASE_INST_DIR_V/$VE_2_X/src/LBIndex/production.ini"
661   -
662   - service lbindex restart
663   - fi
664   -fi
665   -f_close_section
666   -
667   -# < -----------------------------------------
668   -
669   -# > -----------------------------------------
670   -# Abrir o firewall para o http service!
671   -
672   -if [[ "$DISTRO_TYPE" == "RH" ]] || [[ "$DISTRO_TYPE" == "SUSE" ]] ; then
673   - EZ_I_SKIP_ON_V=$SIMPLE_INST
674   - f_open_section
675   - if [[ "$DISTRO_TYPE" == "RH" ]] ; then
676   - f_yes_no "Open firewall for http service (TCP $HTTP_PORT_F)?"
677   - if [ ${EZ_I_SKIP_ON_V} -eq 1 ] || [ ${YES_NO_R} -eq 1 ] ; then
678   - f_chk_iptables ${HTTP_PORT_F} "Port $HTTP_PORT_F is already open!" 0 "ACCEPT" "tcp" "NEW"
679   - if [ ${F_CHK_IPTABLES_R} -eq 1 ] ; then
680   - iptables -I INPUT 6 -p tcp -m state --state NEW -m tcp --dport ${HTTP_PORT_F} -j ACCEPT
681   - service iptables save
682   - service iptables restart
683   - fi
684   - fi
685   - f_close_section
686   - elif [[ "$DISTRO_TYPE" == "SUSE" ]] ; then
687   - f_yes_no "Open firewall for http service (TCP $HTTP_PORT_F)?"
688   - if [ ${EZ_I_SKIP_ON_V} -eq 1 ] || [ ${YES_NO_R} -eq 1 ] ; then
689   - f_chk_iptables ${HTTP_PORT_F} "Port $HTTP_PORT_F is already open!" 0 "ACCEPT" "tcp"
690   - if [ ${F_CHK_IPTABLES_R} -eq 1 ] ; then
691   - SuSEfirewall2 open EXT TCP ${HTTP_PORT_F}
692   - SuSEfirewall2 stop
693   - SuSEfirewall2 start
694   - fi
695   - fi
696   - fi
697   - f_close_section
698   -fi
699   -
700   -# < -----------------------------------------
701   -
702   -# > --------------------------------------------------------------------------
703   -# FINAL!
704   -# --------------------------------------
705   -
706   -EZ_I_SKIP_ON_V=0
707   -read -d '' TITLE_F <<"EOF"
708   -Installer finished! Thanks!
709   -EOF
710   -
711   -USEFUL_INFO_F="To configure...
712   - vi $BASE_INST_DIR_V/$VE_2_X/src/LBIndex/production.ini
713   -
714   -To start/stop...
715   - service lbindex start
716   - service lbindex stop
717   -
718   -Log...
719   - less /var/log/lbindex.log"
720   -
721   -f_end "$TITLE_F" "$USEFUL_INFO_F"
722   -TITLE_F=""
723   -USEFUL_INFO_F=""
724   -
725   -# < --------------------------------------------------------------------------
liblightbase.tar.gz 100755 → 100644
No preview for this file type
py-packs-LBIndex.bash 0 → 100755
... ... @@ -0,0 +1,205 @@
  1 +#!/bin/bash
  2 +
  3 +# Instalação das dependências do LBI - LBIndex 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 LBI - LBIndex 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-LBIndex
  54 +
  55 + tar -zxvf ./argparse-1.3.0.tar.gz
  56 + cd ./argparse-1.3.0
  57 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
  58 + cd ..
  59 + rm -rf ./argparse-1.3.0
  60 +
  61 + tar -zxvf ./ordereddict-1.1.tar.gz
  62 + cd ./ordereddict-1.1
  63 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
  64 + cd ..
  65 + rm -rf ./ordereddict-1.1
  66 +
  67 + tar -zxvf ./pbr-0.10.0.tar.gz
  68 + cd ./pbr-0.10.0
  69 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
  70 + cd ..
  71 + rm -rf ./pbr-0.10.0
  72 +
  73 + tar -zxvf ./linecache2-1.0.0.tar.gz
  74 + cd ./linecache2-1.0.0
  75 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
  76 + cd ..
  77 + rm -rf ./linecache2-1.0.0
  78 +
  79 + tar -zxvf ./configparser-3.3.0r2.tar.gz
  80 + cd ./configparser-3.3.0r2
  81 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
  82 + cd ..
  83 + rm -rf ./configparser-3.3.0r2
  84 +
  85 + tar -zxvf ./traceback2-1.4.0.tar.gz
  86 + cd ./traceback2-1.4.0
  87 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
  88 + cd ..
  89 + rm -rf ./traceback2-1.4.0
  90 +
  91 + tar -zxvf ./unittest2-1.0.1.tar.gz
  92 + cd ./unittest2-1.0.1
  93 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
  94 + cd ..
  95 + rm -rf ./unittest2-1.0.1
  96 +
  97 + tar -zxvf ./urllib3-1.10.4.tar.gz
  98 + cd ./urllib3-1.10.4
  99 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
  100 + cd ..
  101 + rm -rf ./urllib3-1.10.4
  102 +
  103 + tar -zxvf ./elasticsearch-1.4.0.tar.gz
  104 + cd ./elasticsearch-1.4.0
  105 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
  106 + cd ..
  107 + rm -rf ./elasticsearch-1.4.0
  108 +
  109 + tar -zxvf ./simplejson-3.5.3.tar.gz
  110 + cd ./simplejson-3.5.3
  111 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
  112 + cd ..
  113 + rm -rf ./simplejson-3.5.3
  114 +
  115 + tar -zxvf ./certifi-2015.11.20.1.tar.gz
  116 + cd ./certifi-2015.11.20.1
  117 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
  118 + cd ..
  119 + rm -rf ./certifi-2015.11.20.1
  120 +
  121 + tar -zxvf ./pyelasticsearch-1.4.tar.gz
  122 + cd ./pyelasticsearch-1.4
  123 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
  124 + cd ..
  125 + rm -rf ./pyelasticsearch-1.4
  126 +
  127 + tar -zxvf ./requests-2.3.0.tar.gz
  128 + cd ./requests-2.3.0
  129 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
  130 + cd ..
  131 + rm -rf ./requests-2.3.0
  132 +
  133 + tar -zxvf ./six-1.7.2.tar.gz
  134 + cd ./six-1.7.2
  135 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
  136 + cd ..
  137 + rm -rf ./six-1.7.2
  138 +
  139 + tar -zxvf ./PasteDeploy-1.5.2.tar.gz
  140 + cd ./PasteDeploy-1.5.2
  141 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
  142 + cd ..
  143 + rm -rf ./PasteDeploy-1.5.2
  144 +
  145 + tar -zxvf ./venusian-1.0.tar.gz
  146 + cd ./venusian-1.0
  147 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
  148 + cd ..
  149 + rm -rf ./venusian-1.0
  150 +
  151 + tar -zxvf ./translationstring-1.3.tar.gz
  152 + cd ./translationstring-1.3
  153 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
  154 + cd ..
  155 + rm -rf ./translationstring-1.3
  156 +
  157 + tar -zxvf ./zope.deprecation-4.1.2.tar.gz
  158 + cd ./zope.deprecation-4.1.2
  159 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
  160 + cd ..
  161 + rm -rf ./zope.deprecation-4.1.2
  162 +
  163 + tar -zxvf ./zope.interface-4.1.3.tar.gz
  164 + cd ./zope.interface-4.1.3
  165 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
  166 + cd ..
  167 + rm -rf ./zope.interface-4.1.3
  168 +
  169 + tar -zxvf ./repoze.lru-0.6.tar.gz
  170 + cd ./repoze.lru-0.6
  171 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
  172 + cd ..
  173 + rm -rf ./repoze.lru-0.6
  174 +
  175 + tar -zxvf ./WebOb-1.5.1.tar.gz
  176 + cd ./WebOb-1.5.1
  177 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
  178 + cd ..
  179 + rm -rf ./WebOb-1.5.1
  180 +
  181 + tar -zxvf ./pyramid-1.6b2.tar.gz
  182 + cd ./pyramid-1.6b2
  183 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
  184 + cd ..
  185 + rm -rf ./pyramid-1.6b2
  186 +
  187 + tar -zxvf ./Chameleon-2.24.tar.gz
  188 + cd ./Chameleon-2.24
  189 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
  190 + cd ..
  191 + rm -rf ./Chameleon-2.24
  192 +
  193 + tar -zxvf ./pyramid_chameleon-0.3.tar.gz
  194 + cd ./pyramid_chameleon-0.3
  195 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
  196 + cd ..
  197 + rm -rf ./pyramid_chameleon-0.3
  198 +
  199 + tar -zxvf ./waitress-0.8.10.tar.gz
  200 + cd ./waitress-0.8.10
  201 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
  202 + cd ..
  203 + rm -rf ./waitress-0.8.10
  204 +
  205 +fi
... ...
py-packs-LBIndex.sh
... ... @@ -1,205 +0,0 @@
1   -#!/bin/bash
2   -
3   -# Instalação das dependências do LBI - LBIndex 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 LBI - LBIndex 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-LBIndex
54   -
55   - tar -zxvf ./argparse-1.3.0.tar.gz
56   - cd ./argparse-1.3.0
57   - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
58   - cd ..
59   - rm -rf ./argparse-1.3.0
60   -
61   - tar -zxvf ./ordereddict-1.1.tar.gz
62   - cd ./ordereddict-1.1
63   - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
64   - cd ..
65   - rm -rf ./ordereddict-1.1
66   -
67   - tar -zxvf ./pbr-0.10.0.tar.gz
68   - cd ./pbr-0.10.0
69   - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
70   - cd ..
71   - rm -rf ./pbr-0.10.0
72   -
73   - tar -zxvf ./linecache2-1.0.0.tar.gz
74   - cd ./linecache2-1.0.0
75   - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
76   - cd ..
77   - rm -rf ./linecache2-1.0.0
78   -
79   - tar -zxvf ./configparser-3.3.0r2.tar.gz
80   - cd ./configparser-3.3.0r2
81   - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
82   - cd ..
83   - rm -rf ./configparser-3.3.0r2
84   -
85   - tar -zxvf ./traceback2-1.4.0.tar.gz
86   - cd ./traceback2-1.4.0
87   - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
88   - cd ..
89   - rm -rf ./traceback2-1.4.0
90   -
91   - tar -zxvf ./unittest2-1.0.1.tar.gz
92   - cd ./unittest2-1.0.1
93   - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
94   - cd ..
95   - rm -rf ./unittest2-1.0.1
96   -
97   - tar -zxvf ./urllib3-1.10.4.tar.gz
98   - cd ./urllib3-1.10.4
99   - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
100   - cd ..
101   - rm -rf ./urllib3-1.10.4
102   -
103   - tar -zxvf ./elasticsearch-1.4.0.tar.gz
104   - cd ./elasticsearch-1.4.0
105   - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
106   - cd ..
107   - rm -rf ./elasticsearch-1.4.0
108   -
109   - tar -zxvf ./simplejson-3.5.3.tar.gz
110   - cd ./simplejson-3.5.3
111   - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
112   - cd ..
113   - rm -rf ./simplejson-3.5.3
114   -
115   - tar -zxvf ./certifi-2015.11.20.1.tar.gz
116   - cd ./certifi-2015.11.20.1
117   - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
118   - cd ..
119   - rm -rf ./certifi-2015.11.20.1
120   -
121   - tar -zxvf ./pyelasticsearch-1.4.tar.gz
122   - cd ./pyelasticsearch-1.4
123   - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
124   - cd ..
125   - rm -rf ./pyelasticsearch-1.4
126   -
127   - tar -zxvf ./requests-2.3.0.tar.gz
128   - cd ./requests-2.3.0
129   - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
130   - cd ..
131   - rm -rf ./requests-2.3.0
132   -
133   - tar -zxvf ./six-1.7.2.tar.gz
134   - cd ./six-1.7.2
135   - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
136   - cd ..
137   - rm -rf ./six-1.7.2
138   -
139   - tar -zxvf ./PasteDeploy-1.5.2.tar.gz
140   - cd ./PasteDeploy-1.5.2
141   - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
142   - cd ..
143   - rm -rf ./PasteDeploy-1.5.2
144   -
145   - tar -zxvf ./venusian-1.0.tar.gz
146   - cd ./venusian-1.0
147   - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
148   - cd ..
149   - rm -rf ./venusian-1.0
150   -
151   - tar -zxvf ./translationstring-1.3.tar.gz
152   - cd ./translationstring-1.3
153   - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
154   - cd ..
155   - rm -rf ./translationstring-1.3
156   -
157   - tar -zxvf ./zope.deprecation-4.1.2.tar.gz
158   - cd ./zope.deprecation-4.1.2
159   - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
160   - cd ..
161   - rm -rf ./zope.deprecation-4.1.2
162   -
163   - tar -zxvf ./zope.interface-4.1.3.tar.gz
164   - cd ./zope.interface-4.1.3
165   - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
166   - cd ..
167   - rm -rf ./zope.interface-4.1.3
168   -
169   - tar -zxvf ./repoze.lru-0.6.tar.gz
170   - cd ./repoze.lru-0.6
171   - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
172   - cd ..
173   - rm -rf ./repoze.lru-0.6
174   -
175   - tar -zxvf ./WebOb-1.5.1.tar.gz
176   - cd ./WebOb-1.5.1
177   - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
178   - cd ..
179   - rm -rf ./WebOb-1.5.1
180   -
181   - tar -zxvf ./pyramid-1.6b2.tar.gz
182   - cd ./pyramid-1.6b2
183   - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
184   - cd ..
185   - rm -rf ./pyramid-1.6b2
186   -
187   - tar -zxvf ./Chameleon-2.24.tar.gz
188   - cd ./Chameleon-2.24
189   - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
190   - cd ..
191   - rm -rf ./Chameleon-2.24
192   -
193   - tar -zxvf ./pyramid_chameleon-0.3.tar.gz
194   - cd ./pyramid_chameleon-0.3
195   - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
196   - cd ..
197   - rm -rf ./pyramid_chameleon-0.3
198   -
199   - tar -zxvf ./waitress-0.8.10.tar.gz
200   - cd ./waitress-0.8.10
201   - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
202   - cd ..
203   - rm -rf ./waitress-0.8.10
204   -
205   -fi
py-packs-liblightbase.bash 0 → 100755
... ... @@ -0,0 +1,97 @@
  1 +#!/bin/bash
  2 +
  3 +# Instalação das dependências da LIB - liblightbase 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 liblightbase dependencies for python$PYTHON_2_X?"
  46 +
  47 +f_yes_no "$TITLE_F"
  48 +TITLE_F=""
  49 +
  50 +if [ ${YES_NO_R} -eq 1 ] || [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then
  51 +
  52 + cd "$SCRIPTDIR_V"
  53 + cd ./py-packs-liblightbase
  54 +
  55 + tar -zxvf ./decorator-3.4.0.tar.gz
  56 + cd ./decorator-3.4.0
  57 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
  58 + cd ..
  59 + rm -rf ./decorator-3.4.0
  60 +
  61 + tar -zxvf ./six-1.7.2.tar.gz
  62 + cd ./six-1.7.2
  63 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
  64 + cd ..
  65 + rm -rf ./six-1.7.2
  66 +
  67 + tar -zxvf ./ply-3.4.tar.gz
  68 + cd ./ply-3.4
  69 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
  70 + cd ..
  71 + rm -rf ./ply-3.4
  72 +
  73 + tar -zxvf ./jsonpath-rw-1.3.0.tar.gz
  74 + cd ./jsonpath-rw-1.3.0
  75 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
  76 + cd ..
  77 + rm -rf ./jsonpath-rw-1.3.0
  78 +
  79 + tar -zxvf ./python-dateutil-2.2.tar.gz
  80 + cd ./python-dateutil-2.2
  81 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
  82 + cd ..
  83 + rm -rf ./python-dateutil-2.2
  84 +
  85 + tar -zxvf ./requests-2.3.0.tar.gz
  86 + cd ./requests-2.3.0
  87 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
  88 + cd ..
  89 + rm -rf ./requests-2.3.0
  90 +
  91 + tar -zxvf ./voluptuous-0.8.7.tar.gz
  92 + cd ./voluptuous-0.8.7
  93 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
  94 + cd ..
  95 + rm -rf ./voluptuous-0.8.7
  96 +
  97 +fi
... ...
py-packs-liblightbase.sh
... ... @@ -1,97 +0,0 @@
1   -#!/bin/bash
2   -
3   -# Instalação das dependências da LIB - liblightbase 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 liblightbase dependencies for python$PYTHON_2_X?"
46   -
47   -f_yes_no "$TITLE_F"
48   -TITLE_F=""
49   -
50   -if [ ${YES_NO_R} -eq 1 ] || [ ${SKIP_ON_V} -eq 1 ] ; then
51   -
52   - cd "$SCRIPTDIR_V"
53   - cd ./py-packs-liblightbase
54   -
55   - tar -zxvf ./decorator-3.4.0.tar.gz
56   - cd ./decorator-3.4.0
57   - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
58   - cd ..
59   - rm -rf ./decorator-3.4.0
60   -
61   - tar -zxvf ./six-1.7.2.tar.gz
62   - cd ./six-1.7.2
63   - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
64   - cd ..
65   - rm -rf ./six-1.7.2
66   -
67   - tar -zxvf ./ply-3.4.tar.gz
68   - cd ./ply-3.4
69   - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
70   - cd ..
71   - rm -rf ./ply-3.4
72   -
73   - tar -zxvf ./jsonpath-rw-1.3.0.tar.gz
74   - cd ./jsonpath-rw-1.3.0
75   - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
76   - cd ..
77   - rm -rf ./jsonpath-rw-1.3.0
78   -
79   - tar -zxvf ./python-dateutil-2.2.tar.gz
80   - cd ./python-dateutil-2.2
81   - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
82   - cd ..
83   - rm -rf ./python-dateutil-2.2
84   -
85   - tar -zxvf ./requests-2.3.0.tar.gz
86   - cd ./requests-2.3.0
87   - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
88   - cd ..
89   - rm -rf ./requests-2.3.0
90   -
91   - tar -zxvf ./voluptuous-0.8.7.tar.gz
92   - cd ./voluptuous-0.8.7
93   - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install"
94   - cd ..
95   - rm -rf ./voluptuous-0.8.7
96   -
97   -fi