Mantendo espelhos do Slackware com o Slackmirror

Geralmente mantenho uma cópia do Slackware-Current em minha máquina, para poder acompanhar melhor as novidades para a próxima versão. Programas como o gftp, mc, konqueror, wget entre outros, são muito bons para auxiliarem na manutenção de espelhos como estes, mas sempre deixam algum trabalho adicional, como remover pacotes excluídos da árvore da nova versão, saltar o download de pacotes de línguas indesejadas, …


Durante muito tempo mantive meu espelho do current com o wget e muita paciência, checando diretório por diretório, o que fica e o que sai do current. Filizmente, o Slackware mantém o arquivo FILELIST.TXT, com uma listagem completa de todos os pacotes e arquivos presentes em sua árvore, o que simplifica muito a automação da manutenção de um espelho.


O aplicativo Slackmirror é um programa em bash script que venho desenvolvendo alguns a anos, cujo papel fundamental é manter uma cópia atualizada do slackware-current bem como de outras versões do Slackware e seus derivados, como o Slamd64 e o Bluewhite64.




Sumário




1 O Slackmirror


O Slackmirror é todo feito em bash script, utilizando ainda o wget, para baixar os arquivos da rede e os aplicativos cdrecord, mkisofs e growisofs, caso você queira criar imagens iso e queimar dvds com o current. Evidentemente ainda tem uma grande porção de sed, awk, grep e algumas habilidades do echo, como cores, posicionamento e outros.


Esta versão atual do Slackmirror foi incrementada com várias habilidades, as quais resumo abaixo:


  1. Criar e manter espelhos de diversas distribuições Slackware-like (Slackware, Slamd64, Bluewhite64, …), o objetivo fundamental;

  2. Criar imagens iso das distribuições do espelho local;

  3. Gravar imagens iso das distribuições do espelho local, bem como qualquer outra imagem iso passada como parâmetro;

  4. Filtrar arquivos fontes, de linguagens e .git no momento da criação ou manutenção de um espelho;

  5. Restaurar download de binários e fontes do ponto de interrupção;

  6. Desligar o sistema ao final de suas tarefas.


O texto abaixo apresenta estas funcionalidades e as configurações possíveis do Slackmirror, para um melhor aproveitamento do aplicativo.


2 Instalação e configuração


A instalação segue o padrão do Slackware, baixe a versão mais nova do aplicativo no link abaixo:




http://www.rra.etc.br/linux/slackmirror/





Em seguida instale-o como root, com o comando installpkg:



# installpkg slackmirror-2.4.18-noarch-1.tgz


O aplicativo estará pronto para ser utilizado logo após a instalação, mas é sempre bom verificar algumas configurações antes de iniciar o uso, principalmente no que diz respeito às permissões de acesso aos diretórios para onde os arquivos serão importados. Os mais apressados podem seguir direto para a aplicação das ações e opções na seção 3. Apenas use-o como root para evitar problemas com permissões de acesso aos diretórios.


O arquivo de configuração fica em /etc/slackmirror/slackmirror.conf, mas ele também pode ser criado em  /.local/etc/slackmirror, para usuário local. Este arquivo contém 15 variáveis, as quais apresento a seguir.


2.1 MIRROR_PATH



MIRROR_PATH=”/home/ftp/distro”


Esta variável contém o diretório aonde os espelhos serão armazenados. Se for usar como um usuário comum (não o root), verifique se possui autorização de escrita e leitura nesta pasta, ou altere o valor desta variável para um diretório em sua área.


Os espelhos serão construídos neste diretório com a estrutura abaixo:



$MIRROR_PATH/slackware/slackware-$VERSÃO/
$MIRROR_PATH/slamd64/slamd64-$VERSÃO/


onde a VERSÃO geralmente é a ‘current‘, veja mais abaixo.


2.2 ISO_PATH


Esta variável contém o endereço para o armazenamento das imagens iso gerados pela ação mkiso e burning.



ISO_PATH=”/home/ftp/distro/isos”


Esta pasta também deve ter acesso de leitura e escrita pelo usuário do Slackmirror.


