Get Tool

Publicado por Lucas Allan 27/01/2007

[ Hits: 5.328 ]

Download gtool




O gtool é um simples script que serve para baixar e instalar pacotes no seu Slackware Linux. Por não usar apenas os mirrors oficiais, o gtool possui uma busca muito eficaz utilizando mirrors alternativos (linuxpackages.net).

;]

Espero que gostem!

  



Esconder código-fonte

#!/bin/sh


   # FUNCOES
alternative() {   
   versao=$( dialog --stdout --backtitle "$programaMSG" --title "Alternative" \
    --radiolist "Choose the slackware version" 8 60 0 \
    "11.0" "Packages for Slackware 11.0" OFF \
    "10.2" "Packages for Slackware 11.0" OFF \
    "10.1" "Packages for Slackware 11.0" OFF \
    "10.0" "Packages for Slackware 11.0" OFF \
    "all" "For all version" OFF )

   valor=`echo $versao | wc -w`
      
   if [ $valor -lt 1 ]; then
      dialog --backtitle "$programaMSG" --title "Invalid Option" \
      --infobox "You must choose an option from the list." 5 50
      sleep 2
      rm -f  $linksArquivo
      return 1
   fi

   busca=$( dialog --stdout --backtitle "$programaMSG" --title "Search"\
   --inputbox "Enter the word to search" 8 60 )
   
   valor=`echo $busca | wc -w`

   if [ $valor -lt 1 ]; then
      dialog --backtitle "$programaMSG" --title "Syntax Error" \
       --infobox "The value must be just one word." 5 50
      sleep 2
      return 1
   elif [ $valor -gt 1 ]; then
      dialog --backtitle "$programaMSG" --title "Syntax Error" \
       --infobox "The value must be just one word." 5 50
      sleep 2
      return 1
   fi
   
   if [ $versao = all ]; then      
      url='http://www.linuxpackages.net/search_view.php?by=name&name='$busca'&ver='
   else   
      url='http://www.linuxpackages.net/search_view.php?by=name&name='$busca'&ver='$versao
   fi

      # arquivo temporario para armazenar a lista de packs
   listaArquivos=$TMP'/lista.'$$
   
      # arquivo temporario para armazenar o log do Wget
   logWget=$TMP'/wget.'$$   
   
   dialog --backtitle "$programaMSG" --title "Search" \
    --infobox "Updating list of packages..." 5 50

   wget -x -o $logWget -O $listaArquivos $url
   
   valor=`cat "$logWget" | grep "Login incorrect"`
   rm -f $logWget
   valor=`echo $valor | wc -w`
   
   if [ $valor -gt 0 ]; then
      dialog --backtitle "$programaMSG" --title "Connection Error" \
       --msgbox "Sorry, the maximum number of clients (32) from\
       your class are already connected. Press any key. . ." 9 50
      rm -f $listaArquivos
      return 1
   fi
   
   resultado=`cat $listaArquivos | grep "\">Download<\/a>" | sed "s/\(.*\)\"\(.*\)\"\(.*\)/\2/"`
   rm -f $listaArquivos
   
   valor=`echo $resultado | wc -w`

   if [ $valor -lt 1 ]; then
      dialog --backtitle "$programaMSG" --title "Search Result"\
       --msgbox "Package not found." 10 60
   else
      linksArquivo=$TMP'/links.'$$

      (
         echo 'dialog --backtitle "$programaMSG" --title\
          "Search Result   : $valor files" --radiolist "Choose the package"\
          10 60 0 \'

         while [ $valor -gt 0 ]; do
            url=`echo $resultado | sed 's/\(\S*\)\s\(.*\)/\1/'`
            resultado=`echo $resultado | sed 's/\(\S*\)\s//'`
            pagina=`curl -s $url`

            nome=`echo $pagina | sed 's/\(.*\)file: \(\S*\)<br>\(.*\)/\2/'`
            
            tam=`echo $nome | wc -w`
   
            if [ $tam -gt 0 ]; then
               echo $nome '" " OFF \'
               echo $nome >> $linksArquivo
               echo $pagina | sed 's/\(.*\)<a href=\(\S*\)>HTTP<\(.*\)/\2/' >> $linksArquivo
            fi

            valor=`expr $valor '-' 1`
         done

         echo "2>$TMP/retorno.$$"
      ) > $TMP'/tela.$$'
      
      . $TMP'/tela.$$'
      rm -f $TMP'/tela.$$'
      
      opcao="`cat $TMP/retorno.$$`"
      rm -f $TMP'/retorno.$$'

      valor=`echo $opcao | wc -w`
      
      if [ $valor -lt 1 ]; then
         dialog --backtitle "$programaMSG" --title "Invalid Option" \
         --infobox "You must choose an option from the list." 5 50
         sleep 2
         rm -f  $linksArquivo
         return 1
      fi      
      
      tarefa=$( dialog --stdout --backtitle "$programaMSG" --title\
       "Task" --radiolist "Choose an option"\
       10 60 0 "Download" "Download a package" OFF\
       "Install" "Install a package" OFF\
       "Exit" "Go back to the menu" OFF )
      
      valor=`echo $tarefa | wc -w`
      
      if [ $valor -lt 1 ]; then
         dialog --backtitle "$programaMSG" --title "Invalid Option" \
         --infobox "You must choose an option from the list." 5 50
         sleep 2
         rm -f  $linksArquivo
         return 1
      fi

      link=`cat $linksArquivo | grep $opcao | sed 's/\(^http:\)\(.*\)/\1\2/'`
      rm -f  $linksArquivo
      
      if [ $tarefa = "Download" ]; then
         diretorio=$( dialog --stdout --backtitle "$programaMSG" --title "Download"\
          --inputbox "Enter the destination directory" 8 60 "`pwd`")

         if [ ! -d $diretorio ]; then
            dialog --backtitle "$programaMSG" --title "Invalid Directory" \
             --infobox "The following directory does not exist." 5 50
             sleep 2
            return 1
         fi
      
         diretorio=$diretorio'/'$opcao
         
         dialog --backtitle "$programaMSG" --title "Download" \
          --infobox "Downloading $opcao..." 5 50
         sleep 1
      
         wget -x -o $logWget -O $diretorio $link
         
         valor=`cat "$logWget" | grep "Login incorrect"`
         rm -f $logWget
         valor=`echo $valor | wc -w`
         
         if [ $valor -gt 0 ]; then
            dialog --backtitle "$programaMSG" --title "Connection Error" \
             --msgbox "Sorry, the maximum number of clients (32) from\
             your class are already connected. Press any key. . ." 9 50
            return 1
         fi
         
         dialog --backtitle "$programaMSG" --title "Download" \
          --infobox "Download successful." 5 50
         sleep 2
         
      elif [ $tarefa = "Install" ]; then   
         diretorio=$TMP'/'$opcao
         
         dialog --backtitle "$programaMSG" --title "Download" \
          --infobox "Downloading $opcao..." 5 50
         sleep 1
      
         wget -x -o $logWget -O $diretorio $link
         
         valor=`cat "$logWget" | grep "Login incorrect"`
         rm -f $logWget
         valor=`echo $valor | wc -w`
         
         if [ $valor -gt 0 ]; then
            dialog --backtitle "$programaMSG" --title "Connection Error" \
             --msgbox "Sorry, the maximum number of clients (32) from\
             your class are already connected. Press any key. . ." 9 50
            return 1
         fi
         
         dialog --backtitle "$programaMSG" --title "Download" \
          --infobox "Download successful." 5 50
         sleep 1
         
         dialog --backtitle "$programaMSG" --title "Install" \
          --infobox "Installing package data..." 5 50
      
         /sbin/installpkg $diretorio > /dev/null
      
         dialog --backtitle "$programaMSG" --title "Install" \
          --infobox "Install successful." 5 50
         sleep 1
      
         rm -f $diretorio         
      elif [ $tarefa = "Exit" ]; then   
         return 1
      fi
   fi
   
   return 0
}

