Instalador de Código Fonte

Publicado por Mac (última atualização em 24/09/2019)

[ Hits: 498 ]

Homepage: sem

Download gamma.sh




NOTA: executar como root.

É um código criado para fazer instalações de programas pelo código fonte, assim como desinstalá-los.

Através dessas ações. o instalador conta com dois arquivos de requisito, um do programa e outro para seu local em disco. Outras informações estão no cabeçalho do código.

Modos de instalação:

1) Criando alias no arquivo /root/.bashrc. Exemplo:

alias sci-G-2.0='sh /home/$USER/source_code_installer_gamma.2.0'

2) Colocando o programa em um dos diretórios da variável PATH. Exemplo: /usr/bin

3) Adicionar o caminho onde se localiza o programa na variável PATH.

Requisitos:

a) dialog
b) make

Versão atual: GAMMA 2.0

Qualquer bug, reporte nos comentários e claro, diga sua opinião também!

Próximas versões vão vir com tela para interação, depois dessa, com opções na linha de comando.

Caso ache o código meio bruto é porque ainda estou aprendendo shell script.

  



Esconder código-fonte

#!/bin/bash
#
# NOTA: !!!!!! EXECUTAR O CÓDIGO LOGADO COMO ROOT !!!!!!!
# 
# Nome: Instalador de Código-Fonte G-2.0
# 
# Informação:
#
# AUTOR: Mac Brener
# NICK:  Skaylen Viva-o-linux
# LOCAL: /home/mac/script
#
# Descrição do programa:
#
# O programa Intalador de Código Fonte G-2.0, instala 0 programa 
# pelo seu código fonte.
 
# Já realizado o download do programa desejado, o Instalador faz a 
# cópia e envia o programa para uma pasta que é criada pelo usuário. 

# Enviado o progama para 'pasta', o Instalador realiza  uma análise 
# de qual tipo de compactação tem o arquivo e extrai. 

#Feita a extração,  o Instalador verifica a existência dos arquivos que tem as instruções 
# de compilação e instalação do programa que são os seguintes arquivos: 

# INSTALL, README, configure, Makefile, README.linux. Caso os arquivos 
# existam principalmente os: README, configure, Makefile, 

# O Instalador de Código-Fonte executa os comandos: 
# ./configure && make && make install && make clean, dentro da pasta do
# programa.

# Além disso, ele dispõe da opção de fazer mais de uma vez, 
# porém somente depois de ter feito todo o processo, retornando para a 
# cópia do arquivo comprimido.

# Arquivos de configuração:
# 
# 1) source_code_installer-gamma.log: 
# ==> Arquivo para o registro dos programas instalados com o nome,
#     versão e data/hora de instalação.
#
# 2) caminho_programa.log:
# ==> Arquivo que armazena o caminho do diretório do programa instalado.

#     Este documento é usado para a desinstalação.
#
# Versões: 
#
# <Versões>               <Modificações>
# 
#  ALPHA >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#
# ALPHA Versão 1.0 ==> Original.
# ALPHA Versão 1.1 ==> Incrementação dos comentários e explicações.
# ALPHA Versão 1.2 ==> Foi renomeado as variáveis e funções.
# ALPHA Versão 1.3 ==> Corresão da função criar_pasta.
# ALPHA Versão 1.4 ==> Corresão da função existencia.
# ALPHA Versão 1.5 ==> Criação da função log.
# ALPHA Versão 1.6 ==> Criação de títulos para as funções.
# ALPHA Versão 1.7 ==> Adição de linhas em branco.
# ALPHA Versão 1.8 ==> Releitura do código.
# ALPHA Versão 1.9 ==> Função desinstalar e correções.
# ALPHA Versão 2.0 ==> Correções.
# ALPHA Versão 2.1 ==> Correções de bugs.
# ALPHA Versão 3.0 ==> Adição da função registro.
# ALPHA Versão 4.0 ==> Adição da função deletar.
# ALPHA Versão 5.0 ==> Remoção da função user_comum. 
#                            ==> Na função deletar foi adionado resposta para
#                            ==> caso não ache o programa no arquivo caminho_programa.log 
#                            ==> com até 3 tentaticas.
# ALPHA Versão 6.0 ==> Remoção dos break do código.
#                            ==> Correção das variáveis de ambiente.
#                             ==> Alteações diversas.
#                             ==> Correção do bug na função desistalar.
#
#  BETA >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#
# BETA Versão 1.0  ==> Original, sem um programa de extração externo
# BETA Versão 2.0  ==> Correções. Alterações na função extrator.
#                            ==> Remoção do menu da função extrator.
#                              ==> Remoções de função de extração dos arquivos em tar.
#
#  GAMMA >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#
# GAMMA Versão 1.0 ==> Extrair os arquivos de forma independente do usuário.
#                              ==> Verificar os arquivos de configuração independente do usuário.
# GAMMA Versão 2.0 ==> Redução das opções da função do menu.
#                              ==> Processso continuo, sem retorno constante ao menu.
#
#

           ###################
