quinta-feira, 11 de outubro de 2012

Tratamento de parâmetros em scripts python

Boa noite!

Passando por aqui pra indicar uma ótima biblioteca pra facilitar a vida de quem precisa criar scripts em python. Quer coisa mais chata que a definição dos parâmetros suportados pelo script que vc está criando?

Existe um módulo chamado docopt que é simplesmente, fenomenal.

A instalação pode ser feita através do pip:
ubuntu$ sudo pip install docopt

Basicamente ela utiliza a docstring definida no início do script e já habilita seu script a receber toda a parametrização que estiver por lá.

Os parâmetros passados são todos adicionados à um dicionário que pode ser facilmente tratado.

Pra exemplificar o que estou dizendo, segue um exemplo disponível no próprio projeto.:


islan@tsunami ~$ cat teste.py
#!/usr/bin/python
"""Naval Fate.

Usage:
  naval_fate.py ship new <name>...
  naval_fate.py ship <name> move <x> <y> [--speed=<kn>]
  naval_fate.py ship shoot <x> <y>
  naval_fate.py mine (set|remove) <x> <y> [--moored|--drifting]
  naval_fate.py -h | --help
  naval_fate.py --version

Options:
  -h --help     Show this screen.
  --version     Show version.
  --speed=<kn>  Speed in knots [default: 10].
  --moored      Moored (anchored) mine.
  --drifting    Drifting mine.
"""

from docopt import docopt

if __name__ == '__main__':
    arguments = docopt(__doc__, version='Naval Fate 2.0')
    print(arguments)

A execução do exemplo anterior resulta em:

islan@tsunami ~$ ./teste.py ship new teste
{'--drifting': False,
 '--help': False,
 '--moored': False,
 '--speed': '10',
 '--version': False,
 '<name>': ['teste'],
 '<x>': None,
 '<y>': None,
 'mine': False,
 'move': False,
 'new': True,
 'remove': False,
 'set': False,
 'ship': True,
 'shoot': False}
islan@tsunami ~$

Posso estar parecendo exagerado, mas realmente adorei o projeto.
O melhor de tudo: há versões do projeto já disponíveis para outras linguagens como php, javascript.

O criador do projeto falou na PyCon UK 2012. Vale a pena assistir.

Enjoy!

terça-feira, 11 de setembro de 2012

Imagem do dia da NASA como seu papel de Parede


Está certo que nós adoramos olhar o dia todo pras nossas inúmeras sessões de terminal abertas durante o dia, mas que tal colocar um papel de parede interessante no seu desktop Linux?

Esta é a idéia por trás do script de autoria de Christian Stefanescu pode ser visualizado aqui.

Trata-se de um script bem simples, feito em python.

São pré requisitos a instalação do pil e do feedparser:
PIL (apt-get install python-imaging ou pip install PIL)
feedparser (apt-get install python-feedparser ou pip install feedparser)
Há duas variáveis no início do script que precisam ser observadas/setadas:
DOWNLOAD_FOLDER
FONT_PATH

A primeira refere-se ao diretório onde serão salvas as imagens e a segunda variável trata-se da fonte que será utilizada para inserir o texto do feed da nasa na imagem.

Sugiro que adicione uma entrada no crontab para que este script seja executado diariamente.

Enjoy!

terça-feira, 4 de setembro de 2012

Removendo espaços à direita em Código fonte - Sublime Text 2



Se você, assim como eu, utilizar o Sublime Text 2 e necessitar "limpar" sujeiras como espaços à direita de um código fonte, sugiro que utilize o plugin TrailingSpaces.

O processo de instalação do plugin é super simples:
Ir no diretório de pacotes, clonar o projeto do github e adicionar o atalho para sua chamada:



cd ~/.config/sublime-text-2/Packages
git clone git://github.com/SublimeText/TrailingSpaces.git

Menu Preferences>Key Bindings - User e adicionar o código:
[{ "keys": ["ctrl+shift+t"], "command": "delete_trailing_spaces" }]

sexta-feira, 31 de agosto de 2012

Habilitar Debug no squid

Quando a configuração do seu squid passa a ficar cada vez mais complexa, o que geralmente resulta no crescimento do número de acls(ou seria o contrário? :P), é essencial utilizar o debug para obter mais detalhes sobre seu proxy.

O squid possui várias seções de debug, que podem ser habilitadas. A lista completa você pode ver aqui.

No meu caso, como estava precisando confirmar em qual acl determinado acesso estava sendo bloqueado, tive que habilitar o debug da seção 28, que trata sobre controle de acessos:

