瘦客户端花费更多
在尼加拉瓜北部埃斯特利的 Superemos 社区教育项目中,我们使用二手电脑作为瘦(无盘)客户端,网络由 Linux 服务器控制。许多组织已经从可用于设置此类网络的 Linux 工具中受益。它们节省资金,简化系统管理,增强安全性并提高自主性。它们非常适合我们在尼加拉瓜的低预算教育项目。网络上发布了大量关于设置这些网络的信息和知识。虽然尝试使这些知识发挥作用可能令人生畏,但这种努力肯定会得到回报。
本文解释了我们如何使用旧硬盘和闪存驱动器通过网络引导无盘客户端。对于任何预算紧张且希望为一大群人提供低成本计算设施的人来说,它应该有所帮助。在我们的项目中,我们尤其希望教育工作者意识到他们可以回收旧机器来交付最新的软件。但这些原则同样适用于各种资源更充足的机构,包括商业企业和政府办公室。
在继续解释一些针对没有无盘客户端网络经验的人的基本知识之前,我应该详细说明并承认我们项目的工具和信息来源。我们一直在使用 Novell 的 SUSE Linux 10.0 和 Ubuntu 的 Breezy Badger 发行版,以及多伦多-利赛德扶轮社和 Linux Journal 的出版商 SSC Inc. 提供给我们的各种新旧机器和部件。值得指出的是,我们的机器都是 PC。理想情况下,尽可能实现标准化是值得的。当一个人依赖捐赠或继承的设备时,这总是很尴尬。
在我们项目中使工作顺利进行必不可少的工具包括 Linux 终端服务器项目开发的出色无盘客户端软件以及全面的启动 ROM 映像库(请参阅在线资源)。我们用于让旧硬盘替代启动 ROM 的原始工具来自 Andy Rabagliati(请参阅资源)。
与任何网络一样,无盘客户端系统由连接到客户端的服务器组成,在我们的例子中是通过以太网电缆。一旦服务器启动,无盘客户端就会从服务器接收其操作系统。当每个客户端打开时,它会从其 BIOS 中了解到硬盘上没有可用的系统。然后,它会尝试通过本地网络 (LAN) 启动,方法是通过其网卡发送请求,要求服务器为其提供操作系统。服务器收到请求,并查看它是否具有要发送出去的适当操作系统。如果它有,客户端将像往常一样使用该操作系统启动。对于其用户而言,客户端机器的工作方式就像它拥有自己的操作系统一样。实际上,它正在从远程服务器接收其操作系统。
我们花了一段时间才理解这个概念的基本组成部分以及它们如何交互。首先要找出的是潜在的客户端在其 BIOS 中是否具有允许机器通过启动 ROM“从 LAN 启动”(LAN 代表局域网)的选项。在某些机器上,这很明显,而在另一些机器上,这些设置被隐藏在主 BIOS 的子选项中。在另一些机器上,它根本不存在。如果可用,它使机器能够通过启动 ROM 芯片启动,该芯片通常具有预启动执行环境 (PXE) 功能,位于机器的网卡中。
如果您找到“从 LAN 启动”选项并将 BIOS 配置为从 LAN 启动,您可能会很幸运,一切都会正常工作。但如果它没有正常工作,请不要灰心。我们的一台带有 VIA 芯片组的机器信誓旦旦地表示它将使用 PXE 从 LAN 启动,但一直拒绝这样做,直到有一天它最终决定可以了。这些挫折只是设置无盘客户端网络的一个微不足道的部分,为了使用任何可用的机器获得一流的网络设施,这些挫折是完全值得克服的。
有些机器的网卡集成到主板中。如果网卡未集成到主板中,则通常会插入 PCI 插槽。(可以使用带有较旧 ISA 卡的机器,但它们需要特殊配置,因此我们避免使用它们。)如果网卡未集成到主板中,则不太可能预装启动 ROM。
我们发现使用机器作为无盘客户端主要有两个障碍。一个是潜在的客户端机器不提供“从 LAN 启动”选项。第二个是,即使机器提供从 LAN 启动,网卡通常也没有启动 ROM。我们发现,通过将必要的文件放在旧硬盘或 USB 闪存驱动器上以模拟启动 ROM,我们可以轻松克服这些障碍。本文的核心致力于解释这样做是多么简单。这样做完全避免了使用软盘,而在尼加拉瓜,软盘已经变得太不可靠了。
客户端只需 32MB 的 RAM 即可工作,但 64MB 似乎更令人满意。处理器速度仅为 266MHz 的旧机器也可以正常工作,但处理器速度更快的机器显然工作得更好。如有必要,可以在服务器上配置较旧的鼠标、显示器和非英语键盘布局。由于全面的 LTSP 软件,我们发现我们的大多数硬件都不需要配置。
在服务器上投入资源是非常值得的。我们现在使用 1GB 的 RAM 和 2.4GHz 的处理器,这为十几个以上使用互联网、办公和游戏应用程序的客户端提供了非常快速的服务。如果服务器具有足够的规格,则应该可以从一台服务器运行数十个客户端。在本文中,没有空间过多介绍如何为瘦客户端网络设置服务器。Kevin Brown 已经撰写了几篇出色的文章,解释了 Linux Journal 如何帮助我们做到这一点(请参阅资源)。
对于我们的项目,我们使用 LILO(Linux 加载程序)引导加载程序,因为我们感兴趣的只是引导 Linux。要使用的 LILO 版本很重要。我们发现,最新版本的 LILO 默认坚持使用 lba32 来管理磁盘几何结构,这给我们的闪存驱动器配置带来了问题。幸运的是,我们发现旧版本的 LILO 不会强制执行该选项。我们从 Andy Rabagliati 的 wizzy 包中复制了我们用于闪存驱动器的 LILO。为了方便起见,我们还从 Andy 的包中复制了 boot.b 文件。为了配置旧硬盘,我们依赖于 Ubuntu 和 SUSE 的预捆绑 LILO 包。(有关使用 GRUB 引导加载程序的简要说明,请参阅配置旧硬盘部分。)
我们还需要与我们的启动 ROM 磁盘最终可能使用的不同网卡相关的启动 ROM 映像。我们的网卡是 3Com 905、Realtek 8139 或 Via-Rhine。我们从 ROM-o-matic 获取了这些映像文件。获得可用的映像需要一定的反复试验。ROM-o-matic 定期更新其版本。所有版本都有相似的选项,并且 ROM-o-matic 通过提供一个按钮来帮助将反复试验过程降到最低,该按钮提供特定映像可用于的卡列表。
一旦您选择了可能正确的卡映像,您需要选择映像类型。因为我们正在使用 LILO,所以我们选择了当前的 zlilo 映像类型以及称为 lzlilo 的较旧类型。我们在闪存驱动器上使用了 lzlilo,因为我们发现较新的 zlilo 映像似乎仅在硬盘上有效。我们尚未弄清楚原因。值得强调的是,实验会产生宝贵的信息。这里我仅总结我们自己实验的结果。当其他人尝试使用自己的设备时,肯定会获得不同且很可能更好的结果。
ROM-o-matic 提供了一个“获取 Rom”按钮来下载它生成的映像文件。该选项会弹出一个提示,允许您将映像文件保存在本地目录系统中。我们下载了我们认为我们需要的三种网卡的各种 .lzlilo 和 .zlilo 映像。有了这些文件和 LILO 文件,我们就拥有了使用闪存驱动器或旧硬盘制作启动 ROM 磁盘所需的一切。因此,我们将它们全部复制到一个目录中的一个位置,我们决定将其命名为 /flashlilo。然后我们需要将它们放到我们的启动 ROM 磁盘上。
对于不从 LAN 启动但确实具有允许从 USB 硬盘驱动器启动的 BIOS 选项的新机器,模拟启动 ROM 的闪存驱动器比旧硬盘更方便。一旦一个客户端启动,闪存驱动器就可以被移除并用于启动另一个客户端。我们发现我们可以将 USB 闪存驱动器视为 SCSI 硬盘驱动器。将闪存驱动器插入方便的 USB 插槽后,我们启动了电源,尽管由于热插拔,我们可以在机器已经运行时插入 USB 驱动器。这台机器运行 SUSE,因此 YaST 配置工具识别出新设备并询问是否配置它。我们回答“否”。
为了确保我们想要用于启动 ROM 的驱动器没有格式化或分区问题,我们使用 fdisk 作为 root 超级用户删除了现有分区,并安装了一个新的可启动分区。(如果这些磁盘上有您需要的东西,请制作副本。重新分区会破坏磁盘上的所有内容!)然后我们使用 fdisk 对闪存驱动器进行分区,方法是键入
# fdisk /dev/sda
当配置引导加载程序时,需要注意非常重要的一点是 fdisk 在驱动器上发现的磁头数、扇区数和柱面数。记下这些。在使用 fdisk 设置一个没有潜在麻烦历史的可启动分区后,我们准备在其上放置一个文件系统。我们选择了简单的选项并键入
# mke2fs /dev/sda1
在闪存驱动器上放置一个 ext2 文件系统。为了告诉 Linux 要挂载哪个设备以及在哪里挂载,我们使用了传统的目录 /mnt 作为我们的挂载点,首先检查它是否为空。对于闪存驱动器,我们键入
# mount /dev/sda1 /mnt
然后我们将 /flashlilo 中的所有文件复制到 /mnt
# cp /flashlilo/* /mnt
此时,我们需要为 LILO 编写一个配置文件。由于害怕 vi 和 emacs,我们使用了 pico
boot = /dev/sda disk = /dev/sda bios = 0x80 sectors = 62 heads = 4 cylinders = 1015 install = /mnt/boot.b map = /mnt/map root = /dev/sda1 vga = normal read-only delay = 30 pROMpt image = /mnt/viarhine6102.lzlilo label=viarhine2 read-only image = /mnt/3c905b.lzlilo label=3Com905b read-only image = /mnt/rt8139.lzlilo label=RTL8139 read-only
我们将该文件以标准名称 lilo.conf 保存到 /mnt 中。
该配置文件的主要部分适用于用户从最终菜单中选择选项之前的整个启动过程。在这部分中,第一行告诉客户端机器从闪存驱动器启动。第二行及其子行告诉它有关磁盘几何结构的信息,以便它知道将内容放在哪里。(这是您需要从 fdisk 记下的磁盘信息的地方!)install 行告诉它使用 boot.b 安装引导阶段。
map 行告诉瘦客户端在哪里可以找到 LILO 程序创建的文件中的内容。root 行告诉它在哪里可以找到文件系统。vga 行解释了如何将信息输出到显示器。只读选项可防止一切受到干扰。delay 行告诉机器在显示提示符之前等待多长时间。
配置文件的 image 部分为客户端用户提供不同的启动选项。因此,当客户端启动时,LILO 通过一个菜单向用户提供这些映像选项,菜单中有三个可供选择的网卡启动选项:Via-RhineII、Realtek 8139 或 3Com905。
为什么 boot.b、map 和 LILO 映像被称为驻留在 /mnt 目录中?原因是现在我们已经为 LILO 编写了配置文件,我们必须告诉 LILO 使用该配置文件。我们只能在我们正在工作的目录中执行此操作,该目录是我们正在处理的驱动器的挂载位置。在我们的例子中,这是 /mnt。因此,告诉我们想要使用的 LILO 版本更新 lilo.conf 文件的命令是
# /mnt/lilo -C lilo.conf
目前这很好,因为我们在 /mnt 中。但是,当我们卸载闪存驱动器,将其移除并插入我们希望它启动的机器时会发生什么?我们是否需要更改 lilo.conf 文件中的引用?然后我们是否会陷入永无止境地运行 LILO 以重新配置 lilo.conf 的狂躁循环中?不,事实证明不是这样。当我们在客户端机器中尝试启动它时,一切都运行顺利。因此,现在我们有了启动 ROM 驱动器,我们移出 /mnt 目录并键入
# umount /dev/sda1
当我们第一次开始配置旧硬盘以模拟启动 ROM 时,我们遵循了与用于闪存驱动器的过程类似的过程。我们必须学习这可能意味着在将硬盘连接到机器之前更改硬盘上的跳线。(术语跳线是指位于硬盘侧面一组引脚中的微型连接器。)更改跳线非常容易。大多数硬盘驱动器的外壳上都有小图,解释了如何为不同的选项设置跳线。通常有三种:主盘、从盘和链选。链选允许机器的 BIOS 决定要分配给硬盘驱动器的状态。
最常用的 PC 机器只有一个 IDE 硬盘,通常是主盘驱动器。Linux 将该驱动器标识为 /dev/hda。如果旧机器有足够的内存和足够快的 CPU,则将 CD-ROM 驱动器与设置为链选或从盘的跳线连接并直接配置机器的硬盘是有意义的。但是,为了节省安装时间,我们最终决定使用一台速度更快的新机器和一个较新的 CD-ROM 来配置我们的旧硬盘。这意味着只需断开更快机器上的现有硬盘,并将跳线设置为“主盘”的旧硬盘连接起来。因此,一旦我们完成配置并将其连接到无盘客户端的主板,它将立即被识别为主主盘驱动器。
无论我们使用哪种方法来准备旧硬盘进行配置,我们都直接从 CD 安装 Ubuntu 的 Breezy Badger,或者通过我们的本地网络安装 SUSE 10。在这两种情况下,我们都执行最小的基于文本的安装,并选择 LILO 作为我们的引导加载程序。安装完成后,我们可以编辑 /etc/lilo.conf 配置文件以添加映像,就像闪存驱动器的上述 lilo.conf 文件中显示的映像一样。最后,我们运行以下行
# lilo -C /etc/lilo.conf
以使用我们的新映像选项更新 LILO。
关于 GRUB 引导加载程序,我们有一台已经运行 Linux 的旧慢速机器,我们想将其变成客户端。我们发现,只需将此条目添加到 GRUB 的 menu.lst 文件中(替换为适当的启动 ROM 映像文件的名称),我们就可以让它从启动 ROM 映像启动
title Via-Rhine Boot-ROM root (hd0,0) kernel /boot/via-rhine.zlilo
在重新启动之前,我们将硬盘设置为第一个启动选项。在这种情况下,我们进行配置的机器与我们想要用作无盘客户端的几台旧机器具有相同类型的网卡,因此这是一个方便的控制,以确保硬盘正在执行其模拟启动 ROM 的工作。一旦确信一切正常,我们就可以将我们刚刚配置的驱动器传输到它将要启动的机器。或者,如果我们通过将 CD-ROM 驱动器连接到旧机器来配置旧机器,则完成后我们只需断开 CD-ROM 驱动器并重新启动。我们发现这种简单的配置过程在旧笔记本电脑上也运行良好,只要它们具有内置 CD-ROM 和网卡即可。
我们在埃斯特利的系统现在为九个客户端提供服务,其中一些客户端具有启动 ROM PXE,其余客户端具有各种模拟启动 ROM 的驱动器。对于我们配置为模拟启动 ROM 的闪存驱动器,我们只需在启动之前将其放入客户端机器上的 USB 驱动器中即可。需要为每个客户端正确设置 BIOS,以便第一个启动设备与该客户端上的相关磁盘对应。要访问 BIOS,请在启动计算机时搜索显示器屏幕。
应该有一行字样类似于“按 DEL 进入设置”。无论指示的键或组合键是什么,这都将启用对机器 BIOS 菜单的访问。启动设备顺序的配置通常在第二个菜单中,该菜单应称为类似于“高级 BIOS 选项”。在该菜单中,您应该找到设置第一个启动设备的选项。在闪存驱动器的情况下,我们发现将第一个启动设备设置为 USBHDD 效果很好。
客户端需要从服务器获取内核映像。内核映像是描述构成操作系统软件的文件的另一种方式,该软件使与不同应用程序一起工作成为可能。为了获取其内核映像,客户端必须向网络服务器提供其身份并建立网络地址。每个客户端通过提供其网卡上的唯一代码(称为 MAC 地址)来标识自己。作为响应,服务器为每个客户端提供一个称为 IP(互联网协议)地址的网络地址。
客户端通过称为动态主机配置协议 (DHCP) 的网络标准从服务器获取此信息。使用 PXE 启动的客户端会自动从 DHCP 配置文件 dhcpd.conf 的常规部分分配动态地址。没有 PXE 的客户端通过 dhcpd.conf 中的特定配置获得固定 IP 地址,以确保它们被识别并且可以获得适当的 Linux 内核映像。我们发现旧机器喜欢使用名为 vmlinuz 而不是 bzImage 的内核映像。
在我们的每个非 PXE 客户端的配置中,我们告诉服务器的 /etc/dhcpd.conf 文件它们的 Mac 地址、固定 IP 地址以及它们想要的内核映像。有时可能需要配置 Linux 终端服务器项目 (LTSP) 包,该包为我们的网络提供文件系统架构。当客户端正在使用 LTSP 无法自动识别的鼠标或显示器或键盘布局时,可以调整 LTSP lts.conf 配置文件。
以下是我们的服务器的 dhcpd.conf 文件的一部分
ddns-update-style ad-hoc; allow booting; allow bootp; subnet 198.186.207.0 netmask 255.255.255.0 { range dynamic-bootp 198.186.207.205 198.186.207.220; default-lease-time 21600; max-lease-time 43200; } next-server 198.186.207.124; filename "pxelinux.0"; option root-path "198.186.207.124:/opt/ltsp/i386"; host ws001 { hardware ethernet 00:11:5B:86:46:B5; fixed-address 198.186.207.201; filename "/lts/vmlinuz-2.6.9-ltsp-3"; } host ws002 { hardware ethernet 00:60:08:C6:2B:43; fixed-address 198.186.207.202; filename "/lts/vmlinuz-2.6.9-ltsp-3"; }
以下是我们的服务器的 LTSP lts.conf 文件的主体部分
[Default] SERVER = 198.186.207.124 XSERVER = auto X_MOUSE_PROTOCOL = "PS/2" X_MOUSE_DEVICE = "/dev/psaux" X_MOUSE_RESOLUTION = 400 X_MOUSE_BUTTONS = 3 XkbLayout = es USE_XFS = N SCREEN_01 = startx
LTSP 的软件包允许为在各个客户端工作站上运行的多媒体和其他应用程序提供广泛的复杂配置选项,这些选项可以在 lts.conf 中配置,类似于 dhcpd.conf 中的各个工作站。我们保持系统简单,因为我们主要使用互联网和办公应用程序。在我们的案例中,LTSP 的默认配置识别了我们所有各种客户端的硬件,除了键盘布局,因此我们添加了一行配置西班牙语键盘。
这项技术非常易于访问且灵活。对于我们在尼加拉瓜的人们来说,它使我们能够使用旧设备交付最新的软件,从而为大量低收入学生提供计算机技能培训。广泛可用的工具和信息意味着即使是 Linux 的相对初学者也可以轻松地为广泛的教育、商业和管理目的实施此类无盘客户端系统。很少有底线能显示出如此大的收益,而资源投入却如此 modest。
本文资源: /article/8699。
Stephen Sefton 是一位爱尔兰公民,他在中美洲从事社区发展工作近 20 年,涉及广泛的社区问题,包括住房、人权、医疗保健、教育和可持续农业。在回韦克斯福德家乡探亲期间,他与他的叔叔 Christy 一起观察了罗斯莱尔海滩的逐渐内凹,并想知道家里的房子还要多久才会从悬崖上滑落到海中。他记得在尼加拉瓜湖南部海岸和 Curraghcloe 海滩上快乐地散步。