# -> Menu que é exibido na tela do bash.
menu(){
# -> Limpa a tela para a execução do programa.
clear
            ###################
   echo
   echo ">>>>>>>>>> ------------------------------------------- <<<<<<<<<<"
   echo "        Instalador de Código-Fonte G-2.0 "
   echo ">>>>>>>>>> ------------------------------------------- <<<<<<<<<<" # -> Cabeçario do programa.
   echo 
   echo
   echo "         ------------------------------------------"
   echo "         |                 Menu                   |"
   echo "         ------------------------------------------"
   echo "         | [ 1 ] Iniciar                          |" # -> Função criar_pasta.
   echo "         | [ 2 ] Desistalar                       |" # -> Função desinstalar.
   echo "         | [ 3 ] Arquivos                         |" # -> Função registro
   echo "         | [ s ] Sair                             |" # -> Sair.
   echo "         ------------------------------------------"
   echo 
   echo -n "Digite o valor desejado: " 
   read num
           ###################
# -> Localiza as funções conforme a númeração.
 case $num in

   1) user_comum ;;
   2) desinstalar ;;
   3) registro ;;
   s) clear && exit ;;
   *) echo "Opção desconhecida."; menu ;;
   esac
 
}
           ###################
# -> Funções independentes <NÃO ALTERAR>.
           ###################
# -> Informa a pasta atual.
local_pasta(){
echo ">>>>>>>>>> ------------------------------------------- <<<<<<<<<<"
   echo -n "Você se encontra em:  " 
   sleep 0.4 
   pwd             
echo ">>>>>>>>>> ------------------------------------------- <<<<<<<<<<"
   echo
}
           ###################
# -> Exibe três pontos.
pontos(){
x=1;
while [ "$x" -le 3  ]; do
   let x=x+1;
   echo -n "."
   sleep 0.5
   done

   read
}
           ###################
# -> Paralisa a operação, até que seja pressionada a tecla <ENTER> ou outra tecla.
enter(){
echo ">>>>>>>>>> ------------------------------------------- <<<<<<<<<<"
   echo -n "Aperte <ENTER> para continuar"; pontos 
   #clear # -> Caso queira manter a tela mais limpa...                    
echo ">>>>>>>>>> ------------------------------------------- <<<<<<<<<<"
   echo
}
           ###################
# -> Deleta a pasta do programa que foi desinstalado, caso o usuário queira.
deletar(){
   read -p "Deseja deletar a pasta? [Sim(s) ou Não(n)]? " deletar

if [ "$deletar" != "${deletar#[Ss]}" ] ;then
   echo 
       cd $CAMINHO
   local_pasta   
   ls -la
   enter
   rm -dr $PASTA
echo ">>>>>>>>>> ------------------------------------------- <<<<<<<<<<"
   echo
   echo "Pasta deletada com sucesso!!!!"
   echo
   sleep 0.6
echo ">>>>>>>>>> ------------------------------------------- <<<<<<<<<<"
   ls -la    
   sed -i '$d' /root/.bashrc  # -> Remove a última linha do arquivo .bashrc;
   sed -i '$d' /root/.bashrc  # -> Cuidado ao fazer CTRL+C, no terminal,
   menu             # pode fazer o Instalador enviar as mesmas variáveis 
else                # para o arquivo .bashrc, só removendo manualmente
    remover_variaveis
    clear 
    sleep 2
    exit
fi
}
           ###################
