Next Previous Contents

6. 特殊型的 TFTP 伺服器

由于 TCP/IP BootPROM 只能支持 TFTP 通讯协定, 而这与增强型的 TFTP 伺服器新功能息息相关.

6.1 Bootix 的增强型 TFTP 伺服器

Bootix 随著 TCP/IP BootPROM 一起发行的增强型 TFTP 伺服器, 可以传送每个封包达 1408 位元组的资料以取代原标准的 512 位元组. 这个是个很棒的功能你应该多加利用. 这个伺服器程序可以在 TCP/IP BootPROM 工具程序磁片中找到, 有 Solaris, Windows 及 Netware NLM 版本.

6.2 Linux 的增强型 TFTP 伺服器

在 Linux 下, 可以用 Bootix/Incom 所写的 TFTP 伺服器. 供 Linux 使用的版本已编译好,. 放在这 http://cuiwww.unige.ch/info/pc/remote-boot/soft/incomtftpdlx.tar.gz

6.3 Solaris 的 TFTP 伺服器

原始的 Solaris TFTP 伺服器程序有严格的文档大小限制, 因为它是使用 16-位元的有号整数来计算封包大小. Bootix 所提供的给 Solaris 的增强型 TFTP 伺服器, 就可以解决这个问题, 以提供更快的传输速度.

不过, 不份使用者回应 (特别是搭配 SMC9432 卡使用时) 会在启动它时产生 lock-ups 的问题. 所以, John Martin (j.martin@abdn.ac.uk) 已把 Linux 的 tftpd 移殖到 Solaris. 你可以在这找到 http://www.csd.abdn.ac.uk/~jmartin/tftpd.tar.gz.

6.4 安全闸道器

我们写了一个特殊的 TFTP 伺服器用来当成认证使用者的安全闸道器. 这个伺服器可以在 Linux 或 Solaris 下执行, 并可以透过 Unix 的 通行密码资料库 (NIS 及 shadow 通行密码都已能支持) 或 Windows NT (或 Samba) 伺服器 或 Radius 伺服器. 它放在这 http://cuiwww.unige.ch/info/pc/remote-boot/soft/stdtpd.tar.gz, 有原始程序及预先编译好的可执行档. 预先编译好的可执行档不包含 NT 通行密码的加密功能因为我们不能散布 libdes 即使有满多人抱怨也一样.

为了要使用安全闸道器, 你只要对 security domains 设定档作一些设定, 内容是指每个逻辑安全性领域是对应到哪一台认证伺服器 ( Unix 领域直接对应到 Unix 通行密码资料库伺服器). 以下是一个设定范例档:


#
# STFTPD 设定档
#
# 这个文档用来叙述伺服器的 "security domains".
# 已支持两种认证伺服器 : Radius 或 winnt (winnt 包含 NT 伺服器 和 Samba)
#
# Radius 伺服器的设定格式
# radius        <领域名>        <伺服器网路位址>         <secret>
#
# secret 是指在你的 /etc/raddb/clients 档里头的密字组
#
# SMB 伺服器的设定格式
# winnt         <领域名>        <伺服器网路位址>         <netbiosname>
#
# netbiosname 是指伺服器的 NETBIOS 识别名称
#
# 范例
radius         sec-dom-rad     radiusserver    testing123
winnt          sec-dom-nt1     192.168.1.1     NTserver1
winnt          sec-dom-smb     samba           SAMBA1

记住 如果你使用了 Samba, 你必须设定 security = user.

你也可以提供一个哪些使用者禁止登入 (会使他们的无法通过检查) 的列表给安全认证伺服器.

6.5 广播型 TFTP 伺服器

我们撰写了一个特殊型 TFTP 伺服器以实现自订的 TFTP 广播功能. 用这种伺服器, 我们可以在高负载的 10 Mb 乙太网路环境下, 以 6 Mb/s 的传输率下载映像档到 25 台用户端电脑 (这比传统的 TFTP 传输协定来得有效率多了, 因为它完全不须要对每个封包都做一次已收到的回应). 这种伺服器程序可以在 Linux 或 Solaris 环境下执行. 可以在这取用 http://cuiwww.unige.ch/info/pc/remote-boot/soft/btdtpd.tar.gz, 含源程序及以编译好的可执行档.