credits(){
   dialog --msgbox "Credits: \n\n\n Roque Pinel <repinel[a]gmail.com \n\n Lucas Allan <lucas.allan[a]gmail.com\n\n www.got2think.org\n\n" 15 60 

}
   
search() {
   busca=$( dialog --stdout --backtitle "$programaMSG" --title "Search"\
    --inputbox "Enter the word to search" 8 60 )

   valor=`echo $busca | wc -w`

   if [ $valor -lt 1 ]; then
      dialog --backtitle "$programaMSG" --title "Syntax Error" \
       --infobox "The value must be just one word." 5 50
      sleep 2
      return 1
   elif [ $valor -gt 1 ]; then
      dialog --backtitle "$programaMSG" --title "Syntax Error" \
       --infobox "The value must be just one word." 5 50
      sleep 2
      return 1
   fi

      # arquivo temporario para armazenar a lista de packs
   listaArquivos=$TMP'/lista.'$$
   
      # arquivo temporario para armazenar o log do Wget
   logWget=$TMP'/wget.'$$
   
   dialog --backtitle "$programaMSG" --title "Search" \
    --infobox "Updating list of packages..." 5 50

   wget -x -o $logWget -O $listaArquivos ftp://ftp.slackware-brasil.com.br/slackware-current/FILELIST.TXT
   
   valor=`cat "$logWget" | grep "Login incorrect"`
   rm -f $logWget
   valor=`echo $valor | wc -w`
   
   if [ $valor -gt 0 ]; then
      dialog --backtitle "$programaMSG" --title "Connection Error 530" \
       --msgbox "Sorry, the maximum number of clients (32) from\
       your class are already connected. Press any key. . ." 9 50
      rm -f $listaArquivos
      return 1
   fi

   resultado=`cat $listaArquivos | grep -i $busca | grep -i 'tgz$' | sed "s/\(.*\)\($busca.*\)/\2/I"`
   rm -f $listaArquivos
   valor=`echo $resultado | wc -w`

   if [ $valor -lt 1 ]; then
      dialog --backtitle "$programaMSG" --title "Search Result"\
       --msgbox "Package not found." 10 60
   else      
      dialog --backtitle "$programaMSG" --title "Search Result: $valor files"\
       --msgbox "`echo $resultado | sed "s/\s/\n/g" | sort`" 10 60
   fi
   
   return 0
}