# -> Verifica se a variável LOG está no arquivo /root/.bashrc,
# caso não esteja cria ela.
variavel(){

LOG=log; # -> Usada para o caminho dos arquivos de log.

if grep LOG /root/.bashrc; then
      echo
      echo "Variável existente."
      echo
      criar_pasta
else
   echo "Variável inexistente."
   echo
   read -p "Digite o caminho para os arquivos de log: " log
   echo
   echo "export LOG=$log" >> /root/.bashrc
   criar_pasta
fi
}
           ###################
# -> Verifica o arquivo /root/.bashrc existe,
# caso contrário, é criado.
documento_log(){

if [ -f /root/.bashrc ]; then
   echo
   echo "Arquivo .bashrc existente."
   sleep 1
   echo
   variavel
else
   echo
   echo "Arquivo .bashrc inexistente." 
   sleep 1
   echo
   touch .bashrc   
   echo ".bashrc criado com sucesso."  
   echo
   variavel
fi
}
           ###################
# -> Salva o usuário comum par air na pasta Downloads.
user_comum(){
echo ">>>>>>>>>> ------------------------------------------- <<<<<<<<<<"
echo "        Informe seu Usúario"
sleep 0.5
echo
   echo -n "Digite seu usuário comum: "
   sleep 1
   read usercm
   echo
   export usercm
   echo "Usuário salvo!!"
   echo
   local_pasta 
   enter
   sleep 1
   documento_log
}
           ###################
# -> Remove todas as variáveis do sistema que foram criadas.
remover_variaveis() { 
   unset usercm
   #unset caminho  # -> Não pode ser removido. 
   #unset pasta    # -> Não pode ser removido. 
   unset arquivo
   unset nome_arq
}
           ###################
# -> Aqui o programa exibe o que tem dentro da pasta Downloads,
# copia o arquivo e se dirige para a pasta criada pelo usuário. 
# Ainda verifica se o arquivo já foi copiado.
copiar_arquivo() { 
echo ">>>>>>>>>> ------------------------------------------- <<<<<<<<<<"
   echo "Direcionando para a pasta Downloads"
   sleep 0.5
   echo
   ls -l /home/$usercm/Downloads
echo ">>>>>>>>>> ------------------------------------------- <<<<<<<<<<"
echo "        Copiar Arquivo"
   sleep 0.5
   echo
   echo -n "Digite o nome do arquivo que deseja extrair: " 
   read arquivo 
   export arquivo 
   cd $caminho/$pasta
if [ -e $arquivo ]; then
   echo
   echo "Arquivo já foi copiado."
   sleep 0.5
   echo
   enter
   extrator
else
   cd /
   echo
   echo "Arquivo inexistente."
   sleep 0.5
   echo
   echo "Copiando arquivo..."
   sleep 0.5
   echo
   sleep 1
   cp -v /home/$usercm/Downloads/$arquivo $caminho/$pasta && cd $caminho/$pasta
echo ">>>>>>>>>> ------------------------------------------- <<<<<<<<<<"
   echo
   echo "Arquivo copiado!!"
   sleep 0.5
   echo
   local_pasta
    enter
   extrator 
fi
}
           ###################
# -> Instala do programa sem o comando ./configure.
instalarx(){
echo ">>>>>>>>>> ------------------------------------------- <<<<<<<<<<"
echo "        Instalar"
sleep 0.5
echo
   local_pasta
   enter
   make && make clean && make install 
   enter
   dialogo(){
   dialog --title 'ATENÇÃO!!!!!' \
   --msgbox 'Não apague a pasta do programa, ela 
é necessária para a desinstalação.' 6 40
   clear
}      
   dialogo   
   read -p "Deseja instalar mais um programa? [Sim(s) ou Não(n)] " sn
   
if [ "$sn" != "${sn#[Ss]}" ] ;then
   echo 
   copiar_arquivo
   
      else
       echo 
      remover_variaveis 
       clear 
      exit 
 fi  
}
           ###################
