Baixa os pacotes de uma determinada vers„o do Slackware para posterior atualizaÁao

Publicado por Rodrigo Albuquerque Serafim (ķltima atualizaÁ„o em 07/01/2018)

[ Hits: 610 ]

Homepage: https://www.vivaolinux.com.br/~raserafim

Download script-down-pkg-slackware.sh




Baixa os pacotes de uma determinada versão do Slackware para posterior atualização do sistema em off-line.


Ou seja, o Script faz o download dos pacotes de uma determinada versão do Slackware para possibilitar uma posterior atualização do sistema de maneira off-line.

Características de Operação:
- faz apenas o download dos pacotes de uma determinada versão do Slackware;
- possibilita uma posterior atualização do sistema de maneira off-line.
- não faz nenhuma alteração no sistema;
- é possível selecionar alguns conjuntos de pacotes (diretórios) para o download;
- quando seleciona o KDE faz o download apenas das linguagens informadas;
- informa o espaço estimado dos downloads;
- faz verificação da integridade dos pacotes em quatro dimensões:
   - verifica através do wget;
   - verifica através do md5sum;
   - verifica se faltam arquivos;
   - verifica se tem arquivos a mais;
- permite definir a versão do Slackware que se quer baixar;
- permite definir o mirror que se quer utilizar (FTP, HTTP e HTTPS);
- permite definir o modo de operação do protoloco FTP (passivo|ativo);


O script foi concebido com a idéia de fornecer:
1) um meio rápido e fácil de baixar os pacotes para uma porteior atualização da versão do Slackware;
2) um meio de baixar apenas os diretórios pretendidos;
3) um meio de verificar se todos os arquivos estão íntegros;


Embora a cada nova versão do Slackware deva ser acompanhada de uma nova versão deste script, a versão do Slackware que o script efetivamente vai baixar pode ser redefinida em tempo de execução (em certo sentid este script é universal: serve para todas as versões do Slackware desde a versão 8.1).

Neste script, os dois primeiros conjuntos de números dizem respeito a versão do próprio script; os dois últimos conjuntos de números dizem respeito a versão correspondente do Slackware.


Particularmente, o utilizo para fazer o download dos pacotes de uma versão mais nova do Slackware para, assim, depois, proceder a atualização do sistema de maneira off-line: seguindo os passos do arquivo UPGRADE.TXT.

