Você não está autenticado.

Anúncio

ANTES DE QUALQUER UPDATE NA DISTRIBUIÇÃO LEIA ESTE LINK PARA INSTRUÇÕES DETALHADAS: http://archlinux-br.org/noticias/212/

Por favor, leia as regras do fórum antes de usá-lo.

#1 07/11/2011 01:09:50

swatquest
Moderador
Registrado: 05/10/2010
Mensagens: 668

[bash] Atualizar mirrorlist 0.5 (10/05/2012)

Estava buscando um script para atualizar a mirrorlist e encontrei este https://wiki.archlinux.org/index.php/Mi … _Generator
Mas para baixar 2 ou 3 selecionados, teria que sempre editar o arquivo. Então criei um, que trabalha do mesmo jeito da página.

Baseado na página http://www.archlinux.org/mirrorlist/

- As opções foram sincronizadas com o site http://www.archlinux.org/mirrorlist/  em 03/11/11
- Baixa as mirrors dos países escolhidos
- Descomenta as mirrors
- Aplica rankmirrors
- Faz backup e copia a mirrorlist e apaga backup
- Os arquivos são criados na pasta /tmp
- Se for necessário, sudo será utilizado

Telas
PARTE1
mirrorlisr_up.jpg
PARTE2
mirrorlisr_up1.jpg

Salve com o nome que você quiser. Aqui utilizei mirrorlist_up
Aplique a permissão de executar no arquivo
chmod +x mirrorlist_up

Código

#!/bin/bash
#
# Atualizar a mirrorlist do pacman
# Utiliza a página http://www.archlinux.org/mirrorlist/
# swatquest
#

# Declarações globais
declare -rx NOMESCRIPT=${0##*/} # NOMESCRIPT é o nome deste script
declare -rx wget="/usr/bin/wget" # comando wget
declare -rx TMPLINK="/tmp/link.txt" # nome e local do arquivo de captura do link
declare -rx LOCALMIRRORLIST="/tmp/" # local temporário para o arquivo mirrorlist do script
declare -i a
declare -i b
declare VERSION="0.5"
declare SINCRO="04/05/2012"

# Verificação de requesitos
if [ -z "$BASH" ]; then
 printf "$NOMESCRIPT: Por favor, execute este script com o shell BASH.\n" >&2
 exit 192
fi

if [ ! -x "$wget" ]; then
 printf "$NOMESCRIPT: O comando wget não está disponível.\n" >&2
 exit 192
fi

[ "$UID" != 0 ] && SU=sudo

printf "Iniciando o script "$NOMESCRIPT" versão:$VERSION\n"
printf "Sincronizado em $SINCRO\n"
# Leitura do teclado da seleção
printf "%s\n" "1) Todos                27) Latvia 
2) Australia            28) Luxembourg
3) Belarus              29) Macedonia
4) Belgium              30) Netherlands
5) Brazil               31) New Caledonia
6) Bulgaria             32) Norway
7) Canada               33) Poland
8) Chile                34) Portugal
9) China                35) Romania
10) Colombia            36) Russian
11) Czech Republic      37) Serbia
12) Denmark             38) Singapore
13) Estonia		39) Slovakia
14) Finland		40) South Africa
15) France 		41) Spain
16) Germany		42) Sri Lanka
17) Greece		43) Sweden
18) Hungary		44) Switzerland
19) India		45) Taiwan
20) Indonesia		46) Turkey
21) Ireland		47) Ukraine
22) Israel		48) United Kingdom
23) Italy		49) United States
24) Japan		50) Uzbekistan
25) Kazakhstan		51) Viet Nam
26) Korea" 		

while read -p "Escolha os países [ padrão=todos ]:" RESPCOUNTRY ; do
  for a in ${RESPCOUNTRY[@]}; do
	[[ $a -ge 52 ]] && break
  done
[[ $RESPCOUNTRY = [a-z]* ]] && continue
[[ $a -lt 53 ]] && break
done