# Fim das funções independentes.
           ###################
# Abre os arquivos de log do Instalador.
registro(){

clear
   echo
   echo "         -------------------------------------------------"
   echo "         |         Arquivos de Registro                  |"
   echo "         -------------------------------------------------"
   echo "         | [ 1 ] Abrir install-code-source-alph.log      |" 
   echo "         |-[+++++++++++++++++++++++++++++++++++++++++++]-|" 
   echo "         | [ 2 ] Abrir caminho_programa.log              |" 
   echo "         |-[+++++++++++++++++++++++++++++++++++++++++++]-|" 
   echo "         | [ 3 ] Voltar                                  |" 
   echo "         -------------------------------------------------"
   echo 
   echo -n "Digite o valor desejado: " 
   read numero
   sleep 1
   echo
           ###################
 case $numero in
   # Caso queira mudar o endereço altere nos itens '1' e '2'.
   1) nano $LOG/source_code_installer-alph.log && registro;;
   2) nano $LOG/caminho_programa.log && registro ;;
   3) clear; menu ;;
   *) echo "Opção desconhecida."; registro ;;
   esac
 
}
           ###################
# -> Cria uma pasta com o nome desejado que será mandado o arquivo 
# comprimido. Além disso, ele salva o caminho para a pasta para 
# iniciar a extração, pórem antes verifica e a pasta existe no endeço infomado.
criar_pasta(){
          ###################
# Salva o nome do usuário, que servirá para entrar nas pastas
# mesmo estando como ROOT.
echo ">>>>>>>>>> ------------------------------------------- <<<<<<<<<<"
echo "        Criar Pasta"
sleep 0.5
   echo
   echo -n "Digite o local para a criação: "
   read caminho 
   sleep 0.5
   echo
   echo -n "Digite o nome da pasta: " 
   read pasta 
   echo "export CAMINHO="$caminho"" >> /root/.bashrc # -> Exporta a variáriavel para o arquivo .bashrc.
   echo "export PASTA="$pasta"" >> /root/.bashrc     

  if [ -d "$caminho/$pasta" ]; then
   echo
   echo "$pasta existe."
   sleep 0.5                               # -> Caso a respota seja verdadeira 
   echo                          # a condicional chama a função   
   copiar_arquivo                    # copiar_arquivo.  
  else
   echo "Pasta inexistente."      # -> Caso a resposta seja falsa a condicional 
   echo          # cria a pasta e chama a função copiar_arquivo. 
   mkdir $caminho/$pasta
   echo "Pasta criada!!!"
   echo
   sleep 0.5
    enter
   copiar_arquivo
 fi

}


# -> O Instalar extrai de acordo com a extensão, de forma independente.
extrator() {
echo "               Extrator"
echo ">>>>>>>>>> ------------------------------------------- <<<<<<<<<<"
echo

   local_pasta
   cd  $caminho/$pasta
   local_pasta
   ls -la $nome_arquivo
   enter

# Variáveis para a comparação.
pesquisa=$(find -maxdepth 1 -iname "*.tar.gz" -o -iname "*.tar.bz" -o \
-iname "*.tar.bz2" -iname "*.tar.xz" -o -iname "*.zip" -o -iname "*.tar");
ext7=$(echo $pesquisa | rev | cut -c 1-7 | rev)
ext4=$(echo $pesquisa | rev | cut -c 1-4 | rev)

           ###################

if [ "$ext7" == ".tar.gz" ]; then   
   echo
   ls -l 
   echo
   tar -xzvf $pesquisa
   rm $pesquisa
   echo
   echo "Extração concluida!!!"
   echo
   ls -l
   enter
   verificar_arquivos

elif [ "$ext7" == ".tar.bz" ]; then
   echo
   ls -l 
   echo
   tar -xjvf $pesquisa 
   rm $pesquisa
   echo
   echo "Extração concluida!!!"
   echo
   ls -l
   enter
   verificar_arquivos

elif [ "$ext7" == "tar.bz2" ]; then
   echo
   ls -l 
   echo
   tar -xjvf $pesquisa 
   rm $pesquisa
   echo
   echo "Extração concluida!!!"
   echo
   ls -l
   enter
   verificar_arquivos

elif [ "$ext7" == ".tar.xz" ]; then
   echo
   ls -l 
   echo
   tar -xJvf $pesquisa 
   rm $pesquisa
   echo
   echo "Extração concluida!!!"
   echo
   ls -l
   enter
   verificar_arquivos

elif [ "$ext4" == ".zip" ]; then
   echo
   ls -l 
   echo
   unzip -v $pesquisa
   rm $pesquisa 
   echo
   echo "Extração concluida!!!"
   echo
   ls -l
   enter
   verificar_arquivos

elif [ "$ext4" == ".tar" ]; then
   echo
   ls -l 
   echo
   tar -xvf $pesquisa 
   rm $pesquisa
   echo
   echo "Extração concluida!!!"
   echo
   ls -l
   enter
   verificar_arquivos

else 
   echo
   echo "Ouve algum erro!!!"
    echo
   echo " :("
   echo
   remover_variaveis
   exit 1

fi
}
           ###################
