Get Tool
Publicado por Lucas Allan 27/01/2007
[ Hits: 5.789 ]
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!
#!/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
Baby Percent - Converte Semanas da Gestação em Porcentagem
Manipulação dos arquivos criados pelo Motion
Jogar Guitar Hero Online no controle
Verificar validade das assinaturas das zonas hospedadas no DNSSEC
Nenhum comentário foi encontrado.
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
Instalando partes faltantes do Plasma 6
Adicionar botão "mostrar área de trabalho" no Zorin OS
Como montar um servidor de backup no linux
Estou tentando ser legalista, mas tá complicado! (9)
espelhar monitores nao funciona (2)
SQLITE não quer funcionar no LINUX LMDE6 64 com Lazaruz 4.2 64bit (n... (1)