printf "%s\n" "1) ftp  2) http";
while read -p "Escolha uma opçao para protocolo [ padrão=todos ]:" -a RESPPROTOCOL ; do
if [[ $RESPPROTOCOL = [a-z]* || ${#RESPPROTOCOL[@]} -gt 1 ]]; then
continue
elif [[ ${RESPPROTOCOL[0]} -lt 3 || $RESPPROTOCOL = "" ]]; then
break
fi
done

printf "%s\n" "1) IPv4  2) IPv6";
while read -p "Escolha uma opção para versão do ip [ padrão=IPv4 ]:" -a RESPIPVERSION ; do
  if [[ $RESPIPVERSION = [a-z]* || ${#RESPIPVERSION[@]} -gt 1 ]]; then
    continue
  elif [[ ${RESPIPVERSION[0]} -lt 3 || $RESPIPVERSION = "" ]]; then
    break
  fi
done

printf "%s\n" "s) Habilitado  n) Desabilitado";
while read -p "Habilitar status do espelho? [ padrão=n ] [S/n]" RESPMIRROR ; do
  [[ $RESPMIRROR = [SsNn] || $RESPMIRROR = "" ]] && break
done

# Inicio da captura da mirrorlist
printf "\n%s\n" "Criando link e enviando para o arquivo link.txt."
printf "%s" "http://www.archlinux.org/mirrorlist/?" > "$TMPLINK"

# Captura dos países
if [[ $RESPCOUNTRY = "" ]]; then
 COUNTRY="country=all";
 printf "%s&" "$COUNTRY" >> "$TMPLINK"
else
 for b in ${RESPCOUNTRY[@]}; do
  case "$b" in
	1) COUNTRY="country=all";;
	2) COUNTRY="country=AU";;
	3) COUNTRY="country=BY";;
	4) COUNTRY="country=BE";;
	5) COUNTRY="country=BR";;
	6) COUNTRY="country=BG";;
	7) COUNTRY="country=CA";;
	8) COUNTRY="country=CL";;
	9) COUNTRY="country=CN";;
	10) COUNTRY="country=CO";;
	11) COUNTRY="country=CZ";;
	12) COUNTRY="country=DK";;
	13) COUNTRY="country=EE";;
	14) COUNTRY="country=FI";;
	15) COUNTRY="country=FR";;
	16) COUNTRY="country=DE";;
	17) COUNTRY="country=GR";;
	18) COUNTRY="country=HU";;
	19) COUNTRY="country=IN";;
	20) COUNTRY="country=ID";;
	21) COUNTRY="country=IE";;
	22) COUNTRY="country=IL";;
	23) COUNTRY="country=IT";;
	24) COUNTRY="country=JP";;
	25) COUNTRY="country=KZ";;
	26) COUNTRY="country=KR";;
	27) COUNTRY="country=LV";;
	28) COUNTRY="country=LU";;
	29) COUNTRY="country=MK";;
	30) COUNTRY="country=NL";;
	31) COUNTRY="country=NC";;
	32) COUNTRY="country=NO";;
	33) COUNTRY="country=PL";;
	34) COUNTRY="country=PT";;
	35) COUNTRY="country=RO";;
	36) COUNTRY="country=RU";;
	37) COUNTRY="country=RS";;
	38) COUNTRY="country=SG";;
	39) COUNTRY="country=SK";;
	40) COUNTRY="country=ZA";;
	41) COUNTRY="country=ES";;
	42) COUNTRY="country=LK";;
	43) COUNTRY="country=SE";;
	44) COUNTRY="country=CH";;
	45) COUNTRY="country=TW";;
	46) COUNTRY="country=TR";;
	47) COUNTRY="country=UA";;
	48) COUNTRY="country=GB";;
	49) COUNTRY="country=US";;
	50) COUNTRY="country=UZ";;
	51) COUNTRY="country=VN";;
  esac
  printf "%s&" "$COUNTRY" >> "$TMPLINK"
 done
fi

# Captura dos protocolos
if [[ $RESPPROTOCOL = "" ]]; then
 PROTOCOL="protocol=ftp&protocol=http";
 printf "%s" "$PROTOCOL" >> "$TMPLINK"
else
  case "$RESPPROTOCOL" in
	1) PROTOCOL="protocol=ftp";;
	2) PROTOCOL="protocol=http";;
  esac
  printf "%s" "$PROTOCOL" >> "$TMPLINK"
fi

# Captura das versões de ip
if [[ $RESPIPVERSION = "" ]]; then
 IPVERSION="ip_version=4";
 printf "&%s" "$IPVERSION" >> "$TMPLINK"
else
  case "$RESPIPVERSION" in
	1) IPVERSION="ip_version=4";;
	2) IPVERSION="ip_version=6";;
  esac
  printf "&%s" "$IPVERSION" >> "$TMPLINK"
fi

# Captura do estado do espelho
if [[ $RESPMIRROR = "" ]]; then
 STATUSMIRROR="";
 printf "%s" "$STATUSMIRROR" >> "$TMPLINK"
else
  case "$RESPMIRROR" in
	[Ss]) STATUSMIRROR="&use_mirror_status=on";;
	[Nn]) STATUSMIRROR="";;
  esac
  printf "%s" "$STATUSMIRROR" >> "$TMPLINK"
fi