# -> O Instalador verifica a existência dos arquivos: 
# INSTALL, README, configure, Makefile, README.linux, 
# dependendo de qual seja ele segue para função instalar ou sai do programa.
verificar_arquivos() {
echo ">>>>>>>>>> ------------------------------------------- <<<<<<<<<<"
echo "        Verificar Arquivos de Instalação"
sleep 0.5
echo
   local_pasta
   ls -la # Tenho que está no caminho /$caminho/&pasta.
   nome_arq=`ls`
   export nome_arq
   sleep 1
   echo
   enter
   # A função log faz o registro do programa instalado.
   log(){
      echo "#####################################################"
      echo
      echo "PROGRAMA: $nome_arq"
      echo "DATA: `date`"
      echo
}
   cd $caminho/$pasta/$nome_arq
   log >> /home/mac/script/log_scripts/source_code_installer-gamma.log
   echo "$caminho/$pasta/$nome_arq" >> /home/mac/script/log_scripts/caminho_programa.log
   ls -la # Estou na pasta que extrai, $nome_arq.
   echo
   enter
           ###################
#Variáveis dos arquivos.
install=INSTALL 
CONFIGURE=configure 
readme=README 
make=Makefile
read_linux=README.linux
           ###################
   documento(){
# Condicional verifica se os arquivos se encontra na pasta especificada.
if [ -e "$install" ]; then 
   echo
   echo "Arquivo $install se encontra."
   sleep 1
   echo
   nano $install
   sleep 0.5
   instalar
   elif [ -e "$readme" ]; then
   echo
   echo "Arquivo $readme se encontra."
   sleep 1
   echo
   nano $readme
   sleep 0.5
   instalar
   elif [ -e "$make]" ]; then
   echo
   echo "Arquivo $make se encontra."
   sleep 1
   echo
   sleep 0.5
   instalar   
   elif [ -e "$read_linux" ]; then
   echo
   echo "Arquivo $read_linux se encontra."
   sleep 1
   echo
   nano $read_linux
   sleep 0.5
   instalar
 else    # -> Caso não encontre os arquivos...
   echo   
   echo "Arquivos inexistentes."
   sleep 1 
   echo                                 
   xdg-open $caminho/$pasta/$nome_arq # -> Abre a pasta do programa. 
   remover_variaveis
   exit
fi
}
           ###################
# -> Condicional verifica se o arquivo configure existe,
# caso exista o programa pode execultar ./configure, 
# pelo contrário não poderá.
if [ -e "$CONFIGURE" ]; then
echo ">>>>>>>>>> ------------------------------------------- <<<<<<<<<<"
   echo
   echo "Arquivo $CONFIGURE se encontra."
   echo
   sleep 1
   documento
   instalar
else
   echo
   echo "Arquivo inexistente."
   echo
   sleep 1
   documento   
   instalarx
fi


}
           ###################