debug_options 28,2

Sendo que o 2, no final da configuração nada mais é que o log level que você necessita.

Ah! Muito cuidado ao habilitar o debug em um proxy que esteja em pleno funcionamento. O log pode crescer rapidamente, além do i/o para a escrita do log aumentar consideravelmente.

Até a próxima!

quinta-feira, 30 de agosto de 2012

TCP_DENIED_REPLY/403 no access.log

A configuração de meu proxy possui uma acl que libera o acesso ao site xpto.

Apesar de haver uma acl explícita de liberação, que antecede qualquer outra acl de bloqueio e que talvez pudesse interferir nas permissões, o proxy estava retornando a mensagem TCP_DENIED_REPLY/403 ao tentar baixar um arquivo deste mesmo site xpto.

Geralmente, quando necessito liberar o acesso total a determinado site/domínio eu utilizo somente uma diretiva http_request liberando determinada acl.

Realmente não é necessário a utilização da diretiva http_reply_access, já que por padrão ela é uma diretiva permissiva:


 NOTE: if there are no access lines present, the default is to allow
 all replies


Porém, em minha configuração a diretiva http_reply_access já tinha sido utilizada para restringir um outro conteúdo. Exatamente este uso que passou a impactar esta liberação.

Para solucionar o problema e permitir que o cliente acessasse todo o conteúdo do site, bastou incluir a exceção para a acl do site que eu precisava liberar na chamada desta diretiva (http_reply_access).

quarta-feira, 29 de agosto de 2012

Servidor DHCP ofertando endereço de uma reserva fixa

Cenário:
Servidor DHCP Linux com algumas reservas fixas (fixed-address) e outras estações adquirindo ips dinâmicos. Ambas configurações no mesmo range de ips.
Estações Linux e Windows XP

Problema:
Estação windows que recebe endereço fixo do servidor DHCP entrando em conflito com outra estação(Linux) que não possui uma reserva física.

Suspeita1:
Antes de disponibilizar um endereço à uma estação o servidor DHCP faz uma confirmação se alguém já está utilizando o endereço através do envio de pacotes ICMP. Obtendo resposta ele testa o próximo endereço até encontrar um endereço livre.
Estações com windows XP, por padrão, bloqueiam pacotes ICMP. Logo, o primeiro passo é liberar os pacotes icmp no firewall do windows e forçando o lease e a renovação das duas estações que estavam conflitando anteriormente.

Suspeita2:
Ao analisar os logs do servidor DHCP, notei que a renovação do endereço da estação com Windows XP não estava ocorrendo conforme a configuração padrão do servidor (2 em 2 horas), apesar dela ter ficado ligada e com a conexão física de rede em perfeitas condições todo este tempo.
Foi confirmado que esta estação estava ociosa por um bom período e que também estava com a opção que permite o desligamento da interface de rede em casos de ociosidade para economia de energia ativada.
Com esta opção desativada, a estação passou a fazer suas renovações de endereço conforme esperado e outras estações não receberam a oferta do endereço que havia sido previamente reservado.

Solução Ideal:
A solução ideal para o cenário apresentado ainda continua sendo a divisão do dhcp em pools de endereçamento. Assim você consegue delimitar os endereços que serão fornecidos dinamicamente dos que serão utilizados nas reservas fixas.

quinta-feira, 14 de junho de 2012

Reserva de endereço no Servidor DHCP - Linux sem default gateway

Cenário:
Uma estação de trabalho com o windows XP e duas interfaces de rede, uma conectando-se a um provedor de internet local e recebendo um ip público via DHCP, a outra conectada à rede local e recebendo um endereço da rede interna.

Problema:
Ao receber o ip da rede interna a máquina também recebia o gateway default da rede local o que causava problemas com a rota padrão adicionada anteriormente pela conexão com o provedor de internet.
Configurando manualmente um ip, sem gateway, nesta estação fazia com que o servidor não confirmasse se o este endereço estava livre para ser utilizado em outra estação.
Configurar um pool no servidor DHCP apenas para deixar a configuração sem Default Gateway para apenas uma estação é também uma solução mas aparentemente "exagerada"

Solução:
Criar uma reserva no servidor DHCP adicionando o gateway "0.0.0.0":
host semgateway { hardware ethernet xx:xx:xx:xx:xx:xx; option routers 0.0.0.0; }

