web-dev-qa-db-ja.com

Mac OS X 10.6.4 Snow LeopardServerで常にクラッシュする `bootpd`を解決するにはどうすればよいですか?

Mac OS X 10.6.4 Snow LeopardServerを実行しているMacProを持っていますが、最近、サービスを表示するときにServerAdmin.appで多数の「kNetworkError」が発生し始めました。これはNAT付きのゲートウェイとして機能しており、かなり前からそうなっています。

明白な問題が1つあります。それは、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

「LAN」ポートであるen1(en0ではなく)を介してDHCPを提供するように正しく構成されています。これは、「LAN」ポートにハードウェア(スイッチも)が接続されていない場合でも発生します。リストされているDHCPクライアントはありません。奇妙なことに、「概要」には1つの静的マップが表示されますが、「静的マップ」の下には何も表示されず、OpenDirectoryには「コンピューター」がありません。 /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

これを解決するための考えや提案はありますか?

2
morgant

さて、解決策が見つかりました。

I googled'PLCache_read ' (バッファオーバーフローの前にbootpdによって実行されたものとして_/Library/Logs/DiagnosticReports/bootpd_2010-08-12-165459_localhost.crash_にリストされた最後の関数)そして2番目のヒットはbootpdのAppleのソースにありました( bsdpd .c 、specificall)。 BSDP_CLIENTS_FILE()には_BSDP_CLIENTS_FILE_定数が渡されます。この定数は、ファイルの先頭を見ると、_/var/db/bsdpd_clients_としてハードコードされています。

_/var/db/bsdpd_clients_を確認すると、すべてのNetBootクライアントを含む疑似plistが見つかり(NetBootはbootpに基づいて構築されていることを忘れないでください)、最後のエントリが次のように切り取られ、ファイルが不完全なままになっています。

_{
        name=NetBoot060
        identifier=
_

bootpd(_Sudo serveradmin stop dhcp_)を停止し、_/var/db/bsdpd_clients_をバックアップして空にし、bootpd(_Sudo serveradmin start dhcp_)を開始しましたが、クラッシュしませんでした。

再起動後、他のすべての関連サービス(NetBootを含む)がバックアップされ、ServerAdmin.appが「kNetworkError」をスローしなくなりました。

1
morgant

わずかな違いはありますが、まったく同じ問題を解決しました。

私は10.6.5クライアント(サーバーではない)を実行しています。同じエラーメッセージ(または私が見ることができるのと同じ)。

PLCache_readも原因でしたが、/ var/db/bsdpd_clientsファイルがなく、ファイルを作成しても問題は解決しませんでした。

PLCache_readをグーグルすると、Appleコードになります。ただし、この場合は dhcpd.c であり、ハードコードされた変数になります。

#define DHCP_LEASES_FILE "/var/db/dhcpd_leases"

そして、見よ、/ var/db/dhcpd_leasesはゴミだらけに見えた。一時的なファイル名に移動しましたが、インターネット共有は問題なく機能します。

モーガント、あなたの綿密な解決策に感謝します。クラッシュログの読み方を学びました!

0
David McCallum

うーん...クラッシュログは、bootpdが文字列をコピーしているPLCache_readと呼ばれる関数を実行していて、どういうわけか、バッファオーバーフローを引き起こしていることを示しています。 (ちなみに、bootpdのソースが利用できるようです ここ 。)

私の推測では、bootpdは不正な設定ファイルを読み取っているか、ネットワーク経由で不正なデータを取得しています。私は実行してみます:

Sudo fs_usage -w bootpd

それが問題の原因についての手がかりを与えるかどうかを確認します。

他の誰かがこの問題を抱えていた であることは明らかですが、登録されていないので、彼らが有用な答えを得たかどうかはわかりません。 /etc/bootpd.plistを移動すると役立つ場合があります。

ああ、私がこれをタイプしている間にあなたは答えを見つけました。まあ、とにかくこの答えを投稿します。多分それは他の誰かに役立つでしょう。

0