RHEL/CentOS 无盘客户端
注:这篇文章似乎在张贴前并未经过检阅。它总体上汇报了部份成功(也就是说局部失败)。你也许会发现 Linux Terminal Server 计划有类同、但经过更多校对的内容,而且适用在 CentOS 上。
现时 CentOS 5 针对 system-config-netboot 的支持不能应用。这个组件有技术上的问题令它不易操作。你可以安装 Fedora Core 6 的 system-config-netbook 组件而它某程度上会「运作」,但当中仍有很多其它问题。
这份指南也许能协助你令事情能在 CentOS 5 环境中运作,但本文的原作者遵照当中的指引后依旧不能成功。
Linux Terminal Server 计划也有类似的内容,然而却适用在 CentOS 上。
原作者声称 Red Hat 计划修正错误并在将来提供一个可用的 system-config-netbook,却未有提及这个修正的预计面世日期。这个问题应该不会阻止 CentOS 4 或 5 的机器成为无盘的客户端,它只会导致 CentOS 5 不能成为一台 NFS 无盘映像服务器。请再次留意,这只是原作者的见解;在这页的较新版本内,RussHerrold 依样葫芦,并一并修正 NFS 服务器的 SElinux 标签,而没有遇上问题。
这份指南会帮助你设置一台 NFS 服务器来派发无盘客户端到你的网络。假如你想快捷地创建工作台,而不必为硬盘烦恼,又或者为多个安装而操心,这个方法很有用。这里某些指令来自官方的 Red Hat 文件。这份指南将会假设你在创建两种不同的安装类型:服务器和桌面的安装。
已测试系统
CentOS 4.6、CentOS 5.1
注:虽然这部份提及 CentOS 的某个定点发行版本,但基于预期的 API/ABI 兼容性,以下序述即使横跨所有 4 或 5 的主要发行版本亦应该不变。
外置参考文件
FIXME 加入 CentOS 本地参考文件
设置 NFS 服务器
1. 安装 NFS 及创建目录
若然你还未设置好一台 NFS 服务器,第一步便是要创建它。客户端的操作系统会存活于(放置在)这台 NFS 服务器上。在 PXE 开机的过程中,支持 PXE 开机的网络卡将会广播 IP 位置的要求,然后由 DHCP 服务器配置一个 IP,并选择性地提供所谓的 next-server 栏,以及当网络的微型开机映像(来自只读内存或其它来源)完成后,要接连装入的初始化开机映像。主机将会由这部里所设置的 NFS 分享区内取得自己的文件及配置文件。
当你开始加入多过一种的安装种类时,在 NFS 分享区内提供剩下的磁盘空间成为必然的事,因为整个客户端的操作系统将会被复制到 NFS 服务器上。一般来说,用户的 /home 是不会被放置在这些映像中,而是独立被挂载的。假如 NFS 组件仍未被安装在你的服务器上,现在请安装它们。
# yum install nfs-utils nfs-utils-lib sytem-config-nfs
接着,创建你将会需要的目录。它们会被指定为 NFS 分享区。如果你想将它们放在其它地方,或者你想用不同的名称,请照样做。你可以从任何地方分享它们。第一个目录将会收藏一个 CentOS 4 的服务器安装,而第二个目录将会是一个带有桌面环境的 CentOS 安装。
# mkdir -p /srv/diskless/i386/RHEL4S/root # mkdir -p /srv/diskless/i386/RHEL4D/root
2. 设置 NFS 挂载
现在你可以创建支持读写的分享区及引导 NFS 服务器。
# vim /etc/exports /srv/diskless/i386/RHEL4S/ *(rw,sync,no_root_squash) /srv/diskless/i386/RHEL4S/root/ *(rw,sync,no_root_squash) /srv/diskless/i386/RHEL4S/snapshot/ *(rw,sync,no_root_squash) /srv/diskless/i386/RHEL4D/ *(rw,sync,no_root_squash) /srv/diskless/i386/RHEL4D/root/ *(rw,sync,no_root_squash) /srv/diskless/i386/RHEL4D/snapshot/ *(rw,sync,no_root_squash)
请引导 NFS 服务器并检查 NFS 的分享区都能妥当,然后启用这个服务。如果 NFS 服务已经在运作中,请重新装入它。
# service nfs start (reload) # chkconfig nfs on # nfs-export -l Directory Permissions Hosts /srv/diskless/i386/RHEL4S/ rw * /srv/diskless/i386/RHEL4S/root/ rw * /srv/diskless/i386/RHEL4S/snapshot/ rw * /srv/diskless/i386/RHEL4D/ rw * /srv/diskless/i386/RHEL4D/root/ rw * /srv/diskless/i386/RHEL4D/snapshot/ rw *
设置 DHCP 服务器
如果你的网络里并没有一台 Linux 的 DHCP 服务器,请参阅有关设置一台 DHCP 服务器的文件。如果你想的话,将 DHCP 服务器安装在 NFS 服务器上亦绝对可行。在我的样例中,有另一台独立的 DHCP 服务器已经在运作中。
1. 为 PXE 设置 DHCP
请将以下设置放置在 /etc/dhcpd.conf 内。它指定允许网络开机。当 DHCP 服务器遇到这些要求时,它便会将客户端指向你所指定的 NFS 服务器。假若你在网络上已经有一台 DHCP 服务器,添加第二台时请谨记要小心,
# vim /etc/dhcpd.conf allow booting; allow bootp; class "pxeclients" { match if substring(option vendor-class-identifier, 0, 9) = "PXEClient"; next-server 192.168.1.20; filename "linux-install/pxelinux.0"; }
2. 设置 tftp
请确定 xinetd 及 tftp 已经安装在 DHCP 服务器上。
# yum install xinetd tftp-server
请确定这两个服务在 DHCP 服务器上都已被设置好。
# chkconfig --level 345 xinetd on # chkconfig --level 345 tftp on
安装/设置/复制一个安装
接着你要着手立创建一个安装。请停用该台安装上的 iptables 及 selinux 服务。
为了这个实验,我全新地安装了一台基本、非图像化的 CentOS 4.6。请完整地按你的首选设置主机,因为它将会成为所有无盘客户端的种。就我而言,我安装了,更新了,并将一切在我的网络上需用的本地设置复制到主机上。如果你需要自定任何东西,请现在就进行,因为一次性地完成会较容易。一个最佳的例子就是所有需要被安装的第三方 RPM 组件,请你现在就将它们安装在主机上。主机里唯一必须安装的组件是 busybox-anaconda。
# yum install busybox-anaconda
当你按你的需要设置好你的安装后,请返回 NFS 服务器并将这个安装 rsync 到 NFS 分享区内。如果你不想见到什么被复制,请删除 -v 这个选项。
# rsync -v -a -e ssh --exclude='/proc/*' --exclude='/sys/*' host_of_installation:/ /srv/diskless/i386/RHEL4S/root/ receiving file list... <剪掉了一大堆输出>
设置无盘客户端
1. 设置 netboot
现在返回你的 NFS 服务器。
# ssh nfs_server
假若你的系统仍未安装文字版的 netboot 设置工具,请安装并执行它。
# yum install system-config-netboot-cmd # system-config-netboot
你应该会看见一个细小的对话框跳出,询问你想做什么。当你首次执行它时,你会看见一个迷你向导。请按 Diskless 来继续。下面概括了你要做的事情。rsync 这个步骤已经完成了。请按 Forward 并输入操作系统的名称和描述。之后一个划面是你输入 NFS 数据的地方。请在 Server IP Address 输入 NFS 服务器的 IP 地址。在 Directory 部份,请输入首个 NFS 分享区 —— /srv/diskless/i386/RHEL4S。在下一个划面,请选择你想在无盘客户端上应用的内核。完成后,请按 Apply 并等待它用一点时间执行工作。这个工具会自动创建及设置映像档,并将它放置在 PXE 的开机目录中。
这些步骤也可通过指令来完成(更详尽解释见 man pxeos; man pxeboot):
# pxeos -a -i "centos5.7" -p NFS -D 1 -s 192.168.1.254 -L /srv/diskless/i386/RHEL4S/ centos5.7 # pxeboot -a -O centos5.7 192.168.1.196
在这里 192.1681.254 是 NFS 服务器的 IP,而 192.168.1.196 是 PXE 客端的 IP。
完成后,NFS 分享区可改用只读权限:
# vim /etc/exports /srv/diskless/i386/RHEL4S/root/ *(ro,sync,no_root_squash) /srv/diskless/i386/RHEL4S/snapshot/ *(rw,sync,no_root_squash) /srv/diskless/i386/RHEL4D/root/ *(ro,sync,no_root_squash) /srv/diskless/i386/RHEL4D/snapshot/ *(rw,sync,no_root_squash)
2. 设置主机
一旦无盘操作系统的环境完成了设置,你便可以利用设置工具来创建及设置一个新的主机系统。如果你需要所有参数的细节,请参阅 Red Hat 文件内的新增主机部份。在图像工具下,请选择 New 来开始创建主机的程序。
你新增的机器必须在网络上拥有一个有效的 IP 地址或主机名称,这应该不成问题。在我的情况下,我将一台现存的计算机从网络上抽出来,移走硬盘,并用它来无盘开机。在主机名称这一栏,请输入一台有效的机器。由于你现时只设置了一个操作系统,唯一可选择的操作系统就是你在 netboot 设置的第一步所创建的那一个。如果你有多于一个操作系统,请从选单中选出合适的操作系统。如果你保留空白的 snapshot 名称,在你网络上找到的名称会自动被填入。请记得我们为它输出了一个 NFS 挂载点:/srv/diskless/i386/RHEL4S{D}/snapshot。最后,如果你想主机把日志放在远程,请输入接纳远程日志的系统日志记录器。完成后,请按 ok 来创建主机。
如果你不想处理任何新机上的错误主机名称,请你从同步档内删除它。举例说,我想创建一个尽可能通用的服务器安装,而且我想它在多台机器上引导。如果我将数据留在文件内,它会选用操作系统被创建时所取得的主机名称。这有些不方便。如果你不介意,你可以置之不理。
# vim /srv/diskless/i386/RHEL4S/root/etc/sysconfig/network-scripts/ifcfg-eth0{1,2,3}(你的网络卡名称) HWADDR= <--- 改为空白 DHCPDHCP_HOSTNAME= <--- 改为空白
现在当你引导新的无盘主机时,它便不会因为 MAC 地址有差异而发疯,也不会拥有一个主机名称。它只会被命名为 localhost。当然你可以随意更改主机名称。
新增主机就是这样做了。现在你可以为每个操作系统的环境重复整个程序。请勿忘记,如果你创建新的操作系统类型,你会想在 NFS 下创建一个新的目录作输出之用。试想像它是操作系统的居所,因此请给它们可辨认的名称。在我的用途里,我创建了上述的服务器及桌面安装。然而,你可以利用它作任何用途。假设你想为某个特定的工作创建一个安装,但你却没有硬盘供这台机器使用。你可以在 VMware 或任何一个虚拟环境下创建一个系统,并将这个安装复制到 NFS 上。现在你便可以在任何拥有 PXE 网络卡的机器上应用它。
PXE 开机
有关 PXE,它是 Preboot Execution Environment 的缩写。如果你渴望更深入了解它,请寻找维基百科。简单来说,网络卡的固件会寻找 DHCP 服务器所传递的 PXE 数据,当中指向你所指定的 NFS 服务器。接着它会通过 tftp 下载开机档进入内存内,进而执行它。最终,你的操作系统会从内存中引导起来。
网络卡都各有不同,因此请查询该卡的生产有关如果在你的系统上启用 PXE。多数较新的卡在出厂时已经支持它,因此你只需在 BIOS 内启用这个功能(内置网络卡),或访问网络卡的工具选单。同样地,网络卡都各有不同。
一旦你的网络卡及系统已经准就绪当,请开机并测试它。它应该进入网络卡的选单,并汇报关于 MAC 地址或说 bootp 在装入中。接着它应该立刻转至你的 NFS 服务器,然后引导 Linux 映像。现在你可以从你公司的计算机内偷走所有硬盘了,嘿。
Translation of revision 8