2.3 DISTRO e DISTRO_VERSION


Estas variáveis contém a distribuição e a versão padrão para o espelho criado pelo Slackmirror. Geralmente não há necessidade de alterar estes valores, pois durante a chamada ao Slackmirror é possível passar novos valores para estas variáveis sem ter que editar o slackmirror.conf.



DISTRO=”slackware”
DISTRO_VERSION=”current”


2.4 Opções do wget


As variáveis seguintes permitem alterar o comportamento do wget. O LIMIT_RATE contém apenas a taxa de download limite do wget, com a respectivo prefixo (k – quilo, M – mega, …). Consulte o manual do wget para maiores detalhes.



WGET_OPTIONS=”--timeout=30″
LIMIT_RATE=”600K”


2.5 Filtros


Filtros é uma característica herdada da primeira versão do Slackmirror. Com os filtros é possível selecionar os pacotes que serão ou não baixados. Em versões anteriores, existia um filtro mais complexo e bem mais flexível do que estou usando na versão atual. No entanto, o uso destes filtros nunca passava da configuração básica, além da dificuldade na manutenção dos mesmos. Por isto optei por um modelo de filtragem de pacotes bem mais simples nesta versão, com a filtragem de apenas três tipos de arquivos, veja abaixo.


As variáveis apresentadas a seguir permitem controlar estes três filtros de arquivos. Para ativar um filtro, basta colocar um ‘1’ em sua variável correspondente e para desativar, coloque um ‘0’.


2.5.1 GIT_FILTER


O git é o aplicativo utilizado por muitos espelhos, para atualizarem seus conteúdos. Este aplicativo cria diversos arquivos em diretórios .git, enquanto o conteúdo do espelho está sendo atualizado. Eventualmente estes arquivos saem listados no FILELIST.TXT e acabam sendo copiados pelo Slackmirror. Este filtro descarta a cópia destes arquivos, baixando apenas os pacotes já fechados.



GIT_FILTER=1


Este filtro está normalmente ativo (1) no slackmirror.conf.


2.5.2 LANG_FILTER


Caso você esteja querendo apenas manter atualizações do seu Slackware, pode achar desinteressante perder horas de download baixando os muitos megas de línguas suportadas pelo KDE e o Aspell. O filtro LANG_FILTER, diz ao Slackmirror para baixar apenas os arquivos da linguagem desejada. Este filtro está normalmente desativado (0):



LANG_FILTER=0
LANG_ASPELL=”pt”
LANG_KDE=”pt_BR”


Para outras linguagens, verifique os diretórios extra/aspell-word-lists/ e slackware/kdei/.


2.5.3 SOURCE_FILTER


Este último filtro, diz ao Slackmirror, para não baixar as fontes dos programas. Este filtro também está normalmente desativado (0):



SOURCE_FILTER=0


2.6 DEV_DVD


Esta variável contém o nome do dispositivo de gravação de DVDs. Altere este valor apenas se tiver problemas com a gravação de mídias no Slackmirror. A versão atual do Slackmirror gera apenas imagens para DVD.



DEV_DVD=”/dev/dvdrw”


2.7 Outras variáveis


A menos da variável TMP, abaixo, as demais variáveis, embora constem no slackmirror.conf, ainda não foram implementadas no aplicativo, sendo apenas intenções futuras.



TMP=”/tmp”
EDITOR=”nano”
LOG=0


2.8 Seleção de espelhos


A última configuração do Slackmirror é a definição dos espelhos fonte para o download dos arquivos. Os espelhos fonte são definidos no arquivo /etc/slackmirror/mirrors. Sua estrutura tem a forma:



nome_da_distribuição%url_do_espelho


Onde o nome_da_distribuição deve ser slackware, slamd64, bluewhite64, … A url_do_espelho deve apontar para a base do diretório onde se encontra todas as versões da distribuição desejada. Por exemplo, o espelho do Bluewhite64 na Austrália deve apontar para:



http://mirror.inode.at/data/bluewhite64/


onde em seu conteúdo está as versões do Bluewhite64:



