Я экспериментирую с локальной загрузкой PXE на своей Mac OS 10.6;
После долгого устранения неполадок я дошел до того, что LaunchD работает нормально. bootpd
со следующими параметрами:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>detect_other_dhcp_server</key>
<false/>
<key>bootp_enabled</key>
<false/>
<key>dhcp_enabled</key>
<true/>
<key>old_netboot_enabled</key>
<false/>
<key>netboot_enabled</key>
<false/>
<!--
<key>relay_enabled</key>
<false/>
<key>allow</key>
<array/>
<key>deny</key>
<array/>
<key>relay_ip_list</key>
<array/>
-->
<key>reply_threshold_seconds</key>
<integer>0</integer>
<!--
<key>use_open_directory</key>
<false/>
-->
<!--
<key>NetBoot</key>
<dict>
<key>shadow_size_meg</key>
<integer>0</integer>
<key>afp_users_max</key>
<integer>0</integer>
<key>age_time_seconds</key>
<integer>0</integer>
<key>afp_uid_start</key>
<integer>0</integer>
</dict>
-->
<key>Subnets</key>
<array>
<dict>
<key>name</key>
<string>192.168.1</string>
<key>net_address</key>
<string>192.168.1.1</string>
<key>net_mask</key>
<string>255.255.255.0</string>
<key>net_range</key>
<array>
<string>192.168.1.2</string>
<string>192.168.1.254</string>
</array>
<!--
<key>supernet</key>
<string></string>
-->
<key>allocate</key>
<true/>
<key>lease_max</key>
<integer>86400</integer>
<key>lease_min</key>
<integer>86400</integer>
<!--
OTHER OPTIONS FORMAT:
<key>dhcp_*</key>
<string></string>
-->
<!-- DHCP PXE BINDINGS -->
<key>dhcp_option_150</key>
<string>pxe server</string>
<key>dhcp_option_67</key>
<string>boot folder</string>
</dict>
</array>
</dict>
</plist>
Физическая установка:
Router (DHCP off)
|
|------- Mac (DHCP Server)
|
|------- Thin Client
|
|------- mobile device
При тестировании с мобильным устройством через Wi-Fi роутера я получаю:
bootpd[1244]: DHCP DISCOVER [en0]: <MAC ADDRESS>
bootpd[1244]: service time 0.000725 seconds
но устройство никогда не получает IP-адрес.
Есть ли вариант, который мне не хватает, чтобы выдавать адреса?
Ну, после нескольких изменений, у меня все заработало, я постараюсь вспомнить, что я сделал, чтобы исправить это:
Во-первых, я не заметил другой ошибки, которая появлялась при запуске:
subnets: create failed, 'net_range' start not within subnet
Проблема здесь в том, что с маской 255.255.255.0
, то net_address
должен заканчиваться на .0:
<key>name</key>
<string>192.168.1</string>
<key>net_address</key>
<string>192.168.1.0</string>
<key>net_mask</key>
<string>255.255.255.0</string>
<key>net_range</key>
<array>
<string>192.168.1.2</string>
<string>192.168.1.254</string>
</array>
С адресом вашего сервера 192.168.1.1
<- вам может потребоваться установить это вручную
Во-вторых, dhcp_option_150
не понимается bootpd
использовать dhcp_option_66
(66, а не 150 предшествуют 67, кто бы мог подумать.
Последний недостаток, который я могу найти на этом этапе, заключается в следующем:
<key>dhcp_enabled</key>
<true/>
должно быть:
<key>dhcp_enabled</key>
<array>
<string>en0</string>
</array>
с интерфейсом для использования в качестве строки массива; хотя на практике кажется, что указание -i en0
также требуется в аргументах запуска. Это в bootps.plist
в /System/Library/LaunchDaemons/bootps.plist
так как:
<key>ProgramArguments</key>
<array>
<string>/usr/libexec/bootpd</string>
<string>-i</string>
<string>en0</string>
</array>
Если у вас есть другие проблемы, я бы рекомендовал запустить bootpd
вручную с аргументами: -dv
это заставляет его работать на переднем плане (-d
) и подробный (-v
).
Надеюсь, это поможет кому-нибудь еще решить эту проблему!
Я бы добавил также, что для некоторых устройств вам нужно будет установить для свойства reply_threshold_seconds значение «0». Мне пришлось сделать это, чтобы мое устройство ESP8266 подключилось к моему Mac.
В противном случае служба bootpd просто не ответит.