买一赠一
在预算不断减少和成本不断增加的时代,有时不可能遵循标准做法,使用不同的计算机系统来实现不同的目标。东田纳西州立大学 (ETSU) 计算机与信息科学系在 1997 年春季面临了这个问题,当时课程要求建议需要两个计算机实验室
一个稳定的计算机实验室,可以支持标准的课堂使用,以及
一个基于 Linux 的实验性计算机实验室 (LBCL),允许学生更改操作系统源代码。
Pargiter 支持双重用途实验室的策略是将可用计算机划分为一台受信任的 PC 和一组客户端 PC。受信任的 PC,称为 内核服务器 PC,充当整个网络的安全文件服务器。客户端 PC 被预留用于用户开发。用户被指示仅使用客户端 PC,并根据他们打算如何使用系统来启动这些 PC
那些想要使用标准 Linux 内核的人将使用指定的引导软盘,该软盘指示用户 PC 从内核服务器下载标准 Linux 内核。
那些想要使用实验性 Linux 内核的人将从本地硬盘驱动器引导他们的 PC,他们可以在那里存储实验性内核。
Pargiter 的双启动策略确保了标准网络文件系统的完整性,同时使创建了错误内核(并因此导致 PC 无法从本地硬盘驱动器启动)的实验用户更容易通过从内核服务器 PC 重新启动来恢复。
配置六站网络带来了两个关键挑战。第一个挑战源于需要使用带有微通道架构 (MCA) 总线的剩余 PC——标准 Linux 2.0 内核不支持的总线类型。MCA 问题通过使用 Chris Beauregard 的 MCA 内核补丁从 Micro Channel Linux 主页上解决。
第二个与配置相关的挑战源于需要节省内核服务器 PC 上的磁盘空间。将内核服务器 PC 配置为受信任的服务器将有助于确保内核服务器文件系统的完整性,以应对应用于卫星 PC 的随机内核更改。然而,服务器随后将被要求为每个联网的 PC 托管一个 Linux 操作系统副本,几乎没有留下用户主目录的空间。
Linux 内核“磁盘膨胀”问题通过观察到 Linux 发行版中的大多数文件可以存储在服务器上一次并在多个 PC 之间共享来解决。这组共享内核文件包括系统独立文件,如 /etc/passwd,它们在配置中保持不变,以及卫星独立文件,如 /etc/exports,它们只需要配置两次:一次用于内核服务器,一次用于所有客户端 PC。
由于 Linux 发行版通常不划分为系统相关和系统独立文件,因此系统相关的配置文件被移动到一个新目录 /adm。大多数重新定位的文件最初存储在 /etc 中。对于每个移动到 /adm 的文件,在每个客户端的 /etc 目录中创建指向该文件的相应软链接。使用试错法来确定配置文件是否可以移动到 /adm。
海量存储设备配置的主要目标是为系统可执行文件和文件提供足够的磁盘空间,同时为用户文件保留更大的磁盘空间部分。最初,在内核服务器上发现了三个海量存储设备:一个 CD-ROM、一个 320MB 硬盘驱动器和一个 545MB 硬盘驱动器。
320MB 硬盘驱动器被配置为默认启动驱动器 /dev/sda。该驱动器被划分为一个 50MB 交换分区 /dev/sda1 和第二个分区 /dev/sda2,用于服务器的根文件系统。545MB 硬盘驱动器的前 80MB,/dev/sdb1,被保留用于存放客户端的操作系统映像,/tftpboot/Client_IP_Address,以及包含共享操作系统文件的目录 /tfpboot/adm。驱动器的其余部分 /dev/sdb2 被留作服务器的 /usr/local 目录。回顾来看,最好将 /dev/sda 分区为三个逻辑磁盘,将第三个分区保留用于临时文件,例如 /var 目录中找到的文件,因为对临时文件空间的需求会随着系统任务的变化而变化。
CD-ROM 驱动器包含在服务器的初始硬件配置中,以简化和加速 Linux 安装。最后的配置步骤之一是用 320MB 硬盘驱动器替换 CD-ROM。这第三个硬盘驱动器 /dev/sdc 使用一个分区 /dev/sdc1 初始化,用于用户主目录 /home。然后将 CD-ROM 放置在客户端系统 lin2 上,并导出以允许其他客户端和服务器使用该设备。
MCA Slackware 3.1 安装启动软盘用于启动服务器的安装。遵循了基本的 Slackware 3.1 安装说明。标准的 Linux 2.0 内核系列不提供对 MCA 总线架构的支持;因此,安装在 MCA Slackware 3.1 安装软盘上的内核映像被安装在新系统上。完成 Linux 安装后,系统启动,并将 MCA Linux 内核补丁应用于内核源代码。然后配置、编译和安装修改后的内核源代码。最后,重新启动服务器以加载新的内核映像。
基本的网络设置在 Slackware 3.1 安装期间配置,就像任何标准的 Linux 系统一样。当时,Linux 2.0 内核系列不支持令牌环适配器。但是,令牌环适配器支持通过 MCA 内核补丁提供。在内核配置过程中,选择了以下网络支持和网络设备支持选项
TCP/IP 网络
丢弃源路由帧
反向 ARP
允许大窗口
网络设备支持
令牌环驱动程序支持
IBM tropic 芯片组适配器支持
Slackware 网络初始化脚本 /etc/rc.d/rc.inet1 被编辑以设置令牌环接口 (tr0)。这是通过将提供给 ifconfig 命令的默认网络接口参数 Ethernet, eth0 替换为 tr0 来完成的。
创建了一个非标准 shell 脚本 rarptab 并放置在 /etc 目录中。此脚本使用从 48 位 MAC(强制访问控制)地址到 IP 地址的映射初始化 RARP(反向地址解析协议)表。该脚本弥补了 Slackware RARP 未能响应标准 Linux 初始化脚本中命名的客户端的问题。rarptab 脚本由每个客户端的单个命令组成,形式如下
rarp -a Client_IP_Address Client_MAC_Address
rarptab 脚本在系统启动时从 /etc/rc.local 调用,使用命令
sh -c /etc/rarptab服务器的 /etc/exports 文件被修改,以使客户端 PC 可以访问以下目录
/adm:从 /etc 移动的共享文件
/home:用户主目录
/root:超级用户的主目录
/shlib:可加载库
/usr:系统工具和用户目录
/var/X11R6:XFree86 共享库
/var/openwin:Sun Window 系统共享库
Shared Directory Client Hostname \ (rw, no_root_squash) Shared (ro, no_root_squash)上面指定的 no_root_squash 选项对于无盘操作非常重要。此选项允许客户端的 SETUID 程序访问仅 root 可访问的系统文件。
取消注释文件 /etc/inetd.conf 中的 tftp 条目,并在文件“/etc/services”中插入以下行
tftp 68/tcp #TFTP server
在服务器上创建了一个目录 /tftpboot/Client_IP_Address,用于存放单个客户端系统的文件。为了方便起见,在 /tftpboot 中创建了一个指向 Client_IP_Address 目录的软链接 lin2。然后创建 /tftpboot/adm 目录以保存跨系统配置文件。调用 Slackware 的安装例程设置,并在提示安装目标时指定 /tftpboot/lin2。仅选择了 A 节(基本 Linux)和 N 节(网络)中的软件包。在配置客户端的系统文件期间,可以轻松删除 A 节和 N 节中的冗余软件包。拒绝了用于安装 Linux 内核的设置例程选项,因为内核按照设计是从专门准备的启动软盘加载的。也拒绝了运行 LILO 的设置选项。
文件 /etc/fstab 用于确定在系统启动时要挂载的文件系统。LBLC 上的远程客户端共享列表 1 中显示的通用 fstab 文件。
删除了位于 /tftpboot/lin2/etc 中的可共享系统文件,并软链接到 /tftpboot/adm 目录中的对应文件。编辑了文件 /tftpboot/lin2/rc.inet1 以确保令牌环接口 (tr0) 的初始化。然后从 /tftpboot/lin/2etc/rc.d/rc.S 中删除了所有文件系统完整性检查。服务器必须确保文件系统完整性,因为客户端 PC 无法使用 fsck 实用程序在系统启动时检查文件系统完整性;在发生此类检查时,文件系统已经挂载。
使用以下命令,从 /tftpboot/Client_IP_Address 中删除了内容仅驻留在服务器上(NFS 挂载)的选定目录
rm -rf /tftpboot/linwin2/var/X11R6/* rm -rf /tftpboot/linwin2/user/* rm -rf /tftpboot/linwin2/root/*
如前所述,只有有限的 Linux 安装被放置在 /tftpboot/lin2 中;因此,创建了以下目录作为挂载点,以允许 lin2 从服务器导入这些目录
/tftpboot/lin2/var/openwin
/tftpboot/lin2/shlib
/tftpboot/lin2/man
/tftpboot/lin2/info
/cdrom lin1(rw,no_root_squash) /cdrom lin3(rw,no_root_squash) /cdrom lin4(rw,no_root_squash) /cdrom lin5(rw,no_root_squash)chmod -R +r /tftpboot/lin2 命令用于使 lin2 目录树中的所有文件都可由 tftp 读取,这是一种本质上只能访问世界可读文件的协议。然后使用 lin2 的配置来配置 lin3 到 lin5。为其余每个客户端创建了 lin2 配置的副本,命令如下
mkdir /tftpboot/Client_IP_Address ln -s /tftpboot/Client_IP_Address\ /tftpboot/"lin3 through lin5" cp -Rpd /tftpboot/lin2\ /tftpboot/"lin3 through lin5"然后修改了一些系统配置文件,以使这些文件特定于其目标主机。最值得注意的更改涉及修改 /tftpboot/Client_IP_Address/etc/rc.d/rc.inet1。具体来说,修改了 rc.inet1 文件中的两行以反映远程系统的 IP 地址和网关
IPADDR="Client_IP_Address" GATEWAY="Client_IP_Address"此外,修改了文件 /tftpboot/Client_IP_Hostname/etc/HOSTNAME 以反映每个远程系统的正确主机名。最后,修改了文件 /etc/exports,使得 /cdrom 目录不再导出。
使用两步程序为客户端机器生成远程引导软盘。首先,重新编译服务器上的内核源代码,以包含“NFS(网络文件系统)上的根文件系统”支持。编译完成后,新创建的内核映像从 /usr/src/linux/arch/i386/boot/zImage 移动到 /tftpboot/adm/client_boot_image_remote。在新磁盘上贴上标签并插入服务器的软盘驱动器。使用 mknod 实用程序创建了一个虚拟设备 /dev/boot22。使用 dd 实用程序将 client_boot_image_remote 复制到软盘。然后使用 rdev 实用程序将软盘映像上的内核的根设备设置为虚拟设备 /dev/boot22。以下命令序列用于创建远程引导软盘
mknod /dev/boot255 c 0 255 dd if=/adm/client_boot_image_remote/zImage of=/dev/fd0 rdev /dev/fd0 /dev/boot255
最后,此过程被捕获在 shell 脚本中,并用于创建额外的远程引导软盘。
所有客户端系统都包含一个硬盘驱动器,该硬盘驱动器配置为提供单个 50MB 交换分区 /dev/sda1。这将允许实验用户在他们的系统上安装 Linux 时,对驱动器的其余部分进行分区以满足他们的需求。由于唯一的 CD-ROM 位于 lin2 上,因此除了 lin2 之外的任何客户端系统上的 Linux 安装都必须通过 NFS 完成。为了使这种安装成为可能,必须对 MCA Slackware 3.1 启动软盘进行修改。使用命令将启动软盘挂载在 /mnt 目录下
mount -t minix /dev/fd0 /mnt
更新了文件 /mnt/etc/networks,将 LOCALNET 更改为 IP 地址 151.141.99.0。MCA Slackware 3.1 启动软盘假定如果正在进行网络安装,则网络类型为 Ethernet。因此,有必要编辑文件 /mnt/usr/lib/set/INSNFS,将所有出现的 eth0 更改为 tr0。与远程引导软盘一样,编写了一个脚本来自动化上述操作。