printf "\n%s\n" "Baixando e criando arquivo mirrorlist.$NOMESCRIPT"
wget -O "$LOCALMIRRORLIST"mirrorlist."$NOMESCRIPT" -i "$TMPLINK"
printf "\n%s\n" "Apagando arquivo: \""$TMPLINK"\"".
rm "$TMPLINK"

# Descomentar mirrors
while read -p "Você quer descomentar as mirrors? [S/n]" RESPDESCOMENTAR ; do
  [[ $RESPDESCOMENTAR = [SsNn] ]] && break
done
if [[ $RESPDESCOMENTAR = [Ss] ]]; then
   printf "Descomentando as mirrors.\n"
   sed '/^#S/ s|#||' -i "$LOCALMIRRORLIST"mirrorlist."$NOMESCRIPT"

# Aplicar rankmirrors
   printf "Atenção:\n É recomendável utilizar o rankmirrors, pois ele determina a melhor conexão.\n Serão determinados 10 espelhos.\n"
	while read -p "Você quer utilizar o script rankmirrors? [S/n]" RESPRANK ; do
  	   [[ $RESPRANK = [SsNn] ]] && break
	done
	if [[ $RESPRANK = [Ss] ]]; then
   	   printf "Executando rankmirrors.\n"
   	   printf "O processo pode demorar um pouco.\n"
   	   rankmirrors -n 10 "$LOCALMIRRORLIST"mirrorlist."$NOMESCRIPT" > "$LOCALMIRRORLIST"mirrorlist
           rm "$LOCALMIRRORLIST"mirrorlist."$NOMESCRIPT" 
   	   printf "Rankmirrors finalizado.\n"
	elif [[ $RESPRANK = [Nn] ]]; then
   	   printf "Rankmirrors não executado.\n"
	fi

# Backup e copia do arquivo
   printf "\n%s\n" "Se for necessário, o comando sudo será utilizado."
   printf "Será feito um backup da mirrorlist em /etc/pacman.d/ com o nome \"mirrolist.bkp\".\n"
	while read -p "Você quer mover o arquivo para a pasta \"/etc/pacman.d/\"? [S/n]" RESPCOPIAR ; do
  	  [[ $RESPCOPIAR = [SsNn] ]] && break
	done
	if [[ $RESPCOPIAR = [Ss] ]]; then
   	  $SU cp /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.bkp
   	  printf "Criando backup.\n"
            if [[ -f "$LOCALMIRRORLIST"mirrorlist ]]; then
	      printf "Definindo permisão para 755.\n"
              chmod 755 "$LOCALMIRRORLIST"mirrorlist
	      printf "Modificando nome do dono e do grupo para root.\n" 
              $SU chown root:root "$LOCALMIRRORLIST"mirrorlist
   	      printf "Movendo arquivo.\n"
   	      $SU mv "$LOCALMIRRORLIST"mirrorlist /etc/pacman.d/mirrorlist
	    elif [[ -f "$LOCALMIRRORLIST"mirrorlist."$NOMESCRIPT" ]]; then
	      printf "Definindo permisão para 755.\n"
              chmod 755 "$LOCALMIRRORLIST"mirrorlist.$NOMESCRIPT
	      printf "Modificando nome do dono e do grupo para root.\n" 
              $SU chown root:root "$LOCALMIRRORLIST"mirrorlist.$NOMESCRIPT 
   	      printf "Movendo arquivo.\n"
   	      $SU mv "$LOCALMIRRORLIST"mirrorlist.$NOMESCRIPT /etc/pacman.d/mirrorlist
	    fi

# Verificar se a mirrorlist está funcionando 
         printf "Aguarde 5 segundos para o teste da mirrorlist.\n"
         sleep 5
	 printf "Testando mirrorlist.\n"
	 $SU pacman -Syy

# Apagar arquivo
	 printf "\nSe o processo de sincronização funcionou,\n"
	 while read -p "você quer apagar o arquivo de backup? [S/n]" RESPDELBACKUP ;
         do
  	   [[ $RESPDELBACKUP = [SsNn] ]] && break
	 done
	 if [[ $RESPDELBACKUP = [Ss] ]]; then
   	   printf "Apagando o arquivo de backup em \"/etc/pacman.d/\".\n"
   	   $SU rm /etc/pacman.d/mirrorlist.bkp
	 elif [[ $RESPDELBACKUP = [Nn] ]]; then
           printf "Restaurando o arquivo de backup em \"/etc/pacman.d/\".\n"
           $SU mv /etc/pacman.d/mirrorlist.bkp /etc/pacman.d/mirrorlist
	 fi
	 elif [[ $RESPCOPIAR = [Nn] ]]; then
           printf "Arquivo não copiado.\n"
           printf "Um dos arquivos temporários estão na pasta \""$LOCALMIRRORLIST"\"\n"
           printf "Com rankmirrors: mirrorlist\nSem rankmirrors: mirrorlist."$NOMESCRIPT"\n"  
	 fi