Resultado:
A estação passa a receber o endereço sem o roteador padrão.
O servidor DHCP passa a conhecer aquela reserva como ativa e evita a disponibilização do endereço à outra estação.

quarta-feira, 6 de junho de 2012

P2V de servidor Linux usando clonezilla

No ambiente que administro temos alguns servidores que vem sendo mantidos "vivos" devido a necessidade de se consultar informações antigas de aplicações que um dia foram utilizadas mas NÃO tiveram seus dados migrados para a aplicação utilizada atualmente. (Daí a importância de se amarrar bem os contratos de implantação de novas aplicações às migrações dos dados legados, do contrário a T.I. terá manter eternamente a aplicação legada, muitas vezes já sem o suporte do fornecedor).

Com o intuito de reduzir um máquina física entre os servidores e consequentemente reduzir um ponto de falha a mais na rede, fiz a migração desta máquina física para uma virtual. Procedimento conhecido como Physical-to-Virtual (P2V).

Para quem não conhece, o Clonezilla é uma solução Open Source para se clonar um disco ou partições de uma forma "amigável", semelhante ao que o Norton Ghost oferece.
É uma solução tão boa que merece um post futuramente.

O primeiro passo é bootar com o live-cd do clonezilla na máquina física que será migrada e gerar o clone das partições (ou do disco) para algum lugar em sua rede (NFS, SSH, outro HD no próprio servidor físico, etc).

Após ter gerado a imagem e checado sua integridade(esta opção geralmente é oferecida no momento em que você está seguindo o assistente de geração da imagem) basta:

  • Criar uma máquina virtual em seu servidor de virtualização com discos/partições com capacidade compatíveis ou maiores que as existentes no seu servidor físico. 
  • Iniciar a VM pelo Live-CD do Clonezilla e seguir o assistente, desta vez para fazer a restauração da imagem anteriormente criada.
  • Reinicializar a VM e fazer os ajustes que forem necessários (interfaces de rede, opções no grub, etc)


Uma dica importante é que em alguns casos a imagem restaurada "congela" logo após passar pela tela do Grub tendo como última mensagem algo como "Uncompressing Linux... Ok, booting the kernel.".
Nestes casos, grandes chances do problema estar no suporte ao ACPI.
Se isto acontecer contigo, experimente desativar o ACPI na chamada do kernel no grub, adicionando a opção "acpi=off".

Ainda que "migrar o problema" não seja a solução ideal, afinal, os dados da aplicação legada que deveriam ter sido migrados, pelo menos a infraestrutura torna este "ponto de falha" mais maleável e sujeito às Leis de Murphy.

Abraços a todos.


segunda-feira, 5 de março de 2012

source.list para versões antigas do ubuntu

Versões descontinuadas do Ubuntu passam a ter seus pacotes disponíveis no endereço http://old-releases.ubuntu.com/ubuntu/

Então, por exemplo, o source.list para o ubuntu Jaunty (9.04) ficaria assim:

deb http://old-releases.ubuntu.com/ubuntu/ jaunty main restricted
deb http://old-releases.ubuntu.com/ubuntu/ jaunty-updates main restricted
deb http://old-releases.ubuntu.com/ubuntu/ jaunty universe
deb http://old-releases.ubuntu.com/ubuntu/ jaunty-updates universe
deb http://old-releases.ubuntu.com/ubuntu/ jaunty multiverse
deb http://old-releases.ubuntu.com/ubuntu/ jaunty-updates multiverse
deb http://old-releases.ubuntu.com/ubuntu/ jaunty-security main restricted
deb http://old-releases.ubuntu.com/ubuntu/ jaunty-security universe
deb http://old-releases.ubuntu.com/ubuntu/ jaunty-security multiverse

Adapte à sua necessidade e seja feliz :)

quinta-feira, 19 de janeiro de 2012

Oracle/Sun Java JRE 1.6.0 no Ubuntu Oneiric 11.10

Esta dica é pra quem, assim como eu, teve problemas com o Runtime do OpenJDK 6 que é o padrão no Ubuntu 11.10.

No meu caso, perdi parte de um webcast interessantíssimo por causa do mau funcionamento Webex no navegador que estava com um plugin do openJDK.

Pra solucionar o problema, nada como baixar e instalar a versão oficial:

1) Baixar o pacote com o jre (baixar o "arquivo de extração automática" e não o pacote RPM, é claro!):
http://www.java.com/pt_BR/download/linux_manual.jsp

