Slackmirror
Última versão: 3.3.1
O Slackmirror é um aplicativo que venho desenvolvendo deste 2005. Seu objetivo inicial era manter uma cópia atualizada de um espelho do Slackware-current, para acompanhar as novidades de minha distribuição preferida.
Atualmente ele amadureceu e deixou de ser um simples Script para download do Slackware-current, para se tornar um aplicativo de gerenciamento de espelhos de distribuições Slack-like, em qualquer versão, com cache de md5 para agilizar as atualizações, interface gráfica para gerenciar os downloads, download simultâneo de diversos arquivos e diversas distribuições, e tudo ao alcance de uma única linha de comando ou por meio interface gráfica simples e intuitiva.
Sumário
1. Um Breve Histórico
O Slackware mantém os pacotes de desenvolvimento para a próxima versão da distribuição, no diretório slackware-current, em seus repositórios. Geralmente esta versão está em boas condições de uso em dois a três meses antes do lançamento oficial.
O objetivo do current é justamente coletar dados sobre o estado dos pacotes, dispondo-os para testes pela comunidade. Isto é uma boa oportunidade para aqueles que desejam conhecer as novidades para a nova versão do Slackware, ou que necessitam utilizar novas versões.
Meus motivos já passaram da necessidade até a curiosidade e por muito tempo utilizei aplicativos como o wget, mc e gftp para baixar os pacotes, além de várias linhas de comandos, para remover os arquivos obsoletos e outros indesejáveis, da cópia local do current.
A primeira evolução natural deste processo veio com a criação do aplicativo slackmirror, por volta de setembro de 2005 (ou talvez um pouco antes), sendo todo ele escrito em Bash Script. Esta versão foi, por vezes, paralisada, dado a imaturidade e instabilidade de algumas das versões do Slackware-current lançadas na ocasião, e descontinuada, pela minha inabilidade em fazer um código em Bash descente e duradouro. A idéia somente ganhou folego com o surgimento do Slamd64 e do Bluewhite64, acompanhada da aquisição de minha primeira máquina 64bits.
A partir da versão 2.x, o slackmirror passou a suportar as distribuições Slamd64 e Bluewhite64, sendo totalmente reescrito, ainda em Bash. A última versão em Bash foi a 2.4.23, de agosto de 2008.
Desde então, passei a desenvolver o aplicativo em Python, renomeando a versão para 3.0. Posteriormente reescrevi grandes porções do código Python, necessários para reestruturar alguns gargalos do projeto e renomeei-o para a versão 3.2.
Dentre as novas características do slackmirror, posso destacar:
- Suporte a várias distribuições Slackware-like – Atualmente o slackmirror suporta as distribuições Slackware, Slamd64, Bluewhite64 e Slackware64;
- Suporte a vários espelhos simultâneos – é possível fazer vários downloads simultâneos em diversos espelhos diferentes, de diferentes arquivos em uma mesma distribuição. Isto permite ao aplicativo alcançar altas taxas de download, independente das limitações de um espelho em particular. Por padrão, o slackmirror vem com apenas um download por espelho habilitado e três espelhos disponíveis por distribuição;
- Cache de md5 dos arquivos baixados – ao criar um espelho (opção create), ou fazer um upgrade de um espelho, o slackmirror cria um cache com os md5 gerados, dos arquivos baixados, agilizando o processo de upgrade, deixando-o até 4 vezes mais rápido;
- Possui gui para administrar downloads – no momento ela apenas chama as instâncias do slackmirror para baixar/atualizar as distribuições;
- Suporte flexível a espelhos – veja /etc/slackmirror/mirrors para mais detalhes;
- Controle de taxa de download – o download atualmente é feito pelo wget, isto me deixou livre para me preocupar com outras funcionalidades do aplicativo, mas não é uma solução Pythônica, apenas uma conveniência momentânea.
2. Uso
A sintaxe do slackmirror é apresentada na linha abaixo:
slackmirror <action> [options]
O slackmirror ainda possui um manual com todos estas informações, alcançados pelo comando man do sistema ou pela opção “-h”. Nas duas próximas seções é apresentado as ações possíveis no slackmirror e suas opções.
2.1. Ações
O slackmirror realiza apenas uma única ação por execução, sendo as demais ignoradas. As ações suportadas são apresentadas na tabela abaixo:
| Ação | Descrição |
|---|---|
| -h, --help | Apresenta o texto de ajuda do programa |
| -c, --create | Criar um espelho novo |
| -u, --upgrade | Atualiza um espelho existente |
| -s, --show | Mostra as opções configuradas atualmente |
| -m, --mkiso | Cria o iso da distribuição selecionada |
| -b, --burning | Cria o iso e grava em um DVD |
| -l, --clean | Remove arquivos antigos do espelho atual. É executado a cara upgrade |
2.2. Opções
As opções guiam o slackmirror na execução de suas ações. As opções suportadas são apresentadas na tabela a seguir:
| Opção | Descrição |
|---|---|
| --connections-mirror=CM | onde CM é o máximo número de conexões por espelho |
| -v, --verbose | habilita modo verbose |
| -n, --no-stop | não para em caso de erro de download (desabilitado) |
| -d DIST, --distro=DIST | DIST deve ser uma das distribuições: slackware, slackware64, slamd64 ou bluewhile64 |
| -i DV, --distro-version=DV | onde DV é a versão da distribuição a ser baixada (current) |
| -q, --quick | habilita o modo fast: Pula linguaguens, arquivos git e sources |
| -f, --force | força o upgrade, mesmo se nào houver atualizações em FILELIST.TXT |
| -a, --halt | Desliga o sistema após o termino do download |
| --limit-rate=WLRATE | WLRATE é o limite de banda passado para o wget (--limit-rate) em kB/s |
| --enable-log | habilita arquivo de log |
| --disable-log | desabilita arquivo de log |
| --wget-options=WGETOPT | WGETOPT são as opções de download passadas ao wget |
| --enable-lang-filter | habilita filtro de linguague |
| --disable-lang-filter | desabilita filtro de linguague |
| --enable-git-filter | habilita filtro de arquivos do git |
| --disable-git-filter | desabilita filtro de arquivos do git |
| --enable-source-filter | habilita filtro de arquivos fontes |
| --disable-source-filter | desabilita filtro de arquivos fontes |
| --set-kde-lang=LKDE | LKDE é a linguagem para o KDE (arquivos em kdei) |
| --set-aspell-lang=LASPELL | LASPELL é a linguagem para o Aspell (arquivos em extra/aspell-word-lists/) |
| --gui-mode | modo gui. No momento não faz muito |
| --http-proxy=HPROXY | HPROXY deve conter o proxy http (http://username@passwd:proxy_address:port) |
| --ftp-proxy=FPROXY | FPROXY deve conter o proxy ftp (ftp://username@passwd:proxy_address:port) |
2.3. Arquivo de Configurações
O slackmirror possui dois arquivos de configuração situados em /etc/slackmirror, o mirrors e o slackmirror.conf, apresentados a seguir.
2.3.1. /etc/slackmirror/mirrors
O arquivo /etc/mirrors, contém uma lista com várias urls de espelhos do Slackware e Slackware64, Slamd64 e Bluewhite64. Cada linha possui informações sobre o espelho, com a sintaxe apresentada abaixo:
distro%modo%url_base
onde:
- distro – é o nome da distribuição: slackware, slackware64, slamd64 ou bluewhite64;
- modo – é o modo como o espelho está organizado:
- 0 – se o FILELIST.TXT está na url_base, como:
url_base/FILELIST.TXT- 1 – se o FILELIST.TXT está em url_base/distro, como:
url_base/slackware/FILELIST- 2 – se o FILELIST.TXT está em url_base/distro/distro_version:
url_base/slamd64/slamd64-12.1/FILELIST.TXT- 3 – se o FILELIST.TXT esta em url_base/distro_version:
url_base/slamd64-12.1/FILELIST.TXT - url_base – a url do espelho.
O modo 3 é a arquitetura mais usada nos espelhos Slackware e semelhantes.
Este arquivo vem com três espelhos habilitados por padrão (sem a tralha, #, no início da linha). Em princípio não há limite para o número de espelhos habilitados, apenas estético, no momento de executar o aplicativo. Mas, em geral, três a quatro espelhos são o suficientes para se conseguir taxas bem elevadas de download.
É aconselhável configurar as urls de sua preferência neste arquivo, e não deixe de verificá-las (url+modo). Na ocasião em que fiz este arquivo, tomei o cuidado de adicionar todas as urls disponíveis e conferir os modos selecionados. No entanto, já faz um bom tempo que atualizo apenas endereços específicos e não o arquivo por completo.
2.3.2. /etc/slackmirror/slackmirror.conf
Este arquivo possui as opções padrões utilizadas pelo slackmirror, como distribuição, versão, filtros, … e algumas configurações como paths e dispositivo DVD-Write.
Estas variáveis são apresentadas na tabela a seguir, com o valor padrão entre parenteses:
| Variável | Descrição |
|---|---|
| mirror_path | diretório onde os espelhos serão gravados (/home/ftp/distro) |
| iso_path | diretório onde as imagens serão gravadas (/home/ftp/distro/isos) |
| distro | distribuição padrão (slackware) |
| distro_version | versão padrão da distribuição (current) |
| wget_options | opções para o wget (--timeout=30) |
| wget_limit_rate | limite de download em kB. Deixe-o vazio para "sem limite" |
| tmp_dir | diretório padrão para arquivos temporários (/tmp) |
| connections_mirror | número de conexões por espelho (1) |
| git_filter | remove arquivos do git da lista de download (True) |
| lang_filter | habilita o filtro de linguagem (False) |
| lang_aspell | define a linguagem padrão para o aspell (pt) |
| lang_kde | define a linguagem padrão para o kde (pt_BR) |
| source_filter | habilita o filtro de fontes. Se habilitado, não baixa as fontes (False) |
| log_status | habilita o log (False) |
| dvd_device | dispositivo DVD-Write da máquina (/dev/dvdrw) |
| http_proxy | o endereço do proxy http (None) |
| ftp_proxy | o endereço do proxy ftp (None) |
| halt_command | comando para desligar o sistema (su -c halt) |
| terminal | terminal para executar o slackmirror pelo gui (xterm) |
A variável terminal não está habilitada no programa slackmirrorgui, devido a problemas encontrados com os terminais konsole e Terminal, ainda não resolvidos.
2.3.3. O cache de md5
O slackmirror cria um cache com os md5 gerados dos arquivos baixados, que é renovado apenas a cada novo download de um arquivo. O cache é armazenado em $HOME/.local/var/slackmirror/, em arquivos de nomes <distribuição>_md5.cache.
Estes códigos md5 são comparados com os md5 distribuídos no arquivo CHECKSUMS.md5, distribuídos nos repositórios das distribuições Slack-like, a cada upgrade solicitado, sem a necessidade de gerar novamente o código md5. Isto reduz a velocidade de upgrade em até 1/4.
Em princípio, todo este controle é transparente para o usuário, não necessitando de nenhuma interferência especial. A única situação que vejo a possibilidade de ocorre algum problema com o cache é no caso em que o espelho, ou parte dele, seja apagado do disco por terceiros. Neste caso, um “slackmirror -u“, não irá gerar o efeito desejado, baixando apenas alguns poucos arquivos. Nestas ocasiões é necessário remover o diretório $HOME/.local/var/slackmirror (ou melhor, o arquivo de cache da distribuição alterada), para que no próximo upgrade, todos os arquivos não encontrados no espelho local sejam de fato baixados.
2.4. Exemplos de Uso
A seguir, alguns exemplos de uso do slackmirror.
Este comando atualiza (-u) o espelho da distribuição (-d) slamd64.
Atualiza um espelho do Slackware (distribuição padrão, não necessita do -d). O -f serve para forçar a atualização, o que é necessário quando o slackmirror é interrompido por um CONTROL+C, durante uma criação ou atualização de um espelho.
> http://192.168.1.1:8080 --ftp-proxy http://192.168.1.1:8080
Cria (-c) um espelho da distribuição (-d) bluewhile64 através do proxy 192.168.1.1, porta 8080.
Atualiza o espelho (-u) do bluewhite64 (-d bluewhile64), sem as fontes e os pacotes de linguagem diferentes dos selecionados (-q). Útil para um download rápido.
> --set-kde-lang en_GB --set-aspell-lang en \
> --enable-lang-filter
Atualiza o espelho do slackware64, configura a linguagem padrão do KDE para “en_GB” e do Aspell para “en” e, por fim, habilita a filtragem dos pacotes de linguagem.
2.4.1. Aumentando a velocidade de download
Uma das grande mudanças feitas na versão 3.2.x do slackmirror lhe deu a possibilidade de se baixar diversos arquivos simultaneamente, para uma mesma instância do slackmirror. Isto permite maximizar o uso da banda de download, podendo chegar facilmente ao limite físico de sua rede.
Para isto, existe duas formas de se conseguir este aumento na velocidade de download:
- aumentando o número de espelhos – isto é feito removendo a tralha (#) das linhas no arquivo /etc/slackmirror/mirrors, para a distribuição desejada. Apenas não deixe de verificar os espelhos;
- aumentar o número de downloads por espelho – para isto basta passar o número de download por espelho pela opção –connections-mirror.
Em princípio não existe um limite quanto ao número de espelhos que se pode ser habilitados para o slackmirror. O gerenciador de download irá procurar um espelho disponível e iniciar um download assim que o encontrar.
Uma forma mais eficaz de aproveitar a banda de download é aumentando o número de download por espelho. Para isto ter efeito significativo, é necessário escolher espelhos com boa banda de download e que aceitem mais de um conexão por IP, de outra forma o servidor pode recusar a solicitação do slackmirror.
A linha abaixo faz o download de 6 arquivos simultaneamente, solicitando duas conexões por espelho, enquanto o /etc/slackmirror/mirrors, possui três espelhos disponíveis para a distro slackware64. Com este comando cheguei a consegui uma taxa média de 700kB/s.
> --connections-mirror 2 --upgrade
SLACKMIRROR - 3.2.30
Distro: slackware64-current
Mirrors:
[ 0] http://slackware.cs.utah.edu/pub/slackware/slackware64-current
[ 1] http://mirror.pacific.net.au/linux/slackware/slackware64-current
[ 2] http://gd.tuwien.ac.at/opsys/linux/slackware/slackware64-current
Settings:
log_status : False
halt_system : False
verbose : False
2.5. Slackmirror GUI
O slackmirror possui uma gui simples, chamada slackmirrorgui. Esta gui gerencia instancias do slackmirror, permitindo operar a grande maioria dos seus argumentos. Esta gui é feita em PyQt4, e por isto necessita da instalação da biblioteca qt4 e do PyQt4 para funcionar. Observe que a versão 12.2 do Slackware trabalha com a qt3.
Para chamá-la, execute o slackmirrorgui, que deve abrir uma interface, conforme a figura seguir. Clique na imagem para ampliar.
Na figura abaixo é mostrado a execução do slackmirrorgui, com três instâncias do slackmirror, abertas para atualizar os espelhos do slackware, slackware64 e do slamd64.
3. Changelog
Já faz algum tempo que venho tentando me educar a manter sempre atualizado o Changelog do slackmirror. Nos últimas versões, o tenho mantido em dia. O texto abaixo é o conteúdo atual do Changelog:
Slackmirror 3.3.1:
- fixado a variável dvd_device para receber o valor de config.dvd_device
Slackmirror 3.3.0:
- calcula a taxa de download rate e o tempo dinamicamente;
- bug fix: diferenciado o tratamento de arquivos que não existem no
CHACKSUM.txt de arquivos novos;
- adicionado a opção '--check' para checar md5sum dos arquivos (teste);
- alterado o número de conexões defalt para 2 por espelho.
Slackmirror 3.2.33:
- corrigido os espelhos do Bluewhite64;
- removido uma linha print esquecida em download_list.
Slackmirror 3.2.32:
- adicionado tratamento de erro no tamanho do arquivo baixado;
- corrigido bug no endereço do md5_cache de file_dest para 'FILELIST.TXT'
e feito mais algumas mudanças para receber md5sum_new corretamente;
- foi adicionado um contador de erro de tamanho baixadona função
download_list. O máximo de downloads no momento está fixado em 5
tentativas, definido na variável max_download_try, em smlib.py;
- aumentei o intervalo entre impressões de 0,3 para 0,5, na função
download_list.
Slackmirror 3.2.31:
- atualização da página de manual;
- adição da licença GNU General Public License, versão 2.
Slackmirror 3.2.30:
- correção do texto bluewrile64 para bluewrite64;
- adição do cache md5 para arquivos baixados. Isto aumenta (em até 4x)
a performance para o upgrade dos espelhos, já que o md5sum será
gerado somente uma vez por arquivo;
- adição dos de cache em $HOME/.local/var/slackmirror/ com os nomes
slackmirror-$DISTRO_md5.cache.
Slackmirror 3.2.29:
- adição da opção connections_mirror na GUI do slackmirrorgui;
- mudança no título da gui para
"'%s - %s' % (__program_name__, __version__)".
Slackmirror 3.2.28:
- adição da função setprocname(), para mudar o proc name para slackmirror
e slackmirrorgui nos processos;
- adição do getprocname(), para pegar o proc name do aplicativo;
- correção do download dos arquivos da base do espelho. Agradecimentos a
Marcelo Couto <http ://marcelocouto.net/>.
Slackmirror 3.2.27:
- verifica de existe outras instância do slackmirror rodando, no caso
do uso da opção --halt. O comando halt será executado somente
quando a última instância do slackmirror terminar;
- movi set_parameters do slackmirror e slackmirrorgui para a biblioteca
sentral smlib.py, e passar settings, config, proxies e filters como
parâmetros;
- adicionar 'http://192.168.1...', como exemplo de proxy.
Slackmirror 3.2.26:
- atualização do help;
- adição da página de manual (comando man do Unix).
Slackmirror 3.2.24:
- gerar arquivo de log sempre. O Log PID é verificado para controlar as
seções do slackmirror;
- adição de controle para abrir apenas uma seção do slackmirror em uma
combinação distribution-version;
- adicionar linhas de impressão em download_file.
Slackmirror 3.2.22:
- acidionado capacidade para baixar vários pacotes simultaneamente;
- mudanças em slackmirror.conf para usar a função optparse.read_file();
- adicionar atributos de classe, para substituir dicionário;
- adicionar arquivos de documentação Changelog e Slackmirror_pt_BR.html;
- adicionar arquivo slack-desc.
Slackmirror 3.2.10:
- adicionar repositórios e suporte a Slackware64;
- mudança do módulo md5 para hashlib;
- fixado bug em realimentação de linha no konsole;
- habilitar arquivo de log.
Slackmirror 3.0.54:
- reconstruído todo o aplicativo em Python;
- adicionar maior flexibilidade com espelhos:
0 -> url/FILELIST.TXT
1 -> url/distro/FILELIST.TXT
2 -> url/distro/distro-version/FILELIST.TXT
3 -> url/distro-version/FILELIST.TXT
- adicionar suporte a proxy;
- adicionar flags --enable e --desable em filtros;
- permite diferentes comandos para o system halt (HALT_COMMAND;
linha em /etc/slackmirror/slackmirror.conf)
pendencies:
- create a GUI (not finished);
- enable verbose mode.
slackmirror 2.4.18:
- adicionado saída para error no wget;
Slackmirror 2.4.17:
- desabilitado a opção continue em UPGRADE_CHECK com a opção force;
- adicionar Changelog em usr/doc/slackmirror;
- adicionar Slackmirror_pt_BR.html em usr/doc/slackmirror;
- adicionado mensagens para opções desconhecidas;
- show_options mostra lista de espelhos.4. Download
Nesta seção estão disponível para download as versões empacotadas que sobreviveram a minha desordem. Ainda possuo outras versões anteriores, que talvez em algum outro momento disponha aqui como registro.
4.1. Pacotes
O empacotamento do slackmirror foi feito segundo as normas do Slackware, para ser instalado com as ferramentas do pkgtools. Novas versões serão disponíveis sempre no topo desta pilha.
Segue abaixo os pacotes disponíveis:
- slackmirror-3.3.1-noarch-1.tgz – Última versão
- slackmirror-3.3.0-noarch-1.tgz
- slackmirror-3.2.33-noarch-1.tgz
- slackmirror-3.2.32-noarch-1.tgz
- slackmirror-3.2.31-noarch-1.tgz
- slackmirror-3.2.30-noarch-1.tgz
- slackmirror-3.2.29-noarch-1.tgz
- slackmirror-3.2.28-noarch-1.tgz
- slackmirror-3.2.27-noarch-1.tgz
- slackmirror-3.2.11-noarch-1.tgz
- slackmirror-3.2.00-noarch-1.tgz
- slackmirror-3.1.17-noarch-1.tgz
- slackmirror-3.1.16-noarch-1.tgz
- slackmirror-2.4.23-noarch-1.tgz
4.2. Código fonte
Por se tratar de um código em Python, os pacotes da seção anterior, são muito semelhantes em conteúdo aos empacotamentos disponíveis aqui, com a exceção de alguns poucos arquivos, como o Makefile, o script upgrade_this, o aplicativo mkman entre outros.
Segue abaixo as versões disponíveis:
- slackmirror-3.3.1.tar.xz
- slackmirror-3.3.0.tar.xz
- slackmirror-3.2.33.tar.xz
- slackmirror-3.2.32.tar.xz
- slackmirror-3.2.31.tar.xz
5. Próximas implementações
Nesta seção estão listadas as implementações para as próximas versões.
- Slackmirror 3.3.0:
- estudo: – os espelhos devem ser certificados para garantir o sincronismo do conteúdo. É um problema atual do Slackmirror, em que os espelhos de origem não são certificados quanto ao sincronismo dos dados. Uma possibilidade é baixar o FILELIST.TXT de cada espelho antes de iniciar o download dos arquivos. O inconveniente disto é que o download dos arquivos demoraria mais para iniciar;
- concluído: – fazer um arquivo de log único e com limite de linhas configurado pelo slackmirror.conf.
No atual estado, o aplicativo não está encontrando outras instâncias do Slackmirror, na distribuição executada, em processo. A função check_running_distro() não consegue encontrar as instâncias do Slackmirror rodando, como está definida. Necessito criar um arquivo de lock, com informações como: pid, data e horário de início.
- concluído: – arquivo de lock criado em /tmp com a forma slackmirror-distro-version-pid.lock. O conteúdo deste arquivo é o horário e data em que foi criado. O arquivo é removido após o final da execução do aplicativo, mas não em caso de CONTROL+C; - concluído: – mover a remoção do arquivos FILELIST.TXT.old para o final da função de upgrade, assim o upgrade dos arquivos não será interpretado erroneamente ao se cancelar a operação com um CONTROL+C.
6. Licença
Este aplicativo está licenciado sobre a
GNU GENERAL PUBLIC LICENSE 2
You can follow any responses to this entry through the RSS 2.0 feed. Responses are currently closed, but you can trackback from your own site.
6 Trackbacks/Pings
-
Mantendo cópias do Slackware-current com o Slackmirror Ago 04 2009 at 11am:
[...] Enviado por Rudson R. Alves (rudsonalvesΘrra·etc·br): “O Slackmirror é um aplicativo que venho desenvolvendo deste 2005, com o objetivo de gerenciar cópias dos espelhos de distribuições Slack-like (Slamd64, Bluewhite, Slackware e Slackware64), em qualquer versão, com cache de md5 para agilizar as atualizações, download de diversos arquivos e diversas distribuições, simultaneamente, para usar o máximo de sua banda. E tudo isto em uma linha de comando ou por meio de uma interface gráfica simples e intuitiva.” [referência: rra.etc.br] [...]
-
» Slackmirror klebermota.eti.br Ago 04 2009 at 11am:
[...] Referencia (http://rra.etc.br) *name [...]
-
[gus@pará ~]#_ » Blog Archive » Mantendo cópias do -current com Slackmirror Ago 05 2009 at 12pm:
[...] Br-Linux publicou um post de referência muito completo de Rudson R. Alves sobre o Slackmirror, ferramenta de sua autoria que facilita a administração de espelhos da [...]
-
Slackmirror 3.2.32 » A Bit of Ago 08 2009 at 11am:
[...] Baixe a última versão em DOWNLOAD [...]
-
Slackmirror 3.2.33 » A Bit of Ago 09 2009 at 6pm:
[...] A versão 3.2.33 pode ser baixada em Download. [...]
-
KDE 4.3.3-64bits e scripts de compilação » a bit of… Nov 09 2009 at 5pm:
[...] PythonScriptsSlackmirrorDownloadsSobre [...]


