Я пытаюсь настроить загрузочный сервер, который только отвечает на устройства, которые хотят загружаться по сети. В зависимости от загрузочного диска мне нужно доставлять разные загрузочные образы, остальные настройки являются общими.
Моя текущая конфигурация (/etc/dhcp/dhcpd.conf):
ddns-update-style none;
default-lease-time 60;
max-lease-time 100;
log-facility local7;
class "DM814x ROM" {
match if substring (option vendor-class-identifier, 0, 10) = "DM814x ROM";
filename "u-boot-spl-debrick.bin";
}
class "AM335x U-Boot SPL" {
match if substring (option vendor-class-identifier, 0, 17) = "AM335x U-Boot SPL";
filename "u-boot-debrick.img";
}
# more possible strings: "PXEClient", "Etherboot"
log (error,
concat ("TEST DUMP:"
, " mac=", binary-to-ascii(16, 8, ":", substring(hardware, 1, 6))
, " substr='", substring (option vendor-class-identifier, 0, 10), "'"
, " vendor='", option vendor-class-identifier, "'"
#, " dhcpvendor='", option dhcp-vendor-identifier, "'"
)
);
subnet 10.0.42.0 netmask 255.255.255.0 {
#server-name "10.0.42.1";
#option routers 10.0.42.1;
#option domain-name "example.org";
#option domain-name-servers ns1.example.org, ns2.example.org;
pool {
range 10.0.42.200 10.0.42.240;
allow members of "DM814x ROM";
allow members of "AM335x U-Boot SPL";
#allow dynamic bootp clients;
}
}
Теперь кажется, что класс не назначен. Я также пытался реализовать это с помощью подклассов, но с тем же эффектом. Оператор журнала показал мне, что возвращенная строка верна (и substring()
действительно использует базу 0 [которая не документирована]).
Для некоторых тестов я использовал allow dynamic bootp clients
заявление. В результате хост получил IP-адрес, но без имени файла, что показывает, что класс все еще не назначен.
Я взял то, что видел из вашей конфигурации, и адаптировал его к тому, как выглядит мой
#change next-server to your ip
next-server 10.0.42.1;
ddns-updates off;
ddns-update-style none;
default-lease-time 600;
max-lease-time 7200;
log-facility local7;
class "DM814X_MACS" {
match if (binary-to-ascii(16,8,":",substring(hardware, 1, 3)) = "d0:39:72");
}
subnet 10.0.42.0 netmask 255.255.255.0 {
pool {
allow dynamic bootp clients;
allow members of "DM814X_MACS";
range dynamic-bootp 10.0.42.200 10.0.42.240;
if substring (option vendor-class-identifier, 0, 10) = "DM814x ROM" {
filename "u-boot-spl-debrick.bin";
} elsif substring (option vendor-class-identifier, 0, 17) = "AM335x U-Boot SPL" {
filename "u-boot-debrick.img";
}
}
}