我的暑假是如何度过的:将 Linux 带到尼加拉瓜,第二部分

作者:Kevin Brandes

编者注:在本文的第一部分中,Kevin 解释了他如何在尼加拉瓜度过夏天,以及 Linux 为何在那里找到了受众。 在这里,他讨论了他工作的一些技术方面。

至于我在这里实际做的事情,迄今为止最重要的项目是让无盘客户端与我们当前的安装 SuSE 9.0 一起运行。 无盘客户端对我们很重要,因为它在向当地企业和学校营销时,给了我们相对于 Windows 的明显优势。 我没有尝试自己开发,而是决定最好利用 LTSP 项目多年来的工作成果,并选择了 LTSP 4.0 版本用于这个项目。

网络启动过程

理解无盘客户端的第一部分是了解它们是如何启动的。 因为它们没有硬盘驱动器,所以必须通过网络访问启动信息。 LTSP 文档详细介绍了启动过程,但这里有一个总结:

  • 机器完成其 POST(加电自检),然后寻找启动方式。

  • 如果网卡能够启动,机器会尝试从网卡启动。

  • 然后网卡在网络上发送 DHCP 请求。 此请求包括网卡的 MAC 地址。 这就是整个过程真正开始的方式。

  • 服务器上的 dhcpd 守护程序接收到此请求,并在其配置文件中查找与客户端 MAC 地址匹配的条目。

  • 然后 dhcpd 守护程序使用以下信息响应客户端:工作站的 IP 地址; 本地网络的 NETMASK 设置; 要下载的内核的路径名; 要挂载的根文件系统的路径名; 以及要传递给内核的可选参数,使用内核命令行。

  • 网卡接收到此信息并正确配置其 TCP/IP。

  • 使用 TFTP(简单文件传输协议),引导加载程序下载内核,将其放置在内存中的正确位置,并将控制权交给它。

  • 然后内核初始化系统和外围设备。

  • 作为 LTSP 工作方式的一部分,文件系统镜像驻留在内核命令行的末尾。 内核抓取此镜像(再次使用 TFTP)并将其解压缩到内存中。

  • 我们给出一个root=/dev/ram0参数给内核,使其从刚解压缩到 RAM 磁盘的镜像中运行其根文件系统。

  • 从那里,内核继续启动。 一旦准备就绪,它会启动 X,如果安装了 X 软件包。

  • 请求被发送到服务器上的登录管理器(在我的例子中是 KDM),然后登录管理器响应并允许远程机器登录。

  • 当您坐在无盘客户端前面时,看起来就像您正在使用服务器。

这就是此过程工作原理的基本思路。 LTSP 文档在列表末尾详细介绍了更多细节,但就我们的目的而言,这种详细程度已经足够了。 现在我们可以按顺序配置每个部分; 随着我们的进行,机器将越来越接近功能正常。

先决条件

就我而言,首先要做的事情是确保客户端中的网卡能够从网络启动。 这可以通过两种主要方式实现,即 PXE(预启动执行环境)或 etherboot。 因为我的客户端上的网卡已经支持 PXE,所以我选择了这条路线。 如果您的网卡不支持从网络启动,则可以购买 ROM 来在大多数情况下使您的网卡能够做到这一点。 但是,通常情况下,购买新网卡更便宜。 我推荐 Realtek 8139 网卡,因为我一直对它们有很好的经验。 但根据我的经验,任何现代网卡都有可启动的 ROM。

此外,您必须理解所有这些配置都在服务器上完成 - 而不是在客户端上。 客户端没有硬盘驱动器,因此无法存储设置。 随着您不断配置服务器,客户端将更持续地获得成功。

步骤 1 - DHCPD 配置

一旦您确定当前设备可以实现此设置,下一步就是配置 dhcpd 守护程序。 首先,您需要确保您的系统上安装了 dhcpd。 它通常与服务器软件包组或类似的东西一起安装。 您可以通过键入以下命令来确定是否已安装:whereis dhcpd在命令行上。 在我的 SuSE 9.0 系统上,它安装为 /usr/sbin/dhcpd。

