Archive for the ‘Bug’ Category

Problemas na instalação do módulo de SNMP do Apache

março 7, 2010

Se você está tentando instalar o módulo SNMP do Apache e seguiu todas as instruções daqui, mas encontrou no error.log uma mensagem como

Cannot find module (APACHE2-MIB): At line 0 in (none)
APACHE2-MIB::serverName.0: Unknown Object Identifier
APACHE2-MIB::serverTmpDir.0: Unknown Object Identifier
APACHE2-MIB::agentHttpAddress.0: Unknown Object Identifier
APACHE2-MIB::serverStatus.0: Unknown Object Identifier
APACHE2-MIB::serverVersion.0: Unknown Object Identifier
APACHE2-MIB::serverBuilt.0: Unknown Object Identifier
APACHE2-MIB::serverRoot.0: Unknown Object Identifier
APACHE2-MIB::serverPidfile.0: Unknown Object Identifier
APACHE2-MIB::serverRestart.0: Unknown Object Identifier
APACHE2-MIB::totalServerPorts.0: Unknown Object Identifier
APACHE2-MIB::serverPortNumber.1: Unknown Object Identifier

provavelmente o MIB do Apache não está onde devia.

Dentro do diretório onde você compilou o mod-ap2-snmp, haverá um subdiretório chamado mib. Dentro dele, haverá um arquivo chamado APACHE2-MIB.TXT. Copie esse arquivo para o diretório dos MIBs do Net-SNMP. (Na minha máquina, esse diretório era /usr/local/share/snmp/mibs/)

Dois detalhes:

  • a extrensão do arquivo deve estar em minúsculas – então a cópia se chamará APACHE2-MIB.txt. Não sei por que o pessoal do mod-ap2-snmp colocou esse nome com extensão em maiúscula, deve ser bug.
  • o arquivo deve ser legível para todos: rode chmod a+r /usr/local/share/snmp/mibs/APACHE2-MIB.txt nele. Talvez essa seja uma permissão muito aberta e só um grupo precise vê-lo, mas eu a apliquei e o snmpget conseguiu lê-lo. Sugestões sobre permissões mais seguras são bem-vindas, mas não sei se é necessário restringir a visibilidade desse arquivo…

Esses passos resolveram as mensagens acima. Sobraram essas:

[Thu Mar 04 00:16:41 2010] [error] AP2_SNMP: Can't set MIB value.
[Thu Mar 04 00:16:41 2010] [error] APACHE2-MIB::serverStatus.0
[Thu Mar 04 00:16:42 2010] [error] AP2_SNMP: Can't set MIB value.
[Thu Mar 04 00:16:42 2010] [error] APACHE2-MIB::serverName.0
[Thu Mar 04 00:16:43 2010] [error] AP2_SNMP: Can't set MIB value.
[Thu Mar 04 00:16:43 2010] [error] APACHE2-MIB::serverName.0
[Thu Mar 04 00:16:43 2010] [error] AP2_SNMP: Can't set MIB value.
[Thu Mar 04 00:16:43 2010] [error] APACHE2-MIB::serverTmpDir.0
[Thu Mar 04 00:16:43 2010] [error] AP2_SNMP: Can't set MIB value.
[Thu Mar 04 00:16:43 2010] [error] APACHE2-MIB::agentHttpAddress.0
[Thu Mar 04 00:16:43 2010] [error] AP2_SNMP: Can't set MIB value.
[Thu Mar 04 00:16:43 2010] [error] APACHE2-MIB::serverStatus.0
[Thu Mar 04 00:16:43 2010] [error] AP2_SNMP: Can't set MIB value.
[Thu Mar 04 00:16:43 2010] [error] APACHE2-MIB::serverVersion.0
[Thu Mar 04 00:16:43 2010] [error] AP2_SNMP: Can't set MIB value.
[Thu Mar 04 00:16:43 2010] [error] APACHE2-MIB::serverBuilt.0
[Thu Mar 04 00:16:43 2010] [error] AP2_SNMP: Can't set MIB value.
[Thu Mar 04 00:16:43 2010] [error] APACHE2-MIB::serverRoot.0
[Thu Mar 04 00:16:43 2010] [error] AP2_SNMP: Can't set MIB value.
[Thu Mar 04 00:16:43 2010] [error] APACHE2-MIB::serverPidfile.0
[Thu Mar 04 00:16:43 2010] [error] AP2_SNMP: Can't set MIB value.
[Thu Mar 04 00:16:43 2010] [error] APACHE2-MIB::serverRestart.0
[Thu Mar 04 00:16:43 2010] [error] AP2_SNMP: Can't set MIB value.
[Thu Mar 04 00:16:43 2010] [error] APACHE2-MIB::totalServerPorts.0
[Thu Mar 04 00:16:43 2010] [error] AP2_SNMP: Can't set MIB value.
[Thu Mar 04 00:16:43 2010] [error] APACHE2-MIB::serverPortNumber.1