# lynx -dump http://mirror.inode.at/data/bluewhite64/
Index of /data/bluewhite64/

Name Last Modified Size Type
[1]Parent Directory/ – Directory
[2]bluewhite64-11.0/ 2008-Apr-22 09:32:38 – Directory
[3]bluewhite64-11.0-iso/ 2007-Jun-16 12:16:04 – Directory
[4]bluewhite64-12.0/ 2008-Apr-22 09:10:37 – Directory
[5]bluewhite64-12.0-iso/ 2008-Feb-04 16:09:32 – Directory
[6]bluewhite64-current/ 2008-Apr-18 11:05:32 – Directory



Neste exemplo, o espelho deve ser declarado com uma entrada no arquivo /etc/slackmirror/mirrors na forma:



bluewhite64%http://mirror.inode.at/data/bluewhite64/
slamd64%http://slamd64.he.net/
slackware%http://mirror.pacific.net.au/linux/slackware/


Observe que várias entradas para distribuições diferentes podem ser declaradas no arquivo mirrors, mas apenas uma por distribuição. As entradas apresentadas acima são as padrões do Slackmirror, se achar conveniente, altere para espelhos mais próximos de sua localização.





3 Usando o Slackmirror


Se você entrar apenas o comando slackmirror, será apresentado um texto de ajuda, com todas as opções do aplicativo.


Os parâmetros suportados pelo Slackmirror são divididos em ações e opções. As ações não são acumulativas e portanto deve haver apenas uma ação por chamada ao aplicativo. Demais ações são ignoradas ou podem gerar erros.


As ações suportadas pelo Slackmirror são:



--help

apresenta texto de ajuda do aplicativo. O mesmo efeito ao chamar o slackmirror sem argumento;


--create

cria uma cópia de um espelho. Esta ação somente funciona se o espelho local não existir;


--upgrade

atualiza o espelho local. Funciona somente se o espelho local existir;


--clean

limpa o espelho local de arquivos/pacotes antigos. A ação upgrade, acima, faz um clean automaticamente, ao terminar a atualização do espelho;


--show

mostra as configurações atuais do slackmirror.conf;


--version

apresenta a versão atual do Slackmirror. A versão é apresentada também em outras ações como upgrade e create;


--mkiso

cria uma imagem iso do espelho local;


--burning [nome_da_imagem_iso]

cria uma imagem iso do espelho atual e queima uma mídia de DVD com ela. Esta ação também pode ser usada para queimar uma imagem iso já existente. Para isto, basta passar o nome do arquivo iso como parâmetro.


As opções servem para direcionar melhor as ações acima, podendo-se passa mais de uma opção por chamada. Abaixo uma breve descição das opções:



--continue

esta opção passa para o wget a opção de mesmo nome. O continue atua apenas nos arquivos terminados por tgz, bz2, zip e gz. Demais arquivos serão sempre sobrescritos. Esta opção é útil quando se tem que interromper o download de grandes arquivos, como é o caso de algumas fontes e pacotes do sistema. Neste caso, o continue fará com que o download do arquivo seta continuado de onde parou;


--verbose

faz com que o slackmirror emita várias informações de sua execução. Isto é útil apenas para depuração de erros;


--distro <distribuição>

esta opção permite trocar o valor da variável DISTRO, definida em slackmirror.conf, em tempo de execução. Veja exemplo mais abaixo;


--distro-version <versão_da_distribuição>

como a opção acima, troca o conteúdo da variável DISTRO_VERSION em tempo de execução;


--quick

habilita todos os filtros do slackmirror: GIT_FILTER, LANG_FILTER, SOURCE_FILTER;


--force

força o upgrade do espelho, mesmo que o arquivo FILELIST.TXT local seja igual ao do espelho remoto. Não é necessário usar esta opção se a última utilização do upgrade foi bem sucedida;


--halt

esta opção desliga o sistema ao final da execução do Slackmirror.


3.1 Exemplos de uso


Vamos ver alguns exemplo de uso do aplicativo.


3.2 Criando um espelho do zero


Para criar um espelho do zero, basta usar a ação -create:



# slackmirror --create


