Criando um mirror local do Debian com o debmirror

Introdução:
Imagine a seguinte situação: você administra um parque de computadores (servidores, desktops ou ambos) com o Debian/Ubuntu instalado (digamos 30 computadores). Suponha ainda que seu ambiente de trabalho é uma escola, lan house ou similar, e que uma vez por mês seja necessário reinstalar os computadores. Cada computador baixa coisa de 1Gb. Então são mais 30Gb baixados da internet. Em situações como essa, pode ser interessante a criação de um mirror local do Debian. Você configura a máquina onde está o mirror ára baixar os pacotes da internet, e as outras máquina passam a baixar diretamente dele. Como o acesso é realizado em rede local, poupa sua banda de internet e de quebra aumenta a velocidade da instalação (eu costumava fazer uma instalação completa do Debian, com ambiente gráfico Gnome em coisa de 30 minutos, utilizando-se um mirror em rede local).

Opções mais comuns (para opções avançadas, veja o manual):
-p: exibe informações de progresso
-v: modo verboso (coloca mais informações na tela)
--source/--nosource: inclui/retira o download dos fontes (o padrão é baixar os fontes)
-m: realiza uma checagem MD5 nos pacotes baixados (desabilitado por padrão)
-h: indica o host a ser utilizado (padrão: ftp.debian.org). Utilize um mirror fisicamente próximo a você. Cheque a lista de mirrors, bem como o conteúdo deles em http://www.debian.org/mirror/list, pois nem todos os mirrors contém todas as arquiteturas.
-u/--password: define o usuário e a senha a serem utilizados no servidor remoto, caso seja necessário.
--method: define o método de obtenção dos arquivos (basicamente ftp, http ou rsync). Aqui utilizaremos http.
--proxy: define o proxy a ser utilizado, caso seja necessário. O proxy deve ser informado no formato http://usuario:senha@endereco:porta (exemplo: http://joao:ninguem@proxy.empresa:3128 )
-t: define o timeout da operação de download, em segundos
-d: define qual distribuição do Debian baixar (etch, lenny, sid, etc). Podem ser selecionadas várias distribuições, separadas por vírgula. Não é recomendável o uso do "apelido" (stable, testing, etc) da distribuição aqui. O padrão é a SID (unstable).
-s: define quais seções serão baixadas. O padrão é main,contrib,non-free,main/debian-installer.
-a: define quais arquiteturas serão baixadas. O padrão é i386
-r: diretório a ser acessado no servidor remoto. O padrão é /debian
--exclude=regex: não baixa arquivos que combinem com a RegEx (expressão regular) informada.
--ignore-release-gpg: ignora erros por não encontrar o certificado de segurança local.
--dry-run: executa uma simulação (embora baixe alguns arquivos pequenos). Bom para se ter uma idéia do tamanho total do download, para cálculo de uso de banda e espaço em disco.

Exemplo de uso:
debmirror -p -v --source -h ftp.br.debian.org --method=http -d lenny -a i386,sparc --ignore-release-gpg /var/www/mirror/debian
Após a execução, é necessário trocar o usuário dono dos arquivos para o mesmo que executa o apache (www-data). Isso é feito com o comando
chown -R www-data:www-data /var/www/mirror/debian
Descrição:
Criar um mirror no diretório /var/www/mirror/debian, baixando arquivos com o método http, a partir do servidor ftp.br.debian.org. Baixar também o código fonte dos pacotes. Baixar a distribuição Lenny para as arquiteturas i386 e Sparc (máquinas da Sun). Ignorar a ausência de certificados locais. Todas as opções não informadas são mantidas em seu valor default.

Observação:
Uma característica importante que faz falta (na minha opinião) no debmirror é a possibilidade de limitar o consumo de banda do programa, de modo a não consumir toda a banda de internet da sua rede. Uma opção para efetuar esse controle é a utilização do trickle, que deve ser tema de um futuro post por aqui.

Login automático em FTP com netrc

Para efetuar login (autenticação) em servidores FTP de forma não-interativa (automática) utilizando-se o comando ftp podemos utiilizar arquivos de configuração .netrc. O formato desses arquivos é muito simples:

machine <Servidor FTP>
login <usuario>
password <senha>


Onde:
Servidor FTP: endereço (hostname ou o IP) do servidor a ser acessado.
login: nome de usuário no servidor FTP.
password: senha do usuário servidor FTP.

Esses dados deverão ser inseridos em um arquivo com o nome .netrc, dentro do diretório HOME do usuário que vai executar o comando ftp. Por exemplo, para o usuário root, o nome do arquivo seria /root/.netrc. É necessário ainda acertar as permissões do arquivo, que obrigatoriamente devem ser setadas para 600 (permissão de escrita e leitura apenas para o usuário dono do arquivo), caso contrário o comando ftp simplesmente irá ignorar o arquivo. Essa medida visa a segurança, já que a senha do usuário FTP fica exposta dentro do arquivo. Para alterar a permissão do arquivo, execute

chmod 600 .netrc

A central de Cheat Sheets de Dave Child

Garimpando por mais Cheat Sheets na internet, acabei caindo nesse site: AddedBytes. O autor, Dave Child, escreve sobre segurança, marketing on-line e Cheat Sheets. O site contém várias Cheat Sheets, com assuntos que vão desde expressão regular, linguagens de programação e até World of Warcraft(!).

O endereço específico para as Cheat Sheets é http://www.addedbytes.com/cheat-sheets/.

Exibindo a hora do log do Squid de forma legível

Introdução
Quando está utilizando o seu formato padrão, o log do squid armazena a data e hora do acesso no formato de timestamp chamado Unix Time, que é a quantidade de segundos passados após a data 01/01/1970. Esse formato é útil, pois facilita cálculos com datas. Por exemplo: para calcular a distancia entre duas datas, basta converter ambas para o timestamp, subtrair a menor da maior e reconverter o resultado para minutos/horas/dias/etc. O problema é que o formato não facilita a visualização de dados no dia-a-dia. Existem vários comandos possíveis para realizar a conversão para um formato de leitura mais agradável. Vou colocar aqui a minha preferida, que envolve o poderosíssimo AWK.

Criando o script
Crie um arquivo com um nome sugestivo (por exemplo timestamp.sh) com o conteúdo abaixo e o salve em algum diretório que conste na variável de ambiente PATH (/usr/local/bin, por exemplo):

#!/bin/bash
awk '{$1=strftime("%F %T",$1);print $0}' $1



As letras entre aspas dentro dos parênteses controlam o formato de saída. Consulte a página de manual do comando date para checar outras opções de formatos. Por exemplo, %F exibe a data no formatoYYYY-MM-DD, e %T exibe a hora no formato 24 horas hh:mm:ss.

Utilização
Existem duas formas de se utilizar o script: chamando o arquivo de log diretamente (timestamp.sh access.log) ou através de um pipe (cat access.log | timestamp.sh).

Observação
As alterações são realizadas apenas "na tela", ou seja, o conteúdo do arquivo continua inalterado, com a data armazenada no formato timestamp. na verdade, isso é desejável, pois caso não impede o processamento do log do squid por programas de relatórios (como o sarg e o sawmill). Caso você necessite de um arquivo com as datas em formato "legível", basta redirecionar a saída da tela com os redirecionadores > (sobrescrever) ou >> (concatenar), conforme a necessidade.