您还希望确保守护程序在每次启动时都启动。 在每个系统上实现此目的的方式都不同,因此我将把您交给您的发行版的文档。 在 SuSE 9.0 中,它是通过使用 YaST 的 DHCP 配置模块在网络服务下完成的。 我发现直接手动编辑文件比讨论如何使用 YaST 在配置文件中获取所有正确的值更容易。 如果您使用的是 SuSE,则必须小心不要重新运行 DHCP 模块,因为这样做会覆盖您的更改。

这是我当前拥有的 dhcpd.conf

/etc/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.128 198.186.207.254;
    default-lease-time 21600;
    max-lease-time 43200;
}
group{
    next-server 198.186.207.124;
    filename    "pxelinux.0";
    option root-path "/opt/ltsp/i386/";

    host cieba {
        hardware ethernet 00:E0:4C:84:3E:58;
        fixed-address 198.186.207.127;
        option host-name "cieba";
    }

    host chilamate {
        hardware ethernet 00:E0:4C:84:9A:67;
        fixed-address 198.186.207.123;
        option host-name "chilamate";
    }
}

如果您想允许客户端拥有动态 IP - 这无关紧要,因为它们只是瘦客户端 - 您应该像这样设置文件:

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.128 198.186.207.254;
    default-lease-time 21600;
    max-lease-time 43200;
}

next-server 198.186.207.124;
filename    "pxelinux.0";
option root-path "/opt/ltsp/i386/";


如果您正在使用范围和固定地址区域,请确保您网络使用的 IP 是您放入其中的 IP。 我希望我可以在这方面提供更多指导,但这实际上取决于您的网络设置。 在大多数家庭网络上,这是 192.168.1.1??。

此文件中最重要的部分是 next-server、filename 和 option root-path 值。 整个 Linux 内核太大,无法通过 PXE 在网卡上直接加载。 因此,为了实现这一点,我们使用一个名为 PXE Linux 的引导加载程序。 它包含在 LTSP 中。 这就是 filename 标记下引用的 pxelinux.0 文件。 根路径是 LTSP 实现的标准路径。

对于客户端,硬件以太网选项是网卡的 MAC 地址。 这可以使用 /sbin/ifconfig 找到。 我选择为主机提供静态 IP,但这并非强制性的。

一旦您根据您的网络正确编辑了 dhcpd.conf 文件,就该重新启动 dhcpd 守护程序以应用更改了。 在 SuSE 上,rc<服务名称> restart重新启动任何系统范围的服务,因此以 root 身份转到命令行并发出命令rcdhcpd restart。 在类似 Red Hat 的系统上,这是通过service dhcpd restart完成的。 一旦守护程序重新启动,在 BIOS 中配置启动客户端的网络启动,看看它能走到哪一步。

步骤 2 - TFTP 配置

您很可能会收到某种 TFTP 错误。 您的客户端已获取 IP 地址 - 静态或动态,取决于您的 dhcpd.conf 文件 - 并且应该告诉您它是什么。 验证一切是否符合您的网络。 如果您回顾启动顺序,您可以看到现在是在服务器上配置 TFTP 的时候了。

在 SuSE 中,此步骤非常容易。 打开 YaST -> 网络服务 -> TFTP 服务器。 选择激活并保留默认目录 /tftpboot。 如果它不存在,请不要担心,YaST 会为您创建它。 单击完成,您就配置了 TFTP。 如果您导航到根 (/) 目录,您应该会看到 /tftpboot 的出现。 如果您使用的是不同的发行版,您可能必须安装 TFTP 服务器软件包,对其进行配置并使其运行,我真的无法在此处帮助您。 请咨询论坛和邮件列表,祝您好运。

步骤 3 - 引导加载程序

如果您现在重新启动客户端,您应该会收到TFTP: File not found error(TFTP:文件未找到错误)错误。 这是因为它正在查找的 pxelinux.0 文件(来自 dhcpd.conf)不存在。 我们正在使用 LTSP 4.0,但 LSTP 3.0 initrd 工具包工作正常。 这些文件包含启动 LTSP 系统所需的组件。 下载 此 tarball,您会找到一个名为 pxelinux.0 的文件; 将其移动到 /tftpboot 目录。 现在,我们必须配置 PXE Linux 引导加载程序,这在服务器上完成。

