Arquivo do Mês de Julho de 2008
Depurar execução de programas Linux sem o GDB
Alguma vez já precisou configurar um programa usando bibliotecas externas? Por exemplo, o IBM Websphere Broker precisa que configuremos um arquivo “.odbcini” (definido em uma variável $ODBCINI) que apontam para os SOs dos provedores ODBC (tipo o UKora823.so).
Após um upgrade feito pela consultoria, o broker parou de iniciar. Sem log nem nada, não tinha como avaliar o que ocorria. Então, usando meus conhecimentos arcanos sobre Linux, usei o seguinte comando:
( LD_DEBUG=libs mqsistart BROKER ) 2>&1 | less
Na hora, consegui um log de como o Linux carrega as bibliotecas, e, de brinde, achei o seguinte no log gerado:
calling init: /opt/ibm/mqsi/6.1/merant/lib/UKor823.so /opt/ibm/mqsi/6.1/merant/lib/UKor823.so: error: symbol lookup error: undefined symbol: SQLGetConnectAttr (fatal)
Junto com muitas outras linhas similares. Bastou usar o GREP para descobrir que o arquivo libsqora.so.10.1 não estava no LD_LIBRARY_PATH. Adicionando-o, funcionou.
Agora, uma explicação sobre o comando mágico. Ele pode ser dividido assim:
1: ( 2: LD_DEBUG=libs mqsistart BROKER 3: ) 4: 2>&1 5: | less
A linha 2 é a principal. Tem o comando que quero executar (”mqsistart BROKER”) e um extra (”LD_DEBUG=libs”) que informa ao LD do linux para emitir ao STDERR o que ele está fazendo com relação à s libs. Usando “LD_DEBUG=help”, você recebe uma lista de opções que podem ser usadas. Para quem não sabe, é possÃvel passar variáveis de ambiente extra, no Linux, usando essa sintaxe. Outro exemplo:
ORACLE_HOME=/xpto sqlplus
Assim, você pode executar o “sqlplus” com outra instalação do Oracle.
Voltando ao comando arcano, se você executar apenas a linha 2, vai receber quilômetros de log. Claro que você vai querer paginar, então, logo pensa na linha 5, para redirecionar a saÃda ao comando de paginação “less”. Entretanto, o LD_DEBUG emite no STDERR da aplicação, logo, precisa usar a linha 4 para redirecionar o STDERR para o STDOUT (que será enviado, via pipe, ao less).
Só que, sem as linhas 1 e 3, você estará redirecionando a saÃda do mqsistart, e não do LD_DEBUG. Os parênteses agrupam um ou mais comandos em um “comando” só, permitindo que o STDERR do LD_DEBUG vá para o less.
Nenhum comentárioRazões para odiar Zope/Plone
Desde meu primeiro contato com o Zope/Plone que eu senti que havia algo errado com o sujeito. Descobri que eu estava certo quando fiz um curso no meu emprego anterior. “Medonho” é pouco para descrever a interface administrativa.
Eu poderia gerar quilômetros de posts descrevendo os problemas, mas acho que imagens valem mais do que palavras.
Veja que maravilha pode ser injetada (e fotografada) na tela de comentários. Não é um bug nem uma invasão. É somente um recurso muito útil para fazer a festa no blog de seus amigos (e de seus inimigos). Podemos até chamar de “undocumented feature”.
Pois é… Injeção no Zope/Plone dos outros é refresco…
6 commentárioss