Get Tool

Publicado por Lucas Allan 27/01/2007

[ Hits: 5.458 ]

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

Script de compilação do kernel 3.3.2 com cflags -march=native e patch 3.3.0-ck1 para ubuntu 11.10

Desligar o servidor quando todas as estações estiverem desligadas

Montar e Abrir CD/DVD

Controle de cópia de arquivos por tamanho

Criando contas de usuario em varios servidores ao mesmo tempo


  

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