O problema aqui é que iniciei o Apache antes de iniciar o agente snmp (snmpd). Basta derrubar o apache, levantar o agente (no caso, na minha máquina, ele está em /usr/local/sbin/snmpd) e levantar novamente o Apache. Feito isso, comece a recuperar as informações!

$ snmpget -v 3 -u usuario -l authNoPriv -a MD5 -A senha  localhost APACHE2-MIB::serverName.0
APACHE2-MIB::serverName.0 = STRING: 127.0.1.1

Note, porém, que são necessários usuário e senha para trabalhar com SNMPv3 – que é o padrão, ao que parece, para o mod-ap2-snmp e é o melhor protocolo, de qualquer forma. Para criá-los, veja esse link.

Congelamento de disco rígido

setembro 17, 2009

Afirma a lenda que, se seu disco rígido parar de funcionar, você ainda terá a oportunidade de recuperar dados importantes congelando-o. Mas será verdade?

Tive a oportunidade de conferir. Depois de três dias trabalhando, fui tentar enviar minhas alterações de um projeto ao Subversion. O servidor estava fora do ar, mas não era um grande problema: eu poderia enviar as alterações no dia seguinte. Chego no dia seguinte no trabalho para enviar os dados e… bem, o HD da minha máquina havia pifado.

Fria: um de nós dois teria de entrar em uma

Fria: um de nós dois teria de entrar em uma

Depois de dias tentando recuperar os dados do HD, desisti. Seria mais fácil reescrever tudo o que eu havia feito, pelo visto. Já aceitando meu destino, fui fazer outras tarefas.

Algum tempo depois, encontro um amigo meu. Aproveito, conto minha história desinteressadamente, como uma curiosidade. Meu amigo me pergunta:

Já tentou congelar o HD?

Já havia ouvido falar desta técnica. Se o seu disco rígido parou de funcionar. tente colocá-lo no congelador. Esse meu amigo sempre garantiu que o truque funcionava, mas nunca vi ninguém fazê-lo…

Pois bem, como pior não poderia ficar, resolvi tentar. Peguei o HD, embrulhei-o muito bem em uma sacola plástica, pus no congelador e saí para trabalhar em outro projeto, em outro lugar.

Ao final da tarde, voltei à empresa. Tirei o disco rígido do congelador, coloquei-o no notebook e liguei a máquina com um CD do Ubuntu. Quando fui ver… funcionou! Consegui acessar meus arquivos, e os copiei para outra máquina com scp!

Se você for tentar fazer isso algum dia, tome cuidado de embrulhar muito bem o disco, para que não molhe. Note que isto provavelmente não deve funcionar sempre… mas funcionou uma vez, isto posso garantir!

Fazendo DMA funcionar no Debian/Ubuntu

fevereiro 21, 2009

Até o meio do ano passado, meu computador era um Athlon XP 2.3 GHz com 128 MB de memória e 40 GB de HD. Fraquinho, mas funcionava até bem. Eu continuaria utilizando-o cotidianamente se não tivesse de utilizar o OpenOffice.org e o Eclipse. Além disso, estava querendo brincar com outros sistemas operacionais, e preferia virtualizá-los. Isso obviamente era inviável na máquina antiga.

Vendo que não havia mais para onde escapar, comprei outro computador. O computador era de um amigo meu, tinha 80 GB de HD, 1 GB de memória, gravadora de DVD e uma placa GForce 2200, ou algo assim. É uma máquina ótima para meus objetivos. Formatei as partições, instalei um Debian e configurei a máquina.

Notei, porém, que o computador estava bastante lento, muito mais lento que minha máquina antiga. Depois de pesquisar, descobri que era um problema com o HD e DMA. O syslog estava cheio de mensagens como:

