diff --git a/.directory b/.directory old mode 100644 new mode 100755 index bf9c3c3..ee4c73d --- a/.directory +++ b/.directory @@ -1,8 +1,5 @@ [Dolphin] PreviewsShown=true -Timestamp=2016,5,13,18,0,28 +Timestamp=2016,6,14,9,59,19 Version=3 ViewMode=1 - -[Settings] -HiddenFilesShown=true diff --git a/LBConverter.tar.gz b/LBConverter.tar.gz old mode 100755 new mode 100644 index 67cefed..10eec54 Binary files a/LBConverter.tar.gz and b/LBConverter.tar.gz differ diff --git a/ez_i.bash b/ez_i.bash new file mode 100755 index 0000000..3b50cfb --- /dev/null +++ b/ez_i.bash @@ -0,0 +1,1515 @@ +#!/bin/bash +: 'Trata-se de um módulo que oferece uma série de funcionalidades para +criar um instalador usando "bash". + +Version 1.0.0b + +Apache License +Version 2.0, January 2004 +http://www.apache.org/licenses/ +Copyright 2016 Eduardo Lúcio Amorim Costa +' + +# NOTE: Obtêm a pasta do script atual para que seja usado como +# caminho base/referência durante a instalação! By Questor +EZ_I_DIR_V="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" + +# NOTE: Quando setado faz "ez_i" desabilitar algumas funções, +# notadamente aquelas que envolvem "perguntas ao usuário" e as +# gráficas! By Questor +EZ_I_SKIP_ON_V=0 + +# > -------------------------------------------------------------------------- +# UTILITÁRIOS! +# -------------------------------------- + +f_enter_to_cont() { + : 'Solicitar ao usuário que pressione enter para continuar. + + Args: + INFO_P (Optional[int]): Se informado apresenta uma mensagem ao + usuário. Padrão 0. + ' + + INFO_P=$1 + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then + return 0 + fi + + if [ ! -z "$INFO_P" ] ; then + f_div_section + echo "$INFO_P" + f_div_section + fi + + read -p "Press enter to continue..." nothing +} + +GET_USR_INPUT_R="" +f_get_usr_input() { + : 'Obter entradas digitadas pelo usuário. + + Permite autocomplete (tab). Enter para submeter a entrada. + + Args: + QUESTION_P (str): Pergunta a ser feita ao usuário. + ALLOW_EMPTY_P (Optional[int]): 0 - Não permite valor vazio; 1 - Permite + valor vazio. Padrão 0. + + Returns: + GET_USR_INPUT_R (str): Entrada digitada pelo usuário. + ' + + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then + return 0 + fi + QUESTION_P=$1 + ALLOW_EMPTY_P=$2 + if [ -z "$ALLOW_EMPTY_P" ] ; then + ALLOW_EMPTY_P=0 + fi + GET_USR_INPUT_R="" + read -e -r -p "$QUESTION_P (use enter to confirm): " RESP_V + if [ -n "$RESP_V" ] ; then + GET_USR_INPUT_R="$RESP_V" + elif [ ${ALLOW_EMPTY_P} -eq 0 ] ; then + f_get_usr_input "$QUESTION_P" 0 + fi +} + +f_get_usr_input_mult() { + : 'Obter determinada opção do usuário à partir de uma lista de + entrada. + + Permite autocomplete (tab). Enter para submeter a entrada. + + Args: + QUESTION_P (str): Pergunta a ser feita ao usuário (as + opções são exibidas automaticamente). + OPT_ARR_P (array): Array com a lista de opções possíveis. As posições + pares do array são as opções e as ímpares são a descrição dessas opções. + ALLOW_EMPTY_P (Optional[int]): 0 - Não permite valor vazio; 1 - Permite + valor vazio. Padrão 0. + + Returns: + GET_USR_INPUT_MULT_R (str): Entrada digitada pelo usuário. + ' + + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then + return 0 + fi + QUESTION_P=$1 + OPT_ARR_P=("${!2}") + TOTAL_0=${#OPT_ARR_P[*]} + ALLOW_EMPTY_P=$3 + if [ -z "$ALLOW_EMPTY_P" ] ; then + ALLOW_EMPTY_P=0 + fi + USE_PIPE="" + POSSIBLE_OPT="(select your option and press enter: " + for (( i=0; i<=$(( $TOTAL_0 -1 )); i++ )) ; do + if [ $((i%2)) -eq 0 ]; then + # "even" + POSSIBLE_OPT=$POSSIBLE_OPT${OPT_ARR_P[$i]}" - " + else + # "odd" + if (( i <= $(( TOTAL_0 -2 )) )) ; then + USE_PIPE=" | " + else + USE_PIPE="" + fi + POSSIBLE_OPT=$POSSIBLE_OPT${OPT_ARR_P[$i]}$USE_PIPE + fi + done + POSSIBLE_OPT=$POSSIBLE_OPT")" + GET_USR_INPUT_MULT_R="" + read -e -r -p "$QUESTION_P +$POSSIBLE_OPT: " RESP_V + if [ -n "$RESP_V" ] ; then + for (( o=0; o<=$(( $TOTAL_0 -1 )); o++ )) ; do + if [ $((i%2)) -eq 0 ] && [ "$RESP_V" == "${OPT_ARR_P[$o]}" ] ; then + # "even" + GET_USR_INPUT_MULT_R="$RESP_V" + break + fi + done + if [ -z "$GET_USR_INPUT_MULT_R" ] ; then + f_get_usr_input_mult "$QUESTION_P" OPT_ARR_P[@] $ALLOW_EMPTY_P + fi + elif [ ${ALLOW_EMPTY_P} -eq 0 ] ; then + f_get_usr_input_mult "$QUESTION_P" OPT_ARR_P[@] 0 + fi +} + +F_EZ_SED_ECP_R="" +f_ez_sed_ecp() { + : '"Escapar" strings para o comando "sed". + + Como há muitas semelhanças entre o escape para "sed" ("f_ez_sed") e + escape para "grep" ("f_fl_cont_str") optei por colocar essa + função como utilitária para as outras duas citadas. + + Args: + VAL_TO_ECP (str): Valor a ser "escapado". + DONT_ECP_NL (Optional[int]): 1 - Não "escapa" "\n" (quebra de + linha); 0 - "Escapa" "\n". Padrão 1. + DONT_ECP_SQ (Optional[int]): 1 - Não "escapa" "'" (aspas + simples); 0 - "Escapa" "'". Padrão 1. NOTE: Usado apenas pela + função "f_fl_cont_str". + + Returns: + F_EZ_SED_ECP_R (str): Valor "escapado". + ' + + VAL_TO_ECP=$1 + DONT_ECP_NL=$2 + if [ -z "$DONT_ECP_NL" ] ; then + DONT_ECP_NL=1 + fi + DONT_ECP_SQ=$3 + if [ -z "$DONT_ECP_SQ" ] ; then + DONT_ECP_SQ=0 + fi + F_EZ_SED_ECP_R=$VAL_TO_ECP + if [ ${DONT_ECP_NL} -eq 1 ] ; then + F_EZ_SED_ECP_R=$(echo "$F_EZ_SED_ECP_R" | sed 's/\\n/C0673CECED2D4A8FBA90C9B92B9508A8/g') + fi + F_EZ_SED_ECP_R=$(echo "$F_EZ_SED_ECP_R" | sed 's/[]\/$*.^|[]/\\&/g') + if [ ${DONT_ECP_SQ} -eq 0 ] ; then + F_EZ_SED_ECP_R=$(echo "$F_EZ_SED_ECP_R" | sed "s/'/\\\x27/g") + fi + if [ ${DONT_ECP_NL} -eq 1 ] ; then + F_EZ_SED_ECP_R=$(echo "$F_EZ_SED_ECP_R" | sed 's/C0673CECED2D4A8FBA90C9B92B9508A8/\\n/g') + fi +} + +f_ez_sed() { + : 'Facilitar o uso da funcionalidade "sed". + + Args: + TARGET (str): Valor a ser substituído por pelo valor de REPLACE. + REPLACE (str): Valor que irá substituir TARGET. + FILE (str): Arquivo no qual será feita a substituição. + ALL_OCCUR (Optional[int]): 0 - Fazer replace apenas na primeira + ocorrência; 1 - Fazer replace em todas as ocorrências. Padrão 0. + DONT_ESCAPE (Optional[int]): 0 - Faz escape das strings em + TARGET e REPLACE; 1 - Não faz escape das strings em TARGET e + REPLACE. Padrão 0. + DONT_ECP_NL (Optional[int]): 1 - Não "escapa" "\n" (quebra de + linha); 0 - "Escapa" "\n". Padrão 1. + REMOVE_LN (Optional[int]): 1 - Remove a linha que possui o + valor em TARGET; 0 - Faz o replace convencional. Padrão 0. + NTH_OCCUR (Optional[int]): Executará a operação escolhida + apenas sobre a ocorrência indicada; Se -1, não executa. Padrão -1. + ' + + FILE=$3 + ALL_OCCUR=$4 + if [ -z "$ALL_OCCUR" ] ; then + ALL_OCCUR=0 + fi + DONT_ESCAPE=$5 + if [ -z "$DONT_ESCAPE" ] ; then + DONT_ESCAPE=0 + fi + DONT_ECP_NL=$6 + if [ -z "$DONT_ECP_NL" ] ; then + DONT_ECP_NL=1 + fi + REMOVE_LN=$7 + if [ -z "$REMOVE_LN" ] ; then + REMOVE_LN=0 + fi + NTH_OCCUR=$8 + if [ -z "$NTH_OCCUR" ] ; then + NTH_OCCUR=-1 + fi + if [ ${DONT_ESCAPE} -eq 1 ] ; then + TARGET=$1 + REPLACE=$2 + else + f_ez_sed_ecp "$1" $DONT_ECP_NL + TARGET=$F_EZ_SED_ECP_R + f_ez_sed_ecp "$2" $DONT_ECP_NL + REPLACE=$F_EZ_SED_ECP_R + fi + if [ ${REMOVE_LN} -eq 1 ] ; then + if [ ${ALL_OCCUR} -eq 0 ] ; then + SED_RPL="'0,/$TARGET/{//d;}'" + else + SED_RPL="'/$TARGET/d'" + fi + eval "sed -i $SED_RPL $FILE" + else + if [ ${NTH_OCCUR} -gt -1 ] ; then + + # TODO: Tá TOSCO no último! Mas, não consegui uma forma de fazer + # replace em apenas determinada posição usando o "sed"! Para ser + # bem franco não sei se dá para fazer isso com o "sed"! By Questor + ((NTH_OCCUR++)) + for (( i=0; i<$(( $NTH_OCCUR - 1 )); i++ )) ; do + SED_RPL="'0,/$TARGET/s//£§¢¬¨/g'" + eval "sed -i $SED_RPL $FILE" + done + SED_RPL="'0,/$TARGET/s//$REPLACE/g'" + eval "sed -i $SED_RPL $FILE" + SED_RPL="'s/£§¢¬¨/$TARGET/g'" + eval "sed -i $SED_RPL $FILE" + else + if [ ${ALL_OCCUR} -eq 0 ] ; then + SED_RPL="'0,/$TARGET/s//$REPLACE/g'" + else + SED_RPL="'s/$TARGET/$REPLACE/g'" + fi + eval "sed -i $SED_RPL $FILE" + fi + fi +} + +FL_CONT_STR_R=0 +f_fl_cont_str() { + : 'Checar se um arquivo contêm determinada string. + + Args: + STR_TO_CH (str): Valor de string a ser verificado. + FILE (str): Arquivo no qual será feita a verificação. + COND_MSG_P (Optional[str]): Mensagem a ser exibida se + verdadeira a verificação. Se vazio ou não informado não será + exibida mensagem. + CHK_INVERT (Optional[int]): Inverter a lógica da checagem. + Padrão 0. + DONT_ESCAPE (Optional[int]): 0 - Faz escape da string em + STR_TO_CH; 1 - Não faz escape das strings em STR_TO_CH. Padrão 0. + DONT_ECP_NL (Optional[int]): 1 - Não "escapa" "\n" (quebra de + linha); 0 - "Escapa" "\n". Padrão 1. + + Returns: + FL_CONT_STR_R (int): 1 - Se verdadeiro para a condição + analisada; 0 - Se falso para a condição analisada. + ' + + STR_TO_CH=$1 + FILE=$2 + COND_MSG_P=$3 + CHK_INVERT=$4 + DONT_ESCAPE=$5 + + if [ -z "$DONT_ESCAPE" ] ; then + DONT_ESCAPE=0 + fi + if [ ${DONT_ESCAPE} -eq 0 ] ; then + DONT_ECP_NL=$6 + if [ -z "$DONT_ECP_NL" ] ; then + DONT_ECP_NL=1 + fi + f_ez_sed_ecp "$STR_TO_CH" $DONT_ECP_NL 1 + STR_TO_CH=$F_EZ_SED_ECP_R + fi + + if [ -z "$CHK_INVERT" ] ; then + CHK_INVERT=0 + fi + FL_CONT_STR_R=0 + if [ ${CHK_INVERT} -eq 0 ] ; then + if grep -q "$STR_TO_CH" "$FILE"; then + FL_CONT_STR_R=1 + fi + else + if ! grep -q "$STR_TO_CH" "$FILE"; then + FL_CONT_STR_R=1 + fi + fi + if [ ${EZ_I_SKIP_ON_V} -eq 0 ] && [ ${FL_CONT_STR_R} -eq 1 ] && [ ! -z "$COND_MSG_P" ] ; then + f_div_section + echo "$COND_MSG_P" + f_div_section + f_enter_to_cont + fi +} + +CHK_FD_FL_R=0 +f_chk_fd_fl() { + : 'Verificar se determinado diretório ou arquivo existe. + + Args: + TARGET (str): Diretório ou arquivo qual se quer verificar. + CHK_TYPE (str): "d" - Checar por diretório; "f" - Checar por + arquivo. + + Returns: + CHK_FD_FL_R (int): 1 - True; 0 - False. + ' + + CHK_FD_FL_R=0 + TARGET=$1 + CHK_TYPE=$2 + if [ "$CHK_TYPE" == "f" ] ; then + if [ -f "$TARGET" ] ; then + CHK_FD_FL_R=1 + fi + fi + if [ "$CHK_TYPE" == "d" ] ; then + if [ -d "$TARGET" ] ; then + CHK_FD_FL_R=1 + fi + fi +} + +F_PACK_IS_INST_R=0 +f_pack_is_inst() { + : 'Checar se um pacote está instalado. + + Args: + PACKAGE_NM_P (str): Nome do pacote. + PACK_MANAG (str): Tipo de gerenciador de pacotes. "yum", + "apt-get" e "zypper" são suportados. Em caso diverso o script + exibe erro e para. + EXIST_MSG_P (Optional[str]): Mensagem a ser exibida se o + pacote já estiver instalado. Se vazio ou não informado não será + exibida mensagem. + SKIP_MSG_P (Optional[int]): 1 - Omite a mensagem; 0 - Não omite a + mensagem. Padrão 1. + + Returns: + F_PACK_IS_INST_R (int): 1 - Instalado; 0 - Não instalado. + ' + + PACKAGE_NM_P=$1 + PACK_MANAG=$2 + EXIST_MSG_P=$3 + SKIP_MSG_P=$4 + + if [ -z "$SKIP_MSG_P" ] ; then + SKIP_MSG_P=1 + fi + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then + SKIP_MSG_P=1 + fi + + F_PACK_IS_INST_R=0 + if [ "$PACK_MANAG" == "yum" ] ; then + if yum list installed "$PACKAGE_NM_P" >/dev/null 2>&1; then + if [ ${SKIP_MSG_P} -eq 0 ] && [ ! -z "$EXIST_MSG_P" ] ; then + f_div_section + echo "$EXIST_MSG_P" + f_div_section + f_enter_to_cont + fi + F_PACK_IS_INST_R=1 + else + F_PACK_IS_INST_R=0 + fi + elif [ "$PACK_MANAG" == "apt-get" ] ; then + if dpkg -s "$PACKAGE_NM_P" &> /dev/null; then + if [ ${SKIP_MSG_P} -eq 0 ] && [ ! -z "$EXIST_MSG_P" ] ; then + f_div_section + echo "$EXIST_MSG_P" + f_div_section + f_enter_to_cont + fi + F_PACK_IS_INST_R=1 + else + F_PACK_IS_INST_R=0 + fi + elif [ "$PACK_MANAG" == "zypper" ] ; then + if zypper se -i --match-word "$PACKAGE_NM_P" > /dev/null 2>&1; then + if [ ${SKIP_MSG_P} -eq 0 ] && [ ! -z "$EXIST_MSG_P" ] ; then + f_div_section + echo "$EXIST_MSG_P" + f_div_section + f_enter_to_cont + fi + F_PACK_IS_INST_R=1 + else + F_PACK_IS_INST_R=0 + fi + else + f_div_section + echo "ERROR! Not implemented for \"$PACK_MANAG\"!" + f_div_section + f_enter_to_cont + fi +} + +F_CHK_BY_PATH_HLP_R=0 +f_chk_by_path_hlp() { + : 'Checar se um aplicativo/pacote/arquivo está presente/instalado + verificando-o através do seu caminho físico informando. + + Args: + PATH_VER_P (str): Caminho físico para o aplicativo/pacote. + VER_TYPE_P (str): Se o caminho físico é para um diretório ("d") + ou arquivo ("f"). + EXIST_MSG_P (Optional[str]): Mensagem a ser "printada" caso o + aplicativo/pacote/arquivo exista. Se não informado ou vazio não + exibe a mensagem. + SKIP_MSG_P (Optional[int]): Não exibir mensagem. + + Returns: + F_CHK_BY_PATH_HLP_R (int): 0 - Não existe; 1 - Existe + ("printa" menssagem contida em EXIST_MSG_P). + ' + + PATH_VER_P=$1 + VER_TYPE_P=$2 + EXIST_MSG_P=$3 + SKIP_MSG_P=$4 + if [ -z "$SKIP_MSG_P" ] ; then + SKIP_MSG_P=0 + fi + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then + SKIP_MSG_P=1 + fi + + F_CHK_BY_PATH_HLP_R=0 + f_chk_fd_fl "$PATH_VER_P" "$VER_TYPE_P" + if [ ${CHK_FD_FL_R} -eq 0 ] ; then + F_CHK_BY_PATH_HLP_R=0 + else + if [ ${SKIP_MSG_P} -eq 0 ] && [ ! -z "$EXIST_MSG_P" ]; then + f_div_section + echo "$EXIST_MSG_P" + f_div_section + f_enter_to_cont + fi + F_CHK_BY_PATH_HLP_R=1 + fi +} + +F_CHK_IPTABLES_R=0 +f_chk_iptables() { + : 'Fazer verificações usando "iptables". + + Trata-se de um utilitário para fazer verificações diversas usando o + comando "iptables" NORMALMENTE CHECAR DE DETERMINADA PORTA ESTÁ + ABERTA. + + Ex 1.: f_chk_iptables 80 + Ex 2.: f_chk_iptables 80 "Já está aberta!" + Ex 3.: f_chk_iptables 80 "Já está aberta!" 0 "ACCEPT" "tcp" "NEW" + Ex 4.: f_chk_iptables 80 "Já está aberta!" 0 "ACCEPT" "tcp" "NEW" 5 + + Args: + PORT_P (int): Porta a ser verificada. + MSG_P (Optional[str]): Mensagem a ser exibida em caso de + verdadeiro para a verificação (normalmente porta aberta). Se vazio + ou não informado não será exibida mensagem. + SKIP_MSG_P (Optional[int]): Não exibir mensagem. + Padrão 0. + TARGET_P (Optional[str]): Padrão "ACCEPT". + PROT_P (Optional[str]): Padrão "tcp". + STATE_P (str): Padrão "". + POS_IN_CHAIN_P (int): Padrão "". + + Returns: + F_CHK_IPTABLES_R (int): 1 - Verdadeiro para a verificação; + 0 - Falso para a verificação. + ' + + PORT_P=$1 + MSG_P=$2 + SKIP_MSG_P=$3 + + if [ -z "$SKIP_MSG_P" ] ; then + SKIP_MSG_P=0 + fi + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then + SKIP_MSG_P=1 + fi + + TARGET_P=$4 + if [ -z "$TARGET_P" ] ; then + TARGET_P="ACCEPT" + fi + PROT_P=$5 + if [ -z "$PROT_P" ] ; then + PROT_P="tcp" + fi + STATE_P=$6 + if [ -z "$STATE_P" ] ; then + STATE_P="" + else + STATE_P="state $STATE_P " + fi + POS_IN_CHAIN_P=$7 + if [ -z "$POS_IN_CHAIN_P" ] ; then + POS_IN_CHAIN_P="" + else + POS_IN_CHAIN_P=$(printf "%-9s" $POS_IN_CHAIN_P) + fi + # 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 ") + GREP_OUT=$(iptables -vnL --line-numbers | grep "$POS_IN_CHAIN_P" | grep "$TARGET_P" | grep "$PROT_P" | grep "dpt:$PORT_P ") + if [ $? -eq 1 ] ; then + F_CHK_IPTABLES_R=1 + else + if [ ${SKIP_MSG_P} -eq 0 ] && [ ! -z "$MSG_P" ] ; then + f_div_section + echo "$MSG_P" + f_div_section + f_enter_to_cont + fi + F_CHK_IPTABLES_R=0 + fi +} + +F_IS_NOT_RUNNING_R=0 +f_is_not_running() { + : 'Checar de determinado processo (pode ser um serviço) está + rodando. + + Args: + PROC_NM_P (str): Nome do processo (pode ser um serviço). + COND_MSG_P (Optional[str]): Mensagem a ser exibida se + verdadeira a verificação. Se vazio ou não informado não será + exibida mensagem. + CHK_INVERT (Optional[int]): Inverter a lógica da checagem. + Padrão 0. + + Returns: + F_IS_NOT_RUNNING_R (int): 1 - Se verdadeiro para a condição + analisada; 0 - Se falso para a condição analisada. + ' + + PROC_NM_P=$1 + COND_MSG_P=$2 + CHK_INVERT=$3 + if [ -z "$CHK_INVERT" ] ; then + CHK_INVERT=0 + fi + F_IS_NOT_RUNNING_R=0 + + # NOTE: A verificação "grep -v grep" é para que ele não dê positivo + # para o próprio comando grep! By Questor + F_IS_NOT_RUNNING_R=0 + if [ ${CHK_INVERT} -eq 0 ] ; then + if ! ps aux | grep -v "grep" | grep "$PROC_NM_P" > /dev/null ; then + F_IS_NOT_RUNNING_R=1 + fi + else + if ps aux | grep -v "grep" | grep "$PROC_NM_P" > /dev/null ; then + F_IS_NOT_RUNNING_R=1 + fi + fi + if [ ${EZ_I_SKIP_ON_V} -eq 0 ] && [ ${F_IS_NOT_RUNNING_R} -eq 1 ] && [ ! -z "$COND_MSG_P" ] ; then + f_div_section + echo "$COND_MSG_P" + f_div_section + f_enter_to_cont + fi +} + +F_GET_STDERR_R="" +F_GET_STDOUT_R="" +F_GET_EXIT_CODE_R=0 +f_get_stderr_stdout() { + : 'Executar um comando e colocar a saída de stderr e stdout nas + variáveis "F_GET_STDERR_R" e "F_GET_STDOUT_R"!. + + Args: + CMD_TO_EXEC (str): Comando a ser executado. + + Returns: + F_GET_STDERR_R (str): Saída para stderr. + F_GET_STDOUT_R (str): Saída para stdout. + ' + + CMD_TO_EXEC=$1 + F_GET_STDERR_R="" + F_GET_STDOUT_R="" + unset t_std t_err t_ret + 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 )" + F_GET_EXIT_CODE_R=$t_ret + F_GET_STDERR_R=$t_err + F_GET_STDOUT_R=$t_std +} + +F_BAK_PATH_R="" +F_BAK_MD_R=0 +f_ez_mv_bak() { + : 'Modifica o nome de um arquivo ou pasta para um nome de backup. + + Adiciona um sufixo ao nome no formato: "-D%Y-%m-%d-T%H-%M-%S.bak". + + Args: + TARGET (str): Caminho para o arquivo ou pasta alvo. + CONF_MSG_P (Optional[str]): Verificar se o usuário deseja ou + não backup. Se vazio ou não informado não será exibida mensagem. + SKIP_MSG_P (Optional[int]): 0 - Exibe a mensagem informada; 1 - Não + exibe a mensagem informada. Padrão 0. + USE_COPY_P (Optional[int]): 0 - Define um novo nome para o alvo; 1 - + Faz uma cópia do alvo com um novo nome. Padrão 0. + DONT_CONFIRM_IF_EXISTS_P (Optional[int]): 0 - Verifica; 1 - Não verifica. + Padrão 0. + + Returns: + F_BAK_PATH_R (str): Caminho para o arquivo ou pasta alvo com o + novo nome. + F_BAK_NAME_R (str): Nome do arquivo recém criado. + F_BAK_MD_R (int): 1 - Backup realizado; 0 - Backup não + realizado. + ' + + TARGET=$1 + CONF_MSG_P=$2 + SKIP_MSG_P=$3 + if [ -z "$SKIP_MSG_P" ] ; then + SKIP_MSG_P=0 + fi + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then + SKIP_MSG_P=1 + fi + USE_COPY_P=$4 + if [ -z "$USE_COPY_P" ] ; then + USE_COPY_P=0 + fi + DONT_CONFIRM_IF_EXISTS_P=$5 + if [ -z "$DONT_CONFIRM_IF_EXISTS_P" ] ; then + DONT_CONFIRM_IF_EXISTS_P=0 + fi + MK_BAK=1 + F_BAK_PATH_R="" + F_BAK_NAME_R="" + F_BAK_MD_R=0 + + if [[ -e $TARGET ]]; then + if [ ${SKIP_MSG_P} -eq 0 ] && [ ! -z "$CONF_MSG_P" ] ; then + f_div_section + f_yes_no "$CONF_MSG_P" + f_div_section + MK_BAK=$YES_NO_R + fi + if [ ${MK_BAK} -eq 1 ] ; then + SUFFIX=$(date +"-D%Y-%m-%d-T%H-%M-%S.bak") + NEW_NAME="$TARGET$SUFFIX" + if [ ${USE_COPY_P} -eq 0 ] ; then + mv "$TARGET" "$NEW_NAME" + elif [ ${USE_COPY_P} -eq 1 ] ; then + cp "$TARGET" "$NEW_NAME" + fi + F_BAK_PATH_R=$NEW_NAME + F_BAK_NAME_R="${NEW_NAME##*/}" + F_BAK_MD_R=1 + fi + else + if [ ${DONT_CONFIRM_IF_EXISTS_P} -eq 0 ] ; then + f_enter_to_cont "ERROR! The target does not exist!" + fi + fi +} + +f_error_exit() { + : '"Printa" uma mensagem de erro e encerra o instalador. + + Args: + ERROR_CAUSE_P (Optional[str]): Causa do erro. + ' + + EZ_I_S_ON_HOLDER=$EZ_I_SKIP_ON_V + EZ_I_SKIP_ON_V=0 + ERROR_CAUSE_P=$1 + echo + f_open_section "E R R O R !" + ERROR_MSG_NOW_P="AN ERROR OCCURRED AND THIS INSTALLER WAS CLOSED!" + if [ ! -z "$ERROR_CAUSE_P" ] ; then + ERROR_MSG_NOW_P="$ERROR_MSG_NOW_P ERROR: \"$ERROR_CAUSE_P\"" + fi + echo "$ERROR_MSG_NOW_P" + echo + f_close_section + EZ_I_SKIP_ON_V=$EZ_I_S_ON_HOLDER + exit 1 +} + +f_warning_msg() { + : '"Printa" uma mensagem de aviso. + + Args: + WARNING_P (str): aviso. + ASK_FOR_CONT_P (Optional[int]): 1 - Checa se o usuário deseja + continuar com a instalação; 0 - Solicita que pressione "enter". + Padrão 0. + ' + + EZ_I_S_ON_HOLDER=$EZ_I_SKIP_ON_V + EZ_I_SKIP_ON_V=0 + WARNING_P=$1 + ASK_FOR_CONT_P=$2 + if [ -z "$ASK_FOR_CONT_P" ] ; then + ASK_FOR_CONT_P=0 + fi + echo + f_open_section "W A R N I N G !" + echo "$WARNING_P" + echo + f_close_section + if [ ${ASK_FOR_CONT_P} -eq 0 ] ; then + f_enter_to_cont + else + f_continue + fi + EZ_I_SKIP_ON_V=$EZ_I_S_ON_HOLDER +} + +f_continue() { + : 'Questionar ao usuário se deseja continuar ou parar a instalação. + + Args: + NOTE_P (Optional[str]): Informações adicionais ao usuário. + ' + + NOTE_P=$1 + f_div_section + if [ -z "$NOTE_P" ] ; then + NOTE_P="" + else + NOTE_P=" (NOTE: \"$NOTE_P\")" + fi + + f_yes_no "CONTINUE? (USE \"n\" TO STOP THIS INSTALLER)$NOTE_P" + f_div_section + if [ ${YES_NO_R} -eq 0 ] ; then + exit 0 + fi +} + +F_SPLIT_R=() +f_split() { + : 'Faz "split" em uma dada string e devolve um array. + + Args: + TARGET_P (str): String alvo do "split". + DELIMITER_P (Optional[str]): Delimitador usado no "split". + Se não informado o split vai ser feito por espaços em branco. + + Returns: + F_SPLIT_R (array): Array com a string fornecida separada pelo + delimitador informado. + ' + + F_SPLIT_R=() + TARGET_P=$1 + DELIMITER_P=$2 + if [ -z "$DELIMITER_P" ] ; then + DELIMITER_P=" " + fi + + REMOVE_N=1 + if [ "$DELIMITER_P" == "\n" ] ; then + REMOVE_N=0 + fi + + if [ ${REMOVE_N} -eq 1 ] ; then + + # NOTE: Devido a limitações do bash temos alguns problemas para + # poder obter a saída de um split via awk dentro de um array e + # por isso precisamos do uso da "quebra de linha" (\n) para + # termos sucesso! Visto isso, removemos as quebras de linha + # momentaneamente depois as reintegramos! By Questor + TARGET_P=$(echo "$TARGET_P" | awk 'BEGIN {RS="dn" } {gsub("\n","£§¢¬¨") ;printf $0 }') + fi + + SPLIT_NOW=$(awk -F"$DELIMITER_P" '{for(i=1;i<=NF;i++){printf "%s\n", $i}}' <<<"${TARGET_P}") + + while IFS= read -r LINE_NOW; do + if [ ${REMOVE_N} -eq 1 ] ; then + LN_NOW_WITH_N=$(awk 'BEGIN {RS="dn"} {gsub("£§¢¬¨","\n") ;printf $0 }' <<<"${LINE_NOW}") + F_SPLIT_R+=("$LN_NOW_WITH_N") + else + F_SPLIT_R+=("$LINE_NOW") + fi + done <<< "$SPLIT_NOW" +} + +F_ABOUT_DISTRO_R=() +f_about_distro() { + : 'Obter informações sobre a distro. + + Returns: + F_ABOUT_DISTRO_R (array): Array com informações sobre a + distro na seguinte ordem: NAME, VERSION, BASED e ARCH. + ' + + F_ABOUT_DISTRO_R=() + f_get_stderr_stdout "cat /etc/*-release" + ABOUT_INFO=$F_GET_STDOUT_R + + if [[ $ABOUT_INFO == *"ID=debian"* ]] ; then + f_split "$ABOUT_INFO" "\n" + F_SPLIT_R_0=("${F_SPLIT_R[@]}") + TOTAL_0=${#F_SPLIT_R_0[*]} + for (( i=0; i<=$(( $TOTAL_0 -1 )); i++ )) ; do + f_split "${F_SPLIT_R_0[$i]}" "=" + F_SPLIT_R_1=("${F_SPLIT_R[@]}") + TOTAL_1=${#F_SPLIT_R_1[*]} + for (( o=0; o<=$(( $TOTAL_1 -1 )); o++ )) ; do + p=$[$o+1] + case "${F_SPLIT_R_1[$o]}" in + "NAME") + f_split "${F_SPLIT_R_1[$p]}" "\"" + F_SPLIT_R_2=("${F_SPLIT_R[@]}") + F_ABOUT_DISTRO_R+=("${F_SPLIT_R_2[1]}") + ;; + "VERSION_ID") + f_split "${F_SPLIT_R_1[$p]}" "\"" + F_SPLIT_R_3=("${F_SPLIT_R[@]}") + F_ABOUT_DISTRO_R+=("${F_SPLIT_R_3[1]}") + ;; + *) + + ;; + esac + done + done + F_ABOUT_DISTRO_R+=("Debian") + elif [[ $ABOUT_INFO == *"ID=\"sles\""* ]] ; then + f_split "$ABOUT_INFO" "\n" + F_SPLIT_R_0=("${F_SPLIT_R[@]}") + TOTAL_0=${#F_SPLIT_R_0[*]} + for (( i=0; i<=$(( $TOTAL_0 -1 )); i++ )) ; do + f_split "${F_SPLIT_R_0[$i]}" "=" + F_SPLIT_R_1=("${F_SPLIT_R[@]}") + TOTAL_1=${#F_SPLIT_R_1[*]} + for (( o=0; o<=$(( $TOTAL_1 -1 )); o++ )) ; do + p=$[$o+1] + case "${F_SPLIT_R_1[$o]}" in + "NAME") + f_split "${F_SPLIT_R_1[$p]}" "\"" + F_SPLIT_R_2=("${F_SPLIT_R[@]}") + F_ABOUT_DISTRO_R+=("${F_SPLIT_R_2[1]}") + ;; + "VERSION_ID") + f_split "${F_SPLIT_R_1[$p]}" "\"" + F_SPLIT_R_3=("${F_SPLIT_R[@]}") + F_ABOUT_DISTRO_R+=("${F_SPLIT_R_3[1]}") + ;; + *) + + ;; + esac + done + done + F_ABOUT_DISTRO_R+=("Suse") + elif [[ $ABOUT_INFO == *"ID=opensuse"* ]] || + [[ $ABOUT_INFO == *"ID_LIKE=\"suse\""* ]] ; then + f_split "$ABOUT_INFO" "\n" + F_SPLIT_R_0=("${F_SPLIT_R[@]}") + TOTAL_0=${#F_SPLIT_R_0[*]} + for (( i=0; i<=$(( $TOTAL_0 -1 )); i++ )) ; do + f_split "${F_SPLIT_R_0[$i]}" "=" + F_SPLIT_R_1=("${F_SPLIT_R[@]}") + TOTAL_1=${#F_SPLIT_R_1[*]} + for (( o=0; o<=$(( $TOTAL_1 -1 )); o++ )) ; do + p=$[$o+1] + case "${F_SPLIT_R_1[$o]}" in + "NAME") + F_ABOUT_DISTRO_R+=("${F_SPLIT_R_1[$p]}") + ;; + "VERSION_ID") + f_split "${F_SPLIT_R_1[$p]}" "\"" + F_SPLIT_R_3=("${F_SPLIT_R[@]}") + F_ABOUT_DISTRO_R+=("${F_SPLIT_R_3[1]}") + ;; + *) + + ;; + esac + done + done + F_ABOUT_DISTRO_R+=("Suse") + elif [[ $ABOUT_INFO == *"DISTRIB_ID=Ubuntu"* ]] || + [[ $ABOUT_INFO == *"ID_LIKE=debian"* ]] ; then + f_split "$ABOUT_INFO" "\n" + F_SPLIT_R_0=("${F_SPLIT_R[@]}") + TOTAL_0=${#F_SPLIT_R_0[*]} + for (( i=0; i<=$(( $TOTAL_0 -1 )); i++ )) ; do + f_split "${F_SPLIT_R_0[$i]}" "=" + F_SPLIT_R_1=("${F_SPLIT_R[@]}") + TOTAL_1=${#F_SPLIT_R_1[*]} + for (( o=0; o<=$(( $TOTAL_1 -1 )); o++ )) ; do + p=$[$o+1] + case "${F_SPLIT_R_1[$o]}" in + "DISTRIB_ID") + F_ABOUT_DISTRO_R+=("${F_SPLIT_R_1[$p]}") + ;; + "DISTRIB_RELEASE") + F_ABOUT_DISTRO_R+=("${F_SPLIT_R_1[$p]}") + ;; + *) + + ;; + esac + done + done + F_ABOUT_DISTRO_R+=("Debian") + elif [[ $ABOUT_INFO == *"CentOS release 6"* ]] ; then + # NOTE: Para a geração CentOS 6.X! By Questor + + f_split "$ABOUT_INFO" "\n" + F_SPLIT_R_0=("${F_SPLIT_R[1]}") + f_split "${F_SPLIT_R_0[0]}" " " + F_SPLIT_R_1=("${F_SPLIT_R[@]}") + F_ABOUT_DISTRO_R+=("${F_SPLIT_R_1[0]}") + F_ABOUT_DISTRO_R+=("${F_SPLIT_R_1[2]}") + F_ABOUT_DISTRO_R+=("RedHat") + elif [[ $ABOUT_INFO == *"CentOS Linux release 7"* ]] ; then + # NOTE: Para a geração CentOS 7.X! By Questor + + f_split "$ABOUT_INFO" "\n" + F_SPLIT_R_0=("${F_SPLIT_R[@]}") + TOTAL_0=${#F_SPLIT_R_0[*]} + for (( i=0; i<=$(( $TOTAL_0 -1 )); i++ )) ; do + f_split "${F_SPLIT_R_0[$i]}" "=" + F_SPLIT_R_1=("${F_SPLIT_R[@]}") + TOTAL_1=${#F_SPLIT_R_1[*]} + for (( o=0; o<=$(( $TOTAL_1 -1 )); o++ )) ; do + p=$[$o+1] + case "${F_SPLIT_R_1[$o]}" in + "NAME") + f_split "${F_SPLIT_R_1[$p]}" "\"" + F_SPLIT_R_2=("${F_SPLIT_R[@]}") + F_ABOUT_DISTRO_R+=("${F_SPLIT_R_2[1]}") + ;; + "VERSION_ID") + f_split "${F_SPLIT_R_1[$p]}" "\"" + F_SPLIT_R_3=("${F_SPLIT_R[@]}") + F_ABOUT_DISTRO_R+=("${F_SPLIT_R_3[1]}") + ;; + *) + + ;; + esac + done + done + F_ABOUT_DISTRO_R+=("RedHat") + elif [[ $ABOUT_INFO == *"Red Hat Enterprise Linux Server"* ]] || + [[ $ABOUT_INFO == *"VERSION_ID=\"7."* ]]; then + # NOTE: Para a geração RHEL 7.X! By Questor + + f_split "$ABOUT_INFO" "\n" + F_SPLIT_R_0=("${F_SPLIT_R[@]}") + TOTAL_0=${#F_SPLIT_R_0[*]} + for (( i=0; i<=$(( $TOTAL_0 -1 )); i++ )) ; do + f_split "${F_SPLIT_R_0[$i]}" "=" + F_SPLIT_R_1=("${F_SPLIT_R[@]}") + TOTAL_1=${#F_SPLIT_R_1[*]} + for (( o=0; o<=$(( $TOTAL_1 -1 )); o++ )) ; do + p=$[$o+1] + case "${F_SPLIT_R_1[$o]}" in + "NAME") + f_split "${F_SPLIT_R_1[$p]}" "\"" + F_SPLIT_R_2=("${F_SPLIT_R[@]}") + F_ABOUT_DISTRO_R+=("${F_SPLIT_R_2[1]}") + ;; + "VERSION_ID") + f_split "${F_SPLIT_R_1[$p]}" "\"" + F_SPLIT_R_3=("${F_SPLIT_R[@]}") + F_ABOUT_DISTRO_R+=("${F_SPLIT_R_3[1]}") + ;; + *) + + ;; + esac + done + done + F_ABOUT_DISTRO_R+=("RedHat") + elif [[ $ABOUT_INFO == *"Red Hat Enterprise Linux Server release "* ]] ; then + f_split "$ABOUT_INFO" "\n" + F_SPLIT_R_0=("${F_SPLIT_R[1]}") + f_split "${F_SPLIT_R_0[0]}" " " + F_SPLIT_R_1=("${F_SPLIT_R[@]}") + F_ABOUT_DISTRO_R+=("Red Hat Enterprise Linux Server") + F_ABOUT_DISTRO_R+=("${F_SPLIT_R_1[6]}") + F_ABOUT_DISTRO_R+=("RedHat") + else + F_ABOUT_DISTRO_R+=("Unknown") + F_ABOUT_DISTRO_R+=("Unknown") + F_ABOUT_DISTRO_R+=("Unknown") + fi + F_ABOUT_DISTRO_R+=($(arch)) +} + +F_IS_ROOT_R=1 +f_is_root() { + : 'Checar se o usuário é root. + + Args: + CHK_ONLY_P (Optional[int]): 1 - Apenas verifica e retorna o + resultado; 0 - Se não for root emite erro e encerra a execução. + Padrão 0. + + Returns: + F_IS_ROOT_R (int): 1 - É root; 0 - Não é root. + ' + + CHK_ONLY_P=$1 + if [ -z "$CHK_ONLY_P" ] ; then + CHK_ONLY_P=0 + fi + + F_IS_ROOT_R=1 + if [[ $EUID -ne 0 ]]; then + f_enter_to_cont "ERROR! You need to be root!" + F_IS_ROOT_R=0 + if [ ${CHK_ONLY_P} -eq 0 ] ; then + f_error_exit + fi + fi +} + +F_CHK_DISTRO_STATUS_R="" +f_chk_distro_status() { + : 'Verifica se a distro informada está subscrita e/ou registrada + e/ou ativa perante os recursos informados. + + Args: + DISTRO_NAME_P (str): Nome da distro sobre a qual será executada + verificação. + RESOURCES_ARR_P (array): Array com a lista de recursos a serem + verificados na distro alvo. + + Returns: + F_CHK_DISTRO_STATUS_R (str): Possui a saída do comando de + verificação executado. + ' + + F_CHECK_RHEL_R="" + DISTRO_NAME_P=$1 + RESOURCES_ARR_P=("${!2}") + TOTAL_2=${#RESOURCES_ARR_P[*]} + RES_OK_ARR=() + REDHAT_ACTV=0 + + CHK_RES_CMD="" + if [ "$DISTRO_NAME_P" == "RedHat" ] ; then + CHK_RES_CMD="subscription-manager list --consumed" + f_get_stderr_stdout "$CHK_RES_CMD" + F_CHK_DISTRO_STATUS_R=$F_GET_STDOUT_R + + # NOTE: To debug! By Questor +# F_GET_STDOUT_R="No consumed subscription pools to list +# " + + if [[ $F_GET_STDOUT_R == *"No consumed subscription pools to list"* ]] ; then + f_get_stderr_stdout "yum repolist" + F_CHK_DISTRO_STATUS_R=$F_GET_STDOUT_R + + # NOTE: To debug! By Questor +# F_GET_STDOUT_R="Loaded plugins: product-id, rhnplugin, security, subscription-manager +# This system is receiving updates from RHN Classic or RHN Satellite. +# repo id repo name status +# epel Extra Packages for Enterprise Linux 6 12125 +# rhel-x86_64-server-6 Red Hat Enterprise Linux Server (v. 6 14725 +# rhel-x86_64-server-optional-6 RHEL Server Optional (v. 6 64-bit x86_ 8257 +# rhel-x86_64-server-supplementary-6 RHEL Server Supplementary (v. 6 64-bit 483 +# repolist: 35590 +# " + + if [[ $F_GET_STDOUT_R == *"RHN Classic or Red Hat Satellite"* ]] ; then + WAR_MSGS_STR="THE REDHAT IS APPARENTLY USING \"RHN Classic\" OR \"Red Hat Satellite\" TO ACCESS ITS RESOURCES! +THIS INSTALLER WILL NOT VALIDATE THESE RESOURCES!" + WAR_MSGS_STR+=$'\n\n'"FOR MORE INFORMATION TRY: \"yum repolist\"." + f_warning_msg "$WAR_MSGS_STR" 1 + return 0 + fi + else + f_split "$F_GET_STDOUT_R" "Subscription Name:" + fi + elif [ "$DISTRO_NAME_P" == "SLES" ] ; then + CHK_RES_CMD="zypper sl" + f_get_stderr_stdout "$CHK_RES_CMD" + f_split "$F_GET_STDOUT_R" "\n" + F_CHK_DISTRO_STATUS_R=$F_GET_STDOUT_R + fi + + F_SPLIT_R_0=("${F_SPLIT_R[@]}") + TOTAL_0=${#F_SPLIT_R_0[*]} + for (( i=0; i<=$(( $TOTAL_0 -1 )); i++ )) ; do + if [[ "$DISTRO_NAME_P" == "RedHat" ]] ; then + f_split "${F_SPLIT_R_0[$i]}" "\n" + F_SPLIT_R_1=("${F_SPLIT_R[@]}") + TOTAL_1=${#F_SPLIT_R_1[*]} + CHK_ACTV=0 + for (( o=0; o<=$(( $TOTAL_1 -1 )); o++ )) ; do + if [[ "${F_SPLIT_R_1[$o]}" == "Provides:"* ]] ; then + CHK_ACTV=1 + fi + if [ ${CHK_ACTV} -eq 1 ] ; then + for (( w=0; w<=$(( $TOTAL_2 -1 )); w++ )) ; do + if [[ "${F_SPLIT_R_1[$o]}" == *"${RESOURCES_ARR_P[$w]}" ]] ; then + RES_OK_ARR+=($w) + break + fi + done + if [ ${REDHAT_ACTV} -eq 0 ] && + [[ "${F_SPLIT_R_1[$o]}" == "Active:"* ]] && + [[ "${F_SPLIT_R_1[$o]}" == *"True" ]] ; then + REDHAT_ACTV=1 + fi + fi + done + elif [[ "$DISTRO_NAME_P" == "SLES" ]] ; then + REDHAT_ACTV=1 + f_split "${F_SPLIT_R_0[$i]}" "|" + F_SPLIT_R_1=("${F_SPLIT_R[@]}") + for (( w=0; w<=$(( $TOTAL_2 -1 )); w++ )) ; do + if [[ "${F_SPLIT_R_1[1]}" == *"${RESOURCES_ARR_P[$w]}"* ]] ; then + if [[ "${F_SPLIT_R_1[3]}" == *"Yes"* ]] ; then + if [[ "${F_SPLIT_R_1[5]}" == *"Yes"* ]] ; then + RES_OK_ARR+=($w) + break + fi + fi + fi + done + fi + done + + WARNINGS_MSGS=() + TOTAL_3=${#RES_OK_ARR[*]} + for (( z=0; z<=$(( $TOTAL_2 -1 )); z++ )) ; do + RES_OK_NOW=1 + for (( t=0; t<=$(( $TOTAL_3 -1 )); t++ )) ; do + if (( ${RES_OK_ARR[$t]} == $z )); then + RES_OK_NOW=0 + break + fi + done + if (( $RES_OK_NOW == 1 )); then + WARNINGS_MSGS+=("$DISTRO_NAME_P does not have access to this resource: \"${RESOURCES_ARR_P[$z]}\".") + fi + done + + # NOTE: Essa verificação é específica para o SLES. Não encontrei uma forma + # melhor de fazê-la... mas funciona bem! By Questor + if [[ "$DISTRO_NAME_P" == "SLES" ]] ; then + CHK_RES_CMD="" + f_get_stderr_stdout "zypper --non-interactive se hfsdfsdufnmfdns" + f_split "$F_GET_STDERR_R" "\n" + F_SPLIT_R_2=("${F_SPLIT_R[@]}") + if [[ "${F_SPLIT_R_2[0]}" == *"Permission to access "* ]] && [[ "${F_SPLIT_R_2[0]}" == *" denied."* ]] ; then + WARNINGS_MSGS+=("${F_SPLIT_R_2[0]}") + fi + fi + + TOTAL_4=${#WARNINGS_MSGS[*]} + WAR_MSGS_STR="" + USE_NEWLINE="" + if [ ! $TOTAL_4 -eq 0 ] || [ $REDHAT_ACTV -eq 0 ]; then + WAR_MSGS_STR="SOME PROBLEM APPEAR TO HAVE BEEN DETECTED ON" + if [[ "$DISTRO_NAME_P" == "RedHat" ]] ; then + WAR_MSGS_STR+=" REDHAT SUBSCRIPTION! " + elif [[ "$DISTRO_NAME_P" == "SLES" ]] ; then + WAR_MSGS_STR+=" SLES REGISTRATION! " + fi + WAR_MSGS_STR+="PLEASE CHECK IT!" + for (( y=0; y<=$(( $TOTAL_4 -1 )); y++ )) ; do + if (( $y == 0 )); then + WAR_MSGS_STR+=$'\n\n' + else + USE_NEWLINE=$'\n' + fi + WAR_MSGS_STR+="$USE_NEWLINE -> ${WARNINGS_MSGS[$y]}" + done + if [ ! -z "$CHK_RES_CMD" ] ; then + WAR_MSGS_STR+=$'\n\n'"FOR MORE INFORMATION TRY: \"$CHK_RES_CMD\"." + fi + f_warning_msg "$WAR_MSGS_STR" 1 + fi +} + +F_STR_TRIM_R="" +f_str_trim(){ + : 'Remover caracteres em branco (espaços) antes e/ou depois da string + informada. + + Args: + STR_VAL_P (str): String a ser ajustada. + TRIM_MODE_P (Optional[int]): 0 - Remove à esquerda (leading); 1 - + Remove à direita (trailing); 2 - Remove em ambos os lados. Padrão 0. + + Returns: + F_STR_TRIM_R (str): String ajustada. + ' + + STR_VAL_P=$1 + TRIM_MODE_P=$2 + if [ -z "$TRIM_MODE_P" ] ; then + TRIM_MODE_P=0 + fi + + case $TRIM_MODE_P in + 0) + STR_VAL_P="${STR_VAL_P#"${STR_VAL_P%%[![:space:]]*}"}" + ;; + 1) + STR_VAL_P="${STR_VAL_P%"${STR_VAL_P##*[![:space:]]}"}" + ;; + 2) + STR_VAL_P="${STR_VAL_P#"${STR_VAL_P%%[![:space:]]*}"}" + STR_VAL_P="${STR_VAL_P%"${STR_VAL_P##*[![:space:]]}"}" + ;; + esac + F_STR_TRIM_R="$STR_VAL_P" +} + +F_SRV_MEMORY_R=0 +f_srv_memory() { + : 'Informar sobre a memória do servidor. + + Returns: + F_SRV_MEMORY_R (int): Quantidade de memória RAM do servidor em KBs. + ' + + f_get_stderr_stdout "cat /proc/meminfo" + f_split "$F_GET_STDOUT_R" "\n" + f_split "${F_SPLIT_R[0]}" "MemTotal:" + f_split "${F_SPLIT_R[1]}" "kB" + f_str_trim "${F_SPLIT_R[0]}" 2 + F_SRV_MEMORY_R=$F_STR_TRIM_R +} + +# < -------------------------------------------------------------------------- + +# > -------------------------------------------------------------------------- +# GRAFICO! +# -------------------------------------- + +f_indent() { + : 'Definir uma tabulação para uma string informada. + + Exemplo de uso: echo "" | f_indent 4 + + Args: + LEVEL_P (int): 2, 4 ou 8 espaços. + ' + + LEVEL_P=$1 + if [ ${LEVEL_P} -eq 2 ] ; then + sed 's/^/ /'; + fi + if [ ${LEVEL_P} -eq 4 ] ; then + sed 's/^/ /'; + fi + if [ ${LEVEL_P} -eq 8 ] ; then + sed 's/^/ /'; + fi +} + +f_open_main_section() { + : 'Printar abertura de uma seção principal (agrupa outras seções).' + + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then + return 0 + fi + TITLE_P=$1 + echo "> ==================================================================" + if [ -n "$TITLE_P" ] ; then + echo "$TITLE_P" + f_div_section + echo + fi +} + +f_close_main_section() { + : 'Printar fechamento de uma seção principal (agrupa outras seções).' + + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then + return 0 + fi + echo "< ==================================================================" + echo +} + +f_open_section() { + : 'Printar abertura de uma seção.' + + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then + return 0 + fi + TITLE_P=$1 + echo "> ------------------------------------------------" + if [ -n "$TITLE_P" ] ; then + echo "$TITLE_P" + f_div_section + echo + fi +} + +f_close_section() { + : 'Printar fechamento de uma seção.' + + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then + return 0 + fi + echo "< ------------------------------------------------" + echo +} + +f_div_section() { + : 'Printar divisão em uma seção.' + + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then + return 0 + fi + echo "----------------------------------" +} + +f_sub_section() { + : 'Printar uma subseção. + + Args: + TITLE_P (str): Título da subseção. + TEXT_P (str): Texto da subseção. + ' + + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then + return 0 + fi + TITLE_P=$1 + TEXT_P=$2 + echo "> $TITLE_P" | f_indent 2 + echo + echo "$TEXT_P" | f_indent 4 + echo +} + +# < -------------------------------------------------------------------------- + +# > -------------------------------------------------------------------------- +# APRESENTAÇÃO! +# -------------------------------------- + +f_begin() { + : 'Printar uma abertura/apresentação para o instalador do produto. + + Usar no início da instalação. + + Args: + TITLE_P (str): Título. + VERSION_P (str): Versão do produto. + ABOUT_P (str): Sobre o produto. + WARNINGS_P (str): Avisos antes de continuar. + COMPANY_P (str): Informações sobre a empresa. + ' + + clear + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then + return 0 + fi + TITLE_P=$1 + VERSION_P=$2 + ABOUT_P=$3 + WARNINGS_P=$4 + COMPANY_P=$5 + f_open_section "$TITLE_P ($VERSION_P)" + f_sub_section "ABOUT:" "$ABOUT_P" + f_sub_section "WARNINGS:" "$WARNINGS_P" + f_div_section + echo "$COMPANY_P" + f_close_section + f_enter_to_cont + clear +} + +f_end() { + : 'Printar uma fechamento/encerramento para o instalador do produto. + + Usar no final da instalação. + + Args: + TITLE_P (str): Título. + USEFUL_INFO_P (str): Informações úteis (uso básico etc...). + ' + + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then + return 0 + fi + TITLE_P=$1 + USEFUL_INFO_P=$2 + f_open_section "$TITLE_P" + f_sub_section "USEFUL INFORMATION:" "$USEFUL_INFO_P" + f_close_section +} + +f_terms_licen() { + : 'Printar os termos de licença/uso do produto. + + Pede que o usuário concorde com os termos. + + Args: + TERMS_LICEN_P (str): Termos de licença/uso do produto. + ' + + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then + return 0 + fi + TERMS_LICEN_P=$1 + f_open_section "LICENSE/TERMS:" + echo "$TERMS_LICEN_P" | f_indent 2 + echo + f_div_section + TITLE_F="BY ANSWERING YES (y) YOU WILL AGREE WITH TERMS AND CONDITIONS "\ +"PRESENTED! PROCEED?" + f_yes_no "$TITLE_F" + TITLE_F="" + f_close_section + sleep 1 + if [ ${YES_NO_R} -eq 0 ] ; then + exit 0 + fi + clear +} + +f_instruct() { + : 'Printar instruções sobre o produto. + + Args: + INSTRUCT_P (str): Instruções sobre o produto. + ' + + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then + return 0 + fi + INSTRUCT_P=$1 + f_open_section "INSTRUCTIONS:" + echo "$INSTRUCT_P" | f_indent 2 + echo + f_close_section + f_enter_to_cont + clear +} + +# < -------------------------------------------------------------------------- + +# > -------------------------------------------------------------------------- +# ESQUEMAS CONDICIONAIS! +# -------------------------------------- + +YES_NO_R=0 +f_yes_no() { + : 'Questiona ao usuário "yes" ou "no" sobre determinado algo. + + Args: + QUESTION_P (str): Questionamento a ser feito. + + Returns: + YES_NO_R (int): 1 - Yes; 0 - No. + ' + + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then + return 0 + fi + QUESTION_P=$1 + YES_NO_R=0 + read -r -p "$QUESTION_P (y/n) " RESP_V + if [[ $RESP_V =~ ^([sS]|[yY])$ ]] ; then + YES_NO_R=1 + elif [[ $RESP_V =~ ^([nN])$ ]] ; then + echo "NO!" + YES_NO_R=0 + else + f_yes_no "$QUESTION_P" + fi +} + +# < -------------------------------------------------------------------------- diff --git a/ez_i.sh b/ez_i.sh deleted file mode 100755 index 0839e24..0000000 --- a/ez_i.sh +++ /dev/null @@ -1,1250 +0,0 @@ -#!/bin/bash -: 'Trata-se de um módulo que oferece uma série de funcionalidades para -criar um instalador usando "bash". - -Apache License -Version 2.0, January 2004 -http://www.apache.org/licenses/ -Copyright 2016 Eduardo Lúcio Amorim Costa -' - -# NOTE: Obtêm a pasta do script atual para que seja usado como -# caminho base/referência durante a instalação! By Questor -EZ_I_DIR_V="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" - -# NOTE: Quando setado faz "ez_i" desabilitar algumas funções, -# notadamente aquelas que envolvem "perguntas ao usuário" e as -# gráficas! By Questor -EZ_I_SKIP_ON_V=0 - -# > -------------------------------------------------------------------------- -# UTILITÁRIOS! -# -------------------------------------- - -f_enter_to_cont() { - : 'Solicitar ao usuário que pressione enter para continuar. - - Args: - INFO_P (Optional[str]): Se informado apresenta uma mensagem ao - usuário. - ' - - INFO_P=$1 - if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then - return 0 - fi - - if [ ! -z "$INFO_P" ] ; then - f_div_section - echo "$INFO_P" - f_div_section - fi - - read -p "Press enter to continue..." nothing -} - -GET_USR_INPUT_R="" -f_get_usr_input() { - : 'Obter entradas digitadas pelo usuário. - - Permite autocomplete (tab). Enter para submeter a entrada. - - Args: - QUESTION_P (str): Pergunta a ser feita ao usuário. - ALLOW_EMPTY_P (Optional[int]): 0 - Não permite valor vazio; 1 - Permite - valor vazio. Padrão 0. - - Returns: - GET_USR_INPUT_R (str): Entrada digitada pelo usuário. - ' - - if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then - return 0 - fi - QUESTION_P=$1 - ALLOW_EMPTY_P=$2 - if [ -z "$ALLOW_EMPTY_P" ] ; then - ALLOW_EMPTY_P=0 - fi - GET_USR_INPUT_R="" - read -e -r -p "$QUESTION_P (use enter to confirm): " RESP_V - if [ -n "$RESP_V" ] ; then - GET_USR_INPUT_R="$RESP_V" - elif [ ${ALLOW_EMPTY_P} -eq 0 ] ; then - f_get_usr_input "$QUESTION_P" 0 - fi -} - -F_EZ_SED_ECP_R="" -f_ez_sed_ecp() { - : '"Escapar" strings para o comando "sed". - - Como há muitas semelhanças entre o escape para "sed" ("f_ez_sed") e - escape para "grep" ("f_fl_cont_str") optei por colocar essa - função como utilitária para as outras duas citadas. - - Args: - VAL_TO_ECP (str): Valor a ser "escapado". - DONT_ECP_NL (Optional[int]): 0 - Não "escapa" "\n" (quebra de - linha); 1 - "Escapa" "\n". Padrão 1. - DONT_ECP_SQ (Optional[int]): 0 - Não "escapa" "'" (aspas - simples); 1 - "Escapa" "'". Padrão 0. NOTE: Usado apenas pela - função "f_fl_cont_str". - - Returns: - F_EZ_SED_ECP_R (str): Valor "escapado". - ' - - VAL_TO_ECP=$1 - DONT_ECP_NL=$2 - if [ -z "$DONT_ECP_NL" ] ; then - DONT_ECP_NL=1 - fi - DONT_ECP_SQ=$3 - if [ -z "$DONT_ECP_SQ" ] ; then - DONT_ECP_SQ=0 - fi - F_EZ_SED_ECP_R=$VAL_TO_ECP - if [ ${DONT_ECP_NL} -eq 1 ] ; then - F_EZ_SED_ECP_R=$(echo "$F_EZ_SED_ECP_R" | sed 's/\\n/C0673CECED2D4A8FBA90C9B92B9508A8/g') - fi - F_EZ_SED_ECP_R=$(echo "$F_EZ_SED_ECP_R" | sed 's/[]\/$*.^|[]/\\&/g') - if [ ${DONT_ECP_SQ} -eq 0 ] ; then - F_EZ_SED_ECP_R=$(echo "$F_EZ_SED_ECP_R" | sed "s/'/\\\x27/g") - fi - if [ ${DONT_ECP_NL} -eq 1 ] ; then - F_EZ_SED_ECP_R=$(echo "$F_EZ_SED_ECP_R" | sed 's/C0673CECED2D4A8FBA90C9B92B9508A8/\\n/g') - fi -} - -f_ez_sed() { - : 'Facilitar o uso da funcionalidade "sed". - - Args: - TARGET (str): Valor a ser substituído por pelo valor de REPLACE. - REPLACE (str): Valor que irá substituir TARGET. - FILE (str): Arquivo no qual será feita a substituição. - ALL_OCCUR (Optional[int]): 0 - Fazer replace apenas na primeira - ocorrência; 1 - Fazer replace em todas as ocorrências. Padrão 0. - DONT_ESCAPE (Optional[int]): 0 - Faz escape das strings em - TARGET e REPLACE; 1 - Não faz escape das strings em TARGET e - REPLACE. Padrão 0. - DONT_ECP_NL (Optional[int]): 1 - Não "escapa" "\n" (quebra de - linha); 0 - "Escapa" "\n". Padrão 1. - REMOVE_LN (Optional[int]): 1 - Remove a linha que possui o - valor em TARGET; 0 - Faz o replace convencional. Padrão 0. - ' - - FILE=$3 - ALL_OCCUR=$4 - if [ -z "$ALL_OCCUR" ] ; then - ALL_OCCUR=0 - fi - DONT_ESCAPE=$5 - if [ -z "$DONT_ESCAPE" ] ; then - DONT_ESCAPE=0 - fi - DONT_ECP_NL=$6 - if [ -z "$DONT_ECP_NL" ] ; then - DONT_ECP_NL=1 - fi - REMOVE_LN=$7 - if [ -z "$REMOVE_LN" ] ; then - REMOVE_LN=0 - fi - if [ ${DONT_ESCAPE} -eq 1 ] ; then - TARGET=$1 - REPLACE=$2 - else - f_ez_sed_ecp "$1" $DONT_ECP_NL - TARGET=$F_EZ_SED_ECP_R - f_ez_sed_ecp "$2" $DONT_ECP_NL - REPLACE=$F_EZ_SED_ECP_R - fi - if [ ${REMOVE_LN} -eq 1 ] ; then - if [ ${ALL_OCCUR} -eq 0 ] ; then - SED_RPL="'0,/$TARGET/{//d;}'" - else - SED_RPL="'/$TARGET/d'" - fi - eval "sed -i $SED_RPL $FILE" - else - if [ ${ALL_OCCUR} -eq 0 ] ; then - SED_RPL="'0,/$TARGET/s//$REPLACE/g'" - else - SED_RPL="'s/$TARGET/$REPLACE/g'" - fi - eval "sed -i $SED_RPL $FILE" - fi -} - -FL_CONT_STR_R=0 -f_fl_cont_str() { - : 'Checar se um arquivo contêm determinada string. - - Args: - STR_TO_CH (str): Valor de string a ser verificado. - FILE (str): Arquivo no qual será feita a verificação. - COND_MSG_P (Optional[str]): Mensagem a ser exibida se - verdadeira a verificação. Se vazio ou não informado não será - exibida mensagem. - CHK_INVERT (Optional[int]): Inverter a lógica da checagem. - Padrão 0. - DONT_ESCAPE (Optional[int]): 0 - Faz escape da string em - STR_TO_CH; 1 - Não faz escape das strings em STR_TO_CH. Padrão 0. - DONT_ECP_NL (Optional[int]): 1 - Não "escapa" "\n" (quebra de - linha); 0 - "Escapa" "\n". Padrão 1. - - Returns: - FL_CONT_STR_R (int): 1 - Se verdadeiro para a condição - analisada; 0 - Se falso para a condição analisada. - ' - - STR_TO_CH=$1 - FILE=$2 - COND_MSG_P=$3 - CHK_INVERT=$4 - DONT_ESCAPE=$5 - - if [ -z "$DONT_ESCAPE" ] ; then - DONT_ESCAPE=0 - fi - if [ ${DONT_ESCAPE} -eq 0 ] ; then - DONT_ECP_NL=$6 - if [ -z "$DONT_ECP_NL" ] ; then - DONT_ECP_NL=1 - fi - f_ez_sed_ecp "$STR_TO_CH" $DONT_ECP_NL 1 - STR_TO_CH=$F_EZ_SED_ECP_R - fi - - if [ -z "$CHK_INVERT" ] ; then - CHK_INVERT=0 - fi - FL_CONT_STR_R=0 - if [ ${CHK_INVERT} -eq 0 ] ; then - if grep -q "$STR_TO_CH" "$FILE"; then - FL_CONT_STR_R=1 - fi - else - if ! grep -q "$STR_TO_CH" "$FILE"; then - FL_CONT_STR_R=1 - fi - fi - if [ ${EZ_I_SKIP_ON_V} -eq 0 ] && [ ${FL_CONT_STR_R} -eq 1 ] && [ ! -z "$COND_MSG_P" ] ; then - f_div_section - echo "$COND_MSG_P" - f_div_section - f_enter_to_cont - fi -} - -CHK_FD_FL_R=0 -f_chk_fd_fl() { - : 'Verificar se determinado diretório ou arquivo existe. - - Args: - TARGET (str): Diretório ou arquivo qual se quer verificar. - CHK_TYPE (str): "d" - Checar por diretório; "f" - Checar por - arquivo. - - Returns: - CHK_FD_FL_R (int): 1 - True; 0 - False. - ' - - CHK_FD_FL_R=0 - TARGET=$1 - CHK_TYPE=$2 - if [ "$CHK_TYPE" == "f" ] ; then - if [ -f "$TARGET" ] ; then - CHK_FD_FL_R=1 - fi - fi - if [ "$CHK_TYPE" == "d" ] ; then - if [ -d "$TARGET" ] ; then - CHK_FD_FL_R=1 - fi - fi -} - -F_PACK_IS_INST_R=0 -f_pack_is_inst() { - : 'Checar se um pacote está instalado. - - Args: - PACKAGE_NM_P (str): Nome do pacote. - PACK_MANAG (str): Tipo de gerenciador de pacotes. "yum", - "apt-get" e "zypper" são suportados. Em caso diverso o script - exibe erro e para. - EXIST_MSG_P (Optional[str]): Mensagem a ser exibida se o - pacote já estiver instalado. Se vazio ou não informado não será - exibida mensagem. - SKIP_MSG_P (Optional[int]): Omite a mensagem. Padrão 0. - - Returns: - F_PACK_IS_INST_R (int): 1 - Instalado; 0 - Não instalado. - ' - - PACKAGE_NM_P=$1 - PACK_MANAG=$2 - EXIST_MSG_P=$3 - SKIP_MSG_P=$4 - - if [ -z "$SKIP_MSG_P" ] ; then - SKIP_MSG_P=0 - fi - if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then - SKIP_MSG_P=1 - fi - - F_PACK_IS_INST_R=0 - if [ "$PACK_MANAG" == "yum" ] ; then - if yum list installed "$PACKAGE_NM_P" >/dev/null 2>&1; then - if [ ${SKIP_MSG_P} -eq 0 ] && [ ! -z "$EXIST_MSG_P" ] ; then - f_div_section - echo "$EXIST_MSG_P" - f_div_section - f_enter_to_cont - fi - F_PACK_IS_INST_R=1 - else - F_PACK_IS_INST_R=0 - fi - elif [ "$PACK_MANAG" == "apt-get" ] ; then - if dpkg -s "$PACKAGE_NM_P" &> /dev/null; then - if [ ${SKIP_MSG_P} -eq 0 ] && [ ! -z "$EXIST_MSG_P" ] ; then - f_div_section - echo "$EXIST_MSG_P" - f_div_section - f_enter_to_cont - fi - F_PACK_IS_INST_R=1 - else - F_PACK_IS_INST_R=0 - fi - elif [ "$PACK_MANAG" == "zypper" ] ; then - if zypper se -i --match-word "$PACKAGE_NM_P" > /dev/null 2>&1; then - if [ ${SKIP_MSG_P} -eq 0 ] && [ ! -z "$EXIST_MSG_P" ] ; then - f_div_section - echo "$EXIST_MSG_P" - f_div_section - f_enter_to_cont - fi - F_PACK_IS_INST_R=1 - else - F_PACK_IS_INST_R=0 - fi - else - f_div_section - echo "ERROR! Not implemented for \"$PACK_MANAG\"!" - f_div_section - f_enter_to_cont - fi -} - -F_CHK_BY_PATH_HLP_R=0 -f_chk_by_path_hlp() { - : 'Checar se um aplicativo/pacote/arquivo está presente/instalado - verificando-o através do seu caminho físico informando. - - Args: - PATH_VER_P (str): Caminho físico para o aplicativo/pacote. - VER_TYPE_P (str): Se o caminho físico é para um diretório ("d") - ou arquivo ("f"). - EXIST_MSG_P (Optional[str]): Mensagem a ser "printada" caso o - aplicativo/pacote/arquivo exista. Se não informado ou vazio não - exibe a mensagem. - SKIP_MSG_P (Optional[int]): Não exibir mensagem. - - Returns: - F_CHK_BY_PATH_HLP_R (int): 0 - Não existe; 1 - Existe - ("printa" menssagem contida em EXIST_MSG_P). - ' - - PATH_VER_P=$1 - VER_TYPE_P=$2 - EXIST_MSG_P=$3 - SKIP_MSG_P=$4 - if [ -z "$SKIP_MSG_P" ] ; then - SKIP_MSG_P=0 - fi - if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then - SKIP_MSG_P=1 - fi - - F_CHK_BY_PATH_HLP_R=0 - f_chk_fd_fl "$PATH_VER_P" "$VER_TYPE_P" - if [ ${CHK_FD_FL_R} -eq 0 ] ; then - F_CHK_BY_PATH_HLP_R=0 - else - if [ ${SKIP_MSG_P} -eq 0 ] && [ ! -z "$EXIST_MSG_P" ]; then - f_div_section - echo "$EXIST_MSG_P" - f_div_section - f_enter_to_cont - fi - F_CHK_BY_PATH_HLP_R=1 - fi -} - -F_CHK_IPTABLES_R=0 -f_chk_iptables() { - : 'Fazer verificações usando "iptables". - - Trata-se de um utilitário para fazer verificações diversas usando o - comando "iptables" NORMALMENTE CHECAR DE DETERMINADA PORTA ESTÁ - ABERTA. - - Ex 1.: f_chk_iptables 80 - Ex 2.: f_chk_iptables 80 "Já está aberta!" - Ex 3.: f_chk_iptables 80 "Já está aberta!" 0 "ACCEPT" "tcp" "NEW" - Ex 4.: f_chk_iptables 80 "Já está aberta!" 0 "ACCEPT" "tcp" "NEW" 5 - - Args: - PORT_P (int): Porta a ser verificada. - MSG_P (Optional[str]): Mensagem a ser exibida em caso de - verdadeiro para a verificação (normalmente porta aberta). Se vazio - ou não informado não será exibida mensagem. - SKIP_MSG_P (Optional[int]): Não exibir mensagem. - Padrão 0. - TARGET_P (Optional[str]): Padrão "ACCEPT". - PROT_P (Optional[str]): Padrão "tcp". - STATE_P (str): Padrão "". - POS_IN_CHAIN_P (int): Padrão "". - - Returns: - F_CHK_IPTABLES_R (int): 1 - Verdadeiro para a verificação; - 0 - Falso para a verificação. - ' - - PORT_P=$1 - MSG_P=$2 - SKIP_MSG_P=$3 - - if [ -z "$SKIP_MSG_P" ] ; then - SKIP_MSG_P=0 - fi - if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then - SKIP_MSG_P=1 - fi - - TARGET_P=$4 - if [ -z "$TARGET_P" ] ; then - TARGET_P="ACCEPT" - fi - PROT_P=$5 - if [ -z "$PROT_P" ] ; then - PROT_P="tcp" - fi - STATE_P=$6 - if [ -z "$STATE_P" ] ; then - STATE_P="" - else - STATE_P="state $STATE_P " - fi - POS_IN_CHAIN_P=$7 - if [ -z "$POS_IN_CHAIN_P" ] ; then - POS_IN_CHAIN_P="" - else - POS_IN_CHAIN_P=$(printf "%-9s" $POS_IN_CHAIN_P) - fi - 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") - if [ $? -eq 1 ] ; then - F_CHK_IPTABLES_R=1 - else - if [ ${SKIP_MSG_P} -eq 0 ] && [ ! -z "$MSG_P" ] ; then - f_div_section - echo "$MSG_P" - f_div_section - f_enter_to_cont - fi - F_CHK_IPTABLES_R=0 - fi -} - -F_IS_NOT_RUNNING_R=0 -f_is_not_running() { - : 'Checar de determinado processo (pode ser um serviço) está - rodando. - - Args: - PROC_NM_P (str): Nome do processo (pode ser um serviço). - COND_MSG_P (Optional[str]): Mensagem a ser exibida se - verdadeira a verificação. Se vazio ou não informado não será - exibida mensagem. - CHK_INVERT (Optional[int]): Inverter a lógica da checagem. - Padrão 0. - - Returns: - F_IS_NOT_RUNNING_R (int): 1 - Se verdadeiro para a condição - analisada; 0 - Se falso para a condição analisada. - ' - - PROC_NM_P=$1 - COND_MSG_P=$2 - CHK_INVERT=$3 - if [ -z "$CHK_INVERT" ] ; then - CHK_INVERT=0 - fi - F_IS_NOT_RUNNING_R=0 - - # NOTE: A verificação "grep -v grep" é para que ele não dê positivo - # para o próprio comando grep! By Questor - F_IS_NOT_RUNNING_R=0 - if [ ${CHK_INVERT} -eq 0 ] ; then - if ! ps aux | grep -v "grep" | grep "$PROC_NM_P" > /dev/null ; then - F_IS_NOT_RUNNING_R=1 - fi - else - if ps aux | grep -v "grep" | grep "$PROC_NM_P" > /dev/null ; then - F_IS_NOT_RUNNING_R=1 - fi - fi - if [ ${EZ_I_SKIP_ON_V} -eq 0 ] && [ ${F_IS_NOT_RUNNING_R} -eq 1 ] && [ ! -z "$COND_MSG_P" ] ; then - f_div_section - echo "$COND_MSG_P" - f_div_section - f_enter_to_cont - fi -} - -F_GET_STDERR_R="" -F_GET_STDOUT_R="" -F_GET_EXIT_CODE_R=0 -f_get_stderr_stdout() { - : 'Executar um comando e colocar a saída de stderr e stdout nas - variáveis "F_GET_STDERR_R" e "F_GET_STDOUT_R"!. - - Args: - CMD_TO_EXEC (str): Comando a ser executado. - - Returns: - F_GET_STDERR_R (str): Saída para stderr. - F_GET_STDOUT_R (str): Saída para stdout. - ' - - CMD_TO_EXEC=$1 - F_GET_STDERR_R="" - F_GET_STDOUT_R="" - unset t_std t_err t_ret - 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 )" - F_GET_EXIT_CODE_R=$t_ret - F_GET_STDERR_R=$t_err - F_GET_STDOUT_R=$t_std -} - -F_BAK_PATH_R="" -F_BAK_MD_R=0 -f_ez_mv_bak() { - : 'Modifica o nome de um arquivo ou pasta para um nome de backup. - - Adiciona um sufixo ao nome no formato: "-D%Y-%m-%d-T%H-%M-%S.bak". - - Args: - TARGET (str): Caminho para o arquivo ou pasta alvo. - CONF_MSG_P (Optional[str]): Verificar se o usuário deseja ou - não backup. Se vazio ou não informado não será exibida mensagem. - SKIP_MSG_P (Optional[int]): Não exibir mensagem. Padrão 0. - - Returns: - F_BAK_PATH_R (str): Caminho para o arquivo ou pasta alvo com o - novo nome. - F_BAK_NAME_R (str): Nome do arquivo recém criado. - F_BAK_MD_R (int): 1 - Backup realizado; 0 - Backup não - realizado. - ' - - TARGET=$1 - CONF_MSG_P=$2 - SKIP_MSG_P=$3 - if [ -z "$SKIP_MSG_P" ] ; then - SKIP_MSG_P=0 - fi - if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then - SKIP_MSG_P=1 - fi - - MK_BAK=1 - F_BAK_PATH_R="" - F_BAK_NAME_R="" - F_BAK_MD_R=0 - - if [ ${SKIP_MSG_P} -eq 0 ] && [ ! -z "$CONF_MSG_P" ] ; then - f_div_section - f_yes_no "$CONF_MSG_P" - f_div_section - MK_BAK=$YES_NO_R - fi - if [ ${MK_BAK} -eq 1 ] ; then - SUFFIX=$(date +"-D%Y-%m-%d-T%H-%M-%S.bak") - NEW_NAME="$TARGET$SUFFIX" - mv "$TARGET" "$NEW_NAME" - F_BAK_PATH_R=$NEW_NAME - F_BAK_NAME_R="${NEW_NAME##*/}" - F_BAK_MD_R=1 - fi -} - -f_error_exit() { - : '"Printa" uma mensagem de erro e encerra o instalador. - - Args: - ERROR_CAUSE_P (Optional[str]): Causa do erro. - ' - - EZ_I_S_ON_HOLDER=$EZ_I_SKIP_ON_V - EZ_I_SKIP_ON_V=0 - ERROR_CAUSE_P=$1 - echo - f_open_section "E R R O R !" - ERROR_MSG_NOW_P="AN ERROR OCCURRED AND THIS INSTALLER WAS CLOSED!" - if [ ! -z "$ERROR_CAUSE_P" ] ; then - ERROR_MSG_NOW_P="$ERROR_MSG_NOW_P ERROR: \"$ERROR_CAUSE_P\"" - fi - echo "$ERROR_MSG_NOW_P" - echo - f_close_section - EZ_I_SKIP_ON_V=$EZ_I_S_ON_HOLDER - exit 1 -} - -f_warning_msg() { - : '"Printa" uma mensagem de aviso. - - Args: - WARNING_P (str): aviso. - ASK_FOR_CONT_P (Optional[int]): 1 - Checa se o usuário deseja - continuar com a instalação; 0 - Solicita que pressione "enter". - Padrão 0. - ' - - EZ_I_S_ON_HOLDER=$EZ_I_SKIP_ON_V - EZ_I_SKIP_ON_V=0 - WARNING_P=$1 - ASK_FOR_CONT_P=$2 - if [ -z "$ASK_FOR_CONT_P" ] ; then - ASK_FOR_CONT_P=0 - fi - echo - f_open_section "W A R N I N G !" - echo "$WARNING_P" - echo - f_close_section - if [ ${ASK_FOR_CONT_P} -eq 0 ] ; then - f_enter_to_cont - else - f_continue - fi - EZ_I_SKIP_ON_V=$EZ_I_S_ON_HOLDER -} - -f_continue() { - : 'Questionar ao usuário se deseja continuar ou parar a instalação. - - Args: - NOTE_P (Optional[str]): Informações adicionais ao usuário. - ' - - NOTE_P=$1 - f_div_section - if [ -z "$NOTE_P" ] ; then - NOTE_P="" - else - NOTE_P=" (NOTE: \"$NOTE_P\")" - fi - - f_yes_no "CONTINUE? (USE \"n\" TO STOP THIS INSTALLER)$NOTE_P" - f_div_section - if [ ${YES_NO_R} -eq 0 ] ; then - exit 0 - fi -} - -F_SPLIT_R=() -f_split() { - : 'Faz "split" em uma dada string e devolve um array. - - Args: - TARGET_P (str): String alvo do "split". - DELIMITER_P (Optional[str]): Delimitador usado no "split". - Se não informado o split vai ser feito por espaços em branco. - - Returns: - F_SPLIT_R (array): Array com a string fornecida separada pelo - delimitador informado. - ' - - F_SPLIT_R=() - TARGET_P=$1 - DELIMITER_P=$2 - if [ -z "$DELIMITER_P" ] ; then - DELIMITER_P=" " - fi - - REMOVE_N=1 - if [ "$DELIMITER_P" == "\n" ] ; then - REMOVE_N=0 - fi - - if [ ${REMOVE_N} -eq 1 ] ; then - - # NOTE: Devido a limitações do bash temos alguns problemas para - # poder obter a saída de um split via awk dentro de um array e - # por isso precisamos do uso da "quebra de linha" (\n) para - # termos sucesso! Visto isso, removemos as quebras de linha - # momentaneamente depois as reintegramos! By Questor - TARGET_P=$(echo "$TARGET_P" | awk 'BEGIN {RS="dn" } {gsub("\n","£§¢¬¨") ;printf $0 }') - fi - - SPLIT_NOW=$(awk -F"$DELIMITER_P" '{for(i=1;i<=NF;i++){printf "%s\n", $i}}' <<<"${TARGET_P}") - - while IFS= read -r LINE_NOW; do - if [ ${REMOVE_N} -eq 1 ] ; then - LN_NOW_WITH_N=$(awk 'BEGIN {RS="dn"} {gsub("£§¢¬¨","\n") ;printf $0 }' <<<"${LINE_NOW}") - F_SPLIT_R+=("$LN_NOW_WITH_N") - else - F_SPLIT_R+=("$LINE_NOW") - fi - done <<< "$SPLIT_NOW" -} - -F_ABOUT_DISTRO_R=() -f_about_distro() { - : 'Obter informações sobre a distro. - - Returns: - F_ABOUT_DISTRO_R (array): Array com informações sobre a - distro na seguinte ordem: NAME, VERSION, BASED e ARCH. - ' - - F_ABOUT_DISTRO_R=() - f_get_stderr_stdout "cat /etc/*-release" - ABOUT_INFO=$F_GET_STDOUT_R - - if [[ $ABOUT_INFO == *"ID=debian"* ]] ; then - f_split "$ABOUT_INFO" "\n" - F_SPLIT_R_0=("${F_SPLIT_R[@]}") - TOTAL_0=${#F_SPLIT_R_0[*]} - for (( i=0; i<=$(( $TOTAL_0 -1 )); i++ )) ; do - f_split "${F_SPLIT_R_0[$i]}" "=" - F_SPLIT_R_1=("${F_SPLIT_R[@]}") - TOTAL_1=${#F_SPLIT_R_1[*]} - for (( o=0; o<=$(( $TOTAL_1 -1 )); o++ )) ; do - p=$[$o+1] - case "${F_SPLIT_R_1[$o]}" in - "NAME") - f_split "${F_SPLIT_R_1[$p]}" "\"" - F_SPLIT_R_2=("${F_SPLIT_R[@]}") - F_ABOUT_DISTRO_R+=("${F_SPLIT_R_2[1]}") - ;; - "VERSION_ID") - f_split "${F_SPLIT_R_1[$p]}" "\"" - F_SPLIT_R_3=("${F_SPLIT_R[@]}") - F_ABOUT_DISTRO_R+=("${F_SPLIT_R_3[1]}") - ;; - *) - - ;; - esac - done - done - F_ABOUT_DISTRO_R+=("Debian") - elif [[ $ABOUT_INFO == *"ID=\"sles\""* ]] ; then - f_split "$ABOUT_INFO" "\n" - F_SPLIT_R_0=("${F_SPLIT_R[@]}") - TOTAL_0=${#F_SPLIT_R_0[*]} - for (( i=0; i<=$(( $TOTAL_0 -1 )); i++ )) ; do - f_split "${F_SPLIT_R_0[$i]}" "=" - F_SPLIT_R_1=("${F_SPLIT_R[@]}") - TOTAL_1=${#F_SPLIT_R_1[*]} - for (( o=0; o<=$(( $TOTAL_1 -1 )); o++ )) ; do - p=$[$o+1] - case "${F_SPLIT_R_1[$o]}" in - "NAME") - f_split "${F_SPLIT_R_1[$p]}" "\"" - F_SPLIT_R_2=("${F_SPLIT_R[@]}") - F_ABOUT_DISTRO_R+=("${F_SPLIT_R_2[1]}") - ;; - "VERSION_ID") - f_split "${F_SPLIT_R_1[$p]}" "\"" - F_SPLIT_R_3=("${F_SPLIT_R[@]}") - F_ABOUT_DISTRO_R+=("${F_SPLIT_R_3[1]}") - ;; - *) - - ;; - esac - done - done - F_ABOUT_DISTRO_R+=("Suse") - elif [[ $ABOUT_INFO == *"ID=opensuse"* ]] || - [[ $ABOUT_INFO == *"ID_LIKE=\"suse\""* ]] ; then - f_split "$ABOUT_INFO" "\n" - F_SPLIT_R_0=("${F_SPLIT_R[@]}") - TOTAL_0=${#F_SPLIT_R_0[*]} - for (( i=0; i<=$(( $TOTAL_0 -1 )); i++ )) ; do - f_split "${F_SPLIT_R_0[$i]}" "=" - F_SPLIT_R_1=("${F_SPLIT_R[@]}") - TOTAL_1=${#F_SPLIT_R_1[*]} - for (( o=0; o<=$(( $TOTAL_1 -1 )); o++ )) ; do - p=$[$o+1] - case "${F_SPLIT_R_1[$o]}" in - "NAME") - F_ABOUT_DISTRO_R+=("${F_SPLIT_R_1[$p]}") - ;; - "VERSION_ID") - f_split "${F_SPLIT_R_1[$p]}" "\"" - F_SPLIT_R_3=("${F_SPLIT_R[@]}") - F_ABOUT_DISTRO_R+=("${F_SPLIT_R_3[1]}") - ;; - *) - - ;; - esac - done - done - F_ABOUT_DISTRO_R+=("Suse") - elif [[ $ABOUT_INFO == *"DISTRIB_ID=Ubuntu"* ]] || - [[ $ABOUT_INFO == *"ID_LIKE=debian"* ]] ; then - f_split "$ABOUT_INFO" "\n" - F_SPLIT_R_0=("${F_SPLIT_R[@]}") - TOTAL_0=${#F_SPLIT_R_0[*]} - for (( i=0; i<=$(( $TOTAL_0 -1 )); i++ )) ; do - f_split "${F_SPLIT_R_0[$i]}" "=" - F_SPLIT_R_1=("${F_SPLIT_R[@]}") - TOTAL_1=${#F_SPLIT_R_1[*]} - for (( o=0; o<=$(( $TOTAL_1 -1 )); o++ )) ; do - p=$[$o+1] - case "${F_SPLIT_R_1[$o]}" in - "DISTRIB_ID") - F_ABOUT_DISTRO_R+=("${F_SPLIT_R_1[$p]}") - ;; - "DISTRIB_RELEASE") - F_ABOUT_DISTRO_R+=("${F_SPLIT_R_1[$p]}") - ;; - *) - - ;; - esac - done - done - F_ABOUT_DISTRO_R+=("Debian") - elif [[ $ABOUT_INFO == *"CentOS release "* ]] ; then - f_split "$ABOUT_INFO" "\n" - F_SPLIT_R_0=("${F_SPLIT_R[1]}") - f_split "${F_SPLIT_R_0[0]}" " " - F_SPLIT_R_1=("${F_SPLIT_R[@]}") - F_ABOUT_DISTRO_R+=("${F_SPLIT_R_1[0]}") - F_ABOUT_DISTRO_R+=("${F_SPLIT_R_1[2]}") - F_ABOUT_DISTRO_R+=("RedHat") - elif [[ $ABOUT_INFO == *"Red Hat Enterprise Linux Server release "* ]] ; then - f_split "$ABOUT_INFO" "\n" - F_SPLIT_R_0=("${F_SPLIT_R[1]}") - f_split "${F_SPLIT_R_0[0]}" " " - F_SPLIT_R_1=("${F_SPLIT_R[@]}") - F_ABOUT_DISTRO_R+=("Red Hat Enterprise Linux Server") - F_ABOUT_DISTRO_R+=("${F_SPLIT_R_1[6]}") - F_ABOUT_DISTRO_R+=("RedHat") - else - F_ABOUT_DISTRO_R+=("Unknown") - F_ABOUT_DISTRO_R+=("Unknown") - F_ABOUT_DISTRO_R+=("Unknown") - fi - F_ABOUT_DISTRO_R+=($(arch)) -} - -F_IS_ROOT_R=1 -f_is_root() { - : 'Checar se o usuário é root. - - Args: - CHK_ONLY_P (Optional[int]): 1 - Apenas verifica e retorna o - resultado; 0 - Se não for root emite erro e encerra a execução. - Padrão 0. - - Returns: - F_IS_ROOT_R (int): 1 - É root; 0 - Não é root. - ' - - CHK_ONLY_P=$1 - if [ -z "$CHK_ONLY_P" ] ; then - CHK_ONLY_P=0 - fi - - F_IS_ROOT_R=1 - if [[ $EUID -ne 0 ]]; then - f_enter_to_cont "ERROR! You need to be root!" - F_IS_ROOT_R=0 - if [ ${CHK_ONLY_P} -eq 0 ] ; then - f_error_exit - fi - fi -} - -F_CHK_DISTRO_STATUS_R="" -f_chk_distro_status() { - : 'Verifica se a distro informada está subscrita e/ou registrada - e/ou ativa perante os recursos informados. - - Args: - DISTRO_NAME_P (str): Nome da distro sobre a qual será executada - verificação. - RESOURCES_ARR_P (str): Array com a lista de recursos a serem - verificados na distro alvo. - - Returns: - F_CHK_DISTRO_STATUS_R (str): Possui a saída do comando de - verificação executado. - ' - - F_CHECK_RHEL_R="" - DISTRO_NAME_P=$1 - RESOURCES_ARR_P=("${!2}") - TOTAL_2=${#RESOURCES_ARR_P[*]} - RES_OK_ARR=() - REDHAT_ACTV=0 - - CHK_RES_CMD="" - if [ "$DISTRO_NAME_P" == "RedHat" ] ; then - CHK_RES_CMD="subscription-manager list --consumed" - f_get_stderr_stdout "$CHK_RES_CMD" - F_CHK_DISTRO_STATUS_R=$F_GET_STDOUT_R - - # NOTE: To debug! By Questor -# F_GET_STDOUT_R="No consumed subscription pools to list -# " - - if [[ $F_GET_STDOUT_R == *"No consumed subscription pools to list"* ]] ; then - f_get_stderr_stdout "yum repolist" - F_CHK_DISTRO_STATUS_R=$F_GET_STDOUT_R - - # NOTE: To debug! By Questor -# F_GET_STDOUT_R="Loaded plugins: product-id, rhnplugin, security, subscription-manager -# This system is receiving updates from RHN Classic or RHN Satellite. -# repo id repo name status -# epel Extra Packages for Enterprise Linux 6 12125 -# rhel-x86_64-server-6 Red Hat Enterprise Linux Server (v. 6 14725 -# rhel-x86_64-server-optional-6 RHEL Server Optional (v. 6 64-bit x86_ 8257 -# rhel-x86_64-server-supplementary-6 RHEL Server Supplementary (v. 6 64-bit 483 -# repolist: 35590 -# " - - if [[ $F_GET_STDOUT_R == *"RHN Classic or RHN Satellite"* ]] ; then - WAR_MSGS_STR="REDHAT IS APPARENTLY USING \"RHN Classic\" OR \"RHN Satellite\" TO ACCESS ITS RESOURCES! -THIS INSTALLER WILL NOT VALIDATE THESE RESOURCES!" - WAR_MSGS_STR+=$'\n\n'"FOR MORE INFORMATION TRY: \"yum repolist\"." - f_warning_msg "$WAR_MSGS_STR" 1 - return 0 - fi - else - f_split "$F_GET_STDOUT_R" "Subscription Name:" - fi - elif [ "$DISTRO_NAME_P" == "SLES" ] ; then - CHK_RES_CMD="zypper sl" - f_get_stderr_stdout "$CHK_RES_CMD" - f_split "$F_GET_STDOUT_R" "\n" - F_CHK_DISTRO_STATUS_R=$F_GET_STDOUT_R - fi - - F_SPLIT_R_0=("${F_SPLIT_R[@]}") - TOTAL_0=${#F_SPLIT_R_0[*]} - for (( i=0; i<=$(( $TOTAL_0 -1 )); i++ )) ; do - if [[ "$DISTRO_NAME_P" == "RedHat" ]] ; then - f_split "${F_SPLIT_R_0[$i]}" "\n" - F_SPLIT_R_1=("${F_SPLIT_R[@]}") - TOTAL_1=${#F_SPLIT_R_1[*]} - CHK_ACTV=0 - for (( o=0; o<=$(( $TOTAL_1 -1 )); o++ )) ; do - if [[ "${F_SPLIT_R_1[$o]}" == "Provides:"* ]] ; then - CHK_ACTV=1 - fi - if [ ${CHK_ACTV} -eq 1 ] ; then - for (( w=0; w<=$(( $TOTAL_2 -1 )); w++ )) ; do - if [[ "${F_SPLIT_R_1[$o]}" == *"${RESOURCES_ARR_P[$w]}" ]] ; then - RES_OK_ARR+=($w) - break - fi - done - if [ ${REDHAT_ACTV} -eq 0 ] && - [[ "${F_SPLIT_R_1[$o]}" == "Active:"* ]] && - [[ "${F_SPLIT_R_1[$o]}" == *"True" ]] ; then - REDHAT_ACTV=1 - fi - fi - done - elif [[ "$DISTRO_NAME_P" == "SLES" ]] ; then - REDHAT_ACTV=1 - f_split "${F_SPLIT_R_0[$i]}" "|" - F_SPLIT_R_1=("${F_SPLIT_R[@]}") - for (( w=0; w<=$(( $TOTAL_2 -1 )); w++ )) ; do - if [[ "${F_SPLIT_R_1[1]}" == *"${RESOURCES_ARR_P[$w]}"* ]] ; then - if [[ "${F_SPLIT_R_1[3]}" == *"Yes"* ]] ; then - if [[ "${F_SPLIT_R_1[5]}" == *"Yes"* ]] ; then - RES_OK_ARR+=($w) - break - fi - fi - fi - done - fi - done - - WARNINGS_MSGS=() - TOTAL_3=${#RES_OK_ARR[*]} - for (( z=0; z<=$(( $TOTAL_2 -1 )); z++ )) ; do - RES_OK_NOW=1 - for (( t=0; t<=$(( $TOTAL_3 -1 )); t++ )) ; do - if (( ${RES_OK_ARR[$t]} == $z )); then - RES_OK_NOW=0 - break - fi - done - if (( $RES_OK_NOW == 1 )); then - WARNINGS_MSGS+=("$DISTRO_NAME_P does not have access to this resource: \"${RESOURCES_ARR_P[$z]}\".") - fi - done - - TOTAL_4=${#WARNINGS_MSGS[*]} - WAR_MSGS_STR="" - USE_NEWLINE="" - if [ ! $TOTAL_4 -eq 0 ] || [ $REDHAT_ACTV -eq 0 ]; then - WAR_MSGS_STR="SOME PROBLEM APPEAR TO HAVE BEEN DETECTED ON" - if [[ "$DISTRO_NAME_P" == "RedHat" ]] ; then - WAR_MSGS_STR+=" REDHAT SUBSCRIPTION! " - elif [[ "$DISTRO_NAME_P" == "SLES" ]] ; then - WAR_MSGS_STR+=" SLES REGISTRATION! " - fi - WAR_MSGS_STR+="PLEASE CHECK IT!" - for (( y=0; y<=$(( $TOTAL_4 -1 )); y++ )) ; do - if (( $y == 0 )); then - WAR_MSGS_STR+=$'\n\n' - else - USE_NEWLINE=$'\n' - fi - WAR_MSGS_STR+="$USE_NEWLINE -> ${WARNINGS_MSGS[$y]}" - done - WAR_MSGS_STR+=$'\n\n'"FOR MORE INFORMATION TRY: \"$CHK_RES_CMD\"." - f_warning_msg "$WAR_MSGS_STR" 1 - fi -} - -# < -------------------------------------------------------------------------- - -# > -------------------------------------------------------------------------- -# GRAFICO! -# -------------------------------------- - -f_indent() { - : 'Definir uma tabulação para uma string informada. - - Exemplo de uso: echo "" | f_indent 4 - - Args: - LEVEL_P (int): 2, 4 ou 8 espaços. - ' - - LEVEL_P=$1 - if [ ${LEVEL_P} -eq 2 ] ; then - sed 's/^/ /'; - fi - if [ ${LEVEL_P} -eq 4 ] ; then - sed 's/^/ /'; - fi - if [ ${LEVEL_P} -eq 8 ] ; then - sed 's/^/ /'; - fi -} - -f_open_section() { - : 'Printar abertura de uma seção.' - - if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then - return 0 - fi - TITLE_P=$1 - echo "> ------------------------------------------------" - if [ -n "$TITLE_P" ] ; then - echo "$TITLE_P" - f_div_section - echo - fi -} - -f_close_section() { - : 'Printar fechamento de uma seção.' - - if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then - return 0 - fi - echo "< ------------------------------------------------" - echo -} - -f_div_section() { - : 'Printar divisão em uma seção.' - - if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then - return 0 - fi - echo "----------------------------------" -} - -f_sub_section() { - : 'Printar uma subseção. - - Args: - TITLE_P (str): Título da subseção. - TEXT_P (str): Texto da subseção. - ' - - if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then - return 0 - fi - TITLE_P=$1 - TEXT_P=$2 - echo "> $TITLE_P" | f_indent 2 - echo - echo "$TEXT_P" | f_indent 4 - echo -} - -# < -------------------------------------------------------------------------- - -# > -------------------------------------------------------------------------- -# APRESENTAÇÃO! -# -------------------------------------- - -f_begin() { - : 'Printar uma abertura/apresentação para o instalador do produto. - - Usar no início da instalação. - - Args: - TITLE_P (str): Título. - VERSION_P (str): Versão do produto. - ABOUT_P (str): Sobre o produto. - WARNINGS_P (str): Avisos antes de continuar. - COMPANY_P (str): Informações sobre a empresa. - ' - - clear - if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then - return 0 - fi - TITLE_P=$1 - VERSION_P=$2 - ABOUT_P=$3 - WARNINGS_P=$4 - COMPANY_P=$5 - f_open_section "$TITLE_P ($VERSION_P)" - f_sub_section "ABOUT:" "$ABOUT_P" - f_sub_section "WARNINGS:" "$WARNINGS_P" - f_div_section - echo "$COMPANY_P" - f_close_section - f_enter_to_cont - clear -} - -f_end() { - : 'Printar uma fechamento/encerramento para o instalador do produto. - - Usar no final da instalação. - - Args: - TITLE_P (str): Título. - USEFUL_INFO_P (str): Informações úteis (uso básico etc...). - ' - - if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then - return 0 - fi - TITLE_P=$1 - USEFUL_INFO_P=$2 - f_open_section "$TITLE_P" - f_sub_section "USEFUL INFORMATION:" "$USEFUL_INFO_P" - f_close_section -} - -f_terms_licen() { - : 'Printar os termos de licença/uso do produto. - - Pede que o usuário concorde com os termos. - - Args: - TERMS_LICEN_P (str): Termos de licença/uso do produto. - ' - - if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then - return 0 - fi - TERMS_LICEN_P=$1 - f_open_section "LICENSE/TERMS:" - echo "$TERMS_LICEN_P" | f_indent 2 - echo - f_div_section - TITLE_F="BY ANSWERING YES (y) YOU WILL AGREE WITH TERMS AND CONDITIONS "\ -"PRESENTED! PROCEED?" - f_yes_no "$TITLE_F" - TITLE_F="" - f_close_section - sleep 1 - if [ ${YES_NO_R} -eq 0 ] ; then - exit 0 - fi - clear -} - -f_instruct() { - : 'Printar instruções sobre o produto. - - Args: - INSTRUCT_P (str): Instruções sobre o produto. - ' - - if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then - return 0 - fi - INSTRUCT_P=$1 - f_open_section "INSTRUCTIONS:" - echo "$INSTRUCT_P" | f_indent 2 - echo - f_close_section - f_enter_to_cont - clear -} - -# < -------------------------------------------------------------------------- - -# > -------------------------------------------------------------------------- -# ESQUEMAS CONDICIONAIS! -# -------------------------------------- - -YES_NO_R=0 -f_yes_no() { - : 'Questiona ao usuário "yes" ou "no" sobre determinado algo. - - Args: - QUESTION_P (str): Questionamento a ser feito. - - Returns: - YES_NO_R (int): 1 - Yes; 0 - No. - ' - - if [ ${EZ_I_SKIP_ON_V} -eq 1 ] ; then - return 0 - fi - QUESTION_P=$1 - YES_NO_R=0 - read -r -p "$QUESTION_P (y/n) " RESP_V - if [[ $RESP_V =~ ^([sS]|[yY])$ ]] ; then - YES_NO_R=1 - elif [[ $RESP_V =~ ^([nN])$ ]] ; then - echo "NO!" - YES_NO_R=0 - else - f_yes_no "$QUESTION_P" - fi -} - -# < -------------------------------------------------------------------------- diff --git a/install.bash b/install.bash new file mode 100755 index 0000000..c28199b --- /dev/null +++ b/install.bash @@ -0,0 +1,1094 @@ +#!/bin/bash + +# > ----------------------------------------- +# Run that script with bash even if the user use sh/dash or any sh like +# interpreter. This way it correctly works with either: +# "sh ./my_script.bash" or "bash ./my_script.bash" or "./my_script.bash" + +if [ -z "$BASH_VERSION" ] +then + exec bash "$0" "$@" +fi + +# < ----------------------------------------- + +# NOTE: Evita problemas com caminhos relativos! By Questor +SCRIPTDIR_V="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +. $SCRIPTDIR_V/ez_i.bash + +# > -------------------------------------------------------------------------- +# INÍCIO! +# -------------------------------------- + +read -d '' TITLE_F <<"EOF" +LBC - LBConverter Installer +EOF + +# NOTE: Para versionamento usar "MAJOR.MINOR.REVISION.BUILDNUMBER"! +# Usar a mesma versão contida no setup.py! By Questor +# http://programmers.stackexchange.com/questions/24987/what-exactly-is-the-build-number-in-major-minor-buildnumber-revision + +read -d '' VERSION_F <<"EOF" +0.1.1.0 +EOF + +read -d '' ABOUT_F <<"EOF" +This script will install LBC - LBConverter the LightBase OCR (Optical Character +Recognition)/data extractor component that obtain data from submitted files! + +Have fun! =D +EOF + +read -d '' WARNINGS_F <<"EOF" +- This installer is compatible with RHEL, SUSE, Debian or distributions +based on these. + +- We RECOMMEND you... + Install all the components (answer yes to everything) and use the default + values. Except contrary guidance! + Check for previous installations! If there is previous + installations consider this variant in the process! + Although this is not mandatory, do the installation process in an + exclusive machine for this. + +- We NOTICE you... + This installer assumes that the target distribution has a "standard + setup". This may include components such as firewall, SELinux + and others. + +- We WARNING you... + THIS INSTALLER AND RESULTING PRODUCTS COMES WITH ABSOLUTELY NO WARRANTY! + USE AT YOUR OWN RISK! WE ARE NOT RESPONSIBLE FOR ANY DAMAGE TO YOURSELF, + HARDWARE, OR CO-WORKERS. EXCEPT IN CASES WHERE THERE ARE SIGNED CONTRACT + THAT REGULATES THIS! +EOF + +read -d '' COMPANY_F <<"EOF" +BR Light LTDA - LightBase Consulting in Public Software/LightBase Consultoria em Software Público +Free Software + Our Ideas = Best Solution!/Software Livre + Nossas Idéias = Melhor Solução! ++55-61-3347-1949 - http://www.LightBase.com.br - Brasil-DF +EOF + +f_begin "$TITLE_F" "$VERSION_F" "$ABOUT_F" "$WARNINGS_F" "$COMPANY_F" +ABOUT_F="" +WARNINGS_F="" + +# < -------------------------------------------------------------------------- + +# > -------------------------------------------------------------------------- +# TERMOS E LICENÇA! +# -------------------------------------- + +read -d '' TERMS_LICEN_F <<"EOF" +BY USING THIS INSTALLER YOU ARE AGREEING TO THE TERMS OF USE OF ALL +INVOLVED SOFTWARE! +EOF + +f_terms_licen "$TERMS_LICEN_F" +TERMS_LICEN_F="" + +# < -------------------------------------------------------------------------- + +# > ----------------------------------------- +# Checar se o usuário é root! + +f_is_root + +# < ----------------------------------------- + +# > -------------------------------------------------------------------------- +# INTRUÇÕES! +# -------------------------------------- + +read -d '' INSTRUCT_F <<"EOF" +- TO CANCEL installation at any time use Ctrl+c! +EOF + +f_instruct "$INSTRUCT_F" +INSTRUCT_F="" + +# < -------------------------------------------------------------------------- + +DISTRO_TYPE="" +DISTRO_NAME="" +# > ----------------------------------------- +# Checar se a distro é compatível! + +f_open_section +f_about_distro +f_div_section +echo "DISTRO INFORMATION:" +f_div_section +echo "NAME: .... ${F_ABOUT_DISTRO_R[0]}" +echo "VERSION: . ${F_ABOUT_DISTRO_R[1]}" +echo "BASED: ... ${F_ABOUT_DISTRO_R[2]}" +echo "ARCH: .... ${F_ABOUT_DISTRO_R[3]}" +f_div_section + +if [[ "${F_ABOUT_DISTRO_R[2]}" == "Debian" ]] || [[ "${F_ABOUT_DISTRO_R[2]}" == "RedHat" ]] || + [[ "${F_ABOUT_DISTRO_R[2]}" == "Suse" ]] ; then + if [[ "${F_ABOUT_DISTRO_R[2]}" == "Debian" ]] ; then + DISTRO_TYPE="DEB" + if [[ "${F_ABOUT_DISTRO_R[0]}" == "Ubuntu" ]] ; then + DISTRO_NAME="Ubuntu" + if [[ "${F_ABOUT_DISTRO_R[1]}" != "14.04" ]] ; then + f_div_section + f_yes_no "Linux version may be incompatible with this installer (expected: 14.04/obtained: ${F_ABOUT_DISTRO_R[1]})! Continue?" + if [ ${YES_NO_R} -eq 0 ] ; then + exit 0 + fi + fi + elif [[ "${F_ABOUT_DISTRO_R[0]}" == "Debian GNU/Linux" ]] ; then + DISTRO_NAME="Debian" + if [[ "${F_ABOUT_DISTRO_R[1]}" != "8" ]] ; then + f_div_section + f_yes_no "Linux version may be incompatible with this installer (expected: 8/obtained: ${F_ABOUT_DISTRO_R[1]})! Continue?" + if [ ${YES_NO_R} -eq 0 ] ; then + exit 0 + fi + fi + else + f_div_section + f_yes_no "Linux distro may be incompatible with this installer (expected: Ubuntu or Debian/obtained: ${F_ABOUT_DISTRO_R[0]})! Continue?" + if [ ${YES_NO_R} -eq 0 ] ; then + exit 0 + fi + fi + elif [[ "${F_ABOUT_DISTRO_R[2]}" == "RedHat" ]] ; then + DISTRO_TYPE="RH" + if [[ "${F_ABOUT_DISTRO_R[0]}" == "Red Hat Enterprise Linux Server" ]] ; then + DISTRO_NAME="RedHat" + if [[ "${F_ABOUT_DISTRO_R[1]}" != "7"* ]] ; then + f_div_section + f_yes_no "Linux version may be incompatible with this installer (expected: 7.X/obtained: ${F_ABOUT_DISTRO_R[1]})! Continue?" + if [ ${YES_NO_R} -eq 0 ] ; then + exit 0 + fi + fi + elif [[ "${F_ABOUT_DISTRO_R[0]}" == "CentOS Linux" ]] ; then + DISTRO_NAME="CentOS" + if [[ "${F_ABOUT_DISTRO_R[1]}" != "7"* ]] ; then + f_div_section + f_yes_no "Linux version may be incompatible with this installer (expected: 7.X/obtained: ${F_ABOUT_DISTRO_R[1]})! Continue?" + if [ ${YES_NO_R} -eq 0 ] ; then + exit 0 + fi + fi + else + f_div_section + 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?" + if [ ${YES_NO_R} -eq 0 ] ; then + exit 0 + fi + fi + elif [[ "${F_ABOUT_DISTRO_R[2]}" == "Suse" ]] ; then + DISTRO_TYPE="SUSE" + if [[ "${F_ABOUT_DISTRO_R[0]}" == "openSUSE" ]] ; then + DISTRO_NAME="openSUSE" + if [[ "${F_ABOUT_DISTRO_R[1]}" != "13."* ]] ; then + f_div_section + f_yes_no "Linux version may be incompatible with this installer (expected: 13.X/obtained: ${F_ABOUT_DISTRO_R[1]})! Continue?" + if [ ${YES_NO_R} -eq 0 ] ; then + exit 0 + fi + fi + elif [[ "${F_ABOUT_DISTRO_R[0]}" == "SLES" ]] ; then + DISTRO_NAME="SLES" + if [[ "${F_ABOUT_DISTRO_R[1]}" != "12."* ]] ; then + f_div_section + f_yes_no "Linux version may be incompatible with this installer (expected: 12.X/obtained: ${F_ABOUT_DISTRO_R[1]})! Continue?" + if [ ${YES_NO_R} -eq 0 ] ; then + exit 0 + fi + fi + else + f_div_section + 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?" + if [ ${YES_NO_R} -eq 0 ] ; then + exit 0 + fi + fi + fi + + if [[ "${F_ABOUT_DISTRO_R[3]}" != "x86_64" ]] ; then + f_enter_to_cont "Linux architecture completely incompatible with this installer (expected: x86_64/obtained: ${F_ABOUT_DISTRO_R[3]})!" + exit 0 + fi +else + 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]})!" + exit 0 +fi +f_close_section + +# < ----------------------------------------- + +# > ----------------------------------------- +# Dá ao usuário a possibilidade de usar o instalador no modo rápido. Bom para +# conhecer/testar o sistema de forma simples sem preucupar-se com configurações! + +# NOTE: É possível forçar o processo de instalação no modo rápido setando +# "FAST_INST" com 1! By Questor +FAST_INST=0 +if [ ${FAST_INST} -eq 0 ] ; then + f_open_section + f_div_section + f_yes_no "Use fast install (use default values for most of the options)? + +NOTE: RECOMMENDED FOR THOSE who want to KNOW and TEST the LB system components +quickly and easily. DO NOT USE FOR PRODUCTION ENVIRONMENT! If YES the +installation of all LB system components MUST AND WILL BE LOCAL! + +Use it?" + if [ ${YES_NO_R} -eq 1 ] ; then + + # NOTE: Essa variável serve apenas para "preservar" o valor + # setado pelo usuário sendo somente "leitura". A variável a + # ser usada nas regras deve ser "EZ_I_SKIP_ON_V" (ez_i.bash)! Essa + # estratégia serve para mudarmos o comportamento do "ez_i.bash" + # de acordo com as circunstâncias! By Questor + FAST_INST=1 + + # NOTE: Essa variável é para consumo do "ez_i.bash", para que ele + # não execute algumas funções e torne o processo de + # instalação mais simples! By Questor + EZ_I_SKIP_ON_V=1 + fi + f_close_section + sleep 1 +fi + +# < ----------------------------------------- + +# > ----------------------------------------- +# Desabilita o SElinux! + +if [[ "$DISTRO_TYPE" == "RH" ]] ; then + EZ_I_SKIP_ON_V=0 + f_open_section + f_div_section + f_yes_no "Disable SElinux (use "y" if you never did it)?" + if [ ${YES_NO_R} -eq 1 ] ; then + setenforce 0 + + # NOTE: As condições abaixo visam evitar que o arquivo seja + # desnecessariamente e erroneamente modificado! By Questor + EZ_I_SKIP_ON_V=$FAST_INST + f_fl_cont_str "# SELINUX=enforcing" "/etc/sysconfig/selinux" "The file \"/etc/sysconfig/selinux\" probably has already been changed! Check it!" + EZ_I_SKIP_ON_V=0 + if [ ${FL_CONT_STR_R} -eq 0 ] ; then + f_fl_cont_str "SELINUX=disabled" "/etc/sysconfig/selinux" + if [ ${FL_CONT_STR_R} -eq 0 ] ; then + f_ez_sed "SELINUX=enforcing" "# SELINUX=enforcing\nSELINUX=disabled" "/etc/sysconfig/selinux" + fi + fi + fi + f_close_section +fi + +# < ----------------------------------------- + +# > ----------------------------------------- +# Atualizar a distro (repositório)! + +EZ_I_SKIP_ON_V=$FAST_INST +f_open_section +if [[ "$DISTRO_TYPE" == "RH" ]] ; then + if [[ "$DISTRO_NAME" == "RedHat" ]] ; then + RESOURCES_ARR_P=("Red Hat Enterprise Linux Server") + f_chk_distro_status "$DISTRO_NAME" RESOURCES_ARR_P[@] + fi + f_div_section + f_yes_no "Update your distro? (\"y\" highly recommended)" + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] || [ ${YES_NO_R} -eq 1 ] ; then + yum -y update + fi + f_pack_is_inst "git" "yum" "\"git\" already installed!" + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then + yum -y install git + fi +elif [[ "$DISTRO_TYPE" == "DEB" ]] ; then + f_div_section + f_yes_no "Update your distro? (\"y\" highly recommended)" + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] || [ ${YES_NO_R} -eq 1 ] ; then + apt-get -y update + fi + f_pack_is_inst "git" "apt-get" "\"git\" already installed!" + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then + apt-get -y install git + fi +elif [[ "$DISTRO_TYPE" == "SUSE" ]] ; then + if [[ "$DISTRO_NAME" == "SLES" ]] ; then + RESOURCES_ARR_P=("SUSE_Linux_Enterprise_Server_12_SP1_x86_64" +"SUSE_Linux_Enterprise_Software_Development_Kit_12_SP1_x86_64" +"Web_and_Scripting_Module_12_x86_64") + f_chk_distro_status "SLES" RESOURCES_ARR_P[@] + fi + f_div_section + f_yes_no "Update your distro? (\"y\" highly recommended)" + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] || [ ${YES_NO_R} -eq 1 ] ; then + zypper --non-interactive update + fi + f_pack_is_inst "git-core" "zypper" "\"git-core\" already installed!" + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then + zypper --non-interactive install git-core + fi +fi +f_close_section + +# < ----------------------------------------- + +# > ----------------------------------------- +# Instalar pacotes que são comuns a determinados componentes! + +F_COM_PKS_INSTALLED=0 +f_common_packs() { + : 'Instalar pacotes que são comuns a determinados componentes.' + + if [ ${F_COM_PKS_INSTALLED} -eq 0 ] ; then + if [[ "$DISTRO_TYPE" == "RH" ]] ; then + f_pack_is_inst "gcc-c++" "yum" "\"gcc-c++\" already installed!" + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then + yum -y install gcc-c++ + fi + f_pack_is_inst "autoconf" "yum" "\"autoconf\" already installed!" + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then + yum -y install autoconf + fi + f_pack_is_inst "automake" "yum" "\"automake\" already installed!" + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then + yum -y install automake + fi + f_pack_is_inst "libtool" "yum" "\"libtool\" already installed!" + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then + yum -y install libtool + fi + f_pack_is_inst "zlib-devel" "yum" "\"zlib-devel\" already installed!" + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then + yum -y install zlib-devel + fi + elif [[ "$DISTRO_TYPE" == "DEB" ]] ; then + f_pack_is_inst "g++" "apt-get" "\"g++\" already installed!" + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then + apt-get -y install g++ + fi + f_pack_is_inst "autoconf" "apt-get" "\"autoconf\" already installed!" + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then + apt-get -y install autoconf + fi + f_pack_is_inst "make" "apt-get" "\"make\" already installed!" + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then + apt-get -y install make + fi + f_pack_is_inst "libtool" "apt-get" "\"libtool\" already installed!" + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then + apt-get -y install libtool + fi + f_pack_is_inst "zlib1g-dev" "apt-get" "\"zlib1g-dev\" already installed!" + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then + apt-get -y install zlib1g-dev + fi + elif [[ "$DISTRO_TYPE" == "SUSE" ]] ; then + f_pack_is_inst "gcc-c++" "zypper" "\"gcc-c++\" already installed!" + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then + zypper --non-interactive install gcc-c++ + fi + if [[ "$DISTRO_NAME" != "SLES" ]] ; then + f_pack_is_inst "autoconf" "zypper" "\"autoconf\" already installed!" + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then + zypper --non-interactive install autoconf + fi + f_pack_is_inst "automake" "zypper" "\"automake\" already installed!" + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then + zypper --non-interactive install automake + fi + f_pack_is_inst "make" "zypper" "\"make\" already installed!" + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then + zypper --non-interactive install make + fi + f_pack_is_inst "libtool" "zypper" "\"libtool\" already installed!" + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then + zypper --non-interactive install libtool + fi + fi + f_pack_is_inst "zlib-devel" "zypper" "\"zlib-devel\" already installed!" + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then + zypper --non-interactive install zlib-devel + fi + fi + F_COM_PKS_INSTALLED=1 + fi +} + +# < ----------------------------------------- + +# > ----------------------------------------- +# Passa comando para serviços conforme a distro em execução! + +f_svc_helper() { + : 'Passa comando para serviços conforme a distro em execução. + + Args: + SVC_HLP_NM_P (str): Nome do serviço. + SVC_HLP_CMD_P (str): Comando para o serviço executar. + SVC_HLP_IN_SILENCE (Optional[int]): 1 - Sem saída para o terminal; + 0 - Com saída para o terminal. Padrão 0. + ' + + SVC_HLP_NM_P=$1 + SVC_HLP_CMD_P=$2 + + SVC_HLP_IN_SILENCE=$3 + if [ -z "$SVC_HLP_IN_SILENCE" ] ; then + SVC_HLP_IN_SILENCE=0 + fi + if [ ${SVC_HLP_IN_SILENCE} -eq 1 ] ; then + SVC_HLP_SILENCE_CMD=" &>/dev/null" + fi + + if [[ "$DISTRO_TYPE" == "RH" ]] ; then + eval "systemctl $SVC_HLP_CMD_P $SVC_HLP_NM_P.service$SVC_HLP_SILENCE_CMD" + elif [[ "$DISTRO_TYPE" == "SUSE" ]] ; then + eval "service $SVC_HLP_NM_P $SVC_HLP_CMD_P$SVC_HLP_SILENCE_CMD" + elif [[ "$DISTRO_TYPE" == "DEB" ]] ; then + eval "service $SVC_HLP_NM_P $SVC_HLP_CMD_P$SVC_HLP_SILENCE_CMD" + fi +} + +# < ----------------------------------------- + +# > ----------------------------------------- +# Abrir o firewall para uma porta definida para um dado serviço + +f_fire_hlp() { + : 'Abrir o firewall para uma porta definida para um dado serviço. + + Args: + FIRE_SVC_NM_P (str): Nome do serviço. + FIRE_PORT_P (int): Porta a ser aberta. + ' + + FIRE_SVC_NM_P=$1 + FIRE_PORT_P=$2 + if [[ "$DISTRO_TYPE" == "RH" ]] || [[ "$DISTRO_TYPE" == "SUSE" ]] ; then + EZ_I_SKIP_ON_V=$FAST_INST + if [[ "$DISTRO_TYPE" == "RH" ]] ; then + f_div_section + f_yes_no "Open firewall for $FIRE_SVC_NM_P (TCP $FIRE_PORT_P)?" + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] || [ ${YES_NO_R} -eq 1 ] ; then + f_chk_iptables $FIRE_PORT_P "Port $FIRE_PORT_P is already open!" 0 "ACCEPT" "tcp" "NEW" + if [ ${F_CHK_IPTABLES_R} -eq 1 ] ; then + firewall-cmd --zone=public --add-port=$FIRE_PORT_P/tcp --permanent + firewall-cmd --reload + fi + fi + elif [[ "$DISTRO_TYPE" == "SUSE" ]] ; then + f_div_section + f_yes_no "Open firewall for $FIRE_SVC_NM_P (TCP $FIRE_PORT_P)?" + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] || [ ${YES_NO_R} -eq 1 ] ; then + f_chk_iptables $FIRE_PORT_P "Port $FIRE_PORT_P is already open!" 0 "ACCEPT" "tcp" + if [ ${F_CHK_IPTABLES_R} -eq 1 ] ; then + SuSEfirewall2 open EXT TCP $FIRE_PORT_P + SuSEfirewall2 stop + SuSEfirewall2 start + fi + fi + fi + fi +} + +# < ----------------------------------------- + +# > -------------------------------------------------------------------------- +# INSTALAÇÃO DO LBC - LBConverter! +# -------------------------------------- + +BASE_INST_DIR_V="/usr/local/lb" +# > ----------------------------------------- +# Criar o diretório base da instalação! + +f_create_base_dir() { + EZ_I_SKIP_ON_V=$FAST_INST + QUESTION_F="Insert where the base installation directory (name \"lb\") will be created (don't use \"/\" at the end). +Use empty for \"/usr/local\"!" + f_div_section + f_get_usr_input "$QUESTION_F" 1 + QUESTION_F="" + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] || [ -z "$GET_USR_INPUT_R" ] ; then + f_chk_by_path_hlp "$BASE_INST_DIR_V" "d" "\"$BASE_INST_DIR_V\" directory already created!" + if [ ${F_CHK_BY_PATH_HLP_R} -eq 0 ] ; then + mkdir -p "$BASE_INST_DIR_V" + fi + else + BASE_INST_DIR_V="$GET_USR_INPUT_R/lb" + f_chk_by_path_hlp "$BASE_INST_DIR_V" "d" "\"$BASE_INST_DIR_V\" directory already created!" + if [ ${F_CHK_BY_PATH_HLP_R} -eq 0 ] ; then + mkdir -p "$BASE_INST_DIR_V" + fi + fi +} + +# < ----------------------------------------- + +# > ----------------------------------------- +# Instalar o virtualenv-1.11.6 no python2.X! + +PYTHON_2_X="" +VE_2_X="" +f_inst_ve_py2X() { + : 'Instala a virtualenv no Python2.X! + + Args: + DONT_PROMPT_TO_INST (Optional[int]): Não questiona o usuário se deseja + instalar. Padrão 0. + ' + + DONT_PROMPT_TO_INST=$1 + if [ -z "$DONT_PROMPT_TO_INST" ] ; then + DONT_PROMPT_TO_INST=0 + fi + if [[ "$DISTRO_TYPE" == "RH" ]] ; then + PYTHON_2_X="2.7" + VE_2_X="ve27" + elif [[ "$DISTRO_TYPE" == "DEB" ]] || [[ "$DISTRO_TYPE" == "SUSE" ]] ; then + PYTHON_2_X="2.7" + VE_2_X="ve27" + fi + if [ ${DONT_PROMPT_TO_INST} -eq 1 ] || [ ${FAST_INST} -eq 1 ] ; then + EZ_I_SKIP_ON_V=1 + else + EZ_I_SKIP_ON_V=$FAST_INST + f_div_section + fi + f_yes_no "Install virtualenv-1.11.6 on python$PYTHON_2_X?" + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] || [ ${YES_NO_R} -eq 1 ] ; then + EZ_I_SKIP_ON_V=$FAST_INST + if [[ "$DISTRO_TYPE" == "RH" ]] || [[ "$DISTRO_TYPE" == "SUSE" ]] ; then + f_chk_by_path_hlp "/usr/bin/virtualenv-$PYTHON_2_X" "f" "virtualenv-1.11.6 already installed!" + elif [[ "$DISTRO_TYPE" == "DEB" ]] ; then + f_chk_by_path_hlp "/usr/local/bin/virtualenv-$PYTHON_2_X" "f" "virtualenv-1.11.6 already installed!" + fi + if [ ${F_CHK_BY_PATH_HLP_R} -eq 0 ] ; then + if [[ "$DISTRO_TYPE" == "RH" ]] ; then + f_pack_is_inst "python-setuptools" "yum" "\"python-setuptools\" already installed!" + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then + yum -y install python-setuptools + fi + elif [[ "$DISTRO_TYPE" == "DEB" ]] ; then + f_pack_is_inst "python-setuptools" "apt-get" "\"python-setuptools\" already installed!" + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then + apt-get -y install python-setuptools + fi + elif [[ "$DISTRO_TYPE" == "SUSE" ]] ; then + # >>>>>>>>>>>>> * Para "zypper --non-interactive install python-setuptools", se o problema abaixo aparecer... + + # Problem: python-setuptools-5.4.1-2.1.4.noarch requires python, but this requirement cannot be provided + # uninstallable providers: python-2.7.8-1.1.x86_64[openSUSE-13.2-0] + # python3-3.4.1-4.2.1.x86_64[openSUSE-13.2-0] + # python-2.7.8-1.1.i586[repo-oss] + # python3-3.4.1-4.2.1.i586[repo-oss] + # python-2.7.8-1.1.x86_64[repo-oss] + # python3-3.4.1-4.2.1.x86_64[repo-oss] + # Solution 1: deinstallation of patterns-openSUSE-minimal_base-conflicts-20141007-2.1.x86_64 + # Solution 2: do not install python-setuptools-5.4.1-2.1.4.noarch + # Solution 3: do not install python-setuptools-5.4.1-2.1.4.noarch + # Solution 4: break python-setuptools-5.4.1-2.1.4.noarch by ignoring some of its dependencies + + # Choose from above solutions by number or cancel [1/2/3/4/c] (c): + + # <<<<<<<<<<<<< + + # >>>>>>>>>>>>> * Usar 1 e y... + + # Choose from above solutions by number or cancel [1/2/3/4/c] (c): 1 + # Resolving dependencies... + # Resolving package dependencies... + + # The following 4 NEW packages are going to be installed: + # libsqlite3-0 python python-setuptools python-xml + + # The following package is going to be REMOVED: + # patterns-openSUSE-minimal_base-conflicts + + # The following pattern is going to be REMOVED: + # minimal_base-conflicts + + # 4 new packages to install, 1 to remove. + # Overall download size: 1.1 MiB. Already cached: 0 B After the operation, additional 4.2 MiB will be used. + # Continue? [y/n/? shows all options] (y): + + # <<<<<<<<<<<<< + + # f_pack_is_inst "python-setuptools" "zypper" "\"python-setuptools\" already installed!" + # if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then + # zypper --non-interactive install python-setuptools + # zypper --non-interactive install python-devel + # fi + f_pack_is_inst "python-setuptools" "zypper" "\"python-setuptools\" already installed!" + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then + f_get_stderr_stdout "zypper --non-interactive install python-setuptools" + if [[ $F_GET_STDERR_R$F_GET_STDOUT_R == *"Problem: python-setuptools-"* ]] && + [[ $F_GET_STDERR_R$F_GET_STDOUT_R == *".noarch requires python, but this requirement cannot be provided"* ]] ; then + EZ_I_SKIP_ON_V=0 + f_enter_to_cont "The package management \"zypper\" WILL ASK YOU FOR ADDITIONAL OPTIONS! +We highly recommended you answer \"1\" and \"y\", respectively!" + EZ_I_SKIP_ON_V=$FAST_INST + zypper install python-setuptools + zypper --non-interactive install python-devel + else + echo "$F_GET_STDERR_R$F_GET_STDOUT_R" + fi + fi + fi + f_common_packs + cd "$SCRIPTDIR_V" + cd ./other-srcs-n-apps + tar -zxvf virtualenv-1.11.6.tar.gz + cd virtualenv-1.11.6 + python$PYTHON_2_X setup.py install + cd .. + rm -rf virtualenv-1.11.6 + fi + fi + EZ_I_SKIP_ON_V=$FAST_INST +} + +# < ----------------------------------------- + +# > ----------------------------------------- +# Criar o ambiente virtual (python2.X)! + +f_create_ve2X() { + : 'Cria o ambiente virtual (python2.X)! + + Args: + DONT_PROMPT_TO_INST (Optional[int]): Não questiona o usuário se deseja + criar. Padrão 0. + ' + + DONT_PROMPT_TO_INST=$1 + if [ -z "$DONT_PROMPT_TO_INST" ] ; then + DONT_PROMPT_TO_INST=0 + fi + if [ ${DONT_PROMPT_TO_INST} -eq 1 ] || [ ${FAST_INST} -eq 1 ] ; then + EZ_I_SKIP_ON_V=1 + else + EZ_I_SKIP_ON_V=$FAST_INST + fi + f_enter_to_cont "Create the virtual environment (python$PYTHON_2_X)!" + EZ_I_SKIP_ON_V=$FAST_INST + 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\"!" + if [ ${F_CHK_BY_PATH_HLP_R} -eq 0 ] ; then + f_common_packs + cd "$BASE_INST_DIR_V" + virtualenv-$PYTHON_2_X $VE_2_X + mkdir "$BASE_INST_DIR_V/$VE_2_X/src" + fi + EZ_I_SKIP_ON_V=$FAST_INST +} + +# < ----------------------------------------- + +# > ----------------------------------------- +# Instalar o catdoc, unzip e ImageMagick para o LBConverter! + +f_inst_catdoc_unzip_imagemagick() { + : 'Instala os componentes catdoc, unzip e imagemagick. + + Args: + DONT_PROMPT_TO_INST (Optional[int]): Não questiona o usuário se deseja + instalar. Padrão 0. + ' + + DONT_PROMPT_TO_INST=$1 + if [ -z "$DONT_PROMPT_TO_INST" ] ; then + DONT_PROMPT_TO_INST=0 + fi + if [ ${DONT_PROMPT_TO_INST} -eq 1 ] || [ ${FAST_INST} -eq 1 ] ; then + EZ_I_SKIP_ON_V=1 + else + EZ_I_SKIP_ON_V=$FAST_INST + f_div_section + fi + + INST_CATDOC_UNZIP_IMAGMAG="" + if [[ "$DISTRO_TYPE" == "RH" ]] ; then + INST_CATDOC_UNZIP_IMAGMAG="Install catdoc, unzip and ImageMagick?" + elif [[ "$DISTRO_TYPE" == "DEB" ]] ; then + INST_CATDOC_UNZIP_IMAGMAG="Install catdoc, unzip and ImageMagick?" + elif [[ "$DISTRO_TYPE" == "SUSE" ]] ; then + INST_CATDOC_UNZIP_IMAGMAG="Install catdoc and ImageMagick?" + fi + + f_yes_no "$INST_CATDOC_UNZIP_IMAGMAG" + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] || [ ${YES_NO_R} -eq 1 ] ; then + EZ_I_SKIP_ON_V=$FAST_INST + UP_CATDOC=1 + f_chk_by_path_hlp "$BASE_INST_DIR_V/$VE_2_X/lib/catdoc-0.94.2" "d" "catdoc-0.94.2 already installed in \"$BASE_INST_DIR_V/$VE_2_X/lib/catdoc-0.94.2\"!" + if [ ${F_CHK_BY_PATH_HLP_R} -eq 1 ] ; then + if [ ${EZ_I_SKIP_ON_V} -eq 0 ] ; then + f_div_section + f_yes_no "Update/reinstall catdoc-0.94.2? (\"y\" recommended)" + UP_CATDOC=$YES_NO_R + if [ ${UP_CATDOC} -eq 1 ] ; then + rm -rf "$BASE_INST_DIR_V/$VE_2_X/lib/catdoc-0.94.2" + fi + fi + fi + if [ ${UP_CATDOC} -eq 1 ] ; then + if [[ "$DISTRO_TYPE" == "RH" ]] ; then + f_common_packs + f_pack_is_inst "unzip" "yum" "\"unzip\" already installed!" + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then + yum -y install unzip + fi + f_pack_is_inst "ImageMagick" "yum" "\"ImageMagick\" already installed!" + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then + yum -y install ImageMagick + fi + elif [[ "$DISTRO_TYPE" == "DEB" ]] ; then + f_common_packs + f_pack_is_inst "unzip" "apt-get" "\"unzip\" already installed!" + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then + apt-get -y install unzip + fi + f_pack_is_inst "imagemagick" "apt-get" "\"imagemagick\" already installed!" + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then + apt-get -y install imagemagick + fi + elif [[ "$DISTRO_TYPE" == "SUSE" ]] ; then + f_common_packs + f_pack_is_inst "ImageMagick" "zypper" "\"ImageMagick\" already installed!" + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then + zypper --non-interactive install ImageMagick + fi + fi + cd "$SCRIPTDIR_V" + cd ./other-srcs-n-apps + tar -zxvf catdoc-0.94.2.tar.gz + mv ./catdoc-0.94.2 $BASE_INST_DIR_V/$VE_2_X/lib + cd $BASE_INST_DIR_V/$VE_2_X/lib/catdoc-0.94.2 + ./configure + make && make install + fi + fi + EZ_I_SKIP_ON_V=$FAST_INST +} + +# < ----------------------------------------- + +# > ----------------------------------------- +# Instalar o tesseract-ocr-3.02.02! + +f_inst_tesseract() { + : 'Instala o tesseract. + + Args: + DONT_PROMPT_TO_INST (Optional[int]): Não questiona o usuário se deseja + instalar. Padrão 0. + ' + + DONT_PROMPT_TO_INST=$1 + if [ -z "$DONT_PROMPT_TO_INST" ] ; then + DONT_PROMPT_TO_INST=0 + fi + if [ ${DONT_PROMPT_TO_INST} -eq 1 ] || [ ${FAST_INST} -eq 1 ] ; then + EZ_I_SKIP_ON_V=1 + else + EZ_I_SKIP_ON_V=$FAST_INST + f_div_section + fi + f_yes_no "Install tesseract-ocr-3.02.02?" + if [ ${EZ_I_SKIP_ON_V} -eq 1 ] || [ ${YES_NO_R} -eq 1 ] ; then + EZ_I_SKIP_ON_V=$FAST_INST + UP_TESSERACT_OCR=1 + f_chk_by_path_hlp "/usr/local/lib/tesseract-ocr" "d" "tesseract-ocr-3.02.02 already installed in \"/usr/local/lib/tesseract-ocr\"!" + if [ ${F_CHK_BY_PATH_HLP_R} -eq 1 ] ; then + if [ ${EZ_I_SKIP_ON_V} -eq 0 ] ; then + f_div_section + f_yes_no "Update/reinstall tesseract-ocr-3.02.02? (\"y\" recommended)" + UP_TESSERACT_OCR=$YES_NO_R + fi + fi + if [ ${UP_TESSERACT_OCR} -eq 1 ] ; then + if [[ "$DISTRO_TYPE" == "RH" ]] ; then + f_common_packs + f_pack_is_inst "libpng12-devel" "yum" "\"libpng12-devel\" already installed!" + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then + yum -y install libpng-devel + fi + f_pack_is_inst "libjpeg-turbo-devel" "yum" "\"libjpeg-turbo-devel\" already installed!" + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then + yum -y install libjpeg-turbo-devel + fi + f_pack_is_inst "libtiff-devel" "yum" "\"libtiff-devel\" already installed!" + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then + yum -y install libtiff-devel + fi + f_pack_is_inst "openjpeg-libs" "yum" "\"openjpeg-libs\" already installed!" + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then + yum -y install openjpeg-libs + fi + f_pack_is_inst "giflib" "yum" "\"giflib\" already installed!" + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then + yum -y install giflib + fi + if [[ "$DISTRO_NAME" == "RedHat" ]] ; then + f_pack_is_inst "libwebp" "yum" "\"libwebp\" already installed!" + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then + yum -y install libwebp + fi + else + f_pack_is_inst "libwebp-devel" "yum" "\"libwebp-devel\" already installed!" + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then + yum -y install libwebp-devel + fi + fi + elif [[ "$DISTRO_TYPE" == "DEB" ]] ; then + f_common_packs + f_pack_is_inst "libpng-dev" "apt-get" "\"libpng-dev\" already installed!" + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then + apt-get -y install libpng-dev + fi + f_pack_is_inst "libjpeg-dev" "apt-get" "\"libjpeg-dev\" already installed!" + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then + apt-get -y install libjpeg-dev + fi + f_pack_is_inst "libtiff-dev" "apt-get" "\"libtiff-dev\" already installed!" + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then + apt-get -y install libtiff-dev + fi + f_pack_is_inst "libopenjpeg2" "apt-get" "\"libopenjpeg2\" already installed!" + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then + apt-get -y install libopenjpeg2 + fi + f_pack_is_inst "libgif-dev" "apt-get" "\"libgif-dev\" already installed!" + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then + apt-get -y install libgif-dev + fi + f_pack_is_inst "libwebp-dev" "apt-get" "\"libwebp-dev\" already installed!" + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then + apt-get -y install libwebp-dev + fi + elif [[ "$DISTRO_TYPE" == "SUSE" ]] ; then + f_common_packs + f_pack_is_inst "libpng-devel" "zypper" "\"libpng-devel\" already installed!" + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then + zypper --non-interactive install libpng-devel + fi + f_pack_is_inst "libjpeg-devel" "zypper" "\"libjpeg-devel\" already installed!" + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then + zypper --non-interactive install libjpeg-devel + fi + f_pack_is_inst "libtiff-devel" "zypper" "\"libtiff-devel\" already installed!" + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then + zypper --non-interactive install libtiff-devel + fi + if [[ "$DISTRO_NAME" != "SLES" ]] ; then + f_pack_is_inst "libopenjp2-7" "zypper" "\"libopenjp2-7\" already installed!" + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then + zypper --non-interactive install libopenjp2-7 + fi + fi + f_pack_is_inst "libgif6" "zypper" "\"libgif6\" already installed!" + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then + zypper --non-interactive install libgif6 + fi + f_pack_is_inst "libwebp-devel" "zypper" "\"libwebp-devel\" already installed!" + if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then + zypper --non-interactive install libwebp-devel + fi + fi + + cd "$SCRIPTDIR_V" + cd ./other-srcs-n-apps + + tar -zxvf leptonica-1.71.tar.gz + mv ./leptonica-1.71 /usr/local/lib + cd /usr/local/lib/leptonica-1.71 + ./autobuild + ./configure + make -j 4 && make install + + cd "$SCRIPTDIR_V" + cd ./other-srcs-n-apps + + tar -zxvf tesseract-ocr-3.02.02.tar.gz + mv ./tesseract-ocr /usr/local/lib + cd /usr/local/lib/tesseract-ocr + ./autogen.sh + ./configure + make -j 4 && make install + ldconfig + + cd "$SCRIPTDIR_V" + cd ./other-srcs-n-apps + + tar -zxvf tesseract-ocr-3.01.eng.tar.gz + tar -zxvf tesseract-ocr-3.02.por.tar.gz + mv ./tesseract-ocr /usr/local/lib/tesseract-ocr + cp /usr/local/lib/tesseract-ocr/tesseract-ocr/tessdata/eng.traineddata /usr/local/share/tessdata + export TESSDATA_PREFIX=/usr/local/lib/tesseract-ocr/tesseract-ocr + + fi + fi + EZ_I_SKIP_ON_V=$FAST_INST +} + +# < ----------------------------------------- + +# > ----------------------------------------- +# Instalar as dependências python2.X do LBC - LBConverter! + +f_inst_lbc_py_packs() { + : 'Instala as dependências do LBI - LBIndex! + + Args: + DONT_PROMPT_TO_INST (Optional[int]): Não questiona o usuário se deseja + instalar. Padrão 0. + ' + + DONT_PROMPT_TO_INST=$1 + if [ -z "$DONT_PROMPT_TO_INST" ] ; then + DONT_PROMPT_TO_INST=0 + fi + if [ ${DONT_PROMPT_TO_INST} -eq 1 ] || [ ${FAST_INST} -eq 1 ] ; then + EZ_I_SKIP_ON_V=1 + else + EZ_I_SKIP_ON_V=$FAST_INST + fi + cd "$SCRIPTDIR_V" + bash py-packs-LBConverter.bash "$EZ_I_SKIP_ON_V" "$BASE_INST_DIR_V" "$PYTHON_2_X" "$VE_2_X" + EZ_I_SKIP_ON_V=$FAST_INST +} + +# < ----------------------------------------- + +HTTP_PORT_F=6544 +# > ----------------------------------------- +# Instalar e configurar o LBC - LBConverter! + +EZ_I_SKIP_ON_V=$FAST_INST +f_open_main_section +f_div_section +f_yes_no "Install the LBC - LBConverter?" +if [ ${EZ_I_SKIP_ON_V} -eq 1 ] || [ ${YES_NO_R} -eq 1 ] ; then + + # NOTE: As funções abaixo provêm recursos necessários ao + # LBC - LBConverter! By Questor + f_create_base_dir + f_inst_ve_py2X 1 + f_create_ve2X 1 + f_inst_catdoc_unzip_imagemagick 1 + f_inst_tesseract 1 + f_inst_lbc_py_packs 1 + + f_chk_by_path_hlp "$BASE_INST_DIR_V/$VE_2_X/src/LBConverter" "d" "\"LBConverter\" already installed in \"$BASE_INST_DIR_V/$VE_2_X/src\"!" + F_BAK_MD_R=1 + if [ ${F_CHK_BY_PATH_HLP_R} -eq 1 ] ; then + f_ez_mv_bak "$BASE_INST_DIR_V/$VE_2_X/src/LBConverter" "Backup old version and update? (\"y\" recommended)" + fi + if [ ${F_BAK_MD_R} -eq 1 ] ; then + cd "$SCRIPTDIR_V" + tar -zxvf LBConverter.tar.gz + mv "$SCRIPTDIR_V/LBConverter" "$BASE_INST_DIR_V/$VE_2_X/src/" + cd "$BASE_INST_DIR_V/$VE_2_X/src/LBConverter" + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install" + + \cp "$BASE_INST_DIR_V/$VE_2_X/src/LBConverter/lbconverter-dist" "$BASE_INST_DIR_V/$VE_2_X/src/LBConverter/lbconverter-prov" + + if [[ "$DISTRO_TYPE" == "RH" ]] || [[ "$DISTRO_TYPE" == "SUSE" ]] ; then + f_ez_sed "" "# chkconfig: 2345 99 01\n# description: Esquema de inicialização do LBConverter\n# processname: lbconverter" "$BASE_INST_DIR_V/$VE_2_X/src/LBConverter/lbconverter-prov" + elif [[ "$DISTRO_TYPE" == "DEB" ]] ; then + f_ez_sed "" "### BEGIN INIT INFO\n# Provides: lbconverter\n# Required-Start: \$remote_fs \$syslog\n# Required-Stop: \$remote_fs \$syslog\n# Default-Start: 2 3 4 5\n# Default-Stop: 0 1 6\n# Short-Description: Start daemon at boot time\n# Description: Enable service provided by daemon.\n### END INIT INFO" "$BASE_INST_DIR_V/$VE_2_X/src/LBConverter/lbconverter-prov" + fi + + f_ez_sed "" "$BASE_INST_DIR_V/$VE_2_X/src/LBConverter/lbconvertermg" "$BASE_INST_DIR_V/$VE_2_X/src/LBConverter/lbconverter-prov" + rm -rf "/etc/init.d/lbconverter" + mv "$BASE_INST_DIR_V/$VE_2_X/src/LBConverter/lbconverter-prov" "/etc/init.d/lbconverter" + + cd /etc/init.d/ + if [[ "$DISTRO_TYPE" == "RH" ]] || [[ "$DISTRO_TYPE" == "SUSE" ]] ; then + + # TODO: A linha logo abaixo é realmente necessária? Rever p/ os outros instaladores tb! By Questor + chmod 755 lbconverter + chkconfig --add lbconverter &>/dev/null + chkconfig --level 345 lbconverter on + elif [[ "$DISTRO_TYPE" == "DEB" ]] ; then + update-rc.d -f lbconverter remove &>/dev/null + chmod +x ./lbconverter + update-rc.d lbconverter defaults + fi + + \cp "$BASE_INST_DIR_V/$VE_2_X/src/LBConverter/lbconvertermg-dist" "$BASE_INST_DIR_V/$VE_2_X/src/LBConverter/lbconvertermg" + f_ez_sed "" "$BASE_INST_DIR_V/$VE_2_X" "$BASE_INST_DIR_V/$VE_2_X/src/LBConverter/lbconvertermg" + + LBG_URL_F="http://127.0.0.1:8008/lbg" + QUESTION_F="Enter the LBG - LBGenerator URL. +Use empty for \"$LBG_URL_F\" (LOCALHOST)!" + + f_div_section + f_get_usr_input "$QUESTION_F" 1 + QUESTION_F="" + if [ -n "$GET_USR_INPUT_R" ] ; then + LBG_URL_F=$GET_USR_INPUT_R + fi + + QUESTION_F="Enter the port number for http service. +Use empty for \"$HTTP_PORT_F\" (recommended)!" + + f_div_section + f_get_usr_input "$QUESTION_F" 1 + QUESTION_F="" + if [ -n "$GET_USR_INPUT_R" ] ; then + HTTP_PORT_F=$GET_USR_INPUT_R + fi + + \cp "$BASE_INST_DIR_V/$VE_2_X/src/LBConverter/production.ini-dist" "$BASE_INST_DIR_V/$VE_2_X/src/LBConverter/production.ini" + f_ez_sed "" "$HTTP_PORT_F" "$BASE_INST_DIR_V/$VE_2_X/src/LBConverter/production.ini" + f_ez_sed "" "$LBG_URL_F" "$BASE_INST_DIR_V/$VE_2_X/src/LBConverter/production.ini" + + f_svc_helper "lbconverter" "restart" + fi + f_fire_hlp "lbconverter" $HTTP_PORT_F +fi +f_close_main_section + +# < ----------------------------------------- + +# < -------------------------------------------------------------------------- + +# > -------------------------------------------------------------------------- +# FINAL! +# -------------------------------------- + +EZ_I_SKIP_ON_V=0 +read -d '' TITLE_F <<"EOF" +Installer finished! Thanks! +EOF + +LBC_SVC_SYNTAX="" +if [[ "$DISTRO_TYPE" == "RH" ]] ; then + LBC_SVC_SYNTAX="systemctl start lbconverter.service + systemctl stop lbconverter.service" +else + LBC_SVC_SYNTAX="service lbconverter start + service lbconverter stop" +fi + +USEFUL_INFO_F="To configure... + vi $BASE_INST_DIR_V/$VE_2_X/src/LBConverter/production.ini + +python$PYTHON_2_X virtual environment path... + $BASE_INST_DIR_V/$VE_2_X + +To start/stop... + $LBC_SVC_SYNTAX + +Log... + less /var/log/lbconverter.log" + +f_end "$TITLE_F" "$USEFUL_INFO_F" +TITLE_F="" +USEFUL_INFO_F="" + +# < -------------------------------------------------------------------------- diff --git a/install.sh b/install.sh deleted file mode 100755 index e7ad7a0..0000000 --- a/install.sh +++ /dev/null @@ -1,886 +0,0 @@ -#!/bin/bash - -# > ----------------------------------------- -# Run that script with bash even if the user use sh/dash or any sh like -# interpreter. This way it correctly works with either: -# "sh ./my_script.sh" or "bash ./my_script.sh" or "./my_script.sh" - -if [ -z "$BASH_VERSION" ] -then - exec bash "$0" "$@" -fi - -# < ----------------------------------------- - -# NOTE: Evita problemas com caminhos relativos! By Questor -SCRIPTDIR_V="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" -. $SCRIPTDIR_V/ez_i.sh - -# > -------------------------------------------------------------------------- -# INÍCIO! -# -------------------------------------- - -read -d '' TITLE_F <<"EOF" -LBC - LBConverter Installer -EOF - -read -d '' VERSION_F <<"EOF" -1.0.0.0 -EOF - -read -d '' ABOUT_F <<"EOF" -This script will install LBC - LBConverter the LightBase OCR (Optical Character -Recognition)/data extractor component that obtain data from submitted files! - -Have fun! =D -EOF - -read -d '' WARNINGS_F <<"EOF" -- This installer is compatible with RHEL, SUSE, Debian or distributions -based on these. - -- We RECOMMEND you... - Install all the components (answer yes to everything). Except - contrary guidance! - Check for previous installations! If there is previous - installations consider this variant in the process! - Although this is not mandatory, do the installation process in an - exclusive machine for this. - -- We NOTICE you... - This installer assumes that the target distribution has a "standard - setup". This may include components such as firewall, SELinux - and others. - -- We WARNING you... - THIS INSTALLER AND RESULTING PRODUCTS COMES WITH ABSOLUTELY NO WARRANTY! - USE AT YOUR OWN RISK! WE ARE NOT RESPONSIBLE FOR ANY DAMAGE TO YOURSELF, - HARDWARE, OR CO-WORKERS. EXCEPT IN CASES WHERE THERE ARE SIGNED CONTRACT - THAT REGULATES THIS! -EOF - -read -d '' COMPANY_F <<"EOF" -BR Light LTDA - LightBase Consulting in Public Software/LightBase Consultoria em Software Público -Free Software + Our Ideas = Best Solution!/Software Livre + Nossas Idéias = Melhor Solução! -+55-61-3347-1949 - http://www.LightBase.com.br - Brasil-DF -EOF - -f_begin "$TITLE_F" "$VERSION_F" "$ABOUT_F" "$WARNINGS_F" "$COMPANY_F" -ABOUT_F="" -WARNINGS_F="" - -# < -------------------------------------------------------------------------- - -# > -------------------------------------------------------------------------- -# TERMOS E LICENÇA! -# -------------------------------------- - -read -d '' TERMS_LICEN_F <<"EOF" -BY USING THIS INSTALLER YOU ARE AGREEING TO THE TERMS OF USE OF ALL -INVOLVED SOFTWARE! -EOF - -f_terms_licen "$TERMS_LICEN_F" -TERMS_LICEN_F="" - -# < -------------------------------------------------------------------------- - -# > ----------------------------------------- -# Checar se o usuário é root! - -f_is_root - -# < ----------------------------------------- - -# > -------------------------------------------------------------------------- -# INTRUÇÕES! -# -------------------------------------- - -read -d '' INSTRUCT_F <<"EOF" -- TO CANCEL installation at any time use Ctrl+c! -EOF - -f_instruct "$INSTRUCT_F" -INSTRUCT_F="" - -# < -------------------------------------------------------------------------- - -DISTRO_TYPE="" -DISTRO_NAME="" -# > ----------------------------------------- -# Checar se a distro é compatível! - -f_open_section -f_about_distro -f_div_section -echo "DISTRO INFORMATION:" -f_div_section -echo "NAME: .... ${F_ABOUT_DISTRO_R[0]}" -echo "VERSION: . ${F_ABOUT_DISTRO_R[1]}" -echo "BASED: ... ${F_ABOUT_DISTRO_R[2]}" -echo "ARCH: .... ${F_ABOUT_DISTRO_R[3]}" -f_div_section - -if [[ "${F_ABOUT_DISTRO_R[2]}" == "Debian" ]] || [[ "${F_ABOUT_DISTRO_R[2]}" == "RedHat" ]] || - [[ "${F_ABOUT_DISTRO_R[2]}" == "Suse" ]] ; then - if [[ "${F_ABOUT_DISTRO_R[2]}" == "Debian" ]] ; then - DISTRO_TYPE="DEB" - if [[ "${F_ABOUT_DISTRO_R[0]}" == "Ubuntu" ]] ; then - DISTRO_NAME="Ubuntu" - if [[ "${F_ABOUT_DISTRO_R[1]}" != "14.04" ]] ; then - f_div_section - f_yes_no "Linux version may be incompatible with this installer (expected: 14.04/obtained: ${F_ABOUT_DISTRO_R[1]})! Continue?" - f_div_section - if [ ${YES_NO_R} -eq 0 ] ; then - exit 0 - fi - fi - elif [[ "${F_ABOUT_DISTRO_R[0]}" == "Debian GNU/Linux" ]] ; then - DISTRO_NAME="Debian" - if [[ "${F_ABOUT_DISTRO_R[1]}" != "8" ]] ; then - f_div_section - f_yes_no "Linux version may be incompatible with this installer (expected: 8/obtained: ${F_ABOUT_DISTRO_R[1]})! Continue?" - f_div_section - if [ ${YES_NO_R} -eq 0 ] ; then - exit 0 - fi - fi - else - f_div_section - f_yes_no "Linux distro may be incompatible with this installer (expected: Ubuntu or Debian/obtained: ${F_ABOUT_DISTRO_R[0]})! Continue?" - f_div_section - if [ ${YES_NO_R} -eq 0 ] ; then - exit 0 - fi - fi - elif [[ "${F_ABOUT_DISTRO_R[2]}" == "RedHat" ]] ; then - DISTRO_TYPE="RH" - if [[ "${F_ABOUT_DISTRO_R[0]}" == "Red Hat Enterprise Linux Server" ]] ; then - DISTRO_NAME="RedHat" - if [[ "${F_ABOUT_DISTRO_R[1]}" != "6."* ]] ; then - f_div_section - f_yes_no "Linux version may be incompatible with this installer (expected: 6.X/obtained: ${F_ABOUT_DISTRO_R[1]})! Continue?" - f_div_section - if [ ${YES_NO_R} -eq 0 ] ; then - exit 0 - fi - fi - elif [[ "${F_ABOUT_DISTRO_R[0]}" == "CentOS" ]] ; then - DISTRO_NAME="CentOS" - if [[ "${F_ABOUT_DISTRO_R[1]}" != "6."* ]] ; then - f_div_section - f_yes_no "Linux version may be incompatible with this installer (expected: 6.X/obtained: ${F_ABOUT_DISTRO_R[1]})! Continue?" - f_div_section - if [ ${YES_NO_R} -eq 0 ] ; then - exit 0 - fi - fi - else - f_div_section - 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?" - f_div_section - if [ ${YES_NO_R} -eq 0 ] ; then - exit 0 - fi - fi - elif [[ "${F_ABOUT_DISTRO_R[2]}" == "Suse" ]] ; then - DISTRO_TYPE="SUSE" - if [[ "${F_ABOUT_DISTRO_R[0]}" == "openSUSE" ]] ; then - DISTRO_NAME="openSUSE" - if [[ "${F_ABOUT_DISTRO_R[1]}" != "13."* ]] ; then - f_div_section - f_yes_no "Linux version may be incompatible with this installer (expected: 13.X/obtained: ${F_ABOUT_DISTRO_R[1]})! Continue?" - f_div_section - if [ ${YES_NO_R} -eq 0 ] ; then - exit 0 - fi - fi - elif [[ "${F_ABOUT_DISTRO_R[0]}" == "SLES" ]] ; then - DISTRO_NAME="SLES" - if [[ "${F_ABOUT_DISTRO_R[1]}" != "12."* ]] ; then - f_div_section - f_yes_no "Linux version may be incompatible with this installer (expected: 12.X/obtained: ${F_ABOUT_DISTRO_R[1]})! Continue?" - f_div_section - if [ ${YES_NO_R} -eq 0 ] ; then - exit 0 - fi - fi - else - f_div_section - 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?" - f_div_section - if [ ${YES_NO_R} -eq 0 ] ; then - exit 0 - fi - fi - fi - - if [[ "${F_ABOUT_DISTRO_R[3]}" != "x86_64" ]] ; then - f_enter_to_cont "Linux architecture completely incompatible with this installer (expected: x86_64/obtained: ${F_ABOUT_DISTRO_R[3]})!" - exit 0 - fi -else - 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]})!" - exit 0 -fi -f_close_section - -# < ----------------------------------------- - -# > ----------------------------------------- -# Dá ao usuário mais avançado a possibilideade de usar o instalador -# simplificado! - -# NOTE: É possível forçar o processo de instalção simplificado setando -# "SIMPLE_INST" com 1! By Questor -SIMPLE_INST=0 -if [ ${SIMPLE_INST} -eq 0 ] ; then - f_open_section - f_yes_no "Use simple install (use default values for most of the options)?" - if [ ${YES_NO_R} -eq 1 ] ; then - - # NOTE: Essa variável serve apenas para "preservar" o valor - # setado pelo usuário sendo somente "leitura". A variável a - # ser usada nas regras deve ser "EZ_I_SKIP_ON_V" (ez_i.sh)! Essa - # estratégia serve para mudarmos o comportamento do "ez_i.sh" - # de acordo com as circunstâncias! By Questor - SIMPLE_INST=1 - - # NOTE: Essa variável é para consumo do "ez_i.sh", para que ele - # não execute algumas funções e simplifique o processo de - # instalação! By Questor - EZ_I_SKIP_ON_V=1 - fi - f_close_section - sleep 1 -fi - -# < ----------------------------------------- - -# > ----------------------------------------- -# Garantir o encodamento correto para evitar problemas de -# compatibilidade! - -if [ ${SIMPLE_INST} -eq 0 ] ; then - EZ_I_SKIP_ON_V=$SIMPLE_INST - f_open_section - f_yes_no "Set terminal encode? (in some cases recommended for Windows ssh clients)" - if [ ${EZ_I_SKIP_ON_V} -eq 1 ] || [ ${YES_NO_R} -eq 1 ] ; then - export LANG=pt_BR.utf8 - fi - f_close_section -fi - -# < ----------------------------------------- - -# > ----------------------------------------- -# Desabilita o SElinux! - -if [[ "$DISTRO_TYPE" == "RH" ]] ; then - EZ_I_SKIP_ON_V=0 - f_open_section - f_yes_no "Disable SElinux (use "y" if you never did it)?" - if [ ${YES_NO_R} -eq 1 ] ; then - setenforce 0 - - # NOTE: As condições abaixo visam evitar que o arquivo seja - # desnecessariamente e erroneamente modificado! By Questor - EZ_I_SKIP_ON_V=$SIMPLE_INST - f_fl_cont_str "# SELINUX=enforcing" "/etc/sysconfig/selinux" "The file \"/etc/sysconfig/selinux\" probably has already been changed! Check it!" - EZ_I_SKIP_ON_V=0 - if [ ${FL_CONT_STR_R} -eq 0 ] ; then - f_fl_cont_str "SELINUX=disabled" "/etc/sysconfig/selinux" - if [ ${FL_CONT_STR_R} -eq 0 ] ; then - f_ez_sed "SELINUX=enforcing" "# SELINUX=enforcing\nSELINUX=disabled" "/etc/sysconfig/selinux" - fi - fi - fi - f_close_section -fi - -# < ----------------------------------------- - -# > ----------------------------------------- -# Atualizar a distro (repositório)! - -EZ_I_SKIP_ON_V=$SIMPLE_INST -if [[ "$DISTRO_TYPE" == "RH" ]] ; then - if [[ "$DISTRO_NAME" == "RedHat" ]] ; then - RESOURCES_ARR_P=("Red Hat Enterprise Linux Server") - f_chk_distro_status "$DISTRO_NAME" RESOURCES_ARR_P[@] - fi - f_div_section - f_yes_no "Update your distro? (\"y\" highly recommended)" - f_div_section - if [ ${EZ_I_SKIP_ON_V} -eq 1 ] || [ ${YES_NO_R} -eq 1 ] ; then - yum -y update - fi - f_pack_is_inst "git" "yum" "\"git\" already installed!" - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then - yum -y install git - fi -elif [[ "$DISTRO_TYPE" == "DEB" ]] ; then - f_div_section - f_yes_no "Update your distro? (\"y\" highly recommended)" - f_div_section - if [ ${EZ_I_SKIP_ON_V} -eq 1 ] || [ ${YES_NO_R} -eq 1 ] ; then - apt-get -y update - fi - f_pack_is_inst "git" "apt-get" "\"git\" already installed!" - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then - apt-get -y install git - fi -elif [[ "$DISTRO_TYPE" == "SUSE" ]] ; then - if [[ "$DISTRO_NAME" == "SLES" ]] ; then - RESOURCES_ARR_P=("SUSE_Linux_Enterprise_Server_12_SP1_x86_64" -"SUSE_Linux_Enterprise_Software_Development_Kit_12_SP1_x86_64" -"Web_and_Scripting_Module_12_x86_64") - f_chk_distro_status "SLES" RESOURCES_ARR_P[@] - fi - f_div_section - f_yes_no "Update your distro? (\"y\" highly recommended)" - f_div_section - if [ ${EZ_I_SKIP_ON_V} -eq 1 ] || [ ${YES_NO_R} -eq 1 ] ; then - zypper --non-interactive update - fi - f_pack_is_inst "git-core" "zypper" "\"git-core\" already installed!" - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then - zypper --non-interactive install git-core - fi -fi - -# < ----------------------------------------- - -BASE_INST_DIR_V="/usr/local/lb" -# > ----------------------------------------- -# Criar o diretório base da instalação! - -EZ_I_SKIP_ON_V=$SIMPLE_INST -f_open_section -QUESTION_F="Insert where the base installation directory (\"lb\") will be created (don't use \"/\" at the end). -Use empty for \"/usr/local\"!" - -f_get_usr_input "$QUESTION_F" 1 -QUESTION_F="" -if [ ${EZ_I_SKIP_ON_V} -eq 1 ] || [ -z "$GET_USR_INPUT_R" ] ; then - f_chk_by_path_hlp "$BASE_INST_DIR_V" "d" "\"$BASE_INST_DIR_V\" directory already created!" - if [ ${F_CHK_BY_PATH_HLP_R} -eq 0 ] ; then - mkdir -p "$BASE_INST_DIR_V" - fi -else - BASE_INST_DIR_V="$GET_USR_INPUT_R/lb" - f_chk_by_path_hlp "$BASE_INST_DIR_V" "d" "\"$BASE_INST_DIR_V\" directory already created!" - if [ ${F_CHK_BY_PATH_HLP_R} -eq 0 ] ; then - mkdir -p "$BASE_INST_DIR_V" - fi -fi -f_close_section - -# < ----------------------------------------- - -# > ----------------------------------------- -# Instalar pacotes que são comuns a determinados componentes! - -F_COM_PKS_INSTALLED=0 -f_common_packs() { - : 'Instalar pacotes que são comuns a determinados componentes.' - - if [ ${F_COM_PKS_INSTALLED} -eq 0 ] ; then - if [[ "$DISTRO_TYPE" == "RH" ]] ; then - f_pack_is_inst "gcc-c++" "yum" "\"gcc-c++\" already installed!" - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then - yum -y install gcc-c++ - fi - f_pack_is_inst "autoconf" "yum" "\"autoconf\" already installed!" - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then - yum -y install autoconf - fi - f_pack_is_inst "automake" "yum" "\"automake\" already installed!" - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then - yum -y install automake - fi - f_pack_is_inst "libtool" "yum" "\"libtool\" already installed!" - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then - yum -y install libtool - fi - f_pack_is_inst "zlib-devel" "yum" "\"zlib-devel\" already installed!" - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then - yum -y install zlib-devel - fi - elif [[ "$DISTRO_TYPE" == "DEB" ]] ; then - f_pack_is_inst "g++" "apt-get" "\"g++\" already installed!" - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then - apt-get -y install g++ - fi - f_pack_is_inst "autoconf" "apt-get" "\"autoconf\" already installed!" - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then - apt-get -y install autoconf - fi - f_pack_is_inst "make" "apt-get" "\"make\" already installed!" - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then - apt-get -y install make - fi - f_pack_is_inst "libtool" "apt-get" "\"libtool\" already installed!" - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then - apt-get -y install libtool - fi - f_pack_is_inst "zlib1g-dev" "apt-get" "\"zlib1g-dev\" already installed!" - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then - apt-get -y install zlib1g-dev - fi - elif [[ "$DISTRO_TYPE" == "SUSE" ]] ; then - f_pack_is_inst "gcc-c++" "zypper" "\"gcc-c++\" already installed!" - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then - zypper --non-interactive install gcc-c++ - fi - if [[ "$DISTRO_NAME" != "SLES" ]] ; then - f_pack_is_inst "autoconf" "zypper" "\"autoconf\" already installed!" - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then - zypper --non-interactive install autoconf - fi - f_pack_is_inst "automake" "zypper" "\"automake\" already installed!" - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then - zypper --non-interactive install automake - fi - f_pack_is_inst "make" "zypper" "\"make\" already installed!" - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then - zypper --non-interactive install make - fi - f_pack_is_inst "libtool" "zypper" "\"libtool\" already installed!" - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then - zypper --non-interactive install libtool - fi - fi - f_pack_is_inst "zlib-devel" "zypper" "\"zlib-devel\" already installed!" - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then - zypper --non-interactive install zlib-devel - fi - fi - F_COM_PKS_INSTALLED=1 - fi -} - -# < ----------------------------------------- - -# > ----------------------------------------- -# Instalar o virtualenv-1.11.6 no python2.X! - -PYTHON_2_X="" -VE_2_X="" -if [[ "$DISTRO_TYPE" == "RH" ]] ; then - PYTHON_2_X="2.6" - VE_2_X="ve26" -elif [[ "$DISTRO_TYPE" == "DEB" ]] || [[ "$DISTRO_TYPE" == "SUSE" ]] ; then - PYTHON_2_X="2.7" - VE_2_X="ve27" -fi -EZ_I_SKIP_ON_V=$SIMPLE_INST -f_open_section -f_yes_no "Install virtualenv-1.11.6 on python$PYTHON_2_X?" -if [ ${EZ_I_SKIP_ON_V} -eq 1 ] || [ ${YES_NO_R} -eq 1 ] ; then - if [[ "$DISTRO_TYPE" == "RH" ]] ; then - f_chk_by_path_hlp "/usr/bin/virtualenv-$PYTHON_2_X" "f" "virtualenv-1.11.6 already installed!" - elif [[ "$DISTRO_TYPE" == "DEB" ]] || [[ "$DISTRO_TYPE" == "SUSE" ]] ; then - f_chk_by_path_hlp "/usr/local/bin/virtualenv-$PYTHON_2_X" "f" "virtualenv-1.11.6 already installed!" - fi - if [[ "$DISTRO_TYPE" == "RH" ]] ; then - f_pack_is_inst "python-setuptools" "yum" "\"python-setuptools\" already installed!" - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then - yum -y install python-setuptools - fi - elif [[ "$DISTRO_TYPE" == "DEB" ]] ; then - f_pack_is_inst "python-setuptools" "apt-get" "\"python-setuptools\" already installed!" - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then - apt-get -y install python-setuptools - fi - elif [[ "$DISTRO_TYPE" == "SUSE" ]] ; then - f_pack_is_inst "python-setuptools" "zypper" "\"python-setuptools\" already installed!" - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then - zypper --non-interactive install python-setuptools - fi - fi - if [ ${F_CHK_BY_PATH_HLP_R} -eq 0 ] ; then - f_common_packs - cd "$SCRIPTDIR_V" - cd ./other-srcs-n-apps - tar -zxvf virtualenv-1.11.6.tar.gz - cd virtualenv-1.11.6 - python$PYTHON_2_X setup.py install - cd .. - rm -rf virtualenv-1.11.6 - fi -fi -f_close_section - -# < ----------------------------------------- - -# > ----------------------------------------- -# Criar o ambiente virtual (python2.X)! - -EZ_I_SKIP_ON_V=$SIMPLE_INST -f_open_section -f_enter_to_cont "Create the virtual environment (python$PYTHON_2_X)!" -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\"!" -if [ ${F_CHK_BY_PATH_HLP_R} -eq 0 ] ; then - f_common_packs - cd "$BASE_INST_DIR_V" - virtualenv-$PYTHON_2_X $VE_2_X - mkdir "$BASE_INST_DIR_V/$VE_2_X/src" - f_enter_to_cont "Virtual environment created in \"$BASE_INST_DIR_V/$VE_2_X\"!" -fi -f_close_section - -# < ----------------------------------------- - -# > ----------------------------------------- -# Instalar o catdoc, unzip e ImageMagick para o LBConverter! - -EZ_I_SKIP_ON_V=$SIMPLE_INST -f_open_section -INST_CATDOC_UNZIP_IMAGMAG="" -if [[ "$DISTRO_TYPE" == "RH" ]] ; then - INST_CATDOC_UNZIP_IMAGMAG="Install catdoc, unzip and ImageMagick?" -elif [[ "$DISTRO_TYPE" == "DEB" ]] ; then - INST_CATDOC_UNZIP_IMAGMAG="Install catdoc, unzip and ImageMagick?" -elif [[ "$DISTRO_TYPE" == "SUSE" ]] ; then - INST_CATDOC_UNZIP_IMAGMAG="Install catdoc and ImageMagick?" -fi -f_yes_no "$INST_CATDOC_UNZIP_IMAGMAG" -if [ ${EZ_I_SKIP_ON_V} -eq 1 ] || [ ${YES_NO_R} -eq 1 ] ; then - - UP_CATDOC=1 - f_chk_by_path_hlp "$BASE_INST_DIR_V/$VE_2_X/lib/catdoc-0.94.2" "d" "catdoc-0.94.2 already installed in \"$BASE_INST_DIR_V/$VE_2_X/lib/catdoc-0.94.2\"!" - if [ ${F_CHK_BY_PATH_HLP_R} -eq 1 ] ; then - if [ ${EZ_I_SKIP_ON_V} -eq 0 ] ; then - f_div_section - f_yes_no "Update/reinstall catdoc-0.94.2? (\"y\" recommended)" - f_div_section - UP_CATDOC=$YES_NO_R - if [ ${UP_CATDOC} -eq 1 ] ; then - rm -rf "$BASE_INST_DIR_V/$VE_2_X/lib/catdoc-0.94.2" - fi - fi - fi - if [ ${UP_CATDOC} -eq 1 ] ; then - if [[ "$DISTRO_TYPE" == "RH" ]] ; then - f_common_packs - f_pack_is_inst "unzip" "yum" "\"unzip\" already installed!" - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then - yum -y install unzip - fi - f_pack_is_inst "ImageMagick" "yum" "\"ImageMagick\" already installed!" - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then - yum -y install ImageMagick - fi - elif [[ "$DISTRO_TYPE" == "DEB" ]] ; then - f_common_packs - f_pack_is_inst "unzip" "apt-get" "\"unzip\" already installed!" - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then - apt-get -y install unzip - fi - f_pack_is_inst "imagemagick" "apt-get" "\"imagemagick\" already installed!" - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then - apt-get -y install imagemagick - fi - elif [[ "$DISTRO_TYPE" == "SUSE" ]] ; then - f_common_packs - f_pack_is_inst "ImageMagick" "zypper" "\"ImageMagick\" already installed!" - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then - zypper --non-interactive install ImageMagick - fi - fi - cd "$SCRIPTDIR_V" - cd ./other-srcs-n-apps - tar -zxvf catdoc-0.94.2.tar.gz - mv ./catdoc-0.94.2 $BASE_INST_DIR_V/$VE_2_X/lib - cd $BASE_INST_DIR_V/$VE_2_X/lib/catdoc-0.94.2 - ./configure - make && make install - fi -fi -f_close_section - -# < ----------------------------------------- - -# > ----------------------------------------- -# Instalar o tesseract-ocr-3.02.02! - -EZ_I_SKIP_ON_V=$SIMPLE_INST -f_open_section -f_yes_no "Install tesseract-ocr-3.02.02?" -if [ ${EZ_I_SKIP_ON_V} -eq 1 ] || [ ${YES_NO_R} -eq 1 ] ; then - - UP_TESSERACT_OCR=1 - f_chk_by_path_hlp "/usr/local/lib/tesseract-ocr" "d" "tesseract-ocr-3.02.02 already installed in \"/usr/local/lib/tesseract-ocr\"!" - if [ ${F_CHK_BY_PATH_HLP_R} -eq 1 ] ; then - if [ ${EZ_I_SKIP_ON_V} -eq 0 ] ; then - f_div_section - f_yes_no "Update/reinstall tesseract-ocr-3.02.02? (\"y\" recommended)" - f_div_section - UP_TESSERACT_OCR=$YES_NO_R - fi - fi - if [ ${UP_TESSERACT_OCR} -eq 1 ] ; then - if [[ "$DISTRO_TYPE" == "RH" ]] ; then - f_common_packs - f_pack_is_inst "libpng12-devel" "yum" "\"libpng12-devel\" already installed!" - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then - yum -y install libpng-devel - fi - f_pack_is_inst "libjpeg-turbo-devel" "yum" "\"libjpeg-turbo-devel\" already installed!" - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then - yum -y install libjpeg-turbo-devel - fi - f_pack_is_inst "libtiff-devel" "yum" "\"libtiff-devel\" already installed!" - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then - yum -y install libtiff-devel - fi - f_pack_is_inst "openjpeg-libs" "yum" "\"openjpeg-libs\" already installed!" - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then - yum -y install openjpeg-libs - fi - f_pack_is_inst "giflib" "yum" "\"giflib\" already installed!" - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then - yum -y install giflib - fi - - # NOTE: Esse pacote só existe no CentOS 7! By Questor - # f_pack_is_inst "libwebp-devel" "yum" "\"libwebp-devel\" already installed!" - # if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then - # yum -y install libwebp-devel - # fi - elif [[ "$DISTRO_TYPE" == "DEB" ]] ; then - f_common_packs - f_pack_is_inst "libpng-dev" "apt-get" "\"libpng-dev\" already installed!" - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then - apt-get -y install libpng-dev - fi - f_pack_is_inst "libjpeg-dev" "apt-get" "\"libjpeg-dev\" already installed!" - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then - apt-get -y install libjpeg-dev - fi - f_pack_is_inst "libtiff-dev" "apt-get" "\"libtiff-dev\" already installed!" - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then - apt-get -y install libtiff-dev - fi - f_pack_is_inst "libopenjpeg2" "apt-get" "\"libopenjpeg2\" already installed!" - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then - apt-get -y install libopenjpeg2 - fi - f_pack_is_inst "libgif-dev" "apt-get" "\"libgif-dev\" already installed!" - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then - apt-get -y install libgif-dev - fi - f_pack_is_inst "libwebp-dev" "apt-get" "\"libwebp-dev\" already installed!" - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then - apt-get -y install libwebp-dev - fi - elif [[ "$DISTRO_TYPE" == "SUSE" ]] ; then - f_common_packs - f_pack_is_inst "libpng-devel" "zypper" "\"libpng-devel\" already installed!" - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then - zypper --non-interactive install libpng-devel - fi - f_pack_is_inst "libjpeg-devel" "zypper" "\"libjpeg-devel\" already installed!" - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then - zypper --non-interactive install libjpeg-devel - fi - f_pack_is_inst "libtiff-devel" "zypper" "\"libtiff-devel\" already installed!" - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then - zypper --non-interactive install libtiff-devel - fi - if [[ "$DISTRO_NAME" != "SLES" ]] ; then - f_pack_is_inst "libopenjp2-7" "zypper" "\"libopenjp2-7\" already installed!" - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then - zypper --non-interactive install libopenjp2-7 - fi - fi - f_pack_is_inst "libgif6" "zypper" "\"libgif6\" already installed!" - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then - zypper --non-interactive install libgif6 - fi - f_pack_is_inst "libwebp-devel" "zypper" "\"libwebp-devel\" already installed!" - if [ ${F_PACK_IS_INST_R} -eq 0 ] ; then - zypper --non-interactive install libwebp-devel - fi - fi - - cd "$SCRIPTDIR_V" - cd ./other-srcs-n-apps - - tar -zxvf leptonica-1.71.tar.gz - mv ./leptonica-1.71 /usr/local/lib - cd /usr/local/lib/leptonica-1.71 - ./autobuild - ./configure - make -j 4 && make install - - cd "$SCRIPTDIR_V" - cd ./other-srcs-n-apps - - tar -zxvf tesseract-ocr-3.02.02.tar.gz - mv ./tesseract-ocr /usr/local/lib - cd /usr/local/lib/tesseract-ocr - ./autogen.sh - ./configure - make -j 4 && make install - ldconfig - - cd "$SCRIPTDIR_V" - cd ./other-srcs-n-apps - - tar -zxvf tesseract-ocr-3.01.eng.tar.gz - tar -zxvf tesseract-ocr-3.02.por.tar.gz - mv ./tesseract-ocr /usr/local/lib/tesseract-ocr - cp /usr/local/lib/tesseract-ocr/tesseract-ocr/tessdata/eng.traineddata /usr/local/share/tessdata - export TESSDATA_PREFIX=/usr/local/lib/tesseract-ocr/tesseract-ocr - - fi -fi -f_close_section - -# < ----------------------------------------- - -# > ----------------------------------------- -# Instalar as dependências python2.X da LBC - LBConverter! - -EZ_I_SKIP_ON_V=$SIMPLE_INST -cd "$SCRIPTDIR_V" -bash py-packs-LBConverter.sh "$EZ_I_SKIP_ON_V" "$BASE_INST_DIR_V" "$PYTHON_2_X" "$VE_2_X" - -# < ----------------------------------------- - -HTTP_PORT_F=6544 -# > ----------------------------------------- -# Instalar e configurar o LBC - LBConverter! - -EZ_I_SKIP_ON_V=$SIMPLE_INST -f_open_section -f_yes_no "Install the LBC - LBConverter?" -if [ ${EZ_I_SKIP_ON_V} -eq 1 ] || [ ${YES_NO_R} -eq 1 ] ; then - - f_chk_by_path_hlp "$BASE_INST_DIR_V/$VE_2_X/src/LBConverter" "d" "\"LBConverter\" already installed in \"$BASE_INST_DIR_V/$VE_2_X/src\"!" - F_BAK_MD_R=1 - if [ ${F_CHK_BY_PATH_HLP_R} -eq 1 ] ; then - f_ez_mv_bak "$BASE_INST_DIR_V/$VE_2_X/src/LBConverter" "Backup old version and update? (\"y\" recommended)" - fi - if [ ${F_BAK_MD_R} -eq 1 ] ; then - cd "$SCRIPTDIR_V" - tar -zxvf LBConverter.tar.gz - mv "$SCRIPTDIR_V/LBConverter" "$BASE_INST_DIR_V/$VE_2_X/src/" - cd "$BASE_INST_DIR_V/$VE_2_X/src/LBConverter" - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install" - - f_enter_to_cont "Configure LBC - LBConverter!" - \cp "$BASE_INST_DIR_V/$VE_2_X/src/LBConverter/lbconverter-dist" "$BASE_INST_DIR_V/$VE_2_X/src/LBConverter/lbconverter-prov" - - if [[ "$DISTRO_TYPE" == "RH" ]] || [[ "$DISTRO_TYPE" == "SUSE" ]] ; then - f_ez_sed "" "# chkconfig: 2345 99 01\n# description: Esquema de inicialização do LBConverter\n# processname: lbconverter" "$BASE_INST_DIR_V/$VE_2_X/src/LBConverter/lbconverter-prov" - elif [[ "$DISTRO_TYPE" == "DEB" ]] ; then - f_ez_sed "" "### BEGIN INIT INFO\n# Provides: lbconverter\n# Required-Start: \$remote_fs \$syslog\n# Required-Stop: \$remote_fs \$syslog\n# Default-Start: 2 3 4 5\n# Default-Stop: 0 1 6\n# Short-Description: Start daemon at boot time\n# Description: Enable service provided by daemon.\n### END INIT INFO" "$BASE_INST_DIR_V/$VE_2_X/src/LBConverter/lbconverter-prov" - fi - - f_ez_sed "" "$BASE_INST_DIR_V/$VE_2_X/src/LBConverter/lbconvertermg" "$BASE_INST_DIR_V/$VE_2_X/src/LBConverter/lbconverter-prov" - rm -rf "/etc/init.d/lbconverter" - mv "$BASE_INST_DIR_V/$VE_2_X/src/LBConverter/lbconverter-prov" "/etc/init.d/lbconverter" - - chmod 755 -R /etc/init.d/ - cd /etc/init.d/ - - if [[ "$DISTRO_TYPE" == "RH" ]] || [[ "$DISTRO_TYPE" == "SUSE" ]] ; then - chkconfig --level 2345 lbconverter on - elif [[ "$DISTRO_TYPE" == "DEB" ]] ; then - update-rc.d -f lbconverter remove - update-rc.d lbconverter defaults - fi - - \cp "$BASE_INST_DIR_V/$VE_2_X/src/LBConverter/lbconvertermg-dist" "$BASE_INST_DIR_V/$VE_2_X/src/LBConverter/lbconvertermg" - f_ez_sed "" "$BASE_INST_DIR_V/$VE_2_X" "$BASE_INST_DIR_V/$VE_2_X/src/LBConverter/lbconvertermg" - - LBG_URL_F="http://127.0.0.1/lbg" - QUESTION_F="Enter the LBG - LBGenerator URL. -Use empty for \"$LBG_URL_F\" (LOCALHOST)!" - - f_get_usr_input "$QUESTION_F" 1 - QUESTION_F="" - if [ -n "$GET_USR_INPUT_R" ] ; then - LBG_URL_F=$GET_USR_INPUT_R - fi - - QUESTION_F="Enter the port number for http service. -Use empty for \"$HTTP_PORT_F\" (recommended)!" - - f_get_usr_input "$QUESTION_F" 1 - QUESTION_F="" - if [ -n "$GET_USR_INPUT_R" ] ; then - HTTP_PORT_F=$GET_USR_INPUT_R - fi - - \cp "$BASE_INST_DIR_V/$VE_2_X/src/LBConverter/production.ini-dist" "$BASE_INST_DIR_V/$VE_2_X/src/LBConverter/production.ini" - f_ez_sed "" "$HTTP_PORT_F" "$BASE_INST_DIR_V/$VE_2_X/src/LBConverter/production.ini" - f_ez_sed "" "$LBG_URL_F" "$BASE_INST_DIR_V/$VE_2_X/src/LBConverter/production.ini" - - service lbconverter restart - fi -fi -f_close_section - -# < ----------------------------------------- - -# > ----------------------------------------- -# Abrir o firewall para o http service! - -if [[ "$DISTRO_TYPE" == "RH" ]] || [[ "$DISTRO_TYPE" == "SUSE" ]] ; then - EZ_I_SKIP_ON_V=$SIMPLE_INST - f_open_section - if [[ "$DISTRO_TYPE" == "RH" ]] ; then - f_yes_no "Open firewall for http service (TCP $HTTP_PORT_F)?" - if [ ${EZ_I_SKIP_ON_V} -eq 1 ] || [ ${YES_NO_R} -eq 1 ] ; then - f_chk_iptables ${HTTP_PORT_F} "Port $HTTP_PORT_F is already open!" 0 "ACCEPT" "tcp" "NEW" - if [ ${F_CHK_IPTABLES_R} -eq 1 ] ; then - iptables -I INPUT 6 -p tcp -m state --state NEW -m tcp --dport ${HTTP_PORT_F} -j ACCEPT - service iptables save - service iptables restart - fi - fi - f_close_section - elif [[ "$DISTRO_TYPE" == "SUSE" ]] ; then - f_yes_no "Open firewall for http service (TCP $HTTP_PORT_F)?" - if [ ${EZ_I_SKIP_ON_V} -eq 1 ] || [ ${YES_NO_R} -eq 1 ] ; then - f_chk_iptables ${HTTP_PORT_F} "Port $HTTP_PORT_F is already open!" 0 "ACCEPT" "tcp" - if [ ${F_CHK_IPTABLES_R} -eq 1 ] ; then - SuSEfirewall2 open EXT TCP ${HTTP_PORT_F} - SuSEfirewall2 stop - SuSEfirewall2 start - fi - fi - fi - f_close_section -fi - -# < ----------------------------------------- - -# > -------------------------------------------------------------------------- -# FINAL! -# -------------------------------------- - -EZ_I_SKIP_ON_V=0 -read -d '' TITLE_F <<"EOF" -Installer finished! Thanks! -EOF - -USEFUL_INFO_F="To configure... - vi $BASE_INST_DIR_V/$VE_2_X/src/LBConverter/production.ini - -To start/stop... - service lbconverter start - service lbconverter stop - -Log... - less /var/log/lbconverter.log" - -f_end "$TITLE_F" "$USEFUL_INFO_F" -TITLE_F="" -USEFUL_INFO_F="" - -# < -------------------------------------------------------------------------- diff --git a/other-srcs-n-apps/lbconverter b/other-srcs-n-apps/lbconverter deleted file mode 100755 index 228f52a..0000000 --- a/other-srcs-n-apps/lbconverter +++ /dev/null @@ -1,48 +0,0 @@ -#!/bin/bash -# chkconfig: 2345 99 01 -# description: Serviço de inicialização do LBConverter -# processname: lbconverter - -cd /usr/local/lbneo/virtenvlb2.6/src/LBConverter -Name=lbconverter -Start="/usr/local/lbneo/virtenvlb2.6/bin/python /usr/local/lbneo/virtenvlb2.6/src/LBConverter/lbconverter/ start" -Stop="/usr/local/lbneo/virtenvlb2.6/bin/python /usr/local/lbneo/virtenvlb2.6/src/LBConverter/lbconverter/ stop" -Pid=$(ps auxf | grep ${Name} | grep -v grep | awk '{print $2}') - -function startProgram(){ - if [ -z "${Pid}" ]; then - echo "${Name} is running" - else - echo "starting ${Name}..." - ${Start} - fi -} - -function stopProgram(){ - if [ -n "$Pid" ]; then - - ${Stop} - else - echo "${Name} not is running" - fi -} - -case "$1" in - start) - startProgram - ;; - stop) - stopProgram - ;; - restart) - stopProgram - startProgram - ;; - *) - N=/etc/init.d/$NAME - echo "Usage: $N {start|stop|restart|force-reload}" >&2 - exit 1 - ;; -esac - -exit 0 diff --git a/py-packs-LBConverter.bash b/py-packs-LBConverter.bash new file mode 100755 index 0000000..20d5c18 --- /dev/null +++ b/py-packs-LBConverter.bash @@ -0,0 +1,193 @@ +#!/bin/bash + +# Instalação das dependências do LBC - LBConverter no python2.X! + +. ./ez_i.bash + +EZ_I_SKIP_ON_V=$1 +if [ -z "$EZ_I_SKIP_ON_V" ] ; then + EZ_I_SKIP_ON_V=0 +fi + +BASE_INST_DIR_V=$2 +# > ----------------------------------------- +# Informar o diretório base da instalação! + +if [ -z "$BASE_INST_DIR_V" ] ; then + f_open_section + BASE_INST_DIR_V="/usr/local/lb" + + QUESTION_F="Enter the installation directory. + Use empty for \"$BASE_INST_DIR_V\"!" + + f_get_usr_input "$QUESTION_F" 1 + QUESTION_F="" + if [ -n "$GET_USR_INPUT_R" ] ; then + BASE_INST_DIR_V="$GET_USR_INPUT_R/lb" + fi + f_close_section +fi + +# < ----------------------------------------- + +PYTHON_2_X=$3 +if [ -z "$PYTHON_2_X" ] ; then + PYTHON_2_X="2.6" +fi + +VE_2_X=$4 +if [ -z "$VE_2_X" ] ; then + VE_2_X="ve26" +fi + +f_open_section + +TITLE_F="Install LBC - LBConverter dependencies for python$PYTHON_2_X?" + +f_yes_no "$TITLE_F" +TITLE_F="" + +if [ ${EZ_I_SKIP_ON_V} -eq 1 ] || [ ${YES_NO_R} -eq 1 ] ; then + + cd "$SCRIPTDIR_V" + cd ./py-packs-LBConverter + + tar -zxvf ./ordereddict-1.1.tar.gz + cd ./ordereddict-1.1 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install" + cd .. + rm -rf ./ordereddict-1.1 + + tar -zxvf ./configparser-3.3.0r2.tar.gz + cd ./configparser-3.3.0r2 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install" + cd .. + rm -rf ./configparser-3.3.0r2 + + tar -zxvf ./pdfminer-20140328.tar.gz + cd ./pdfminer-20140328 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install" + cd .. + rm -rf ./pdfminer-20140328 + + tar -zxvf ./requests-2.3.0.tar.gz + cd ./requests-2.3.0 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install" + cd .. + rm -rf ./requests-2.3.0 + + tar -zxvf ./PasteDeploy-1.5.2.tar.gz + cd ./PasteDeploy-1.5.2 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install" + cd .. + rm -rf ./PasteDeploy-1.5.2 + + tar -zxvf ./venusian-1.0.tar.gz + cd ./venusian-1.0 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install" + cd .. + rm -rf ./venusian-1.0 + + tar -zxvf ./translationstring-1.3.tar.gz + cd ./translationstring-1.3 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install" + cd .. + rm -rf ./translationstring-1.3 + + tar -zxvf ./zope.deprecation-4.1.2.tar.gz + cd ./zope.deprecation-4.1.2 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install" + cd .. + rm -rf ./zope.deprecation-4.1.2 + + tar -zxvf ./zope.interface-4.1.3.tar.gz + cd ./zope.interface-4.1.3 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install" + cd .. + rm -rf ./zope.interface-4.1.3 + + tar -zxvf ./repoze.lru-0.6.tar.gz + cd ./repoze.lru-0.6 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install" + cd .. + rm -rf ./repoze.lru-0.6 + + tar -zxvf ./WebOb-1.5.1.tar.gz + cd ./WebOb-1.5.1 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install" + cd .. + rm -rf ./WebOb-1.5.1 + + tar -zxvf ./pyramid-1.6b2.tar.gz + cd ./pyramid-1.6b2 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install" + cd .. + rm -rf ./pyramid-1.6b2 + + tar -zxvf ./pbr-0.10.0.tar.gz + cd ./pbr-0.10.0 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install" + cd .. + rm -rf ./pbr-0.10.0 + + tar -zxvf ./linecache2-1.0.0.tar.gz + cd ./linecache2-1.0.0 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install" + cd .. + rm -rf ./linecache2-1.0.0 + + tar -zxvf ./traceback2-1.4.0.tar.gz + cd ./traceback2-1.4.0 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install" + cd .. + rm -rf ./traceback2-1.4.0 + + tar -zxvf ./six-1.7.2.tar.gz + cd ./six-1.7.2 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install" + cd .. + rm -rf ./six-1.7.2 + + tar -zxvf ./argparse-1.3.0.tar.gz + cd ./argparse-1.3.0 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install" + cd .. + rm -rf ./argparse-1.3.0 + + tar -zxvf ./unittest2-1.0.1.tar.gz + cd ./unittest2-1.0.1 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install" + cd .. + rm -rf ./unittest2-1.0.1 + + tar -zxvf ./Chameleon-2.24.tar.gz + cd ./Chameleon-2.24 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install" + cd .. + rm -rf ./Chameleon-2.24 + + tar -zxvf ./pyramid_chameleon-0.3.tar.gz + cd ./pyramid_chameleon-0.3 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install" + cd .. + rm -rf ./pyramid_chameleon-0.3 + + tar -zxvf ./waitress-0.8.10.tar.gz + cd ./waitress-0.8.10 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install" + cd .. + rm -rf ./waitress-0.8.10 + + tar -zxvf ./xlrd-0.9.4.tar.gz + cd ./xlrd-0.9.4 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install" + cd .. + rm -rf ./xlrd-0.9.4 + + tar -zxvf ./BeautifulSoup-3.2.1.tar.gz + cd ./BeautifulSoup-3.2.1 + eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install" + cd .. + rm -rf ./BeautifulSoup-3.2.1 + +fi diff --git a/py-packs-LBConverter.sh b/py-packs-LBConverter.sh deleted file mode 100755 index 16bc77d..0000000 --- a/py-packs-LBConverter.sh +++ /dev/null @@ -1,193 +0,0 @@ -#!/bin/bash - -# Instalação das dependências do LBC - LBConverter no python2.X! - -. ./ez_i.sh - -SKIP_ON_V=$1 -if [ -z "$SKIP_ON_V" ] ; then - SKIP_ON_V=0 -fi - -BASE_INST_DIR_V=$2 -# > ----------------------------------------- -# Informar o diretório base da instalação! - -if [ -z "$BASE_INST_DIR_V" ] ; then - f_open_section - BASE_INST_DIR_V="/usr/local/lb" - - QUESTION_F="Enter the installation directory. - Use empty for \"$BASE_INST_DIR_V\"!" - - f_get_usr_input "$QUESTION_F" 1 - QUESTION_F="" - if [ -n "$GET_USR_INPUT_R" ] ; then - BASE_INST_DIR_V="$GET_USR_INPUT_R/lb" - fi - f_close_section -fi - -# < ----------------------------------------- - -PYTHON_2_X=$3 -if [ -z "$PYTHON_2_X" ] ; then - PYTHON_2_X="2.6" -fi - -VE_2_X=$4 -if [ -z "$VE_2_X" ] ; then - VE_2_X="ve26" -fi - -f_open_section - -TITLE_F="Install LBC - LBConverter dependencies for python$PYTHON_2_X?" - -f_yes_no "$TITLE_F" -TITLE_F="" - -if [ ${SKIP_ON_V} -eq 1 ] || [ ${YES_NO_R} -eq 1 ] ; then - - cd "$SCRIPTDIR_V" - cd ./py-packs-LBConverter - - tar -zxvf ./ordereddict-1.1.tar.gz - cd ./ordereddict-1.1 - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install" - cd .. - rm -rf ./ordereddict-1.1 - - tar -zxvf ./configparser-3.3.0r2.tar.gz - cd ./configparser-3.3.0r2 - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install" - cd .. - rm -rf ./configparser-3.3.0r2 - - tar -zxvf ./pdfminer-20140328.tar.gz - cd ./pdfminer-20140328 - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install" - cd .. - rm -rf ./pdfminer-20140328 - - tar -zxvf ./requests-2.3.0.tar.gz - cd ./requests-2.3.0 - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install" - cd .. - rm -rf ./requests-2.3.0 - - tar -zxvf ./PasteDeploy-1.5.2.tar.gz - cd ./PasteDeploy-1.5.2 - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install" - cd .. - rm -rf ./PasteDeploy-1.5.2 - - tar -zxvf ./venusian-1.0.tar.gz - cd ./venusian-1.0 - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install" - cd .. - rm -rf ./venusian-1.0 - - tar -zxvf ./translationstring-1.3.tar.gz - cd ./translationstring-1.3 - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install" - cd .. - rm -rf ./translationstring-1.3 - - tar -zxvf ./zope.deprecation-4.1.2.tar.gz - cd ./zope.deprecation-4.1.2 - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install" - cd .. - rm -rf ./zope.deprecation-4.1.2 - - tar -zxvf ./zope.interface-4.1.3.tar.gz - cd ./zope.interface-4.1.3 - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install" - cd .. - rm -rf ./zope.interface-4.1.3 - - tar -zxvf ./repoze.lru-0.6.tar.gz - cd ./repoze.lru-0.6 - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install" - cd .. - rm -rf ./repoze.lru-0.6 - - tar -zxvf ./WebOb-1.5.1.tar.gz - cd ./WebOb-1.5.1 - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install" - cd .. - rm -rf ./WebOb-1.5.1 - - tar -zxvf ./pyramid-1.6b2.tar.gz - cd ./pyramid-1.6b2 - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install" - cd .. - rm -rf ./pyramid-1.6b2 - - tar -zxvf ./pbr-0.10.0.tar.gz - cd ./pbr-0.10.0 - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install" - cd .. - rm -rf ./pbr-0.10.0 - - tar -zxvf ./linecache2-1.0.0.tar.gz - cd ./linecache2-1.0.0 - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install" - cd .. - rm -rf ./linecache2-1.0.0 - - tar -zxvf ./traceback2-1.4.0.tar.gz - cd ./traceback2-1.4.0 - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install" - cd .. - rm -rf ./traceback2-1.4.0 - - tar -zxvf ./six-1.7.2.tar.gz - cd ./six-1.7.2 - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install" - cd .. - rm -rf ./six-1.7.2 - - tar -zxvf ./argparse-1.3.0.tar.gz - cd ./argparse-1.3.0 - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install" - cd .. - rm -rf ./argparse-1.3.0 - - tar -zxvf ./unittest2-1.0.1.tar.gz - cd ./unittest2-1.0.1 - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install" - cd .. - rm -rf ./unittest2-1.0.1 - - tar -zxvf ./Chameleon-2.24.tar.gz - cd ./Chameleon-2.24 - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install" - cd .. - rm -rf ./Chameleon-2.24 - - tar -zxvf ./pyramid_chameleon-0.3.tar.gz - cd ./pyramid_chameleon-0.3 - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install" - cd .. - rm -rf ./pyramid_chameleon-0.3 - - tar -zxvf ./waitress-0.8.10.tar.gz - cd ./waitress-0.8.10 - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install" - cd .. - rm -rf ./waitress-0.8.10 - - tar -zxvf ./xlrd-0.9.4.tar.gz - cd ./xlrd-0.9.4 - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install" - cd .. - rm -rf ./xlrd-0.9.4 - - tar -zxvf ./BeautifulSoup-3.2.1.tar.gz - cd ./BeautifulSoup-3.2.1 - eval "$BASE_INST_DIR_V/$VE_2_X/bin/python$PYTHON_2_X setup.py install" - cd .. - rm -rf ./BeautifulSoup-3.2.1 - -fi -- libgit2 0.21.2