Em conjunto com este Script, como parte de uma etapa posterior, utilizo um outro (também de minha autoria) que me assiste nos processos de atualização do sistema: (<https://www.vivaolinux.com.br/~raserafim/scripts/>).


O aplicativo slackpkg também consegue fazer o download dos pacotes para serem atualizados em offline.  

No entanto, o que marca a diferença e, talvez, alguma vantagem deste script em relação ao slackpkg no que toca ao download dos pacotes de atualização é que neste script é possível escolher apenas alguns conjuntos de pacotes (diretórios) para o download. Por exemplo, é possível deixar de fora os pacotes relacionados ao KDE, ou ao XFCE. E, no caso de se decidir por baixar os pacotes do KDE, apenas os pacotes nas linguagens definidas é que serão baixados: por padrão, o português e o inglês.

Outra singularidade deste script em relação ao slackpkg é que este script possui uma opção de verificação da integridade dos arquivos baixados: de modo a buscar garantir que tanto os arquivos baixados estão íntegros quanto não tem nem arquivos a menos nem arquivos a mais.


Publicizo o presente Script na expectativa de que contribua de alguma maneira para aqueles que, porventura, tenham a mesma necessidade que eu; ou, então, para aqueles que o Script tenha serventia com algumas adaptações ou como material que contém alguma ideia útil para outros Scripts.

Como Executar:
- baixar o arquivo do Script; OU copiar o texto do Script diretamente da WEB para um arquivo texto criado no computador;
- dar permissão de execução para o arquivo com o Script:
    - por exemplo: $ chmod +x script-down-pkg-slackware.sh;
- copiá-lo (ou movê-lo) para o diretório local que contém os arquivos a serem convertidos;
- executar o Script com o comando: $ ./script-down-pkg-slackware.sh
    - obs: o prefixo "./" (ponto-barra) deve vir antes do nome do arquivo para especificar que o arquivo a ser executado está no diretório local (corrente), e não em um dos caminhos do "PATH".

Para mais detalhes, ver minha dica: Como dar Permissão de Execução a Arquivo (script ou binário) no GNU/Linux - Abordagem Prática (https://www.vivaolinux.com.br/dica/Como-dar-Permissao-de-Execucao-a-Arquivo-script-ou-binario-no-GNULinux-Abordagem-Pratica/)

Para dar permissão de alteração do conteúdo do Script, utilizar o comando, por exemplo: $ chmod a+w script-down-pkg-slackware.sh

"Para mais detalhes, ver minha dica: Como dar Permissão de Execução a Arquivo (script ou binário) no GNU/Linux - Abordagem Prática (https://www.vivaolinux.com.br/dica/Como-dar-Permissao-de-Execucao-a-Arquivo-script-ou-binario-no-GNULinux-Abordagem-Pratica/)"

  



Esconder cůdigo-fonte

#!/bin/sh

# script-down-slackware.sh - faz download dos pacotes de uma determinada versão do Slackware para possibilitar uma posterior atualização do sistema de maneira off-line.


# Copyright 2017 Rodrigo Albuquerque Serafim.

# Autor: Rodrigo Albuquerque Serafim (raserafim)
# Contato: https://www.vivaolinux.com.br/~raserafim
# Versão: 1.0.14.1
# Data: 23-11-2017 
# Dependências: 
# Licença: GPL v3 <https://www.gnu.org/licenses/gpl-3.0.html>

#†† Este programa é um software livre; você pode redistribuí-lo e/ou 
#†† modificá-lo sob os termos da Licença Pública Geral GNU como publicada
#†† pela Fundação do Software Livre (FSF); na versão 3 da Licença,
#†† ou (a seu critério) qualquer versão posterior.

#†† Este programa é distribuído na esperança de que possa ser útil, 
#†† mas SEM NENHUMA GARANTIA; sem uma garantia implícita de ADEQUAÇÃO
#†† a qualquer MERCADO ou APLICAÇÃO EM PARTICULAR. Veja a
#†† Licença Pública Geral GNU para mais detalhes.

#†† Você deve ter recebido uma cópia da Licença Pública Geral GNU junto
#†† com este programa. Se não, veja <http://www.gnu.org/licenses/>.

#†† Esta é uma tradução não oficial da GNU General Public License em Português.

### [version] ###################################################################

# Características de Operação:
# - faz apenas o download dos pacotes de uma determinada versão do Slackware;
# - possibilita uma posterior atualização do sistema de maneira off-line.
# - não faz nenhuma alteração no sistema;
# - é possível selecionar alguns conjuntos de pacotes (diretórios) para o download;
# - quando seleciona o KDE faz o download apenas das línguas informadas;
# - informa o espaço estimado dos downloads;
# - faz verificação da integridade dos pacotes em quatro dimensões:
#†† - verifica através do wget;
#†† - verifica através do md5sum;
#†† - verifica se faltam arquivos;
#†† - verifica se tem arquivos a mais;
# - permite definir a versão do Slackware que se quer baixar;
# - permite definir o mirror que se quer utilizar (FTP, HTTP e HTTPS);
# - permite definir o modo de operação do protocolo FTP (passivo|ativo);

# VERSÃO 1.0 (23-11-2017)

### [end version] ###################################################################

version_slack32="slackware-14.2"†††#este valor deve ser alterado a cada versão nova do Slackware
version_slack64="slackware64-14.2"†††#este valor deve ser alterado a cada versão nova do Slackware

mirror32_1="ftp://ftp.slackware-brasil.com.br/slackware-14.2/"††††††#este valor deve ser alterado a cada versão nova do Slackware
mirror32_2="http://ftp.slackware-brasil.com.br/slackware-14.2/"††††††#este valor deve ser alterado a cada versão nova do Slackware
mirror64_1="ftp://ftp.slackware-brasil.com.br/slackware64-14.2/"†††#este valor deve ser alterado a cada versão nova do Slackware
mirror64_2="http:ftp://ftp.slackware-brasil.com.br/slackware64-14.2/"†††#este valor deve ser alterado a cada versão nova do Slackware

dir_slack32="slackware"††††††#nome do diretório do slackware de 32 bits
dir_slack64="slackware64"†††#nome do diretório do slackware de 64 bits

#

DIRSELECTS_DEFAULT=(a ap d f k l n x xap)†††#lista dos diretórios padrões básicos para fazer o download

LANGUAGE_KDEI=(pt_BR en_GB)†††††††††#lista das línguas do kde a serem baixadas

verif_except=(CHECKSUMS.md5 CHECKSUMS.md5.asc FILELISTselected.TXT CHECKSUMSselected.md5 CHECKSUMSreport.txt)††#exceções na verificação da integridade

verif_removed="removed_a_mais"†††††††††#nome do diretório que armazenará os arquivos excluídos na verificação

show_wget="-nv --show-progress"†††††††††#opções do wget relacionados ao formato das mensagens [-nv --show-progress]
opt_wget=†††††††††††††††#opções do wget relacionados aos downloads [--no-passive-ftp | -nc]

#

VERSION_SLACK=†††††††††††††††#[$version_slack32|version_slack64]

DIR_SLACK=†††††††††††††††#[$dir_slack32|$dir_slack64]

mirror_num_default=††††††††††††#[1|2]

MIRROR=††††††††††††††††††#[$mirror32_1|$mirror32_2|$mirror64_1|$mirror64_2]

TMPDIR="/tmp"†††††††††††††††#[$PWD|/tmp]

dirscript=$PWD

dirselects=($(printf '%s\n' "${DIRSELECTS_DEFAULT[@]}" | sort | uniq))††#copia o conteúdo e faz a ordenação do conteúdo da variável e exclui os duplicados

dirselect_kde=††††††#[yes|no]
dirselect_xfce=††††††#[yes|no]
dirselect_patches=†††#[yes|no]


### Funções ###

function fun_checksum()††#função que faz a Verificação da integridade
{

cd $dirscript/$VERSION_SLACK 2>/dev/null

echo " "
echo "Iniciando o processo de verificação da integridade dos pacotes baixados ..."
echo " "

if [ ! -s "CHECKSUMSselected.md5" ]††#verifica se o arquivo existe
then
††echo " "
††echo "ERRO: não foi possível fazer a verificação da integridade. Arquivo CHECKSUMSselected.md5 não encontrado."
††echo " "
††exit
fi

echo "Aguarde (etapa 1) ..."
echo " "

cat CHECKSUMSselected.md5 | md5sum -c |& tee /dev/tty > CHECKSUMSreport.txt

if [ ! -s "CHECKSUMSreport.txt" ]††#verifica se o arquivo existe
then
††echo " "
††echo "ERRO: CHECKSUMSreport.txt não foi gerado. Provavelmente, por falta de espaço ou privilégios."
††echo " "
††exit
fi

echo " "
echo "CHECKSUMSreport.txt gerado! O arquivo contém um relatório das consistências e das inconsistências."
echo " "

checkerr_md5=$(cat CHECKSUMSreport.txt | grep "md5sum: WARNING:" | wc -l)††#armazena a quantidade de linhas com erro
checkerr_more=0

cd $dirscript/$VERSION_SLACK

echo " "
echo "Aguarde (etapa 2) ..."
echo " "

find . -maxdepth 9 -type f -iname "*" | sort > $TMPDIR/file_comp1.tmp
cat $dirscript/$VERSION_SLACK/CHECKSUMSselected.md5 | awk {'print$2'} | sort > $TMPDIR/file_comp2.tmp

if [ ! -s $TMPDIR/file_comp1.tmp ] || [ ! -s $TMPDIR/file_comp2.tmp ]††#verifica se o arquivo existe
then
††echo " "
††echo "ERRO: Arquivo temporário não foi gerado. Provavelmente, por falta de espaço ou privilégios."
††echo " "
††exit
fi

file_result=$(diff $TMPDIR/file_comp1.tmp $TMPDIR/file_comp2.tmp | grep "< " | sed "s/< //g" | sed "s/$/: FALHOU: Arquivo a mais./g") 2>/dev/null

rm -f $TMPDIR/file_comp1.tmp 2>/dev/null
rm -f $TMPDIR/file_comp2.tmp 2>/dev/null

for e in ${verif_except[@]}
do
††file_result=$(echo "${file_result[@]}" | grep -v "$e") 2>/dev/null††#remove o que for de exceções
done

checkerr_more=$(echo "${file_result[@]}" | grep "^\.\/" | wc -l) 2>/dev/null

echo "${file_result[@]}" |& tee /dev/tty††>> $dirscript/$VERSION_SLACK/CHECKSUMSreport.txt

echo " "
echo "CHECKSUMSreport.txt atualizado! O arquivo contém um relatório das consistências e das inconsistências."
echo " "

if [ $checkerr_md5 -eq 0 ] && [ $checkerr_more -eq 0 ]††#se = 0
then
††echo " "
††echo "Resumo: "
††echo "Valores md5sum consistentes: sim (sucesso!)"
††echo "Arquivos a mais: não (sucesso!)"
††echo " "
††echo "SUCESSO: Nenhum erro foi encontrado na verificação da integridade a partir do CHECKSUMSselected.md5!"
else
††echo " "
††echo "Resumo: "
††if [ $checkerr_md5 -eq 0 ]††#se = 0
††then
††††echo "Valores md5sum consistentes: sim (sucesso!)"
††else
††††echo "Valores md5sum consistentes: não (erro)"
††fi
††if [ $checkerr_more -eq 0 ]††#se = 0
††then
††††echo "Arquivos a mais: não (sucesso!)"
††else
††††echo "Arquivos a mais: sim (erro)"
††fi
††echo " "
††echo "ERRO: CUIDADO, inconsistências foram encontradas na verificação da integridade a partir do CHECKSUMSselected.md5."

††echo " "
††echo "1) Finalizar: não fazer a reparação automaticamente."
††echo "2) Iniciar a reparação automática."
††read -p "Digite o número da opção desejada: " digitval
††if [ -z $digitval ]
††then
††††echo "Opção padrão assumida: 1"
††††digitval="1"
††elif [ "$digitval" != "1" ] && [ "$digitval" != "2" ]
††then
††††echo "Valor não corresponde às opções indicadas."
††††echo "Opção padrão assumida: 1"
††††digitval="1"
††fi
††if [ "$digitval" == "1" ]
††then
††††exit
††elif [ "$digitval" == "2" ]
††then
††††fun_reparar
††else
††††echo "Valor não corresponde às opções indicadas."
††††echo "Erro desconhecido."
††fi
fi

}


function fun_reparar()††#função que faz a reparação
{

echo " "
echo "Iniciando reparação ..."
echo " "

echo "Aguarde (etapa 1) ..."
echo " "

CHECKSUMSreportFAIL_mem=$(cat CHECKSUMSreport.txt | grep -E "(FALH|FAIL)" | grep -v "FALHOU: Arquivo a mais" | awk {'print$1'} | sed "s/:$//g")

for l in $(printf '%s\n' $CHECKSUMSreportFAIL_mem)
do
††destdir="$(echo $l | rev | cut -d"/" -f2-99 | rev)"††#pega apenas o caminho (tudo antes da última barra)
††cd $dirscript/$VERSION_SLACK
††rm -f $l 2>/dev/null††#remove o arquivo a ser reparado

††mkdir -p "$destdir" 2>/dev/null††#força a criação do subdiretório (cria o diretório caso necessário)
††cd $destdir

††k=$? $(wget $show_wget $opt_wget -c "$MIRROR$l")††#armazena "0" quando realizado o download com sucesso
††if [ $k -ne 0 ]††#se <> 0
††then
††††echo " "
††††echo "ERRO: Downloads não foram concluídos. Provavelmente, por alguma falha de conexão com a internet ou por falta de espaço."
††††echo " "
††††exit
††fi
done

echo " "
echo "Aguarde (etapa 2) ..."
echo " "

unset CHECKSUMSreportFAIL_mem

cd $dirscript/$VERSION_SLACK

CHECKSUMSreportFAIL_mem=$(cat CHECKSUMSreport.txt | grep "FALHOU: Arquivo a mais" | awk {'print$1'} | sed "s/:$//g")

for l in $(printf '%s\n' $CHECKSUMSreportFAIL_mem)
do
††cd $dirscript
††mkdir -p "$verif_removed" 2>/dev/null††#força a criação do subdiretório (cria o diretório caso necessário)

††mv -b -S .old $dirscript/$VERSION_SLACK/$l $dirscript/$verif_removed
done

unset CHECKSUMSreportFAIL_mem

echo " "
echo "Reparação concluída!"
echo " "

}


function fun_configmenu()††#função que exibe o Menu de Configurações
{

clear
echo " "
echo " "
echo "Menu de Configurações (obs: configurações não persistentes): "
echo " "
echo "1) Manter versões padrão: 32 Bits ["$version_slack32"] e 64 Bits ["$version_slack64"]"
echo "2) Definir versões"
read -p "Digite o número da opção desejada: " digitval
if [ -z $digitval ]
then
††echo "Opção padrão assumida: 1"
††digitval="1"
elif [ "$digitval" != "1" ] && [ "$digitval" != "2" ]
then
††echo "Valor não corresponde às opções indicadas."
††echo "Opção padrão assumida: 1"
††digitval="1"
fi
if [ "$digitval" == "1" ]
then
††digitval="1"
elif [ "$digitval" == "2" ]
then
††read -p "Digite a versão de 32 Bits desejada: " digitval
††version_slack32="$digitval"
††read -p "Digite a versão de 64 Bits desejada: " digitval
††version_slack64="$digitval"
else
††echo "Valor não corresponde às opções indicadas."
††echo "Erro desconhecido."
fi

echo " "
echo "1) Manter os diretórios "'"'"${dirselects[@]}"'"'""
echo "2) Incluir "'"'"e t tcl y"'"'""
echo "3) Redefinir manualmente os diretórios padrão"
read -p "Digite o número da opção desejada: " digitval
if [ -z $digitval ]
then
††echo "Opção padrão assumida: 1"
††digitval="1"
elif [ "$digitval" != "1" ] && [ "$digitval" != "2" ] && [ "$digitval" != "3" ]
then
††echo "Valor não corresponde às opções indicadas."
††echo "Opção padrão assumida: 1"
††digitval="1"
fi
if [ "$digitval" == "1" ]
then
††digitval="1"
elif [ "$digitval" == "2" ]
then
††dirselects[${#dirselects[@]}]="e"
††dirselects[${#dirselects[@]}]="t"
††dirselects[${#dirselects[@]}]="tcl"
††dirselects[${#dirselects[@]}]="y"
††dirselects=($(printf '%s\n' "${dirselects[@]}" | sort | uniq))††#faz a ordenação do conteúdo da variável e exclui os duplicados
elif [ "$digitval" == "3" ]
then
††unset dirselects††#zera o array
††echo "Digite uma língua por linha. Para finalizar, entre com uma linha vazia."
††while read dir
††do
††††if [ -z $dir ]
††††then
††††††break
††††else
††††††dirselects[${#dirselects[@]}]="$dir"
††††fi
††done
††dirselects=($(printf '%s\n' "${dirselects[@]}" | sort | uniq))††#faz a ordenação do conteúdo da variável e exclui os duplicados
else
††echo "Valor não corresponde às opções indicadas."
††echo "Erro desconhecido."
fi

echo " "
echo "1) Manter mirror 1 como padrão: [32 Bits: $mirror32_1] e [64 Bits: $mirror64_1]"
echo "2) Definir mirror 2 como padrão: [32 Bits: $mirror32_2] e [64 Bits: $mirror64_2]"
echo "3) Definir endereço de mirror para download"
read -p "Digite o número da opção desejada: " digitval
if [ -z $digitval ]
then
††echo "Opção padrão assumida: 1"
††digitval="1"
elif [ "$digitval" != "1" ] && [ "$digitval" != "2" ] && [ "$digitval" != "3" ]
then
††echo "Valor não corresponde às opções indicadas."
††echo "Opção padrão assumida: 1"
††digitval="1"
fi
if [ "$digitval" == "1" ]
then
††mirror_num_default="1"
elif [ "$digitval" == "2" ]
then
††mirror_num_default="2"
elif [ "$digitval" == "3" ]
then
††read -p "Digite o endereço do mirror desejado: " digitval
††MIRROR="$digitval"
††mirror32_1="$digitval"
††mirror64_1="$digitval"
††mirror_num_default="1"
else
††echo "Valor não corresponde às opções indicadas."
††echo "Erro desconhecido."
fi

echo " "
echo "1) Manter as línguas do KDE (${LANGUAGE_KDEI[@]})"
echo "2) Definir línguas do KDE"
read -p "Digite o número da opção desejada: " digitval
if [ -z $digitval ]
then
††echo "Opção padrão assumida: 1"
††digitval="1"
elif [ "$digitval" != "1" ] && [ "$digitval" != "2" ]
then
††echo "Valor não corresponde às opções indicadas."
††echo "Opção padrão assumida: 1"
††digitval="1"
fi
if [ "$digitval" == "1" ]
then
††digitval="1"
elif [ "$digitval" == "2" ]
then
††unset LANGUAGE_KDEI††#zera o array
††echo "Digite uma língua por linha. Para finalizar, entre com uma linha vazia."
††while read lang
††do
††††if [ -z $lang ]
††††then
††††††break
††††else
††††††LANGUAGE_KDEI[${#LANGUAGE_KDEI[@]}]="$lang"
††††fi
††done
else
††echo "Valor não corresponde às opções indicadas."
††echo "Erro desconhecido."
fi

echo " "
echo "1) Manter a utilização do modo Passivo do FTP"
echo "2) Utilizar o modo Ativo do FTP"
read -p "Digite o número da opção desejada: " digitval
if [ -z $digitval ]
then
††echo "Opção padrão assumida: 1"
††digitval="1"
elif [ "$digitval" != "1" ] && [ "$digitval" != "2" ]
then
††echo "Valor não corresponde às opções indicadas."
††echo "Opção padrão assumida: 1"
††digitval="1"
fi
if [ "$digitval" == "1" ]
then
††opt_wget+=" "
elif [ "$digitval" == "2" ]
then
††opt_wget+=" --no-passive-ftp"
else
††echo "Valor não corresponde às opções indicadas."
††echo "Erro desconhecido."
fi

echo " "
echo "1) Manter mensagens Simplificadas dos downloads"
echo "2) Definir mensagens Detalhadas dos downloads"
read -p "Digite o número da opção desejada: " digitval
if [ -z $digitval ]
then
††echo "Opção padrão assumida: 1"
††digitval="1"
elif [ "$digitval" != "1" ] && [ "$digitval" != "2" ]
then
††echo "Valor não corresponde às opções indicadas."
††echo "Opção padrão assumida: 1"
††digitval="1"
fi
if [ "$digitval" == "1" ]
then
††show_wget=" -nv --show-progress"
elif [ "$digitval" == "2" ]
then
††show_wget=" "
else
††echo "Valor não corresponde às opções indicadas."
††echo "Erro desconhecido."
fi

echo " "
echo "1) Manter a verificação Integral para a retomada do download interrompido (verifica se cada arquivo realmente foi baixado por completo antes de seguir baixando os restantes)"
echo "2) Definir a verificação Acelerada para a retomada do download interrompido (verifica apenas se existem os arquivos; não verifica se os arquivos estão baixados por completo) [± 11x]"
read -p "Digite o número da opção desejada: " digitval
if [ -z $digitval ]
then
††echo "Opção padrão assumida: 1"
††digitval="1"
elif [ "$digitval" != "1" ] && [ "$digitval" != "2" ]
then
††echo "Valor não corresponde às opções indicadas."
††echo "Opção padrão assumida: 1"
††digitval="1"
fi
if [ "$digitval" == "1" ]
then
††opt_wget+=" "
elif [ "$digitval" == "2" ]
then
††opt_wget+=" -nc"
††show_wget=" "††#necessário ter mensagens detalhadas
else
††echo "Valor não corresponde às opções indicadas."
††echo "Erro desconhecido."
fi

echo " "
echo "Finalizando o Menu de Configurações... e iniciando o Menu de Operações..."
echo " "
clear

}


function fun_printheader()††#função que exibe o cabeçalho de informações do script
{

header_year=$(cat $0 | head -n 15 | grep "^# Data: [0-9]" | cut -d"-" -f3 | sed "s/ //g")††#filtra o cabeçalho do script pegando apenas o ano da Data
header_version=$(cat $0 | head -n 15 | grep "^# Versão: [0-9]" | sed "s/^# Versão: //g")††#filtra o cabeçalho do script pegando apenas o número da Versão
header_description=$(cat $0 | head -n 15 | grep -A 1 "^# script-" | sed "s/# //g")†† #filtra o cabeçalho do script pegando a(s) linha(s) que contém o nome e a descrição do script
header_author=$(cat $0 | head -n 15 | grep "^# Autor: " | sed "s/^# Autor: //g")††#filtra o cabeçalho do script pegando o Autor
header_contact=$(cat $0 | head -n 15 | grep "^# Contato: " | sed "s/^# Contato: //g")††#filtra o cabeçalho do script pegando o Contato
header_license=$(cat $0 | head -n 15 | grep "^# Licença: " | sed "s/^# Licença: //g")††#filtra o cabeçalho do script pegando a Licença

echo $header_description
echo "Versão: $header_version ($header_year) - $header_author"
echo "Contato: $header_contact"
echo "Licença: $header_license"

}


function fun_printversion()††#função que exibe informações da(s) versão(ões) do script
{

numlin_start=$(cat $0 | grep -n "^### \[version\] ###" | cut -d ":" -f1)††#armazena o número da linha
let numlin_start=$numlin_start+1
numlin_end=$(cat $0 | grep -n "^### \[end version\] ###" | cut -d ":" -f1)††#armazena o número da linha
let numlin_end=$numlin_end-1

printf '%s\n' "$(cat $0 | head -n $numlin_end | tail -n $(($numlin_start-$numlin_end)) | sed "s/# //g")"

}

### ###


### Tratamento dos Parâmetros ###

if [ $# -gt 0 ]††#se > 0 (se foi passado algum parâmetro...)
then
††prmtrue="no"††#indica se é um parâmetro válido

††for p in "$@"
††do
††††if [ "$p" == "-v" ] || [ "$p" == "--version" ]††#testa a existência do parâmetro conhecido
††††then
††††††prmtrue="yes"
††††††echo " "
††††††fun_printheader
††††††echo " "
††††††fun_printversion
††††††echo " "
††††††exit
††††fi
††††if [ "$p" == "-c" ] || [ "$p" == "--configmenu" ]††#testa a existência do parâmetro conhecido
††††then
††††††prmtrue="yes"
††††††fun_configmenu
††††fi
††done

††if [ "$prmtrue" == "no" ]††#testa a inexistência de um parâmetro conhecido
††then

††††echo " "
††††fun_printheader
††††echo " "
††††echo "Usage: $0 [OPTIONS] {PARAMETERS: no parameters ...}"
††††echo " "
††††echo "Options: "
††††echo "†† -c†† --configmenu††††††exibe o menu de configurações (altera versões, mirror, modo do FTP [passivo|ativo], pacotes, tipo de mensagens e de retomada dos downloads ...)"
††††echo "†† -v†† --version††††††exibe informações da(s) versão(ões) e da licença"
††††echo "†† -?†† --help†††††††††exibe informações de ajuda"
††††echo " "
††††echo "Usage: Ex.: $ $0"
††††echo "Usage: Ex.: $ $0 -c"
††††echo "Usage: Ex.: $ $0 --configmenu"
††††exit
††fi

fi

### ###


### Menu ###

echo " "
echo " "
echo "1) 32 Bits ["$version_slack32"]"
echo "2) 64 Bits ["$version_slack64"]"
read -p "Digite o número da opção desejada: " digitval
if [ -z $digitval ]
then
††echo "Opção padrão assumida: 1"
††digitval="1"
elif [ "$digitval" != "1" ] && [ "$digitval" != "2" ]
then
††echo "Valor não corresponde às opções indicadas."
††echo "Opção padrão assumida: 1"
††digitval="1"
fi
if [ "$digitval" == "1" ]
then
††VERSION_SLACK="$version_slack32"
††DIR_SLACK="$dir_slack32"
††if [ "$mirror_num_default" == "2" ]
††then
††††MIRROR="$mirror32_2"
††else
††††MIRROR="$mirror32_1"
††fi
elif [ "$digitval" == "2" ]
then
††VERSION_SLACK="$version_slack64"
††DIR_SLACK="$dir_slack64"
††if [ "$mirror_num_default" == "2" ]
††then
††††MIRROR="$mirror64_2"
††else
††††MIRROR="$mirror64_1"
††fi
else
††echo "Valor não corresponde às opções indicadas."
††echo "Erro desconhecido."
fi

echo " "
echo "1) Download dos pacotes (iniciar/continuar) [± 1200-2400 MB]"
echo "2) Verificação da integridade (e reparação)"
read -p "Digite o número da opção desejada: " digitval
if [ -z $digitval ]
then
††echo "Opção padrão assumida: 1"
††digitval="1"
elif [ "$digitval" != "1" ] && [ "$digitval" != "2" ]
then
††echo "Valor não corresponde às opções indicadas."
††echo "Opção padrão assumida: 1"
††digitval="1"
fi
if [ "$digitval" == "1" ]
then
††break
elif [ "$digitval" == "2" ]
then
††fun_checksum
††exit
else
††echo "Valor não corresponde às opções indicadas."
††echo "Erro desconhecido."
fi

echo " "
echo "1) Apenas os diretórios "'"'"${dirselects[@]}"'"'""
echo "2) Incluir kde e kdei(${LANGUAGE_KDEI[@]})"
echo "3) Incluir xfce"
echo "4) Incluir kde, kdei(${LANGUAGE_KDEI[@]}) e xfce"
read -p "Digite o número da opção desejada: " digitval
if [ -z $digitval ]
then
††echo "Opção padrão assumida: 1"
††digitval="1"
elif [ "$digitval" != "1" ] && [ "$digitval" != "2" ] && [ "$digitval" != "3" ] && [ "$digitval" != "4" ]
then
††echo "Valor não corresponde às opções indicadas."
††echo "Opção padrão assumida: 1"
††digitval="1"
fi
if [ "$digitval" == "1" ]
then
††dirselect_kde=no
††dirselect_xfce=no††
elif [ "$digitval" == "2" ]
then
††dirselect_kde=yes
††dirselect_xfce=no††
elif [ "$digitval" == "3" ]
then
††dirselect_kde=no
††dirselect_xfce=yes††
elif [ "$digitval" == "4" ]
then
††dirselect_kde=yes
††dirselect_xfce=yes
else
††echo "Valor não corresponde às opções indicadas."
††echo "Erro desconhecido."
fi

echo " "
echo "1) Incluir Patches (/patches/packages/)"
echo "2) Não incluir Patches"
read -p "Digite o número da opção desejada: " digitval
if [ -z $digitval ]
then
††echo "Opção padrão assumida: 1"
††digitval="1"
elif [ "$digitval" != "1" ] && [ "$digitval" != "2" ]
then
††echo "Valor não corresponde às opções indicadas."
††echo "Opção padrão assumida: 1"
††digitval="1"
fi
if [ "$digitval" == "1" ]
then
††dirselect_patches=yes
elif [ "$digitval" == "2" ]
then
††dirselect_patches=no
else
††echo "Valor não corresponde às opções indicadas."
††echo "Erro desconhecido."
fi

### ###


### Geração da lista de diretórios ###

if [ "$dirselect_kde" == "yes" ]††#adiciona ou não o kde e kdei à lista de diretórios a serem baixados
then
††dirselects[${#dirselects[@]}]="kde"
††dirselects[${#dirselects[@]}]="kdei"
fi

if [ "$dirselect_xfce" == "yes" ]††#adiciona ou não o xfce à lista de diretórios a serem baixados
then
††dirselects[${#dirselects[@]}]="xfce"
fi

dirselects=($(printf '%s\n' "${dirselects[@]}" | sort | uniq))††#faz a ordenação do conteúdo da variável e exclui os duplicados

### ###


### Validação da lista dos diretórios pretendidos ###

cd $dirscript
mkdir $VERSION_SLACK 2>/dev/null
cd $dirscript/$VERSION_SLACK††

echo " "
echo "Iniciando a validação dos diretórios pretendidos ..."
echo " "

rm -f FILELIST.TXT 2>/dev/null

k=$? $(wget $show_wget $opt_wget -c $MIRROR"FILELIST.TXT")††#armazena "0" quando realizado o download com sucesso
if [ $k -ne 0 ]††#se <> 0
then
††echo " "
††echo "ERRO: Lista dos diretórios pretendidos não foi validada. Provavelmente, por alguma falha de conexão com a internet ou por falta de espaço."
††echo " "
††exit
else
††filelist_mem="$(cat FILELIST.TXT | grep "^drw" | grep "\.\/$DIR_SLACK/" | awk {'print$8'} | sed "s/\.\/$DIR_SLACK\///g")"

††dirvalidexit="yes"
††for dir in "${dirselects[@]}"
††do
††††dirvalid="no"
††††for l in $(printf '%s\n' $filelist_mem)
††††do
††††††if [ "$dir" == "$l" ]
††††††then
††††††††dirvalid="yes"
††††††††dirvalidexit="no"
††††††††break
††††††fi
††††done

††††if [ "$dirvalid" == "no" ]
††††then
††††††echo "diretório inválido para o mirror indicado: $dir"
††††††dirvalidexit="yes"
††††fi
††done

††if [ "$dirvalidexit" == "yes" ]
††then
††††exit
††else
††††echo " "
††††echo "Lista dos diretórios pretendidos validada!"
††††echo " "
††fi

fi

### ###


### Início das atividades ###

cd $dirscript
mkdir $VERSION_SLACK 2>/dev/null
cd $dirscript/$VERSION_SLACK††

echo " "
echo "Iniciando as atividades ... "

### ###


### Geração do arquivo FILELISTselected.TXT ###

echo " "
echo "Gerando FILELISTselected.TXT contendo apenas os diretórios pretendidos ..."
echo " "

k=$? $(wget $show_wget $opt_wget -c $MIRROR"FILELIST.TXT")††#armazena "0" quando realizado o download com sucesso
if [ $k -ne 0 ]††#se <> 0
then
††echo " "
††echo "ERRO: FILELISTselected.TXT não foi gerado. Provavelmente, por alguma falha de conexão com a internet ou por falta de espaço."
††echo " "
††exit
else
††filelist_mem="$(cat FILELIST.TXT | grep "^-rw")"††#copia o arquivo para uma variável filtrando apenas as linhas que correspondem à arquivos
††
††printf '%s\n' "$filelist_mem" | grep -v "[^.]/" > FILELISTselected.TXT††#apenas os arquivos da raiz

††printf '%s\n' "$filelist_mem" | grep "\.\/$DIR_SLACK/" | grep -v "\.\/$DIR_SLACK/[a-z/]" >> FILELISTselected.TXT††#apenas os arquivos da raiz

††for dir in ${dirselects[@]}
††do
††††if [ "$dir" == "kdei" ]
††††then
††††††for lang in ${LANGUAGE_KDEI[@]}
††††††do
††††††††printf '%s\n' "$filelist_mem" | grep "\.\/$DIR_SLACK/$dir/.*$lang.*" >> FILELISTselected.TXT††#apenas os arquivos da língua
††††††done
††††else
††††††printf '%s\n' "$filelist_mem" | grep "\.\/$DIR_SLACK/$dir/" >> FILELISTselected.TXT
††††fi
††done

††if [ "$dirselect_patches" == "yes" ]
††then
††††printf '%s\n' "$filelist_mem" | grep "\.\/patches/" | grep -v "\.\/patches/[a-z/]" >> FILELISTselected.TXT
††††printf '%s\n' "$filelist_mem" | grep "\.\/patches/packages/" >> FILELISTselected.TXT
††fi

††unset filelist_mem
fi

if [ -s "FILELISTselected.TXT" ]
then
††echo " "
††echo "FILELISTselected.TXT gerado!"
††echo " "
else
††echo " "
††echo "ERRO: FILELISTselected.TXT não foi gerado. Provavelmente, por falta de espaço ou privilégios."
††echo " "
††exit
fi

### ###


### Geração do Cálculo Estimado de Espaço ###

echo " "
echo "Gerando os cálculos do espaço estimado dos downloads ..."
echo " "

if [ -s "FILELISTselected.TXT" ]††#verifica se o arquivo existe
then
††echo " "
††echo "Espaço estimado dos downloads: $(cat FILELISTselected.TXT | awk {'print$5'} | awk '{SUM += $1} END {print SUM /1024 /1024}' | cut -d"." -f1) MB"
††echo " "
††sleep 2
else
††echo " "
††echo "ERRO: Não foi possível fazer a verificação da integridade. Arquivo FILELISTselected.TXT não encontrado."
††echo " "
fi

### ###


### Geração do arquivo CHECKSUMSselected.md5 ###

echo " "
echo "Gerando CHECKSUMSselected.md5 contendo apenas os diretórios pretendidos ..."
echo " "

k=$? $(wget $show_wget $opt_wget -c $MIRROR"CHECKSUMS.md5")††#armazena "0" quando realizado o download com sucesso
if [ $k -ne 0 ]††#se <> 0
then
††echo " "
††echo "ERRO: CHECKSUMSselected.md5 não foi gerado. Provavelmente, por alguma falha de conexão com a internet."
††echo " "
††exit
fi

cat CHECKSUMS.md5 | grep "\.\/" > CHECKSUMSselected.md5††#copia o conteúdo do arquivo

cat FILELISTselected.TXT | awk {'print$8'} | grep "\.\/" | sed "s/^/................................††/g" | sed "s/$/!!!:more:/g" >> CHECKSUMSselected.md5††#acrescenta o conteúdo do arquivo.. e acrescenta uma coluna de pontos.. e acrescenta um texto no final (:more:) para que na ordenação essas linhas fiquem a baixo das linhas correspondentes do arquivo anterior

CHECKSUMSselected_mem=$(cat CHECKSUMSselected.md5)††#copia o conteúdo do arquivo à memória

echo "$CHECKSUMSselected_mem" | sort -k 2 | sed "s/!!!:more://g" | uniq -d -f1 > CHECKSUMSselected.md5††#ordena e retira o texto acrescentado ao final da linha (:more:)

unset CHECKSUMSselected_mem

if [ -s "CHECKSUMSselected.md5" ]
then
††echo " "
††echo "CHECKSUMSselected.md5 gerado!"
††echo " "
else
††echo " "
††echo "ERRO: CHECKSUMSselected.md5 não foi gerado. Provavelmente, por falta de espaço ou privilégios."
††echo " "
fi

### ###


### Downloads dos pacotes ###

cd $dirscript/$VERSION_SLACK††

if [ "$dirselect_patches" == "yes" ]
then
††echo " "
††echo "Iniciando os downloads dos diretórios "'"'"${dirselects[@]}"'"'" e do "'"'"patches"'"'" ..."
††echo " "
else
††echo " "
††echo "Iniciando os downloads dos diretórios "'"'"${dirselects[@]}"'"'" ..."
††echo " "
fi

for l in $(cat FILELISTselected.TXT | awk {'print$8'})
do
††destdir="$(echo $l | rev | cut -d"/" -f2-99 | rev)"††#pega apenas o caminho (tudo antes da última barra)
††cd $dirscript/$VERSION_SLACK††
††mkdir -p "$destdir" 2>/dev/null††#força a criação do subdiretório (cria o diretório caso necessário)
††cd $destdir

††k=$? $(wget $show_wget $opt_wget -c "$MIRROR$l")††#armazena "0" quando realizado o download com sucesso
††if [ $k -ne 0 ]††#se <> 0
††then
††††echo " "
††††echo "ERRO: Downloads não foram concluídos. Provavelmente, por alguma falha de conexão com a internet ou por falta de espaço."
††††echo " "
††††exit
††fi
done

echo " "
echo "Downloads concluídos!"
echo " "

### ###


fun_checksum††#chama a verificação da integridade

### ###

Scripts recomendados

InserÁ„o de mŠquinas no banco de dados para controle interno

estrutura para menu

Redund‚ncia de dois links de internet

Testa DomŪnios

duplex_record: mixando Šudio do microfone e saŪda de Šudio de um programa via P


  

ComentŠrios

Nenhum comentŠrio foi encontrado.


Contribuir com comentŠrio




Patrocínio

Site hospedado pelo provedor HostGator.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Viva o Android

Tópicos

Top 10 do mês

Scripts