# -> Aqui é executado a compilação e a instalação do programa 
# pelo seu código fonte.
instalar() {
echo ">>>>>>>>>> ------------------------------------------- <<<<<<<<<<"
echo "        Compilar & Instalar"
sleep 1
echo
   local_pasta
   enter
   ./configure && make && make clean && make install 
   echo 
echo ">>>>>>>>>> ------------------------------------------- <<<<<<<<<<"
   echo
   echo "Trabalho Concluido!!!!!"
   echo
   enter
   dialogo(){ 
   dialog --title 'ATENÇÃO!!!!!' \
   --msgbox 'Não apague a pasta do programa, ela 
é necessária para a desinstalação.' 6 40
   clear
}       
   dialogo     
   read -p "Deseja instalar mais um programa? [Sim(s) ou Não(n)] " sn
   
if [ "$sn" != "${sn#[Ss]}" ] ;then
   echo 
   copiar_arquivo
   
      else
       echo 
      remover_variaveis 
       clear 
      exit 
 fi  
}

           ###################
# -> Para desistalar o programa.
desinstalar(){
           ###################
   verificar(){
   
# -> Arquivos.
CONFIGURE=configure 
make=Makefile
           ###################
# -> Condicional verifica se os arquivos se encontra na pasta expecificada.
if [ -e "$CONFIGURE" ]; then
   echo
echo ">>>>>>>>>> ------------------------------------------- <<<<<<<<<<"
   echo
   echo "Arquivo $CONFIGURE se encontra."
   sleep 1
   echo
echo ">>>>>>>>>> ------------------------------------------- <<<<<<<<<<"
   ./configure && make uninstall && make clean # -> Executa a configuração e a desinstalação.
   enter
   deletar
   menu # -> Volta para o menu.
   elif [ -e "$make" ]; then
   echo
echo ">>>>>>>>>> ------------------------------------------- <<<<<<<<<<"
   echo "Arquivo $make se encontra."
   sleep 1
   echo
   make uninstall && make clean # Executa a desinstalação.
   deletar
   enter
   menu 
   
 else 
   echo
echo ">>>>>>>>>> ------------------------------------------- <<<<<<<<<<"
   echo "Arquivos inexistentes"
   sleep 1 
   echo
echo ">>>>>>>>>> ------------------------------------------- <<<<<<<<<<"
   echo "Impossível desinstalar"
   echo
   sleep 1   
   exit
fi
}
           ###################
echo ">>>>>>>>>> ------------------------------------------- <<<<<<<<<<"
echo "        Desinstalar"
sleep 05
echo
# -> Variável.
x=1;
   cd $LOG/

# -> Procura o caminho no arquivo, caso não ache tem o número de até 3 tentativas,
# caso seja certo ele avisa e prossegue com o programa.
while [ $x -le 3 ]; do
   let x=x+1;
read -p "Digite o nome do programa que deseja desinstalar: " desinstalar
if grep -w "$desinstalar" caminho_programa.log; then
   echo
   echo -e  "Programa encontrado ${desinstalar}."
   read -p "Informe o caminho do programa: " programa
   cd $programa
   echo
   verificar
else
   echo
   echo -e  "Programa não encontrado ${desinstalar}."
   echo
   sleep 1
   echo
fi
           ###################
done
           ###################
}
           ###################
menu # -> A Função principal "menu" tem que está por 
     # último para leitura de todas as opções do programa.
# -> Código Finalizado.
           ###################

Scripts recomendados

POSTFIX AUTOMÁTICO COM MYSQL E IPTABLES - CRIANDO USUÁRIOS

Script para renomear arquivos

ORACLE 10.2g - Fazendo Restore

Compilar OpenSSL

DHCP com Proxy Squid


  

Comentários
[1] Comentário enviado por aguamole em 07/10/2019 - 19:51h

Eu quero muito testar mais eu não consegue entender a logica da instalação.

CPU i5-8400 GTX 750 SofRaid 4xSSD 16GB DDR4 mesmo assim uso Lubuntu.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts