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: 1.543 ]
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/)"
#!/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 ### ###
Script de Backup que compacta Segmentado.
Nenhum comentário foi encontrado.
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
SysAdmin ou DevOps: Qual curso inicial pra essa área? (0)
Melhores Práticas de Nomenclatura: Pastas, Arquivos e Código (3)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta