Linux заморозить с pxe, когда есть более 1 сетевой интерфейс

597
user3459474

Я настроил 2 виртуальные машины с virtualbox: первая (именуемая сервером после этого) действует как dhcp (isc-dhcp-server) и tftp (atftpd), другая (именуемая в дальнейшем «client») как бездисковый компьютер ,

Процесс загрузки клиента начинается с syslinux, который загружает ядро ​​linux, передавая ему аргументы «initrd = ram_test.img nfsroot = 10.0.0.1: / srv / nfsroot / stretch, rw ip = dhcp rw».

Компьютеры определены как 64-битные, сервер загружается на стабильной версии Debian, и клиенту также предоставляется стабильная версия Debian для загрузки.

Нет проблем, когда у клиента есть только 1 сетевой интерфейс (внутренняя сеть, тип карты Intel Pro / 100MT Desktop (8254OEM)), но как только я добавляю другой того же типа, с другим MAC-адресом, дела идут хорошо, пока linux не попытается получить адрес DHCP.

В этот момент система останавливается на фразе «random: fast init done». Другие вещи, которые я могу видеть до этого и, возможно, более интересные, это:

e1000: enp0s8 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX e1000: enp0s3 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX IPv6: ADDRCONF(NETDEV_CHANGE): enp0s8: link becomes ready IPv6: ADDRCONF(NETDEV_CHANGE): enp0s3: link becomes ready IP-Config: no response after 2 secs - giving up IP-Config: enp0s3 hardware address 08:00:27:2a:1a:3b mtu 1500 DHCP IP-Config: enp0s8 hardware address 08:00:27:5f:de:30 mtu 1500 DHCP

После остановки через 323 секунды появляется только «random: crng init done».

Вот файл dhcpd.conf:

allow booting; allow bootp; subnet 10.0.0.0 netmask 255.255.255.0 { #range: 10.0.0.0xC0/26 range 10.0.0.192 10.0.0.250; option broadcast-address 10.0.0.255; option routers 10.0.0.1; filename "tftp://10.0.0.1/pxelinux.0"; }

Чтобы все работало (по крайней мере, только с одним интерфейсом), мне пришлось изменить файл /srv/nfsroot/stretch/etc/initramfs-tools/initramfs.conf, чтобы он выглядел так (комментарии и пустые строки удалены):

MODULES=netboot BUSYBOX=auto KEYMAP=fr COMPRESS=gzip DEVICE=eth0 NFSROOT=auto BOOT=nfs

Я думаю, что проблема связана с аргументами, предоставленными ядру в конфигурации syslinux, или initramfs.conf, но я не могу найти точную точку, в которой у меня происходит сбой, и поиск в Интернете также был неудачным.

При написании всего этого я заметил строку «DEVICE = eth0» в initramfs.conf и подумал, что это может быть так, но я просто попытался изменить параметры ядра Linux, чтобы добавить ее «net.ifnames = 0 biosdevname = 0 msgstr "так что ядро ​​использует старые имена eth0 / eth1, но поведение идентично (за исключением, конечно, что имена в журналах больше не являются enpXsY, а ethZ).

Смысл наличия двух сетевых интерфейсов в этой виртуальной машине состоит в том, что эта система предназначена для развертывания систем (с помощью уже работающих cdebootstrap и ручных сценариев) на оборудовании, которое имеет два сетевых интерфейса. У меня не было возможности попробовать это в реальной ситуации, но я убежден, что проблема будет и там (почему бы и нет?), Поэтому я действительно хотел бы иметь некоторые мнения здесь.

Спасибо и извините за WoT.

2

2 ответа на вопрос

1
Pat

после appendстроки в вашем файле pxelinux cfg добавьте опцию:

ipappend 2 

Это скажет загрузочному ядру выполнить транзакцию DHCP с помощью загрузочной сетевой карты PXE.

Возвращаясь к этому, у меня были некоторые другие проблемы с другими системами (тесты, где с virtualbox, с материнскими платами MANO842 у меня все еще были проблемы с загрузкой), но благодаря этой информации я смог найти информацию, которая мне была нужна [ страница] (https://www.syslinux.org/wiki/index.php?title=SYSLINUX#SYSAPPEND_bitmask). Короче говоря, ipappend кажется устаревшим, вместо этого используйте sysappend, и можно использовать BOOTIF = MA: CA: DD: RE: SS: 00, чтобы указать, какой iface нужно использовать. Это может помочь другим, имеющим эту проблему позже. user3459474 5 лет назад 0
ipappend не является устаревшей. `Опция SYSAPPEND, представленная в Syslinux 5.10, является расширением предыдущей опции IPAPPEND, которая была доступна только в PXELINUX. ` Pat 5 лет назад 0
0
Qchan

Итак, вот журнал и если не считать его ...

При загрузке бездискового клиента PXE, если этот клиент имеет несколько сетевых интерфейсов, ядро ​​может либо привести к панике ядра, либо зависнет IP-Config.

Причина этого заключается в том, что в IP-Config есть ошибка, и никто не хочет ее исправлять. По сути, IP-Config слишком быстро и многократно воздействует на DHCP-сервер. Из-за этого DHCP не отвечает второй (или третий) раз, когда IP-Config достигает его. Поэтому IP-Config не может разрешить DHCP, и без IP-адреса невозможно установить корневой каталог, а затем происходит сбой ядра.

Обходной путь - это (если вы используете iPXE):

kernel $ vmlinuz-4.4.0-43-generic boot = nfs netboot = nfs тихая всплеск паники = 30 nfsroot = 10.0.0.1 / корневая сеть ksdevice = bootif BOOTIF = $ ip = $ { не ф}: 192.168.1.1: 192.168.1.1: 255.255.255.0 ::: никто

initrd $ initrd.img-4.4.0-43-generic

Если вы используете обычный PXE:

KERNEL vmlinuz-4.4.0-43-generic

IPAPPEND 2

APPEND vga = 794 boot = nfs root = / dev / nfs initrd = initrd.img-4.4.0-43-generic quiet splash panic = 30 - nfsroot = 192.168.1.1: / root ip = 192.168.1.2: 192.168.1.1 : нет 192.168.1.1: 255.255.255.0 ::: никто

Я не ожидаю, что ваши записи будут выглядеть именно так. Это всего лишь примеры . Итак, отредактируйте свой соответственно.

1) Вам необходимо установить статический IP-адрес непосредственно в параметрах ядра (или в приложении). Если вы этого не сделаете, IP-Config попытается запустить DHCP, а вы этого не хотите .

2) Вы хотите заставить PXE запрашивать только у одного интерфейса NIC, а не у всех. Чтобы заставить его использовать только один интерфейс, вы используете «network ksdevice = bootif BOOTIF = $ » в iPXE и ​​используете «IPAPPEND 2» в обычном PXE. Напишите это точно так, как показано выше.

Это оно! Два простых шага и вы уже в пути.

BOOTIF заставляет PXE использовать только основной интерфейс, на который был загружен PXE. Он будет игнорировать все остальные интерфейсы. IPAPPEND делает то же самое.

Спасибо за основные моменты. Я проголосовал, но, поскольку у меня недостаточно репутации ... ну ... В любом случае, это объясняет разные вещи, и я думаю, что pxelinux на самом деле использует один из описанных вами обходных путей, а именно, второй. user3459474 5 лет назад 0