este comando irá criar um espelho do Slackware-Current, a partir de um espelho vazio. Para criar um espelho do Slamd64, basta adicionar a opção -distro, como segue:



# slackmirror --create --distro slamd64


3.3 Atualizando seu espelho


O comando a seguir atualiza o espelho local do Slackware-Current:



# slackmirror --upgrade


e este do Bluewhite64:



# slackmirror --upgrade --distro bluewhite64


Se desejar a versão 12.0 do Slamd64, adicione a opção -distro-version



# slackmirror --upgrade --distro slamd64 --distro-version 12.0


3.4 Espelhos rápidos e desligamento do sistema


Para upgrades muito grandes, pode ser aconselhável habilitar o desligamanto automático, ao final da atualização do espelho. Isto pode ser feito com a opção -halt



# slackmirror --upgrade --distro slamd64 --halt


com isto a máquina desligará assim que terminar a atualização do espelho do Slamd64.


Para otimizar o uso de sua conexão, baixando o essencial para o seu espelho, utilize a opção --quick. Isto habilitará todos os filtros evitando baixar as fontes, dicionários e arquivos de internacionalização indesejados:



# slackmirror --upgrade --distro slamd64 --halt --quick


3.5 Criando imagens e gravando DVDs


Para criar uma imagem, utilize a opção -mkiso. O Slackmirror entrará no diretório do espelho selecionado e fará uma imagem iso, bootável. Esta imagem será armazenada no diretório definido pela variável ISO_PATH, em slackmirror.conf.


Criando uma imagem iso do Slackware-Current:



# slackmirror --mkiso


Criando uma imagem iso do Slamd64-Current:



# slackmirror --mkiso --distro slamd64


Se desejar gravar a imagem em um DVD pode usar o comando -burning:



# slackmirror --burning slamd64-current-2008_04_17-dvd.iso


O Slackmirror irá procurar a imagem iso no diretório corrente e em seguida, no diretório ISO_PATH. Depois disto irá queimar a mídia com o comando growisofs.


Você pode fazer a imagem iso e queimar o seu DVD em um só comando. Para isto use a ação -burning sem argumento:



# slackmirror --distro slamd64 --burning


4 Conclusões Finais


Este aplicativo nasceu de uma necessidade pessoal, mas a pedido de alguns amigos me obriguei a fazer um código mais decente e caprichado. A versão atual considero uma boa demonstração de um código em bash shell, com estruturas bem planejadas e muitas técnicas de filtragem com sed, awk, … para se alcançar os objetivos desejados. Fiquem a vontade para esturdar, redistribuír e alterar o código.

Aproveitando, quero agradecer ao meu amigo Leomar Viegas Junior pelas muitas pentelhações atrás da correção de bugs e algumas sugestões, que tornaram este aplicativo mais usável e o removeu do limbo.


About this document …


Fazendo espelhos do Slackware com o Slackmirror


This document was generated using the
LaTeX2HTML translator Version 2002-2-1 (1.71)


Copyright © 1993, 1994, 1995, 1996,
Nikos Drakos,
Computer Based Learning Unit, University of Leeds.


Copyright © 1997, 1998, 1999,
Ross Moore,
Mathematics Department, Macquarie University, Sydney.


The command line arguments were:

latex2html -split 0 -nonavigation -show_section_numbers Slackmirror.tex


The translation was initiated by Rudson Ribeiro Alves on 2008-04-23




Rudson Ribeiro Alves
2008-04-23

Este post tem 3 comentários

  1. Marcelo

    Caro… Adorei essa forma de sincronismo de repositorio… Mas essa versão 3.0 não está funcionando para mim, diferente da versão 2.x que funcionava muito bem… Você não pode me mandar essa versão anterior???

    No aguardo e obrigado.

  2. rudsonalves

    Olá Marcelo, coloquei a versão 2.4.23 em:

    http://localhost/linux/slackmirror/

    Se não me engano, nesta versão eu estava fazendo uma GUI em Qt ou GTK (???), que não ficou pronta. Veja se lhe serve. Mas qual foi o problema?

Deixe um comentário

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.