2) Copiar o arquivo .bin que foi baixado para o diretório onde será feita a instalação:
cp <ArquivoBaixado> /usr/local/
Tanto no comando acima quanto em outros que citarem "<ArquivoBaixado>" você deverá fazer a substituição pelo o nome do pacote baixado. No meu caso foi jre-6u30-linux-i586.bin 3) Entrar no diretório para onde vc acabou de copiar o arquivo .bin, dar permissões de execução e fazer a extração do arquivo executando-o:
cd /usr/local/
chmod a+x <ArquivoBaixado>
./<ArquivoBaixado>
O arquivo será descompactado, gerando um diretório com o mesmo nome do arquivo, na minha instalação o diretório recebeu o nome de: jre1.6.0_30

4) Feche o Firefox.  Desinstale todas os pacotes java plugin que você já tiver instalado em sua máquina(caso você tenha feito alguma).
5) Vá para o diretório de plugins do Firefox:
cd /usr/lib/firefox-9.0.1/plugins
6) Crie o link simbólico apontando para a libnpjp2.so

ln -s /usr/local/jre1.6.0_30/lib/i386/libnpjp2.so
Pronto. Agora para confirmar o funcionamento basta na página: http://www.java.com/pt_BR/download/testjava.jsp

7) Para ativar o plugin também no Google Chrome basta vc criar um link simbólico da mesma forma que fizemos, só que desta vez no diretório: /usr/lib/chromium-browser/plugins
cd /usr/lib/chromium-browser/plugins
ln -s /usr/local/jre1.6.0_31/lib/i386/libnpjp2.so

Se tudo correr bem você verá a página de "sucesso" nos testes.

Enjoy!

segunda-feira, 16 de janeiro de 2012

Geforce 7150M / nForce 630M no Ubuntu Oneiric 11.10

Esta dica apesar de simples pode poupar o tempo de muita gente. O processo não tem mistério, mas detalhei ao máximo para que ele auxilie tanto veteranos quanto iniciantes.

Possuo um notebook HP da serie DV6000 que utiliza a placa de vídeo da Nvidia: Geforce 7150M / nForce 630M que sempre apresenta problemas durante a instalação ou upgrade do Ubuntu (Não usei outras distribuições pra afirmar que o mesmo acontece com outras distros).

Ao tentar instalar o Ubuntu Oneiric (11.10) não foi diferente. Inicializando a partir da imagem de instalação a interface gráfica fica irreconhecível como se o vídeo estivesse fora da frequência suportada.

O módulo carregado por padrão para esta interface de vídeo é o nouveau e pelo que pude perceber durante a minha pesquisa por uma solução é que ele tem apresentado problemas com esta placa gráfica.

Para sanar este problema é só seguir os passos abaixo:
Aperte ESC logo que a inicialização da instalação começar:


Você será remetido ao menu com diversas opções, conforme imagem abaixo:

 Apertando F6 você terá acesso às opções avançadas e à linha de inicialização completa:

ESC mais uma vez pra sair do menu com as opções avançadas e ir para a edição da linha de inicialização.
Nela vc acrescentará a opção "nouveau.blacklist=1" sem as áspas duplas, conforme a figura a seguir:

Feito isso você terá acesso à interface de instalação sem que a tela apresente o problema.

Após a instalação ter sido feita, reinicialize o computador adicione a opção "nouveau.blacklisk=1" novamente na linha de inicialização, só que desta vez  na linha de inicialização do GRUB.

Já dentro da interface do Ubuntu, baixe o instalador do módulo para esta placa de vídeo diretamente do site da Nvidia. (No momento em que este post foi escrito este era o link)

Vá para o terminal apertando CRTL+ALT+F2  e logue com seu usuário.

Pare o servidor gráfico com o comando:
sudo service lightdm stop

Vá para o diretório para onde fez o download do instalador da Nvidia, dê permissão de execução no arquivo:
chmod +x <nome_do_instalador.run>

 e execute-o:
sudo sh <nome_do_instalador.run>

A instalação ocorrerá através de um assistente super intuitivo.

Após a instalação ter ocorrido sem maiores problemas, chegou a hora de desinstalar o pacote nouveau e adicioná-lo à blacklist de módulos de forma definitiva:

Para desinstalar o nouveau:
sudo apt-get remove xserver-xorg-video-nouveau

Para adicionar o módulo problemático à blacklist definitiva edite o arquivo /etc/modprobe.d/blacklist.conf adicionando a linha:
blacklist nouveau

Feito tudo isso, basta dar o comando startx e aproveitar ;)