Como resolver o 'bootpd' travando constantemente no Mac OS X 10.6.4 Snow Leopard Server?

2

Eu tenho um Mac Pro rodando o Mac OS X 10.6.4 Snow Leopard Server e ele recentemente começou a receber vários 'kNetworkError's no Server Admin.app ao visualizar serviços. Está agindo como um gateway w / NAT e tem sido assim há algum tempo.

Há um problema evidente, bootpd falha o tempo todo com os seguintes erros em '/var/log/system.log /:

Aug 12 16:54:59 servername bootpd[3572]: server starting
Aug 12 16:54:59 servername bootpd[3572]: server name servername.domain.tld
Aug 12 16:54:59 servername bootpd[3572]: interface en0: ip 10.0.1.9 mask 255.255.255.0
Aug 12 16:54:59 servername bootpd[3572]: bsdpd: re-reading configuration
Aug 12 16:54:59 servername bootpd[3572]: bsdpd: shadow file size will be set to 48 megabytes
Aug 12 16:54:59 servername bootpd[3572]: bsdpd: age time 00:15:00
Aug 12 16:54:59 servername bootpd[3572]: [3572] detected buffer overflow
Aug 12 16:54:59 servername com.apple.launchd[1] (com.apple.bootpd[3572]): Job appears to have crashed: Abort trap
Aug 12 16:54:59 servername com.apple.ReportCrash.Root[3571]: 2010-08-12 16:54:59.828 ReportCrash[3571:2807] Saved crash report for bootpd[3572] version ??? (???) to /Library/Logs/DiagnosticReports/bootpd_2010-08-12-165459_localhost.crash

Está configurado corretamente para servir DHCP através de en1 (não en0), a porta "LAN". Isso acontece mesmo sem hardware (até comutadores) conectados à porta "LAN". Não há clientes DHCP listados. Estranhamente, a "Visão geral" mostra um mapa estático, mas nada está listado em "Mapas estáticos" e não há "Computadores" no Open Directory. /var/db/dhcp_leases está vazio.

/Library/Logs/DiagnosticReports/bootpd_2010-08-12-165459_localhost.crash é o seguinte:

Process:         bootpd [3572]
Path:            /usr/libexec/bootpd
Identifier:      bootpd
Version:         ??? (???)
Code Type:       X86-64 (Native)
Parent Process:  launchd [1]

Date/Time:       2010-08-12 16:54:59.713 -0400
OS Version:      Mac OS X Server 10.6.4 (10F569)
Report Version:  6

Exception Type:  EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Crashed Thread:  0  Dispatch queue: com.apple.main-thread

Application Specific Information:
__abort() called

Thread 0 Crashed:  Dispatch queue: com.apple.main-thread
0   libSystem.B.dylib                   0x00007fff803c13d6 __kill + 10
1   libSystem.B.dylib                   0x00007fff80461913 __abort + 103
2   libSystem.B.dylib                   0x00007fff80456157 mach_msg_receive + 0
3   libSystem.B.dylib                   0x00007fff803b92cf __strncpy_chk + 14
4   bootpd                              0x0000000100014e5d PLCache_read + 782
5   bootpd                              0x0000000100004a3d BSDPClients_init + 68
6   bootpd                              0x00000001000053b5 bsdp_init + 2396
7   bootpd                              0x000000010000200b S_update_services + 1228
8   bootpd                              0x0000000100002344 S_server_loop + 571
9   bootpd                              0x0000000100003963 main + 1766
10  bootpd                              0x0000000100000984 start + 52

Thread 0 crashed with X86 Thread State (64-bit):
  rax: 0x0000000000000000  rbx: 0x00007fff5fbfe220  rcx: 0x00007fff5fbfe218  rdx: 0x0000000000000000
  rdi: 0x0000000000000df4  rsi: 0x0000000000000006  rbp: 0x00007fff5fbfe240  rsp: 0x00007fff5fbfe218
   r8: 0x0000000000000001   r9: 0x0000000100114280  r10: 0x00007fff803bd412  r11: 0xffffff80002e1680
  r12: 0xffffffffffffffff  r13: 0x00007fff5fbfe330  r14: 0x00007fff5fbfe33b  r15: 0x00007fff7009bec0
  rip: 0x00007fff803c13d6  rfl: 0x0000000000000202  cr2: 0x000000010004c000

Quaisquer pensamentos ou sugestões para resolver isso?

    
por morgant 12.08.2010 / 23:18

3 respostas

1

Ok, a solução foi encontrada.

Eu pesquisei 'PLCache_read' (a última função listada em /Library/Logs/DiagnosticReports/bootpd_2010-08-12-165459_localhost.crash foi executada por bootpd antes do estouro do buffer) e o segundo hit foi na fonte da Apple para bootpd ( bsdpd.c , specificall). BSDP_CLIENTS_FILE() é passado pela constante BSDP_CLIENTS_FILE , que, olhando para o topo do arquivo, é codificada como /var/db/bsdpd_clients .

Verificando, /var/db/bsdpd_clients , encontrei um pseudo-plist contendo todos os clientes NetBoot (lembre-se, o NetBoot é construído no bootp) e - com certeza! - a última entrada foi cortada da seguinte maneira, deixando o arquivo incompleto:

{
        name=NetBoot060
        identifier=

Parado bootpd ( sudo serveradmin stop dhcp ), backup /var/db/bsdpd_clients & esvaziou, então começou bootpd ( sudo serveradmin start dhcp ) e não caiu!

Após a reinicialização, todos os outros serviços relacionados (incl. NetBoot) agora estão salvos e o Server Admin.app não está mais lançando o 'kNetworkError'.

    
por 12.08.2010 / 23:48
0

Hmm ... O log de travamento mostra que o bootpd está executando uma função chamada PLCache_read, que está copiando uma string e que, de alguma forma, está causando o estouro de buffer. (Aliás, parece que a fonte para o bootpd está disponível aqui .)

Meu palpite é que o bootpd está lendo um arquivo de configuração incorreto ou recebendo dados ruins pela rede. Eu tentaria correr:

sudo fs_usage -w bootpd

e veja se isso dá alguma pista sobre a origem do problema.

Está claro que alguém teve esse problema , mas, não sendo registrado, Não tenho idéia se eles obtiveram uma resposta útil. Mover o /etc/bootpd.plist pode ajudar.

Ah, você encontrou uma resposta enquanto eu digitava isso. Bem, vou postar esta resposta de qualquer maneira; talvez seja útil para outra pessoa.

    
por 12.08.2010 / 23:50
0

Eu apenas resolvi exatamente o mesmo problema com pequenas diferenças.

Estou executando o cliente 10.6.5 (não o servidor). Mesmas mensagens de erro (ou as mesmas que eu pude ver).

PLCache_read também foi o culpado, exceto que eu não tinha nenhum arquivo / var / db / bsdpd_clients, e criar um não resolveu o problema.

Pesquisando o PLCache_read também me levou ao código da Apple, exceto que neste caso ele era dhcpd.c , que me leva à variável codificada

#define DHCP_LEASES_FILE "/var/db/dhcpd_leases"

e eis que / var / db / dhcpd_leases parecia estar cheio de lixo. Eu mudei para um nome de arquivo temporário e agora o compartilhamento de internet funciona muito bem.

Morgant, obrigado pela sua solução em profundidade. Eu aprendi alguma coisa sobre como ler logs de travamento!

    
por 16.01.2011 / 19:01