sizeof() { du -s "$1" | cut -f1; }
running(){ ps $1 | grep $1 >/dev/null; }

download() {
   busca=$( dialog --stdout --backtitle "$programaMSG" --title "Download"\
    --inputbox "Enter the program name" 8 60 )

   valor=`echo $busca | wc -w`

   if [ $valor -lt 1 ]; then
      dialog --backtitle "$programaMSG" --title "Syntax Error" \
       --infobox "The value must be just one word." 5 50
      sleep 2
      return 1
   elif [ $valor -gt 1 ]; then
      dialog --backtitle "$programaMSG" --title "Syntax Error" \
       --infobox "The value must be just one word." 5 50
      sleep 2
      return 1
   fi

      # arquivo temporario para armazenar a lista de packs
   listaArquivos=$TMP'/lista.'$$

      # arquivo temporario para armazenar o log do Wget
   logWget=$TMP'/wget.'$$

   dialog --backtitle "$programaMSG" --title "Search" \
    --infobox "Updating list of packages..." 5 50

   wget -x -o $logWget -O $listaArquivos ftp://ftp.slackware-brasil.com.br/slackware-current/FILELIST.TXT
   
   valor=`cat "$logWget" | grep "Login incorrect"`
   rm -f $logWget
   valor=`echo $valor | wc -w`
   
   if [ $valor -gt 0 ]; then
      dialog --backtitle "$programaMSG" --title "Connection Error 530" \
       --msgbox "Sorry, the maximum number of clients (32) from\
       your class are already connected. Press any key. . ." 9 50
      rm -f $listaArquivos
      return 1
   fi

   resultado=`cat $listaArquivos | grep -i $busca | grep -i 'tgz$' | sed "s/\(.*\)\($busca.*\)/\2/I"`

   valor=`echo $resultado | wc -w`

   if [ $valor -lt 1 ]; then
      dialog --backtitle "$programaMSG" --title "Search Result"\
       --msgbox "Package not found." 10 60
      rm -f $listaArquivos
   else
      (
         echo 'dialog --backtitle "$programaMSG" --title\
          "Search Result   : $valor files" --radiolist "Choose the package"\
          10 60 0 \'
          
         echo $resultado | sed 's/ / " " OFF /g;s/\(.$\)/\1 " " OFF \\/g'
      
         echo "2>$TMP/retorno.$$"
      ) > $TMP'/tela.$$'
      
      . $TMP'/tela.$$'
      rm -f $TMP'/tela.$$'
      
      opcao="`cat $TMP/retorno.$$`"
      rm -f '$TMP/retorno.$$'
      
      valor=`echo $opcao | wc -w`
      
      if [ $valor -lt 1 ]; then
         dialog --backtitle "$programaMSG" --title "Invalid Option" \
         --infobox "You must choose an option from the list." 5 50
         sleep 2
         rm -f $listaArquivos
         return 1
      fi
         
      diretorio=$( dialog --stdout --backtitle "$programaMSG" --title "Download"\
       --inputbox "Enter the destination directory" 8 60 "`pwd`")

      if [ ! -d $diretorio ]; then
         dialog --backtitle "$programaMSG" --title "Invalid Directory" \
          --infobox "The following directory does not exist." 5 50
          sleep 2
         rm -f $listaArquivos
         return 1
      fi

      urlArquivo=`cat $listaArquivos | grep -i $opcao | grep -i 'tgz$' | sed "s/\(.*\)\(\.\/.*\)/\2/I" | sed "s/\.\///"`
      TOTAL=`cat $listaArquivos | grep -i $opcao | grep -i 'tgz$' | sed "s/\(.*\)root\( *\)\([0-9]*\)\(.*\)/\3/"`
      rm -f $listaArquivos
      
      diretorio=$diretorio'/'$opcao
      
      wget -x -o $logWget -O $diretorio ftp://ftp.slackware-brasil.com.br/slackware-current/$urlArquivo &
      
### barra de progresso para download INICIO
      CPPID=$!
      
      valor=`cat "$logWget" | grep "Login incorrect"`
      rm -f $logWget
      valor=`echo $valor | wc -w`
      
      if [ $valor -gt 0 ]; then
         dialog --backtitle "$programaMSG" --title "Connection Error 530" \
          --msgbox "Sorry, the maximum number of clients (32) from\
          your class are already connected. Press any key. . ." 9 50
         return 1
      fi
      
      TOTAL=`expr $TOTAL '/' 1024`
      EXP=0

         # caso o usuário cancele, interrompe a cópia
      trap "kill $CPPID" 2 15
      
         # loop de checagem de status da cópia
      (
            # enquanto o processo de cópia estiver rodando
         while running $CPPID; do
               # quanto já foi copiado?
            COPIADO=$(sizeof $diretorio)

               # qual a porcentagem do total?
            EXP=`expr $COPIADO '*' 100 '/' $TOTAL`
      
               # envia a porcentagem para o dialog
            echo "$EXP"
      
               # aguarda até a próxima checagem
            sleep $INTERVALO
         done   

            # cópia finalizada, mostra a porcentagem final
         echo 100
   
      ) | dialog --backtitle "$programaMSG" --title "Download..."\
       --gauge "Downloading $opcao" 8 40 0

### barra de progresso para download FIM
   fi
   
   return 0
}