因为 TCP/IP BootPROM 本身不支持这种通讯协定, 我们的解决方法是以一个极小的 ramdisk 为基础的 Linux 系统开机, 然后再搭配本文所谈到的工具程序: Linux 版本的 MrBatch, 它本身就内建支持广播型 TFTP 通讯协定了. 一个简易的批次档可以同时使所有的用户端电脑在几分钟内下载完所有的文档. 要使用这个功能你并不需要自行安装 Linux, 除非你有相当奇特的硬件配备, 以致无法直接使用这个套件所提供的 Kernel.

程序如下. 首先你要手动启动广播型伺服器, 并给定参数以设定预期要开机的用户端电脑数量 (记住, 这个程序不需要天天做. 只有在你变更了映像档内容后, 想确定它可以直接载入到你所有的用户端电脑时才要用到). 接著, 你把所有的用户端电脑都打开, 他们就会执行下列的 BpBatch 脚本程序:


#
# 这个批次档是由 BpBatch 所执行, 用以启动一个 内建 ramdisk 的 mini-linux,
# 然后在此 Linux 环境下执行 MrBatch.
#
# 广播型 TFTP 通讯协定只能在 Linux 版本的 MrBatch 作动, 因为 BootPROM 本身不支持.
#
# 1. 设定一个极小的分割区, 用来当快取.
setpartitions "BIGDOS:50"
# 2. 清理 MBR.
clean 0
# 3. 执行一个具 initrd (Initial Ramdisk) 支持的 Linux Kernel, 并用
#    bcastrd.gz 为 初始 ramdisk (将会被挂在 root 并透过 /linuxrc 执行).
#    参考 initrd.txt 以获得更多关于 初始 ramdisk 的详细资料.
#    你不需要去设定 root 装置 (第二个参数是无用的) 到 Kernel,
#    它会自行使用 初始 ramdisk.
linuxboot "linux.krn" "" "bcastrd.gz"
# 4. 初始 ramdisk 会执行 dhcpd 以透过 DHCP 通讯协定来设定网路.
#    接著它会执行 mrbatch -w bcastlx

初始 ramdisk 内含: 所有的程序都去芜存菁并编译成静态连结, 以避免使用到 libc.so 因为它真的很大. 最后以 Gzip 压缩的 ramdisk 大小低于 300 KB. 而 Kernel 本身用掉 450KB (并支持多数的网路卡及 initrd ). 当 Linux 一启动执行, MrBatch 会被叫用并依下列的脚本程序来工作 (你也可以根据你所需来修改):

# 这个文档是在 MrBatch 于 初始 ramdisk bcastrd.gz 启动后执行
# 他主要的功用是 "采广播的方式复制" 文档到快取里头
#
# 1. 看看详细信息.
showlog
# 2. 不需要 "press a key".
set pauselog="OFF"
# 3. 设定分割区为他们最终值.
#    重点: 当你要复制文档到快取区以供以后的开机使用时,
#    你需要在以后所用到开机设定都采用一样的分割区.
setpartitions "BIGDOS:1024"
# 4. 清理 快取分割区.
clean -1
# 5. 透过 广播型 TFTP 通讯协定 (埠号 99) , 复制文档到快取区.
#
# 你可以照我们所写的脚本程序来用, 但你百分之百确定需要修改下面这一行 !
# 在我们的范例下, 我们下载的文档是 mblinux.imz, 它是我们安装的 Linux 的映像档.
copy "$BOOTP-Server-IP@99:mblinux.imz" "{:-1}mblinux.imz"

如果传输完成, 你只须要关掉所有用户端电脑并把它们的初始开机程序脚本设定成你所喜号的选单.


Next Previous Contents