如何构建一台网络引导服务器(一)

网络引导 服务器能够被配置为基于网络去提供一个完整的操作系统,以便于客户端计算机从一个中央位置获取配置。

-- Gregory Bartholomew

致谢

编译自 |

https://fedoramagazine.org/how-to-build-a-netboot-server-part-1/

作者 | Gregory Bartholomew

译者 | qhwdw 共计翻译:172.5篇 贡献时间:420 天

有些计算机网络需要在各个物理机器上维护相同的软件和配置。学校的计算机实验室就是这样的一个环境。网络引导

[1]

服务器能够被配置为基于网络去提供一个完整的操作系统,以便于客户端计算机从一个中央位置获取配置。本教程将向你展示构建一台网络引导服务器的一种方法。

本教程的第一部分将包括创建一台网络引导服务器和镜像。第二部分将展示如何去添加 Kerberos 验证的家目录到网络引导配置中。

初始化配置

首先去下载 Fedora 服务器的netinst

[2]

镜像,将它刻录到一张光盘上,然后用它引导服务器来重新格式化。我们只需要一个典型的 Fedora Server 的“最小化安装”来作为我们的开端,安装完成后,我们可以使用命令行去添加我们需要的任何额外的包。

注意:本教程中我们将使用 Fedora 28。其它版本在“最小化安装”中包含的包可能略有不同。如果你使用的是不同的 Fedora 版本,如果一个预期的文件或命令不可用,你可能需要做一些调试。

最小化安装的 Fedora Server 运行起来之后,以 root 用户登入:

并设置主机名字:

接下来,我们需要在我们的服务器上配置一个静态网络地址。运行下面的一系列命令将找到并重新配置你的默认网络连接:

注意:上面最后的一组命令被封装到一个 脚本中,因为它将临时禁用网络。这个 命令可以让 命令运行完成,即使你的 SSH 连接断开。注意,连接恢复可能需要 10 秒左右的时间,如果你改变了服务器 IP 地址,你将需要重新启动一个新的 SSH 连接。

注意:上面的网络配置在默认的连接之上创建了一个网桥

[4]

,这样我们在后面的测试中就可以直接运行一个虚拟机实例。如果你不想在这台服务器上去直接测试网络引导镜像,你可以跳过创建网桥的命令,并直接在你的默认网络连接上配置静态 IP 地址。

安装和配置 NFS4

从安装 nfs-utils 包开始:

为发布 NFS 去创建一个顶级的伪文件系统

[5]

,然后在你的网络上共享它:

SELinux 会干扰网络引导服务器的运行。为它配置例外规则超出了本教程中,因此我们这里直接禁用它:

注意:应该不需要编辑 grub 命令行,但我们在测试过程中发现,直接编辑 被证明重启后是无效的,因此这样做再次确保设置了 标志。

现在,在本地防火墙中为 NFS 服务添加一个例外规则,然后启动 NFS 服务:

创建网络引导镜像

现在我们的 NFS 服务器已经启动运行了,我们需要为它提供一个操作系统镜像,以便于它提供给客户端计算机。我们将从一个非常小的镜像开始,等一切顺利之后再添加。

首先,创建一个存放我们镜像的新目录:

使用 命令在新目录下用几个基础包去构建镜像:

在上面的命令中省略了很重要的 包。在它们被安装完成之前,我们需要去调整一下 镜像中包含的驱动程序集, 首次安装时将自动构建这个镜像。尤其是,我们需要禁用 模式,以便于 镜像能够在各种硬件平台上正常工作,并且我们还需要添加对网络和 NFS 的支持:

现在,安装 包:

设置一个阻止 包被更新的规则:

设置 locale:

注意:如果 locale 没有正确配置,一些程序(如 GNOME Terminal)将无法正常工作。

设置客户端的主机名字:

禁用控制台日志输出:

定义网络引导镜像中的本地 用户:

允许 使用 :

启用自动创建家目录:

由于多个客户端将会同时挂载我们的镜像,我们需要去配置镜像工作在只读模式中:

配置日志输出到内存而不是持久存储中:

配置 DNS:

绕开编写本教程时存在的根目录只读挂载的 bug(BZ1542567

[6]

):

最后,为我们镜像创建 NFS 文件系统,并将它共享到我们的子网中:

创建引导加载器

现在,我们已经有了可以进行网络引导的操作系统,我们需要一个引导加载器去从客户端系统上启动它。在本教程中我们使用的是iPXE

[7]

注意:本节和接下来的节使用 QEMU 测试,也能在另外一台单独的计算机上来完成;它们并不需要在网络引导服务器上来运行。

安装 并使用它去下载 iPXE:

现在我们需要去为我们的引导加载器创建一个指定的启动脚本:

启动 “file” 下载协议:

安装 C 编译器以及相关的工具和库:

构建引导加载器:

记下新编译的引导加载器的存储位置。我们将在接下来的节中用到它:

用 QEMU 测试

这一节是可选的,但是你需要去复制下面显示在物理机器上的EFI 系统分区

[8]

的布局,在网络引导时需要去配置它们。

注意:如果你想实现一个完全的无盘系统,你也可以复制那个文件到一个 TFTP 服务器,然后从 DHCP 上指向那台服务器。

为了使用 QEMU 去测试我们的引导加载器,我们继续去创建一个仅包含一个 EFI 系统分区和我们的启动文件的、很小的磁盘镜像。

从创建 EFI 系统分区所需要的目录布局开始,然后把我们在前面节中创建的引导加载器复制进去:

下面的命令将识别我们的引导加载器镜像正在使用的内核版本,并将它保存到一个变量中,以备后续的配置命令去使用它:

定义我们的客户端计算机将使用的引导配置:

注意:上面的引导脚本展示了如何使用 iPXE 去网络引导 Linux 的最小示例。还可以做更多更复杂的配置。值得注意的是,iPXE 支持交互式引导菜单,它可以让你配置默认选项和超时时间。比如,一个更高级一点 iPXE 脚本可以默认从本地磁盘引导一个操作系统,如果在倒计时结束之前用户按下了一个键,才会去网络引导一个操作系统。

复制 Linux 内核并分配 initramfs 给 EFI 系统分区:

我们最终的目录布局应该看起来像下面的样子:

要让 QEMU 去使用我们的 EFI 系统分区,我们需要去创建一个小的 磁盘镜像来包含它,然后将它连接到 QEMU 作为主引导驱动器。

开始安装必需的工具:

现在创建 文件,并将 目录中的文件复制进去:

注意:在物理计算机上,你只需要从 目录中复制文件到计算机上已存在的 EFI 系统分区中。你不需要使用 文件去引导物理计算机。

注意:在一个物理计算机上,如果文件名已存在,你可以重命名 文件,如果你重命名了它,就需要去编辑计算机的 BIOS 设置,并添加重命令后的 efi 文件到引导列表中。

接下来我们需要去安装 qemu 包:

允许 QEMU 访问我们在本教程“初始化配置”一节中创建的网桥:

创建一个 镜像的副本去保存我们虚拟机的持久 BIOS 配置:

现在,启动虚拟机:

如果一切顺利,你将看到类似下图所示的结果:

你可以使用 命令关闭虚拟机回到我们的服务器上:

注意:如果出现了错误或虚拟机挂住了,你可能需要启动一个新的 SSH 会话去连接服务器,使用 命令去终止 进程。

镜像中添加包

镜像中添加包应该是一个很简单的问题,在服务器上 进镜像,然后运行 。

在网络引导镜像中并不限制你能安装什么包。一个完整的图形化安装应该能够完美地工作。

下面是一个如何将最小化安装的网络引导镜像变成完整的图形化安装的示例:

可选地,你可能希望去启用 用户的自动登录:

via:https://fedoramagazine.org/how-to-build-a-netboot-server-part-1/

作者:Gregory Bartholomew

[10]

选题:lujun9972译者:qhwdw校对:wxy

本文由LCTT原创编译,Linux中国荣誉推出

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181225B07OSU00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券