install() {
   busca=$( dialog --stdout --backtitle "$programaMSG" --title "Install"\
    --inputbox "Enter the program name" 8 60 )

   valor=`echo $busca | wc -w`

   if [ $valor -lt 1 ]; then
      dialog --backtitle "$programaMSG" --title "Syntax Error" \
       --infobox "The value must be just one word." 5 50
      sleep 2
      return 1
   elif [ $valor -gt 1 ]; then
      dialog --backtitle "$programaMSG" --title "Syntax Error" \
       --infobox "The value must be just one word." 5 50
      sleep 2
      return 1
   fi

      # arquivo temporario para armazenar a lista de packs
   listaArquivos=$TMP'/lista.'$$
   listaArquivos='./FILELIST.TXT'   

      # arquivo temporario para armazenar o log do Wget
   logWget=$TMP'/wget.'$$
   
   dialog --backtitle "$programaMSG" --title "Search" \
    --infobox "Updating list of packages..." 5 50

   wget -x -o $logWget -O $listaArquivos ftp://ftp.slackware-brasil.com.br/slackware-current/FILELIST.TXT
   
   valor=`cat "$logWget" | grep "Login incorrect"`
   rm -f $logWget
   valor=`echo $valor | wc -w`
   
   if [ $valor -gt 0 ]; then
      rm -f $listaArquivos
      dialog --backtitle "$programaMSG" --title "Connection Error 530" \
       --msgbox "Sorry, the maximum number of clients (32) from\
       your class are already connected. Press any key. . ." 9 50
      return 1
   fi

   resultado=`cat $listaArquivos | grep -i $busca | grep -i 'tgz$' | sed "s/\(.*\)\($busca.*\)/\2/I"`

   valor=`echo $resultado | wc -w`

   if [ $valor -lt 1 ]; then
      dialog --backtitle "$programaMSG" --title "Search Result"\
       --msgbox "Package not found." 10 60
   else
      (
         echo 'dialog --backtitle "$programaMSG" --title\
          "Search Result   : $valor files" --radiolist "Choose the package"\
          10 60 0 \'
          
         echo $resultado | sed 's/ / " " OFF /g;s/\(.$\)/\1 " " OFF \\/g'
      
         echo "2>$TMP/retorno.$$"
      ) > $TMP'/tela.$$'
      
      . $TMP'/tela.$$'
      rm -f $TMP'/tela.$$'
      
      opcao="`cat $TMP/retorno.$$`"
      rm -f $TMP'/retorno.$$'
      
      valor=`echo $opcao | wc -w`
      
      if [ $valor -lt 1 ]; then
         dialog --backtitle "$programaMSG" --title "Invalid Option" \
         --infobox "You must choose an option from the list." 5 50
         sleep 2
         rm -f $listaArquivos
         return 1
      fi
         
      urlArquivo=`cat $listaArquivos | grep -i $opcao | grep -i 'tgz$' | sed "s/\(.*\)\(\.\/.*\)/\2/I" | sed "s/\.\///"`
      TOTAL=`cat $listaArquivos | grep -i $opcao | grep -i 'tgz$' | sed "s/\(.*\)root\( *\)\([0-9]*\)\(.*\)/\3/"`
      rm -f $listaArquivos

      diretorio=$TMP'/'$opcao
      
      wget -x -o $logWget -O $diretorio ftp://ftp.slackware-brasil.com.br/slackware-current/$urlArquivo &

### barra de progresso para download INICIO
      CPPID=$!
      
      valor=`cat "$logWget" | grep "Login incorrect"`
      rm -f $logWget
      valor=`echo $valor | wc -w`
      
      if [ $valor -gt 0 ]; then
         dialog --backtitle "$programaMSG" --title "Connection Error 530" \
          --msgbox "Sorry, the maximum number of clients (32) from\
          your class are already connected. Press any key. . ." 9 50
         return 1
      fi
      
      TOTAL=`expr $TOTAL '/' 1024`
      EXP=0

         # caso o usuário cancele, interrompe a cópia
      trap "kill $CPPID" 2 15
      
         # loop de checagem de status da cópia
      (
            # enquanto o processo de cópia estiver rodando
         while running $CPPID; do
               # quanto já foi copiado?
            COPIADO=$(sizeof $diretorio)

               # qual a porcentagem do total?
            EXP=`expr $COPIADO '*' 100 '/' $TOTAL`
      
               # envia a porcentagem para o dialog
            echo "$EXP"
      
               # aguarda até a próxima checagem
            sleep $INTERVALO
         done   

            # cópia finalizada, mostra a porcentagem final
         echo 100
   
      ) | dialog --backtitle "$programaMSG" --title "Download..."\
       --gauge "Downloading $opcao" 8 40 0

### barra de progresso para download FIM
      
      dialog --backtitle "$programaMSG" --title "Install" \
       --infobox "Installing package data..." 5 50
      
      /sbin/installpkg $diretorio > /dev/null
      
      dialog --backtitle "$programaMSG" --title "Install" \
       --infobox "Install successful." 5 50
      sleep 1
      
      rm -f $diretorio
   fi

   return 0
}

   # STARTING MAIN

   # titulo dialog   
programaMSG="Get Tool Program"
   # diretorio para arquivos temporarios
TMP='/tmp'
   # tempo para atualizacao da barra de download
INTERVALO=1      


while [ 0 ]; do
   dialog --backtitle "$programaMSG" --title \
    "Main Menu" --menu\
    "Welcome to Get Tool Program"\
    8 60 0\
    Download "Download the package" \
    Install "Install the package" \
    Search "Search for a package" \
    Alternative "Search in alternative mirror" \
    Credits "Credits"\
    Exit "Exit program" 2>/tmp/menuitem.$$ 
       
   if [ ! $? = 0 ]; then
      dialog --clear
      exit
   fi
       
   menuitem=`cat /tmp/menuitem.$$`
   rm -f /tmp/menuitem.$$

   case $menuitem in
      Download) download ;;
      Install) install ;;
      Search) search ;;
      Alternative) alternative ;;
      Credits) credits;;
      Exit) dialog --clear; exit;;
   esac
done

dialog --clear
exit

#END OF THE SOURCE

Scripts recomendados

Criando redundância de links

Instalação de programas em Debian-like

Lista usuários

Script de compilação do kernel 3.3.4 no Ubuntu 11.10 64 bits

ddp - dd com porcentagem


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts