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 服务器的地址。但只有一种方法(无需编写自己的客户端)可以完成,即使用 PXE 客户端 DHCP 请求器/处理器。如果你想放弃这一部分,你就会放弃很多引导你所需的能力。
我知道您实际上并不想启动机器,这会让您为了测试目的而实施大量 PXE 协议。如果您没有可用的临时机器,我很好奇为什么您需要测试 PXE。
答案2
答案3
我最熟悉的是如何皮匠设置 TFTP,所以我不确定这是否相关,但无论如何我都会提供此信息。 Cobbler 使用pxelinux.0
as设置引导加载程序@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