Apr 8 00:17:41 localhost kernel: ide: failed opcode was: unknown
Apr 8 00:17:47 localhost kernel: hda: status timeout: status=0xd0 { Busy }
Apr 8 00:17:47 localhost kernel:
Apr 8 00:17:47 localhost kernel: ide: failed opcode was: unknown
Apr 8 00:17:47 localhost kernel: hdb: DMA disabled
Apr 8 00:17:47 localhost kernel: hda: drive not ready for command
Apr 8 00:17:47 localhost kernel: ide0: reset: success
Apr 8 00:14:07 localhost kernel: hdb: dma_timer_expiry: dma status == 0x41
Apr 8 00:14:07 localhost kernel: hdb: DMA timeout error
Apr 8 00:14:07 localhost kernel: hdb: dma timeout error: status=0x58 { DriveReady SeekComplete DataRequest }

Aparentemente, havia algum erro ao carregar os módulos do DMA. Pesquisando sobre o problema, vi sugestões para verificar a saída do comando hdparm -i /dev/hda. O resultado foi algo como:

/dev/hda:

Model=SAMSUNG SP0802N, FwRev=TK100-24, SerialNo=S00JJ10XB83245
Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs }
RawCHS=16383/16/63, TrkSize=34902, SectSize=554, ECCbytes=4
BuffType=DualPortCache, BuffSize=2048kB, MaxMultSect=16, MultSect=off
CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=156365903
IORDY=on/off, tPIO={min:240,w/IORDY:120}, tDMA={min:120,rec:120}
PIO modes:  pio0 pio1 pio2 pio3 pio4
DMA modes:  mdma0 mdma1 mdma2
UDMA modes: udma0 udma1 udma2 udma3 udma4 *udma5
AdvancedPM=no WriteCache=enabled
Drive conforms to: ATA/ATAPI-7 T13 1532D revision 0:  ATA/ATAPI-1,2,3,4,5,6,7


* signifies the current active mode

Em resumo, a linha

UDMA modes: udma0 udma1 udma2 udma3 udma4 *udma5

indicava que o módulo do DMA estava carregado! O que, então, estava dando errado?

Em uma breve pesquisa no Google, encontrei essa thread nos Ubuntu Forums. Nela, alguem sugere verificar se o HD estava configurado para Master ao invés de Cable Select. Meu HD já estava jumpeado e cabeado como Master. Todas as outras soluções que encontrei não funcionaram para ninguém – inclusive, não funcionavam para mim. O que fazer?

Pois bem, em um experimento, eu coloquei o HD como Secondary Master; antes, reconfigurei o GRUB para que o root do kernel passasse a ser /dev/hdc1 e editei o /etc/fstab trocando /dev/hda por /dev/hdc (e vice-versa). Liguei a máquina e… Voi là! O problema sumiu!

Hoje, porém, fui tentar configurar o HD como Primary Master e pesquisar por uma solução menos estranha. Infelizmente, tive novamente o mesmo problema com DMA, não importasse o que eu fizesse. Desisti e voltei o HD para Secondary Master – afinal, estava só explonrando possibilidades. Quando reinicio a máquina, o erro de DMA reaparece, agora com o HD como Secondary Master! Desligo então a máquina, tiro e recoloco o cabo flat no HD e reinicio a máquina. Voi là!2 o problema foi resolvido novamente.

Então, se você está tendo esse problema, tente tirar e recolocar o cabo flat, que pode estar frouxo. Se isso não funcionar, dá uma olhada na thread citada, que ela tem boas dicas. Entretanto, se ela não te ajudar, tente colocar o HD como Secondary Slave (ou como Master Slave, se já estiver como Secondary Slave). Vai que funciona, não é?

HTH. Até mais!

Very funny.vbs

julho 11, 2008

Hoje, recebo o seguinte e-mail de um amigo que trabalha com Visual Basic:

O Belo (e possivelmente bons conselhos, no geral, de como fazer código bom):
http://www.visibleprogress.com/vb_error_handling.htm

e o Horroroso
http://blogs.msdn.com/ericlippert/archive/2004/09/09/227461.aspx

O primeiro link realmente tem sugestões boas e interessantes para quem programa em Visual Basic. O segundo é uma lista de erros que podem ocorrer em Visual Basic e VBScript. O erro que me chamou a atenção foi

48 Error in loading DLL

Erros em carregamento de DLL em Visual Basic não são novidade; o que me surpreendeu é que esse erro também pode ocorrer com VBScript.

O ILOVEYOU, senhores, era mais que inevitável: era praticamente o resultado das leis da Fisíca.