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.777 ]
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
### ###
Cadastrando usuários para email no Slackware de forma mais simples
Criando vários usuários no LDAP a partir de um arquivo
Script de Instalação de Layer7 no CentOS 6.0
Nenhum comentário foi encontrado.
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
Como descobrir se a sua senha já foi vazada na internet?
E aí? O Warsaw já está funcionando no Debian 13? [RESOLVIDO] (15)
Secure boot, artigo interessante, nada técnico. (4)
copiar library para diretorio /usr/share/..... su com Falha na a... (1)