elif [[ $RESPDESCOMENTAR = [Nn] ]]; then
   printf "As mirrors não foram decomentadas.\n"
   printf "Localização do arquivo: \""$LOCALMIRRORLIST"mirrorlist."$NOMESCRIPT"\"\n"   
fi
exit 0

Última edição por swatquest (10/05/2012 01:49:53)

Offline

#2 07/11/2011 08:27:05

sberlotto
Colaborador
De: Gravataí/RS
Registrado: 10/08/2008
Mensagens: 333
Website

Re: [bash] Atualizar mirrorlist 0.5 (10/05/2012)

Massa heim @swatquest !
Ótimo trabalho.

De repente, o que acham, poderia ser criado um espaço no site para se colocar estes scripts/programas que o pessoal cria, e que todos gostam, listados organizadamente com suas descrições, criador e data da ultima alteração. Ficaria muito mais fácil o acesso...


Sérgio Berlotto Jr,
Colaborador, Programador
"O ArchLinux é o que você faz!" (Judd)
http://www.berlotto.net

Offline

#3 07/11/2011 14:18:58

willianholtz
Membro
De: Três Barras - SC
Registrado: 23/08/2009
Mensagens: 374

Re: [bash] Atualizar mirrorlist 0.5 (10/05/2012)

excelente trabalho mesmo....! esta de parabéns!


Vostro 1520 = CPU:Core 2 Duo P8600 2.4GHz 3MB | GPU:NVidia GeForce 9300M GS de 512MB | HD: 360GB | RAM:4GB | Arch-Linux

Offline

#4 07/11/2011 15:06:09

swatquest
Moderador
Registrado: 05/10/2010
Mensagens: 668

Re: [bash] Atualizar mirrorlist 0.5 (10/05/2012)

Valeu galera.

Atualizado para versão 0.2

- correção na construção do link IPVERSION

correção
 linha 159
 IPVERSION=IPVERSION=ip_version=4";

para

 IPVERSION="ip_version=4";

Para versão 0.3
- Opção de restauração do arquivo de backup se não funcionar a sincronização do pacman.

Última edição por swatquest (07/11/2011 15:49:52)

Offline

#5 10/11/2011 15:02:06

swatquest
Moderador
Registrado: 05/10/2010
Mensagens: 668

Re: [bash] Atualizar mirrorlist 0.5 (10/05/2012)

Atualizado para versão 0.3

- Fixado o descomentar do arquivo.
- Adicionado a restauração do arquivo de backup se não funcionar o teste de sincronização

Modificação

LINHA 188
   sed '/^#\S/ s|#||' -i "$LOCALMIRRORLIST"mirrorlist."$NOMESCRIPT"
PARA
   sed '/^#S/ s|#||' -i "$LOCALMIRRORLIST"mirrorlist."$NOMESCRIPT"

LINHA 247
   	   printf "Arquivo não apagado.\n"
PARA
           printf "Restaurando o arquivo de backup em \"/etc/pacman.d/\".\n"
           $SU mv /etc/pacman.d/mirrorlist.bkp /etc/pacman.d/mirrorlist

Offline

#6 04/05/2012 01:56:19

swatquest
Moderador
Registrado: 05/10/2010
Mensagens: 668

Re: [bash] Atualizar mirrorlist 0.5 (10/05/2012)

versão 0.4

* sincronizado com site http://www.archlinux.org/mirrorlist/

Offline

#7 08/05/2012 23:59:56

sberlotto
Colaborador
De: Gravataí/RS
Registrado: 10/08/2008
Mensagens: 333
Website

Re: [bash] Atualizar mirrorlist 0.5 (10/05/2012)

@swatquest testei aqui e algumas respostas com "S/n" não funcionaram. Só isto, o resto está jóia mesmo heim !


Sérgio Berlotto Jr,
Colaborador, Programador
"O ArchLinux é o que você faz!" (Judd)
http://www.berlotto.net

Offline

#8 10/05/2012 01:49:07

swatquest
Moderador
Registrado: 05/10/2010
Mensagens: 668

Re: [bash] Atualizar mirrorlist 0.5 (10/05/2012)

sberlotto

Valeu..
versão 0.5
Fixado S/n
  - Do descomentar
  - Do rankmirrors
  - Do copiar
  - Do bakup

Última edição por swatquest (10/05/2012 01:50:18)

Offline

Rodapé do site