quarta-feira, 19 de dezembro de 2012

As of December 2012, Gmail uses "strict" SSL1 security.

O que significa isto em termos práticos? Servidores POP3/IMAP (nomeadamente o Dovecot) precisam de ter certificados da intermediate CA presentes, mesmo que o certificado de cliente seja válido e assinado por uma CA reconhecida.

A forma mais simples é concatenar o certificado de cliente (público) com o(s) certificado(s) de intermediate CA num único ficheiro.

$ cat ssl.crt sub.class1.server.ca.pem > bundle.crt

terça-feira, 10 de abril de 2012

most is ... all?

Há anos que o meu PAGER é o less, depois de ter conhecido o more.
A mudança era óbvia na altura - less is more :).

Hoje mudei para o most. O simples facto de poder listar um ficheiro em janelas distintas (à la screen) e outras niceties como a simulação do tail -f convenceram-me:

$ export PAGER='/usr/bin/most'

sábado, 17 de março de 2012

perlbrew em Ubuntu 11.10

O perlbrew é um utilitário que permite instalar e utilizar várias versões de Perl, obviando a necessidade de mexer no Perl do sistema (em regra, uma má ideia).

Sucede, contudo, que as versões mais recentes de Ubuntu (eventualmente, também Debian) não permitem compilar os perls sem introduzir opções adicionais de compilação.

As linhas seguintes permitem instalar a versão 5.14.2 via perlbrew em sistemas de 32 e 64 bits, respetivamente:


$ perlbrew install perl-5.14.2 -Dusethreads -Duselargefiles -Dcccdlflags=-fPIC -Dpager=/usr/bin/sensible-pager -Doptimize=-O2 -Duseshrplib -Darchname=i386-linux-gnu -Dccflags=-DDEBIAN -Dplibpth=/usr/lib/i386-linux-gnu


$ perlbrew install perl-5.14.2 -Dusethreads -Duselargefiles -Dcccdlflags=-fPIC -Dpager=/usr/bin/sensible-pager -Doptimize=-O2 -Duseshrplib -Duse64bitall -Darchname=x86_64-linux-gnu -Dccflags=-DDEBIAN -Dplibpth=/usr/lib/x86_64-linux-gnu

quarta-feira, 7 de março de 2012

Listar ficheiros por ordem decrescente de tamanhos (parte 2)

Depois de ter mostrado como listar ficheiros por ordem decrescente de tamanhos com os chamados utilitários Unix como egrep e awk, é interessante criar a mesma solução com perl:

$ perl -E 'for (sort { -s ($b) <=> -s ($a) } <*>) { say -s, " $_" if (-f); };'

Cuidado: este one-liner (programa numa linha) está carregado de defaults.

Curiosamente, este programa permitiu detetar um bug no anterior: os nomes dos ficheiros aparecem truncados se houver espaços no nome. Além disso, conseguimos listar aqui apenas ficheiros 'comuns' (não são incluídos ficheiros 'especiais' como ficheiros de dispositivos ou sockets).

O alias correspondente seria

alias listar_dec="perl -E 'for (sort { -s (\$b) <=> -s (\$a) } <*>) { say -s, \" \$_\" if (-f); };'"

Listar ficheiros por ordem decrescente de tamanhos

Tenho muitas vezes problemas de falta de espaço em disco e preciso rapidamente de saber o que posso apagar.
Uma forma simples de listar os ficheiros de um diretório, ordenando-os por ordem decrescente de tamanhos, é:

$ ls -l| egrep -v "^d|total"| awk '{print $5, $NF}'| sort -nr| less

ls -l dá uma listagem longa de ficheiros, com colunas separados por whitespace (termo que designa carateres como espaço ou tabulador (\t)). O awk aceita outros carateres como separadores de colunas (via -F), mas aceita whitespace como separador por omissão.
$5 corresponde à 5ª coluna (tamanho de ficheiro) e $NF corresponde à última coluna (NF é number of fields).
egrep -v "^d|total" exclui (-v) linhas iniciadas com d (diretórios) ou com o texto total.

Esta linha pode naturalmente ser colocada num alias (em ~/.bashrc para shell Bash):

alias listar_dec='ls -l| egrep -v "^d|total"| awk "{ print \$5, \$NF }"| sort -nr| less'
Os carateres $ têm de ser "escapados" por terem significado simultaneamente para a shell e para o awk.

Depois de 'recarregar' o .bashrc (. ~/.bashrc), basta usar no diretório pretendido
$ listar_dec

Finalmente, o utilitário sort pode ser dispensado se ls for usado com a opção -S (ls -lS).

sexta-feira, 10 de fevereiro de 2012

curl não aceita de STDIN ...

Por vezes, é necessário descarregar software de microsoft.com.
Desta vez, é o WAIK (Windows Automated Installation Kit) para instalação automática de máquinas Windows 7.

O URL que surge na página de download é http://www.microsoft.com/downloads/info.aspx?na=41&SrcFamilyId=696DD665-9F76-4177-A811-39C26D3B3B34&SrcDisplayLang=pt-pt&u=http%3a%2f%2fdownload.microsoft.com%2fdownload%2fA%2f9%2fF%2fA9FF888E-14CB-4F14-9CAD-1DDD752E080B%2fKB3AIK_PT.iso .
Felizmente, conseguimos perceber que o parâmetro GET u tem o que queremos: o URL direto para a ISO.

Substituindo os carateres codificados %3a e %2f por : e /, respetivamente, podemos passar o resultado ao curl. Curiosamente, não há forma aparente de termos um pipe de STDIN para o curl.

Esta é uma solução simples (tudo numa linha):

$ URL=`echo http%3a%2f%2fdownload.microsoft.com%2fdownload%2fA%2f9%2fF%2fA9FF888E-14CB-4F14-9CAD-1DDD752E080B%2fKB3AIK_PT.iso|sed -e 's/%3a/:/g' -e 's/%2f/\//g'`; curl -O $URL