У меня есть Mac Pro под управлением Mac OS X 10.6.4 Snow Leopard Server, и недавно он начал получать многочисленные ошибки kNetworkError в Server Admin.app при просмотре сервисов. Он действует как шлюз с NAT и действует уже довольно давно.
Есть одна вопиющая проблема, bootpd
все время вылетает со следующими ошибками в /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
Он правильно настроен для обслуживания DHCP через порт en1 (не en0), порт LAN. Это происходит даже при отсутствии оборудования (даже переключателей), подключенного к порту «LAN». В списке нет DHCP-клиентов. Как ни странно, «Обзор» показывает 1 статическую карту, но ничего не указано в разделе «Статические карты» и нет «Компьютеров» в Open Directory. /var/db/dhcp_leases
пусто.
/Library/Logs/DiagnosticReports/bootpd_2010-08-12-165459_localhost.crash
как следует:
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
Есть мысли или предложения по решению этой проблемы?
Хорошо, решение найдено.
я погуглил "PLCache_read" (последняя функция, указанная в /Library/Logs/DiagnosticReports/bootpd_2010-08-12-165459_localhost.crash
как управляемые bootpd
перед переполнением буфера), а второе попадание было в исходном коде Apple для bootpd
(bsdpd.c, в частности). BSDP_CLIENTS_FILE()
прошел BSDP_CLIENTS_FILE
константа, которая в верхней части файла жестко запрограммирована как /var/db/bsdpd_clients
.
Проверка, /var/db/bsdpd_clients
, Я нашел псевдоплист, содержащий все клиенты NetBoot (помните, NetBoot создается при загрузке) и - конечно же! - последняя запись была вырезана следующим образом, оставив файл незавершенным:
{
name=NetBoot060
identifier=
Остановлен bootpd
(sudo serveradmin stop dhcp
), резервная копия /var/db/bsdpd_clients
и слил его, затем начал bootpd
(sudo serveradmin start dhcp
) и никаких сбоев!
После перезагрузки все другие связанные службы (включая NetBoot) теперь работают в резервной копии, и Server Admin.app больше не выдает ошибку kNetworkError.
Я просто решил ту же проблему с небольшими отличиями.
Я использую клиент 10.6.5 (а не сервер). Те же сообщения об ошибках (или такие же, как я видел).
PLCache_read также был виновником, за исключением того, что у меня не было файла / var / db / bsdpd_clients, и его создание не решило проблему.
Поиск в Google PLCache_read также привел меня к коду Apple, за исключением того, что в этом случае это было dhcpd.c, что привело меня к жестко запрограммированной переменной
#define DHCP_LEASES_FILE "/var/db/dhcpd_leases"
и, о чудо, / var / db / dhcpd_leases выглядело полным мусором. Я переместил его во временное имя файла, и теперь общий доступ в Интернет работает нормально.
Моргант, спасибо за подробное решение. Я кое-что узнал о том, как читать журналы сбоев!
Хм ... Журнал сбоев показывает, что bootpd выполняет функцию под названием PLCache_read, которая копирует строку и каким-то образом вызывает переполнение буфера. (Между прочим, похоже, что источник bootpd доступен Вот.)
Я предполагаю, что bootpd читает плохой файл конфигурации или получает плохие данные по сети. Я бы попробовал запустить:
sudo fs_usage -w bootpd
и посмотрите, дает ли это ключ к разгадке источника проблемы.
Ясно, что у кого-то была эта проблема, но, не зарегистрировавшись, понятия не имею, получили ли они полезный ответ. Может помочь перемещение /etc/bootpd.plist.
А, вы нашли ответ, пока я это печатал. Что ж, я все равно отправлю этот ответ; возможно, это будет кому-то полезно.