
AFAIU, Когда tftp
сервер используется для pxe
загрузки, клиент отправляет запрос на сервер, а сервер отправляет обратно несколько файлов (initrd, kernel, config, ...). Сервер может решить, какие файлы отправить клиенту, в зависимости от IP-адреса клиента. Клиент не знает URL этих файлов.
У меня такой вопрос:
Я хотел бы протестировать tftp
сервер. Я хотел бы запустить команду или (простой) скрипт, который связывается с tftp
сервером, получает файлы и сохраняет их на диске.
Другими словами, я хочу сделать следующее:
На стороне сервера разницы нет: сервер думает, что клиент хочет загрузиться через PXE, и отправляет файлы клиенту.
На стороне клиента: клиент на самом деле не хочет загружаться. Он просто хочет скопировать (сохранить) файлы на диск.
Как проще всего это сделать?
решение1
Комментарий @Patrick к вашему вопросу был абсолютно верным: все, что нужно клиентской машине для загрузки PXE, это широковещательный запрос DHCP. DHCP-сервер (обычно на сервере загрузки PXE) увидит MAC-адрес клиентского устройства и будет использовать его для
- дать клиенту IP-адрес
- сообщить клиенту, какие файлы он должен получить с PXE-сервера
в этот момент клиент знает адрес сервера и что от него получить. К сожалению, есть куча мелочей, например, может быть только один DHCP-сервер со специальной конфигурацией для PXE-клиента, должен быть запущен TFTP-сервер и т. д.
Есть довольно хорошее пошаговое руководство по адресуhttps://wiki.debian.org/PXEBootInstall. Вы не указали свой дистрибутив, но большинство систем PXE, по крайней мере, будут соответствовать этому руководству.
Я знаю, что ваш вопрос говорит о том, что вы не хотите знать адрес PXE-сервера. Но есть только один способ (без написания собственного клиента), который можно сделать, с помощью DHCP-клиента PXE requester/processor. Если вы хотите отказаться от этой части, вы отбрасываете большую часть возможностей, необходимых для самозагрузки.
Я знаю, что вы на самом деле не хотите загружать машину, что ставит вас в положение, когда вам приходится реализовывать большую часть протокола PXE для целей тестирования. Если у вас нет доступной машины для скретча, мне интересно, зачем вам вообще нужно тестировать PXE.
решение2
решение3
Я лучше всего знаком с тем, какСапожникнастраивает TFTP, поэтому я не уверен, что это имеет значение, но я предоставлю эту информацию в любом случае. Cobbler настраивает загрузчик, используя pxelinux.0
как@Patrick объясняет в комментарияха также@msw. Но он также создает pxelinux.cfg/
рядом с собой соответствующий каталог, содержащий MAC-адреса для каждой системы, которая будет подключаться к серверу.
Эти файлы содержат pxelinux.cfg
следующую информацию:
$ more 01-54-52-00-ff-ff-ff
default linux
prompt 0
timeout 1
label linux
kernel /images/Centos56-x86_64/vmlinuz
ipappend 2
append initrd=/images/Centos56-x86_64/initrd.img ksdevice=bootif lang= console=ttyS0,115200 text serial kssendmac ks=http://192.168.1.207/cblr/svc/op/ks/system/kvmcobblertest
Фактическое ядро Linux, которое будет загружать эта виртуальная машина, содержится в этом каталоге, доступном по TFTP, /images/Centos56-x86_64/vmlinuz
. Вся структура каталогов TFTP выглядит следующим образом с задней стороны сервера:
$ ls -l /tftpboot/
total 348
drwxr-xr-x 2 root root 4096 Jun 22 2011 etc
drwxr-xr-x 2 root root 4096 Jul 9 2012 grub
drwxr-xr-x 6 root root 4096 Jul 9 2012 images
drwxr-xr-x 2 root root 4096 Jun 30 2011 images2
-rw-r--r-- 1 root root 20020 Jul 9 2012 memdisk
-rw-r--r-- 1 root root 39188 Jul 9 2012 menu.c32
drwxr-xr-x 2 root root 4096 Jun 22 2011 ppc
-rw-r--r-- 1 root root 14716 Jul 9 2012 pxelinux.0
drwxr-xr-x 2 root root 4096 Jul 9 2012 pxelinux.cfg
drwxr-xr-x 2 root root 4096 Jul 9 2012 s390x
-rw-r--r-- 1 root root 198192 Jul 9 2012 yaboot
Единственное, что изначально доступно серверам, загружающимся с этого TFTP-сервера, это, как уже описывали другие, pxelinux.0
файл конфигурации, соответствующий MAC-адресу конкретного сервера.
Каталог изображений
Если вам интересно, это выглядит так:
$ tree /tftpboot/images
/tftpboot/images
|-- Centos56-x86_64
| |-- initrd.img
| `-- vmlinuz
|-- Centos56-xen-x86_64
| |-- initrd.img
| `-- vmlinuz
`-- Centos60-x86_64
|-- initrd.img
`-- vmlinuz
3 directories, 6 files