所以,这是我的情况,我有一台机器(比如 M)要使用 PXE 引导来引导,并在该机器上安装一个操作系统(比如 CentOS)。M 不会连接任何显示器或键盘。
PXE 引导服务器也在 CentOS 机器上运行(比如 B)
我将如何编写位于机器 B 中的程序(bash 脚本、Java 程序)并获取机器 M 已成功完成操作系统安装的状态/通知。
请注意,我无法手动检查操作系统是否已完成安装。我需要自动化这个过程。
如果你们能提出最好和最有效的方法,我会很高兴。
所以,这是我的情况,我有一台机器(比如 M)要使用 PXE 引导来引导,并在该机器上安装一个操作系统(比如 CentOS)。M 不会连接任何显示器或键盘。
PXE 引导服务器也在 CentOS 机器上运行(比如 B)
我将如何编写位于机器 B 中的程序(bash 脚本、Java 程序)并获取机器 M 已成功完成操作系统安装的状态/通知。
请注意,我无法手动检查操作系统是否已完成安装。我需要自动化这个过程。
如果你们能提出最好和最有效的方法,我会很高兴。
我的建议是让服务器与网络服务器/网络服务对话,说安装完成,并传递值来识别它是哪台机器。
我最近在使用 debian PXE 安装程序时遇到了这个问题。
我将主机设置为从网络启动。我用机器的 system-uuid 发送一个 POST 请求来识别它并告诉服务器它需要安装。当服务器收到此请求时,它会创建一个特定的 pxelinux.cfg 文件,然后将 uuid 作为文件名,确保特定主机使用特殊参数获取 debian 安装。
我有一个作为模板的预置文件,它是针对每台机器呈现的。在 debian 安装期间,有机会运行一个后期命令,我使用它从服务器下载脚本并在目标环境中执行它。此脚本发送另一个 POST 请求,通知服务器第一阶段安装已完成,并且还为第二安装阶段安装脚本。然后,服务器会删除特定的 pxeconfig 文件。默认的pxeconfig文件会默认十秒后从硬盘启动,所以当主机再次从网络启动时,默认是从硬盘启动,继续安装。
你可以在这里查看代码: https ://github.com/umeboshi2/paella
一个足够简单的方法是在安装完成后使用 NFS 从 M 访问 B 上的目录(取决于安装方法——对于 kickstart,使用安装后脚本)。在某个目录中创建一个文件作为安装已完成的标志。在机器“B”上,您可以使用inotify
功能来检测完成情况(通过inotifywait
shell 脚本或libinotify
其他方式)。
如果 NFS 由于某种原因被禁止,您应该能够使用scp
或sshfs
相当容易地使用。最复杂的部分是复制生成的密钥。