在 /tftpboot 目录中,创建一个名为 pxelinux.cfg 的子目录。 引导加载程序以多种方式在此目录中搜索以网卡 MAC 地址命名的配置文件。 我发现我不需要为客户端单独的文件,所以我只使用了一个文件,名为 default。 此文件很像 LILO 配置文件。 将以下行放在文件中,使用您喜欢的文本编辑器:

/tftpboot/pxelinux.cfg/default
prompt=0
label linux
        kernel <kernel image>
        append init=/linuxrc rw root=/dev/ram0 initrd=<initrd image>

其中 <内核镜像> 是内核镜像的名称,<initrd 镜像> 是 initrd 工具包中包含的 initrd 镜像的名称。 内核应命名为 bzimage 某某,initrd 镜像为 initrd 某某.gz。 在您确定一切正常之前,请不要使用 LPP(Linux 进度补丁)内核; 它的名称中包含 lpp。 此过程显示一个漂亮的进度条,这很棒 - 除非出现问题。 在这种情况下,内核消息更有用。

接下来,您需要将内核和 init 镜像放在 /tftpboot 目录中。 不要将它们放在子目录中,只需放在 /tftpboot 目录中。 如果您现在启动客户端,您应该会看到它尝试挂载根文件系统但失败。 那是因为它还不存在; 它来自在服务器上安装 LTSP。

步骤 4 - 安装 LTSP

LTSP 团队在尽可能简化此步骤方面做得非常出色。 安装过程在 LTSP 站点上进行了描述; 它将 LTSP 安装到 /opt/ltsp/i386。

步骤 5 - 安装 LTSP X 软件包

再次运行安装程序,但这次选择 X 软件包而不是基本软件包。

步骤 6 - NFS

确保通过 NFS 导出 LTSP 安装路径(默认为 /opt/ltsp/i386),否则您的客户端将无法挂载根文件系统。 这意味着如果您尚未配置 NFS,则需要配置 NFS。 同样,在 SuSE 系统上,此步骤非常容易; 您只需使用 YaST 中相应的模块即可。

步骤 7 - 登录管理器配置

客户端现在应该启动到带有 X 鼠标光标的灰色屏幕; 或者,您可能会得到一个登录屏幕。 如果您获得了登录,则表示您已完成。 否则,您就快完成了。 您是否获得登录取决于服务器上的登录管理器是否设置为接受远程连接。 如果您没有获得登录屏幕,则很可能是您的登录管理器未配置为接受远程登录。 在 SuSE 上,转到 YaST,系统,/etc/sysconfig 文件编辑器,找到桌面 -> 显示管理器 -> DISPLAY_MANAGER_REMOTE_ACCESS 并将其设置为 Yes。 您的客户端现在应该启动到功能齐全的桌面,就像您坐在服务器旁一样。

如果您未使用 SuSE 或 YaST 让您束手无策,则 KDM 的配置文件位于标准目录结构上的 /etc/opt/kde3/share/config/kdm。 如果您使用 Red Hat 或其他非标准发行版,那么我无法帮助您。 查看您的文档。 一旦您的登录管理器接受远程连接,您应该拥有一个功能齐全的瘦客户端。

步骤 8(可选) - Kiosk 模式

如果您想限制对 KDE 桌面的某些部分的访问 - 例如,如果您要设置网吧,则应使用 Kiosk 模式。 Kiosk 模式编辑器适用于 SuSE 9.1 或 KDE 3.2.2,这大大简化了您的生活。 否则,您可以创建一个用户,然后手动编辑配置文件。 KDE 团队在其站点上有一个关于此主题的 HowTo

Kevin Brandes 是俄勒冈理工学院学习软件工程的学生。 21 岁的他喜欢与朋友共度时光、编码和教其他人关于 Linux 的知识。

加载 Disqus 评论