Copyright © 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 The FreeBSD Documentation Project
欢迎使用 FreeBSD! 本手册适用于安装 FreeBSD 4.11-RELEASE 和 FreeBSD 5.4-RELEASE 以及它们的日常使用。 这个手册目前由很多人 持续地 维护。其中的内容需要不断的添加和更新。 如果您有兴趣参加这个项目,请发邮件到 FreeBSD 文档计划邮件列表。此文档最新的版本可以从 FreeBSD Web站点 上获得。 其他的各种格式和压缩的文档可以从 FreeBSD 的 FTP 服务器或下列其中的一个镜像站点下载获得。如果您更希望得到一份印刷版本的手册,可以从 FreeBSD Mall 购买. 您还可以搜索手册。
Redistribution and use in source (SGML DocBook) and 'compiled' forms (SGML, HTML, PDF, PostScript, RTF and so forth) with or without modification, are permitted provided that the following conditions are met:
Redistributions of source code (SGML DocBook) must retain the above copyright notice, this list of conditions and the following disclaimer as the first lines of this file unmodified.
Redistributions in compiled form (transformed to other DTDs, converted to PDF, PostScript, RTF and other formats) must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
Important: THIS DOCUMENTATION IS PROVIDED BY THE FREEBSD DOCUMENTATION PROJECT "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FREEBSD DOCUMENTATION PROJECT BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
FreeBSD is a registered trademark of the FreeBSD Foundation.
3Com and HomeConnect are registered trademarks of 3Com Corporation.
3ware and Escalade are registered trademarks of 3ware Inc.
ARM is a registered trademark of ARM Limited.
Adaptec is a registered trademark of Adaptec, Inc.
Adobe, Acrobat, Acrobat Reader, and PostScript are either registered trademarks or trademarks of Adobe Systems Incorporated in the United States and/or other countries.
Apple, FireWire, Mac, Macintosh, Mac OS, Quicktime, and TrueType are trademarks of Apple Computer, Inc., registered in the United States and other countries.
Corel and WordPerfect are trademarks or registered trademarks of Corel Corporation and/or its subsidiaries in Canada, the United States and/or other countries.
Sound Blaster is a trademark of Creative Technology Ltd. in the United States and/or other countries.
CVSup is a registered trademark of John D. Polstra.
Heidelberg, Helvetica, Palatino, and Times Roman are either registered trademarks or trademarks of Heidelberger Druckmaschinen AG in the U.S. and other countries.
IBM, AIX, EtherJet, Netfinity, OS/2, PowerPC, PS/2, S/390, and ThinkPad are trademarks of International Business Machines Corporation in the United States, other countries, or both.
IEEE, POSIX, and 802 are registered trademarks of Institute of Electrical and Electronics Engineers, Inc. in the United States.
Intel, Celeron, EtherExpress, i386, i486, Itanium, Pentium, and Xeon are trademarks or registered trademarks of Intel Corporation or its subsidiaries in the United States and other countries.
Intuit and Quicken are registered trademarks and/or registered service marks of Intuit Inc., or one of its subsidiaries, in the United States and other countries.
Linux is a registered trademark of Linus Torvalds.
LSI Logic, AcceleRAID, eXtremeRAID, MegaRAID and Mylex are trademarks or registered trademarks of LSI Logic Corp.
M-Systems and DiskOnChip are trademarks or registered trademarks of M-Systems Flash Disk Pioneers, Ltd.
Macromedia, Flash, and Shockwave are trademarks or registered trademarks of Macromedia, Inc. in the United States and/or other countries.
Microsoft, IntelliMouse, MS-DOS, Outlook, Windows, Windows Media and Windows NT are either registered trademarks or trademarks of Microsoft Corporation in the United States and/or other countries.
Netscape and the Netscape Navigator are registered trademarks of Netscape Communications Corporation in the U.S. and other countries.
GateD and NextHop are registered and unregistered trademarks of NextHop in the U.S. and other countries.
Motif, OSF/1, and UNIX are registered trademarks and IT DialTone and The Open Group are trademarks of The Open Group in the United States and other countries.
Oracle is a registered trademark of Oracle Corporation.
PowerQuest and PartitionMagic are registered trademarks of PowerQuest Corporation in the United States and/or other countries.
RealNetworks, RealPlayer, and RealAudio are the registered trademarks of RealNetworks, Inc.
Red Hat, RPM, are trademarks or registered trademarks of Red Hat, Inc. in the United States and other countries.
SAP, R/3, and mySAP are trademarks or registered trademarks of SAP AG in Germany and in several other countries all over the world.
Sun, Sun Microsystems, Java, Java Virtual Machine, JavaServer Pages, JDK, JSP, JVM, Netra, Solaris, StarOffice, Sun Blade, Sun Enterprise, Sun Fire, SunOS, and Ultra are trademarks or registered trademarks of Sun Microsystems, Inc. in the United States and other countries.
Symantec and Ghost are registered trademarks of Symantec Corporation in the United States and other countries.
MATLAB is a registered trademark of The MathWorks, Inc.
SpeedTouch is a trademark of Thomson
U.S. Robotics and Sportster are registered trademarks of U.S. Robotics Corporation.
VMware is a trademark of VMware, Inc.
Waterloo Maple and Maple are trademarks or registered trademarks of Waterloo Maple Inc.
Mathematica is a registered trademark of Wolfram Research, Inc.
XFree86 is a trademark of The XFree86 Project, Inc.
Ogg Vorbis and Xiph.Org are trademarks of Xiph.Org.
Many of the designations used by manufacturers and sellers to distinguish their products are claimed as trademarks. Where those designations appear in this document, and the FreeBSD Project was aware of the trademark claim, the designations have been followed by the “™” or the “®” symbol.
作为 FreeBSD 的新用户,您将会在本手册第一部分找到 FreeBSD 的安装方法,同时逐渐引入概念和习俗来加强 UNIX® 基础。 阅读这部分只需要您有探索的精神和接受新概念的能力。
读完这些之后,手册中很漫长的第二部分是 FreeBSD 中系统管理员感兴趣的所有主题的全面参考。 在阅读这些章节的内容时所需要的背景知识都注释在每一章节的大纲里面, 如果需要,可在阅读前进行预习。
要获得附加的信息来源列表,请查阅 附录 B。
您目前看到的这本手册的第三版是 FreeBSD 文档计划的成员历时两年完成的顶峰之作。 第三版包含了如下的的主要变动:
第 11 章, 配置和优化, 进行了扩充并增加了关于 ACPI 电源和资源管理, cron 系统实用程序,以及更多的内核优化选项的相关内容。
第 14 章, 安全 一章增加了虚拟专用网 (VPNs), 文件访问控制表 (ACLs), 以及安全公告的内容。
第 15 章, 强制访问控制 (MAC) 是这一版新增的章节。 它解释了什么是 MAC, 以及这一机制如何使您的 FreeBSD 系统更安全。
第 16 章, 存储, 在原有基础上增加了 USB 存储设备, 文件系统快照, 文件系统容限, 基于文件及网络的文件系统, 以及与加密磁盘分区有关的内容。
第 17 章,Vinum, 是这一版中的新章节。 描述了如何使用这种提供了设备无关的逻辑磁盘、软件 RAID-0, RAID-1 和 RAID-5 的卷管理系统——Vinum。
在 第 21 章,PPP 和 SLIP 一章中增加了排除故障的说明。
第 22 章, 电子邮件 一章中增加了关于如何使用其它的邮件传输代理、 SMTP 认证, UUCP, fecthmail, procmail, 以及其它进阶内容。
第 23 章,网络服务, 是新版中全新的一章。 这一章包括了如何架设 Apache HTTP 服务器, FTPd,以及用于支持 Microsoft Windows 客户的 Samba。 一些段落来自原先的 第 25 章, 进阶网络应用 一章。
第 25 章,进阶网络应用 一章增加了关于在 FreeBSD 中使用蓝牙设备, 安装无线网络, 以及使用异步传输模式 (ATM) 网络的内容。
增加了一份词汇表, 用以说明整本书中出现的术语。
对于全书中图表进行了进一步的美化工作。
本手册的第二版是 FreeBSD 文档计划的成员历时两年完成的顶峰之作。 第二版包含了如下的的主要变动:
添加了完整的索引。
用图形替换了以前所有用 ASCII 插图。
每个章节添加了标准大纲,列出了该章所包含的信息和读者所应该了解的知识。
内容逻辑地分成三个部分: “起步”,“系统管理”和“附录”。
第 2 章 (“安装 FreeBSD”) 新版本中使用了抓屏图片,使新用户更容易的领会正文。
第 3 章 (“UNIX 基础”)扩充了进程、守护进程和信号的附加信息。
第 4 章 (“安装应用程序”) 扩充了二进制包管理的附加信息。
第 5 章 (“X Window 系统”) 新版本中着重介绍使用现代桌面技术例如 XFree86™ 4.x 上的 KDE 和 GNOME
第 12 章 (“FreeBSD 启动过程”)对第一版内容进行扩充。
第 16 章 (“存储”) 由第一版中两个单独的章节“磁盘”和“备份”合并而成。 我们认为这两部分作为一个整体比较容易理解。同时 RAID (包括硬件和软件 RAID) 部分也被添加进来。
第 20 章 (“串口通信”) 对第一版进行完善,并为 FreeBSD 4.x/5.x 做了更新。
第 21 章 (“PPP 和 SLIP”) 全部更新。
许多新的内容被添加到 第 25 章 (“高级网络”).
第 22 章 (“电子邮件”)增加了关于配置 sendmail 的信息。
第 10 章(“Linux® 兼容性”) 增加了关于安装 Oracle® 和 SAP® R/3® 的信息。
第二版中也涵盖了下列主题:
这本手册分成了三个逻辑清晰的部分。第一部分 起步 涵盖了 FreeBSD 的安装和基本使用方法。 读者可根据自己的情况按顺序或者跳过一些熟悉的主题来阅读。第二部分 常用操作 涵盖了 FreeBSD 常用的功能, 这部分可以不按顺序阅读。每个部分由一个简明的大纲开始, 这个大纲描述本章节涵盖的内容和读者应该已经知道的知识。 这主要是让读者可以更好的选择感兴趣的章节阅读。第三部分 系统管理 涵盖了 FreeBSD 高级用户所感兴趣的广泛的话题。 第四部分 网络通讯 包括了网络和服务的话题, 而第五部分则是资源信息的附录。
向新用户介绍 FreeBSD。它描述了 FreeBSD 计划的历史、目标和开发模式。
本章将会带领用户完成安装过程。一些高级安装主题, 例如如何通过串行控制台安装,也涵盖在内。
本章涵盖了 FreeBSD 操作系统基础命令和功能。 如果熟悉 Linux 或者其他类 UNIX 操作系统,则可以跳过这章。
本章涵盖如何用 FreeBSD 的 “Ports Collection” 和标准二进制软件包来安装第三方软件。
本章概要地描述了 X Window System 系统并详细地介绍了如何在 FreeBSD 上使用它。 此外他也描述了常用的桌面环境, 例如 KDE 和 GNOME。
列出了一些常用的桌面应用程序,比如 web 浏览器和办公套件, 描述了在 FreeBSD 上如何安装它们。
展示了如何为您的系统设置声卡和视频回放支持。 也描述了一些简单的音频和视频应用程序。
解释了为什么需要配置一个新内核并提供了配置、 编译、安装自定义内核的详细说明。
描绘了 FreeBSD 上打印机管理, 包括横幅页、打印统计,还有初始的设置。
描述了 FreeBSD 的 Linux 兼容特性。 也提供了许多流行的 Linux 应用程序的详细的安装说明, 比如 Oracle、SAP R/3,还有 Mathematica®。
本章描述了管理员调整 FreeBSD 系统以优化性能时可能用到的一些参数。 也描述了 FreeBSD 中的各种配置文件以及它们所在的位置。
本章描述 FreeBSD 的启动过程并且解释了如何用配置选项来控制这个过程。
本章描述了如何创建和操作用户帐号, 同样也论述了设置用户资源限制和其他账号管理任务的方法。
描述了保证 FreeBSD 系统安全可以使用的许多工具, 这包括 Kerberos, IPsec 以及 OpenSSH。
解释了何谓强制访问控制 (MAC) 以及如何利用这一机制来加强 FreeBSD 系统的安全。
本章描述了怎样用 FreeBSD 来管理存储介质和文件系统,包括物理磁盘、RAID 阵列、光学和磁带媒体、后备存储磁盘以及网络文件系统。
本章描述了怎样使用逻辑卷管理器 Vinum。它提供了设备无关的逻辑磁盘和软件 RAID-0、RAID-1 以及 RAID-5。
本章描述了如何在 FreeBSD 上使用非英语语言。它涵盖了系统和应用程序级的本地化。
介绍了 FreeBSD-STABLE、 FreeBSD-CURRENT 以及 FreeBSD 发行版本之间的差异。 描述了一般用户如何紧跟开发过程并从中受益。
本章解释了如何连接终端和调制解调器到 FreeBSD 系统,包括拨入和拨出连接。
本章描述了如何用 FreeBSD 通过使用 PPP,SLIP 或者基于以太网的 PPP(PPPoE)来连接远程系统。
本章解释了一个 email 服务器的不同组成部分并且简单讨论了关于最流行的 mail 服务器软件 sendmail 的配置。
提供了详细的指引和示范配置文件以说明如何将一台 FreeBSD 机器作为网络文件系统服务器, 域名服务器, 网络信息服务器或时间同步服务器来使用的方法。
解释了基于软件的防火墙的原理, 并提供了关于配置 FreeBSD 上的几种防火墙的详细说明。
描述了许多关于网络的主题,包括如何在您的局域网中共享 Internet 连接, 高级路由话题, 无线网络, 蓝牙, ATM, IPv6以及许多高级话题。
列出了获得 FreeBSD 安装 CDROM 或 DVDROM 的不同资源,也提供了允许您自由下载 FreeBSD 的不同 Internet 站点。
由于本手册触及到了很多不同的主题,因而可能引发您想要获取更多详细的讲解。 参考书目列出了很多写作这本书时参考的好书。
讲述了很多对 FreeBSD 用户有用的能够提出问题并进行技术交流的关于 FreeBSD 的论坛。
列出了一些 FreeBSD 开发者的 PGP 签名。
为了使本书保持一致性和易读性特做了以下约定:
斜体 字用来表示文件名、URLs、强调文字和术语的主流用法。
反白 字用来表示错误信息、命令、环境变量、port 的名字、主机名、用户名、组名、设备名以及变量和代码片断。
粗体 字用来表示应用程序、命令和关键字。
按键用粗体来突出于其他文本。 组合键意味着字用‘+’连接时,同时的按下它们,例如:
Ctrl+Alt+Del
表示您应该同时按下 Ctrl, Alt 和 Del 键。
按顺序依次键入的关键字通常是用逗号隔开,例如:
Ctrl+X, Ctrl+S
这意味着用户应该同时按Ctrl 和 X,然后同时按 Ctrl 和 S。
以 E:\> 开头的例子代表一个 MS-DOS® 命令。除非另有说明,这些命令都可以在一个现代的 Microsoft® Windows® “命令行”窗口环境被执行。
E:\> tools\fdimage floppies\kern.flp A:
以 # 开头的例子代表必须以 FreeBSD 超级用户身份执行的命令。您可以用 root 身份登录来输入这些命令,或者以普通账号登录然后用 su(1) 来获得超级用户权限。
# dd if=kern.flp of=/dev/fd0
以 % 开头的例子代表命令应该被普通账号执行。 除非另有说明,C-shell 语法来设置环境变量和其他 shell 命令。
% top
您所看到的这本书是全球几百人努力的结果。 无论他们只是纠正一些错误或提交完整的章节,所有的贡献都是非常有用的。
一些公司通过提供资金让作者专注于文档开发、提供出版资金等等方式来支持文档开发。 其中,BSDi (后并入Wind River Systems) 资助 FreeBSD 文档计划成员来专职改善这本书直到 2000 年三月第一个印刷版 (ISBN 1-57176-241-8) 的出版。Wind River Systems 同时资助其他作者来对输出结构做很多改进和给文章添加一些附加章节。 这项工作结束于 2001 年 11 月印刷第二版 (ISBN 1-57176-303-1)。在 2003-2004 两年中,FreeBSD Mall, 向为改进这本手册以使其第三版印刷版本能够出版的志愿者支付了报酬。
手册的以下章节主要是针对刚开始使用 FreeBSD 的用户及管理员:
FreeBSD 入门。
安装过程向导。
教您 UNIX 基本知识和基本原理。
展示如何在 FreeBSD 上安装大量的第三方应用。
介绍使用 X,UNIX 窗口系统,以及为一些生产环境配置桌面环境的细节。
我们尝试用最少的页数来保持前言的索引,以至于可以用最少翻页次数将该手册从头至尾读过。
非常感谢您对 FreeBSD 感兴趣! 下面的章节覆盖了 FreeBSD 项目的各个方面, 比如它的历史、目标、开发模式,等等。
阅读完这章,您将了解:
FreeBSD 与其它计算机操作系统的关系。
FreeBSD 项目的历史。
FreeBSD 项目的目标。
FreeBSD 开放源代码开发模式的基础。
当然还有:“FreeBSD” 这个名称的由来。
FreeBSD 是一个支持 Intel (x86 和 Itanium®),AMD64,Alpha™,Sun UltraSPARC® 计算机的基于 4.4BSD-Lite 的操作系统。 到其他体系结构的移植也在进行中。 您也可以阅读 FreeBSD 的历史, 或者最新的发行版本。 如果您有意捐助(代码, 硬件,不记名捐款),请看为 FreeBSD 提供帮助这篇文章。
FreeBSD有许多非凡的特性。其中一些是:
抢占式多任务与动态优先级调整确保在应用程序和用户之间平滑公正的分享计算机资源, 即使工作在最大的负载之下。
多用户设备 使得许多用户能够同时使用同一 FreeBSD 系统做各种事情。 比如, 像打印机和磁带驱动器这样的系统外设可以完全的在系统或者网络上的所有用户之间共享, 可以对用户或者用户组进行个别的资源限制, 以保护临界系统资源不被滥用。
符合业界标准的强大 TCP/IP 网络 支持, 例如 SLIP,PPP,NFS,DHCP,还有 NIS。 这意味着您的 FreeBSD 主机可以很容易地和其他系统互联, 也可以作为企业的服务器,提供重要的功能, 比如 NFS(远程文件访问)以及 email 服务, 或将您的组织接入 Internet 并提供 WWW,FTP,路由和防火墙(安全)服务。
内存保护确保应用程序(或者用户)不会相互干扰。 一个应用程序崩溃不会以任何方式影响其他程序。
FreeBSD 是一个 32 位操作系统 (在 Alpha,Itanium,AMD64,和 UltraSPARC 上是64 位), 并且从开始就是如此设计的。
业界标准的 X Window 系统 (X11R6)为便宜的常见 VGA 显示卡和监视器提供了一个图形化的用户界面(GUI), 并且完全开放代码。
和许多 Linux,SCO,SVR4,BSDI 和 NetBSD 程序的二进制代码兼容性
数以千计的 ready-to-run 应用程序可以从 FreeBSD ports 和 packages collection 中找到。您可以顺利的从这里找到, 何用搜索网络?
可以在 Internet 上找到成千上万其它 easy-to-port 的应用程序。 FreeBSD 和大多数流行的商业 UNIX 代码级兼容, 因此大多数应用程序不需要或者只要很少的改动就可以编译。
页式请求虚拟内存和“集成的 VM/buffer 缓存”设计有效的满足了应用程序巨大的内存需求并依然保持其他用户的交互式响应。
SMP 提供对多处理器的支持。
C, C++,Fortran,和 Perl 开发工具的完整扩充。 许多附加的用于高级研究和开发的程序语言也可以在 ports 和 packages collection 中找到。
完整的系统源代码意味着您对您环境的最大程度的控制。 当您拥有了一个真正的开放系统时, 为什么还要受困于私有的解决方案, 任商业公司摆布呢?
丰富的在线文档。
不仅如此!
FreeBSD 基于加州大学伯克利分校计算机系统研究组(CSRG)发布的 4.4BSD-Lite, 继承了 BSD 系统开发的优良传统。 除了 CSRG 优秀的工作之外, FreeBSD 项目花费了非常多的时间来优化调整系统, 使其在真实负载情况下拥有最好的性能和可靠性。 像许多商业巨人努力地增加 PC 操作系统的特性、 提升性能并改善其可靠性一样, FreeBSD 现在 就已经可以提供了!
FreeBSD 可以提供的应用事实上仅局限于您的想象力。 从软件开发到工厂自动化,从存货控制到遥远的人造卫星天线方位控制, 如果商业的 UNIX 产品可以做到,那么就非常有可能您也可以用 FreeBSD 来做! FreeBSD 也极大地受益于全世界的研究中心和大学开发的数以千计的高质量的应用程序, 这些程序通常只需要很少的花费甚至免费。 商业应用程序也是可用的,并且每天都有大量的出现。
因为 FreeBSD 自身的源代码是完全公开的, 所以对于特定的应用程序或项目,可以对系统进行最大限度的定制。 这对于大多数主流的商业生产商的操作系统来说几乎是不可能的。 以下是当前人们应用 FreeBSD 的某些程序的例子:
Internet 服务:FreeBSD 内建的强大的 TCP/IP 网络使它得以成为各种 Internet 服务的理想平台,比如:
FTP 服务器
World Wide Web 服务器(标准的或者安全的 [SSL])
防火墙和 NAT(“IP 伪装”) 网关
电子邮件服务器
USENET 新闻组和电子布告栏系统
还有许多...
使用 FreeBSD,您可以容易的从便宜的 386 类 PC 起步,并随着您的企业成长,一路升级到带有 RAID 存储的四路 Xeon 服务器。
教育:您是一名计算机科学或者相关工程领域的学生吗? 学习操作系统,计算机体系结构和网络没有比在 FreeBSD 可提供的体验下动手实践更好的办法了。许多可自由使用的 CAD、数学和图形设计包也使它对于那些主要兴趣是在计算机上完成其他工作的人非常有帮助。
研究:有完整的系统源代码, FreeBSD 对于操作系统研究以及其他计算机科学分支都是一个极好的平台。 FreeBSD 可自由获得的本性, 同样可以使处在不同地方的开发团队在开放的论坛上讨论问题、 交流想法与合作开发成为可能, 且不必担心特别的版权协定或者限制。
网络:需要一个新的路由器? 一台域名服务器 (DNS)? 一个隔离您的内部网络的防火墙? FreeBSD 可以容易的把丢弃在角落不用的 386 或者 486 PC 变成一台完善的带包过滤能力的高级路由器。
X Window 工作站: FreeBSD 是廉价 X 终端的一种绝佳解决方案, 您可以选择使用免费的 X11 服务器, 或由 Xi Graphics 提供的非常优秀的商业服务器。 与 X 终端不同,如果需要的话 FreeBSD 能够在本地直接运行程序, 因而减少了中央服务器的负担。 FreeBSD 甚至能够在 “无盘” 环境下启动, 这使得终端更为便宜和易于管理。
软件开发: 基本的 FreeBSD 系统带有包括著名的 GNU C/C++ 编译器和调试工具在内的一整套开发工具。
FreeBSD 可以通过 CDROM、DVD, 以及匿名 FTP 以源代码和二进制方式获得。请查看附录 A 了解获取 FreeBSD 的更多细节。
下面的章节提供了项目的一些背景信息, 包括简要的历史、项目目标、以及项目开发模式。
FreeBSD 项目起源于 1993 年早期, 部分作为 “Unofficial 386BSD Patchkit” 的副产物,patchkit 的最后 3 个协调维护人是:Nate Williams,Rod Grimes 和我。
我们最初的目标是做出一份 386BSD 的测试版以修正一些 Patchkit 机制无法解决的错误(bug)。 很多人可能还记得早期的项目名称叫做 “386BSD 0.5” 或者 “386BSD Interim” 就是这个原因。
386BSD 是 Bill Jolitz 的操作系统, 一直到忍受了激烈的将近一年的忽视。 由于 Patchkit 的急剧膨胀, 使得很难每天都能够消化吸收, 我们一致同意应该做些事情并决定通过提供这个临时的 “cleanup” 版本来帮助 Bill。 然而,Bill 却在事先没有指出这个项目应该如何开展下去的情况下, 突然决定退出这个项目,最终这个计划只好被迫停止。
没过多久,我们认为在没有 Bill 的支持下,项目仍有保留的价值, 因此,我们采用了 David Greenman 的意见,给其命名为 “FreeBSD”。在和当时的几个用户商量后, 我们提出了最初的目标, 而这件事明朗化后, 这个项目就走上了正轨,甚至可能成为现实。 为了增加 FreeBSD 的发行渠道,我抱着试试看的心态, 联系了光盘商 Walnut Creek CDROM, 以便那些上网不方便的用户得到 FreeBSD。 Walnut Creek CDROM 不仅支持发行 FreeBSD 光盘版的想法, 还为这个计划提供了所需的计算机和高速网络接入。 在那时,没有 Walnut Creek CDROM 对一个完全未知的项目的空前信任, FreeBSD 不太可能像它今天这样,影响如此深远,发展如此快速。
第一个 CDROM (以及在整个互连网范围内发行的) 发行版本是 FreeBSD 1.0,于 1993 年 10 月发布。这个版本基于 U.C. Berkeley 的 4.3BSD-Lite(“Net/2”)磁带, 也有许多组件是 386BSD 和自由软件基金会提供的。 对于第一次发行,这算是相当成功了。 在 1994 年 5 月,我们发布了更加成功的 FreeBSD 1.1 版。
然而此后不久,发生了一些意外的情况。 Novell 和 U.C. Berkeley 决定就 Berkeley Net/2 磁带的归属权问题打的那场马拉松式的官司达成和解。 判决的结果是, U.C. Berkeley 承认 Net/2 很大一部分代码是“侵占来的” 且这些代码归 Novell 公司所拥有。这些代码是 Novell 不久前从 AT&T 买来的。 Berkeley 得到了来自 Novell 的 “祝福”: 4.4BSD-Lite 发行后,将不认为是侵权, 且要求现存的 Net/2 的用户更换新版。 这也包括 FreeBSD,我们的项目被要求在 1994 年 6 月底停止发行基于 Net/2 的产品。在此协议允许的时间内, 本项目被允许发行最后一版,也就是 FreeBSD 1.1.5.1。
于是 FreeBSD 开始艰苦的从全新的而且不完整的 4.4BSD-Lite 中重新整合自己。“Lite” 版本是不完整的, 因为 Berkeley 的 CSRG 已经删除了大量的构建可启动运行的系统所需要的代码 (因为各种各样的版权问题),事实上 4.4 的 Intel port 是非常不完整的。 直到 1994 年 11 月项目才完成这个转换,这个时候才把 FreeBSD 2.0 通过网络和 CDROM(在 12 月)发布出来。 尽管系统很多地方还很粗糙,这个版本还是取得了重大的成功, 接下来在 1995 年 6 月发布了更强大和容易安装的 FreeBSD 2.0.5 版本。
我们于 1996 年 8 月发布了 FreeBSD 2.1.5 版本, 它在 ISP 和商业团体中非常流行。 随后, 2.1-STABLE 分支的另一个版本应运而生,它就是 FreeBSD 2.1.7.1,在 1997 年 2 月发布并停止了 2.1-STABLE 的主流开发。现在,它处于维护状态, 仅仅提供安全性的增强和其他严重的错误修补的维护(RELENG_2_1_0)。
FreeBSD 2.2 版作为 RELENG_2_2 分支,于 1996 年 11 月从开发主线 (“-CURRENT”)分出来。 它的第一个完整版(2.2.1)于 1997 年 4 月发布出来。 97 年夏秋之间,顺着 2.2 分支的更进一步的版本在开发。 其最后一版(2.2.8)于 1998 年 11 月发布出来。 第一个官方的 3.0 版本出现在 1998 年 10 月, 意味着 2.2 分支结束的开始。
1999 年 1 月 20 日又出现了新的分支,就是 4.0-CURRENT 和 3.X-STABLE 分支。从 3.X-STABLE 起,3.1 在 1999 年 2 月 15 日发行,3.2 在1999 年 5 月 15 日,3.3 在 1999 年 9 月 16 日,3.4 在 1999 年 12 月 20 日,3.5 在 2000 年 6 月 24 日,接下来几天后发布了很少的修补升级至 3.5.1,加入了对 Kerberos 安全性方面的修补。 这是 3.X 分支最后一个发行版本。
随后在 March 13, 2000 出现了一个新的分支, 也就是 4.X-STABLE。 这之后发布了许多的发行版本: 4.0-RELEASE 于 2000 年 3月发布, 而最后的 4.11-RELEASE 则在 Jan 2005 发布。
期待已久的 5.0-RELEASE 于 2003 年 1 月 19 日正式发布。 这是将近三年的开发的巅峰之作, 同时也标志了 FreeBSD 在先进的多处理器和应用程序线程支持的巨大成就, 并引入了对于 UltraSPARC 和 ia64 平台的支持。 之后于 2003 年 6 月发布了 5.1。 最后一个 -CURRENT 分支的 5.X 版本是 5.2.1-RELEASE, 它在 2004 年 2 月正式发布。
RELENG_5 于 2004 年 8 月正式创建, 其后是 5.3-RELEASE, 它是 5-STABLE 分支的标志性发行版。
目前, 中长期的开发项目继续在 6.X-CURRENT (trunk) 分支中进行, 而 6.X 的 CDROM (当然, 也包括网络) 快照版本可以在 快照服务器 找到。
FreeBSD 项目的目标是无附加条件地提供能够用于任何目的的软件。 我们中的许多人对代码 (以及项目本身) 都有非常大的投入, 因此当然不介意偶尔有一些资金上的补偿, 但我们并没打算坚决地要求得到这类资助。 我们认为我们的首要 “使命” 是为任何人提供代码, 不管他们打算用这些代码做什么, 因为这样代码将能够被更广泛地使用, 从而最大限度地发挥其价值。 我认为这是自由软件最基本的, 同时也是为我们所倡导的一个目标。
我们源代码树中, 以 GNU 公共许可证 (GPL) 或者 GNU 函数库公共许可证 (LGPL) 发布的那些代码带有少许的附加限制, 还好只是强制性的要求开放代码而不是别的。 由于使用 GPL 的软件在商业用途上会增加若干复杂性, 因此,如果可以选择的话, 我们更偏好使用限制相对更宽松的 BSD 版权来发布软件。
FreeBSD 的开发是一个非常开放且有有伸缩性的过程, 就像从我们的 贡献者列表里看到的,它是完全由来自全世界的数以百计的贡献者发展起来的。 FreeBSD 的开发基础结构允许数以百计的开发者通过互联网协同工作。 我们也经常关注着那些对我们的计划感兴趣的新开发者和新的创意, 那些有兴趣更进一步参与项目的人只需要在 FreeBSD 技术讨论邮件列表 联系我们。 FreeBSD 公告邮件列表 对那些希望了解我们工作所涉及到哪些领域的人也是有用的。
无论是独立地工作或者封闭式的团队工作, 了解FreeBSD计划和它的开发过程都是有益的:
FreeBSD 的中央源代码树是由 CVS (并行版本控制系统)来维护的。CVS 是一个与 FreeBSD 捆绑的可自由获得的源代码控制工具。 主 CVS 代码库放置在美国加利福尼亚州圣克拉拉的一台机器上, 它被复制到全世界的大量镜像站上。CVS 中包括了 -CURRENT 和 -STABLE 树, 它同样可以很容易地复制到您的机器上。 请查阅 同步您的源代码树这一章节来了解更多信息。
committer 是那些对 CVS 树有写权限的人, 他们被授权修改 FreeBSD 的源代码 (术语 “committer” 来自于 cvs(1) 的 commit 命令,这个命令用来把新的修改提交给 CVS 代码库)。提交修正的最好方法是使用 send-pr(1) 命令。如果您发现在系统中出现了一些问题的话, 您也可以通过邮件将它们发送至 FreeBSD committer 的邮件列表。
如果把 FreeBSD 项目看作一个公司,那么 FreeBSD 核心团队就相当于董事会。 核心团队的主要任务是提出总体上的发展计划,然后确定一个正确的方向。 邀请那些富有献身精神和可靠的开发者加入到 committer 队伍中来也是核心团队的工作之一, 这些新的成员将作为新核心团队成员和其他人一起继续前进。 当前的核心团队是 2004 年 7 月从 committer 中选举产生的。选举每两年一次。
一些核心团队的成员还负责特定的责任范围, 也就是说他们必须尽力确保某个子系统能工作正常。 FreeBSD 开发者的完整列表和他们的责任范围,请参见 贡献者列表
Note: 核心团队的大部分成员加入 FreeBSD 开发的时候都是志愿的, 并没有从项目中获得任何财政上的资助, 所以“承诺”不应该被理解为“支持保证”。 前面所述“董事会”的类推并不十分准确, 或许更好的说法是,他们是一群愿意放弃他们的生活, 投身于 FreeBSD 项目而非选择其个人更好的生活的人!
事实上,最大的开发团队正是为我们提供反馈和错误修补的用户自己。 FreeBSD 的非集中式的开发者保持联系的主要方式就是预订 FreeBSD 技术讨论邮件列表,很多事情在那里讨论。查看附录 C了解众多 FreeBSD 邮件列表的更多信息。
FreeBSD 贡献者列表 很长并在不断增长, 为什么不加入它来为 FreeBSD 做贡献呢?
提供代码不是为这个计划做贡献的唯一方式; 有一个更完整的需要做的事情的列表,可以参见 FreeBSD 项目网站。
总的来说,我们的开发模式好像是一组没有拘束的同心圆。 这种集中式的开发模式,主要是考虑到用户的方便, 同时让他们能很容易地维护同一份软件, 而不会把潜在的贡献者排除在外! 我们的目标是提供一个包含有大量具有一致性 应用程序的稳定的操作系统, 以利于用户的安装和使用,-- 这种模式在完成目标的过程中工作得非常有效。
我们对于那些想要加入,成为FreeBSD开发者的期待是: 具有如同当前其他人一样的投入,来确保持续的成功!
FreeBSD 是一个免费使用且带有完整源代码的基于 4.4BSD-Lite 的系统, 它广泛运行于 Intel i386™、i486™、Pentium®、 Pentium Pro、 Celeron®、 Pentium II、 Pentium III、 Pentium 4(或者兼容系统)、 Xeon™、DEC Alpha 和 Sun UltraSPARC 的计算机系统上。 它主要以 加州大学伯克利分校 的 CSRG 研究小组的软件为基础,并加入了 NetBSD、OpenBSD、386BSD 以及来自 自由软件基金会 的一些东西。
自从 94 年末我们的 FreeBSD 2.0 发行以来, FreeBSD 的性能,可定制性,稳定性都有了令人注目的提高。 最大的变化是通过 整合虚拟内存/文件系统 中的高速缓存改进的虚拟内存系统, 它不仅提升了性能,而且减少了 FreeBSD 对内存的需要, 使得 5 MB 内存成为可接受的最小配置。 其他的改进包括完整的 NIS 客户端和服务器端的支持, 事务式 TCP 协议支持,按需拨号的 PPP,集成的 DHCP 支持,改进的 SCSI 子系统, ISDN 的支持,ATM,FDDI,快速 Gigabit 以太网(1000 Mbit)支持, 提升了最新的 Adaptec 控制器的支持和修补了很多的错误。
除了最基本的系统软件,FreeBSD 还提供了一个拥有成千上万广受欢迎的程序组成的软件的 Ports Collection。 到本书付印时,已有超过 12,300 个 ports (ports 包括从 http(WWW) 服务器到游戏、程序设计语言、编辑器以及您能想到的几乎所有的东西)。 完整的 Ports Collection 大约需要 400 MB 的存储空间。所有的只提供对原始代码的 “修正”。这使得我们能够容易地更新软件, 而且减少了老旧的 1.0 Ports Collection 对硬盘空间的浪费。 要编译一个 port,您只要切换到您想要安装的程序的目录, 输入 make install,然后让系统去做剩下的事情。 您要编译的每一个程序完整的原始代码可以从 CDROM 或本地 FTP 获得,所以您只需要编译您想要软件的足够的磁盘空间。 几乎大多数的软件都提供了事先编译好的 “package” 以方便安装,对于那些不希望从源代码编译他们自己的 ports 的人只要使用一个简单的命令 (pkg_add)就可以安装。 有关 package 和 ports 的更多信息可以在第 4 章中找到。
您可以在最近的 FreeBSD 主机的 /usr/share/doc 目录下找到许多有用的文件来帮助您安装及使用 FreeBSD。 您也可以用一个 HTML 浏览器来查阅本地安装的手册, 使用下面的 URL:
您也可以查看在 http://www.FreeBSD.org/ 的主站上的副本。
FreeBSD 提供了一个以文字为主,简单好用的安装程序,叫做 sysinstall 。这是 FreeBSD 默认使用的安装程序; 厂商如果想,也可以提供适合自己需要的安装程序。本章说明如何使用 sysinstall 来安装 FreeBSD。
学习完本章之后,您将会知道:
如何制作 FreeBSD 安装磁盘
FreeBSD如何参照及分割您的硬盘
如何启动 sysinstall.
在执行 sysinstall 时您将要回答的问题、 问题代表什么意义,以及该如何回答它们。
在阅读本章之前,您应该:
阅读您要安装的 FreeBSD 版本所附的硬件支持列表以确定您的硬件有没有被支持。
Note: 一般来说,此安装说明是针对 i386 (“PC 兼容机”) 体系结构的电脑。 如果有其它体系结构(如Alpha)的安装说明,我们将一并列出。 虽然本文档经常保持更新,但有可能与您安装版本上所带的说明文档有些许出入。 在这里建议您使用本说明文章作为一般性的安装指导参考手册。
在安装 FreeBSD 之前,您应该试着将您电脑中的硬件清单列出来。FreeBSD 安装程序会将这些硬件(磁盘、网卡、光驱等等)以及型号及制造厂商列出来。 FreeBSD 也会尝试为这些设备找出最适当的 IRQ 及 IO 端口的设定。但是因为 PC 的硬件种类实在太过复杂,这个步骤不一定总是能成功。 这时,您就可能需要手动更改有问题的设备的设定值。
如果您已经安装了其它的操作系统,如 Windows 或 Linux,那么您可以先由 这些系统所提供的工具来查看您的设备设定值是怎么分配的。如果您真的没办法 确定某些接口卡用什么设定值,那么您可以检查看看,说不定它的设定已经标示 在卡上。常用的 IRQ 号号码为 3、5 以及 7;IO 端口的值通常以 16 进制位表示,例如 Ox330。
我们建议您在安装 FreeBSD 之前把这些信息打印或记录下来,做成表格 的样子也许会比较有帮助,例如:
如果您的电脑上面存有重要的数据资料,那么在安装 FreeBSD 前请确定 您已经将这些资料备份了,并且先测试这些备份文档是否有问题。FreeBSD 安装程序在要写入任何资料到您的硬盘前都会先提醒您确认,一旦您确定要 写入,那么以后就没有反悔的机会。
如果您想让 FreeBSD 使用整个硬盘,那么请直接跳到下一节。
但是,如果您想让 FreeBSD 跟您已有的系统并存,那么您必须对您数据 存在硬盘的分布方式有深入的了解以及其所造成的影响。
一个 PC 硬盘可以被细分为许多分散的区域。这些区域叫做 分区(partitions)。 由于设计的原因,每个硬盘仅 支持四个分区;这些分区叫做主分区(Primary partion)。 为了突破这个限制以便能使用更多的分区,就有了新的分区类型,叫做 扩展分区(Extended partition)。一个硬盘可以拥有一个扩展分区。在 扩展分区里可以建立许多个所谓的逻辑分区(Logical partitions)。
每个分区都有其独立的分区号(partition ID), 用以区分每个分区的数据类型。FreeBSD 分区的分区号为 165。
一般而言,每种操作系统都会有自己独特的方式来区别分区。例如 DOS 及其 之后的 Windows, 会分配给每个主分区及逻辑分区一个 驱动器字符, 从 C: 开始。
FreeBSD 必须安装在主分区。 FreeBSD 可以在这个分区上面存放系统数据 或是您建立的任何文件。然而,如果您有多个硬盘,您也可以在这些硬盘上(全部 或部分)建立 FreeBSD 分区。在您安装 FreeBSD 的时候,必须要有一个分区可以给 FreeBSD 使用。这个分区可以是尚未规划的分区或是已经划好,但是里面的数据 您都不想保存的分区。
如果您已经用完了您硬盘上的所有分区,那么您必须使用其它操作系统所 提供的工具(如 DOS 或 Windows 下的 fdisk)来腾出一个分区 给 FreeBSD 使用。
如果您的某个分区有多余的空间,您可以使用它。但是使用前您需要先整理 一下这些分区。
FreeBSD 最小安装需要约 100 MB 的空间,但是这仅是 非常 基本的安装,几乎没有剩下多少空间可以建立您自己的文件。一个较理想的最小安装是 250 MB,不含图形界面;或是 350 MB 以上,包含图形界面。如果您还需要安装 其它的第三方厂商的套件,那么将需要更多的硬盘空间。
您可以使用商业软件,例如 PartitionMagic®(硬盘分区魔术师) 来建立给 FreeBSD 使用的空间。FreeBSD 光盘的 tools 目录包含两个免费的工具也可以完成这个工作:FIPS 以及 PResizer,它们的文档可以在同一目录中找到。FIPS、 PResizer,和 PartitionMagic 能够改变 FAT16 以及 FAT32 分区大小-- 在 MS-DOS 方式下使用以及 Windows ME。这些工具的说明文件可以在同一个目录下面找到 PartitionMagic 是知道的唯一能改变 NTFS 分区大小的应用软件。
Warning不当的使用这些工具可能会删掉您硬盘上的数据资料!在使用这些工具前 确定您有最近的、没问题的备份数据。
在 Alpha 上,您必须使用一整颗硬盘给 FreeBSD,没有办法在同一个硬盘上跟 其它操作系统共存。根据不同的 Alpha 机器,您的硬盘可以是 SCSI 或 IDE 硬盘,只要 您的机器可以从这些硬盘开机就可以。
按照 Digital/Compaq 使用手册书写的惯例,所有 SRM 输入的部分都用大写 表示。注意,SRM 大小写有别。
要想得知您硬盘的名称以及型号,可以在 SRM console 提示符下使用 SHOW DEVICE 命令:
>>>SHOW DEVICE dka0.0.0.4.0 DKA0 TOSHIBA CD-ROM XM-57 3476 dkc0.0.0.1009.0 DKC0 RZ1BB-BS 0658 dkc100.1.0.1009.0 DKC100 SEAGATE ST34501W 0015 dva0.0.0.0.1 DVA0 ewa0.0.0.3.0 EWA0 00-00-F8-75-6D-01 pkc0.7.0.1009.0 PKC0 SCSI Bus ID 7 5.27 pqa0.0.0.4.0 PQA0 PCI EIDE pqb0.0.1.4.0 PQB0 PCI EIDE
此范例使用 Digital Personal Workstation 433au 并且显示出此机器联接 有三个硬盘。第一个是 CDROM,叫做 DKA0;另外两个 是两个硬盘,分别叫做 DKC0 及 DKC100 。
硬盘名称中有 DKx 字样的是 SCSI 硬盘。例如 DKA100 表示是一个 SCSI 设备,其 SCSI ID 为 1,位于 第一个 SCSI 接口 (A)。 DKC300 表示一个 SCSI 硬盘, SCSI ID 为 3,位于第三个 SCSI 接口 (C)。设备名称 PKx 表示 SCSI 控制卡。由以上 SHOW DEVICE 指令的输出结果看来, SCSI 光盘也被视为是 SCSI 硬盘的一种。
IDE 硬盘的名称类似 DQx,而 PQx 则表示相对应的硬盘控制器。
如果您想通过网络(FTP 或是 NFS)安装 FreeBSD,那么您就必须知道您的网络配置 信息。在安装 FreeBSD 的过程中将会提示您输入这些资料,以顺利完成安装过程。
如果您通过局域网或是要通过网卡使用电缆/DSL 上网,那么您必须准备下面 的信息:
IP 地址。
默认网关 IP 地址。
主机名称。
DNS 服务器的 IP 地址。
子网掩码。
如果您不知道这些信息,您可以询问系统管理员或是您的网络服务提供者。 他们可能会说这些信息会由 DHCP 自动分配;如果这样的话, 请记住这一点就可以了。
如果您由 ISP 提供的拨号服务上网,您仍然可以通过它安装 FreeBSD, 只是会需要很长的时间。
您必须知道:
拨号到 ISP 的电话号码。
您的 modem 是连接到哪个 COM 端口。
您拨号到 ISP 所用的账号和密码。
虽然我们尽力确保每个 FreeBSD 发行版本的稳定性,但偶尔也会有一些错误进入发行版。 极少数情况下,这些问题甚至可能会影响安装。 当发现和修正问题之后,它们会列在 FreeBSD 网站中的 FreeBSD 发行勘误 中。 在您安装之前,应该首先看一看这份勘误表,以了解可能存在的问题。
虽然我们尽力使得每个 FreeBSD 释出版本都很稳定,但是过程中仍然不免有时 会发现错误。在很罕见的情形下,这些错误会影响到安装过程。当我们发现这些 错误并且修正后,会将它们列在 FreeBSD 网站的 FreeBSD Errata(勘误表)中, 在您安装FreeBSD前应该 先看看勘误表中有没有什么问题会影响到您的安装。
关于所有释出版本的信息,包括勘误表,可以在 FreeBSD 网站的发行版信息 一节中找到。
FreeBSD 可以通过下面任何一种安装介质进行安装:
安装介质
CDROM 或 DVD
在同一计算机上的 DOS 分区
SCSI 或 QIC 磁带
软盘
网络
通过防火墙的一个 FTP 站点,或使用 HTTP 代理。
NFS 服务器
一个指定的并行或串行接口
如果您购买了 FreeBSD 的 CD 或 DVD,那么您可以直接进入下一节 第 2.2.7 节。
如果您还没有 FreeBSD 的安装文件,您应该回到 第 2.13 节 一节, 它介绍了如何准备所需要的安装介质。之后,您就可以回到这一节, 并从 第 2.2.7 节 继续。
FreeBSD 的安装过程开始于将您的电脑开机进入 FreeBSD 安装环境---并非在 其它的操作系统上运行一个程序。计算机通常使用安装在硬盘上的操作系统进行 引导,也可以配置成使用一张“bootable(可引导)”的软盘进行启动。 大多数现代计算机都可以从光驱进行引导系统。
Tip: 如果您有 FreeBSD 的安装光盘或 DVD(或者是您购买的,或者是您自己准备的。) 并且您的计算机可以从光驱进行启动 (通常在 BIOS 中会有 “Boot Order” 或类似的选项可以设置),那么您就可以跳过此小节。因为 FreeBSD 光盘及 DVD 光盘都是可 以引导的,用它们开机您不用做什么特别的准备。
一般来说,要建立安装盘(软盘)请依照下列步骤:
获取开机软盘映像文件
开机软盘映像文件可以在您的安装介质的 floppies/ 目录下找到, 另外您也可以从下述网站的 floppies 目录下载: ftp://ftp.FreeBSD.org/pub/FreeBSD/releases/<arch>/<version>-RELEASE/floppies/. 将 <arch> 和 <version> 替换为您使用的计算机体系结构和希望安装的版本号。 例如,用于安装 i386 上的 FreeBSD 5.4-RELEASE 的文件的地址, 应该是 ftp://ftp.FreeBSD.org/pub/FreeBSD/releases/i386/5.4-RELEASE/floppies/。
软盘映像文件的扩展名是 .flp。 在 floppies/ 目录中包括了许多不同的影响文件, 随您安装的 FreeBSD 版本, 某些时候也随硬件的不同, 您需要使用的映像文件可能会有所不同。 如果您正在安装的是 FreeBSD 4.X 则通常只需要两张软盘的映像, 即 kern.flp 和 mfsroot.flp。 如果您正在安装的是 FreeBSD 5.X 则您通常会需要三张软盘, 即 boot.flp、 kern1.flp, 以及 kern2.flp。 请查阅同一目录下的 README.TXT 文件以了解关于这些映像文件的最新信息。
Note: 在安装 FreeBSD 5.3 之前的 5.X 系统时, 某些设备可能会需要另一张软盘来加载它们的驱动。 这些驱动在 drivers.flp 映像中提供。
Important: 您的 FTP 程序必须使用 二进制模式 来下载这些映 像文件。有些浏览器只会用text (或ASCII ) 模式来传输数据,用这些浏览器下载的映像文件做成的软盘可 能无法正常开机。
准备软盘
您必须为您下载的每一个映像文件准备一张软盘。并且请避免使用到坏掉的 软盘。最简单的方式就是您先将这些软盘格式化,不要相信所谓的已格式化的软 盘。在 Windows 下的格式化程序不会告诉您出现多少坏块,它只是简单的标记它 们为 “bad” 并且忽略它们。根据建议您应该使用全新的软盘来存放 安装程序。
Important: 如果您在安装 FreeBSD 的过程中造成当机、冻结或是其它怪异现象,第一个 要怀疑的就是引导软盘。请用其它的软盘制作映像文件再试试看。
将映像文件写入软盘中
.flp 文件 并非 一般的文件, 您不能直接将它们复制到软盘上。事实上它是一张包含完整磁盘内容的映像文件。这 表示您 不能 简单的使用 DOS 的 copy 命令将文件写到软盘上, 而必须使用特别的工具程序将映像文件直接写到软盘中。
如果您使用 MS-DOS 或 Windows 操作系统来制作引导盘,那么您可以使用我们提供 的 fdimage 程序来将映像文件写到软盘中。
如果您使用的是光盘,假设光盘的驱动器符号为 E:, 那么请执行下面的命令:
E:\> tools\fdimage floppies\kern.flp A:
重复上述命令以完成每个 .flp 文件的写入,每换一个 映像文件都必须更换软盘;制作好的软盘请注明是使用哪个映像文件做的。如果您的映 像文件存放在不同的地方,请自行修改上面的指令指向您存放 .flp 文件的地方。要是您没有 FreeBSD 光盘,您可以到 FreeBSD 的 FTP 站点tools 目录 中下载。
如果您在 UNIX 系统上制作软盘(例如其它 FreeBSD 机器),您可以使用 dd(1) 命令来将映像文件写到软盘中。如果您用 FreeBSD,可以执行下面的命令:
# dd if=kern.flp of=/dev/fd0
在 FreeBSD 中,/dev/fd0 指的是第一个软驱(即 A: 驱动器);/dev/fd1 是 B: 驱动器,依此类推。其它的 UNIX 系统可能会用 不同的的名称,这时您就要查阅该系统的说明文件。
您现在可以安装 FreeBSD 了
Important: 默认情况下, 安装过程并不会改变任何您硬盘中的数据,除非您看到 下面的讯息:
Last Chance: Are you SURE you want continue the installation? If you're running this on a disk with data you wish to save then WE STRONGLY ENCOURAGE YOU TO MAKE PROPER BACKUPS before proceeding! We can take no responsibility for lost disk contents!在看到这最后的警告讯息前您都可以随时离开安装程序面不会变更您的硬盘。 如果您发现有任何设定错误,这时您可以直接将电源关掉而不会造成任何伤害。
从电脑尚未开机开始说起
将电脑电源打开。刚开始的时候它应该会显示进入系统设置菜单或 BIOS 要按哪个键,常见的是 F2、F10、 Del 或 Alt+S。不论是要按哪个键,请按它进入 BIOS 设置画面。有时您的计算机 可能会显示一个图形画面,典型的做法是按 Esc 将关掉这个图形 画面,以使您能够看到必要的设置信息。
找到设置开机顺序的选项,它的标记为 “Boot Order” 通常会列出一些设备让您选择,例如:Floppy、 CDROM、First Hard Disk 等等。
如果您要用软盘安装,请确定选到 floppy disk;如果您要用光盘安装, 请选择 CDROM。为了避免疑惑,请参考您的主板说明手册。
储存设定并离开,系统应该会重新启动。
如果您用软盘安装,请将在 第 2.2.7 节 一节中制作好的第一张引导盘,里面包含kern.flp 文件的那张盘,放入软盘驱动器中。
如果您是从光盘安装,那么开机后请将 FreeBSD 光盘放入光驱中。
如果您开机后如往常一样并没有从软盘或光盘引导,请检查:
是不是软盘或光盘太晚放入面错失开机引导时间。如果是,请将它们 放入后重新开机。
BIOS 设定不对,请重新检查 BIOS 的设定。
您的 BIOS 不支持从这些安装介质引导。
FreeBSD 即将启动。如果您是从光盘引导,您会见到类似下面的画面:
Verifying DMI Pool Data ........ Boot from ATAPI CD-ROM : 1. FD 2.88MB System Type-(00) Uncompressing ... done BTX loader 1.00 BTX version is 1.01 Console: internal video/keyboard BIOS drive A: is disk0 BIOS drive B: is disk1 BIOS drive C: is disk2 BIOS drive D: is disk3 BIOS 639kB/261120kB available memory FreeBSD/i386 bootstrap loader, Revision 0.8 /kernel text=0x277391 data=0x3268c+0x332a8 | | Hit [Enter] to boot immediately, or any other key for command prompt. Booting [kernel] in 9 seconds... _
如果您是从软盘引导,会看到类似下面的画画:
Verifying DMI Pool Data ........ BTX loader 1.00 BTX version is 1.01 Console: internal video/keyboard BIOS drive A: is disk0 BIOS drive C: is disk1 BIOS 639kB/261120kB available memory FreeBSD/i386 bootstrap loader, Revision 0.8 /kernel text=0x277391 data=0x3268c+0x332a8 | Please insert MFS root floppy and press enter:
请根据提示将 kern.flp 软盘取出, 并插入 mfsroot.flp 这张盘, 然后按 Enter。 FreeBSD 5.3 和更高版本提供了另外一组软盘, 在 前一节 中已经介绍过了。 您只需从第一张软盘启动, 然后再需要时根据提示插入其他软盘。
不论是从软盘或光盘引导,您都会看到下面这段信息:
Hit [Enter] to boot immediately, or any other key for command prompt. Booting [kernel] in 9 seconds... _
您可以等待十秒, 或按 Enter (对于 FreeBSD 4.X 则接下来将是进入内核配置菜单)。
从电脑尚未打开电源开始。
找开电脑电源并等待屏幕上出现开机提示信息。
如您需要准备安装软盘,请参考第 2.2.7 节 。 将用 kern.flp 做的引导盘放入软驱中然后输入下列命令 (请视实际情况修改命令中的软驱盘符):
>>>BOOT DVA0 -FLAGS '' -FILE ''
如果您要从光盘引导,请将光盘放入光驱中然后输入下列命令开始安装 (请视情况修改命令中的光驱盘符):
>>>BOOT DKA0 -FLAGS '' -FILE ''
然后 FreeBSD 就会启动。如果您从软盘引导,到某个阶段您会看到下面的信息:
Please insert MFS root floppy and press enter:
按照屏幕指示,将 kern.flp 软盘取出,换上 mfsroot.flp 然后按Enter键。
不论从软盘或光盘引导,您都会看到下面这段信息:
Hit [Enter] to boot immediately, or any other key for command prompt. Booting [kernel] in 9 seconds... _
您可以等待 10 秒或是按 Enter 跳过。之后就会进入内核 设定菜单。
Note: 从FreeBSD 5.0 版以后, 用户配置已经不赞成使用新的 device.hints(5) 方法,更多的信息 device.hints(5) 请访问 第 12.5 节
内核是操作系统最核心的部分。它负责很多工作, 包括存取系统上所有设备,如硬盘、网卡、声卡等等。每一个 FreeBSD 核心支持的设备都有其相对应的驱动程序。这些驱动程序的名称由两个或三个字母级成,譬如: sa 表示 SCSI 存取驱动程序;sio 表示串口 I/O 驱动程序(管理 COM 端口)。
当内核启动的时候,每个驱动程序会检查系统中是否有它所支持的设备。如果找到的话, 这些驱动程序就会配置这些设备的状态以代核心使用。
上述设备的检查我们称做 device probing(设备探测)。 但是很不幸地,这样做并不是完全安全的。因为有些硬件驱动程序没有办法想到共存, 有时找到这个设备却让另一个设备处在不稳定的状态。这是 PC 设计上的限制。
许多早期的称作 ISA 的设备--(相对于 PCI 设备而言)。ISA 设备的规格需要将硬件的某些数据写死在设备上,最具代表性的就是中断号(IRQ)以及 IO 端口号。这些设定值通常是通过改变设备上的 jumpers(跳线), 或是使用由厂商提供的 DOS 工具程序来改变。
这通常是问题的所在,因为这没办法让两个设备共同分享一个 IRQ 或是 IO 端口 地址。
新的设备都按照 PCI 规格设计,这些设备就没有上述限制;它们会参考 BIOS 中的设定然后动态分配 IRQ 及 IO 端口地址。
如果您的系统中有任何 ISA 设备,那么在设置 FreeBSD 驱动程序的时候您就 必须指定这些设备的 IRQ 及 IO 地址。这也是我们在 第 2.2.1 节一节中希望您先准备一份设备清单的用意。
仍然很不幸地,预设给某些设备使用的 IRQ 会跟内存地址互相冲突。这是因为 有些 ISA 设备出厂的设定值就会跟其它的设备冲突。撇开这个不谈,FreeBSD 驱动 程序通常都会根据各制造商设备的出厂设定值来设定,这也是为什么许多设备可 以在 FreeBSD 顺利驱动的原因。
在跑 FreeBSD 的时候根本不会有上冲突的问题,因为当两个设备互相冲突的 时候,其中一个设备将被停用(不论您用的是哪种操作系统)。
通常在第一次安装 FreeBSD 的时候才会有问题,因为内核希望尽是多包含一 些驱动程序,这样才能支持许多不同设备的配置。这意味着在找到的这些设备中 有可能设定值会互相冲突。FreeBSD 在探测系统设备的时候会按照一的顺序,如 果您的某个设备在较后面探测到,但是跟前面找到的设备设定冲突,那么在安装 FreeBSD 的时候,这个设备不一定能正确雇用。
因为如此,当您在安装 FreeBSD 前,可以先看看在系统内核中包含了哪些驱 动程序,如果您没有某些设备,则可以将它们的驱动程序删除或是在稍后您也 可以确认您有的设备的设定值有没有问题。
这听起来好像很复杂,但不全然如此。
图 2-1 显示的是内核能设置的第一个配置菜单。 我们推荐您选择Start kernel configuration in full-screen visual mode 选项, 因为这对新手来说比较容易。
内核配置画面 (图图 2-2) 被分成四个部分:
在“active(可用)”区域的展开式选择菜单分为四个群,例如 Storage(储存设备)、 Network(网络设备)。 每个设备会显示一个对应的说明、由二或三个字母组成的驱动程序名称以及驱动程序 所使用的IRQ和内存地址。另外,如果可用的驱动程序跟另一个可用的驱动程序有冲突, 它们的驱动程序名称之后会显示 CONF 字样。同时栏目标题也会 显示在可用的设备中总共有几个设备有冲突。
在 Inactive(停用)区域的驱动程序仍然保留在内核中,但当内核启动的时候 并不会探测这些设备。这个区域的分组方式跟可用区一样。
第三区(信息显示区)显示的是目前所选择设备的细节项目设置,包括 IRQ 及 IO 端口地址。
第四区告诉您这个画面的操作按键。
在这个阶段,您总是会看到有冲突的设备被列出。请不要担心,因为这是正 常的;前面提到在安装的时候所有的设备都会被启用,而其中的某些设备就会跟 其它的设备产生冲突。
现在您必须逐一检查这些设备驱动程序,然后解决冲突的问题。
解决驱动程序冲突
按下 X 键可以将所选择区域的驱动程序完全展开以方便您 检阅。您可以使用方向键在可用设备区前后移动。
图 2-3 显示按下 X 键 后的结果。
停用任何您没有的设备的驱动程序。要停用一个设备,用方向键移动将该 设备反白然后按下 Del 键,则此设备驱动程序就会被移到 Inactive Drivers(停用设备区) 列表。
如果您不小心将一个设备停用,那么请按 Tab 切换到 Inactive Drivers 区, 选择被停用的设备,然后按下 Enter 键将它移回可用设备区。
Warning请不要移除 sc0。这个驱动程序是控制屏幕 用的,除非您是通过串行线进行安装,否则请不要移除它。
Warning如果您用的是 USB 键盘才可以停用 atkbd0 用一般 的键盘请保留此 atkbd0 设备驱动程序。
如果现在显示没有冲突,那么您可以跳过这一步骤。否则,剩下的冲突还是必 须解决。如果在信息显示区没有看到 “allowed conflict(允许冲突)”, 那么您必须改变这边显示的 IRQ 及内存地址, 或 必须变更设备 上面的 IRQ 及内存地址。
要改变设备驱动程序的 IRQ 及 IO 端口地址,选择要变更的驱动程序然后 按 Enter 键。之后等光标移到第三区(信息显示区)时候您就 可以理发这些设置。您应该输入之前做硬件清单列表的时候所记录的 IRQ 及 IO 端 口地址。要完成更改请按 Q 键并回到可用设备区。
如果您不确定该设定什么值,那么可以试试看 -1。 有些 FreeBSD 驱动程序在搜寻设备的时候可以安全找出设备的正确设定值;所以这里设置 -1 就是告诉这些驱动程序自行去尝试找出合适的设置。
如果要直接在设备硬件上改变设定值,设定的方法每种设备都不大相同。有些 设备您必须将它从电脑中拆下来然后调整路线或是DIP开关;其它的可能厂商会提供 DOS 工具软盘,里面有程序可以更改这些设定。不论是哪一种方式,您都应该参考设备所附 的使用手册。很明显地,改变这些设定值必须重新开机后才会生效,所以您必须重新进 入 FreeBSD 安装程序。
当所有的冲突都解决了以后,您会看到类似图 2-4 的画面。
如您所见,可用设备列表变得干净多了,只列出您系统中有的设备。
现在您可以储存所做的改变,然后进到下一个安装步骤。按 Q 键离开设备配置界面,您会看到下面的信息:
Save these parameters before exiting? ([Y]es/[N]o/[C]ancel)
回答 Y 保存配置到内存(安装完成后将后保存到磁盘)然后开始 探测设备。在设备探测完毕后,sysinstall 就会启动并且显 示它的主界面。(图 2-5)。
前面屏幕显示的最后几百行字会存在缓冲区中以便您查阅。
要浏览缓冲区,您可以按下 Scroll Lock 键,这会开启画面的 卷动功能。然后您就可以使用方向键或 PageUp 、PageDown 键来上下翻阅。再按一次 Scroll Lock 键将停止画面卷动。
在您浏览的时候会看到类似 图 2-6的画面。 真正的结果依照您的电脑装置而有所不同。
Figure 2-6. 典型的设备探测结果
avail memory = 253050880 (247120K bytes) Preloaded elf kernel "kernel" at 0xc0817000. Preloaded mfs_root "/mfsroot" at 0xc0817084. md0: Preloaded image </mfsroot> 4423680 bytes at 0xc03ddcd4 md1: Malloc disk Using $PIR table, 4 entries at 0xc00fde60 npx0: <math processor> on motherboard npx0: INT 16 interface pcib0: <Host to PCI bridge> on motherboard pci0: <PCI bus> on pcib0 pcib1:<VIA 82C598MVP (Apollo MVP3) PCI-PCI (AGP) bridge> at device 1.0 on pci0 pci1: <PCI bus> on pcib1 pci1: <Matrox MGA G200 AGP graphics accelerator> at 0.0 irq 11 isab0: <VIA 82C586 PCI-ISA bridge> at device 7.0 on pci0 isa0: <iSA bus> on isab0 atapci0: <VIA 82C586 ATA33 controller> port 0xe000-0xe00f at device 7.1 on pci0 ata0: at 0x1f0 irq 14 on atapci0 ata1: at 0x170 irq 15 on atapci0 uhci0 <VIA 83C572 USB controller> port 0xe400-0xe41f irq 10 at device 7.2 on pci 0 usb0: <VIA 83572 USB controller> on uhci0 usb0: USB revision 1.0 uhub0: VIA UHCI root hub, class 9/0, rev 1.00/1.00, addr1 uhub0: 2 ports with 2 removable, self powered pci0: <unknown card> (vendor=0x1106, dev=0x3040) at 7.3 dc0: <ADMtek AN985 10/100BaseTX> port 0xe800-0xe8ff mem 0xdb000000-0xeb0003ff ir q 11 at device 8.0 on pci0 dc0: Ethernet address: 00:04:5a:74:6b:b5 miibus0: <MII bus> on dc0 ukphy0: <Generic IEEE 802.3u media interface> on miibus0 ukphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto ed0: <NE2000 PCI Ethernet (RealTek 8029)> port 0xec00-0xec1f irq 9 at device 10. 0 on pci0 ed0 address 52:54:05:de:73:1b, type NE2000 (16 bit) isa0: too many dependant configs (8) isa0: unexpected small tag 14 orm0: <Option ROM> at iomem 0xc0000-0xc7fff on isa0 fdc0: <NEC 72065B or clone> at port 0x3f0-0x3f5,0x3f7 irq 6 drq2 on isa0 fdc0: FIFO enabled, 8 bytes threshold fd0: <1440-KB 3.5" drive> on fdc0 drive 0 atkbdc0: <Keyboard controller (i8042)> at port 0x60,0x64 on isa0 atkbd0: <AT Keyboard> flags 0x1 irq1 on atkbdc0 kbd0 at atkbd0 psm0: <PS/2 Mouse> irq 12 on atkbdc0 psm0: model Generic PS/@ mouse, device ID 0 vga0: <Generic ISA VGA> at port 0x3c0-0x3df iomem 0xa0000-0xbffff on isa0 sc0: <System console> at flags 0x100 on isa0 sc0: VGA <16 virtual consoles, flags=0x300> sio0 at port 0x3f8-0x3ff irq 4 flags 0x10 on isa0 sio0: type 16550A sio1 at port 0x2f8-0x2ff irq 3 on isa0 sio1: type 16550A ppc0: <Parallel port> at port 0x378-0x37f irq 7 on isa0 pppc0: SMC-like chipset (ECP/EPP/PS2/NIBBLE) in COMPATIBLE mode ppc0: FIFO with 16/16/15 bytes threshold plip0: <PLIP network interface> on ppbus0 ad0: 8063MB <IBM-DHEA-38451> [16383/16/63] at ata0-master UDMA33 acd0: CD-RW <LITE-ON LTR-1210B> at ata1-slave PIO4 Mounting root from ufs:/dev/md0c /stand/sysinstall running as init on vty0
仔细检查探测结果以确定 FreeBSD 找到所有您期望出现的设备。如果设备没有 探测到,那么就不会列出。如果此设备需要设定 IRQ 以及 IO 端口地址,请您再确定 是否设定的正确。
如果您需要改变某些设备的设置,您可以很容易地退出 sysinstall 程序,然后从头重新来过。这也有助您熟悉这些过程。
在主界面使用方向键选择 Exit Install 您会看到 如下的信息:
User Confirmation Requested
Are you sure you wish to exit? The system will reboot
(be sure to remove any floppies from the drives).
[ Yes ] No
如果 CDROM 还留在光驱里,而且选择了 [ Yes ], 则安装程序将重新启动。
如果您是从软盘启动,那么重新开机前您必须将 mfsroot.flp 软盘取出再换上 kern.flp 软盘。
sysinstall 是 FreeBSD 项目所提供的安装程序。 它以 console(控制台)为主,分为向个菜单及画面让您配置及控制安装过程。
sysinstall 菜单画面由方向键、Enter 、 Space、以及其它按键所控制。在主画面的 Usage 菜单 有这些按键的说明。
要查看这些说明,请将光标移到 Usage 项目,然后 [Select] 按键被选择,图 2-8, 然后按下 Enter 键。
安装画面的使用说明会显示出来,阅读完毕请按 Enter 键回到主 画面。
用方向键从主菜单选择 Doc 条目然后按 Enter键。
这将会进入说明文件菜单。
阅读这些说明文件很重要。
要阅读一篇文章,请用方向键选取要阅读的文章然后按 Enter 键。 阅读中再按一下 Enter 就会回到说明文件画面。
若要回到主菜单,用方向键选择 Exit 然后按下 Enter 键。
如果要改变键盘按键的对应方式,请在主菜单选取 Keymap 然后按 Enter 键。一般情况下不改变引项,除非您使用了非标准键盘或非 美国键盘。
您可以使用上下键移动到您想使用的键盘对应方式,然后按下 Space 键以选取它;再按 Space 键可以取消选取。当您完成后,请选择 [ OK ] 然后按 Enter 键。
这一屏幕只显示出部分列表。选择 [ Cancel ] 按 Tab 键将使用 默认的键盘对应,并返回到主菜单
选择 Options 然后按 Enter 键。
预设值通常可以适用于大部分的使用者,您并不需要改变它们。版本名称要 根据安装的版本进行变化。
目前选择项目的描述会在屏幕下方以蓝底白字显示。注意其中有一个项目是 Use Defaults(使用默认值)您可以由此项将所有的 设定还原为预设值。
可以按下 F1 来阅读各选项的说明。
按 Q 键可以回到主画面。
您的第一个工作就是要分配 FreeBSD 用的硬盘空间以便 sysinstall 先做好一些准备。为了完成这个工作,您必须先对 FreeBSD 如何找到 磁盘信息做一个了解。
当您在系统上安装配置 FreeBSD 之前,有一个重要的事情一定要注意,尤其 是当您有多个硬盘的时候。
在 pc 架构,当您跑像 MS-DOS 或 Microsoft Windows 这种跟 BIOS 相关的操作 系统的时候,BIOS 有能力改变正常的磁盘顺序,然后这些操作系统会跟着 BIOS 做改变。 这让使用者不一定非要有所谓的 “primary master” 硬盘开机。许多人发 现最简单而便宜备份系统的方式就是再去买一块一模一样的硬盘,然后定期将数据从第 一块硬盘复制到第二个硬盘,使用 Ghost® 或 XCOPY。所以,当第一个硬盘死了,或者是被病毒破坏, 或者有坏轨道,他们可以调整 BIOS 中的开机顺序而直接用第二块硬盘开机。这跟将机壳 拆开,把第二块硬盘跟第一块硬盘对调(要调jumper)有同样的效果,差别就是不用拆壳; 因此,对有这方面需求的人而言,直接在 BIOS 中设定非常方便。
比较昂贵,配有 SCSI 控制卡的系统通常可以延伸 BIOS 的功能来让 SCSI 设备(可达七个) 达到类似改变顺序的功能。
习惯于使用这种方式的使用者可能会感到惊讶,因为在 FreeBSD 中并非如此。 FreeBSD 不会参考 BIOS,而且也不知道所谓的 “BIOS 逻辑磁盘对应”。 是怎么回事。这会让人感觉很疑惑,明明就是一样的硬盘而且资料也完全从另一块 复制过来的,结果却没办法像以前那样用。
当使用 FreeBSD 以前,请将 BIOS 中的硬盘开机顺序调回正常的顺序,并且以后 不要再改变。如果您仍然需要交换硬盘,那请用硬件的方式,打开机壳,调整调线。
Note: 如果不再做改变,数据将会写进硬盘。如果您犯了一个错误想重新开始,请选择 sysinstall 安装程序的退出按钮(exit)。或按 U 键来 Undo 操作。如果您的操作没有结果,您总可以重新启动您 的计算机来达到您的目的。
当您在 sysinstall 主菜单选择使用标准安装 后,您会看到下面的信息:
Message
In the next menu, you will need to set up a DOS-style ("fdisk")
partitioning scheme for your hard disk. If you simply wish to devote
all disk space to FreeBSD (overwriting anything else that might be on
the disk(s) selected) then use the (A)ll command to select the default
partitioning scheme followed by a (Q)uit. If you wish to allocate only
free space to FreeBSD, move to a partition marked "unused" and use the
(C)reate command.
[ OK ]
[ Press enter or space ]
如屏幕指示,按 Enter 键,然后您就会看到一个列表 列出所有在探测设备的时候找到的硬盘。图 2-16 范例显示的是有找到两个 IDE 硬盘的情形,这两个硬盘分别为 ad0 和 ad2。
您可能正在奇怪,为什么 ad1 没有列出来? 为什么遗失了呢?
试想,如果您有两个 IDE 硬盘,一个是在第一个 Primary master,一个是 Secondary master,这样会发生什么事呢?如果 FreeBSD 依照找到的顺序来为他们 命名,如 ad0 和ad1 那么就不会有什么问题。
但是,现在问题来了。如果您现在想在 primary slave 加装第三个硬盘, 那么这个硬盘的名称就会是 ad1,之前的 ad1 就会变成ad2。 这会造成什么问题呢?因为设备的名称(如ad1s1a) 是用来寻找文件系统的,因此您可能会发现,突然,您有些文件系统从此无法正确 地显示出来,必须修改 FreeBSD 配置文件(译注:/etc/fstab)才可以正确显示。
为了解决这些问题,在配置内核的时候可以叫 FreeBSD 直接用 IDE 设备所 在的位置来命名,而不是要据的到的顺序。使用这种方式的话,在 secondary master 的 IDE 设备就 永远是 ad2, 即使您的系统中没有ad0 或 ad1 也不受影响。
此为 FreeBSD 内核的默认值,这也是为什么上面的画面只显示 ad0 和 ad2的原因。 画面上这台机器的两颗硬盘是装在 primary 及 secondary 的 master 上面;并没有任何一个 硬盘安装在 slave 插槽上。
您应该选择您想安装 FreeBSD 的硬盘,然后按下 [ OK ]。之后 FDisk 就会开始,您会看到类似 图 2-17的画面。
FDisk 的显示画面分为三个部分。
第一部分是画面上最上面两行,显示的是目前所选择的硬盘的信息。包含它的 FreeBSD 名称、硬盘分布以及硬盘的总容量。
第二部分显示的是目前选择的硬盘上有哪些分区,每个分区的开始及结束位置、 所占容量、FreeBSD 名称、它们的描述以及类别(sub-type)。此范例显示有两个分区、 一个大的 FAT 分区,(很可能是 MS-DOS 或 Windows 的 C: )、以及一个扩展分区(在 MS-DOS 或 Windows 里 面还可以包含逻辑分区)。
第三个部分显示 FDisk 中可用的命令。
接下来要做的事跟您要怎么给您的硬盘分区有关。
如果您要让 FreeBSD 使用整个硬盘(稍后您确认要 sysinstall 继续安装后会删除所有这个硬盘上的资料),那么您就可以按 A 键(Use Entire Disk ) 目前已有的分区都会被删除,取而代之的是一个小的,标示为 unused 的分区,以及一个大的 FreeBSD 分区。之后,请用方向键将光标移到这个 FreeBSD 分区,然后按 S 以将此分区高为开机启动分区。您会看 到类似图 2-18的画面。注意在Flags 栏目的 A 记号表示这个分区是 启动 状态, 并且会由此分区开机。
如果要删除已的分区以空出空间给 FreeBSD,您可以将光标移动到要删除 的分区后按 D 键。然后就可按 C 键,会出现 对话框请您输入要创建的分区的大小。输入合适的大小后按 Enter 键。默认情况下,这个对话框中的值为您可以给这个分区分配的可能的最大值。 它可能是最大的邻接分区或未分配的整个硬盘大小。
如果您已经建立好给 FreeBSD 的分区(使用像 PartitionMagic 类似的工具),那么您可以按下 C 键来建立一个新 的分区。同样的,会有对话框询问您要建立的分区的大小。
完成后,按 Q 键。您的变更会存在 sysinstall 中,但是还不会真正写入您的硬盘。
在这步骤您可以选择要不要安装一个多重引导管理器。一般而言,如果碰到 下列的情形,您应该选择要安装多重引导管理程序。
您有一个以上的硬盘,并且 FreeBSD 并不是安装在第一个硬盘上。
您可以在一个硬盘上,除了 FreeBSD,您还有安装其它的操作系统;然后 您想要选择在开机的时候要进入哪个系统。
如果您在这台机器上只安装一个 FreeBSD 操作系统,并且安装在第一个硬盘, 那么选择 Standard 安装就可以了。如果您已经使用 了一个第三方的多重引导程序,那么请选择 None。
选择好配置后请按 Enter。
按下 F1 键所显示的在线说明中有讨论一些操作系统共存 可能发生的问题。
如果您的系统上有一个以上的硬盘,在选择完多重引导管理程序后会再回到 选择硬盘的画面。如果您要将 FreeBSD 安装在多个硬盘上,那么您可以在这里选择 其它的硬盘,然后重复使用 FDisk 来建立分区。
Important: 如果您想让 FreeBSD 来管理其它的硬盘,那么两个硬盘都必须安装 FreeBSD 的多重引导管理程序。
Tab 键可以在您最后选择的硬盘、 [ OK ] 以及 [ Cancel ] 之间进行切换。
用 Tab 键将光标移动到 [ OK ]然后按 Enter 键继续安装过程。
您现在必须在刚刚建立好的分区中规划一些分区。请记住,每个分区代号是 a 到 h, 并且分区 partitions b, c以及 d 为习惯使用的特殊分区,不应该随意变动。
某些应用程序可以利用一些特殊的分区而达到较好的效果,尤其是分区分散 在不同的硬盘的时候。但是,现在您是第一次安装FreeBSD,所以不需要去烦恼如 何分割您的硬盘。最重要的是,装好FreeBSD然后学习如何使用它。当您对FreeBSD 有相当程序的熟悉后,您可以随时重新安装FreeBSD,然后改变您分区的方式。
下面的范例中有四个分区--一个是磁盘交换分区,别外三个是文件系统。
Table 2-2. 为第一个硬盘分区
| 分区 | 文件系统 | 大小 | 描述 |
|---|---|---|---|
| a | / | 100 MB | 这是一个根文件系统(root filesystem)。任何其它的文件系统都会 挂在根目录(译注:用根目录比较亲切)下面。 100 MB 对于要目录来说 是合理的大小,因为您往后并不会在这里存放太多的数据;在安装FreeBSD后会 用掉约 40 MB 的根目录空间。剩下的空间是用来存放临时文件用的,同时, 您也应该预留一些空间,因为以后的FreeBSD版本可能会需要较多的 /(根目录)空间。 |
| b | N/A | 2-3 x RAM |
此分区为系统磁盘交换分区(swap space)。选择正确的交换空间 大小可是一门学问唷。一般来说,交换空间的大小应该是您系统上内存(RAM) 大小的2到3倍。交换空间至少要有 64 MB 因此,如果您的电脑上的RAM比 32 MB 小,请将交换空间大小设为 64 MB。 如果您有一个以上的硬盘,您可以在每个硬盘上都配置交换分区。FreeBSD会利用 第个硬盘上的交换空间,swap速度会比较快。如果是这种情形,先算出您总共需 要的交换空间大小(如128 MB),然后除以您拥有的硬盘数目(如2块),算 出的结果就是每个硬盘上要配置的交换空间的大小。在这个例子中,第个硬盘的交 换空间为 64 MB |
| e | /var | 50 MB | /var 目录会存放不同长度的文件、日志以及 其它管理用途的文件。大部分这些文件都是FreeBSD每天在运行的时候会读取或 是写入的。当这些文件放在另外的文件系统(译注:即/var)可以避免影响到 其它目录下面类似的文件存取机制。 |
| f | /usr | 剩下的硬盘空间 | 您所有的其它的文件通常都会存在/usr 目录以及其子目录下面。 |
如果您要将FreeBSD安装在一个以上的硬盘,那么您必须在您配置的其它分区上 再建立分区。最简单的方式就是在第个硬盘上建立两个分区,一个是交换分区,一个 是文件系统分区。
Table 2-3. 为其它磁盘分区
| 分区 | 文件系统 | 大小 | 描述 |
|---|---|---|---|
| b | N/A | 见描述 | 之前提过,交换分区是可以跨硬盘的。但是,即使 a 分区没有使用,习惯上还是会把交换分区放在 b 分区上。 |
| e | /diskn | 剩下的硬盘空间 | 剩下的空间是一个在的分区,最简单的做法是将之规划为 a分区而不是e分区。然而, 习惯上a分区是保留给根目录 (/) 用的。您不一定要遵守这个习惯,但是sysinstall 会,所以照着它做会使您的安装比较清爽、干净。您可以将这些文件系统挂在任何 地方,本范例建议将它们挂在/diskn 目录,n 依据每个硬盘而有所不同,但是,您喜欢的话 也可将它们挂在别的地方。 |
分区的配置完成后,您可以用sysinstall. 来建立它们了。您会看到下面的信息:
Message
Now, you need to create BSD partitions inside of the fdisk
partition(s) just created. If you have a reasonable amount of disk
space (200MB or more) and don't have any special requirements, simply
use the (A)uto command to allocate space automatically. If you have
more specific needs or just don't care for the layout chosen by
(A)uto, press F1 for more information on manual layout.
[ OK ]
[ Press enter or space ]
按下 Enter 键开始FreeBSD分区表编辑器,称做 Disklabel。
图 2-21 显示您第一次执行 Disklabel的画面。画面分为三个区域。
前几行显示的是您正在编辑的硬盘以及您正在建立的slice位于哪个分区上。 (在这里, Disklabel 使用的是 分区名称 而不是 slice 名)。此画面也会显示slice还有 多少空间可以使用;亦即,有多余的空间,但是尚未指派分区。
画面中间区域显示已建立的区区,每个分区的文件系统名称、所占的大小以及 一些关于建立这些文件系统的参数选项。
下方的第三区显示在 Disklabel中可用的按键。
Disklabel 您可以自动配置分区以及给它们预设 的大小。您可以按 A键使用此功能。您会看到类似 图 2-22的画面。根据您硬盘的大小,自动分配所配置 的大小不一定合适。但是没有关系,您并不一定要使用预设的大小。
Note: 从 FreeBSD 4.5开始,自动配置会给/tmp 目录一个独立分区,而不是附属在 / 之下。这样可以 避免将一些临时文件放到根目录中(译注:可能会用完根目录空间)。
如果您不想使用默认的分区布局, 则需要用方向键移动光标并选中第一个分区, 然后按 D 来删除它。 重复这一过程直到删除了所有推荐的分区。
要建立第一个分区 (a, 作为 / -- 根文件系统), 请确认您已经在屏幕顶部选中了正确的 slice, 然后按 C。 接下来将出现一个对话框, 要求您输入新分区的尺寸 (如 图 2-23 所示)。 您可以输入以块为单位的尺寸, 或以 M 表示MB、 G 结尾表示GB, 或者 C 表示柱面数的方式来表达尺寸。
Note: 从 FreeBSD 5.X 开始, 用户可以: 使用 Custom Newfs (Z) 选项来选择 UFS2 (在 FreeBSD 5.1 和更高版本中的默认值)。 用 Auto Defaults 来创建, 然后用 Custom Newfs 选项, 或在创建文件系统时指定 -O 2。 如果您使用了 Custom Newfs选项, 不要忘记增加 -U 来启用 SoftUpdates!
显示在对话框中的默认大小是使用整个分区,您可以用 Backspace键删除这些数字然后按照上述方式输入您想要的 大小,如64M(图 2-24), 然后按[ OK ]。
输入完大小后接着部您要建立的分区是文件系统还是交换空间,如 图 2-25所示。第一个分区是文件系统,所以 确认选择 FS后按Enter键。
最后,因为您要建立的是一个文件系统,所以必须告诉 Disklabel 这个文件系统要挂接在什么地方,如 图 2-26所示。根文件系统的挂接点 /, 所以请输入 /,然后按 Enter键。
刚刚制作好的分区会显示在画面上。您应该重复上述的动作以建立其它的 分区。当建立交换空间的时候,系统不会问您要将它挂接在哪里,因为交换空间是不用 挂在系统上的。当您在建立最后一个分区/usr的时候,您可以 直接使用默认的大小,即所有此分区剩余的空间。
您最终的 FreeBSD DiskLabel 编辑器画面会类似 图 2-27, 实际数字按您的选择而有所不同。按下 Q 键完成分区的建立。
安装哪些软件包在很大程度上取决于系统将被用来做什么,以及有多少可用的磁盘空间。 内建的选项包括了运行所需要的最小系统,到把所有软件包全都装上的常用配置。 UNIX 或 FreeBSD 新手通常直接选择一个设定好的软件包就可以了, 而有经验的使用者则可以考虑自己订制安装哪些软件包。
按下 F1 可以看到有关软件包的更多选项信息, 以及它们都包含了哪些软件,之后,可以按 Enter 回到软件包选择画面。
如果您想要使用图形界面, 则必须选择软件包名称开头是 X 的那些软件包。 对于 X 服务器的配置, 以及选择默认的桌面管理器这样的工作必须在 FreeBSD 安装完成之后才能作。 关于配置 X 服务器的更多资料可以在 第 5 章 找到。
默认的 X11 版本取决于您所安装的 FreeBSD 版本。 对于 FreeBSD 5.3 以前的版本, 安装的将是 XFree86 4.X。 对于 FreeBSD 5.3 和以后的版本, 默认的则是 Xorg。
如果需要定制内核, 您还需要选择包含源代码的那个选项。 要了解为什么应该编译和构建新的内核, 请参见 第 8 章。
显然, 包含所有组件的系统是最万能的。 如果磁盘空间足够, 用光标键选择 图 2-28 中的 All 并按 Enter。 如果担心磁盘空间不够的话, 则选择最合适的选项。 不要担心选择的是否是最合适的, 因为其他软件包可以在安装完毕后再加入进来。
当选择完您想要安装的部分后,接着会询问您要不要安装FreeBSD Ports 软件包;Ports软件包可以让您简单方便地安装软件包。Ports本身并不包含编辑 软件所需要的程序源代码,而是一个包含自动下载、编辑以及安装的文档集合。 第 4 章 一章讨论如何使用Ports.
安装程序并不会检查您是否有足够的硬盘空间来放ports,所以,如果要安装 ports软件所,请先确定您有足够的硬盘空间。 FreeBSD 5.4版本 FreeBSD Ports Collection 大约占用 400 MB 大小的硬盘空间。您要为 这些版本设置大一点的值来安装它们。
User Confirmation Requested
Would you like to install the FreeBSD Ports Collection?
This will give you ready access to over 12,300 ported software packages,
at a cost of around 400 MB of disk space when "clean" and possibly much
more than that if a lot of the distribution tarballs are loaded
(unless you have the extra CDs from a FreeBSD CD/DVD distribution
available and can mount it on /cdrom, in which case this is far less
of a problem).
The Ports Collection is a very valuable resource and well worth having
on your /usr partition, so it is advisable to say Yes to this option.
For more information on the Ports Collection & the latest ports,
visit:
http://www.FreeBSD.org/ports
[ Yes ] No
选择 [ Yes ] 将会安装 Ports Collection, 而选择 [ No ] 则将跳过它。 选好后按 Enter 继续。 此后, 选择安装的软件包的屏幕将再次出现。
如果对您的选择感到满意,请选择Exit 退出,确保[ OK ] 被高亮显示,然后按Enter 继续。
如果要从 CDROM 或 DVD安装,使用方向键将光标移到 Install from a FreeBSD CD/DVD。确认 [ OK ] 被选取,然后按 Enter 开始安装程序。
如果要使用其它的方式安装,请选择适当的安装介质然后按照屏幕指示 进行安装。
按 F1 可以显示安装介质的在线说明。按一下 Enter 可返回选择安装介质画面。
FTP安装模式: 使用FTP安装,有三种方式:主动式(active)FTP、被动式(passive)FTP 或是透过HTTP代理服务器。
- 主动式FTP: 从FTP服务器安装
这个选项将会使所有的FTP传输使用 “Active”模式。 这将无法通过防火墙,但是可以使用在那些比较早期,不支持被动模式的FTP站。 如果您的连接在使用被动(默认值)模式卡住了,请换主动模式看看!
- 被动模式FTP: 通过防火墙从FTP服务器安装
此选项会让 sysinstall 使用 “Passive”模式来安装。这使得使用者可以穿过 不允许用非固定TCP PORTS连入的防火墙。
- FTP 透过 HTTP 代理服务器: 透过HTTP代理服务器,由 FTP服务器安装
此选项会让 sysinstall 通过HTTP协议 (像浏览器一样)连到proxy服务器。proxy服务器会解释送出的请求, 然后通知FTP服务器。因为通过HTTP协议,所以可以穿过防火墙。 要用这种方式,您必须指定proxy服务器的地址。
对于一个 FTP 代理服务器而言,通常在使用者登入名称中加入您要登入的 服务器的用户名,加在 “@” 符号后面。然后代理服务器就会 “假装” 成一个真的服务器。 例如, 假设您要从 ftp.FreeBSD.org 安装,通过 FTP 代理服务器 foo.example.com,使用1024端口。
在这种情况下,您可以到 options 菜单,将 FTP username 设为 ftp@ftp.FreeBSD.org,密码设为您的电子邮件地址。 安装介质部分,指定FTP (或是被动式 FTP,如果代理服务器支持的话) 以及URL为 ftp://foo.example.com:1234/pub/FreeBSD。
因为ftp.FreeBSD.org的 /pub/FreeBSD 目录会被抓取到 foo.example.com之下,您就可以从 这台 机器 (会从 ftp.FreeBSD.org 抓取文件) 安装。
到此为止,可以开始进行安装了,这也是您避免更动到您的硬盘的最后机会。
User Confirmation Requested
Last Chance! Are you SURE you want to continue the installation?
If you're running this on a disk with data you wish to save then WE
STRONGLY ENCOURAGE YOU TO MAKE PROPER BACKUPS before proceeding!
We can take no responsibility for lost disk contents!
[ Yes ] No
选择 [ Yes ] 然后按下 Enter 确认安装
安装所需的时间会根据您所选择的软件、安装介质以及您电脑的速度而有所不同。 在安装的过程中会有一些信息来显示目前的进度。
当您看到下面的信息表示已经安装完成了:
Message
Congratulations! You now have FreeBSD installed on your system.
We will now move on to the final configuration questions.
For any option you do not wish to configure, simply select No.
If you wish to re-enter this utility after the system is up, you may
do so by typing: /stand/sysinstall .
[ OK ]
[ Press enter to continue ]
按下 Enter 以进行安装后的配置。
选择 [ No ] 然后按 Enter 会取消安装,不会对您的系统造成更动。您会看到下面的信息:
Message
Installation complete with some errors. You may wish to scroll
through the debugging messages on VTY1 with the scroll-lock feature.
You can also choose "No" at the next prompt and go back into the
installation menus to retry whichever operations have failed.
[ OK ]
产生这个信息是因为什么东西也没有安装,按下 Enter 后会离开安装程序回到主安装界面。从主安装界面可以退出安装程序。
安装成功后, 就可以进行进一步的配置了。 引导新安装的 FreeBSD 系统之后, 使用 sysinstall (/stand/sysinstall 如果您使用的是 FreeBSD 5.2 之前的版本), 并选择 Configure。
如果您之前配置用 PPP 通过 FTP 安装,那么这个画面将不会出现;正像所说 的那样,您可以稍后再做配置。
如果想更多的了解网卡或将FreeBSD配置为网关或路由器,请参考 Advanced Networking 的相关文章。
User Confirmation Requested
Would you like to configure any Ethernet or SLIP/PPP network devices?
[ Yes ] No
如果要配置网卡,请选择 [ Yes ] 然后按 Enter。 否则请选择 [ No ] 继续。
用方向键选择您要配置的网卡接口,然后按Enter。
User Confirmation Requested
Do you want to try IPv6 configuration of the interface?
Yes [ No ]
目录私人区域网络IP协议IPv4已经足够,所以选择 [ No ] 然后按 Enter。
如果想试试新的IP通信协议 IPv6 ,使用 RA 服务,请选择 [ Yes ] 然后按 Enter。 寻找 RA 服务器将会花费几秒的时间。
User Confirmation Requested
Do you want to try DHCP configuration of the interface?
Yes [ No ]
如果您不需要 DHCP (Dynamic Host Configuration Protocol 动态主机配置协议) ,选择 [ No ] 然后按Enter。
选择 [ Yes ] 会执行dhclient, 如果成功,它会自动将网络配置信息填上。更多的信息请参考 第 23.5 节 。
下面的网络配置显示了怎样把以太网设备配置成区域网络网关的角色。
使用Tab 键可以在各个栏目之间进行切换,请输入适当 的信息:
完整的机器名称,例如本例中的 k6-2.example.com 。
您机器所在的域名称,如本例的 example.com
输入将数据包传送到远端网络的机器IP地址。只有当机器是网络上的 一个接点时才要输入。如果这台机器要作为您局域网的网关, 请将此处设为空白。IPv4网关,也被称作默认网关或 默认路由器。
本地网络中的域名服务器的IP地址。本例中假设机器所在的网络中 没有域名服务器,所以填入的是ISP提供的域名服务器地址 (208.163.10.2。)
本机所使用的IP地址。本例为 192.168.0.1。
本范例中的IP地址属于一个C类地址 (192.168.0.0 - 192.168.255.255)。默认的子网掩码为 (255.255.255.0)。
任何ifconfig命令跟网卡接口有关的参数。 本范例中没有。
使用 Tab 键选择 [ OK ]然后按 Enter键。
User Confirmation Requested
Would you like to Bring Up the ed0 interface right now?
[ Yes ] No
选择 [ Yes ] 然后按 Enter 将会将机器的网卡转为启用状态。机器下次启动 的时候即可使用。
User Confirmation Requested
Do you want this machine to function as a network gateway?
[ Yes ] No
如果这台机器要作为本地网络和其它机器之间传送数据包的网关,请选择 [ Yes ] 然后按 Enter。 如果这台机器只是网络上的一个节点主,请选择 [ No ] 并按Enter 继续。
User Confirmation Requested
Do you want to configure inetd and the network services that it provides?
Yes [ No ]
如果选择 [ No ] ,许多网络服务,如 telnetd 将不会启用。这表示远端用户将无法 telnet 进入这台机器。本机器上的用户还是可以 telnet到远端机器的。
这些服务可以在安装完成后修改/etc/inetd.conf 配置文件来启用它们。请参阅 第 23.2.1 节 以获得更多的信息。
如果您想现在就配置这些网络服务,请选择[ Yes ] , 然后会看到下面的信息:
User Confirmation Requested
The Internet Super Server (inetd) allows a number of simple Internet
services to be enabled, including finger, ftp and telnetd. Enabling
these services may increase risk of security problems by increasing
the exposure of your system.
With this in mind, do you wish to enable inetd?
[ Yes ] No
选择 [ Yes ] 继续。
User Confirmation Requested
inetd(8) relies on its configuration file, /etc/inetd.conf, to determine
which of its Internet services will be available. The default FreeBSD
inetd.conf(5) leaves all services disabled by default, so they must be
specifically enabled in the configuration file before they will
function, even once inetd(8) is enabled. Note that services for
IPv6 must be separately enabled from IPv4 services.
Select [Yes] now to invoke an editor on /etc/inetd.conf, or [No] to
use the current settings.
[ Yes ] No
选择 [ Yes ] 将允许您添加网络服务 (将相应网络服务每行开头的#除掉即呆。
在加入您想启用的服务后,按下 Esc键会出现一个 对话框可以让您离开以及保存修改。
User Confirmation Requested
Do you want to have anonymous FTP access to this machine?
Yes [ No ]
如果您选择允许匿名 FTP 存取,那么网络中任何人都可以使用FTP来访问您 的机器。在启用匿名访问之前应该考虑网络的安全问题。如果要知道更多有关网络 安全的信息,请参阅 第 14 章。
要启用FTP匿名访问,用方向键选择 [ Yes ] 然后按 Enter键。您会看到下面(或类似)的画面:
按 F1 键可以查看在线帮助文档:
This screen allows you to configure the anonymous FTP user.
The following configuration values are editable:
UID: The user ID you wish to assign to the anonymous FTP user.
All files uploaded will be owned by this ID.
Group: Which group you wish the anonymous FTP user to be in.
Comment: String describing this user in /etc/passwd
FTP Root Directory:
Where files available for anonymous FTP will be kept.
Upload subdirectory:
Where files uploaded by anonymous FTP users will go.
默认的FTP根目录将放在 /var目录下。如果您 的/var目录空间不足以应付您的FTP需求,您可以将FTP的根目录改为 /usr 目录下的 /usr/ftp 目录。
当您对一切配置都满意后,请按 Enter 键继续。
User Confirmation Requested
Create a welcome message file for anonymous FTP users?
[ Yes ] No
如果您选择 [ Yes ] 并按下 Enter键,系统会自动打开文本编辑器让您编辑FTP的欢迎信息。
此文本编辑器叫做 ee。按照指示修改信息文本或是 稍后再用您喜爱的文本编辑器来修改。请记住画面下方显示的文件位置。
按 Esc 将弹出一个默认为 a) leave editor的对话框。按 Enter 退出并继续。再次按 Enter 将保存修改。
网络文件系统 (NFS) 可以让您可以在网络上共享您的文件。一台机器可以 配置成NFS服务器、客户端或两者并存。请参考 第 23.3 节 以获得更多的信息。
User Confirmation Requested
Do you want to configure this machine as an NFS server?
Yes [ No ]
如果您不想安装网络文件系统,请选择 [ No ] 然后按 Enter键。
如果您选择 [ Yes ] 将会出现一个对话框提醒您 必须先建立一个 exports 文件。
Message
Operating as an NFS server means that you must first configure an
/etc/exports file to indicate which hosts are allowed certain kinds of
access to your local filesystems.
Press [Enter] now to invoke an editor on /etc/exports
[ OK ]
按 Enter 键继续。系统会启动文本编辑器让您编辑 exports 文件。
按照指示加入真实输出的文件目录或是稍后用您喜爱的编辑器自行编辑。 请记下画面下方显示的文件名称及位置。
按下 Esc 键会出现一具对话框,默认选项是 a) leave editor。按下 Enter 离开并继续。
NFS 客户端允许您的机器访问NFS服务器。
User Confirmation Requested
Do you want to configure this machine as an NFS client?
Yes [ No ]
按照您的需要,选择 [ Yes ] 或 [ No ] 然后按 Enter。
“安全配置” 中包含了一些可以通过启用或停用某些程序 来达到某些程序的安全性配置。安全配置越严格,则默认启动的程序就越少。 基本的原则是:除非必要,否则不要执行一些可有有无的程序。
请注意,安全文件的配置都是默认值,在安装完成后您可以随时通过 编辑 /etc/rc.conf配置文件来改变这些配置。 如果想得到更多的信息请参阅 rc.conf(5) 手册。
下表说明每一种安全等级的意义。每列所代表的是安全等级,每行所 代表的是程序或功能是启用还是停用。
Table 2-4. 可能的安全等级
| 极/高度安全 | 中度安全 | |
|---|---|---|
| sendmail(8) | 否 | 是 |
| sshd(8) | 否 | 是 |
| portmap(8) | 否 | 不一定 [a] |
| NFS server | 否 | 是 |
| securelevel(8) | 是 [b] | 否 |
| Notes: a. 如果之前安装时配置机器为NFS客户端或服务器,则会启用些 项目。 b. 如果您选择的安全等级配置 securelevel 为 “极度或高度” 或 “High”,请阅读init(8)手册并特别注意有关安全 等级意义的部分;否则稍后您可能会过到很大的困难! |
||
User Confirmation Requested
Do you want to select a default security profile for this host (select
No for "medium" security)?
[ Yes ] No
选择 [ No ] 并按 Enter 会将安全等级高为中度安全。
选择 [ Yes ] 并按 Enter将允许您选择不同程序的安全等级。
按 F1 显示在线帮助;按Enter 键可以回到选择画面。
如果您没有什么特殊的等级需求,请用方向键选择 中度, 确定选择了 [ OK ] 然后按Enter。
依据您选择的安全等级,会显示相对应的确认信息。
Message
Moderate security settings have been selected.
Sendmail and SSHd have been enabled, securelevels are
disabled, and NFS server setting have been left intact.
PLEASE NOTE that this still does not save you from having
to properly secure your system in other ways or exercise
due diligence in your administration, this simply picks
a standard set of out-of-box defaults to start with.
To change any of these settings later, edit /etc/rc.conf
[OK]
Message
Extreme security settings have been selected.
Sendmail, SSHd, and NFS services have been disabled, and
securelevels have been enabled.
PLEASE NOTE that this still does not save you from having
to properly secure your system in other ways or exercise
due diligence in your administration, this simply picks
a more secure set of out-of-box defaults to start with.
To change any of these settings later, edit /etc/rc.conf
[OK]
按下 Enter 继续安装后面的配置。
Warning安全等级并非万能药!即使您选择极度安全,您还是必须时常阅读 第 C.1 节邮件列表中有关安全的部分、使用有效的密码以及平常就注意安全问题。 这里只是稍为配置一下常用的安全等级而已。
系统提供了几个选项可以让您配置终端的表现方式。
User Confirmation Requested
Would you like to customize your system console settings?
[ Yes ] No
要查阅及配置这些选项,请选择 [ Yes ] 并按Enter。
最常用的选项就是屏幕保护程序了。使用方向键将光标移动到 Saver 然后按Enter。
选择您想使用的屏幕保护程序,然后按 Enter。 之后回到系统终端配置画面。
默认开启屏幕保护程序的时间是300秒。如果要更改此时间,请再次选择 Saver 。然后选择 Timeout 并按 Enter键。系统会弹出一个对话框如下:
您可以直接改变这个值,然后选 [ OK ]并按 Enter 键回到系统终端配置画面。
选择 Exit 然后按下 Enter 键会回到安装后的配置画面。
配置您机器的时区可以让系统自动校正任何区域时间的变更并且在执行 一些跟时区相关的程序时不会出错。
例子中假设此台机器位于美国东部的时区。请参考您所在的地理位置来配置。
User Confirmation Requested
Would you like to set this machine's time zone now?
[ Yes ] No
选择 [ Yes ] 并按下 Enter键以配置时区。
User Confirmation Requested
Is this machine's CMOS clock set to UTC? If it is set to local time
or you don't know, please choose NO here!
Yes [ No ]
这里按照您机器时间的配置,选择 [ Yes ] 或 [ No ] 然后按 Enter。
请选择适当的区域然后按 Enter。
选择您所在的国家然后按 Enter。
选择您所在的时区然后按 Enter。
Confirmation
Does the abbreviation 'EDT' look reasonable?
[ Yes ] No
检查一下时区的缩写是否正确,如果没错,请按 Enter 返回系统安装后的配置画面。
User Confirmation Requested
Would you like to enable Linux binary compatibility?
[ Yes ] No
选择 [ Yes ] 并按下Enter 键,将允许您在FreeBSD中执行Linux的软件。安装程序会安装一些为了跟Linux 兼容的软件包。
如果您是通过FTP安装,那么您必须连到网络上。有时候FTP站并不会包含 所有的安装软件包(例如Linux兼容软件包);不过,稍后您还可以再安装这个 项目。
此选项可以让您在终端上使用三键鼠标剪贴文字。如果您用的鼠标是两个 按钮,请参考手册 moused(8);以取得有关模拟三键鼠标的信息。范例中 使用的鼠标不是USB接口。(例如ps/2或com接口的鼠标):
User Confirmation Requested
Does this system have a non-USB mouse attached to it?
[ Yes ] No
如果您使用的不是USB鼠标,请选择 [ Yes ] ; 否则请选择 [ No ] 。然后按Enter。
使用方向键选择 Type 然后按 Enter。
在这个例子中使用的类型是ps/2鼠标,所以可以使用默认的 Auto(自动) 。 您可以用方向键选择合适的项目, 确定选择了 [ OK ] 后按 Enter 键离开此画面。
选择 Port 然后按 Enter。
假设这台机器用的是ps/2鼠标,您可以采用默认的 PS/2 选项。请选择适当的项目然后按 Enter。
选择Enable然后按 Enter 来启动和测试鼠标。
鼠标指针可以在屏幕上移动,指明鼠标服务已经正常启用。那么请选择 [ Yes ] 按 Enter键。否则鼠标没 有配置成功 -- 选择 [ No ] 并尝试不同的配置 选项。
选择 Exit 并按 Enter 退回到系统安装完成后的配置画面。
配置网络服务总是让那些新手敬畏,因为他们缺乏在这个领域应有的基础知识。 网络,包括因特网有许多关于现代操作系统包括 FreeBSD;的评论文章。这些文章对于 理解FreeBSD拥有的广泛的网络性能是非常有帮助的。在安装这些服务的过程中也能让 用户理解它们可用的各种服务。
网络服务是一些可以使在网络的任何人来访问您提供的服务的程序。有许多 努力想使这些程序不会有任何的 “伤害”。不幸的是,这些程序并 不是十全十美的,黑客可能会掌握程序中的一些露洞来进行功击。只启用一些您 熟悉的和需要的服务十分重要。如果您存在一些疑虑或没有启用这些服务的必要 那么最好不要使用这些服务。您可以事后通过运行 sysinstall 程序或使用 /etc/rc.conf 配置文件来启用它们。
选择 “Networking” 选项将下显示一个类似下面的菜单:
第一个选项,Interfaces, 已经在前面 第 2.9.1 节 中讨论过,因此这里可以略过。
选择 AMD 选项,添加 BSD 对自动挂接程序的支持。这个程序和NFS 协议一起使用 不需要经过特别的设置就可以自动挂接远程文件系统。
下一行是 AMD Flags 的参数选项。当您选择后,会弹出一个 子菜单来让您选择 AMD 的参数。菜单中包含一系列的选项:
-a /.amd_mnt -l syslog /host /etc/amd.map /net /etc/amd.map
-a 选项用来设置默认的挂接位置,这里使用的是 /.amd_mnt目录。 -l 指定默认的 日志 文件;但是,当 syslogd 被指定用来接收所有的日志时,那么它们会被送到 系统日志程序。/host 被用来挂接远程 主机输出的一个文件系统,例子中/net 目录被用来挂接从IP输出的一个文件系统。 /etc/amd.map 文件定义了 AMD 的默认 输出选项。
Anon FTP 允许匿名 FTP 访问。 选中这个选项,可以使这台机器成为一台匿名 FTP 服务器。 要注意启用这个选项的安全风险。其它的菜单将说明一些安全问题和更深入的配置。
Gateway 配置菜单可以使本机器成为一台以前我们提到过 的网关。如果您在安装过程中偶尔选中了它,也可以在这里选中这个选项来取消。
Inetd 选项用来配置或完全禁止我们在上面讨论的 inetd(8) 守护程序。
Mail 可以用来配置系统默认的 MTA 或邮件传输代理。选择这个选项将了出现下面的菜单:
这里给您提供了一个安装默认MTA 的机会。 MTA 用来投递本系统上用户邮件到因特网去。
选择 Sendmail 将会安装 FreeBSD默认的 流行的的 sendmail 服务程序。 Sendmail local 选项用来设置sendmail 默认的MTA,也可以禁止它从Internet接收邮件的能力。 还有其它的一些选项如: Postfix 和 Exim 都类似于 Sendmail的角色。它们两者也可以投递邮件; 有些用户更喜欢选择使用Sendmail、 MTA二者之一。
选择 MTA或不选择它之后,网络配置菜单的下一 个选项是 NFS client 客房端程序。
NFS client 客房端可以使系统通过 NFS 与服务器进行通信。 NFS 服务器通过NFS 协议可以使其它在网络上的机器来访问自己的文件系统。如果这台机器要作为一台 独立的服务器,这个选项可以保留不选。下面可能还有更多的配置,关于客户端和 服务器的配置请参阅第 23.3 节 一节。
接下来的 NFS 服务器选项,可以允许您把系统设备成 为一台NFS 服务器。这需要更多的信息来启动远程过程调 用( RPC)服务。 RPC用来连接调 用两台机器上的程序。
下一项是 Ntpdate 选项,处理时间同步。当选择它后, 会出现一个像下面所似的菜单:
从这个菜单选择一个离您最近的服务器。在您连接这台服务器时,除去 连接时的反应时间,时间同步最精确的服务器。
下一个选项是 PCNFSD 。这个选项将从安装包中 安装net/pcnfsd 软件。这个程序 能够为不能提供它们自己,例如微软的 MS-DOS 操作系统提供 NFS 的认证服务。
滚屏到下一页看一下其它选项:
rpcbind(8),rpc.statd(8)和rpc.lockd(8) 程序全都可以用来提供远程过程调用 (RPC)服务。 rpcbind 程序管理NFS 服务器和客户端的通信,使NFS 执行正确的操作。 rpc.statd程序可以和其它主机上rpc.statd 程序提供的状态监视进行交互。状态报告通常被保存在 /var/db/statd.status 文件里。最后的一项是 rpc.lockd选项,当选中这时,将提供文件锁定服务。 它通常被用业通过rpc.statd来监视主机请求锁定什么文件和 怎样频繁的访问它们。这最后的两项调试功能,可以需要 NFS 服务器和客户端的正常操作。
下一个项目是Routed,这是一个路由程序。 routed(8) 程序管理网络路由表,发现多播路由,并且支持在网络上 与它物理相连的主机来拷贝它的路由表的请求。它被广泛的应用在本地 网络中并扮演关网关的角色。 当选择它后,一个子菜单会来询问您这个程序的默认位置。默认的位置已经 被定义过,您可以选择 Enter 键,您也可以按下其它的键。 这时会出来另一个菜单来询问您传递给 routed程序的参数。 默认的是 -q 参数。
接下来是 Rwhod 选项,选中它会启用 rwhod(8) 程序 在系统初时化的时候。 rwhod程序通过网络周期性的广播系统 信息或以“客户”的身份来收集这些信息。更多的信息可以查看 ruptime(1) 和rwho(1) 手册页。
倒数第二个选项是sshd(8) 程序。它可以通过使用 OpenSSH来提供安全的shell服务,我们推荐通过 使用它来使用 telnet 和 FTP 服务。 sshd服务通过使用加密技术来创建从一台机器到另一台机 器的安全连接。
最后有一个 TCP 扩展选项。这可以用来扩展在 RFC 1323 和RFC 1644 里定义的TCP 功能。当许多主机以高速连接本机时,可 能会引起某些连接被丢弃。我们不推荐使用这个选项,但是当使用独立的主机 时可以从它上面得到一些好处。
现在您已经配置完成了网络服务,您可以滚动屏幕到顶部选择 Exit 项,退出进入下一个配置部分。
Note: 从 FreeBSD 5.3-RELEASE 开始, X 服务的配置机制从 sysinstall 中删掉了。 您必须在安装完 FreeBSD 之后再配置 X 服务。 关于安装和配置 X 服务的进一步细节可以在 第 5 章 找到。 如果您不是在安装 5.3-RELEASE 之前的 FreeBSD 版本的话, 则可以跳过这一节。
要使用诸如 KDE、 GNOME, 以及其他一些图形界面, 则需要配置 X 服务器。
Note: 为了以非root用户运行 XFree86 您必须安装 x11/wrapper 软件。在FreeBSD 4.7及以上 版本是默认安装的,但以前的版本要手工安装到系统中。
要知道您的显卡是否被支持,请参考 XFree86 网站。
User Confirmation Requested
Would you like to configure your X server at this time?
[ Yes ] No
Warning您需要了解监视器和显卡信息的制造规格。 如果配置有误, 可能会造成设备损毁。 如果您一时没有这样的信息, 请选择 [ No ], 之后再通过 sysinstall (对于 FreeBSD 5.2 以前的版本来说, 是 /stand/sysinstall), 选择 Configure 然后是 XFree86 来配置。 如果设置不当, X 服务器将导致系统停止响应。 通常, 建议您在安装完成之后再配置 X 服务程序。
如果您有显卡和显示器的信息,请选择 [ Yes ] 并按 Enter 来配置 X-server。
您可以通过许多方法来配置 X server。在认真读了所有的说明后, 请使用方向键来选择一种配置方式,并按Enter。 键确认。
xf86cfg 和 xf86cfg -textmode 配置方法可能会使屏幕黑屏一会 过一会即会启动。要有耐心。
下面将介绍xf86config 配置工具。 根据系统硬件的不同,下面的信息可能会适当的发生变动:
Message
You have configured and been running the mouse daemon.
Choose "/dev/sysmouse" as the mouse port and "SysMouse" or
"MouseSystems" as the mouse protocol in the X configuration utility.
[ OK ]
[ Press enter to continue ]
这个信息指明,前面配置的鼠标驱动程序被检测到。按 Enter 键继续。
启动 xf86config 后会显示一个简单的说明:
This program will create a basic XF86Config file, based on menu selections you make. The XF86Config file usually resides in /usr/X11R6/etc/X11 or /etc/X11. A sample XF86Config file is supplied with XFree86; it is configured for a standard VGA card and monitor with 640x480 resolution. This program will ask for a pathname when it is ready to write the file. You can either take the sample XF86Config as a base and edit it for your configuration, or let this program produce a base XF86Config file for your configuration and fine-tune it. Before continuing with this program, make sure you know what video card you have, and preferably also the chipset it uses and the amount of video memory on your video card. SuperProbe may be able to help with this. Press enter to continue, or ctrl-c to abort.
按 Enter 将启动鼠标配置。请按照指示选择 “Mouse Systems” 作为鼠标协议, /dev/sysmouse 作为鼠标端口。下面的例子 向您说明的是使用一个 PS/2 鼠标:
First specify a mouse protocol type. Choose one from the following list: 1. Microsoft compatible (2-button protocol) 2. Mouse Systems (3-button protocol) & FreeBSD moused protocol 3. Bus Mouse 4. PS/2 Mouse 5. Logitech Mouse (serial, old type, Logitech protocol) 6. Logitech MouseMan (Microsoft compatible) 7. MM Series 8. MM HitTablet 9. Microsoft IntelliMouse If you have a two-button mouse, it is most likely of type 1, and if you have a three-button mouse, it can probably support both protocol 1 and 2. There are two main varieties of the latter type: mice with a switch to select the protocol, and mice that default to 1 and require a button to be held at boot-time to select protocol 2. Some mice can be convinced to do 2 by sending a special sequence to the serial port (see the ClearDTR/ClearRTS options). Enter a protocol number: 2 You have selected a Mouse Systems protocol mouse. If your mouse is normally in Microsoft-compatible mode, enabling the ClearDTR and ClearRTS options may cause it to switch to Mouse Systems mode when the server starts. Please answer the following question with either 'y' or 'n'. Do you want to enable ClearDTR and ClearRTS? n You have selected a three-button mouse protocol. It is recommended that you do not enable Emulate3Buttons, unless the third button doesn't work. Please answer the following question with either 'y' or 'n'. Do you want to enable Emulate3Buttons? y Now give the full device name that the mouse is connected to, for example /dev/tty00. Just pressing enter will use the default, /dev/mouse. On FreeBSD, the default is /dev/sysmouse. Mouse device: /dev/sysmouse
下一个要配置的项目是键盘。在例子中使用的键盘一般是101-key 。您可以选择不 同的键盘类型或直接按 Enter 键来使用默认配置。
Please select one of the following keyboard types that is the better description of your keyboard. If nothing really matches, choose 1 (Generic 101-key PC) 1 Generic 101-key PC 2 Generic 102-key (Intl) PC 3 Generic 104-key PC 4 Generic 105-key (Intl) PC 5 Dell 101-key PC 6 Everex STEPnote 7 Keytronic FlexPro 8 Microsoft Natural 9 Northgate OmniKey 101 10 Winbook Model XP5 11 Japanese 106-key 12 PC-98xx Series 13 Brazilian ABNT2 14 HP Internet 15 Logitech iTouch 16 Logitech Cordless Desktop Pro 17 Logitech Internet Keyboard 18 Logitech Internet Navigator Keyboard 19 Compaq Internet 20 Microsoft Natural Pro 21 Genius Comfy KB-16M 22 IBM Rapid Access 23 IBM Rapid Access II 24 Chicony Internet Keyboard 25 Dell Internet Keyboard Enter a number to choose the keyboard. 1 Please select the layout corresponding to your keyboard 1 U.S. English 2 U.S. English w/ ISO9995-3 3 U.S. English w/ deadkeys 4 Albanian 5 Arabic 6 Armenian 7 Azerbaidjani 8 Belarusian 9 Belgian 10 Bengali 11 Brazilian 12 Bulgarian 13 Burmese 14 Canadian 15 Croatian 16 Czech 17 Czech (qwerty) 18 Danish Enter a number to choose the country. Press enter for the next page 1 Please enter a variant name for 'us' layout. Or just press enter for default variant us Please answer the following question with either 'y' or 'n'. Do you want to select additional XKB options (group switcher, group indicator, etc.)? n
接下来,我们要配置显示器。不要超过您显示器的刷新频率,这样可以 会损坏您的显示器。如果您有疑问,请参考其它信息后再做配置。
Now we want to set the specifications of the monitor. The two critical
parameters are the vertical refresh rate, which is the rate at which the
whole screen is refreshed, and most importantly the horizontal sync rate,
which is the rate at which scanlines are displayed.
The valid range for horizontal sync and vertical sync should be documented
in the manual of your monitor. If in doubt, check the monitor database
/usr/X11R6/lib/X11/doc/Monitors to see if your monitor is there.
Press enter to continue, or ctrl-c to abort.
You must indicate the horizontal sync range of your monitor. You can either
select one of the predefined ranges below that correspond to industry-
standard monitor types, or give a specific range.
It is VERY IMPORTANT that you do not specify a monitor type with a horizontal
sync range that is beyond the capabilities of your monitor. If in doubt,
choose a conservative setting.
hsync in kHz; monitor type with characteristic modes
1 31.5; Standard VGA, 640x480 @ 60 Hz
2 31.5 - 35.1; Super VGA, 800x600 @ 56 Hz
3 31.5, 35.5; 8514 Compatible, 1024x768 @ 87 Hz interlaced (no 800x600)
4 31.5, 35.15, 35.5; Super VGA, 1024x768 @ 87 Hz interlaced, 800x600 @ 56 Hz
5 31.5 - 37.9; Extended Super VGA, 800x600 @ 60 Hz, 640x480 @ 72 Hz
6 31.5 - 48.5; Non-Interlaced SVGA, 1024x768 @ 60 Hz, 800x600 @ 72 Hz
7 31.5 - 57.0; High Frequency SVGA, 1024x768 @ 70 Hz
8 31.5 - 64.3; Monitor that can do 1280x1024 @ 60 Hz
9 31.5 - 79.0; Monitor that can do 1280x1024 @ 74 Hz
10 31.5 - 82.0; Monitor that can do 1280x1024 @ 76 Hz
11 Enter your own horizontal sync range
Enter your choice (1-11): 6
You must indicate the vertical sync range of your monitor. You can either
select one of the predefined ranges below that correspond to industry-
standard monitor types, or give a specific range. For interlaced modes,
the number that counts is the high one (e.g. 87 Hz rather than 43 Hz).
1 50-70
2 50-90
3 50-100
4 40-150
5 Enter your own vertical sync range
Enter your choice: 2
You must now enter a few identification/description strings, namely an
identifier, a vendor name, and a model name. Just pressing enter will fill
in default names.
The strings are free-form, spaces are allowed.
Enter an identifier for your monitor definition: Hitachi
下一个配置是从显卡的驱动列表里选择一个显卡驱动程序。如果忽略 当前列表中的选项,请直接按Enter 下一屏将会出现在屏幕上, 会显示下面的信息:
Now we must configure video card specific settings. At this point you can choose to make a selection out of a database of video card definitions. Because there can be variation in Ramdacs and clock generators even between cards of the same model, it is not sensible to blindly copy the settings (e.g. a Device section). For this reason, after you make a selection, you will still be asked about the components of the card, with the settings from the chosen database entry presented as a strong hint. The database entries include information about the chipset, what driver to run, the Ramdac and ClockChip, and comments that will be included in the Device section. However, a lot of definitions only hint about what driver to run (based on the chipset the card uses) and are untested. If you can't find your card in the database, there's nothing to worry about. You should only choose a database entry that is exactly the same model as your card; choosing one that looks similar is just a bad idea (e.g. a GemStone Snail 64 may be as different from a GemStone Snail 64+ in terms of hardware as can be). Do you want to look at the card database? y 288 Matrox Millennium G200 8MB mgag200 289 Matrox Millennium G200 SD 16MB mgag200 290 Matrox Millennium G200 SD 4MB mgag200 291 Matrox Millennium G200 SD 8MB mgag200 292 Matrox Millennium G400 mgag400 293 Matrox Millennium II 16MB mga2164w 294 Matrox Millennium II 4MB mga2164w 295 Matrox Millennium II 8MB mga2164w 296 Matrox Mystique mga1064sg 297 Matrox Mystique G200 16MB mgag200 298 Matrox Mystique G200 4MB mgag200 299 Matrox Mystique G200 8MB mgag200 300 Matrox Productiva G100 4MB mgag100 301 Matrox Productiva G100 8MB mgag100 302 MediaGX mediagx 303 MediaVision Proaxcel 128 ET6000 304 Mirage Z-128 ET6000 305 Miro CRYSTAL VRX Verite 1000 Enter a number to choose the corresponding card definition. Press enter for the next page, q to continue configuration. 288 Your selected card definition: Identifier: Matrox Millennium G200 8MB Chipset: mgag200 Driver: mga Do NOT probe clocks or use any Clocks line. Press enter to continue, or ctrl-c to abort. Now you must give information about your video card. This will be used for the "Device" section of your video card in XF86Config. You must indicate how much video memory you have. It is probably a good idea to use the same approximate amount as that detected by the server you intend to use. If you encounter problems that are due to the used server not supporting the amount memory you have (e.g. ATI Mach64 is limited to 1024K with the SVGA server), specify the maximum amount supported by the server. How much video memory do you have on your video card: 1 256K 2 512K 3 1024K 4 2048K 5 4096K 6 Other Enter your choice: 6 Amount of video memory in Kbytes: 8192 You must now enter a few identification/description strings, namely an identifier, a vendor name, and a model name. Just pressing enter will fill in default names (possibly from a card definition). Your card definition is Matrox Millennium G200 8MB. The strings are free-form, spaces are allowed. Enter an identifier for your video card definition:
接下来,设置显卡的分辨率。典型的使用范围是 640x480, 800x600, 和 1024x768,这些显卡的功能特性、分辨率的大小以眼睛的舒适为准。 当选择颜色深度时,可以选择您显卡支持最大模式。
For each depth, a list of modes (resolutions) is defined. The default resolution that the server will start-up with will be the first listed mode that can be supported by the monitor and card. Currently it is set to: "640x480" "800x600" "1024x768" "1280x1024" for 8-bit "640x480" "800x600" "1024x768" "1280x1024" for 16-bit "640x480" "800x600" "1024x768" "1280x1024" for 24-bit Modes that cannot be supported due to monitor or clock constraints will be automatically skipped by the server. 1 Change the modes for 8-bit (256 colors) 2 Change the modes for 16-bit (32K/64K colors) 3 Change the modes for 24-bit (24-bit color) 4 The modes are OK, continue. Enter your choice: 2 Select modes from the following list: 1 "640x400" 2 "640x480" 3 "800x600" 4 "1024x768" 5 "1280x1024" 6 "320x200" 7 "320x240" 8 "400x300" 9 "1152x864" a "1600x1200" b "1800x1400" c "512x384" Please type the digits corresponding to the modes that you want to select. For example, 432 selects "1024x768" "800x600" "640x480", with a default mode of 1024x768. Which modes? 432 You can have a virtual screen (desktop), which is screen area that is larger than the physical screen and which is panned by moving the mouse to the edge of the screen. If you don't want virtual desktop at a certain resolution, you cannot have modes listed that are larger. Each color depth can have a differently-sized virtual screen Please answer the following question with either 'y' or 'n'. Do you want a virtual screen that is larger than the physical screen? n For each depth, a list of modes (resolutions) is defined. The default resolution that the server will start-up with will be the first listed mode that can be supported by the monitor and card. Currently it is set to: "640x480" "800x600" "1024x768" "1280x1024" for 8-bit "1024x768" "800x600" "640x480" for 16-bit "640x480" "800x600" "1024x768" "1280x1024" for 24-bit Modes that cannot be supported due to monitor or clock constraints will be automatically skipped by the server. 1 Change the modes for 8-bit (256 colors) 2 Change the modes for 16-bit (32K/64K colors) 3 Change the modes for 24-bit (24-bit color) 4 The modes are OK, continue. Enter your choice: 4 Please specify which color depth you want to use by default: 1 1 bit (monochrome) 2 4 bits (16 colors) 3 8 bits (256 colors) 4 16 bits (65536 colors) 5 24 bits (16 million colors) Enter a number to choose the default depth. 4
最后,要保存您的配置,确定输入 /etc/XF86Config 作为保存位置。
I am going to write the XF86Config file now. Make sure you don't accidently overwrite a previously configured one. Shall I write it to /etc/X11/XF86Config? y
如果您配置失败,您也可以尝试着按 [ Yes ] 来 重新再试一次,会显示下面的信息:
User Confirmation Requested
The XFree86 configuration process seems to have
failed. Would you like to try again?
[ Yes ] No
如果配置 XFree86时遇上困难,请选择 [ No ] 并按 Enter键继续 进行安装。安装完成后可以使用 xf86cfg -textmode 或 xf86config 命令行配置程序来以 root 用户的身份进行配置。配置 XFree86 的另外一种方法 描述在 第 5 章。如果您选择不配置XFree86 那么下一个菜单将让您选择要安装的软件包。
默认情况下可以使用组合键 Ctrl+Alt+Backspace,在发生错误或在硬件损坏前退出 设置屏幕。
默认的显示模式可以使用X系统下的 Ctrl+Alt++ 或 Ctrl+Alt+-来改变。
一旦有了可以运行的 XFree86, 就可以使用 xvidtune 来调整显示的高度和宽度以及显示器的中心位置。
一些不适当的配置可能会损坏您的设备。如果在使用它们前存在疑虑,请不要 安装它们。可以使用监视器的控制工具来调整X窗口的显示。与文本显示模式不同 它更容易损坏设备。
在调整这些参数前,请阅读 xvidtune(1) 手册。
下面是一个配置 XFree86 的成功例子,它选择了 使用默认的桌面。
Note: 从 FreeBSD 5.3-RELEASE 开始, X 桌面的选择机制已经从 sysinstall 中删掉了。 您只能在安装好 FreeBSD 之后再配置它。 关于安装和配置 X 桌面的更多细节可以在 第 5 章 找到。 如果不是在安装 FreeBSD 5.3-RELEASE 之前的版本, 则可以跳过这一节。
有许多窗口管理器可以使用。它们从基本的桌面环境到全部的桌面应用,是 一个大型的软件集。一些人可能只希望使用一些占用磁盘空间少,内存低的窗口 管理器;而另外一些人则更倾向于使用有便多特性的桌面环境。选择使用那种桌 面的最好的方法就是尝试着试用一些不同的桌面环境。这些桌面都可以在安装 完成后通过ports收集或包管理器来进行安装。
您可以选择一个流行的桌面配置成为默认的桌面,可以使您在安装完 成后立刻启动它。
使用箭头选择一个桌面,然后键入Enter键。选择的桌面将被 安装。
这些软件包已经被预编译成二进制程序了,安装软件有一个很简单的方法。
前面已经介绍了如何安装一个软件包的例子。 如果需要的话, 在安装结束之后, 仍然可以使用 sysinstall (对于 FreeBSD 5.2 之前的版本是 /stand/sysinstall) 来安装其他软件包。
User Confirmation Requested
The FreeBSD package collection is a collection of hundreds of
ready-to-run applications, from text editors to games to WEB servers
and more. Would you like to browse the collection now?
[ Yes ] No
选择 [ Yes ] 按Enter 将会显示软件包选择屏幕。
在任何时候只有安装介质上有的软件包才能被安装进系统。
如果选择All 那么所有的软件包将会被显示,您也 可以选择一个特殊的分类。使用箭头进行选择,然后键入 Enter。
一个菜单将会显示这个分类中可用的所有软件包。
bash shell 被选中了。通过在加亮的软件 上键入Space 键,来选择您想要的软件所。每个选择的软件 包的简短描述都会显示在屏幕左下脚。
按 Tab 键选择 [ OK ]或 [ Cancel ]。
当您完成了安装标记之后,键入 Tab 键选择 [ OK ] 然后键入Enter 返回软件包选择菜单。
左右箭头键也可以用来选择 [ OK ]和 [ Cancel ]。用这种方法也可以 用 [ OK ] 然后按 Enter 来返回软件包选择菜单。
使用 Tab 和箭头键来选择 [ Install ] 然后键入 Enter。您接着需要确定您要安装的软件包。
选择 [ OK ] 然后键入Enter 键将开始软件的安装, 安装信息将会不断地出现。如果有一些错误信息,请作好记录。
安装完成之后,继续最后的配置。如果您不想安装任何软件包并退回到 最终配置屏幕,请选择Install 。
您至少要在安装过程中添加一个用户,以便于您能不用root 来登陆使用系统。根分区通常比较小,用 root 来运行应用程序 可能会快一点。但这样会有一些危险:
User Confirmation Requested
Would you like to add any initial user accounts to the system? Adding
at least one account for yourself at this stage is suggested since
working as the "root" user is dangerous (it is easy to do things which
adversely affect the entire system).
[ Yes ] No
选择 [ Yes ] 然后键入Enter 继续添加用户。
用箭头键来选择 User 然后按 Enter。
下面的描述信息会出现在屏幕的下方,可以使用 Tab 键来切换不同的项目,以便输入相关信息:
新用户的登陆名(强制性必须写)
这个用户的ID编号(如果不写,系统自动添加)
这个用户的登陆组名(如果不写,系统自动添加)
这个用户的密码(键入这个需要很仔细!)
用户的全名(解释、备注)
这个用户所在的组
用户的主目录(如果不写,系统自动添加)
用户登陆的shell(默认是/bin/sh)。
登陆的shell可以在 /bin/sh 到 /usr/local/bin/bash 中修改。 bash shell 是先前默认安装的shell。 不要使用一个不存在的或您不能登陆的shell。最通用的shell是使用 BSD-world 的 C shell,可以通过指定/bin/tcsh来修改。
用户也可以被添加到 wheel 组中成了一个超级用户, 从而拥有 root权限。
当您感觉满意时,键入 [ OK ] 键,用户和组管理菜单将会重新出现。
如果有其他的需要, 此时还可以添加其他的组。 此外, 还可以通过 sysinstall (在 FreeBSD 5.2 以前的版本中是 /stand/sysinstall) 在安装完成之后添加它们。
当您完成添加用户的时候,选择Exit 然后键入Enter 继续下面的安装。
Message
Now you must set the system manager's password.
This is the password you'll use to log in as "root".
[ OK ]
[ Press enter to continue ]
键入 Enter 来设置 root 密码。
密码必须正确地输入两次。 毋庸讳言, 您需要选择一个不容易忘记的口令。 请注意您输入的口令不会回显, 也不会显示星号。
Changing local password for root. New password : Retype new password :
密码成功键入后,安装将继续。
如果您需要设置其他的网络设备, 或者需要完成其他的配置, 可以在此时或者事后通过 sysinstall (对于 FreeBSD 5.2 之前的版本是 /stand/sysinstall) 来进行配置。
User Confirmation Requested
Visit the general configuration menu for a chance to set any last
options?
Yes [ No ]
选择 [ No ] 然后键入 Enter 返回到主安装菜单。
选择 [X Exit Install] 然后键入 Enter。您可能需要确认是否真的退出安装:
User Confirmation Requested
Are you sure you wish to exit? The system will reboot (be sure to
remove any floppies from the drives).
[ Yes ] No
选择 [ Yes ] 取出软盘。CDROM驱动器将被锁定, 直到机器重新启动。CDROM然后就可以从驱动器中取出来了。
在系统重新启动的时候可能会见到出错信息。
如果启动正常,您将看到在屏幕上有很多信息滚动,最后您会看到登陆命令行。 您可以通过键入 Scroll-Lock和使用 PgUp 与 PgDn来查看信息,再键入 Scroll-Lock 回到命令行。
记录信息可能不会显示(缓冲区的限制)。您可以通过键入 dmesg 来查看。
使用您在安装过程中设置的用户名/密码来登陆。(例子中使用 rpratt)。除非必须的时候请不要用 root 用户登陆。
典型的启动信息:(忽略版本信息)
Copyright (c) 1992-2002 The FreeBSD Project.
Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
The Regents of the University of California. All rights reserved.
Timecounter "i8254" frequency 1193182 Hz
CPU: AMD-K6(tm) 3D processor (300.68-MHz 586-class CPU)
Origin = "AuthenticAMD" Id = 0x580 Stepping = 0
Features=0x8001bf<FPU,VME,DE,PSE,TSC,MSR,MCE,CX8,MMX>
AMD Features=0x80000800<SYSCALL,3DNow!>
real memory = 268435456 (262144K bytes)
config> di sn0
config> di lnc0
config> di le0
config> di ie0
config> di fe0
config> di cs0
config> di bt0
config> di aic0
config> di aha0
config> di adv0
config> q
avail memory = 256311296 (250304K bytes)
Preloaded elf kernel "kernel" at 0xc0491000.
Preloaded userconfig_script "/boot/kernel.conf" at 0xc049109c.
md0: Malloc disk
Using $PIR table, 4 entries at 0xc00fde60
npx0: <math processor> on motherboard
npx0: INT 16 interface
pcib0: <Host to PCI bridge> on motherboard
pci0: <PCI bus> on pcib0
pcib1: <VIA 82C598MVP (Apollo MVP3) PCI-PCI (AGP) bridge> at device 1.0 on pci0
pci1: <PCI bus> on pcib1
pci1: <Matrox MGA G200 AGP graphics accelerator> at 0.0 irq 11
isab0: <VIA 82C586 PCI-ISA bridge> at device 7.0 on pci0
isa0: <ISA bus> on isab0
atapci0: <VIA 82C586 ATA33 controller> port 0xe000-0xe00f at device 7.1 on pci0
ata0: at 0x1f0 irq 14 on atapci0
ata1: at 0x170 irq 15 on atapci0
uhci0: <VIA 83C572 USB controller> port 0xe400-0xe41f irq 10 at device 7.2 on pci0
usb0: <VIA 83C572 USB controller> on uhci0
usb0: USB revision 1.0
uhub0: VIA UHCI root hub, class 9/0, rev 1.00/1.00, addr 1
uhub0: 2 ports with 2 removable, self powered
chip1: <VIA 82C586B ACPI interface> at device 7.3 on pci0
ed0: <NE2000 PCI Ethernet (RealTek 8029)> port 0xe800-0xe81f irq 9 at
device 10.0 on pci0
ed0: address 52:54:05:de:73:1b, type NE2000 (16 bit)
isa0: too many dependant configs (8)
isa0: unexpected small tag 14
fdc0: <NEC 72065B or clone> at port 0x3f0-0x3f5,0x3f7 irq 6 drq 2 on isa0
fdc0: FIFO enabled, 8 bytes threshold
fd0: <1440-KB 3.5" drive> on fdc0 drive 0
atkbdc0: <keyboard controller (i8042)> at port 0x60-0x64 on isa0
atkbd0: <AT Keyboard> flags 0x1 irq 1 on atkbdc0
kbd0 at atkbd0
psm0: <PS/2 Mouse> irq 12 on atkbdc0
psm0: model Generic PS/2 mouse, device ID 0
vga0: <Generic ISA VGA> at port 0x3c0-0x3df iomem 0xa0000-0xbffff on isa0
sc0: <System console> at flags 0x1 on isa0
sc0: VGA <16 virtual consoles, flags=0x300>
sio0 at port 0x3f8-0x3ff irq 4 flags 0x10 on isa0
sio0: type 16550A
sio1 at port 0x2f8-0x2ff irq 3 on isa0
sio1: type 16550A
ppc0: <Parallel port> at port 0x378-0x37f irq 7 on isa0
ppc0: SMC-like chipset (ECP/EPP/PS2/NIBBLE) in COMPATIBLE mode
ppc0: FIFO with 16/16/15 bytes threshold
ppbus0: IEEE1284 device found /NIBBLE
Probing for PnP devices on ppbus0:
plip0: <PLIP network interface> on ppbus0
lpt0: <Printer> on ppbus0
lpt0: Interrupt-driven port
ppi0: <Parallel I/O> on ppbus0
ad0: 8063MB <IBM-DHEA-38451> [16383/16/63] at ata0-master using UDMA33
ad2: 8063MB <IBM-DHEA-38451> [16383/16/63] at ata1-master using UDMA33
acd0: CDROM <DELTA OTC-H101/ST3 F/W by OIPD> at ata0-slave using PIO4
Mounting root from ufs:/dev/ad0s1a
swapon: adding /dev/ad0s1b as swap device
Automatic boot in progress...
/dev/ad0s1a: FILESYSTEM CLEAN; SKIPPING CHECKS
/dev/ad0s1a: clean, 48752 free (552 frags, 6025 blocks, 0.9% fragmentation)
/dev/ad0s1f: FILESYSTEM CLEAN; SKIPPING CHECKS
/dev/ad0s1f: clean, 128997 free (21 frags, 16122 blocks, 0.0% fragmentation)
/dev/ad0s1g: FILESYSTEM CLEAN; SKIPPING CHECKS
/dev/ad0s1g: clean, 3036299 free (43175 frags, 374073 blocks, 1.3% fragmentation)
/dev/ad0s1e: filesystem CLEAN; SKIPPING CHECKS
/dev/ad0s1e: clean, 128193 free (17 frags, 16022 blocks, 0.0% fragmentation)
Doing initial network setup: hostname.
ed0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
inet 192.168.0.1 netmask 0xffffff00 broadcast 192.168.0.255
inet6 fe80::5054::5ff::fede:731b%ed0 prefixlen 64 tentative scopeid 0x1
ether 52:54:05:de:73:1b
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x8
inet6 ::1 prefixlen 128
inet 127.0.0.1 netmask 0xff000000
Additional routing options: IP gateway=YES TCP keepalive=YES
routing daemons:.
additional daemons: syslogd.
Doing additional network setup:.
Starting final network daemons: creating ssh RSA host key
Generating public/private rsa1 key pair.
Your identification has been saved in /etc/ssh/ssh_host_key.
Your public key has been saved in /etc/ssh/ssh_host_key.pub.
The key fingerprint is:
cd:76:89:16:69:0e:d0:6e:f8:66:d0:07:26:3c:7e:2d root@k6-2.example.com
creating ssh DSA host key
Generating public/private dsa key pair.
Your identification has been saved in /etc/ssh/ssh_host_dsa_key.
Your public key has been saved in /etc/ssh/ssh_host_dsa_key.pub.
The key fingerprint is:
f9:a1:a9:47:c4:ad:f9:8d:52:b8:b8:ff:8c:ad:2d:e6 root@k6-2.example.com.
setting ELF ldconfig path: /usr/lib /usr/lib/compat /usr/X11R6/lib
/usr/local/lib
a.out ldconfig path: /usr/lib/aout /usr/lib/compat/aout /usr/X11R6/lib/aout
starting standard daemons: inetd cron sshd usbd sendmail.
Initial rc.i386 initialization:.
rc.i386 configuring syscons: blank_time screensaver moused.
Additional ABI support: linux.
Local package initialization:.
Additional TCP options:.
FreeBSD/i386 (k6-2.example.com) (ttyv0)
login: rpratt
Password:
生成 RSA 和 DSA密钥在比较慢的机器上可能要花很长时间。这只是一个 新安装后的首次启动,以后的启动会变得更快一点。
如果 X 服务器已经配置好了,默认的桌面也选择好了,就可以在命令行键入 startx 来启动视察环境。
一旦安装完成,您就可以键入下面的命令来启动FreeBSD:
>>>BOOT DKC0
这是从指定的固定硬件进行引导。如果要使 FreeBSD 下次能够自动启动, 使用下面的命令:
>>> SET BOOT_OSFLAGS A >>> SET BOOT_FILE '' >>> SET BOOTDEF_DEV DKC0 >>> SET AUTO_ACTION BOOT
启动信息跟启动 i386机器时差不多。(但不完全一样)
正确的关闭操作系统是很重要的。不要仅仅关闭电源。首先,您需要成为一个超 级用户,通过键入 su 命令来实现。然后输入 root 密码。这需要用户是 wheel 组的一名成员。然后,以root键入 shutdown -h now命令。
The operating system has halted. Please press any key to reboot.
当shutdown命令发出后,屏幕上出现 “Please press any key to reboot” 信息时,您就可以安全的关闭计算机了。如果按下任意一个键,计算机将重新启动。
您也能够使用 Ctrl+Alt+Del 组合键来重新启动计算机,但是不推荐使用这个操作。
FreeBSD当前可以广泛运行在ISA、VLB、EISA、PCI总线的PC上,包括 Inter,AMD,Cyrix或 NexGen “x86”系列的机器,还有一些 Compaq Alpha的机器。支持普通的 IDE 或 ESDI 驱动配置,各种SCSI控制器, PCMCIA卡,USB设备,网卡和其它网络串口设备。FreeBSD也支持IBM微通道 (MCA)的总线结构。
每个发行版都会提供一个FreeBSD支持的硬件列表。您可以在名字叫做 HARDWARE.TXT的文件中找到。它可以在CDROM或FTP发行组件 或sysinstall的文档菜单中找到。对于特定的架构,都 有相应的硬件支持列表。也可以在FreeBSD的网站 Release Information 找到更多的信息。
下面将介绍一些在安装过程中常见的问题,像如何报告发生的问题,如何 双重启动FreeBSD和 MS-DOS。/para>
由于pc结构的限制,不可能100%的不出现问题,但是有些问题是您可以 自己解决的。
先检查您的硬件,确保您的硬件被支持。
如果您的硬件能够被扶持,但还是会出问题,那就重新启动计算机。当出现 内核配置信息的时候,重新配置一下硬件信息。因为绝大多数硬件的IRQ,淡IO地 址,DMA通道都有它们的生产商预先进行默认配置。如果您的硬件已经重新装配了, 就需要使用配置编辑器告诉FreeBSD到哪里去找相关信息。
如果某个设备配置好后,发现又有个设备出现错误。碰到这种情况,就当卸掉 这个设备的驱动程序。
Note: 有些安装问题可以借助更新硬件的程序来解决,特别是主板的 BIOS 。大部分的主板制造商都会提供网站给用户下载新的 BIOS以及提供如何更新的说明。
也有许多制造商强烈建议,除非必要否则不要轻易更新 BIOS 。因为更新的过程可能 会发生问题,进而损害BIOS 芯片。
Warning不要在安装中把您必需的驱动程序卸掉,如您的监视器sc0 。如果安装中在修改守配置后,仍然会出现一些意想不到的情况,最好所配置文件恢复到原来 的样子。把它重新启动,再试一下。
在配置模式下,您可以:
列出在内核中安装的设备驱动程序。
禁用不适合您机器的设备驱动程序。
通过驱动程序改变IRQ,DRQ和IO端口地址。
调整内核与您的硬件设置一致之后,键入 Q ,以新的设置 重新启动计算机。当FreeBSD安装完成之后,在配置模式下做的更改会一直存在,不需 要在每次启动计算机时再重新设置。即使如此,有可能您会想建立一个定制内核使您 的系统效率达到最好,可以看看以下的链接 custom kernel。
许多FreeBSD的用户基于Microsoft 的 PC 上安装FreeBSD。以下是一些关于在这种系统中安装FreeBSD常会出现的问题。 FreeBSD 中有一个FIPS的应用程序。这个工具程序可以在 安装光盘的 tools 目录下找到或从FreeBSD 的镜像站点下载。
FIPS 允许您将现有的 MS-DOS 分区一分为二,保留原 原有的分区,让您安装到空出来的分区上。您首先要用 Windows的 Disk Defragmenter或 Norton Disk Tools来对 MS-DOS 分区进行碎片整理。然后, 就可以重新启动把FIPS 。 看一下安装菜单,估计一下大概需要 多少安装空间。随后您就可以在新分区上重新引导安装 FreeBSD请查阅 Distributions 菜单上您的安装类型需要多少空间。
有一个由PowerQuest公司生产的非常有用的工具。从 http://www.powerquest.com网站上 可以得到PartitionMagic。这个工具的功能比 FIPS要强大。如果您经常要添加或删除操作系统,强烈建议 您使用它。当然,它很贵。如果您只是想安装 FreeBSD 的话, FIPS 就已足够了。
现在 FreeBSD 还不支持经过Double Space™ 应用程序压缩过的文件系统。因此其它的文件系统在被FreeBSD访问其数据之前必须先 解压缩。它可以通过运行位于 Start> Programs > System Tools menu中的 Compression Agent程序来实现。
FreeBSD可以支持基于 MS-DOS 的文件系统。这要求您使用带参数的 mount_msdos(8) 命令 (在 FreeBSD 5.X版本,相应的命令为 mount_msdosfs(8)) 最常使用的是:
# mount_msdos /dev/ad0s1 /mnt
在此例子中, MS-DOS 文件系统位于主硬盘的第一个分区。您的情况可能与引不同, 查看命令 dmesg和 mount 的输出。它们应该 可以让您得到足够的分区信息。
Note: MS-DOS 的扩展分区会被映射在 FreeBSD分区的末尾。换句话说,分区号要大于 FreeBSD 正在使用的分区号。例如,第一个 MS-DOS 分区可能位于 /dev/ad0s1,FreeBSD 分区可能位于 /dev/ad0s2,跟着是 MS-DOS 的扩展分区位于 /dev/ad0s3。这可能会使您感觉迷茫。
NTFS 分区也可以通过类似 mount_ntfs(8) 命令挂接在FreeBSD上。
这节主要回答一些在Alpha系统上安装FreeBSD时经常问到的问题。
这节主要描述在一些特殊情况下如何安装FreeBSD。
这种类型的安装叫做 “headless install(无关安装)”, 因您正要安装FreeBSD的机器不是没带显示器,就是没有显卡。您可能会问那怎么安装? 可以使用一个串行控制台。串行控制台基本上是使用另外一台机器来充当主显示设备 和键盘。要这样做,只要执行下面的步骤:创建安装软件,请看 第 2.2.7 节一节说明。
按下面的步骤,修改这些软盘用来引导进入一个串行控制台:
通过启动软盘来引导进入一个串行控制台
如果您想用软盘,FreeBSD将进入它通常的安装模式。我们要把FreeBSD 引导进入串行控制台,需要这样做,您必须使用 mount(8)命令在FreeBSD系统 上挂一kern.flp的那个软盘。
# mount /dev/fd0 /mnt
现在您已经挂上了软盘, 需要进入 /mnt 目录:
# cd /mnt
这儿是您必须设置软盘引导进入串行控制台的地方。您必须制作一个包含 /boot/loader -h这行的叫做boot.config 的文件。所有这些是为了给引导程序一个标记以引导进入串行控制台。
# echo "/boot/loader -h" > boot.config
现在您已经正确配置好了软盘,您必须使用 umount(8) 命令卸下软盘。
# cd / # umount /mnt
现在您可以从软盘驱动器中取出软盘了。
连接您的 null Modem 线
您现在需要一根null modem线来连接两台机器。 只要连接两台机器的串口。 普通的串行线是不行的,您需要使用一根null modem的线, 因为它在一些十字交叉口有金属线。
开始启动安装
现在开始启动安装。把 kern.flp 的那张软盘 插入软盘驱动器,然后开启电源。
连接您的无头机器
现在您已经通过cu(1)连接到了那台机器。
# cu -l /dev/cuaa0
就这样!您已经能够通过您的cu session对话来控制 那台“无头”机器了。它将要求您把 mfsroot.flp的那张软盘 插入驱动器,然后它将提示选择使用哪种终端。只要选择FreeBSD的彩色控制台,然后 继续您的安装。
Note: 为了避免重复 “FreeBSD disc” 在这里指 FreeBSD CDROM or DVD 那即意味着您要购买或自己制做。
有好几个原因需要您创建自己的FreeBSD安装介质。这可能是物理介质,如磁带, 使用 sysinstall程序找到的安装文件,FTP站点或 MS-DOS分区。
例如:
您有许多机器连接到本地网络,使用一个FreeBSD光盘。您要使用FreeBSD来 创建一个本地FTP站点,然后使用这个FTP站点来代替连接到Internet。
您有一张 FreeBSD 光盘, FreeBSD 不支持您的 CD/DVD 驱动器, 但 MS-DOS/Windows 支持。 您要复制安装文件到一个DOS分区, 然后使用这些文件进行安装。
您要安装的计算机没有 CD/DVD驱动器和网卡,但您可以连接一个 “Laplink-style” 串口或并口线缆到那台计算机。
您要通过一个磁带机来安装FreeBSD.
FreeBSD的每个发行版本都提供两张CDROM映像(“ISO images”)。 如果您有刻录机,这些映像文件可以被(“burned”) 成FreeBSD的安装光盘。 如果没有刻录机,而上网带宽却很便宜,它也是一种很好的安装方式。
下载正确的 ISO 映像文件
每个版本的ISO映像文件都可以从 ftp://ftp.FreeBSD.org/pub/FreeBSD/ISO-IMAGES-arch/version 或最近的镜像站点下载。选择合适的 arch version 。
目录中包含下面一些映像文件:
Table 2-5. FreeBSD ISO映像文件名和含意
| 文件名 | 包含内容 |
|---|---|
| 版本-bootonly.iso | 引导 FreeBSD 内核并启动安装界面所需的全部数据。 安装文件可以从 FTP 或其他安装源获得。 |
| version-mini.iso | 您安装 FreeBSD所需要的最基本的东西。 |
| version-disc1.iso | 您安装 FreeBSD所需要的最基本的东西,和一些附加的第三方厂商的试用版软件包 |
| version-disc2.iso | “live filesystem”,它是用来在 sysinstall程序里用来 “修复”系统 用的。里面包含 FreeBSD CVS 树的一个拷贝,还有许多附加的第三方厂商的试用 版软件包。 |
您 必须 下载 mini ISO 或第一张光盘的镜像之一。 不需要两个都下载, 因为第一张光盘包括了 mini ISO 的全部内容。
如果访问 Internet 的价格便宜, 建议使用 mini ISO。 这样您可以安装 FreeBSD, 并从网上通过 ports/packages 系统来下载并安装第三方的软件包 (参见 第 4 章), 如果需要的话。
如果您想适当的在安装介质上安装一些第三方的软件包,那么您可以使用 disc one映像盘。
其它的映像盘也是很有用的,但不是必须的,尤其是在您有高速的网络连接时。
刻录 CDs
您必须把这些映像文件刻录成光盘。如果您在其它的FreeBSD系统上完成 此项工作,请看 第 16.6 节 得到更多的信息,(特别是 第 16.6.3 节 和 第 16.6.4 节)
如果您在其它的系统平台上执行,您需要相应的刻录软件。映像文件使用 的是标准的ISO格式,必须被您的刻录软件所支持。
Note: 如果有兴趣制作一张定制的 FreeBSD 版本, 请参考 Release Engineering Article。
FreeBSD 光盘的布局和 FTP 站点相同。 这样, 建立局域网 FTP 站点来用于网络上的其它计算机安装 FreeBSD, 就十分的容易。
在要作为FTP站点的那台FreeBSD机器上,确定FreeBSD磁盘放入光驱 中并将它挂在/cdrom目录中。
# mount /cdrom
在/etc/passwd文件中建立一个可匿名访问FTP 服务器的账号。您可以利用vipw(8) 命令编辑/etc/passwd 文件,加入下面这一行叙述:
ftp:*:99:99::0:0:FTP:/cdrom:/nonexistent
确定在/etc/inetd.conf配置文件中开启 了FTP服务。
任何本地网络中的机器在安装FreeBSD选择安装介质时就可以选择透过 FTP站点,然后选取 “Other”后输入 ftp://本地FTP服务器 即可以透过本地的FTP站点来安装FreeBSD。
Note: 如果您 FTP 客户机使用的启动盘 (通常是软盘) 同局域网 FTP 站点上的版本不一致, sysinstall 将不允许继续安装。 如果是一个类似的版本, 并希望绕过这一判断过程, 您需要进入 Options 菜单, 并将 distribution 名称改为 any。
Warning此方式最好使用在有防火墙保护的内部网络。如果要将此FTP服务公开给外面的 网际网络(非本地用户),您的电脑必须承担被侵入或其它的风险。我们强烈建议您 要有完善的安全机制才这样做。
如果您从软盘安装(我们不推荐那样做),或者是由于 不支持硬件或者更简单的理由是因为您坚持要使用软盘安装。您必须准备几张软盘。
至少这些软盘必须是 1.44 MB 或 1.2 MB 的,用来容纳所有在 bin (二进制软件包)目录下的文件。如果您在DOS操作系统 下准备就 MUST使用 MS-DOS下的 FORMAT 命令来格式化软盘。如果您使用的是 Windows操作系统,在文件浏览器中用右键 单击 A: 驱动器,并选择 “Format”。
不要 指望厂家的预先格式化!最好还是亲自进行格式化。 过去用户报告的很多问题都是由于不正确地使用格式化设备所造成的,所以我们需要在这 儿着重提一下。
如果您在另外一台FreeBSD的机器上做了启动盘的话,进行格式化是一个不 错的主意。虽然您不需要把每张盘都做成DOS文件系统。您也可以使用 disklabel 和 newfs 命令来创建一个UFS文件系统,具体操作按下面的顺序进行:
# fdformat -f 1440 fd0.1440 # disklabel -w -r fd0.1440 floppy3 # newfs -t 2 -u 18 -l 1 -i 65536 /dev/fd0
Note: 如果使用 5.25"软盘的话,需要使用 fd0.1200 和 floppy5 来格式化 1.2 MB 的磁盘空间。
然后您就可以像其它的文件系统一样挂上和写入这些磁盘。
格式化这些磁盘后,您必须拷贝文件到磁盘中。这些发行文件被分割成刚 好可存进五张 1.44 MB 软盘。检查您所有的磁盘,找出所有可能适合的文件。 直到您找到所有需要的配置并且将它们以这种方式安置。第一个配置都应该有一个 子目录在磁盘上,例如: a:\bin\bin.aa, a:\bin\bin.ab, 等等。
一旦您进入选择安装介质的屏幕,选择 Floppy 将会看到后面的提示符。
如果从一个 MS-DOS 分区安装,您需要从发布文档拷贝文件到分区 要目录下一个叫做 freebsd 的目录中。例如: c:\freebsd。CDROM或FTP站点目录中的内容会部分的 拷贝到这个目录中,如果从光盘中拷贝,所以我们建议您使用DOS的 xcopy 命令。例如,准备一个最小的FreeBSD安装。
C:\> md c:\freebsd C:\> xcopy e:\bin c:\freebsd\bin\ /s C:\> xcopy e:\manpages c:\freebsd\manpages\ /s
假设 C: 盘是您的空闲空间, E: 盘是您挂接的 CDROM。
如果您没有光盘驱动器,您可以从以下网站下载发行包。 ftp.FreeBSD.org. 每一个发行包都在一个目录中,例如 base 发行包可以在 5.4/base/目录中找到。
Note: 在 4.X 和其它老版本的 FreeBSD the “base”发行包被叫做 “bin”. 如果您使用这些版本的话,请调整上例中的命令和URLS.
对很多发行包来说,如果您希望从 MS-DOS分区安装的话(您有足够的空间), 安装 c:\freebsd -- 下的每个文件-这个 BIN 发行包只是最低限度的要求。
从磁带安装也许是最简单的方式,比在线使用 FTP 安装或使用 CDROM 还快。 安装的程序假设是简单地被压缩在磁带上。在您到所有配置文件后,简单的解开它们, 用下面的命令:
# cd /freebsd/distdir # tar cvf /dev/rwt0 dist1 ... dist2
在您安装的时候,您要确定留有足够的空间给临时目录(允许您选择) 来容纳磁带安装时 全部 的内容。由于不是随机访问 磁带的,所以这种安装方法需要很多临时空间。
Note: 开始安装时,在从软盘启动before,磁带机 必须已经放在驱动设备中。否则,安装过程中可能会找不到它。
有三种类型的网络安装方法。串口(SLIP或PPP),并口(PLIP),以太网 (标准的以太网控制器,包括PCMCIA)。
SLIP 支持是相当原始的,并且被限制在主要对hard-wired 的连接,就像 一台膝上型计算机与另一台计算机间的串行线。现在的SLIP的安装还没有提供拨号功能, 这个连接应该是 hard-wired ;用PPP工具提供的这种便利性应该首先尽可能被用于SLIP 设备。
如果您使用一个MODEM,那您就只有PPP这一种选择了。在您安装的过程中, 要确定您能很容易地获得完整且快速的关于您服务提供商的信息。
如果您使用 PAP 或 CHAP 方式连接到您的 ISP,(换句话说,如果您不使用 脚本在Windows中连接到您的ISP),那么您需要在ppp 提示符下输入dial 命令。否则,当PPP连接者只提供一种最简单的 终端模拟器,您必须知道如何使用针对MODEM的 “AT commands”拨号到您 的ISP。想知道更深入的信息可以参考用户级PPP那节 handbook and FAQ 。如果您有一些问题,可以使用 set log local ...命令将日志显示在屏幕上。
您也可以通过并口电缆连接到另外一台FreeBSD(2.0或以后的版本)机器上进行 安装,您可以考虑使用 “laplink” 并口电缆进行安装。通过并口安装要 比通过串口(最高 50 kbytes/sec)安装快得多。
最后,通过网络安装最快的方法是利用以太网技术!FreeBSD支持绝大多数普通 的以太网卡。每个FreeBSD发行版都在硬件注释中提供支持的网卡的列表和需要的设置。 如果您要使用PCMCIA接口的以太网,在启动计算机 before, 确信已经把它插好了。目前,FreeBSD还不支持PCMCIA的热插拔。
通过网络安装,您可能需要知道IP地址,地址掩码,还有机器的�字。如果您 通过PPP进行安装,就不需要静态的IP地址,IP地址会由ISP给您自动指派。您的系统 管理员会告诉您通过网络安装的细节。如果您通过主机名而不是IP地址来访问其它主 机,需要有一个域名服务器或一个网关地址(如果您使用PPP进行安装,那它就您的 的ISP的IP地址)。如果您要通过一个HTTP的代理服务器进行FTP安装,需要一个代理 服务器地址。如果您不知道这些,在安装 before可以询问 您的系统管理员或您的ISP服务商。
NFS安装方式是非常方便的。只需要简单地将FreeBSD文件拷贝到一台服务器上, 然后在安装时选择NFS介质。
如果这个服务器要“特权端口”才能支持(如SUN的工作站), 您需要在安装前在 Options 菜单中设置 NFS Secure。
如果您的一台网卡比较糟糕,速度很慢,则应考虑 NFS Slow的选项。
为了达到NFS安装的目的,这个服务器必须支持 subdir 加载。例如,如果您的 FreeBSD 5.4 目录存在: ziggy:/usr/archive/stuff/FreeBSD,然后 ziggy 将必须允许直接挂上 /usr/archive/stuff/FreeBSD,而不仅仅是 /usr 或 /usr/archive/stuff。
在 FreeBSD的 /etc/exports 配置文件中,是由 -alldirs 选项来控制的。其它 NFS服务器也许有不同的方式。 如果您从服务器得到“permission denied” 这个信息,可能是因为您没有正确的启用它。
下列章节的命令和功能适用于FreeBSD操作系统。 同时这里许多内容和一些 UNIX 类似操作系统相关。 假如您已经熟悉这些内容可跳过不阅读。 假如您是FreeBSD新手, 那您应该认真详细地从头到尾读一遍这些章节。
读取这些内容,您将了解:
怎样在FreeBSD使用 “虚拟控制台”。
在 UNIX 中文件权限如何运作, 以及理解 FreeBSD 中的文件标志。
FreeBSD 默认文件系统的架构。
FreeBSD磁盘架构。
怎样挂接或卸下文件系统。
什么是进程、守护进程、信号。
什么是shell,应当怎样去改变登录进入的默认环境。
怎样使用基本的文本编辑器。
什么是设备,什么是设备节点。
FreeBSD 下,使用的是什么可执行文件格式。
怎样使用 man 手册并取得更多资讯。
FreeBSD能多方面应用,其中之一它能在字符终端输入命令。 您可以在这方面容易地使用FreeBSD这个有强大适应性和功能的 UNIX 系统, 这部份介绍 “多终端” 和“多控制台”, 和您在 FreeBSD 应怎样使用它们。
假如您没有设置到 FreeBSD 在启动期间给出图形登录, 那么系统将在引导和启动脚本正确运行完成后,给您一个登录的提示。 您会看到类似这样的界面:
Additional ABI support:. Local package initialization:. Additional TCP options:. Fri Sep 20 13:01:06 EEST 2002 FreeBSD/i386 (pc3.example.org) (ttyv0) login:
这些信息可能和您的系统稍微有点不同,但不会有很大差别。 最后两行是我们感兴趣的, 理解这一行:
FreeBSD/i386 (pc3.example.org) (ttyv0)
这一行是您刚才启动的系统信息其中一块, 您所看到的是一个“FreeBSD”控制台, 运行在一个Intel或兼容的x86体系架构上面[1]。这个结构名称 (每一种UNIX结构都有自己的名称) 叫 pc3.example.org, 就是现在这个系统控制台--这个 ttyv0 终端的样子。
在最后,最后一行一直保持这样:
login:
假设在这一部份您的用户名 “username”已经注册在FreeBSD里, 那一步介绍您应怎样做。
FreeBSD是一个多用户和多重处理的系统, 这个介绍换句话来说就是一个系统可容纳许多不同的用户, 谁都可以同时在单一结构下运行大量的程序。
每一个多用户系统都必须在某方面去区别“user”, 在FreeBSD里 (和这UNIX 类似的操作系统),完成这方面工作是有必要的, 每位使用者在运行程之前都必须“登录”, 每位用户都有他的用户名 (“username”) 和密码 (“password”)。 FreeBSD 会在用户进入之前作出两次询问。
在FreeBSD启动和启动脚本正确运行完后 [2],它将要求您提供一个有效的用户名:
login:
举个例子更容易理解,我们假设您的用户名叫john。 在提示符下输入 john并单击Enter, 此时您应该看到这个提示“password”:
login: john Password:
现在输入 john的密码,和单击 Enter。这个密码是没有回显的! 您在这时不必担心,它出于安全考虑才这样做的。
假如您输入的密码是正确的,您应该尽快进入FreeBSD并为练习可用的命令作好准备。
您应该看见 MOTD 或者出现一个命令提示符 (#、$ 或 % 字符). 这表明您已成功登录进入FreeBSD。
在一个控制台运行 UNIX 命令虽说很好, 但 FreeBSD 具有一次运行 多个程序的能力。 仅使用一个控制台只会浪费 FreeBSD 同时运行多任务的能力。 而 “虚拟控制台” 在这方面发挥强大的功能。
FreeBSD 能配置出给您不同需求的虚拟控制台, 在键盘上您用一组键就能从各个虚拟控制台之间切换。 各个控制台有自己的传输通道, 当您从各个控制台切换时 FreeBSD 会切换到合适的键盘传输通道和显示器传输通道。
FreeBSD 各个控制台之间可利用特殊组键切换并保留原有控制台 [3],您可这样做: Alt-F1, Alt-F2, 一直到 Alt-F8 在FreeBSD里切换到其中一个虚拟控制台。
同样地, 您正在从其中某个控制台切换到另一个控制台的时候, FreeBSD 会保存正在使用和恢复将要使用屏幕传输通道。 这种结果形成一种 “错觉”, 您拥有许多“虚拟”屏幕和键盘可以输入很多的命令。 这些程序需要在一个虚拟控制台不能停止运行而又不需要观察它, 它继续运行而您可以切换到其他的虚拟控制台。
FreeBSD 虚拟控制台的默认配置为8个,但并不是硬性设置, 您可以很容易设置虚拟控制台的个数增多或减少。 虚拟控制台的的编号和设置在 /etc/ttys 文件里。
您可以使用 /etc/ttys 文件在 FreeBSD 下配置虚拟控制台。 文件里每一未加注释的行都能设置一个终端或虚拟控制台 (当行里含有 # 这个字符时不能使用) 。 FreeBSD 默认配置是配置出9个虚拟控制台而只能启动8个, 以下这些行是 ttyv 一起启动:
# name getty type status comments # ttyv0 "/usr/libexec/getty Pc" cons25 on secure # Virtual terminals ttyv1 "/usr/libexec/getty Pc" cons25 on secure ttyv2 "/usr/libexec/getty Pc" cons25 on secure ttyv3 "/usr/libexec/getty Pc" cons25 on secure ttyv4 "/usr/libexec/getty Pc" cons25 on secure ttyv5 "/usr/libexec/getty Pc" cons25 on secure ttyv6 "/usr/libexec/getty Pc" cons25 on secure ttyv7 "/usr/libexec/getty Pc" cons25 on secure ttyv8 "/usr/X11R6/bin/xdm -nodaemon" xterm off secure
您能在这文件详细设置每行的参数,加载虚拟控制台启动所需要的物件。 请参考 ttys(5) 联机手册。
关于 “单用户模式” 详细介绍在 第 12.6.2 节 这里可以找到。 当您运行单用户模式时只能使用一个控制台, 没有多个虚拟控制台可使用。 单用户模式的控制台同也可以在 /etc/ttys 文件设置, 可在这行找到要启动的控制台:
# name getty type status comments # # If console is marked "insecure", then init will ask for the root password # when going to single-user mode. console none unknown off secure
Note: 这个 console 已经注释掉, 您可编辑这行把 secure 改为 insecure。 这样, 当用单用户进入 FreeBSD 时, 它仍然要求提供 root 用户的密码。
在把这个选项改为 insecure 的时候一定要小心, 如果您忘记了 root用户的密码, 进入单用户会有点麻烦。 尽管仍然能进入单用户模式, 但如果您不熟悉它就会非常令人头疼。
FreeBSD,是 BSD UNIX 的延续, 并基于几个关键的 UNIX 观念。 从一开始就多处提到 FreeBSD 是一个多用户的操作系统, 它能分别处理几个同时工作的用户所分配的毫无关联任务。 并负责为每位用户的硬件设备、 外设、 内存和 CPU 处理时间作出合理安排。
因为系统有能力支持多用户, 在每一方面系统都会作出谁能读、 写和执行的资源权力限制。 这点权限以三个八位元的方式储存着, 一个是表示文件所属者, 一个是表示文件所属群组, 一个是表示其他人。 这些数字以下列方式表示:
| 数值 | 权限 | 目录列表 |
|---|---|---|
| 0 | 不能读,不能写,不能执行 | --- |
| 1 | 不能读,不能写,可执行 | --x |
| 2 | 不能读,可写,不能执行 | -w- |
| 3 | 不能读,可写,可执行 | -wx |
| 4 | 可读,不能写,不能执行 | r-- |
| 5 | 可读,不能写,可执行 | r-x |
| 6 | 可读,可写,不能执行 | rw- |
| 7 | 可读,可写,可执行 | rwx |
使用命令的 -l (ls(1)) 参数可以显示出文件的所属者、 所属组和其他人等属性。 请看以下的例子:
% ls -l total 530 -rw-r--r-- 1 root wheel 512 Sep 5 12:31 myfile -rw-r--r-- 1 root wheel 512 Sep 5 12:31 otherfile -rw-r--r-- 1 root wheel 7680 Sep 5 12:31 email.txt ...
使用 ls -l 在每行的开始出现了:
-rw-r--r--
从左边起的第一个字,告诉我们这个文件是一怎样的文件: 普通文件?目录?特殊设备?socket?或是设备文件? 在这个例子, - 表示一个普通文件。 接下来三个字是 rw- 是文件拥有者的权限。 再接下来的三个字是 r-- 是文件所属群组的权限。 最後三个字是 r-- 是其他人的权限。 以这一个文件为例,他的权限设定是拥有者可以读写这个文件、群组可以读取、 其他使用者也能读取这个文件。 根据上面的表格, 用数字表示这个文件其三部分的权限应该是 644。
这样很好,但系统怎样对设备进行权限控制的? 事实上 FreeBSD 将大部份设备(的每一个设备)当作一个文件看待, 用程序能打开、读取、写入数据就如其他的文件一样。 而设备文件放在 /dev 目录。
目录也视为一种文件,也有读取、写入、执行的权限。 但目录的执行权限意义并不与普通文件相同, 实际上执行权限是进入权限。 当一个目录是被标示可以执行的时候,那表示它可以被进入, 利用 “cd” (变化目录位置)可以进入。 这意味着访问这些目录必须是谁才有权力 (当然目录下的文件也受到访问限制)。
详细方面,想读取一个目录的列表就必须设为可读权限, 同时想删除一个已知的文件,就必须把目录下这个文件设为可写 和 执行权限。
还有更多权限设定, 但是他们大多用在特殊状况下如一个setuid的执行文件和粘贴性目录, 如果想要得知有关文件权限和如何设定的更多资讯,请看手册chmod(1)。
权限符号,某些时候就是指符号表达式, 使用八进制的字符给目录或文件分配权限。 权限符号的使用语法是 (谁) (作用) (权限)。 看看下列数值的在那些地方所起什么样的作用:
| 选项 | 字母 | 介绍 |
|---|---|---|
| (谁) | u | 用户 |
| (谁) | g | 所属群体 |
| (谁) | o | 其他人 |
| (谁) | a | 所有人 (“全部”) |
| (作用) | + | 增加权限 |
| (作用) | - | 减少权限 |
| (作用) | = | 确定权限 |
| (权限) | r | 可读 |
| (权限) | w | 可写 |
| (权限) | x | 执行 |
| (权限) | t | 粘贴位 |
| (权限) | s | 设置 UID 或 GID |
这些数值 chmod(1) 以习惯标定的。 举个例子,用以下命令阻止其他人访问 FILE文件:
% chmod go= FILE
倘若对一个文件作太多的变化设置可用逗号分开, 在下面的例子里, 可以去掉FILE文件的群体和 “全部” 可写权限, 但所有人都可以有执行权限:
% chmod go-w,a+x FILE
在前面所介绍的文件权限的基础之上, FreeBSD 还支持使用 “文件标志”。 这些标志为文件提供了进一步的安全控制机制, 但这些控制并不适用于目录。
这些文件标志提供了针对文件的进一步控制, 帮助确保即使是 root 用户也无法删除或修改文件。
文件标志可以通过使用 chflags(1) 工具来修改, 其用户界面很简单。 例如, 要在文件 file1 上应用系统禁删标志, 应适用下述命令:
# chflags sunlink file1
要禁用系统禁删标志, 只需在前述命令中的 sunlink 标志前加 “no”。 例如:
# chflags nosunlink file1
要显示文件上的标志, 应使用 ls(1) 的 -lo 参数:
# ls -lo file1
删除应类似于:
-rw-r--r-- 1 trhodes trhodes sunlnk 0 Mar 1 05:54 file1
许多标志只可以由 root 用户来增加, 而另一些, 则可以由文件的所有者来增加。 建议管理员仔细阅读 chflags(1) 和 chflags(2) 联机手册, 以对其加深理解。
目录层次是理解一个系统的重要基础, 最重要的莫过于它的根目录 “/”, 这个目录在启动时就就挂上, 它包含了启动时所需的基本系统。 这个根目录同样包含了想要挂接的每一个文件系统。
挂接点 (mount point) 是新增的文件系统在接入现有系统时的起点位置。 标准的挂接点包括 /usr、 /var、 /tmp、 /mnt, 以及 /cdrom。 这些目录通常会在 /etc/fstab 文件中提及。 /etc/fstab 是一张包含系统中各个文件系统及挂接点的表。 在 /etc/fstab 中的绝大多数文件系统都会在启动时由 rc(8) 脚本自动挂接, 除非特别指定了 noauto 选项。 更多细节请参考 第 3.6.1 节。
您可以通过 hier(7) 来了解完整的文件系统层次说明。 现在, 让我们先来看一看绝大多数的常见的目录以供参考。
| 目录 | 介绍 |
|---|---|
| / | 文件系统的根目录。 |
| /bin/ | 在单个用户和多用户环境下的基本工具目录。 |
| /boot/ | 在操作系统在启动加载期间所用的程序和配置。 |
| /boot/defaults/ | 默认每步引导启动的配置内容,请查阅loader.conf(5)。 |
| /dev/ | 设备接点,请查阅 intro(4)。 |
| /etc/ | 系统启动的配置和脚本。 |
| /etc/defaults/ | 系统默认的启动配置和脚本,请参考 rc(8) 。 |
| /etc/mail/ | 关系到邮件系统运作的配置, 请参考 sendmail(8)。 |
| /etc/namedb/ | named 配置文件,请参考 named(8)。 |
| /etc/periodic/ | 每天、每星期和每月周期性地运行的脚本, 请通过 cron(8)查阅 periodic(8)。 |
| /etc/ppp/ | ppp配置文件,请查阅ppp(8)。 |
| /mnt/ | 由管理员习惯使用挂接点的临时空目录。 |
| /proc/ | 运行中的文件系统,请参阅 procfs(5) 和 mount_procfs(8)。 |
| /rescue/ | 用于紧急恢复的一组静态联编的程序; 参见 rescue(8)。 |
| /root/ | root用户的Home(主)目录。 |
| /sbin/ | 在单个用户和多用户环境下的存放系统程序和管理所需的基本实用目录。 |
| /stand/ | 持久独一无二的程序环境。 |
| /tmp/ | 存放临时文件,通常存放一些系统重启后不需要保护的 mfs(8) 基于内存的文件系统。 |
| /usr/ | 存放大多数用户的应用软件。 |
| /usr/bin/ | 存放实用命令,程序设计工具,和应用软件。 |
| /usr/include/ | 存放标准 C include 文件. |
| /usr/lib/ | 存放库文件。 |
| /usr/libdata/ | 存放各种实用工具的数据文件。 |
| /usr/libexec/ | 存放系统实用或后台程序 (从另外的程序启动执行)。 |
| /usr/local/ | 存放本地执行文件, 库文件等等, 同时也是 FreeBSD ports 安装的默认安装目录。 /usr/local 在 /usr 总体布置请查阅 man.hier.7;。 man 目录例外, 它们直接放在 /usr/local 而不是 /usr/local/share 下, 而 ports 说明文档在 share/doc/port。 |
| /usr/obj/ | 通过联编 /usr/src 得到的目标文件。 |
| /usr/ports | 存放 FreeBSD 的 Ports Collection (可选)。 |
| /usr/sbin/ | 存放系统后台程序 和 系统工具 (由用户执行)。 |
| /usr/share/ | 存放架构独立的文件。 |
| /usr/src/ | 存放 BSD 或者本地源码文件。 |
| /usr/X11R6/ | 存放 X11R6 可执行文件、 库文件、 配置文件等的目录(可选)。 |
| /var/ | 存放多用途记录、临时性、短期的和打印假脱机系统文件. |
| /var/log/ | 存放各种的系统记录文件。 |
| /var/mail/ | 存放用户mailbox(一种邮件存放格式)文件。 |
| /var/spool/ | 各种打印机和邮件系统spooling(回环)的目录。 |
| /var/tmp/ | 存放系统重启前受控制的临时文件。 |
| /var/yp | NIS 映射。 |
FreeBSD 查找文件的最小单位是文件名。 而文件名区分大小写,这就意味着 readme.txt 和 README.TXT 是两个不相同的文件。 FreeBSD 不凭文件扩展名 (.txt) 去识别这个文件是 程序、 文档, 或是其他格式的数据。
各种文件存放在目录里。 一个目录可以含有许许多多的文件, 允许含有其他的目录,同样允许您添加不同层次的目录在里面。 可以轻松地组织您的数据。
可以通过文件或目录名来指定文件和目录, 在目录名后面加上一个斜线, /, 如果需要的话。 如果您有一个名为 foo 的目录, 它包含另一个目录 bar, 后者重包括一个叫 readme.txt 的文件, 则全名, 或者说到文件的 路径 就是 foo/bar/readme.txt。
在文件系统里目录和文件的作用是存储数据。 每一个文件系统都正确含有一个顶级目录根目录, 这个根目录包含其他目录。
您也许在其他的一些操作系统碰到类似这里的情况, 当然也有不同的情况。 举些例子, MS-DOS 是用 \ 分隔文件名或目录名, 而 Mac OS® 则使用:。
FreeBSD在路径方面不使用驱动器名符号或驱动器名称, 在FreeBSD里您不能这样使用: c:/foo/bar/readme.txt。
为了代替(驱动器名符号), 一个文件系统会指定 根 文件系统, 根文件系统的根目录是 /。 其他每一个文件系统 挂接在根文件系统下。 无论有多少磁盘在FreeBSD 系统里, 每个磁盘都会以目录的方式加上。
假设您有三个文件系统, 名为 A、 B 和 C。 每个文件系统有一个根目录, 而各自含有两个其他的目录, 名为 A1, A2 ( B1, B2 和 C1, C2)。
看看 A 这个根文件系统。 假如您用 ls 命令来查看这个目录您会见到两个子目录: A1 和 A2。 这个目录树是这个样子:

一个文件系统必须挂到另一个文件系统的某一目录, 所以现在假设把 B 文件系统挂到 A1目录, 那 B 根目录因此代替 了 A1,而显示出 B 目录(的内容):

无论B1 或 B2 目录在那里而延伸出来的路径必须为 /A1/B1 或 /A1/B2。 而在 /A1 里原有的文件会临时隐藏。 想这些文件再出现把 B 从 A 挂接释放。
把 B 挂接在 A2 那图表的样子就是这样子:

这个路径分别是 /A2/B1 和 /A2/B2 。
文件系统能把顶部挂接上另一个文件系统上。 继续这个例子, 把 C 文件系统挂接在 B 文件系统里的 B1 目录, 排列如下:

或者把 C 文件系统挂接在 A 文件系统里的A1目录:

假如您熟悉 MS-DOS并知到join 命令, 尽管不相同,其实是相似的。
这方面不是普通知识而且涉及到您自己所关心的, 当您安装FreeBSD并在以后添加新磁盘时, 您必须知到该如何新建文件系统和挂接上。
(FreeBSD系统)它有一个主要的根文件系统, 不需要另外新建立, 但当需要手工处理时,这是一个有用的知识。
多样性文件系统的益处
不同的文件系统可用不同的 挂接参数。 举些例子, 仔细想一下, 根文件系统能用只读的方的方式挂接上, 防止不经意删除或编辑到一个危险的文件。 把各用户能写入的文件系统分开, 像/home这样, 由另外的文件系统分别用 nosuid 参数挂接,这个参数防止 suid/guid 在执行这个文件系统中的文件时生效, 从而缓解了一些安全问题。
FreeBSD 对一个文件系统的文件布局自动优化, 并依赖文件系统的使用习惯。 所以一个文件系统应有一个针对大量小型文件频繁写入的优化, 另外大型文件系统的优化也应落实。
FreeBSD 的文件系统能够在断电时尽可能避免损失。 然而, 在关键点时的电源失效仍然可能会破坏文件系统的结构。 将您的文件系统分成多个有助于分散风险, 并方便备份和恢复。
统一文件系统的益处
文件系统是固定大小的。 当安装FreeBSD时新建一个文件系统并设定一个大小, 您会在稍后发觉到必须去建一个大的分区。 如果配置不当, 则需要备份、 重新创建文件系统, 然后再恢复数据。
Important: FreeBSD 4.4 或更高的版本提供了 growfs(8) 命令。 这使得能够实时地调整文件系统的大小, 因而不再受其限制。
文件系统是和分区一一对应的。 这里的分区和常用的术语分区 (例如, MS-DOS 分区) 的意思并不一样, 这是由于 FreeBSD 的 UNIX 传统造成的。 每一个分区使用一个从 a 到 h 的字母来表示。 每个分区只能包含一个文件系统, 这意味着文件系统通常可以由它们在文件系统目录结构中的挂接点, 或对应的分区字母来表示。
FreeBSD 的 交换分区 也需要使用磁盘空间。 交换分区是给 FreeBSD 作 虚拟内存 使用的, 这样能令您的计算机有更多的内存可使用, 当FreeBSD在运行而内存不够的时候, 它会把其他一些可转移的数据转移到交换分区, 空出内存的位置以供使用。
某些 partitions 的用途是确定的。
| 分区 | 约定 |
|---|---|
| a | 通常指定为根文件系统 |
| b | 通常指定为交换分区 |
| c | 通常它和所在的 slice 大小相同。 c 分区上工作时必定会影响到事整个 slice (举个例子,坏块扫描器)。 您通常不愿意在这个partition建立文件系统。 |
| d | 分区 d 曾经有特殊的含义, 虽然(对我们来说)早已远离而去。 但直到今天,一些工具在 分区 d上运行会发生古怪事情, 所以 sysinstall 通常不建立分区 d。 |
每一个包含了文件系统的分区被保存在 FreeBSD 称为 slice 的部分上。 Slice 是一个 FreeBSD 术语, 通常被叫做分区, 再次强调, 这是由于 FreeBSD 的 UNIX 背景。 Slices 有其编号, 从1到4。
Slice 编号在设备名后面, 并有一个 s 前缀, 从 1 开始。 因此 “da0s1” 是第一个 SCSI 驱动器的第一个 slice。 每个磁盘上只能有四个物理的 slices, 但您可以在物理 slice 中使用适当的类型来创建逻辑 slice。 这些扩展 slice 编号从 5 开始, 因此 “ad0s5” 是第一个 IDE 磁盘中的第一个 扩展 slice。 文件系统所使用的设备应该占满 slice。
Slices, “专项指定” 物理驱动器, 和其他驱动器都包含partitions, 那几个的partitions都是用字母 从 a 到 h来标定的, 而这些字母都在驱动器名字之后,所以 “da0a” 是指首个da设备的 a partition, 而那个就是 “专项指定”。 “ad1s3e” 是指IDE磁盘第三个slice的第五个partition。
最终,每个磁盘都被系统识别。 一个磁盘名字是用磁盘类型代码和编号来标识的, 它不像slices,磁盘的编号是由0开始的。 对应代码请看这里所列出的表 3-1。
当提供一个partition名字给FreeBSD时, slice 和 磁盘所必须有这个partition,还应当提供所partition所涉及 到的slice和磁盘的名字。可这样列出: 磁盘名称,s,slice 编号,和partition标定字母。 例子请看这里 例 3-1。
例 3-2 这里显示了一个磁盘的布局,有更清楚的帮助。
在安装FreeBSD时,您首先要配置好磁盘slices, 然后在FreeBSD使用的slice上建立partitions。 并在每个partition上建立一个文件系统(或交换分区), 和指定文件系统的挂接位置。
这种文件系统就像一棵树那样用/确立根部, 是比较理想的文件系统。 而/dev、 /usr和其他目录 就是根目录的分枝, 另外这些目录可以再分枝,例如/usr/local。
应该考虑给某些目录一些空间从而分散文件系统。 /var 之下包含目录 log/,目录spool/, 和不同类型的临时文件,很可能把它塞满。 把什么都塞进根文件系统不是一个好主意, 好的做法是应该把 /var 从 /分离出去。
另一个要考虑的是,给物理设备或虚拟磁盘这些自带空间的文件系统确定目录结构树。 例如 网络文件系统 或光驱的挂接。
在导入处理期间, 自动挂上/etc/fstab所列出的文件系统。 (除非他们注明为noauto 选项)。
/etc/fstab 文件包含的各行的列表格式如下:
device /mount-point fstype options dumpfreq passno
设备名称(设备必须存在), 说明在 第 16.2 节.
目录 (目录必须存在), 用在那个挂接上的文件系统上。
文件系统类型,请通过mount(8)查阅。 默认的FreeBSD文件系统类型是ufs。
设为可读写文件系统的rw选项, 或设为只读文件系统的ro选项, 或其他一些选项,可随意选一个。 一个常用的选项 noauto 用在不需在导入期间挂接的文件系统。 其他的选项在 mount(8) 手册里列出。
dump(8) 使用这项去决定那个 文件系统必须移贮。假如缺少这项,默认的数值为0。
这一项决定文件系统的检查顺序, 文件系统想跳过检查应将passno设为0。 根文件系统(那个是在每方面开始之前必须检查的) 应该将它的 passno 设为1, 其他文件系统的 passno 必须把数值设到大于1。假如多个文件系统的passno的值相同, 那么fsck(8) 在充许的情况下将尝试并行地去检查文件系统。
Consult the fstab(5) manual page for more information on the format of the /etc/fstab file and the options it contains.
这个 mount(8) 命令是挂接文件系统的基本运用。
使用最多的基本格式:
它的选项非常多,而mount(8) 手册同样提及, 但常用的都在这里:
挂接的各种选项
挂接/etc/fstab里所有列出的文件系统。 除非标记为 “noauto” 或作了排除在外的 -t 类型标记,或者在这之前已挂上。
除了实际上系统调用以外,可以完成任何事情,这个选项是和 -v参数一起连在一块使用,可以决定mount(8)所做的事情。
强制去挂接一个未知的文件系统(会有危险), 或当把一个文件系统挂接状态由可读写降为只读时,强制撤消可写通道。
以只读方式挂接文件系统。 这和在指定了 -o 选项配合 ro (对于 FreeBSD 5.2 之前的版本来说, 则是 rdonly) 参数的效果是一样的。
根据给出的文件系统类型挂接文件系统, 假如给于-a选项,仅挂接这个类型的文件系统。
“ufs” 是默认的文件系统类型。
在文件系统上修改挂接选项。
版本模式。
以可读写方式挂接文件系统。
The -o 选项采用一个逗号分开以下多个选项:
拒绝把文件系统识别为特别的设备。这是一个有用的安全选项。
不允许文件系统上的二进制程序执行。这也是一个有用的安全选项。
不允许文件系统上的 setuid 或 setgid 标记生效。这也是一个有用的安全选项。
umount(8) 命令同样采用一个参数、一个挂接点、一个设备名。 或采用-a选项,又或采用-A选项。
所有格式都可采用 -f 去强行卸下, 或采用-v 用那适当的版本。 但警告,采用 -f并不是一个好主意, 强行卸下文件系统可能损坏计算机或破坏文件系统上的数据。
-a 和 -A 会卸下所有已挂接的文件系, 可能通过-t后面列出的文件系统进行修改, 但无论如何,-A都不会尝试去卸下根文件系统。
FreeBSD 是一个多任务操作系统。 这就意味着好像一次可以运行一个以上的程序。 每个占用一定时间运行的程序就叫process。 每个程序启动运行时至少有一个新进程,并在所有运行的时候保持有一个系统进程的编号, 而一直由系统对它监管。
每个进程用来标识的一个编号就叫 进程 ID, 或叫 PID。 而且,就像文件那样,每个进程也有所属用户和所属群体。 所属用户和所属群体使用在这方面:确定这个进程可以打开那些文件和那些设备, 从而在初期使用文件的权限。 多数的进程都同样有一个父进程, 而进程是依靠父进程来启动的。 例如,假如您把命令输入到shell里那shell是一个进程,而您运行的各个命令同样是进程, 那么,shell就是您各个运行进程的父进程。 而这方面有一个例外的进程就叫init(8)。 init始终是首个进程,,所以他的PID始终是1, 而init在FreeBSD起动时由内核自动启动。
在系统上,有两个命令对进程观察非常有用:ps(1) 和 top(1)。 这个ps命令作用是观察当前运行进程的状态, 显示他们的PID,使用了多少内存,它们启动的命令行。 而top命令则是显示所有运行进程,并在以秒计的短时内更新数据。 您能交互式的观察您计算机的工作。
默认情况下, ps仅显示出您自己所运行的命令。 例如:
% ps PID TT STAT TIME COMMAND 298 p0 Ss 0:01.10 tcsh 7078 p0 S 2:40.88 xemacs mdoc.xsl (xemacs-21.1.14) 37393 p0 I 0:03.11 xemacs freebsd.dsl (xemacs-21.1.14) 48630 p0 S 2:50.89 /usr/local/lib/netscape-linux/navigator-linux-4.77.bi 48730 p0 IW 0:00.00 (dns helper) (navigator-linux-) 72210 p0 R+ 0:00.00 ps 390 p1 Is 0:01.14 tcsh 7059 p2 Is+ 1:36.18 /usr/local/bin/mutt -y 6688 p3 IWs 0:00.00 tcsh 10735 p4 IWs 0:00.00 tcsh 20256 p5 IWs 0:00.00 tcsh 262 v0 IWs 0:00.00 -tcsh (tcsh) 270 v0 IW+ 0:00.00 /bin/sh /usr/X11R6/bin/startx -- -bpp 16 280 v0 IW+ 0:00.00 xinit /home/nik/.xinitrc -- -bpp 16 284 v0 IW 0:00.00 /bin/sh /home/nik/.xinitrc 285 v0 S 0:38.45 /usr/X11R6/bin/sawfish
在这个例子里您可看到,从 ps(1) 输出的每一列是有规律的。 PID 就是进程ID,这个较早前已讨论过了。 PID号的分配由 1一直上升直到99999, 当您运行到超过限制时,这些编号会回转分配。 TT这一列显示了程序运行所在的终端, 目前可以安全地忽略。 STAT 显示程序的状态,也可以安全地被忽略。 TIME是程序在CPU处理时间--运行的时间量, 并不是指您程序启动到现在的所用的时间。 许多程序碰巧遇到某方面在他们之前要花费大量CPU处理时间时,他们就必须等候。 Finally, COMMAND is the command line that was used to run the program.
ps(1)支持使用各种选项去改变显示出来的内容, 最有用的一个就是auxww。 a选项显示出所有运行进程的内容, 而不仅仅是您的进程。 u选项显示出进程所归属的用户名字以及内存使用, x 选项显示出后台进程。 而 ww 选项表示为 ps(1) 把整个命令行全部显示完, 而不是由于命令行过长就把它从屏幕上截去。
下面和从top(1)输出是类似的,一个示例式对话就象这样子:
% top last pid: 72257; load averages: 0.13, 0.09, 0.03 up 0+13:38:33 22:39:10 47 processes: 1 running, 46 sleeping CPU states: 12.6% user, 0.0% nice, 7.8% system, 0.0% interrupt, 79.7% idle Mem: 36M Active, 5256K Inact, 13M Wired, 6312K Cache, 15M Buf, 408K Free Swap: 256M Total, 38M Used, 217M Free, 15% Inuse PID USERNAME PRI NICE SIZE RES STATE TIME WCPU CPU COMMAND 72257 nik 28 0 1960K 1044K RUN 0:00 14.86% 1.42% top 7078 nik 2 0 15280K 10960K select 2:54 0.88% 0.88% xemacs-21.1.14 281 nik 2 0 18636K 7112K select 5:36 0.73% 0.73% XF86_SVGA 296 nik 2 0 3240K 1644K select 0:12 0.05% 0.05% xterm 48630 nik 2 0 29816K 9148K select 3:18 0.00% 0.00% navigator-linu 175 root 2 0 924K 252K select 1:41 0.00% 0.00% syslogd 7059 nik 2 0 7260K 4644K poll 1:38 0.00% 0.00% mutt ...
这个输出分成两部份。 前面部份(起始前五行) 显示了:运行于最后进程的PID、 系统负载均衡 (那个是指系统繁忙时的调节方式)、 系统正常运行时间 ( 指从启动算起所用的时间) 和当前时间。 前面部份另外的图表 涉及:多少进程在运行(这个情况是47), 多少内存和多少交换分区在使用, 和在不同CPU状态里系统消耗多少时间。
在那下面一连串的纵列和从ps(1)输出的的内存是相似的。 如以前ps(1)一样,您能见到:PID、用户名、CPU处理时间合计、运行的命令。 top(1)默认是显示您的进程所用内存空间的合计。 内存空间这里分成两列,一列为总体大小,另一列是必须请求驻留大小是多少内存--总体大小。 而驻留大小实际上是瞬间使用的多少。 在以上那个例子,您会看到那Netscape®总计需要30 MB内存, 但实际只用了9 MB。
top(1) 每两秒自动刷新一次,您可以用s改变刷新的秒数。
当您运行一个编辑器时它是很容易控制的,告诉它去加载文件它就加载。 您之所以能这样做,是因为编辑器提供这样便利去这样做,和因为有编辑器去附上的终端。 一些程序在运行中不需要连续的用户输入,一有机会就从终端里分离到后台去。 例如,一个web系统整天都在作web请求的响应,他不需要您输入任何东西就能完成, 这个类别的另一个例子就是把email的传送。
我们把那些程序叫 守护进程。 守护神是希腊神话中的一些人物,非正非邪,他们是些守护小精灵, 大体上为人类作出贡献。 许多类似web服务或mail服务的系统对于今天仍有用途, 这就是为什么在那么长的时间里,BSD的吉祥物保持为一双鞋加一把钢叉的守护神模样。
守护进程的程序命名通常在最后加一个 “d”。 BIND 是伯克利互联网域名服务 (而实际执行的程序名称则是 named), Apache web系统的程序就叫 httpd, 在行式打印机上的打印守护进程就是 lpd。 这只是一种惯例,不是标准或硬性规定。 例如,为Sendmail而应用的主要mail守护进程就叫sendmail, 却不叫maild,这和您推测的一样。
有时可能会需要与守护进程进行通讯。 而 信号 则是其中的一种通讯机制。 可以发送信号给守护进程 (或相关的另一些进程) 来与它进行通信, 不同的信号都有自己的数字编号--其中一些有特殊的含义, 其它的则可以被应用程序自己进行解释, 而一般来说, 应用程序的文档会告诉哪些信号会被如何处理。 您只能给所属于您的进程发信号,假如您给其他人的进程发信号, 进程就会用kill(1) 或 kill(2)权限进行拒绝。 当然,root 用户会例外,它能把各种信号发送给每个进程。
在某些情况下,FreeBSD也会向应用软件发送信号。 假如一个应用软件含有恶意写入并试图去访问内存,那是不可想象的,FreeBSD会向那个进程发送 段式违规 信号 (SIGSEGV)。 假如一个应用软件使用alarm(3)系统去进行周期性调用闹钟功能,每当达到时间时, FreeBSD会向应用软件发送闹钟信号(SIGALRM)。
有两个信号可以停止进程:SIGTERM 和 SIGKILL。 SIGTERM比较友好,进程能捕捉这个信号, 根据您的需要来关闭程序。在关闭程序之前,您可以结束打开的记录文件和完成正在做的任务。 在某些情况下, 假如进程正在进行作业而且不能中断,那么进程可以忽略这个 SIGTERM信号。
对于SIGKILL信号,进程是不能忽略的。 这是一个 '“我不管您在做什么,立刻停止”'的信号。 假如您发送SIGKILL信号给进程, FreeBSD就将进程停止在那里。[4].
您可能会去使用 SIGHUP、 SIGUSR1 和 SIGUSR2信号。 这都是些通用的信号,各种应用程序都可以应用 在各方面的信号发送。
假如您改变了web系统的配置文件--并想web系统去重读它的配置, 您可以停止然后再启动httpd。但这样做web系统会导致一个短暂 的中断周期,那样是不受欢迎的。几乎所有的守护进程在编写时,都会指定对SIGHUP 信号进行响应从而重读配置文件。 所以, 最好的方法, 就不是杀死并重启 httpd, 而是发一个 SIGHUP 信号给它。 因为在这方面没有一个标准,不同的守护进程有不同的用法,所以不了解时应读一下守护进程的文档。
发送信号可用kill(1) 命令, 请参考kill(1)所列出的例子。
发送一个信号给进程
这个例子显示了怎样去发一个信号给inetd(8)。 inetd配置文件是/etc/inetd.conf, 如果想inetd 去重读文件系统的话,可以给它发一个SIGHUP 信号。
寻找您要发送信号的进程ID,可以用ps(1) 加 grep(1)来完成。 grep(1)命令被用在搜索输出方面,搜索您指定的字符串。 这命令是由普通用户来执行的,而inetd(8)是root用户运行的, 所以必须给ps(1)带上ax选项。
% ps -ax | grep inetd 198 ?? IWs 0:00.00 inetd -wW
得出 inetd(8) PID号是198。 有时 grep inetd 命令也出现在输出中, 这是因为在这方面 ps(1) 也是寻找列表中运行进程。
使用 kill(1) 去发送信号。 因为 inetd(8) 是由 root启动的, 您必须使用 su(1) 去 变为 root 用户。
% su Password: # /bin/kill -s HUP 198
和大多数 UNIX 命令一样, kill(1) 如果完成了任务, 就不会给出任何消息。 假如您发送信号给一个不属于您的进程, 您会看到 “kill: PID: Operation not permitted”. 假如输错了PID号,把信号发送到其他进程,那是坏事。 或者您侥幸,把信号发送到不存在的进程, 您会看见 “kill: PID: No such process”.
为什么使用 /bin/kill?: 许多shell提供了内建kill命令, 这样, shell就能直接发送信号,而不是运行 /bin/kill。 这点非常有用, 但不同shell有不同的语法来指定发送信号的名字, 与其试图把它们学完倒不如简单地直接使用 /bin/kill ...。
发送其他的信号也很相似,只要在命令行替换TERM或KILL就行了。
Important: 在系统上随意杀死进程是个坏主意,特别是init(8),它的进程ID是1,它非常特殊。 可以运行 /bin/kill -s KILL 1 命令来让系统迅速关机。 当您按下 Return 键之前, 一定要 详细检查您运行 kill(1) 时所指定的参数。
在FreeBSD里,每日有一大堆工作是在命令行的界面完成的,那就叫做shell。 一个shell的主要功能就是从输入是取得命令然后去执行他。 许多的shell同样能帮我们完成内建的每日功能,例如:文件管理、文件寻找、命令行编辑、 宏指令和环境变量。FreeBSD内含了一些shell,例如:sh、Bourne Shell、 tcsh和改良过的C-shell。 另外也有些shell也可在FreeBSD的Ports得到,例如:zsh和bash。
您想使用那一种shell取决于您的喜好, 假如您是C程序设计师,您可能选择一个C-like shell例如tcsh。 假如您是从Linux过来的或是一个命令行的新手,您可能会试一下bash。 这一点告诉我们每一个shell都有各自的特性,可能适用于您的工作环境,也可能不适用于您的工作环境。
每个shell都有一个共通点就是文件名补全。 输入命令或文件名的前几个字,然后按Tab键,就能靠shell的自动补全功能得出 命令或文件名。这里有一个例子,假设您有两个文件叫 foobar 和foo.bar,而您想删除 foo.bar, 可这样在键盘上输入 rm fo[Tab].[Tab]。
那么shell就会输出 rm foo[BEEP].bar。
这个[BEEP] 是这控制台铃声, 那个是告诉我们它不能完成文件名补全,因为有多个文件名符合。 foobar 和 foo.bar 都是以 fo开头, 它只可以补全到 foo。 输入 .并再按一次 Tab,shell才把其余的文件名全部显示出来。
另一个特点就是shell利用环境变量运行。环境变量是贮存在shell环境空间上相对应的键和可变值, 这个空间能够补程序从shell里读出,而且包含了许多程序的配置。 这个一个常用环境变量列和其含义的列表:
| 变量 | 说明 |
|---|---|
| USER | 当前登录进入的用户名。 |
| PATH | 搜索程序路径,以两点的冒号分隔开。 |
| DISPLAY | 假如有这个变量的话,就是X11显示器的网络名称。 |
| SHELL | 当前所用的shell。 |
| TERM | 用户终端的名字,通常用在确定终端的能力。 |
| TERMCAP | 各种终端功能所用终端分离编码的基本数据项目。 |
| OSTYPE | 操作系统类型,默认是FreeBSD。 |
| MACHTYPE | 是指系统上运行的CPU体系结构。 |
| EDITOR | 用户首选的文本编辑器。 |
| PAGER | 用户首选的文本页面调度程序 。 |
| MANPATH | 搜索联机手册路径,以两点的冒号分隔开。 |
不同的shell设置环境变量也不相同。举个例子, 在如tcsh 和 csh这样的C-Style shell, 您必须使用setenv去设置环境变量。 而在如sh和bash这样的Bourne shell, 您必须使用export去设置当前环境变量。 再举个例子,要去设置或改变EDITOR环境变量, 在csh或tcsh下将EDITOR设为 /usr/local/bin/emacs:
% setenv EDITOR /usr/local/bin/emacs
而在Bourne shell下,则是:
% export EDITOR="/usr/local/bin/emacs"
您也可以在命令行上加一个$字符在变量之前从而取得环境变量。 举个例子,用echo $TERM 就会显示出$TERM的设定值, 其实就是shell取得$TERM并传给echo来显示的。
shell里有许多特别的字符代表着特别的资料,我们把叫做meta-characters。 最常用的就是*字符,它可代表文件名的任何字符。 这些特别字符应用到文件名全域方面。假如,输入 echo *和输入 ls的效果是相同的,其实就是 shell 取得了全部符合 *的文件名,并传给 echo 在命令行下显示出来。
为了防止shell去分析这些特别字符, 我们可在它之前加一个 \字符去说明它只是普通字符。 echo $TERM就会显示出您的终端情况, 而 echo \$TERM 就会显示出 $TERM 这几个字。
改变您的Shell的最简单方法是使用 chsh 命令。 执行 chsh 将根据您设定的EDITOR 环境变量进入到那个编辑器,假如没有设定,就会进入vi编辑器。 请改变“Shell:”这行对应值。
您可使用chsh 的-s选项, 这样就能设置您的shell却又不用编辑器。假如您想把shell改为bash 可用下面的技巧。
% chsh -s /usr/local/bin/bash
运行chsh 不加参数只编辑shell也会达到相同的效果。
Note: 您使用的shells必须 在/etc/shells 文件里列出。 假如您从 ports里装一个shell, 那就不用做这步了。 假如您手工装一个shell,那就要手工添加进去。
举个例了子,假如您手工把 bash装到 /usr/local/bin里,您还要进行这一步:
# echo "/usr/local/bin/bash" >> /etc/shells然后运行chsh。
FreeBSD 的很多配置都可以通过编辑文本文件来完成。 因此, 最好能熟悉某种文本编辑器。 FreeBSD 基本系统中提供了一些, 您也可以从 Ports Collection 安装其它编辑器。
最容易学的而又简单的编辑器是 ee编辑器, 是个标准的简易编辑器。 要启动 ee,首先就要在命令行输入 ee filename, filename 是一个要编辑的文件名。 例如,要编辑 /etc/rc.conf就要输入 ee /etc/rc.conf,在 ee的控制内, 编辑器所有功能的操作方法都显示在最上方。 这个^ 字符代表 键盘上的Ctrl 键, 所以^e 就是 Ctrl+e组合键。 假如想离开ee, 按Esc键,就可选择离开编辑器。 当您修改了内容的时候,编辑器会提示您保存。
FreeBSD本身也带许可多有强大功能的文本编辑器, 例如 vi。还有其他在FreeBSD Ports里几种, 像 emacs 和 vim。 这些编辑器有着强大的功能,但同时学习起来比较复杂。 不管怎样,假如您从事文字编辑方面的工作, 学习如vim 或 emacs 这些有强大功能的编辑器用法, 在长时间工作里会帮您节省不少的时间。
在一个系统里,硬件描述通常用法就是一个设备对应一个术语,包括磁盘、打印机、显卡和键盘。 当FreeBSD导入时,大多数的设备都能探测到并显示出来, 您也可以查阅/var/run/dmesg.boot, 导入时所有信息都在里面。
例如, acd0 就是 首个 IDE 光盘设备, 而 kbd0 则代表键盘。
在UNIX操作系统里,大多数设备存在的特殊访问文件就是叫做设备节点, 他们都定位在/dev目录里。
当增加一个新设备或附加设备需要寻求支持时, 您也许需要在新设备上建立单个或多个的设备节点。
当系统缺少DEVFS (涉及的是FreeBSD 5.0之前的版本), 建立设备节点可以使用MAKEDEV(8),就如下面显示的那样:
# cd /dev # sh MAKEDEV ad1
这个是一个例子,在安装等二个IDE设备时去建立设备节点。
这个设备文件系统, 或叫 DEVFS, 为内核的设备命名在整体文件系统命名里提供通道, 并不是建立或更改设备节点, DEVFS只是为您的特别文件系统进行维护。
更多的资料请查 devfs(5) 手册。
DEVFS在FreeBSD 5.0或更高的版本里是默认使用。
要理解为什么 FreeBSD 使用 elf(5) 格式, 您必须首先了解一些 UNIX 系统中的 三种 “主要” 可执行文件格式的有关知识:
a.out(5)
是最古老和“经典的” UNIX 目标文件格式, 这种格式在其文件的开始处有一个短小而又紧凑的首部, 该首部带有一个魔幻数字,用来标识具体的格式(更多详情参见a.out(5))。 这种格式包含3个要装载入内存的段:.text, .data, 和 .bss,以及 一个符号表和一个字符串表。
COFF
SVR3目标文件格式。其文件头现在包括一个区段表(section table), 因此除了.text,.data,和.bss区段以外,您还可以包含其它的区段。
elf(5)
COFF 的后继, 其特点是可以有多个区段, 并可以使用32位或64位的值。 它有一个主要的缺点: ELF 在其设计时假设每个系统体系结构只有一种 ABI。 这种假设事实上相当错误, 甚至在商业化的SYSV世界中都是错误的 (它们至少有三种ABI: SVR4, Solaris, SCO)。
FreeBSD试图在某种程度上解决这个问题,它提供一个工具,可以 对一个已知的ELF可执行文件 标识它所遵从的ABI的信息。 更多这方面的知识可以参见手册页brandelf(1)
FreeBSD从“经典”阵营中来,因此使用了a.out(5)格式, 众多BSD版本的发行(直到3.X分支的开始)也证明了这种格式的有效性。 虽然在那以前的某段时间,在FreeBSD系统上创建和运行ELF格式 的二进制可执行文件(和内核)也是可能的,但FreeBSD一开始并不积极“进步” 到使用ELF作为其缺省的格式。为什么?噢,当Linux阵营完成了 转换到ELF格式的痛苦历程后,却发现并不足以由此而放弃 a.out可执行文件格式,因为正是由于它们不灵活的, 基于跳转表的共享库机制,使得销售商和开发者们构建共享库非常困难。 直到已有的ELF工具提供了一种解决共享库问题的办法, 并被普遍认为是“前进方向”以后,迁徙的代价在FreeBSD界才被接受, 并由此完成了迁徙。FreeBSD的共享库机制其基础更类似于Sun SunOS™的共享库机制, 并且正因为此,其易用性很好。
那么,为什么会有这么多不同的格式呢?
回溯到蒙昧和黑暗的过去,那时只有简单的硬件。这种简单的硬件支撑了一个简单 和小型的系统。在这样的简单系统上(PDP-11)a.out格式 足以胜任表达二进制文件的任务。当人们将UNIX从这种简单的系统中移植出来的时候, a.out格式被保留了下来,因为对于早期将UNIX移植到 Motorola 68k,VAXen等系统来说,它还是足够可用的。
然后,一些聪明的硬件工程师认为,如果可以让软件完成一些简单的聪明操作, 那么他们就可以在硬件设计中减少若干门电路,并可以让CPU核心运行得更快。 当a.out格式用于这种新型的硬件系统时(现在我们叫它 RISC),显得并不合适。因此,人们设计了许多新的格式 以便在这样的硬件系统上能获得比简单的a.out格式更优越 的性能。诸如COFF,ECOFF,还有其它 一些晦涩难懂的格式正是在这个阶段被发明出来的,人们也研究了这些格式的局限性, 慢慢地最终落实到ELF格式。
同时,程序的大小变得越来越大,磁盘空间(以及物理内存)相对来说却仍然较小, 因此共享库的概念便产生了。VM系统也变得越来越复杂了。当所有这些进步都建立在 a.out格式的基础上的时候,它的可用性随着每个新特性 的产生就受到了严重考验。并且,人们还希望可以在运行时动态装载某些东西,或者 在初始化代码运行以后可以丢弃部分程序代码,以便节约主存储器和交换区。编程语言 也变得越来越复杂,人们希望可以在main()函数执行之前自动执行某些代码。为了实现 所有这些功能,人们对a.out格式作了很多改动(hack), 他们在某个阶段里基本也是可行的。随着时间的推移,a.out格式 不得不增加大量的代码和复杂度来满足这些需求。虽然ELF格式 解决了许多这样的问题,但是从一个可用的系统迁移到另一个系统却是痛苦的。因此 直到继续保留a.out格式的代价比迁移到ELF格式 的代价还大的时候,人们才会最终转换到ELF格式。
然而,随着时间的推移,FreeBSD系统本身的编译工具(特别是汇编器和装载器) 赖以派生的编译工具,其发展却形成了两个平行的分支。FreeBSD这个分支增加了共享库, 并修改了一些错误。而原先编写了这些工具的GNU人则重写了这些工具,并对交叉编译提供了 更简化的支持,还随意插入了不同格式的支持,等等。虽然很多人希望创建针对FreeBSD的 交叉编译器,但他们却并未如愿以偿,因为FreeBSD的as 和ld的源代码更为老旧,所以无法完成这个任务。 新的GNU工具链(binutils)则确实支持交叉编译,ELF 格式,共享库,C++扩展,等等。并且,由于很多供应商都发布ELF格式的 二进制文件,因而让FreeBSD能够运行它们将是一个很好的事情。
ELF格式比a.out格式开销要大些,同时也 允许基础系统有更好的扩展性。ELF格式的有关工具有着更好的维护, 并且提供交叉编译支持,这对许多人来说是很重要的。ELF格式可能会稍微 慢一些,但很难测量出来。另外,在这两者之间,有许多细节也是不同的,比如它们映射页面的方式, 处理初始化代码的方式,等等。所有这些都不太重要,但这也确实是不同之处。在将来的适当时候, GENERIC内核将不再支持a.out格式,并且, 当不再需要运行遗留的a.out格式程序时,内核也将不再提供对其的支持。
最详细的使用说明文档莫过于 FreeBSD 里的联机手册了。 几乎每一个程序都会附上一份简短说明, 以介绍这个程序的的基本功能以及参数的用法。 我们能通过 man 命令来阅读这些说明, 而使用 man 命令却是简单的事情:
% man command
command 就是您要了解的命令命称。 举个例子,想了解 ls 命令就输入:
% man ls
这些在线手册分下列章节:
用户命令。
系统调用以及错误代码。
C 库文件里的函数说明。
设备驱动程序。
文件格式。
游戏以及其他娱乐。
各种资讯。
系统维护以及命令。
内核开发情况。
在某些情况下,同样的主题也会出现在在线手册的不同章节。 举个例子,系统里有chmod这个用户命令,而又有个 chmod()
系统调用。 在这种情形下,您应当向 man 命令指定需要的内容:
% man 1 chmod
这样就会显示出手册里的用户 chmod 命令。 传统上,我们在写入文档时把特定详细参考内容在在线手册括号里注明。 所以 chmod(1) 是指 chmod 用户命令, 而 chmod(2) 是指系统调用。
如果您已经知道命令的名字,只是不知道要怎样使用的话,那就比较好办。 但您连名字都不知到呢?这个时候您就可以利用 man 的搜寻功能, 它会在手册的介绍部份找寻您要搜寻的关键字,它的选项是 -k:
% man -k mail
当您使用这个命令的时候,man会把介绍里含有“mail”关键字 的命令列出来,实际上这和apropos命令的功能是相同的。
有时您会看到/usr/bin 下有许多命令但不知他们的用途, 您只需这样做:
% cd /usr/bin % man -f *
或者这样做
% cd /usr/bin % whatis *
两个命令是一样的。
FreeBSD许多应用软件以及实用工具来自Free软件基金会(FSF)。 作为手册的扩充,这些程序提供了一种更具有活力的超文档说明info, 您可用info命令来阅读他们。 假如您装上emacs,也能利用emacs 的info模式来阅读。
使用 info(1) 这个命令只需简单地输入:
% info
想得到简单介绍, 请按 h。 想快速得到的命令说明, 请按 ?。
FreeBSD 捆绑了很多系统工具作为基本系统的一部分。然而,在实际工作中, 您可能仍需要安装额外的第三方应用程序。 FreeBSD 提供了两种安装第三方应用程序的方法: FreeBSD Ports Collection 和二进制软件包 (package)。 无论用哪种方式, 您都可以从本地媒体 (设备) 或直接通过网络来安装您喜欢的最新版本的应用程序。
读完这章,您将了解到:
如何安装第三方的二进制软件包。
如何从Ports Collection安装第三方软件。
如何删除先前安装的软件包。
如何改动Ports Collection里面的一些参数,定制软件使用。
如何找到您需要的软件包。
如何升级您的ports。
如果您以前使用过 UNIX 系统,那典型的第三方软件安装的步骤是像下面描述的:
下载这个软件,软件的发行版可能是源代码格式,或是一个二进制包。
解开软件(其中代表性的是用 compress(1), gzip(1), 或 bzip2(1) 压缩过的tar包)。
阅读相关文档,了解如何安装。 (多半一个文件名是INSTALL或README, 或在doc/ 目录下的一些文档)
如果软件是以源代码形式发布的,那就需要编译它。可能需要编辑一个 Makefile文件, 或运行 configure脚本,和其他的一些工作。
测试和安装软件。
如果一切顺利的话,就这么简单。如果您在安装一个软件包时发生一些错误, 您可能需要编辑一下它的代码,以使它能正常工作。
您可以继续使用 “传统的”方式安装软件。 然而, FreeBSD 提供了两种技术: packages 和 ports。 就在写这篇文章的时候, 已经有超过 12,300 个第三方的应用程序可以使用了。
对于任意一个应用程序包,是一个可以下载的FreeBSD package文件。这个 FreeBSD package包含了编译好的的副本, 还有一些配置文件或文档。 一个下载的包文件可以用 FreeBSD 的包管理命令来操作, 例如 pkg_add(1),pkg_delete(1), pkg_info(1) 等等。 可以使用一个简单的命令安装一个新的应用程序。
一个FreeBSD的port是一个可以自动从源代码编译成应用程序的文件集合。
记住,如果您自己来编译的话,需要执行很多步的操作 (解压, 补丁, 编译, 安装)。 这些整理 port 的文件集合包含了系统需要完成这个工作的必需信息。 您可以运行一些简单的命令, 那些源代码就可以自动地下载, 解开, 打补丁, 编译, 直至安装完成。
实际上,ports 系统也能做出被 pkg_add 的程序包和不久就要讲到的其他包管理命令来安装的软件包。
Packages 和 ports 是互相 依赖 的。 假设您想安装一个依赖于已经安装的特定库的应用程序。 应用程序和那个库都已经应用于 FreeBSD ports 和 packages。 如果您使用 命令或 ports 系统来添加应用程序, 两个都必须注意库是否被安装, 如果没有, 它会自动先安装库。
这里给出的两种技术是很相似的,您可能会奇怪为什么 FreeBSD 会弄出这两种技术。 其实, packages 和 ports 都有它们自己的长处, 使用哪一种完全取决于您自己的喜好。
Package的优点
一个压缩的 package 通常要比一个压缩的包含源代码的应用程序小得多。
package 不需要进行额外的编译。 对于大型应用程序如 Mozilla, KDE 或 GNOME 来说这显得尤为重要, 特别是在您的系统资源比较差的情况下。
package不需要您知道如何在FreeBSD上编译软件的详细过程。
Ports 的优点
package 在编译时通常使用比较保守的选项, 这是为了保证它们能够运行在大多数的系统上。 通过从 port 安装, 您可以细微调整编译选项来产生适合于处理器的代码 (针对于 Pentium IV 或 AMD 的 Athlon CPU)。
一些软件包已经把与它们相关的能做和不能做的事情的选项都编译进去了。 例如, Apache 可能就配置了很多的选项。 从 port 中安装时, 您不一定要接受默认的选项, 可以自己来设置。
在一些例子中,一个软件有不同的配置存在多个package。 例如, Ghostscript存在 ghostscript package 和 ghostscript-nox11 package两个配置package, 这取决于您是否安装了X11服务器。 这样的调整对package是可能的, 但如果一个应用程序有超过一个或两个不同的编译时间选项时, 就不行了。
一些软件的许可条件禁止采用二进制形式发行。 它们必须带上源代码。
一些人不信任二进制发行形式。 至少有了源代码, (理论上) 可以亲自阅读它,寻找潜在的问题。
如果您要自己对软件打补丁,您就需要有源代码。
一些人喜欢整天围着源代码转, 所以他们喜欢亲自阅读源代码, 修改源代码等等。
保持更新 ports, 订阅邮件列表 FreeBSD ports 邮件列表 和递交错误报告 FreeBSD ports bugs 邮件列表。
Warning安装任何应用程序之前, 应首先检查 http://vuxml.freebsd.org/ 上是否有关于您所安装的应用程序的安全问题报告。
您也可以安装 security/portaudit, 它能够自动地检查已经安装的应用程序的漏洞; 此外, 在您安装程序之前它也会首先检查是否存在已知的漏洞。 另外, 您也可以使用 portaudit -F -a 这个命令在安装了某个软件包之后作出检查。
这章的其余部分将介绍如何使用packages和ports来安装和管理第三方软件。
在您安装任何应用程序之前,需要知道您需要什么,那个应用程序叫什么。
FreeBSD中可用的应用程序正在不断地增长着。幸运的是, 有许多方法可以找到您所需要的程序:
FreeBSD站点上有一个可以搜索到的当前所有可用的应用程序列表,在 http://www.FreeBSD.org/ports/。 它分很多种类,您既可以通过程序的名称来搜索, 也可以在分类中列出所有可用的应用程序 (如果您知道名字), 也可以在分类中列出所有可用的应用程序。
Dan Langille 维护着网站 FreshPorts,在 http://www.FreshPorts.org/。 FreshPort时刻 “追踪” 着在 ports 中应用程序的变化。当有任何程序被升级时,他们就会发 email 提醒您。
I如果您不知道您想要的应用程序的名字,可以通过 (http://www.freshmeat.net/) 网站来查找, 如果找到了应用程序, 您可以回 FreeBSD 的主站去看一下这个应用程序是否已经被 port 进去了。
如果您知道一个port的准确名字, 但需要知道在哪个类别里面能找到它,您可以使用 whereis(1) 这个命令。简单地输入 whereis file, file 就是您想安装的程序名字。 如果系统找到了它, 您将被告知在它在哪里, 例如:
# whereis lsof lsof: /usr/ports/sysutils/lsof
结果告诉我们这个命令lsof (一个系统配置程序)可以在 /usr/ports/sysutils/lsof目录中找到。
还有另外的一个寻找您需要的port的方法--是用ports collecton 内嵌的搜索机制。要使用这个搜索, 您需要先到 /usr/ports目录下面。 在那个目录里面, 运行make search name=program-name, program-name 就是您想寻找的程序名字。 举个例子, 如果您想找 lsof:
# cd /usr/ports # make search name=lsof Port: lsof-4.56.4 Path: /usr/ports/sysutils/lsof Info: Lists information about open files (similar to fstat(1)) Maint: obrien@FreeBSD.org Index: sysutils B-deps: R-deps:
在输出的内容里面您要特别注意包含 “Path:” 的这行将告诉您在哪里可以找到这个 port。 如果要安装此 port, 那其他输出的信息不是必须的, 但是还是显示输出了。
为了更深入的搜索,您还可以用 make search key=string, string就是您想搜索的部分内容。 它将搜索port的名字、 注释, 描述和从属关系, 如果您不知道您想搜索的程序名字, 可以利用它搜索一些关键主题来找到您需要的。
上面说的这些方法, 搜索的关键字没有大小写区分的。 搜索 “LSOF”的结果将和搜索“lsof”的结果一样。
您可以用 pkg_add(1) 这个命令从本地文件或网络上的服务器来安装一个 FreeBSD 软件包。
Example 4-1. 在本地手动下载一个package,并安装它
# ftp -a ftp2.FreeBSD.org Connected to ftp2.FreeBSD.org. 220 ftp2.FreeBSD.org FTP server (Version 6.00LS) ready. 331 Guest login ok, send your email address as password. 230- 230- This machine is in Vienna, VA, USA, hosted by Verio. 230- Questions? E-mail freebsd@vienna.verio.net. 230- 230- 230 Guest login ok, access restrictions apply. Remote system type is UNIX. Using binary mode to transfer files. ftp> cd /pub/FreeBSD/ports/packages/sysutils/ 250 CWD command successful. ftp> get lsof-4.56.4.tgz local: lsof-4.56.4.tgz remote: lsof-4.56.4.tgz 200 PORT command successful. 150 Opening BINARY mode data connection for 'lsof-4.56.4.tgz' (92375 bytes). 100% |**************************************************| 92375 00:00 ETA 226 Transfer complete. 92375 bytes received in 5.60 seconds (16.11 KB/s) ftp> exit # pkg_add lsof-4.56.4.tgz
如果您没有本地package的安装盘 (如 FreeBSD CD-ROM), 可以执行 pkg_add(1) 命令并加上 -r 选项。 这将迫使程序自动决定目标文件的正确格式和版本, 然后自动从一个 FTP 站点寻找和安装 package。
# pkg_add -r lsof
上面的例子将下载正确的package, 而不需要用户的干预就可以安装。 如果您想指定 FreeBSD package 的镜像站点, 替换主站点, 您必须新设置 PACKAGESITE 这个环境变量, 覆盖原来的设置。 pkg_add(1) 使用 fetch(3) 下载文件, 可以使用多种环境变量, 包含 FTP_PASSIVE_MODE、 FTP_PROXY, 和 FTP_PASSWORD。 如果您使用 FTP/HTTP 代理或在防火墙后面, 您可能需要设置这些环境变量。 详细的列表请参考 fetch(3)。上述例子中用 lsof 替代了 lsof-4.56.4。 当使用远程安装 Package 的时候软件名字不需要包含版本号。 pkg_add(1) 将自动的找到这个软件最新的版本。
Note: 如果您使用 FreeBSD-CURRENT 或 FreeBSD-STABLE版本的FreeBSD, pkg_add(1) 将下载您的应用软件的最新版本。 如果您使用 -RELEASE 版本的 FreeBSD, 它将会获得与您的版本相应的软件包版本。 如果您更改了 PACKAGESITE 这个环境变量可能会发生不同的情况。
软件包采用 .tgz 和 .tbz 两种格式。您可以在 ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/packages/ 下面或从 FreeBSD 的发行光盘找到, 它在每一个 4CD 的 FreeBSD 发行版的 /packages目录中。 软件包的设计规划与 /usr/ports 树一致。 每个分类都有自己的目录, 所有的软件包可以在目录 All中找到。
软件包系统的目录结构与ports的设计规划一致; 它们共同构成了整个 package/port。
pkg_info(1) 是用于列出已安装的所有软件包列表和描述的程序。
# pkg_info cvsup-16.1 A general network file distribution system optimized for CV docbook-1.2 Meta-port for the different versions of the DocBook DTD ...
pkg_version(1)是一个用来统计所有安装的软件包版本的工具。 它可以用来比较本地 package 的版本与 ports 目录中的当前版本是否一致。
# pkg_version cvsup = docbook = ...
在第二列的符号指出了安装版本的相关时间和本地ports目录树中可用的版本。
下面的章节提供了使用Ports Collection来安装或卸载程序的基本用法。
在您能使用 ports 之前, 您必须先获得 Ports Collection -- 本质上是 /usr/ports 目录下的一堆 Makefile、 补丁和描述文件。
在您安装 FreeBSD 系统的时候, sysinstall 会询问您是否需要安装 Ports Collection。 如果您选择 no, 那您可以用下面的指令来安装 Ports Collection:
Sysinstall 方式
这种方式使用 sysinstall 再次手动安装Ports Collection。
以 root 用户身份, 运行 sysinstall (对于 FreeBSD 5.2 之前的版本, 应该是 /stand/sysinstall), 如下所示:
# sysinstall
选择 Configure, 按 Enter。
选择 Distributions, 按 Enter。
选择 ports, 按 Space。
选择 Exit, 按 Enter。
选择您的安装介质,就像CDROM,FTP,等等
选择 Exit 并按 Enter。
按 X 键退出 sysinstall。
您可以使用 CVSup,这个程序让您获得和更新 Ports Collection。 CVSup 需要使用 /usr/share/examples/cvsup/ports-supfile 这个配置文件。 如果您想获得关于 CVSup 这个应用程序的更多信息, 请看 使用 CVSup (第 A.5 节) 和本文。
CVSup 方法
使用 CVSup 获得 Ports Collection, 是一个非常快捷的方法。 如果您想保持您的 ports 树的最新状态, 或了解更多关于 CVSup 的内容, 您可以阅读刚才提及的内容。
当提到 Ports Collection 时, 第一个要说明的就是何谓 “skeleton”。 简单地说, port skeleton 是让一个程序在 FreeBSD 上简洁地编译并安装的所需文件的最小组合。 每个 port skeleton 包含:
一个 Makefile。 Makefile 包括好几个部分, 指出应用程序是如何编译以及将被安装在系统的哪些地方。
一个 distinfo 文件。这个文件包括这些信息: 这些文件用来对下载后的文件校验和进行检查, 使用 md5(1) 来确保在下载过程中文件没有被破坏。
一个 files 目录。 这个目录包括在 FreeBSD 系统上编译和安装程序需要用到的补丁。 这些补丁基本上都是些小文件, 指出特定文件作了哪些修正。 它们都是纯文本的的格式,基本上是这样的 “删除第 10 行” 或 “将第 26 行改为这样 ...”, 补丁文件也被称作 “diffs”, 他们由 diff(1) 程序生成。
这个目录也包含了在编译 port 时要用到的其它文件。
一个 pkg-descr 文件。 这是一个提供更多细节,有软件的多行描述。
一个 pkg-plist 文件。 这是即将被安装的所有文件的列表。它告诉 ports 系统在卸载时需要删除哪些文件。
一些ports还有些其它的文件, 例如 pkg-message。 ports 系统在一些特殊情况下会用到这些文件。 如果您想知道这些文件更多的细节以及 ports 的概要, 请参阅 FreeBSD Porter's Handbook。
port里面包含着如何编译源代码的指令, 但不包含真正的源代码。 您可以在网上或 CD-ROM 上获得源代码。 源代码可能被开发者发布成任何格式。 一般来说应该是一个被 tar 和 gzip 过的文件, 或者是被一些其他的工具压缩或未压缩的文件。 ports中这个程序源代码标示文件叫 “distfile”, 安装 FreeBSD port的方法还不止这两种。
Note: 您必须使用 root 用户登录后安装 ports。
Warning在安装任何 port 之前, 应该首先确保已经更新到了最新的 Ports Collection, 并检查 http://vuxml.freebsd.org/ 中是否有与那个 port 有关的安全问题。
在安装应用程序之前, 可以使用 portaudit 来自动地检查是否存在已知的安全问题。 这个工具同样可以在 Ports Collection (security/portaudit) 中找到。 在安装新的 port 之前, 可以考虑先运行一下 portaudit -F 来抓取最新的漏洞数据库。 在每天的周期性系统安全检察时, 数据库会被自动更新, 并且会在这之后实施安全审计。 欲了解进一步的情况,请参阅 portaudit(1) 和 periodic(8)。
FreeBSD 项目发行的官方光盘文件不再包含 distfiles。 他们提供了许多更多的更好的使用编译好的软件包。 如果您从 FreeBSD Mall 购买了像 FreeBSD PowerPak 这样的光盘产品, 里面就包含了distfiles。 下面的章节假设您已经有了一张FreeBSD的安装光盘。
将 FreeBSD CD-ROM 放进驱动器。 将其挂接到 /cdrom。 (如果您使用了与此不同的挂接点, 请设置 CD_MOUNTPTS make 变量)。 首先, 进入要安装的 port 所在的目录:
# cd /usr/ports/sysutils/lsof
一旦进入了 lsof 的目录,您将会看到这个port的结构。 下一步就是 make,或说 “联编” 这个 port。 只需在命令行简单地输入 make 命令就可轻松完成这一工作。 做好之后,您可以看到下面的信息:
# make >> lsof_4.57D.freebsd.tar.gz doesn't seem to exist in /usr/ports/distfiles/. >> Attempting to fetch from file:/cdrom/ports/distfiles/. ===> Extracting for lsof-4.57 ... [extraction output snipped] ... >> Checksum OK for lsof_4.57D.freebsd.tar.gz. ===> Patching for lsof-4.57 ===> Applying FreeBSD patches for lsof-4.57 ===> Configuring for lsof-4.57 ... [configure output snipped] ... ===> Building for lsof-4.57 ... [compilation output snipped] ... #
注意,一旦编译完成,您就会回到命令行。 下一步安装 port, 要安装它只需要在 make 命令后跟上一个单词 install 即可:
# make install
===> Installing for lsof-4.57
...
[installation output snipped]
...
===> Generating temporary packing list
===> Compressing manual pages for lsof-4.57
===> Registering installation for lsof-4.57
===> SECURITY NOTE:
This port has installed the following binaries which execute with
increased privileges.
#
一旦您返回到提示符,您就可以运行您刚刚安装的程序了。因为 lsof 是一个赋予特殊权限的程序, 因此显示了一个安全警告。 在编译和安装 ports 的时候, 您应该留意任何出现的警告。
Note: 您可以运行一个命令 make install 来替换 make 和 make install这两个分离的步骤。
Note: 一些 shell 会缓存环境变量 PATH 中指定的目录里的可执行文件, 以加速查找它们的速度。 如果您使用的是这类 shell, 在安装 port 之后可能需要执行 rehash 命令, 然后才能运行新安装的那些命令。 这个命令可以在类似 tcsh 的 shell 中使用。 对于类似 sh 或 shells/bash 的 shell, 对应的命令是 hash -r。 请参见您的 shell 的文档以了解进一步的情况。
Note: 有一小部分的 port 由于许可协议的问题不允许包含在光盘内。 可能是因为在下载前需要注册一些信息或不允许再发布, 或者其他理由。 如果您想安装的 port 不在光盘中, 为此您将需要在线操作来安装 (请看 下一章节)。
作为最后一节, 本节假定您有一个可用的互联网连接。 如果您没有, 您需要察看上一章节从光盘安装, 或者手工将 distfile 放到 /usr/ports/distfiles
实际上从互联网安装 port 和从光盘安装差不多, 不同的是从互联网下载distfile,而不是从光盘读取。
相关步骤是一样的:
# make install
>> lsof_4.57D.freebsd.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
>> Attempting to fetch from ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/.
Receiving lsof_4.57D.freebsd.tar.gz (439860 bytes): 100%
439860 bytes transferred in 18.0 seconds (23.90 kBps)
===> Extracting for lsof-4.57
...
[extraction output snipped]
...
>> Checksum OK for lsof_4.57D.freebsd.tar.gz.
===> Patching for lsof-4.57
===> Applying FreeBSD patches for lsof-4.57
===> Configuring for lsof-4.57
...
[configure output snipped]
...
===> Building for lsof-4.57
...
[compilation output snipped]
...
===> Installing for lsof-4.57
...
[installation output snipped]
...
===> Generating temporary packing list
===> Compressing manual pages for lsof-4.57
===> Registering installation for lsof-4.57
===> SECURITY NOTE:
This port has installed the following binaries which execute with
increased privileges.
#
就像您看到的, 唯一区别是有一行告知您系统正在从哪里获得 port 的 distfile 的信息。
ports 系统使用 fetch(1) 去下载文件, 它有很多可以设置的环境变量, 其中包括 FTP_PASSIVE_MODE、 FTP_PROXY, 和 FTP_PASSWORD。 如果您在防火墙之后,或使用 FTP/HTTP代理, 您就可能需要设置它们。 完整的说明请看 fetch(3)。
当使用者不是所有时间都能连接上网络, 则可以利用 make fetch。 您只要在顶层目录 (/usr/ports) 下运行这个命令, 所有需要的文件都将被下载。 这个命令也同样可以在下级类别目录中使用, 例如: /usr/ports/net。 注意, 如果一个port有一些依赖的库或其他 port, 它将 不 下载这些依赖的 port 的 distfile 文件, 如果您想获取所有依赖的 port 的所有 distfile, 请用 fetch-recursive 命令代替 fetch命令。
Note: 您可以在一个类别或在顶级目录编译所有的 port, 或者使用上述提到的 make fetch命令。 这样是非常危险的, 因为有一些port不能并存。 或者有另一种可能, 一些port会安装两个不同的文件, 但是却是相同的文件名。
在一些罕见的例子中, 用户可能需要在除了 MASTER_SITES 以外的一个站点(本地已经下载下来的文件)去获得一个文件包。 您可以用以下命令不使用 MASTER_SITES:
# cd /usr/ports/directory # make MASTER_SITE_OVERRIDE= \ ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/ fetch
在这个例子中,我们把 MASTER_SITES这个选项改为了 ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/。
Note: 一些 port 允许 (或甚至要求) 您指定编译选项来 启用/禁用 应用程序中非必需的功能, 一些安全选项, 以及其他可以订制的内容。 具有代表性的包括 www/mozilla、 security/gpgme、 以及 mail/sylpheed-claws。 如果存在这样的选项, 通常会在编译时给出提示。
一些时候使用不同的 distfiles 和 ports 目录可能很有用 (甚至是必要的)。 可以用 PORTSDIR 和 PREFIX 来改变默认的目录。 例如:
# make PORTSDIR=/usr/home/example/ports install
将把编译 /usr/home/example/ports 中的 port 并把所有的文件安装到 /usr/local。
# make PREFIX=/usr/home/example/local install
将在 /usr/ports 编译它并安装到 /usr/home/example/local。
当然,
# make PORTSDIR=../ports PREFIX=../local install
将包含两种设置 (没有办法在这一页把它写完, 但您应该已经知道怎么回事了)。
另外, 这些变量也可以作为环境变量来设置。 请参考您的 shell 的联机手册上关于如何设置环境变量的说明。
一些 port 使用 imake (这是 X Window 系统的一部分) 不能正常地配合 PREFIX, 它们会坚持把文件安装到 /usr/X11R6 下面。 类似地, 一些 Perl port 会忽略 PREFIX 并把文件安装到 Perl 的目录中。 让这些 port 尊重 PREFIX 是困难甚至是不可能的事情。
现在您已经知道如何安装 port, 您可能很想知道如何卸载它们, 例如您安装了一个之后才意识到装错了。 我们将卸载前面的例子中安装的那个 (也就是 lsof, 如果您没有注意过的话)。 和安装 port 时类似, 第一件事是进入 port 的目录, /usr/ports/sysutils/lsof。 之后您就可以卸载 lsof 了。 这可以通过命令 make deinstall 来完成:
# cd /usr/ports/sysutils/lsof # make deinstall ===> Deinstalling for lsof-4.57
这个过程足够地简单。 现在已经从系统上卸载了 lsof。 如果您想重新安装它, 可以在 /usr/ports/sysutils/lsof 目录中运行 make reinstall 来达到目的。
make deinstall 以及 make reinstall 在您执行过 make clean 之后就不能用了。 如果您在清理目录之后还想删除 port, 可以用 使用手册中的 Package 相关章节 中介绍的 pkg_delete(1) 来完成。
使用 Ports Collection 显然会逐渐地吃掉您的磁盘空间。 由于 ports tree 趋于不断增大, 在构建和安装软件之后, 您应该通过使用 make clean 来清理包含临时文件的 work 目录。 这一命令会删除 work, 因为在您构建并安装完之后它就没用了。 如果已经安装或不再需要, 您也可以从 distfiles 目录中删除源代码包。
一些用户还通过把一些不需要的 port 分类放入 refuse 文件来避免下载它们。 这样在运行 CVSup 时就不会下载这些分类中的文件了。 关于 refuse 的详情请参考 第 A.5.3.1 节。
Note: 一旦您更新了 Ports Collection, 在开始升级之前, 应该首先检查一下 /usr/ports/UPDATING 文件。 它描述了在升级时可能遇到的问题, 以及因应的步骤。
保持 ports 最新可能是一件乏味的工作。 例如, 为了更新 port 您需要进入它的目录, 编译, 卸载旧的, 然后安装新的, 并在之后进行清理。 考虑一下对五个 port 做这样的升级, 很乏味是不是? 这是系统管理员需要处理的一大难题, 而我们现在有了一些能够帮助我们做这件事的工具。 例如 sysutils/portupgrade 就能够帮助您完成所有这一切! 只需像其他 port 一样用 make install clean 来安装它就可以了。
接下来需要通过 pkgdb -F 命令来创建一个数据库。 这将读取已经安装的 port 并创建一个数据库文件到 /var/db/pkg 目录中。 接下来执行 portupgrade -a, 它会读取这个数据库以及 ports 的 INDEX 文件。 最后, portupgrade 将开始下载, 编译, 备份, 安装并清理更新了的 ports。 portupgrade 包含了许多的选项, 最重要的那些将在下面说明。
如果您只想升级某个具体的应用程序而不是数据库中的记录的所有程序, 则使用 portupgrade pkgname, 如果您认为 portupgrade 应该升级所有基于那个 port 的软件, 则需要指定 -r; 而如果使用 -R 则它用到的所有包也会被升级。
要使用预编译的 package 而不是 ports 来进行安装, 需要指定 -P。 如果指定了这个选项, portupgrade 会搜索 PKG_PATH 中指定的本地目录, 如果没有找到, 则从远程站点下载。 如果本地没有找到, 而且远程站点也没有成功地下载预编译包, 则 portupgrade 将使用 ports。 要禁止使用 port, 可以指定 -PP。
如果只想下载 distfiles (或者, 如果指定了 -P 的话, 是 packages) 而不想构建或安装任何东西, 可以使用 -F。 要了解更多细节, 请参考 portupgrade(1)。
Note: 规律性地更新 package 数据库非常重要。 您可以使用 pkgdb -F 来修复不一致, 特别是当 portupgrade 要求您这么做的时候。 当 portupgrade 正在更新数据库时请不要打断它, 因为这将做的结果将是不一致的数据库。
还有一些其他工具能够完成类似的以及其他一些任务, 请查看 ports/sysutils 目录中是否有您需要的。
通常,您通过port安装完一个软件后,可以阅读它带的一些文档(如果它包含文档的话), 或需要编辑它的配置文件,来确保这个软件的运行, 或在机器启动的时候启动(如果它是一个服务的话),等等。
对于不同的软件有着不同的配置步骤。不管怎样, 如果您装好了一个软件,但是不知道下一步怎么办的时候, 这些小技巧可能可以帮助您:
使用 pkg_info(1) 命令,它能找到安装了哪些文件,以及装在哪里。 举个例子,如果您安装了 FooPackage version 1.0.0, 那么这个命令
# pkg_info -L foopackage-1.0.0 | less
将显示这个软件包安装的所有文件,您要特别注意在man/目录里面的文件, 它们可能是手册,etc/目录里面的配置文件,以及 doc/目录下面更多的文档。
如果您不确定已经安装好的软件版本,您可以使用这样的命令
# pkg_info | grep -i foopackage
它将会找到所有已安装的软件包名字中包含foopackage 的软件包。 对于其他的查找, 您只需要在命令行中替换 foopackage。
一旦一些软件手册已被您确认安装,您可以使用 man(1) 查看它。 同样的,如果有的话,您还可以完整的查看一边配置文件的示例,以及任何额外的文档。
如果应用软件有网站, 您还可以从网站上找到文档,常见问题的解答,或其他更多。 如果您不知道它们的网站地址,请使用下面的命令
# pkg_info foopackage-1.0.0
一个 WWW: 行, 如果它存在, 它将提供一个这个应用程序的网站URL.
Ports 如果需要在服务器启动时运行(就像互联网服务器), 它通常会把一个脚本的样例放入 /usr/local/etc/rc.d 目录。为了保证正确性, 您可以查看这个脚本, 并编辑或更改这个脚本的名字。 详情请看启动服务。
如果您发现某个 port 无法正常工作, 有几件事值得尝试, 包括:
修好它! Porter 手册 中包括了关于 “Ports” 基础设施的详细信息, 它们能够帮助您修好有问题的 port 甚至提交自己的 port!
通过电子邮件 -- 抱怨! 首先发邮件给 port 的维护人员 (maintainer)。 使用 make maintainer 或阅读 Makefile 都可以找到维护人员的电子邮件地址。 请记得把 port 的名字和版本写在邮件里 (Makefile 中的 $FreeBSD:这一行) 并把错误输出的头几行发给 maintainer。 如果维护人员没有回应您的邮件, 则可以使用 send-pr(1) 来提交问题报告。
从较近的 FTP 站点下载一个编译好的安装包。 “中央的” package collection 在 ftp.FreeBSD.org 的 packages 目录中, 但 在此之前 一定记得先看看本地镜像上是否已经有了! 通常情况下这些安装包都可以直接使用, 而且应该比自行编译快一些。 安装过程本身可以通过 pkg_add(1) 来完成。
FreeBSD 使用 X11 来为用户提供功能强大的图形用户界面。 X11 是一种开放源代码的 X Window 系统实现, 它包括 Xorg 和 XFree86。 FreeBSD 在包括 FreeBSD 4.11-RELEASE 和 FreeBSD 5.2.1-RELEASE 在内的版本之前, 都默认安装 XFree86, 一种由 XFree86 Project, Inc. 发布的 X11 服务。 从 FreeBSD 5.3-RELEASE 开始, 默认并且为官方支持的 X11 变成了 Xorg, 它是由 X.Org 基金会开发的 X11 服务。
这章将介绍 X11 的安装和配置, 并着重强调 Xorg。
欲了解 X11 所支持的显示卡等硬件, 请访问 Xorg 或 XFree86 的网站。
在阅读完这一章后,您将会了解:
X 视窗系统的不同组件,它们是如何协同工作的。
如何安装和配置 X11。
如何安装和使用不同的窗口管理器。
如何在 X11 中使用 TrueType® 字体。
如何为您的系统设置图形登陆 (XDM)。
在阅读这一章之前,您应该:
知道如何安装额外的第三方应用程序(第 4 章)。
Note: 这一章介绍了 Xorg 和 XFree86 两种 X11 服务的安装和配置。 绝大多数时候, 配置文件、 命令句法是完全一样的。 当存在差异时, Xorg 和 XFree86 的写法都会有所体现。
对于那些熟悉其他图形环境,比如 Microsoft Windows 或者 Mac OS 的用户来说,第一次使用 X 可能会感觉很惊讶。
尽管您不需要了解各种 X 组件的所有细节和它们是如何互相影响的; 然而, 了解一些基本的知识可以让您很好地利用 X 的强大功能。
X 不是第一个为 UNIX 而开发的视窗系统, 但它是最流行的。 X 的原始开发团队在开发 X 之前就已经在另外一个视窗系统上工作了。 那个系统的名字叫做 “W” (就是 “Window”)。X 只是罗马字母中 W 后面 的一个。
X 可以被叫做 “X”, “X Window 系统”, “X11”, 等等。把 X11 称做 “X Windows” 可能会冒犯某些人; 查看 X(7) 可以了解更多的信息。
X 一开始就是针对网络而设计的,所以 采用了 “client-server” 模型。在 X 模型中, “X server” 运行在有键盘,显示器,鼠标的计算机上。 服务器用来管理显示信息,处理来自键盘和鼠标的输入等。 每一个 X 应用程序 (比如 XTerm, 或者 Netscape) 就是一个 “client”。 一个 client 给服务器发送信息,如 “Please draw a window at these coordinates”, 然后服务器就返回处理信息,如 “The user just clicked on the OK button”。
如果您在只有一台计算机的家里或小型办公环境中使用 FreeBSD,您就 需要在同一台计算机上运行 X server和 X client。然而,如果您有很多运行 FreeBSD 的机器,您可以在您的桌面计算机上运行 X server,而在比较高档 的服务器上运行 X 应用程序。在这样的环境中,X server 和 X client 之间的 通信就可以通过网络来进行。
这迷惑了一些人,因为 X 的术语和他们料想的有些不同。 他们以为 “X server” 是运行在功能强大的大型机上的,而 “X client” 是运行在他们桌面上的计算机上的。
记住,X server 是有键盘和显示器的那台计算机,而 X client 是那些显示窗口的程序。
并不需要 client 和 server 都运行在同一种操作系统上,或甚至运行在 同一种类型的计算机上。在 Microsoft Windows 或者 Apple 公司的 Mac OS 上运行 一个 X server 也是可以的,在它们上面也有很多免费的和商业化的应用程序。
从 FreeBSD 5.3-RELEASE 开始, 随 FreeBSD 一同安装的 X 服务改成了 Xorg, 它的授权同 FreeBSD 的授权类似, 可以免费使用。 此外, 也有一些针对 FreeBSD 的商业 X 服务器。
X 的设计哲学很像 UNIX 的设计哲学, “tools, not policy”。这就意味着 X 不会试图去规定任务应该如何 去完成,而是,只给用户提供一些工具,至于决定如何使用这些工具是用户自己的 事情。
这套哲学扩展了 X,它不会规定窗口在屏幕上应该是什么样子,要如何移动鼠标, 什么键应该用来切换窗体 (比如, Alt+Tab按键,在 Microsoft Windows 环境中的作用), 每个窗口的工具条应该 看起来像什么,他们是否应该有关闭按钮等等。
实际上,X 行使了一种叫做 “窗口管理器”的应用程序的职责。有很多这样的程序可用: AfterStep, Blackbox, ctwm, Enlightenment, fvwm, Sawfish, twm, Window Maker,等等。每一个窗口管理器 都提供了不同的界面和观感;其中一些还支持 “虚拟桌面”;有一些允许您可以定制一些键来管理您的桌面; 一些有“开始” 按钮,或者其他类似的设计;一些是 “可定制主题的(themeable)”, 通过安装新的主题, 可以完全改变外观。 这些以及很多其他的窗口管理器, 都可以在 Ports Collection 的 x11-wm 分类目录里找到。
另外,KDE 和 GNOME 桌面环境都有他们自己的窗口管理器 与桌面集成。
每个窗口管理器也有不同的配置机制;有些需要手工来写配置文件, 而另外一些则可以使用 GUI 工具来完成大部分的配置任务,至少 (Sawfish) 有一个用 Lisp 语言来写的配置 文件。
焦点策略: 窗口管理器的另一个特性是鼠标的 “focus policy”。 每个窗口系统都需要有一个选择窗口的方法来接受键盘的输入信息,以及当前 哪个窗口处于可用状态。
您通常比较熟悉的是一个叫做 “click-to-focus” 的焦点策略。 这是 Microsoft Windows 使用的典型焦点策略,也就是您在一个窗口上点击 一下鼠标,这个窗口就处于当前可用的状态。
X 不支持一些特殊的焦点策略。而是,窗口管理器控制着在什么时候哪个窗口 拥有焦点。不同的窗口管理器支持不同的焦点方案。它们都支持点击即获得焦点, 而且它们中的大多数都支持好几种方案。
最流行的焦点策略:
- focus-follows-mouse
鼠标指示器下面的窗口就是获得焦点的窗口。这可以不是位于其他所有 窗口顶部的窗口。您可以通过将鼠标移到另一个窗口就可以来改变焦点,您 不需要在它上面点击。
- sloppy-focus
这种方式是对 focus-follows-mouse 策略的一个小小扩展。对于 focus-follows-mouse, 如果您把鼠标移到了根窗口(或桌面背景)上, 则所有的其它窗口都会失去焦点, 而相关的全部键盘输入也会丢失。 对于 sloppy-focus,只有当指针在键入一个新窗口时,窗口 焦点才会发生变化,当退出当前窗口时是不会变化的。
- click-to-focus
当前窗口由鼠标点击来选择。窗口被“突出显示” , 出现在所有其他窗口的前面。即使指针被移向了另一个窗口,所有的键盘输入 仍会被这个窗口接收。
许多窗口管理器支持其他的策略,与这些相比又有些变化。您可以看具体 窗口管理器的文档。
提供工具而非策略的 X 方法使得在每个应用程序屏幕上看到的窗口部件得到了 大大的扩展。
“Widget” 只是针对用户接口中所有列举项目的一个术语,它 可以用某种方法来点击或操作;如按钮,复选框,单选按钮,图标,列表框等等。 Microsoft Windows 把这些叫做“控件”。
Microsoft Windows 和苹果公司的 Mac OS 都有一个严格的窗口部件策略。 应用程序开发者被建议确保他们的应用程序共享一个普通的所见即所得的用户界面。 对于 X,它并不要求一个特殊的图形风格或一套相结合的窗口部件集。
这样的结果是您不能期望 X 应用程序只拥有一个普通的所见即所得的界面。 有很多的流行的窗口部件集设置,包括来自于 MIT 的 Athena, Motif® (模仿 Microsoft Windows 的窗口风格, 所有部件都具有斜边和3种灰色度), OpenLook, 和其他一些窗口部件集。
如今, 绝大多数比较新的 X 应用程序将使用一组新式的窗口设计, 包括 KDE 所使用的 Qt, 以及 GNOME 所使用的 GTK+。 在这样一种窗口系统下,UNIX 桌面的一些所见即所得特性作了一些收敛, 以使初学者感到更容易一些。
Xorg 或 XFree86 都可以在 FreeBSD 上安装。 从 FreeBSD 5.3-RELEASE 开始, Xorg 成为了 FreeBSD 上的默认 X11 实现。 Xorg 是由 X.Org 基金会发行的开放源代码 X Window 系统实现中的 X 服务。 Xorg 基于 XFree86 4.4RC2 和 X11R6.6 的代码。 X.Org 基金会在 2004 年 4 月发行了 X11R6.7, 并在 2005 年 2 月发布了 X11R6.8.2, 后者是可以从目前的 FreeBSD Ports Collection 中获得的版本。
如果需要从 Ports Collection 编译和安装 Xorg:
# cd /usr/ports/x11/xorg # make install clean
Note: 要完整地编译 Xorg 则需要至少 4 GB 的剩余磁盘空间。
如果想从 Ports Collection 中编译和安装 XFree86:
# cd /usr/ports/x11/XFree86-4 # make install clean
另外 X11 也可以直接从 package 来安装。 我们提供了可以与 pkg_add(1) 工具配合使用的 X11 安装包。 如果从远程下载并安装时, pkg_add(1) 请不要指定版本号。 pkg_add(1) 会自动地下载最新版本的安装包。
想要从 package 安装 Xorg, 简单地输入下面的命令:
# pkg_add -r xorg
XFree86 4.X 也可以用类似的办法安装:
# pkg_add -r XFree86
Note: 上面的例子介绍了如何安装完整的 X11 软件包, 包括服务器端,客户端,字体等等。 此外, 也有一些单独的 X11 的 ports 和 packages.
这一章余下的部分将会讲解如何配置 X11, 以及如何设置一个高效的桌面环境。
任何 port 都一样,您应该检查 /usr/ports/UPDATING 文件看看有哪些改变。 这个文件中包含了把您的系统从 XFree86 转换到 Xorg 的说明。
在尝试任何转换之前请使用 CVSup 来更新您的 ports tree。在转换您的 X11 安装前您还需要安装 sysutils/portupgrade。
在 /etc/make.conf 中您需要添加变量 X_WINDOW_SYSTEM=xorg。 这样做确保您的系统知道正在使用哪种 X11。 旧的 XFREE86_VERSION 变量已经过时并被 X_WINDOW_SYSTEM 变量所取代。
然后,使用下面的命令:
# pkg_delete -f /var/db/pkg/imake-4* /var/db/pkg/XFree86-* # cd /usr/ports/x11/xorg # make install clean # pkgdb -F
pkgdb(1) 命令是 portupgrade 软件的一部分, 会更新各种软件包的依赖关系。
Note: 要联编完整的 Xorg, 请确保至少有 4 GB 的剩余磁盘空间。
在配置 X11 之前, 您需要了解所安装的系统的下列信息:
显示器规格
显示卡的芯片类型
显示卡的显存容量
显示器的规格被 X11 用来决定显示的分辨率和刷新率。 这些规格通常可以从显示器所带的文档中, 以及制造商的网站找到。 需要知道两个数字范围: 垂直刷新率和水平刷新率。
显示卡的芯片类型将决定 X11 使用什么模块来驱动图形硬件。 绝大多数的硬件都能被自动检测, 但是了解它在自动检测出错的时候还是很有用处的。
显示卡的显存大小决定了系统支持的分辨率和颜色深度。 了解这些限制非常重要。
配置 X11 需要几步。 第一步是以超级用户的身份建立初始的配置文件:
# Xorg -configure
在使用 XFree86 的情况下键入:
# XFree86 -configure
这会在 /root 中生成一个叫做 xorg.conf.new 的配置文件 (无论您使用 su(1) 或直接登录, 都会改变默认的 $HOME 目录变量)。 对于 XFree86 来说, 配置文件的名字是 XF86Config.new。 X11 程序将尝试探测系统中的图形硬件并写包含检测到的硬件的配置文件, 以便加载正确的驱动程序。
下一步是测试现存的配置文件, 以确认 Xorg 能够同系统上的图形设备正常工作。 要完成这个任务,只需:
# Xorg -config xorg.conf.new
XFree86 用户应:
# XFree86 -xf86config XF86Config.new
如果用户看到一个黑灰的格子和一个 X 形的鼠标指针,那么配置就是成功 的。要退出测试,只要同时键入 Ctrl+Alt+Backspace。
Note: 如果鼠标工作不正常, 则需要先配置它。 参见 FreeBSD 安装一张中的 第 2.9.10 节。
接下来是调整 xorg.conf.new (或 XF86Config.new, 如果运行 XFree86 的话) 配置文件并作测试。 用文本编辑器如 emacs(1) 或 ee(1) 打开这个文件。 要做的第一件事是为当前系统的显示器设置刷新率。 这些值包括垂直和水平的同步频率。 把它们加到 xorg.conf.new 的 "Monitor" 小节中:
Section "Monitor"
Identifier "Monitor0"
VendorName "Monitor Vendor"
ModelName "Monitor Model"
HorizSync 30-107
VertRefresh 48-120
EndSection
HorizSync 和 VertRefresh 在配置文件中可能没有。 如果是这样的话, 就需要添加它们, 并在 HorizSync 以及 VertRefresh 后面设置合适的数值。 在上面的例子中, 给出了相应的显示其的参数。
X 能够利用显示器所支持的 DPMS (能源之星) 功能。 xset(1) 程序可以控制超时时间, 并强制待机、挂起或关机。 如果希望启用显示器的 DPMS 功能, 则需要把下面的设置添加到 monitor 节中:
Option "DPMS"
关闭 xorg.conf.new (或 XF86Config.new) 之前还应该选择默认的分辨率和色深。 这是在 "Screen" 小节中定义的:
Section "Screen"
Identifier "Screen0"
Device "Card0"
Monitor "Monitor0"
DefaultDepth 24
SubSection "Display"
Viewport 0 0
Depth 24
Modes "1024x768"
EndSubSection
EndSection
DefaultDepth 关键字描述了要运行的默认色深。 这可以通过 Xorg(1) (或 XFree86(1)) 的 -depth 命令行开关来替代配置文件中的设置。 Modes 关键字描述了给定颜色深度下屏幕的分辨率。 需要说明的是, 目标系统的图形硬件只支持由 VESA 定义的标准模式。 前面的例子中, 默认色深是使用 24位色。 在采用这个色深时, 允许的分辨率是 1024x768。
最后就是将配置文件存盘, 并使用前面介绍的测试模式测试一下。
Note: 在发现并解决问题的过程中可以帮助您的工具之一就是 X11 的日志文件,包含了与 X11 服务器相关的每个设备的信息。 Xorg 日志的文件名是 /var/log/Xorg.0.log 这样的格式 (XFree86 日志文件名是 XFree86.0.log 这样的格式)。日志的准确的名字 可以从 Xorg.0.log 到 Xorg.8.log 等等。
如果一切准备停当, 就可以把配置文件放到公共的目录中了。 您可以在 Xorg(1) (或 XFree86(1)) 里面找到具体位置。 这个位置通常是 /etc/X11/xorg.conf 或 /usr/X11R6/etc/X11/xorg.conf (对于 XFree86 它应该是 /etc/X11/XF86Config 或 /usr/X11R6/etc/X11/XF86Config)。
# cp xorg.conf.new /etc/X11/xorg.conf
For XFree86:
# cp XF86Config.new /etc/X11/XF86Config
现在已经完成了 X11 的配置全过程。 为了使用 startx(1) 来启动 XFree86 4.X 需要安装 x11/wrapper port。 Xorg 已经包含了 wrapper 代码, 因此并不需要安装 wrapper port。 X11 服务器也可以用 xdm(1) 来启动。
Note: 有一个图形配置工具, xorgcfg(1) (对于 XFree86 来说, 是 xf86cfg(1)), 随 X11 软件包一同安装。 它可以通过选择合适的驱动和设置交互式地定义配置。 这个程序可以从控制台通过命令 xorgcfg -textmode 来直接启动。 与了解详情, 请参考 xorgcfg(1) 和 xf86cfg(1) 的联机手册。
另外还有一个叫做 xorgconfig(1) 的文本界面配置工具 (对于 XFree86 是 xf86config(1)), 这是一个控制台工具因此对用户显得不太友好, 不过当其他工具无法工作时, 它仍然可能可以使用。
配置Intel i810芯片组的显示卡需要有针对 X11 的能够用来驱动显示卡的 agpgart AGP程序接口。 自从发行版本 4.8-RELEASE 和 5.0-RELEASE 发行以来 agp(4) 驱动程序就包含在 GENERIC 内核配置里面了。 在以前的发行版里,您必须要在您的内核配置文件里添加下面的一行:
device agp
然后重新编译一个新的内核。 或者,您可以在启动的时候使用 loader(8) 自动加载 agp.ko 内核模块。 简单的添加下面这行到 /boot/loader.conf 文件里:
agp_load="YES"
接下来,如果您正在运行 FreeBSD 4.X 或者更早的版本, 需要创建一个设备节点作为程序接口。 要创建 AGP 设备节点,在 /dev 下运行 MAKEDEV(8):
# cd /dev # sh MAKEDEV agpgart
Note: FreeBSD 5.X 和以后的版本会使用 devfs(5) 来半透明的分配 设备节点,因此 MAKEDEV(8) 这一步是不必要的。
这也适用于其他的图形卡硬件配置。 注意如果系统没有将 agp(4) 驱动程序编译进内核,尝试用 kldload(8) 加载模块是无效的。 这个驱动程序必须编译进内核或者使用 /boot/loader.conf 在启动时加载进入内核。
如果您正在使用 XFree86 4.1.0 (或者以后的 版本) 并且出现了像 fbPictureInit 这样未解决的符号提示, 试着在 X11 配置文件里的 Driver "i810" 一行后面加入下面这行:
Option "NoDDC"
X11 使用的默认字体不是很理想。 大型的字体显得参差不齐,看起来很不专业, 并且, 在 Netscape 中, 中的小字体简直难以看懂。 有好几种免费、 高质量的字体可以很方便地用在 X11 中。 例如,URW字体集合 (x11-fonts/urwfonts) 就包括了高质量的 标准 type1 字体 (Times Roman®, Helvetica®, Palatino® 和其他一些).在 Freefont 集合中 (x11-fonts/freefonts) 也包括更多的字体, 但它们中的绝大部分使用在图形软件中,如 Gimp,在屏幕字体中使用并不完美。另外, 只要花很少的功夫,可以将 XFree86 配置成能使用 TrueType 字体:请参见后面的 TrueType 字体一节。
要安装上面的Type1字体,您只需要运行下面的命令:
# cd /usr/ports/x11-fonts/urwfonts # make install clean
freefont 或其他的字库和上面所说的大体类似。 为了让 X 服务器能够检测到这些字体, 需要在 X 服务器的配置文件 /etc/X11/ (Xorg 是 xorg.conf 而 XFree86 则是 XF86Config) 中增加下面的配置:
FontPath "/usr/X11R6/lib/X11/fonts/URW/"
或者,也可以在命令行运行:
% xset fp+ /usr/X11R6/lib/X11/fonts/URW % xset fp rehash
这样会起作用,但是当 X 会话结束后就会丢失, 除非它被添加到启动文件 (~/.xinitrc 中, 针对一个寻常的 startx 会话,或者当您通过一个类似 XDM 的图形登陆管理器登陆时添加到 ~/.xsession 中)。 第三种方法是使用新的 /usr/X11R6/etc/fonts/local.conf 文件: 查看 anti-aliasing 章节。
XFree86 4.X 和 Xorg 都已经内建了对 TrueType 字体的支持。有两个不同的模块能够启用这个功能。 在这个例子中使用 freetype 这个模块,因为它与其他的字体描绘后端 是兼容的。要启用 freetype 模块,只需要将下面这行添加到 /etc/X11/XF86Config 文件的 "Module" 部分。
Load "freetype"
对于 XFree86 3.3.X,需要额外的 TrueType 字体服务器。 Xfstt 通常被用于这个目的。 要安装 Xfstt, 只要简单的安装 port x11-servers/Xfstt.
现在,为 TrueType 字体创建一个目录 (比如, /usr/X11R6/lib/X11/fonts/TrueType) 然后把所有的 TrueType 字体拷贝到这个目录。记住您不能直接从 Macintosh® 计算机中提取 TrueType 字体; 能被 X11 使用的必须是 UNIX/MS-DOS/Windows 格式的。 一旦您已经拷贝了这些文件到这个目录,使用 ttmkfdir 来创建一个 fonts.dir 文件,以便让X字体引擎知道 您已经安装了这些新文件。 ttmkfdir 可以在 FreeBSD Ports Collection x11-fonts/ttmkfdir 中找到。
# cd /usr/X11R6/lib/X11/fonts/TrueType # ttmkfdir > fonts.dir
现在把 TrueType 字体目录添加到字体路径中。 这和上面 Type1 字体的步骤是一样的, 那就是,使用
% xset fp+ /usr/X11R6/lib/X11/fonts/TrueType % xset fp rehash
或者把 FontPath 这行加到 xorg.conf (或 XF86Config) 文件中。
就是这样。现在 Netscape, Gimp, StarOffice™ 和其他所有的 X 应用程序 应该可以认出安装的 TrueType 字体。一些很小的字体(如在 Web 页面上高分辨率显示的文本) 和一些很大的字体(在 StarOffice 下) 现在看起来已经很好了。
X11 从 XFree86 4.0.2 开始支持字体的反走样。 但是, 字体配置在 XFree86 4.3.0 之前是非常繁琐的。 从 XFree86 4.3.0 开始, 对于所有支持 Xft 的应用程序, 所有放到 X11 /usr/X11R6/lib/X11/fonts/ 和 ~/.fonts/ 中的字体都自动地被加入反走样支持。 并不是所有的应用程序都支持 Xft, 但已经有相当多的程序提供 Xft 支持了。 支持 Xft 的应用程序包括 Qt 2.3 以及更高版本 (用以开发 KDE 桌面的工具包)、 GTK+ 2.0 和更高版本 (用于开发 GNOME 桌面的工具包), 以及 Mozilla 1.2 和更高版本。
要控制哪些字体是 anti-aliased,或者配置 anti-aliased 特性, 创建(或者编辑,如果文件已经存在的话)文件 /usr/X11R6/etc/fonts/local.conf。Xft 字体系统的几个 高级特性都可以使用这个文件来调节; 这一部分只描述几种最简单的情况。要了解更多的细节,请查看 fonts-conf(5).
这个文件一定是 XML 格式的。注意确保所有的标签都完全的关闭掉。 这个文件以一个很普通的 XML 头开始, 后跟一个 DOCTYPE 定义, 接下来是 <fontconfig> 标签:
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
像前面所做的那样,在 /usr/X11R6/lib/X11/fonts/ 和 ~/.fonts/ 目录下的所有字体已经可以被支持 Xft 的 应用程序使用了。如果您想添加这两个目录以外的其他路径, 简单的添加下面这行到 /usr/X11R6/etc/fonts/local.conf文件中:
<dir>/path/to/my/fonts</dir>
添加了新的字体,尤其是添加了新的字体目录后, 您应该运行下面的命令重建字体缓存:
# fc-cache -f
Anti-aliasing 会让字体边缘有些模糊,这样增加了非常小的文本的可读性, 并从大文本字体中删除 “锯齿”。 但如果使用普通的文本, 则可能引起眼疲劳。 要禁止 14磅 以下字体的反走样, 需要增加如下配置:
<match target="font">
<test name="size" compare="less">
<double>14</double>
</test>
<edit name="antialias" mode="assign">
<bool>false</bool>
</edit>
</match>
<match target="font">
<test name="pixelsize" compare="less" qual="any">
<double>14</double>
</test>
<edit mode="assign" name="antialias">
<bool>false</bool>
</edit>
</match>
用 anti-aliasing 来间隔一些等宽字体也是不适当的。 这似乎是 KDE 的一个问题。 要修复这个问题需要确保每个字体之间的间距保持在100。 加入下面这些行:
<match target="pattern" name="family">
<test qual="any" name="family">
<string>fixed</string>
</test>
<edit name="family" mode="assign">
<string>mono</string>
</edit>
</match>
<match target="pattern" name="family">
<test qual="any" name="family">
<string>console</string>
</test>
<edit name="family" mode="assign">
<string>mono</string>
</edit>
</match>
(这里把其他普通的修复的字体作为 "mono"),然后加入:
<match target="pattern" name="family">
<test qual="any" name="family">
<string>mono</string>
</test>
<edit name="spacing" mode="assign">
<int>100</int>
</edit>
</match>
某些字体,比如 Helvetica,当 anti-aliased 的时候可能存在问题。 通常的表现为字体本身似乎被垂直的切成两半。 糟糕的时候,还可能导致应用程序比如 Mozilla 崩溃。 为了避免这样的现象,考虑添加下面几行到 local.conf文件里面:
<match target="pattern" name="family">
<test qual="any" name="family">
<string>Helvetica</string>
</test>
<edit name="family" mode="assign">
<string>sans-serif</string>
</edit>
</match>
一旦您完成对 local.conf 文件的编辑,确保您使用了 </fontconfig> 标签来结束文件。 不这样做将会导致您的更改被忽略。
X11 默认的字库当使用反走样时会比较难看。 更好的字库可以在 x11-fonts/bitstream-vera port 中找到。 这个 port 会创建一个 /usr/X11R6/etc/fonts/local.conf 文件, 如果这个文件不存在的话。 反之, port 将创建 /usr/X11R6/etc/fonts/local.conf-vera 文件。 将其内容合并到 /usr/X11R6/etc/fonts/local.conf 中, 则 Bitstream 字体将自动地代替默认的 X11 Serif, Sans Serif, 以及单倍距字体。
最后,用户可以通过他们个人的 .fonts.conf 文件来添加自己的设定。 要完成此项工作, 用户只需简单地创建 ~/.fonts.conf 并添加相关配置。 此文件也必须是 XML 格式的。
最后:对于LCD屏幕, 可能希望使用子像素的取样。 简单而言, 这是通过分别控制 (水平方向分开的) 红、绿、蓝 像素, 来改善水平分辨率; 这样做的效果一般会非常明显。 要启用它, 只需在 local.conf 文件的某个地方加入:
<match target="font">
<test qual="all" name="rgba">
<const>unknown</const>
</test>
<edit name="rgba" mode="assign">
<const>rgb</const>
</edit>
</match>
Note: 依赖于显示器的种类, rgb 可能需要被更改为 bgr, vrgb 或 vbgr:实验一下 看看那个更好。
Anti-aliasing 在您下次启动系统时就能用了。 然而,注意您的程序必须知道如何使用它。现在,Qt 工具包做到了, 所以整个 KDE 环境能够使用 anti-aliased 字体 (查看 KDE 上的 第 5.7.3.2 节 了解细节)。 通过 “Font” capplet (参见 第 5.7.1.3 节 以了解进一步的细节), GTK+ 和 GNOME 也可以使用 anti-aliasing。 默认情况下, Mozilla 1.2 以及更高版本都会自动的使用 anti-aliasing。要禁用它,使用 -DWITHOUT_XFT 选项 重新编译 Mozilla。
X 显示管理器(XDM) 是一个X视窗系统用于进行登陆会话管理的可选项。 这个可以应用于多种情况下,包括小 “X Terminals”, 桌面,大网络显示服务器。既然 X 视窗系统不受网络和协议的限制, 那对于通过网络连接起来的运行 X 客户端和服务器端的不同机器, 就会有很多的可配置项。 XDM 提供了一个选择要连接到哪个显示服务器的图形接口, 只要键入如登陆用户名和密码这样的验证信息。
您也可以把 XDM 想象成与 getty(8) 工具一样(see 第 20.3.2 节 for details)。为用户提供了同样功能。它可以完成系统的登陆任务, 然后为用户运行一个会话管理器 (通常是一个 X 视窗管理器)。接下来 XDM 就等待这个程序退出,发出信号用户已经登陆完成,应当退出屏幕。 这时, XDM 就可以为下一个登陆用户显示登陆和可选择屏幕。
XDM 精灵程序在 /usr/X11R6/bin/xdm 中。您可以在任何时候 用 root 来运行这个程序, 在本地机器上,它将启动管理X的画面。如果要 XDM 每次机器一启动就开始运行, 一个简单的办法是在 /etc/ttys 中加入一个记录。 有关这个文件的更多的格式和使用方法,可以看看 第 20.3.2.1 节。在默认的 /etc/ttys 文件中用于运行 XDM 守护程序的一行是这样的:
ttyv8 "/usr/X11R6/bin/xdm -nodaemon" xterm off secure
默认情况下,这个记录是关闭的,要启用它, 您需要把第5部分的 off 改为 on 然后按照 第 20.3.2.2 节 的指导 重新启动 init(8)。第一部分,这个程序将管理的终端名称是 ttyv8。这意味着 XDM 将运行在第9个虚拟终端上。
XDM 的配置目录是在 /usr/X11R6/lib/X11/xdm中。在这个目录中, 您会看到几个用来改变 XDM 行为和外观的文件。您会找到这些文件:
| 文件 | 描述 |
|---|---|
| Xaccess | 客户端授权规则。 |
| Xresources | 默认的X资源值。 |
| Xservers | 远程和本地显示管理列表。 |
| Xsession | 用于登陆的默认的会话脚本。 |
| Xsetup_* | 登陆之前用于加载应用程序的脚本。 |
| xdm-config | 运行在这台机器上的所有显示的全局配置。 |
| xdm-errors | 服务器程序产生的错误。 |
| xdm-pid | 当前运行的 XDM 的进程 ID。 |
当 XDM 运行时, 在这个目录中有几个脚本和程序可以用来设置桌面。 这些文件中的每一个的用法都将被简要地描述。 这些文件的更详细的语法和用法在 xdm(1) 中将有详细描述。
默认的配置是一个矩形的登陆窗口,上面有机器的名称, “Login:” 和 “Password:”。如果您想设计您自己个性化的 XDM 屏幕,这是一个很好的起点。
连接到 XDM 的用来控制显示的协议 叫做 X 显示管理连接协议(XDMCP)。 这个文件是一个用来控制来自远程机器的XDMCP连接。默认的, 它允许任何客户端连接,但那没有用,除非 xdm-config 被修改成用于侦听远程连接。
在显示选择者或登陆接口之前,这些将被自动运行。 这是一个每个显示都要用到的脚本,叫做 Xsetup_, 后面会跟一个本地显示的数字(比如 Xsetup_0)。典型的,这些脚本将在后台 (如 xconsole)运行一个或两个程序。
这个文件包含了 XDM 正设法运行的的 X 服务器 的输出。 如果 XDM 正设法运行的显示由于某种原因被挂起, 那这是一个寻找错误信息的好地方。 这些信息会在每一个会话的基础上被写到用户的 ~/.xsession-errors 文件中。
对于其他客户端来说,为了连接到显示服务器,您将必须编辑访问控制规则, 然后启用连接侦听。默认的这些被设置成比较保守的值。 要让XDM能侦听连接,先要在 xdm-config 文件中注释掉一行:
! SECURITY: do not listen for XDMCP or Chooser requests ! Comment out this line if you want to manage X terminals with xdm DisplayManager.requestPort: 0
然后重新启动XDM。 记住默认应用程序文件的注释以“!” 字母开始,不是“#”。 您需要设置严格的访问控制。看看在 Xaccess文件中的实例记录,可以参考 xdm(1) 的联机手册。
有几个替换默认 XDM程序的方案。它们是, 上一节已经描述过的kdm (与 KDE捆绑在一起)。 kdm 提供了许多视觉上的改进和局部的修饰, 同样能让用户在启动时能选择他们喜欢的窗口管理器。
这节描述了 FreeBSD 上用于 X 的不同桌面环境。 “桌面环境” 可能仅仅是一个简单的窗口管理器, 也可能是一个像 KDE 或者 GNOME这样的完整桌面应用程序套件。
GNOME 是一个用户界面友好的桌面环境, 能够使用户很容易地使用和配置他们的计算机。 GNOME 包括一个面板(用来启动应用程序和显示状态), 一个桌面(存放数据和应用程序的地方), 一套标准的桌面工具和应用程序, 和一套与其他人相互协同工作的协议集。 其他操作系统的用户在使用 GNOME提供的强大的图形驱动环境时会觉得很好。 更多的关于 FreeBSD 上 GNOME 的信息 可以在 FreeBSD GNOME Project的网页上找到。
安装 GNOME的最简单的方法是 第 2.9.13 节 第 2 章描述的在FreeBSD安装过程中通过 “Desktop Configuration”菜单来进行。 它们也可以很容易地从一个package或Ports Collection安装:
要从网络安装GNOME, 只要键入:
# pkg_add -r gnome2
从源代码编译GNOME,可以使用 ports树:
# cd /usr/ports/x11/gnome2 # make install clean
一旦GNOME被安装好, X Server必须被告知启动 GNOME以代替默认的窗口管理器。 如果在适当的位置已经定制好了文件.xinitrc, 简单地将启动当前窗口管理器的那行替换为 /usr/X11R6/bin/gnome-session。 如果没有对配置文件做过什么特殊的改动, 只需简单地键入:
% echo "/usr/X11R6/bin/gnome-session" > ~/.xinitrc
接着,键入startx, GNOME桌面环境就启动了。
Note: 如果已经使用了一个像 XDM这样的显示管理器,就不能这样做。 而是,用同样的命令创建一个可执行文件.xsession。 要这样做,需要先编辑文件,然后用 /usr/X11R6/bin/gnome-session替换已存在的窗口管理命令:
% echo "#!/bin/sh" > ~/.xsession % echo "/usr/X11R6/bin/gnome-session" >> ~/.xsession % chmod +x ~/.xsession
另一个选项是在登陆时配置显示管理器允许您选择窗口管理器;有关 KDE 细节 会解释如何使用kdm, KDE显示管理器来做。
X11 通过“RENDER”扩展来支持 anti-aliasing。 GTK+ 2.0 以及更高的版本(被 GNOME使用的工具包)可以使用这个功能。 配置 anti-aliasing 在 第 5.5.3 节描述。所以,使用最近的软件, anti-aliasing 可以应用在 GNOME桌面环境中。只需要依次选择 应用程序->桌面首选项->字体,然后选上 最佳形状, 最佳对比度,或者 像素圆滑(LCD)。对于 GTK+ 应用程序,它们不是 GNOME 桌面的一部分,在启动程序前需要设置 环境变量GDK_USE_XFT的值为 1。
KDE 是一个容易使用的现代桌面环境。 KDE 有很多很好的特性:
一个美丽的现代的桌面。
一个集合了完美网络环境的桌面。
一个集成的允许您方便,高效地帮助您使用 KDE 桌面和它的应用程序的帮助系统。
所有的KDE应用程序具有一致的所见即所得界面。
标准的菜单和工具栏,键盘布局,颜色配置等。
国际化:KDE 可以使用超过40种语言。
集中的一致化的桌面驱动配置。
许多有用的 KDE应用程序。
KDE 中有一个基于 KDE 的 “KParts” 技术的办公套件, 它提供了电子表格、 幻灯片、 日程管理, 以及新闻组阅读器等软件。 KDE 还附带了一个叫做 Konqueror 的 web 浏览器, 是为其他运行于 UNIX 系统上的 web 浏览器的强大竞争对手。 关于 KDE 的更多详情可以在 KDE 网站 上找到。 要了解 FreeBSD 专属的 KDE 信息和资源, 请参考 FreeBSD-KDE 团队 的网站。
与 GNOME 或其他桌面环境一样,安装 KDE 的最容易的方法是通过 第 2.9.13 节 第 2 章所描绘的 FreeBSD 安装过程的 “Desktop Configuration” 菜单来安装。 另外,它也可以很容易地从packages或Ports Collection安装:
要从网络安装 KDE 只需要:
# pkg_add -r kde
pkg_add(1) 就会自动的下载最新版本的应用程序。
要从源代码编译 KDE, 可以使用 ports 树:
# cd /usr/ports/x11/kde3 # make install clean
KDE 安装完成后, X server必须被告知启动这个应用程序以代替默认的窗口管理器。 这可以通过编辑 .xinitrc 文件来完成:
% echo "exec startkde" > ~/.xinitrc
现在,无论您什么时候用 startx进入 X 视窗系统, KDE 就将成为您的桌面环境。
如果使用一个像 XDM这样的显示管理器, 那配置文件可能有点不同。需要编辑一个 .xsession 文件,有关 kdm 的用法会在这章的后面介绍。
现在 KDE 已经被安装在系统中了。 通过帮助页面或点击多个菜单可以发现很多东西。 Windows 或 Mac® 用户会有回到家的感觉。
有关 KDE 的最好的参考资料是 它的在线文档。KDE 拥有它自己的 web 浏览器 Konqueror, 还有很多其他的应用程序和丰富文档。 这节的余下部分将讨论一些很难用走马观花的方法来学习的技术项目。
一个多用户系统的系统管理员可能希望给用户提供一个图形化的登陆界面, 像前面描述的一样,可以使用 xdm。 然而, KDE 提供了另一种选择, kdm, 它看起来很吸引人,还包含很多登陆选项。 特别的,用户可以很容易地(通过一个菜单) 选择登陆后使用哪个桌面环境 (KDE, GNOME或其他)。
首先,以 root 用户身份运行 KDE 控制面板,kcontrol。 通常情况下,以 root 身份运行 X 环境是很不安全的。 您应当以普通用户来使用窗口管理器, 打开一个终端窗口(例如 xterm 或者 KDE 的 konsole),用 su 来切换成 root(这个用户必须首先在 /etc/group 的 wheel 组里),然后再键入 kcontrol。
点击左边标记 系统的图标,然后选择登陆管理器 。在右面,有几个配置选项, KDE 手册会解释的更加详细一些。 点击右边的会话。 点击新类型来添加几个窗口管理器或桌面环境。 这些只是标签,所以它们用 KDE或 GNOME要比用 startkde或者 gnome-session来得好。 也可以是failsafe。
也可以用同样方法定制其他菜单,它们主要是起修饰和自我解释用的。 完成之后,键入Apply按钮,退出控制中心。
要确信kdm理解标签 (KDE, GNOME等)的意思,需要编辑一些 xdm用的文件。
Note: 在KDE 2.2中,这有些变化: kdm现在使用它自己的配置文件。 请看看KDE 2.2的文档。
case $# in
1)
case $1 in
failsafe)
exec xterm -geometry 80x24-0-0
;;
esac
esac
需要在这部分加几行。 假定使用的标签是“KDE”和 “GNOME”, 就像下面这样:
case $# in
1)
case $1 in
kde)
exec /usr/local/bin/startkde
;;
GNOME)
exec /usr/X11R6/bin/gnome-session
;;
failsafe)
exec xterm -geometry 80x24-0-0
;;
esac
esac
为了加上KDE 的登陆桌面背景, 需要在 /usr/X11R6/lib/X11/xdm/Xsetup_0中加入下面这行:
/usr/local/bin/krootimage
现在,确信kdm在 /etc/ttys中列出来了,并且将被启动。 要这样做,只要跟着先前有关 XDM用法,用 /usr/X11R6/bin/xdm 程序的用法替换/usr/local/bin/kdm的用法就可以了。
X11 通过它的 “RENDER”扩展来支持anti-aliasing,从2.3版本开始, Qt (被KDE使用的工具包)也支持 这个扩展。在有关anti-aliasing X11字体的第 5.5.3 节节描述到了如何配置这些。 所以,对于现在的软件,anti-aliasing也可以用在 KDE桌面上。只需要到KDE 菜单,到 Preferences->Look and Feel->Fonts,然后点击 Use Anti-Aliasing for Fonts and Icons。 对于一个不是 KDE的一部分的Qt应用程序,环境变量 QT_XFT需要在启动程序前被设置成true。
XFce是以被GNOME 使用的 GTK+ 工具包为基础的桌面环境, 但是更加轻巧,适合于那些需要一个易于使用和配置并且简单而高效的桌面的人。 看起来,它非常像使用在商业UNIX系统上的 CDE环境。 XFce的主要特性有下面这些:
一个简单,易于使用的桌面。
完全通过鼠标的拖动和按键来控制等。
与CDE 相似的主面板,菜单,applets和应用launchers。
集成的窗口管理器,文件管理器,声音管理器, GNOME应用模块,和其他一些。
可配置界面的主题。(因为它使用GTK+)
快速,轻便,高效:对于比较老的/旧的机器或带有很少内存的机器仍然很理想。
更多有关XFce 的信息可以参考XFce 网站。
有一个二进制的XFce 软件包存在(在写作的时候)。要安装的话,执行下面的命令:
# pkg_add -r xfce4
另外,要从源代码建立,使用Ports Collection:
# cd /usr/ports/x11-wm/xfce4 # make install clean
现在,要告诉X服务器在下次X启动时执行 XFce。 只要执行下面的命令:
% echo "/usr/X11R6/bin/startxfce4" > ~/.xinitrc
接下来就是启动 X, XFce将成为您的桌面。 与以前一样,如果使用像 XDM 这样的显示管理器,需要创建一个 .xsession文件,就像有关 GNOME 的那节描述的, 使用/usr/X11R6/bin/startxfce4 命令,或者,配置显示管理器允许在启动时选择一个桌面, 就像有关kdm的那节描述的。
前面已经介绍了必要的基础知识, 手册的这一部分将讨论 FreeBSD 的一些最常用的功能。 这些章节包括:
向您介绍流行和实用的桌面应用程序: 浏览器、产品工具、文档察看程序,等等。
向您介绍一系列可以在 FreeBSD 上使用的多媒体工具。
介绍构建定制的 FreeBSD 内核以启用附加功能的方法。
详细介绍包括桌面和网络打印机在内的打印系统设置。
向您展示如何在 FreeBSD 上运行 Linux 应用程序。
某些章节希望您首先阅读过其他部分,在这些章的开头部分也会给出类似的提示。
FreeBSD 可以运行种类繁多的桌面应用程序, 这包括像浏览器和字处理这样的软件。 绝大多数这样的程序都可以通过 package 来安装, 或者从 Ports Collection 自动地构建。 许多新用户希望能够在它们的系统中找到这样的应用程序。 这一章将向您展示如何轻松地使用 package 或者 Ports Collection 中安装这样的软件。
需要注意的是从 ports 安装意味着要编译源码。 根据编译的 ports 和电脑速度的不同, 这可能需要花费相当长的时间。 若是您觉得编译源码太过耗时的话, 绝大多数 ports 也有预编译的版本可供安装。
因为 FreeBSD 提供的二进制兼容 Linux 的特性, 许多原本为 Linux 开发的程序都可以直接用在您的桌面。 在安装任何的 Linux 应用程序之前, 强烈的推荐您阅读 第 10 章。 当您在寻找特定的 ports 时, 可以使用 whereis(1)。 一般来说, 许多利用 Linux 二进制兼容特性的 ports 都以“linux-”开头。 在下面的介绍中,都假设安装 Linux 应用程序前已经开启了 Linux 二进制兼容功能。
本章涵盖以下种类应用程序:
浏览器 (例如 Mozilla、 Netscape、 Opera、 Firefox、 Konqueror)
办公、图象处理 (例如 KOffice、 AbiWord、 GIMP、 OpenOffice.org)
文档查看 (例如 Acrobat Reader®、 gv、 Xpdf、 GQview)
财务 (例如 GnuCash、 Gnumeric、 Abacus)
阅读这章之前,您应该:
FreeBSD并没有预先安装特定的浏览器。然而,在 ports 的目录 www 有许多浏览器可以安装。如果您没有时间一一编译它们 (有些时候这可能需要花费相当长的时间) 大部分都有 package 可用。
KDE 和 GNOME 已经提供 HTML 浏览器。 请参考第 5.7 节得到更多完整的有关设定这些桌面环境的信息。
如果您要找小型的浏览器, 可以试试看 www/dillo、 www/links 或 www/w3m。
这一节涉及如下程序:
| 程序名称 | 资源需求 | 安装时间 | 主要依赖 |
|---|---|---|---|
| Mozilla | 多 | 大量时间和空间 | Gtk+ |
| Netscape | 多 | 轻松 | 兼容Linux Binary |
| Opera | 少 | 轻松 | 同时有可用的 FreeBSD 和 Linux 版本。 Linux 版本需要使用 Linux 二进制兼容模块和 linux-openmotif。 |
| Firefox | 中等 | 长 | Gtk+ |
| Konqueror | 中等 | 长 | 需要 KDE 库 |
Mozilla 也许是 FreeBSD 桌面上最合适的浏览器了。它新颖稳定,且完整的移植到了 FreeBSD。拥有非常合乎标准的 HTML 支持,它也能处理邮件和阅读新闻组。 假如您打算做一个自己的主页的话,它甚至提供一个 HTML 编辑器。 Netscape 的使用者可能觉得它和 Communicator 非常相似, 两者有些部分实际上是相通的。
在 CPU 速度低于 233MHz 或者内存少于 64MB 的老式电脑上,Mozilla 会占用相当多资源而难以使用。您也许可以试试 Opera 浏览器,本章稍后将会介绍它。
也许基于某种原因,您不能或者不想编译 Mozilla,FreeBSD GNOME 团队已经为您制作好了 package。只需要通过网络安装它:
# pkg_add -r mozilla
如果没 package 可用,而您又有足够的时间和磁盘空间,您可以获取 Mozilla 的源码来编译并安装它到您的系统上。 执行以下指令既可:
# cd /usr/ports/www/mozilla # make install clean
Mozilla 需要 root 权限执行 chrom 注册来确定正确的初始化。另外, 如果您想要一些额外的插件比如象 mouse gestures,您也必须以 root 权限执行 Mozilla 以便正确的安装。
一旦您完成了 Mozilla 安装,您就再也不需要 root 权限了。您可以用如下方式执行 Mozilla:
% mozilla
也可以用如下方式直接运行电子邮件和新闻阅读器:
% mozilla -mail
安装 Mozilla 很简单,但是安装 Mozilla 的额外支持比如象 Java™ 和 Macromedia® Flash™ 却会消耗很多时间和磁盘空间。
第一件事就是使用 Mozilla 下载要安装的文件。让您的浏览器连接到 http://www.sun.com/software/java2/download.html, 在他们的页面上建立一个帐户。记得要保存用户名和密码,也许以后会用的着它。 下载 j2sdk-1_3_1-src.tar.gz 文件到 /usr/ports/distfiles/ 位置,ports 不会自动的下载它,这是因为许可证的限制。然后从 http://java.sun.com/webapps/download/Display?BundleId=7905 下载“java 环境”。 它的文件名是 j2sdk-1_3_1_08-linux-i586.bin 比较大 (大约是 25MB!)。象前边一样,这个文件必须放到 /usr/ports/distfiles/。 最后下载“java patchkit”,它在这里可以找到http://www.eyesbeyond.com/freebsddom/java/, 然后把它放在 /usr/ports/distfiles/。
用标准的 make install clean 安装 java/jdk13 并且接着安装 www/flashpluginwrapper port。这个 port 需要 emulators/linux_base 这个庞大的 port。虽然有其它的 Flash 插件存在,然而他们对我来说却不能用。
如果 Mozilla 还没有安装,安装 www/mozilla port。
现在用如下方式复制 Flash 插件:
# cp /usr/local/lib/flash/libflashplayer.so \
/usr/X11R6/lib/browser_plugins/libflashplayer_linux.so
# cp /usr/local/lib/flash/ShockwaveFlash.class \
/usr/X11R6/lib/browser_plugins/
把下面这些行加入到 Mozilla 启动脚本 /usr/X11R6/bin/mozilla 的开头 (在 #!/bin/sh 之后)。
LD_PRELOAD=/usr/local/lib/libflashplayer.so.1 export LD_PRELOAD
这将会启用 Flash 插件.
现在只要如下启动 Mozilla:
% mozilla &
并且从 Help 菜单选取 About Plug-ins 选项, 所有可用的插件列表就会出现。Java 和 Shockwave® Flash 应该都会被列出。
Ports Collection 里包含数个版本的 Netscape 浏览器。因为 FreeBSD 版本包含有一个严重的安全问题, 强烈建议不要安装它们。作为替代,使用最近的 Linux 或者其它 UNIX 版本。
最新的稳定版的 Netscape 浏览器是 Netscape 7。它可以从 Ports Collection 安装:
# cd /usr/ports/www/netscape7 # make install clean
Caution不推荐您使用 Netscape 4.x 版本,因为它已经不适应当今的标准。然而, Netscape 7.x 和最新的版本只可以使用在 i386 平台。
Opera 是一个快速、拥有许多特性, 和标准兼容的浏览器。它有两个版本:“native”FreeBSD 版本和一个可运行在 Linux 模拟器下的版本。对于每个操作系统, 它都有一个免费的但是有广告和一个没有广告但是必须向 Opera web site 付费的版本。
要使用 Opera 的 FreeBSD 版本来浏览网页,安装以下的 package:
# pkg_add -r opera
有些 FTP 站点没有所有版本的 package, 您也可以通过 Ports Collection 来安装:
# cd /usr/ports/www/opera # make install clean
要安装 Linux 版本的 Opera,将上面例子中的 opera 替换为 linux-opera。Linux 版本在某些情况下非常有用,象是使用只有 Linux 版本的插件,例如 Adobe Acrobat Reader。不然的话在其它方面, FreeBSD 和 Linux 版本是完全一样的。
Firefox 是基于 Mozilla 代码基础的的下一代浏览器。 Mozilla 是一个完整的应用程序套件, 包括比如浏览器、邮件客户端、聊天客户端等等。 Firefox 只是一个浏览器, 所以更小、更快。
安装软件包键入:
# pkg_add -r firefox
如果您更喜欢从源代码编译,也可以使用 Ports Collection:
# cd /usr/ports/www/firefox # make install clean
Konqueror 是 KDE 的一部分,不过也可以通过安装 x11/kdebase3 在非 KDE 环境下使用。 Konqueror 不止是一个浏览器, 也是一个文件管理器和多媒体播放器。
Konqueror 也带有丰富的插件, 可以在 misc/konq-plugins 下面找到。
Konqueror 也支持 Flash, 可以在 http://freebsd.kde.org/howto.php 找到一个 How To。
当需要进行办公或者进行图象处理时, 新用户通常都会找一些好用的办公套件或者字处理软件。目前有一些桌面环境比如象 KDE 已经提供了办公套件。 FreeBSD 提供所有的要求,桌面环境也不例外。
这节涉及如下程序:
| 软件名称 | 资源需求 | 安装时间 | 主要依赖 |
|---|---|---|---|
| KOffice | 少 | 多 | KDE |
| AbiWord | 少 | 少 | Gtk+ 或 GNOME |
| The Gimp | 少 | 长 | Gtk+ |
| OpenOffice.org | 多 | 长 | GCC 3.1、JDK™ 1.3、Mozilla |
KDE 社区提供了一套办公套件, 它能用在桌面环境。它包含四个标准的组件,这些组件可以在其它办公套件中找到。 KWord 是字处理程序、 KSpread 是电子表格程序、 KPresenter 是演示文档制作管理程序、 Kontour是矢量绘图软件。
安装最新的 KOffice 之前,先确定您是否安装了最新版的 KDE。
使用 package 来安装 KOffice,安装细节如下:
# pkg_add -r koffice
如果没有可用的 package,您可以使用 Ports Collection 安装。 安装 KDE3 的 KOffice 版本,如下:
# cd /usr/ports/editors/koffice-kde3 # make install clean
AbiWord 是一个免费的字处理程序,它看起来和 Microsoft Word 的感觉很相似。 它适合用来打印文件、信函、报告、备忘录等等, 它非常快且包含许多特性,并且非常容易使用。
AbiWord 可以导入或输出很多文件格式, 包括一些象 Microsoft.doc 格式的文件。
AbiWord 也有 package 的安装方式。您可以用以下方法安装:
# pkg_add -r abiword
如果没有可用的 package,它也可以从 Ports Collection 编译。ports collection 应该是最新的。它的安装方式如下:
# cd /usr/ports/editors/abiword # make install clean
对图象的编辑或者加工, GIMP 是一个非常精通图象处理的软件。 它可以被用来当作简单的绘图程序或者一个专业的照片处理套件。 它支持大量的插件和具有脚本界面的特性。 GIMP 可以读写众多的文件格式, 支持扫描仪和手写板。
您可以用下列命令安装:
# pkg_add -r gimp
如果您在 FTP 站点没有找到这个 package,您也可以使用 Ports Collection 的方法安装。ports 的 graphics 目录也包含有 Gimp 手册。 以下是安装它们的方法:
# cd /usr/ports/graphics/gimp # make install clean # cd /usr/ports/graphics/gimp-manual-pdf # make install clean
Note: Ports 中的 graphics 目录也有开发中的 GIMP 版本 graphics/gimp-devel。 HTML 版本的 Gimp 手册 可以在 graphics/gimp-manual-html 找到。
OpenOffice.org 包括一套完整的办公套件: 一个字处理程序、一个电子表格程序、一个演示文档管理程序和一个绘图程序。 它和其它的办公套件的特征非常相似,它可以导入输出不同的流行的文件格式。 它包括一些不同的语言界面、拼写检查和字典。
OpenOffice.org 的字处理程序使用 XML 文件格式使它增加了可移植性和灵活性。电子表格程序支持宏语言和使用外来的数据库界面。 OpenOffice.org 已经可以平稳的运行在 Windows、Solaris™、Linux、FreeBSD 和 Mac OS X 等各种操作系统下。更多的有关 OpenOffice.org 的信息您可以在 OpenOffice网页找到。 对于特定的 FreeBSD 版本的信息,您可以在直接在 FreeBSD OpenOffice 移植团队的页面下载。
安装 OpenOffice.org 方法如下:
# pkg_add -r openoffice
Note: 如果您正在使用 FreeBSD 的 -RELEASE 版本, 一般来说这样做是没问题的。 如果不是这样, 您就可能需要看一看 FreeBSD OpenOffice 移植小组的网站, 并使用 pkg_add(1) 从那里下载并安装合适的软件包。 最新的发布版本和开发版本都可以在那里找到。
装好 package 之后, 您必须运行安装程序, 并选择 标准的工作站安装 (standard workstation installation)。 以将要使用 OpenOffice.org 的用户的身份来运行:
% openoffice-setup
如果没有可用的 OpenOffice.org package,您仍旧可以选择编译 port。然而, 您必须记住它的要求以及大量的磁盘空间和相当长的时间编译。
# cd /usr/ports/editors/openoffice-1.1 # make install clean
一旦这个完成,运行 OpenOffice.org setup 设置程序并且选择一个 标准的工作站设置 如下:
% cd /usr/ports/editors/openoffice-1.1 % make install-user
如果您想要使用一个本地化的版本,有如下一些 ports 可用:
| 语言 | Port |
|---|---|
| 加泰罗尼亚语 | editors/openoffice-1.1-ca |
| 捷克语 | editors/openoffice-1.1-cs |
| 丹麦语 | editors/openoffice-1.1-dk |
| 希腊语 | editors/openoffice-1.1-el |
| 西班牙语 | editors/openoffice-1.1-es |
| 爱沙尼亚语 | editors/openoffice-1.1-et |
| 芬兰语 | editors/openoffice-1.1-fi |
| 意大利语 | editors/openoffice-1.1-it |
| 荷兰语 | editors/openoffice-1.1-nl |
| 瑞典语 | editors/openoffice-1.1-se |
| 斯洛伐克语 | editors/openoffice-1.1-sk |
| 斯洛文尼亚语 | editors/openoffice-1.1-sl_SI |
| 土耳其语 | editors/openoffice-1.1-tr |
| 阿拉伯语 | arabic/openoffice-1.1 |
| 中文 (简体) | chinese/openoffice-1.1-zh_CN |
| 中文 (繁体) | chinese/openoffice-1.1-zh_TW |
| 法语 | french/openoffice-1.1 |
| 德语 | german/openoffice-1.1 |
| 匈牙利语 | hungarian/openoffice-1.1 |
| 日语 | japanese/openoffice-1.1 |
| 韩国语 | korean/openoffice-1.1 |
| 波兰语 | polish/openoffice-1.1 |
| 葡萄牙语 (巴西) | portuguese/openoffice-1.1-pt_BR |
| 葡萄牙语 | portuguese/openoffice-1.1-pt_PT |
| 俄语 | russian/openoffice-1.1 |
一些新的文档格式近来得到流行。它们所需要的标准查看器可能不一定在系统内。 在本节我们将了解如何安装它们。
这节涵盖如下应用程序:
| 软件名称 | 资源需求 | 安装时间 | 主要依赖 |
|---|---|---|---|
| Acrobat Reader | 少 | 少 | Linux二进制兼容 |
| gv | 少 | 少 | Xaw3d |
| Xpdf | 少 | 少 | FreeType |
| GQview | 少 | 少 | Gtk+ 或 GNOME |
现在许多文档都用 PDF 格式, 根据“轻便小巧文档格式”的定义。一个被建议使用的查看器是 Acrobat Reader,由 Adobe 所发行的 Linux 版本。因为 FreeBSD 能够运行 Linux 二进制文件, 所以它也可以用在 FreeBSD 中。
安装 Acrobat Reader 5 package,如下:
# pkg_add -r acroread
通常, 如果 package 不可用或者您想要一个最新的版本, 您可以用 Ports Collection 来安装:
# cd /usr/ports/print/acroread5 # make install clean
gv 是 PostScript® 和 PDF 文件格式查看器。它源自 ghostview 因为使用 Xaw3d 函数库让它看起来更美观。 它很快而且界面很干净。gv 有很多特性比如象纸张大小、刻度或者抗锯齿。 大部分操作都可以用键盘或鼠标完成。
安装 gv package,如下:
# pkg_add -r gv
如果您没有可用的 package,您可以使用 Ports Collection 安装:
# cd /usr/ports/print/gv # make install clean
如果您想要一个小型的 FreeBSD PDF 查看器, Xpdf 是一个小巧并且高效的查看器。 它只需要很少的资源而且非常稳定。它使用标准的 X 字体并且不需要 Motif 或者其它的 X 工具包。
安装 Xpdf package,使用如下命令:
# pkg_add -r xpdf
如果 package 不可用或者您宁愿使用 Ports Collection,如下:
# cd /usr/ports/graphics/xpdf # make install clean
一旦安装完成,您就可以启动 Xpdf 并且使用鼠标右键来使用菜单。
GQview 是一个图片管理器。 您可以单击鼠标来观看一个文件、开启一个外部编辑器、 使用预览和更多的功能。它也有幻灯片播放模式和一些基本的文件操作。 您可以管理采集的图片并且很容易找到重复的。 GQview 可以全屏幕观看并且支持国际化。
如果您想要安装 GQview package,如下:
# pkg_add -r gqview
如果您没有可用的 package 或者您宁愿使用 Ports Collection,如下:
# cd /usr/ports/graphics/gqview # make install clean
假如,基于任何的理由,您想要在 FreeBSD Desktop 管理您个人的财政,有一些强大并且易于使用的软件可以被您选择安装。 它们中的一些与流行的文件格式兼容象 Quicken® 或 Excel 文件。
本节涵盖如下软件:
GnuCash 是 GNOME 的一部分,GNOME 致力于为最终用户提供用户友好且功能强大的软件。使用 GnuCash,您可以关注您的收入和开支、您的银行帐户, 或者您的股票。它的界面特性看起来非常的专业。
GnuCash 提供一个智能化的注册、帐户分级系统、 很多键盘快捷方式和自动完成方式。它能分开一个单个的处理到几个详细的部分。 GnuCash 能导入和合并 Quicken QIF 文件格式。 它也支持大部分的国际日期和流行的格式。
安装 GnuCash 到您的系统,如下:
# pkg_add -r gnucash
如果 package 不可用,您可以使用 Ports Collection 安装:
# cd /usr/ports/finance/gnucash # make install clean
Gnumeric 是一个电子表格程序, GNOME 桌面环境的一部分。 它以通过元素格式和许多片断的自动填充系统来方便的自动“猜测”用户输入而著称。 它能导入一些流行的文件格式,比如象 Excel、 Lotus 1-2-3 或 Quattro Pro。 Gnumeric 凭借 math/guppi 支持图表。 它有大量的嵌入函数和允许所有通常比如象、数字、货币、日期、 时间等等的一些单元格式。
安装 Gnumeric package,如下:
# pkg_add -r gnumeric
如果 package 不可用,您可以使用 Ports Collection 安装:
# cd /usr/ports/math/gnumeric # make install clean
Abacus 是一个小巧易用的电子表格程序。 它包含许多嵌入函数在一些领域如统计学、财务和数学方面很有帮助。 它能导入和输出 Excel 文件格式。 Abacus 可以产生 PostScript 输出。
安装 Abacus package,如下:
# pkg_add -r abacus
如果 package 不可用,您可以使用 Ports Collection 安装:
# cd /usr/ports/deskutils/abacus # make install clean
当 FreeBSD 因为它的效能和稳定而在 ISP 之间流行时, 它也可以完全应用在桌面环境。拥有数以千计的 packages 或者 ports, 您可以为您的需要建立完美的桌面环境。
一旦您完成了您的桌面环境的安装,您可能想要进一步了解 misc/instant-workstation。 “meta-port” 允许您为一个工作站建立一个定制的 ports 设置。您可以编辑 /usr/ports/misc/instant-workstation/Makefile 定制它。 接着是缺省添加和删除 ports 的语法,和使用通常的步骤建立它。 最后,您将能建立一个适合您自己桌面的大的 package 并在您的其它的工作站上安装它!
下面是本章涉及到的所有的软件的快速回顾:
| 软件名称 | Package 名称 | Ports 名称 |
|---|---|---|
| Mozilla | mozilla | www/mozilla |
| Netscape | linux-netscape7 | www/netscape7 |
| Opera | opera | www/opera |
| Firefox | firefox | www/firefox |
| KOffice | koffice-kde3 | editors/koffice-kde3 |
| AbiWord | abiword | editors/abiword |
| The GIMP | gimp | graphics/gimp |
| OpenOffice.org | openoffice | editors/openoffice-1.1 |
| Acrobat Reader | acroread | print/acroread5 |
| gv | gv | print/gv |
| Xpdf | xpdf | graphics/xpdf |
| GQview | gqview | graphics/gqview |
| GnuCash | gnucash | finance/gnucash |
| Gnumeric | gnumeric | math/gnumeric |
| Abacus | abacus | deskutils/abacus |
FreeBSD 广泛地支持各种声卡, 让您可以从容地享受来自您的计算机的高保真输出。 这包括了录制和播放 MPEG Audio Layer 3 (MP3)、 WAV、 以及 Ogg Vorbis 等许多种格式声音的能力。 FreeBSD 同时也包括了许多的应用程序,让您可以录音、 增加声音效果以及控制附加的MIDI设备。
要是乐于动手, FreeBSD 也能支持播放一般的视频文件和 DVD。 对各种视频媒体进行编码、 转换和播放的应用程序比起处理声音的应用程序略少一些。 例如, 在撰写这章时, FreeBSD Ports Collection 中还没有类似 audio/sox 那样好的重编码工具能够用来在不同的格式之间转换。 不过, 这个领域的软件研发进展是很快的。
本章将介绍配置声卡的必要步骤。 X11 的安装和配置 (第 5 章) 里已经考虑到了您显卡的问题, 但要想有更好的播放效果, 仍需要调整一些东西。
读了本章后,您将知道:
如何配置系统识别声卡。
运用样本程序去测试声卡工作的方法。
如何排除声卡安装中的问题。
如何播放和编码MP3以及其它格式的音频。
X 服务器如何支持视频。
哪些好的视频播放/压缩“ports”。
如何播放DVD、 .mpg 和 .avi 文件。
如何从CD和DVD中提取文件。
怎样配置电视卡。
如何配置图像扫描仪。
在读本章这前,您应该:
知道如何配置、安装一个新的内核 (第 8 章)
Warning用mount(8) 命令去装载CD光盘,至少会产生一个错误, 更糟的情况下会产生 kernel panic。 这种媒体所用的编码与通常的ISO文件系统是不同的。
在开始之前,您应该清楚声卡类型、所用的芯片以及它是 PCI 还是 ISA 卡。 FreeBSD 支持种类繁多的 PCI 和 ISA 卡。检查 Hardware Notes 中支持的音频设备列表看看是否支持您的声卡。 这份文档也只论及支持您的声卡的驱动程序。
要使用声卡, 就应装载正确的驱动程序。完成的方式有两种: 最简单的是使用命令 kldload(8) 来装载一个内核模块,在命令行输入
# kldload snd_emu10k1
或者在文件 /boot/loader.conf 里加入一行,内容如下
snd_emu10k1_load="YES"
上边实例用于 Creative SoundBlaster® Live! 声卡。 其它可装载的模块列在文件/boot/defaults/loader.conf里边。 如果不知道应该使用哪个驱动, 您可以尝试加载 snd_driver module:
# kldload snd_driver
这是个 meta 驱动,一次加载了最常见的设备驱动。 这会提高搜索正确驱动的速度。也可以通过 /boot/loader.conf 工具来加载所有的声卡驱动。
Note: 在 FreeBSD 4.X 下,要加载所有的声卡驱动,您必须加载 snd 模块而不是 snd_driver 模块。
另外,您也可以把支持您声卡的代码静态地编译到内核里去。 下一节就采用这种方式支持硬件给出提示。 关于重新编译内核,请参考 第 8 章。
要做的第一件事情就是添加通用音频驱动 sound(4) 到内核中,您需要添加下面这行到内核配置文件中:
device sound
在 FreeBSD 4.X 下,使用下面这行:
device pcm
接下来就是加入对我们所用声卡的支持了。 首先需要确定我们的声卡需要使用哪一个驱动。 您可以参考 硬件兼容列表 所列出的音频设备, 以确定您声卡的驱动。 例如, Creative SoundBlaster Live! 声卡由 snd_emu10k1(4) 驱动来支持。 要添加它, 需要在内核编译配置文件中加入下面一行:
device "snd_emu10k1"
一定要阅读驱动的联机手册了解如何使用它们。 关于内核配置文件中声卡驱动的写法, 也可以在 /usr/src/sys/conf/NOTES 文件 (对于 FreeBSD 4.X, 则是 /usr/src/sys/i386/conf/LINT)。
非即插即用的 ISA 卡可能需要您为内核提供一些关于声卡配置的信息 (IRQ、 I/O 端口, 等等)。 这项工作可以通过 /boot/device.hints 文件来完成。 系统启动时, loader(8) 将读取这个文件, 并将其中的配置传给内核。 例如, 旧式的 Creative SoundBlaster 16 ISA 非即插即用卡需要使用 snd_sbc(4) 驱动, 您可以在内核编译配置文件中增加如下配置:
device snd_sbc
还有下面这些到 /boot/device.hints中:
hint.sbc.0.at="isa" hint.sbc.0.port="0x220" hint.sbc.0.irq="5" hint.sbc.0.drq="1" hint.sbc.0.flags="0x15"
这样,声卡使用 0x220 I/O 端口和 IRQ 5。
/boot/device.hints 文件的写法会在声卡驱动的联机手册中描述。 在 FreeBSD 4.X 上,这些设定直接写进内核配置文件中。 对于我们的 ISA 卡这种情况,我们只要使用这行:
device sbc0 at isa? port 0x220 irq 5 drq 1 flags 0x15
上面所展示的是默认的配置。 有时候, 您可能需要更改 IRQ 或其他配置, 以适应声卡的实际情况。 查看 snd_sbc(4) 联机手册了解更多信息。
Note: 在 FreeBSD 4.X 下, 一些主板内建声卡设备的系统需要在内核配置文件中配置下面的选项:
options PNPBIOS
用修改过的内核重起,或者加载了需要的模块之后, 声卡将会出现在您的系统消息缓存中 (dmesg(8)),就像这样:
pcm0: <Intel ICH3 (82801CA)> port 0xdc80-0xdcbf,0xd800-0xd8ff irq 5 at device 31.5 on pci0 pcm0: [GIANT-LOCKED] pcm0: <Cirrus Logic CS4205 AC97 Codec>
声卡的状态可以通过 /dev/sndstat 文件来查询:
# cat /dev/sndstat FreeBSD Audio Driver (newpcm) Installed devices: pcm0: <Intel ICH3 (82801CA)> at io 0xd800, 0xdc80 irq 5 bufsz 16384 kld snd_ich (1p/2r/0v channels duplex default)
您系统的输出可能与此不同。如果没有看到 pcm 设备,回顾并检查一下前面做的。 重新检查您的内核配置文件并保证选择了正确的设备。 常见问题列在第 7.2.2.1 节一节。
如果一切正常,您现在应该拥有一个多功能声卡了。 如果您的 CD-ROM 或者 DVD-ROM 驱动器适当的与声卡相关联, 您可以把 CD 放入驱动器并用 cdcontrol(1) 来播放:
% cdcontrol -f /dev/acd0 play 1
许多应用程序,比如 audio/workman 可以提供一个友好的界面。 您可能想要安装一个应用程序比如 audio/mpg123 来听 MP3 音频文件。一个快速的测试声卡正在发送数据到 /dev/dsp 的方式,像这样做:
% cat filename > /dev/dsp
这里 filename 可以是任意文件。 这行命令会产生一些噪音,证明声卡果真在工作。
Note: FreeBSD 4.X 用户需要创建声卡设备节点才能使用。 如果在消息缓存中展示出来的卡是 pcm0, 您必须以 root 来运行下面这两行:
# cd /dev # sh MAKEDEV snd0如果检测的声卡返回 pcm1, 做上面展示的同样的步骤,只是要用 snd1 来取代 snd0。
MAKEDEV 会创建一组设备节点让相关联应用程序的不同声音使用。
声卡混音级别可以通过 mixer(8) 命令更改。 更多细节可以在 mixer(8) 联机手册中找到。
| 错误信息 | 解决方法 |
|---|---|
| “unsupported subdevice XX” |
一个或多个设备节点没有正确地建立。重复上面的步骤。 |
| “sb_dspwr(XX) timed out” |
I/O端口没有设置正确。 |
| “bad irq XX” |
IRQ设置不正确。确信设定的IRQ和声卡的IRQ是一样的。 |
| “xxx: gus pcm not attached, out of memory” |
没有足够的内存空间供设置使用。 |
| “xxx: can't open /dev/dsp!” |
使用命令 fstat | grep dsp 进行检查是否有其它的程序打开了设备。 值得注意的是 esound 和 KDE 提供的声卡支持经常是造成麻烦的祸根。 |
同时有多个声源的声音在播放, 这是完全可能的, 例如当 esound 或者 artsd 不支持与其它程序共享音频设备时。
FreeBSD可以通过 虚拟声道(Virtual Sound Channels) 来达到, 具体设置用工具 sysctl(8) 来完成。 虚拟的声道可以能过在内核里混合声音来混合声卡里播放的声道。
使用两条sysctl命令来设置虚拟声道的数目。 如果您是 root 用户, 执行下面的操作:
# sysctl hw.snd.pcm0.vchans=4 # sysctl hw.snd.maxautovchans=4
上面的实例设定了4个虚拟声道,这也是实际上所使用的数目。hw.snd.pcm0.vchans 是pcm0的虚拟声道数,一当链接上一个设备它就可配置了。 hw.snd.maxautovchans是分配给新的音频设备的虚拟声道数, 此时这个设备要用 kldload(8) 来链接。 因为 pcm 模块可以独立装载许多硬件驱动程序, 因此 hw.snd.maxautovchans 也就可以存储分配给以后链接到的设备的虚拟声道数。
如果不使用 devfs(5), 就必须把应用程序指向 /dev/dsp0.x, 这里x 为0到3, 因为在上面的例子里 hw.snd.pcm.0.vchans 被设为了4。 在使用devfs(5)的系统里,上边那些会自动分配给用户。
不同的混音通道的默认音量是硬编码进 pcm(4) 驱动程序的。 同时,也有很多应用或服务程序提供了允许用户直接设置并记住这些值的功能。 不过这并不是一个很好的解决方案, 您可能希望在驱动一级有一个可以设置的默认值。 这可以通过在 /boot/device.hints 定义适当的值来实现。 例如:
hint.pcm.0.vol="100"
当 pcm(4) 加载时,这一设置将改变音量通道原本是100的默认值。
Note: 只有 FreeBSD 5.3 和更高版本才支持这一功能。
MP3 (MPEG Layer 3 Audio)达到过CD音质的效果,FreeBSD工作站没理由会缺少这样的好东东。
目前为止, 最为流行的 X11 MP3 播放器是 XMMS (X 多媒体系统)。 Winamp 的肤面可以直接用于 XMMS, 因为它的 GUI 几乎和 Nullsoft 的 Winamp 完全一样。 另外, XMMS 也提供了内建的插件支持。
XMMS 可以通过 multimedia/xmms port 或 package 来安装。
XMMS 的界面很直观, 它提供了播放列表、 图形化均衡器等等。 如果您熟悉 Winamp, 就会感觉 XMMS 很容易使用。
audio/mpg123 port 提供了一个命令行界面的 MP3 播放器。
mpg123 可以在执行时通过命令行指定声音设备和要播放的 MP3 文件, 如下所示:
# mpg123 -a /dev/dsp1.0 Foobar-GreatestHits.mp3 High Performance MPEG 1.0/2.0/2.5 Audio Player for Layer 1, 2 and 3. Version 0.59r (1999/Jun/15). Written and copyrights by Michael Hipp. Uses code from various people. See 'README' for more! THIS SOFTWARE COMES WITH ABSOLUTELY NO WARRANTY! USE AT YOUR OWN RISK! Playing MPEG stream from Foobar-GreatestHits.mp3 ... MPEG 1.0 layer III, 128 kbit/s, 44100 Hz joint-stereo
/dev/dsp1.0 应该换成您的系统上的 dsp 设备。
在对CD或CD音轨编码成MP3之前, CD上的音频数据应先抓到硬盘里。 这个可以通过复制原始的CDDA(CD数字音频)数据成为波形(WAV)文件。
工具 cdda2wav 是 sysutils/cdrtools 套件的一部份,可用来从CD中获取音频及其相关信息。
把CD放到光驱里,下面的命令可以完成 (作为 root用户) 把整张 CD 分割成单个 (每个音轨) 的WAV文件:/para>
# cdda2wav -D 0,1,0 -B
cdda2wav 支持 ATAPI (IDE)光驱。 从IDE光驱中抓取音轨, 需要用设备名称代替SCSI的单元号。 例如, 想从 IDE 光驱中抓取第7道音轨:
# cdda2wav -D /dev/acd0a -t 7
参数 -D 0,1,0 表示 SCSI 设备 0,1,0, 与命令 cdrecord -scanbus的输出相对应。
抓取单轨,要使用选项-t,如下所示:
# cdda2wav -D 0,1,0 -t 7
这个实例用于抓取第七个音轨。要抓取一定范围的音轨,如从1到7:
# cdda2wav -D 0,1,0 -t 1+7
利用dd(1)也可以从ATAPI光驱中抓取音轨,从 第 16.6.5 节可以了解更多。
现今,可选的MP3编码器是lame。 Lame可以从ports树里的 audio/lame 处找到。
利用抓取的WAV文件,下边的命令就可以把 audio01.wav 转换成audio01.mp3:
# lame -h -b 128 \ --tt "Foo Song Title" \ --ta "FooBar Artist" \ --tl "FooBar Album" \ --ty "2001" \ --tc "Ripped and encoded by Foo" \ --tg "Genre" \ audio01.wav audio01.mp3
128 kbits 是标准的MP3位率(bitrate)。 许多人可能喜欢更高的品质例如 160 或 192。 更高的位率, 会使 MP3 占用更多的磁盘空间--但音质会更高。选项 -h 控制 “高品质但低速度 (higher quality but a little slower)” 模式的开关。 选项 --t 表示把 ID3 标签--通常包含了歌曲的信息, 植入到MP3文件里。 其它的编码选项可以查询 lame 的联机手册。
要把MP3歌曲刻录成音乐CD,就需要把它转换成非压缩的波形(WAV)格式。 XMMS 和 mpg123 都支持把MP3输出成非压缩格式文件。
在XMMS中输出到磁盘:
启动 XMMS.
在窗口里右击鼠标,弹出XMMS菜单。
在选项(Options)里选择设定(Preference)。
改变输出插件成“写磁盘插件(Disk Writer Plugin)”。
按配置(Configure)。
输入或选择一个目录用于存放解压的文件。
象平常一样,把MP3文件装入到XMMS里边, 把音量调节到100%并且关掉EQ设定。
按一下播放(Play) -- XMMS 如同在播放mp3一样,只是听不到声音。 实际上是在播放mp3到一个文件里。
要想再听MP3歌曲,记得把默认的输出插件设回原来的值。
用mpg123进行标准输出:
执行 mpg123 -s audio01.mp3 > audio01.pcm
XMMS输出的文件是波形(WAV)格式, 而mpg123 则把MP3转换成无压缩的PCM 音频数据。两种格式都支持用 cdrecord 刻录成音乐CD。 使用 burncd(8) 您就必须使用无压缩的PCM。 如果选择波形格式, 就要注意在每道开始时的一小点杂音, 这段声音是波形文件的头部份。 可以使用工具 SoX 来轻松去除。 SoX 可从 audio/sox port 或包(package)中安装得到:
% sox -t wav -r 44100 -s -w -c 2 track.wav track.raw
阅读 第 16.6 节 这部份可以了解到更多在 FreeBSD 里刻盘的信息。
视频回放是个很新并且迅速发展中的应用领域。 一定要有耐心,因为不是所有的事情都象处音频那么顺利。
在开始之前,您要了解显卡的类型以及它所用的芯片的类型。 尽管 Xorg 和 XFree86 支持大量的显卡, 但能达到好的回放效果的却寥寥无几。 在X11运行时,您可以使用命令 xdpyinfo(1) 获得使用您的显卡的X服务器所支持的扩展列表。
为了评估各种播放器和设置,您需要有一小段用作测试的MPEG文件。 由于一些DVD播放器会默认地在 /dev/dvd 里去找DVD文件, 因此, 您会发样建立符号链接到恰当的设备会很有用:
# ln -sf /dev/acd0c /dev/dvd # ln -sf /dev/racd0c /dev/rdvd
在使用了 FreeBSD 5.X 的 devfs(5) 里, 有一个略微不同的推荐链接集:
# ln -sf /dev/acd0 /dev/dvd # ln -sf /dev/acd0 /dev/rdvd
注意:由于devfs(5)本身的原因, 像这样手工建立的链接在重启后将不会存在。 想要无论什么时候您启动系统都能自动建立符号链接, 那就把下边这行加到 /etc/devfs.conf 里边:
link acd0 dvd link acd0 rdvd
另外,DVD解密要求调用专用的DVD-ROM函数,要求把许可定到DVD设备里。
前面讨论的一些 ports 要正确地联编有赖于下列内核的选项设置。 在试图联编之前, 把这些选项增加到内核配置文件中去, 建立新的内核, 重启系统:
option CPU_ENABLE_SSE option USER_LDT
Note: option USER_LDT 在FreeBSD 5.X里并不存在。
为了增强用于共享内存的X11接口,推荐增加一些 sysctl(8) 参数的值:
kern.ipc.shmmax=67108864 kern.ipc.shmall=32768
在X11下有几种可以显示图像的方式。 到底哪个能工作很大程序上依赖于硬件。 首先, 下边描述的每一种方法在不同的硬件上都会有不同的品质。 其次, 在X11里的图像显示近来引起普遍的关注, 随着 Xorg 或 XFree86 的每一个版本, 都会有很大的突破。
常见图像接口列表:
X11: 一般性的使用共享内存的X11输出。
XVideo: 一种X11接口扩展,支持任何X11图像的可拖拉。
SDL: 简单直接媒体层。
DGA: 直接图片存取。
SVGAlib: 低层次掌控图片层。
Xorg 和 XFree86 4.X 有种扩展叫做XVideo (或称Xvideo, Xv, xv), 它可以通过一个特殊的加速器直接把图像显示在可拖拉的对象里。 即使在低端的计算机 (例如我的PIII 400 Mhz膝上电脑), 这个扩展也提供了很好的播放质量。
要了解这一扩展是否在正常工作, 使用 xvinfo 命令:
% xvinfo
如果显示结果如下,那您的显卡就支持XVideo:
X-Video Extension version 2.2
screen #0
Adaptor #0: "Savage Streams Engine"
number of ports: 1
port base: 43
operations supported: PutImage
supported visuals:
depth 16, visualID 0x22
depth 16, visualID 0x23
number of attributes: 5
"XV_COLORKEY" (range 0 to 16777215)
client settable attribute
client gettable attribute (current value is 2110)
"XV_BRIGHTNESS" (range -128 to 127)
client settable attribute
client gettable attribute (current value is 0)
"XV_CONTRAST" (range 0 to 255)
client settable attribute
client gettable attribute (current value is 128)
"XV_SATURATION" (range 0 to 255)
client settable attribute
client gettable attribute (current value is 128)
"XV_HUE" (range -180 to 180)
client settable attribute
client gettable attribute (current value is 0)
maximum XvImage size: 1024 x 1024
Number of image formats: 7
id: 0x32595559 (YUY2)
guid: 59555932-0000-0010-8000-00aa00389b71
bits per pixel: 16
number of planes: 1
type: YUV (packed)
id: 0x32315659 (YV12)
guid: 59563132-0000-0010-8000-00aa00389b71
bits per pixel: 12
number of planes: 3
type: YUV (planar)
id: 0x30323449 (I420)
guid: 49343230-0000-0010-8000-00aa00389b71
bits per pixel: 12
number of planes: 3
type: YUV (planar)
id: 0x36315652 (RV16)
guid: 52563135-0000-0000-0000-000000000000
bits per pixel: 16
number of planes: 1
type: RGB (packed)
depth: 0
red, green, blue masks: 0x1f, 0x3e0, 0x7c00
id: 0x35315652 (RV15)
guid: 52563136-0000-0000-0000-000000000000
bits per pixel: 16
number of planes: 1
type: RGB (packed)
depth: 0
red, green, blue masks: 0x1f, 0x7e0, 0xf800
id: 0x31313259 (Y211)
guid: 59323131-0000-0010-8000-00aa00389b71
bits per pixel: 6
number of planes: 3
type: YUV (packed)
id: 0x0
guid: 00000000-0000-0000-0000-000000000000
bits per pixel: 0
number of planes: 0
type: RGB (packed)
depth: 1
red, green, blue masks: 0x0, 0x0, 0x0
同时注意:列出来的格式(YUV2, YUV12, 等等) 并不总是随着 XVdieo的每一次执行而存在。没有它们可能或迷惑有些人。
如果结果看起来是这样:
X-Video Extension version 2.2 screen #0 no adaptors present
那么您的显卡可以就不支持XVideo功能。
如果您的卡不支持XVideo, 则只是说明您的显示器在满足刷新图像的计算要求上存在更大的困难。 尽管显卡和处理器很重要,您仍然会有个不错的显示效果。 此外, 您也可以参考我们提供的文献, 在 第 7.4.3 节 中有所介绍。
简单直接媒体层(SDL),原意是做为 Microsoft Windows、BeOS 以及 UNIX 之间的端口层,允许跨平台应用发展,更高效地利用声卡和图形卡。SDL 层可以在低层访问硬件, 有时这样做就比 X11 接口层更为高效。
关于 SDL, 可以参考 devel/sdl12。
直接图形存取 (Direct Graphics Access) 是一种 X11 扩展, 通过它, 应用程序能够绕过 X 服务, 并直接修改画面缓存 (framebuffer)。 由于它依赖一种底层的内存映射来实现其功能, 因此使用它的程序必须以 root 身份来执行。
DGA 扩展可以通过 dga(1) 来完成测试和性能测量。 运行 dga 时, 它将随按键改变现实的颜色。 按 q 退出这个程序。
这部份主要讨论在 FreeBSD Ports 集中提供的可用于视频回放的软件。 视频回放在软件发展中是个很活跃的领域, 并且各种不同程序的功能可能与这里的描述不尽相同。
首先要弄清楚的重要一点是在 FreeBSD 上使用的视频程序其发展与在 Linux 里使用的是一样的。 大部份程序都还处在β阶段。使用 FreeBSD 的包可能面对的问题:
一个应用程序不能播放其它程序制作的文件。
一个应用程序不能播放其自已制作的文件。
不同机上的同样的程序,各自重新建立(rebuild)了一次, 播放同一个文件结果也会有不同。
一个看起来没什么的过滤器, 如图像尺寸的调整, 也有可能因为一个调整例程的问题变得很不象样。
应用程序频繁地留下垃圾(dumps core)。
没有随 port 一起安装的文档可以在网上或者 port 的 work 目录中找到。
这些程序中许多也体现了 “Linux主义”。即, 有些问题来自于(程序)使用的标准库存在于Linux的发行版中, 或者有些是 Linux 内核的功能, 而该程序的作者事先所假定了的是 Linux内核。这些问题并不总是被 port 编护人员注意到或处理过, 这也就可能导致如下问题:
使用/proc/cpuinfo去检测处理器的特性。
滥用线程可能导致一个程序悬挂完成,而不是完全中止。
软件还不属于FreeBSD Ports集,而又与其它程序经常地一起使用。
现在,这些程序的开发人员也已同 port 的维护人员进行了联合, 以减少制作port时出错。
MPlayer 是近来开发的同时也正迅速发展着的一个视频播放器。 MPlayer 团队的目标是在 Linux 和其它 UNIX 系统中的速度和机动性能。 在团队的创始人实在受不了当时可用的播放器的性能时, 这个计划就开始了。 有人也许会说图形接口已经成为新型设计的牺牲品。 但是一但您习惯了命令行选项和按键控制方式,它就能表现得很好。
MPlayer 可以从 multimedia/mplayer 找到。 MPlayer 在联编过程中会进行许多硬件检测, 而得到的可执行文件因此将无法移植到其他系统中使用。 因此, 从 ports 完成联编而不是安装预编译的包就很重要。 另外, 在 make 命令行还可以指定许多选项, 在 Makefile 中有所描述, 接下来我们开始联编:
# cd /usr/ports/multimedia/mplayer # make N - O - T - E Take a careful look into the Makefile in order to learn how to tune mplayer towards you personal preferences! For example, make WITH_GTK1 builds MPlayer with GTK1-GUI support. If you want to use the GUI, you can either install /usr/ports/multimedia/mplayer-skins or download official skin collections from http://www.mplayerhq.hu/homepage/dload.html
默认的 port 选项对于绝大多数用户来来说是够用了。 不过, 如果您需要 XviD 编解码器, 则必须指定 WITH_XVID 这个命令行选项。 默认的 DVD 设备也可以用 WITH_DVD_DEVICE 选项来定义, 其默认值是 /dev/acd0。
撰写这一章的时候, MPlayer port 的联编过程包括了 HTML 文档和两个可执行文件, mplayer 和 mencoder, 后者是一个视频再编码工具。
MPlayer 的 HTML 文档提供了丰富的内容。 如果读者发现本章中缺少关于视频硬件的一些信息, 则 MPlayer 的文档将是十分详尽的补充。 如果您正在找关于 UNIX 中的视频支持的资料, 您绝对应该花一些时间来阅读 MPlayer 的文档。
任何 MPlayer 用户必须在主目录下建立一个叫 .mplayer 的子目录。 输入下边的内容来建立这个必须的子目录:
% cd /usr/ports/multimedia/mplayer % make install-user
在mplayer的手册里列出了它的命令选项。 HTML文档里有更为详细的信息。 这部份里, 我们只是描述了很少的常见应用。
要播放一个文件,如 testfile.avi, 可以通过各种视频接口当中的某一个去设置 -vo 选项:
% mplayer -vo xv testfile.avi
% mplayer -vo sdl testfile.avi
% mplayer -vo x11 testfile.avi
# mplayer -vo dga testfile.avi
# mplayer -vo 'sdl:dga' testfile.avi
所有这些选项都是值得一试的, 因为它们的性能依赖很多因素,并且都与硬件密切相关。
要播放 DVD, 需要把 testfile.avi 改为 dvd://N -dvd-device DEVICE。 这里 N 是要播放的节目编号, 而 DEVICE 则是 DVD-ROM 的设备节点。 例如, 要播放 /dev/dvd 的第三个节目:
# mplayer -vo xv dvd://3 -dvd-device /dev/dvd
Note: 可以在编译 MPlayer 时, 通过 WITH_DVD_DEVICE 来指定默认的 DVD 设备。 系统内定的默认设备是 /dev/acd0。 更多细节, 请参考 port 的 Makefile。
要停止、暂停、前进等等,可以参考设定的按键---这些可以通过 mplayer -h 得到或查看手册。
另外,回放的重要选项是:用于全屏模式的 -fs -zoom 和起辅助完成作用的-framedrop。
为了让 mplayer 的命令行不是太长,使用者可以通过建立一个文件 .mplayer/config 来设定如下默认选项:
vo=xv fs=yes zoom=yes
最后,mplayer可以把DVD题目(title)抓取成为 .vob文件。为了从DVD中导出第二个题目,请输入:
# mplayer -dumpstream -dumpfile out.vob dvd://2 -dvd-device /dev/dvd
输出文件 out.vob 将是 MPEG 并且可以被这部份描述的其它“包”利用。
在使用 mencoder 之前, 首先熟悉其 HTML 文档中所介绍的选项是一个不错的主意。 它提供了联机手册, 但如果没有 HTML 文档则帮助不大。 有无数种方法来提高视频品质、 降低比特率、 修改格式, 而这些技巧可能会影响性能。 下面是几个例子, 第一个是简单地复制:
% mencoder input.avi -oac copy -ovc copy -o output.avi
不正确的命令选项组合可能使生成的文件不能被mplayer播放。因此,如果您只是想抓取文件,一定在mplayer里使用“-dumpfile”。
转换input.avi成为带有MPEG3音频编码 (要求audio/lame )的MPEG4编码:
% mencoder input.avi -oac mp3lame -lameopts br=192 \
-ovc lavc -lavcopts vcodec=mpeg4:vhq -o output.avi
这样就产生了可被mplayer 和 xine播放的输出。
input.avi 可以换成 dvd://1 -dvd-device /dev/dvd 并以 root 的身份来执行, 以重新对 DVD 节目进行编码。 由于您第一次做这样的工作时很可能会对结果不太满意, 建议您首先把节目复制成文件, 然后对它进行操作。
xine视频播放器是一个关注范围很广的项目,它不仅看准多合一的视频解决,而且出品了一个可再用的基本库和一个可扩展插件的可执行模块。发行有“包”和port版本-- multimedia/xine。
xine播放器仍然很粗糙,但这很显然与好开头无关。实际上xine 即需要一个快速的带有快速显卡的CPU,也支持XVideo的扩展。图形界面(GUI)可以使用,但很勉强。
到写这章时,还没有可用于播放CSS编码的DVD文件的输入模块随同 xine一起发行。 第三方的建造(builds)里内建有这样的模块, 但都不属于FreeBSD Ports 集。
与MPlayer相比,xine 为用户考虑得更多,但同时,对用户来说也少了很多有条理的控制方式。xine 播放器在XVideo接口上做得不错。
默认情况下,播放器xine启动的时后会使用图形界面。那么就可以使用菜单打开指定的文件:
% xine
另外,没有图形界面也可以使用如下命令立即打开播放文件:
% xine -g -p mymovie.avi
软件transcode不是一个播放器,而是一套再编码.avi 和 .mpg 文件的工具。使用transcode,借助标准输入输出(stdin/stdout)流接口,利用命令行工具,可以合并视频文件、修复坏文件。
像MPlayer一样, transcode是个实验性软件,必须通过portmultimedia/transcode来建立。make使用了大量的选项。我们推荐:
# make WITH_LIBMPEG2=yes
如果您打算安装multimedia/avifile,那么就把选项WITH_AVIFILE加到您的make命令行里,如下所示:
# make WITH_AVIFILE=yes WITH_LIBMPEG2=yes
这里有两个使用transcode进行可调整视频输出的转换实例。第一个把输出编码成openDIVX AVI文件,第二个是编码成更为小巧的MPEG格式。
% transcode -i input.vob -x vob -V -Z 320x240 \ -y opendivx -N 0x55 -o output.avi
% transcode -i input.vob -x vob -V -Z 320x240 \ -y mpeg -N 0x55 -o output.tmp % tcmplex -o output.mpg -i output.tmp.m1v -p output.tmp.mpa -m 1
有个关于transcode的参考页,仅有很少的关于各种tc*(如 tcmplex)应用的文档,这也是安装了的。命令行选项 -h 有时也可以给出简单的使用格式的说明。
相比之下,transcode比mencoder运行起来要慢许多,但它可以制作出更多可播放的文件。例如,用transcode创建的MPEG文件众所周知可以在Windows Media® Player 和 Apple's Quicktime®里播放。
FreeBSD里不同的视频软件包正迅速发展中。很可能在不久的将来,这里所谈到的问题都将得到解决。同时,有些人想超越FreeBSD的声/像(A/V)能力,那他们就不得不从一些FAQ和指南里学知识,并使用一些不同的应用程序。这里就给这些读者指出一些补充信息。
MPlayer 文档是很技术性的。这些文档可以给那些希望获得关于UNIX视频高级技术的人们提供参考。MPlayer邮件列表很不喜欢没耐心阅读文档的人,如果您发现什么问题想报告给他们,请首先RTFM。
xine HOWTO里边有一章是关于提高性能的,对所有的播放器都很适应。
最后是一些很有前途的程序,读者可以试一下:
Avifile,它就是 multimedia/avifile port。
Ogle 它就是 multimedia/ogle port。
multimedia/dvdauthor,一个制作 DVD 节目的源码开放包。
电视卡可以让您在您的计算机里观看到无线或有线电视。许多卡是通过RCA或S-video输入接收复合视频,而且有些卡还带有调频广播接收器。
FreeBSD 通过bktr(4)驱动程序,提供了对基于PCI的电视卡的支持,要求这些卡使用的是Brooktree Bt848/849/878/879 或 Conexant CN-878/Fusion 878a视频采集芯片。您还要确保这个板上带的有被支持的调谐器,参考bktr(4)手册查看所支持的调谐器列表。
要使用您的卡,您就要装载bktr(4)驱动程序。这个可以通过往/boot/loader.conf里边添加下边一行来实现。象这样:
bktr_load="YES"
另外,您也可以静态地这个支持编译到内核里去,要是这样的话,就把下边几行加到内核配置里去:
device bktr device iicbus device iicbb device smbus
这些附加的设备驱动程序是必须的,因为卡的各组成部分是能过一根I2C总线相互连接在一起的。然后建立安装新的内核。
一旦这个支持被加到了您的系统里,您须要重启系统。在启动过程中,您的电视卡应该显示为up(启动),象这样:
bktr0: <BrookTree 848A> mem 0xd7000000-0xd7000fff irq 10 at device 10.0 on pci0 iicbb0: <I2C bit-banging driver> on bti2c0 iicbus0: <Philips I2C bus> on iicbb0 master-only iicbus1: <Philips I2C bus> on iicbb0 master-only smbus0: <System Management Bus> on bti2c0 bktr0: Pinnacle/Miro TV, Philips SECAM tuner.
当然,这些信息可能因您的硬件不同而有所区别。但是您应该能检查那个调制器是否被正确检测到了,可能要忽略一些检测到的同sysctl(8) MIB(管理系统库)和内核配置文件选项一起的参数。例如,如果您想强制使用Philips(飞利浦) SECAM制式的调谐器 ,您就应把下列行加到内核配置文件里:
options OVERRIDE_TUNER=6
或者,您直接使用sysctl(8):
# sysctl hw.bt848.tuner=6
查看bktr(4)手册和/usr/src/sys/conf/NOTES文件了解更多详细关于可用选项的资料。(如果您在FreeBSD 4.X下,就使用/usr/src/sys/i386/conf/LINT代替 /usr/src/sys/conf/NOTES。)
要使用您的电视卡,您需要安装下列应用程序之一:
multimedia/fxtv提供“窗口电视(TV-in-a-window)”功能和图像/声音/图像采集功能。
multimedia/xawtv也是一款电视应用程序,功能同fxtv一样。
misc/alevt解码和显示Videotext/Teletext。
audio/xmradio,一款用于一些电视卡的调频电台调谐器的程序。
audio/wmtune,一款用于电台调谐器的便捷的桌面程序。
更多的程序在FreeBSD Ports Collection(Ports 集)里。
如果您的电视卡遇到了什么问题,您应该首先检查一下您的视频采集芯片和调谐器是不是真正的被bktr(4)驱动程序支持,并且是不是使用了正确的配置选项。想得到更多支持和关于您的电视卡的各种问题,您可以接触和使用freebsd-multimedia 邮件列表的压缩包。
像任何其他的现代操作系统一样,FreeBSD 可以使用图像扫描仪。 对扫描仪的标准的访问是通过 FreeBSD Ports Collection 中的 SANE (Scanner Access Now Easy) API 提供的。 SANE 也会使用一些 FreeBSD 设备驱动来访问扫描仪硬件。
FreeBSD 支持 SCSI 和 USB 扫描仪。 在做任何配置之前请确保您的扫描仪被 SANE 支持。SANE 有一个 支持的设备列表,可以为您提供有关扫描仪的支持情况和状态的信息。 uscanner(4) 手册页也提供了一个支持的 USB 扫描仪列表。
上面提到 SCSI 和 USB 接口都是支持的。 取决于您的扫描仪接口, 需要不同的设备驱动程序。
默认的 GENERIC 内核包含了支持 USB 扫描仪需要的设备驱动。 如果您决定使用一个定制的内核, 确保下面在您的内核配置文件中存在下面这些行:
device usb device uhci device ohci device uscanner
取决于您主板上的 USB 芯片, 您只需要 device uhci 或者 device ohci 中的一种,但是两个都在 内核配置文件中是没有害处的。
如果您不想重新编译内核而且您的内核也不是 GENERIC 的, 您可以用 kldload(8) 命令直接加载 uscanner(4) 设备驱动模块:
# kldload uscanner
要在每次系统启动的时候加载这个模块, 添加下面这行到 /boot/loader.conf 中:
uscanner_load="YES"
在用正确的内核重新启动后, 或者在加载了需要的模块之后,插上您的 USB 扫描仪。 扫描仪会出现在您的系统消息缓存 (dmesg(8))中,就像这样:
uscanner0: EPSON EPSON Scanner, rev 1.10/3.02, addr 2
这表明我们的扫描仪正在使用 /dev/uscanner0 设备节点。
Note: 在 FreeBSD 4.X 上,USB 进程(usbd(8)) 必须运行来检测 USB 设备。要启用它, 添加 usbd_enable="YES" 到您的 /etc/rc.conf 文件中并重新启动。
如果您的扫描仪是 SCSI 接口的, 重要的是要知道您使用哪种 SCSI 控制器。 取决于所使用的 SCSI 芯片, 您需要调整内核配置文件。 GENERIC 的内核支持最常用的 SCSI 控制器。确保阅读 NOTES 文件(在 FreeBSD 4.x 下面是 LINT)并在您的内核配置文件中添加正确的行。 除了 SCSI 适配器驱动之外, 您还需要在内核配置文件中有如下行:
device scbus device pass
一旦完全编译好您的内核, 您就可以在启动时的系统消息缓冲中看到这些设备:
pass2 at aic0 bus 0 target 2 lun 0 pass2: <AGFA SNAPSCAN 600 1.10> Fixed Scanner SCSI-2 device pass2: 3.300MB/s transfers
如果您的扫描仪没有在系统启动的时候加电, 很可能还需要强制手动检测一下,用 camcontrol(8) 命令执行一次 SCSI 总线扫描:
# camcontrol rescan all Re-scan of bus 0 was successful Re-scan of bus 1 was successful Re-scan of bus 2 was successful Re-scan of bus 3 was successful
然后扫描仪就会出现在 SCSI 设备列表里:
# camcontrol devlist <IBM DDRS-34560 S97B> at scbus0 target 5 lun 0 (pass0,da0) <IBM DDRS-34560 S97B> at scbus0 target 6 lun 0 (pass1,da1) <AGFA SNAPSCAN 600 1.10> at scbus1 target 2 lun 0 (pass3) <PHILIPS CDD3610 CD-R/RW 1.00> at scbus2 target 0 lun 0 (pass2,cd0)
有关 SCSI 设备的更多细节,可以查看 scsi(4) 和 camcontrol(8) 手册页。
SANE 系统分为两部分: 后端(graphics/sane-backends) 和前端(graphics/sane-frontends)。 后端部分提供到扫描仪自身的访问。 SANE 的 支持设备列表详细说明了哪一个后端可以支持您的图象扫描仪。 如果您想使用您的设备,就必须为您的扫描仪选定正确的后端。 前端部分提供图形化的扫描界面 (xscanimage)。
要做的第一件事就是安装 graphics/sane-backends port 或者 package。然后,使用 sane-find-scanner 命令来检查 SANE 系统做的扫描仪检测:
# sane-find-scanner -q found SCSI scanner "AGFA SNAPSCAN 600 1.10" at /dev/pass3
输出显示了扫描仪的接口类型和扫描仪连接到系统上的设备节点。 生产厂家和产品型号可能没有显示,不过不重要。
Note: 一些 USB 扫描仪需要您加载固件,后端的手册页中有这方面的解释。 您也应该阅读 sane-find-scanner(1) 和 sane(7) 手册页。
现在我们需要检查扫描仪是否可以被扫描前端识别。 默认情况下, SANE 后端自带一个叫做 scanimage(1) 的命令行工具。 这个命令允许您列出设备以及从命令行执行图片扫描。 -L 选项用来列出扫描仪设备:
# scanimage -L device `snapscan:/dev/pass3' is a AGFA SNAPSCAN 600 flatbed scanner
如果没有输出任何信息, 或提示没有识别到扫描仪, 则说明 scanimage(1) 无法识别它。 如果发生这种情况, 您就需要修改扫描仪支持后端的配置文件, 并定义所使用的扫描设备。 /usr/local/etc/sane.d/ 目录中包含了所有的后端配置文件。 这类识别问题经常会在某些 USB 扫描仪上发生。
例如, 对于在 第 7.6.2.1 节 中所使用的 USB 扫描仪, sane-find-scanner 会给出下面的信息:
# sane-find-scanner -q found USB scanner (UNKNOWN vendor and product) at device /dev/uscanner0
扫描仪被正确的探测到了,它使用 USB 接口,连接在 /dev/uscanner0 设备节点上。 我们现在可以检查看看扫描仪是否被正确的识别:
# scanimage -L No scanners were identified. If you were expecting something different, check that the scanner is plugged in, turned on and detected by the sane-find-scanner tool (if appropriate). Please read the documentation which came with this software (README, FAQ, manpages).
既然扫描仪没有被识别,我们就需要编辑 /usr/local/etc/sane.d/epson.conf 文件。所用的扫描仪型号是 EPSON Perfection® 1650, 这样我们知道扫描仪应使用 epson 后端。确保阅读后端配置文件中的帮助注释。 改动非常简单:注释掉导致您的扫描仪使用错误接口的所有行 (在我们这种情况下,我们将注释掉从 scsi 开始的所有行,因为我们的扫描仪使用 USB 接口),然后在文件的结尾添加指定的接口和所用的设备节点。 这种情况下,我们添加下面这行:
usb /dev/uscanner0
请确保阅读后端配置文件提供的注释以及后端手册页了解更多细节, 并使用正确的语法。我们现在可以检验扫描仪是否被识别到了:
# scanimage -L device `epson:/dev/uscanner0' is a Epson GT-8200 flatbed scanner
我们的 USB 扫描仪被识别到了。如果商标和型号不匹配也不重要。 相关的关键一条是 `epson:/dev/uscanner0' 字段, 这个给了我们正确地后端名称和正确的设备节点。
一旦 scanimage -L 命令可以看到扫描仪, 配置就完成了。设备现在准备好等待扫描了。
scanimage(1) 允许我们从命令行执行图片扫描, 相比之下使用图形用户界面来执行图片扫描会更好。 SANE 提供了一个简单但实用的图形界面: xscanimage (graphics/sane-frontends)。
Xsane (graphics/xsane)是另一个流行的图形扫描前端。 这个前端提供了一些高级特性, 比如多样的扫描模式(photocopy,fax,等。), 色彩校正,批量扫描,等等。这两个程序都可以作为 GIMP 的插件使用。
前面所有的操作都是用 root 权限来完成的。You may however, need 然而您可能需要让其他的用户也可以访问扫描仪。 用户需要有扫描仪所用的设备节点的读和写权限。 比如,我们的 USB 扫描仪使用设备节点 /dev/uscanner0,这个节点属于 operator 组。将用户 joe 添加到 operator 组会允许他使用扫描仪:
# pw groupmod operator -m joe
要了解更多细节, 请阅读 pw(8) 联机手册。 此外, 还需要为 /dev/uscanner0 设备节点设置正确的写入权限 (0660 或 0664), 因为默认情况下, operator 组只能读这个设备节点。 这项工作可以通过在 /etc/devfs.rules 文件中添加如下设置来自东完成:
[system=5] add path uscanner0 mode 660
随后您还需要在 /etc/rc.conf 中添加下面的内容并重新启动:
devfs_system_ruleset="system"
关于这些配置的进一步细节请参考联机手册 devfs(8)。 对于 FreeBSD 4.X, 默认情况下 operator 组已经拥有对 /dev/uscanner0 的读和写权限。
Note: 当然, 考虑安全的原因, 在您将用户添加到任何组, 尤其是 operator 组时, 都应三思而后行。
内核是 FreeBSD 操作系统的核心。 它负责管理内存、 执行安全控制、 网络、 磁盘访问等等。 尽管 FreeBSD 可以动态修改的现在已经越来越多, 但有时您还是需要重新配置和编译您的内核。
读完这章,您将了解:
为什么需要建立定制的内核。
如何编写内核配置文件,或修改已存在的配置文件。
如何使用内核配置文件创建和联编新的内核。
如何安装新内核。
如何在 /dev 中创建设备节点。
如何出现问题怎么办。
这一章给出的命令应该以 root 身份执行, 否则可能会不成功。
过去, FreeBSD 采用称作 “单片式” 的内核。 这句话的意思是说内核是一个大的程序, 支持固定的设备, 如果您希望改变内核的行为则必须编译一个新的, 并重新启动计算机来引导它。
今天, FreeBSD 已经迅速地转移到了一个新的模型, 其重要特征是内核功能可以由能够根据需要动态加载和卸载的模块来提供。 这是的内核能够迅速地适应硬件的调整 (例如笔记本电脑的 PCMICA), 或为内核增加在最初编译它时所不具备的新的功能。 这一模式成为模块化内核。
尽管如此, 一些功能仍然需要静态地连编进内核。 一些情况是因为这些功能于内核的结合十分紧密, 而不可能将它们做成可以动态加载的。 另一种情况是因为没有人有时间来编写实现那个功能的可以动态加载的内核模块。
建造定制的内核是几乎每一个 BSD 用户所必须经历的一关。 尽管这项工作可能比较耗时, 但它能够为使用 FreeBSD 系统带来很多好处。 与必须支持大量各式硬件的 GENERIC 内核不同, 定制的内核可以只包含对于 您的 PC 硬件的支持。 这有很多好处, 例如:
更快地启动。 因为内核只需要检测您系统上的硬件, 启动时所花费的时间将大大缩短。
使用更少的内存。 定制的内核通常会比 GENERIC 内核使用更少的内存, 由于内核必须时刻处于物理内存中, 因此这就显得更加重要。 给予这样的原因, 对于内存较小的系统来说, 定制内核将发挥更大的作用。
支持更多的硬件。 定制的内核允许您增加类似声卡这样的 GENERIC 内核没有提供内建支持的硬件。
首先对内核构建目录做一个快速的浏览。 这里所提到的所有目录都在 /usr/src/sys 目录中; 也可以通过 /sys 来访问它。 这里的众多子目录包含了内核的不同部分, 但对我们所要完成的任务最重要的目录是 arch/conf, 您将在这里编辑定制的内核配置; 以及 compile, 编译过程中的文件将放置在这里。 arch 表示 i386、 alpha、 amd64、 ia64、 powerpc、 sparc64, 或 pc98 (在日本比较流行的另一种 PC 硬件开发分支)。 在特定硬件架构目录中的文件只和特定的硬件有关; 而其余代码则是与机器无关的, 则所有已经或将要移植并运行 FreeBSD 的平台上都共享这些代码。 文件目录是按照逻辑组织的, 所支持的硬件设备、 文件系统, 以及可选的组件通常都在它们自己的目录中。 5.X 版之前的 FreeBSD 只支持 i386、 alpha 和 pc98 这三种硬件架构。
这一章提供的例子假定您使用 i386 架构的计算机。 如果您的情况不是这样, 只需对目录名作相应的调整即可。
Note: 如果您的系统中 没有 /usr/src/sys 这样一个目录, 则说明没有安装内核源代码。 安装它最简单的方法是通过以 root 身份运行 sysinstall (对于 FreeBSD 5.2 之前的版本, 则是 /stand/sysinstall), 选择 Configure, 然后 Distributions, 然后 src, sys。 如果您不喜欢 sysinstall 并且可以使用 “官方的” FreeBSD CDROM, 则也可以通过命令行来安装:
# mount /cdrom # mkdir -p /usr/src/sys # ln -s /usr/src/sys /sys # cat /cdrom/src/ssys.[a-d]* | tar -xzvf -
接下来, 进入 arch/conf 目录下面, 复制 GENERIC 配置文件, 并给这个文件起一个容易辨认的名称, 它就是您的内核名称。例如:
# cd /usr/src/sys/i386/conf # cp GENERIC MYKERNEL
通常,这个名称是大写的,如果您正维护着多台不同硬件的FreeBSD机器, 以您机器的域名来命名是非常好的主意。我们把它命名为MYKERNEL就是这个原因。
Tip: 将您的内核配置文件直接保存在 /usr/src 可能不是一个好主意。 如果您遇到问题, 删掉 /usr/src 并重新开始很可能是一个诱人的选择。 一旦开始做这件事, 您可能几秒钟之后才会意识到您同时会删除定制的内核配置文件。 另外, 也不要直接编辑 GENERIC, 因为下次您 更新代码 时它会被覆盖, 而您的修改也就随之丢失了。
您也可以考虑把内核配置文件放到别的地方, 然后再到 i386 目录中创建一个指向它的符号链接。
例如:
# cd /usr/src/sys/i386/conf # mkdir /root/kernels # cp GENERIC /root/kernels/MYKERNEL # ln -s /root/kernels/MYKERNEL
Note: 必须以 root 身份执行这些和接下来命令, 否则就会得到 permission denied 的错误提示。
现在就可以用您喜欢的文本编辑器来编辑 MYKERNEL 了。 如果您刚刚开始使用 FreeBSD, 唯一可用的编辑器很可能是 vi, 它的使用比较复杂, 限于篇幅, 这里不予介绍, 您可以在 参考书目 一章中找到很多相关书籍。 不过, FreeBSD 也提供了一个更好用的编辑器, 它叫做 ee, 对于新手来说, 这很可能是一个不错的选择。 您可以修改配置文件中的注释以反映您的配置, 或其他与 GENERIC 不同的地方。
如果您在SunOS或者其他BSD系统下定制过内核,那这个文件中的绝大部分将对您非常熟悉。 如果您使用的是诸如DOS这样的系统,那GENERIC配置文件看起来就非常困难, 所以在下面的 配置文件章节将慢慢地、仔细地进行介绍。
Note: 如果您和 FreeBSD project 进行了 代码同步, 则一定要在进行任何更新之前查看 /usr/src/UPDATING。 这个文件中描述了更新过的代码中出现的重大问题或需要注意的地方。 /usr/src/UPDATING 总是和您的 FreeBSD 源代码对应, 因此能够提供比手册更具时效性的新内容。
现在应该编译内核的源代码了。 一共有两种方法来完成这项工作, 使用哪一种取决于您为什么要重新编译内核, 以及所运行的 FreeBSD 版本。
如果您只安装内核源代码,使用方法1。
如果您正运行 FreeBSD 4.0 以前的版本, 而且您 不是 准备使用 make buildworld 来升级到 FreeBSD 4.0 或更高版本的话, 则应使用方法1。
如果您在没有升级源代码的情况下编译一个新内核(也许您只想为内核添加一个新的选项, 如IPFIREWALL),可以使用任何一种方法。
如果您打算把重新构建内核作为 make buildworld 过程的一部分来进行, 则应使用方法 2。
如果从上次成功地完成 buildworld-installworld 以来您还 没有 升级过代码 (也就是没有运行 CVSup、 CTM, 或使用 anoncvs), 则可以放心使用 config、 make depend、 make、 make install。
方法1. 用“传统”方法建立一个内核
运行config(8)来产生内核源代码。
# /usr/sbin/config MYKERNEL
进入编译内核的目录。 config(8) 将在像上面一样显示执行它所在的目录的名字。
# cd ../compile/MYKERNEL
对于 FreeBSD 5.0 以及更早的版本, 使用下面的形式:
# cd ../../compile/MYKERNEL
编译内核。
# make depend # make
安装新内核。
# make install
方法2. 用“新的”方法建立一个内核
切换到/usr/src 目录。
# cd /usr/src
编译内核。
# make buildkernel KERNCONF=MYKERNEL
安装新内核。
# make installkernel KERNCONF=MYKERNEL
Note: 在FreeBSD 4.2老版本里面您必须用KERNEL= 来替换KERNCONF=。2001年2月2日以后生成的4.2-STABLE 就可以认出KERNCONF=。
新内核将会被复制到 /boot/kernel 目录中成为 /boot/kernel/kernel 而旧的则被移到 /boot/kernel.old/kernel。 现在关闭系统, 然后用新的内核启动计算机。 如果出现问题, 后面的一些 故障排除方法 将帮您摆脱困境。 如果您的内核 无法启动, 请参考那一节。
Note: 在 FreeBSD 4.X 以及更早的版本中, 内核被安装到 /kernel 而模块则放到 /modules, 旧的内核则被备份到 /kernel.old。 其他与启动过程相关的文件, 如 loader(8) 以及配置则放在 /boot。 第三方或定制的模块也可以放在 /modules, 不过应该注意保持模块和内核的同步时很重要的, 否则会导致不稳定和错误。
Note: 如果添加了新设备 (例如声卡) 并在运行 FreeBSD 4.X 或更早的版本, 则可能好需要在 /dev 目录中添加它们的设备节点之后才能使用。 欲了解详情,请参考本章稍后的 制作设备节点 一节。
配置文件的格式是非常简单的。 每一行都包括一个关键词, 以及一个或多个参数。 实际上, 绝大多数行都只包括一个参数。 在 # 之后的内容会被认为是注释而忽略掉。 下面的每个小节,将依次介绍每个列在 GENERIC 中的选项, 当然, 一些相关的关键词 (如网络) 将被放在一起, 尽管在 GENERIC 中可能分散在各处。 如果需要与平台有关的选项和设备的详细列表, 请参考与 GENERIC 在同一个目录中的那个NOTES, 而平台无关的选项, 则可以在 /usr/src/sys/conf/NOTES 找到。
Note: NOTES 在 FreeBSD 4.X 中并不存在。 与此相反, 请参考 LINT 文件来获得关于 GENERIC 中的选项和设备详细介绍。 LINT 在 4.X 中完成了两项使命: 为构建定制内核提供可选的选项, 以及提供尽可能多的调整为非默认值的选项。 这么做背后的原因是这种配置文件能够帮助 (并且仍然能) 测试新代码以及现有代码的修改是否会造成与内核其他部分的冲突。 然而, 内核配置的架构在 5.X 中经历了巨大的变化; 其中的一个例子是设备驱动的选项被移到了 hints 中, 从而可以随时修改并在启动时动态加载, 而 LINT 不能再包含这些 hints 了。 由于这个以及许多其他原因, 决定将 LINT 改名为 NOTES, 而保留它的主要是为了前面所说的第一个原因: 给出可用的选项, 为用户提供方便。
在 FreeBSD 5.X 和以后的版本中您仍然可以通过下面的命令生成 LINT 文件:
# cd /usr/src/sys/i386/conf && make LINT
下面是一个 GENERIC 内核配置文件的例子, 它包括了一些需要解释的注释。 这个例子应该和您复制的 /usr/src/sys/i386/conf/GENERIC 非常接近。
# # GENERIC -- Generic kernel configuration file for FreeBSD/i386 # # For more information on this file, please read the handbook section on # Kernel Configuration Files: # # http://www.FreeBSD.org/doc/en_US.ISO8859-1/books/handbook/kernelconfig-config.html # # The handbook is also available locally in /usr/share/doc/handbook # if you've installed the doc distribution, otherwise always see the # FreeBSD World Wide Web server (http://www.FreeBSD.org/) for the # latest information. # # An exhaustive list of options and more detailed explanations of the # device lines is also present in the ../../conf/NOTES and NOTES files. # If you are in doubt as to the purpose or necessity of a line, check first # in NOTES. # # $FreeBSD: /repoman/r/ncvs/src/sys/i386/conf/GENERIC,v 1.413 2004/08/11 01:34:18 rwatson Exp $
下面这个选项在每个中都要有:
machine i386
这是机器的架构, 他只能是 alpha, amd64, i386, ia64, pc98, powerpc, 或 sparc64 中的一种。
cpu I486_CPU cpu I586_CPU cpu I686_CPU
上面的选项指定了您系统中所使用的 CPU 类型。 您可以使用多个 CPU 类型 (例如, 您不确定是应该指定 I586_CPU 或 I686_CPU)。 然而对于定制的内核, 最好能够只指定您使用的那种 CPU。 如果您对于自己使用的 CPU 类型没有把握, 可以通过查看 /var/run/dmesg.boot 中的启动信息来了解。
在FreeBSD的内核里面仍然支持I386_CPU,但是在-STABLE和 -CURRENT里面缺省已经被禁用了。这就意味着安装FreeBSD在386-class的cpu, 一般有下面几种情况:
安装一个老的FreeBSD release并且按照第 8.3 节从源码重建系统.
在一个新的机器上构建用户和内核程序,然后用已经编译好的/usr/obj下的文件 安装到386的机器上(详细情况看第 19.5 节)。
定制您自己的 FreeBSD 发行版本, 其中的安装光盘包含 I386_CPU 支持。
第一种情况可能是最容易的, 但您需要大量的磁盘空间, 而 386-级别拥有这种配置的计算机可能很难找到。
ident GENERIC
这是内核的名字。 您应该取一个自己的名字, 例如取名叫 MYKERNEL, 如果您一直在按照前面的说明做的话。 您放在 ident 后面的字符串在启动内核时会显示出来, 因此如果希望能够容易区分常用的内核和刚刚定制的内核, 就应该采取不同的名字 (例如, 您想定制一个试验性的内核)。
maxusers n
这个 maxusers 选项设置了重要系统表的大小。 这个数值粗略地假设您的机器同时会有多少用户。
从FreeBSD 4.5开始,如果手动设置这个值为0系统将会自动赋值。[5]. 在FreeBSD 5.X 和更高版本中,maxusers 如果没有定义,将缺省为 0。如果您使用的FreeBSD早于4.5, 或者您想自己设置这个值, 那么您至少要设置maxusers为4, 特别是您要执行X Window或是编译程序。 原因是maxusers值决定了系统同时可有多少个进程(process), 其算法是20 + 16 * maxusers,所以如果您设置maxusers为1, 则您的系统只能同时存在36个进程,包括18个(或更多)系统启动要占去的进程。 如果您执行了X Window,则又要用掉15个以上。甚至阅读一个man page也会使用九个进程来过滤、解压缩、然后显示文件。 设置maxusers到64将允许您有1044个进程,对任何人应该都是足够的。 当您执行程序时, 得到像是proc table full这样的错误信息, 或者您要建一个同时会有很多人来访问的网站(比如ftp.FreeBSD.org)时, 您就要增加这个设置的值,然后重新编译内核。
Note: maxusers 并 不会 限制能够登录到您机器上的用户数量。 它只是简单地设置一些系统表的尺寸, 以适应您的系统中登录这样多的用户时能够执行的最大进程数。 确实 会限制同时能够登录的远程用户以及 X 终端窗口的关键字是 pseudo-device pty 16。 在 FreeBSD 5.X 中, 您并不需要担心这个数值, 因为 pty(4) 驱动提供了 “自动克隆(auto-cloning)” 的能力; 在配置文件中您只需简单地指定 device pty 就可以了。
# Floating point support - do not disable. device npx
npx 是 FreeBSD 中浮点运算单元的接口, 用于支持硬件的浮点运算协处理器, 以及软件仿真程序。 这个设置 不是 可有可无的。
# Pseudo devices device loop # Network loopback
这是 TCP/IP 的通用回环设备。 如果您 telnet 或 FTP 到 localhost (也就是 127.0.0.1) 则将通过这个设备回到本机。 这个设备是 必需的。 在 FreeBSD 4.X 中, 则应使用 pseudo-device loop。
接下来的那些项有一个或多个选项,关于每个选项的更多的信息参考下面注释。
#To statically compile in device wiring instead of /boot/device.hints #hints "GENERIC.hints" # Default places to look for devices.
在FreeBSD 5.X和更新的版本里面,device.hints(5)被用来配置设备驱动选项。 在启动的时候loader(8)将会检查缺省位置/boot/devicehints。 使用hints选项您就可以把这些hints静态编译进内核。 这样就没有必要在/boot下创建devicehints。
#makeoptions DEBUG=-g # Build kernel with gdb(1) debug symbols
一般的 FreeBSD 构建过程并不包括调试信息, 在构建内核时, 绝大多数符号会在最终的内核连接之后剔除出去, 以节省安装时所需的空间。 如果您打算测试 -CURRENT 分支的内核, 或开发您自己的 FreeBSD 内核功能, 则可能会需要去掉这一行的注释。 这将启用 -g 选项, 它会在 gcc(1) 中打开调试信息。 如果您使用 “传统” 方法来构建内核, 也可以通过 config(8) 的 -g 选项来达到同样的目的 (参见 第 8.3 节 了解进一步的信息)。
options SCHED_4BSD # 4BSD scheduler
这是 FreeBSD 的传统调度器。 取决于您系统的工作负荷, 使用新的 ULE 调度器通常可以获得更好的性能。 它是专门为 FreeBSD 在 SMP 上运行而设计的调度器, 但在 UP 系统上也能工作得很好。 如果您想试验这个功能, 则应把配置文件中的 SCHED_4BSD 改为 SCHED_ULE。
options INET # InterNETworking
网络支持,即使您不打算连网,也请保留它,大部分的程序至少需要回环网络(就是和本机进行网络连接),所以强烈要求保留它。
options INET6 # IPv6 communications protocols
这将打开IPv6连接协议。
options FFS # Berkeley Fast Filesystem
这是最基本的硬盘文件系统,如果打算从本地硬盘启动,请保留它。
options SOFTUPDATES # Enable FFS Soft Updates support
这个选项会启用内核中的 Soft Updates 支持, 它会显著地提高磁盘的写入速度。 尽管这项功能是由内核直接提供的, 但仍然需要在每个磁盘上启用它。 请检查 mount(8) 的输出, 以了解您系统中的磁盘上是否已经启用了 Soft Updates。 如果没有看到 soft-updates 选项, 则需要使用 tunefs(8) (对于暨存系统) 或 newfs(8) (对于新系统) 命令来激活它。
options UFS_ACL # Support for access control lists
这个选项只能在 FreeBSD 5.X 和更高版本中使用, 它将启用内核中的访问控制表的支持。 这依赖于扩展属性以及 UFS2, 以及在 第 14.12 节 中所介绍的那些特性。 ACL 默认是启用的, 并且如果已经在文件系统上使用了这一特性, 就不应再关掉它, 因为这会去掉文件的访问控制表, 并以不可预期的方式改变受保护的文件的访问方式。
options UFS_DIRHASH # Improve performance on big directories
通过使用额外的内存,这个选项可以加速在大目录上的磁盘操作。 您应该在大型服务器和频繁使用的工作站上打开这个选项,而在磁盘操作不是很重要的 小型系统上关闭它,比如防火墙。
options MD_ROOT # MD is a potential root device
这个选项将打开以基于内存的虚拟磁盘作为根设备的支持。
options NFSCLIENT # Network Filesystem Client options NFSSERVER # Network Filesystem Server options NFS_ROOT # NFS usable as /, requires NFSCLIENT
网络文件系统。 如果您不打算通过 TCP/IP 挂接 UNIX 文件服务器的分区, 就可以注释掉它。
options MSDOSFS # MSDOS Filesystem
MS-DOS 文件系统。 只要您不打算在启动时挂接由 DOS 格式化的硬盘分区, 就可以把它注释掉。 如前面所介绍的那样, 在您第一次挂接 DOS 分区时, 内核会自动加载需要的模块。 此外, emulators/mtools 软件提供了一个很方便的功能, 通过它您可以直接访问 DOS 软盘而无需挂接或卸下它们 (而且也完全不需要 MSDOSFS)。
options CD9660 # ISO 9660 Filesystem
用于 CDROM 的 ISO 9660 文件系统。 如果没有 CDROM 驱动器或很少挂接光盘数据 (因为在首次使用数据 CD 时会自动加载), 就可以把它注释掉。 音乐 CD 并不需要这个选项。
options PROCFS # Process filesystem
进程文件系统。 这是一个挂接在 /proc 的一个 “伪装的” 文件系统, 允许类似 ps(1) 这样的程序给出正在运行的进程的更多信息。 在 FreeBSD 5.X 和更高版本中, 绝大多数情况下都不再需要 PROCFS, 因为绝大多数调试和监视工具都已经进行了修改, 不再需要 PROCFS: 与 FreeBSD 4.X 不同, 新安装的 FreeBSD 5.X 默认情况下并不挂接它。 此外, 6.X-CURRENT 内核在使用 PROCFS 时还必须加入 PSEUDOFS 的支持:
options PSEUDOFS # Pseudo-filesystem framework
PSEUDOFS 在 FreeBSD 4.X 上不可用。
options GEOM_GPT # GUID Partition Tables.
这个选项提供了在一个磁盘上使用大量的分区的能力。
options COMPAT_43 # Compatible with BSD 4.3 [KEEP THIS!]
使系统兼容4.3BSD。不要去掉这一行,不然有些程序将无法正常运行。
options COMPAT_FREEBSD4 # Compatible with FreeBSD4
为了支持在旧版本的FreeBSD下编译的程序,该选项在FreeBSD 5.X i386和Alpha systems下需要打开。 最好在所有的i386和Alpha systems下打开这个选项,因为可能要运行老应用程序。 在5.X才开始支持的平台,比如ia64和Sparc64®,就不需要这个选项。
options SCSI_DELAY=15000 # Delay (in ms) before probing SCSI
这将让内核在探测每个 SCSI 设备之前等待 15 秒。 如果您只有 IDE 硬盘驱动器, 则可以不管它, 反之您可能会想降低这个数值, 可能减少到 5 秒, 以加速启动过程。 当然, 如果您这么做之后 FreeBSD 在识别您的 SCSI 设备时遇到问题, 则您还需要再把它改回去。
options KTRACE # ktrace(1) support
这个选项打开内核进程跟踪,在调试时很有用。
options SYSVSHM # SYSV-style shared memory
提供System V共享内存(SHM)的支持,最常用到SHM的应该是X Window的XSHM延伸, 不少绘图相关程序会自动使用SHM来提供额外的速度。如果您要使用X Window,您最好加入这个选项。
options SYSVMSG # SYSV-style message queues
支持 System V 消息。 这只会在内核中增加数百字节的空间占用。
options SYSVSEM # SYSV-style semaphores
支持System V 信号量, 不常用到, 但只在kernel中占用几百个字节的空间。
Note: ipcs(1) 命令的 -p 选项可以显示出任何用到这些 System V 机制的进程。
options _KPOSIX_PRIORITY_SCHEDULING # POSIX P1003_1B real-time extensions
在 1993 年 POSIX® 添加的实时扩展。 在 Ports Collection 中某些应用程序会用到这些 (比如StarOffice)。
options KBD_INSTALL_CDEV # install a CDEV entry in /dev
这个选项与键盘有关。 它在 /dev 中安装一个 CDEV 项。
options AHC_REG_PRETTY_PRINT # Print register bitfields in debug
# output. Adds ~128k to driver.
options AHD_REG_PRETTY_PRINT # Print register bitfields in debug
# output. Adds ~215k to driver.
这个选项主要用于帮助调试, 它能够给出更容易阅读的寄存器数值。
options ADAPTIVE_GIANT # Giant mutex is adaptive.
内核全局锁 (Giant) 是一种互斥机制 (休眠互斥体) 的名字, 它用于保护许多内核资源。 现在, 这已经成为了一种无法接受的性能瓶颈, 它已经被越来越多地使用保护单个资源的锁代替。 ADAPTIVE_GIANT 选项将使得内核全局锁作为一种自适应自旋锁。 这意味着, 当有线程希望锁住内核全局锁互斥体, 但互斥体已经被另一个 CPU 上的线程锁住的时候, 它将继续运行, 直到那个线程释放锁为止。 一般情况下, 另一个线程将进入休眠状态并等待下一次调度。 如果您不确定是否应该这样做的话, 一般应该打开它。
device apic # I/O APIC
apic 设备将启用使用 I/O APIC 作为中断发送设备的能力。 apic 设备可以被 UP 和 SMP 内核使用, 但 SMP 内核必须使用它。 要支持多处理器, 还需要加上 options SMP。
device isa
所有为 FreeBSD 所支持的 PC 都需要这个设置, 即使没有 ISA 插槽也是一样。 如果您使用 IBM PS/2 (微通道架构) 的计算机, FreeBSD 目前只能提供有限的支持。 要了解关于 MCA 支持的详情, 请参考 /usr/src/sys/i386/conf/NOTES。
device eisa
如果您的主机板上有EISA总线,加入这个设置。使用这个选项可以自动扫描并设置所有连接在EISA总线上的设备。
device pci
如果您的主板有PCI总线,就加入这个选项。使用这个选项可以自动扫描PCI卡,并在PCI到ISA之间建立通路。
device agp
如果您有图形加速卡(AGP card),这个选项将打开图形加速支持。
# Floppy drives device fdc
这是软驱控制器。
# ATA and ATAPI devices device ata
这个驱动器支持所有ATA和ATAPI设备。您只要在内核中加入device ata选项, 就可以让内核支持现代计算机上的所有PCI ATA/ATAPI设备。
device atadisk # ATA disk drives
这个是ATAPI 磁盘驱动器所必须的。
device ataraid # ATA RAID drives
这个选项需要 device ata, 它用于 ATA RAID 驱动。
device atapicd # ATAPI CDROM drives
这个是ATAPI CDROM驱动器所必须的。
device atapifd # ATAPI floppy drives
这个是ATAPI 磁盘驱动器所必须的。
device atapist # ATAPI tape drives
这个是ATAPI 磁带机驱动器所必须的.
options ATA_STATIC_ID # Static device numbering
这指定对控制器使用其静态的编号; 如果没有这个选项, 则会动态地分配设备的编号。
# SCSI Controllers device ahb # EISA AHA1742 family device ahc # AHA2940 and onboard AIC7xxx devices device ahd # AHA39320/29320 and onboard AIC79xx devices device amd # AMD 53C974 (Teckram DC-390(T)) device isp # Qlogic family device mpt # LSI-Logic MPT-Fusion #device ncr # NCR/Symbios Logic device sym # NCR/Symbios Logic (newer chipsets) device trm # Tekram DC395U/UW/F DC315U adapters device adv # Advansys SCSI adapters device adw # Advansys wide SCSI adapters device aha # Adaptec 154x SCSI adapters device aic # Adaptec 15[012]x SCSI adapters, AIC-6[23]60. device bt # Buslogic/Mylex MultiMaster SCSI adapters device ncv # NCR 53C500 device nsp # Workbit Ninja SCSI-3 device stg # TMC 18C30/18C50
SCSI控制器。可以注释掉您系统中没有的设备。如果您只有IDE设备,您可以把这些一起删掉。
# SCSI peripherals device scbus # SCSI bus (required for SCSI) device ch # SCSI media changers device da # Direct Access (disks) device sa # Sequential Access (tape etc) device cd # CD device pass # Passthrough device (direct SCSI access) device ses # SCSI Environmental Services (and SAF-TE)
SSCSI外围设备。也可以像上面一样操作。
Note: 目前系统提供的 USB umass(4) 以及少量其它驱动使用了 SCSI 子系统, 尽管它们并不是真的 SCSI 设备。 因此, 如果在内核配置使用了这类驱动程序, 请务必不要删除 SCSI 支持。
# RAID controllers interfaced to the SCSI subsystem device amr # AMI MegaRAID device asr # DPT SmartRAID V, VI and Adaptec SCSI RAID device ciss # Compaq Smart RAID 5* device dpt # DPT Smartcache III, IV - See NOTES for options device hptmv # Highpoint RocketRAID 182x device iir # Intel Integrated RAID device ips # IBM (Adaptec) ServeRAID device mly # Mylex AcceleRAID/eXtremeRAID device twa # 3ware 9000 series PATA/SATA RAID # RAID controllers device aac # Adaptec FSA RAID device aacp # SCSI passthrough for aac (requires CAM) device ida # Compaq Smart RAID device mlx # Mylex DAC960 family device pst # Promise Supertrak SX6000 device twe # 3ware ATA RAID
支持RAID控制器。如果您没有这些,可以把它们注释掉或是删掉。
# atkbdc0 controls both the keyboard and the PS/2 mouse device atkbdc # AT keyboard controller
键盘控制器(atkbdc)提供AT键盘输入以及PS/2指针设备的I/O服务。 键盘驱动程序(atkbd)与PS/2鼠标驱动程序(psm)需要这个控制器,所以不要删除它。
device atkbd # AT keyboard
atkbd驱动程序,与atkbdc控制器一起使用, 提供连接到AT键盘控制器的AT 84键盘与AT加强型键盘的访问服务。
device psm # PS/2 mouse
如果您的鼠标连接到PS/2鼠标端口,就使用这个设备驱动程序。
device vga # VGA video card driver
显卡驱动。
# splash screen/screen saver device splash # Splash screen and screen saver support
启动时出现了 splash 画面!屏幕保护程序也需要它。 在 FreeBSD 4.X 中,应写作 pseudo-device splash 。
# syscons is the default console driver, resembling an SCO console device sc
sc 是默认的控制台驱动程序, 类似 SCO 控制台。 由于绝大部分全屏幕程序都通过类似 termcap 这样的终端数据库函数库赖访问控制台, 因此无论您使用这个或与 VT220 兼容的 vt 都没有什么关系。 如果您在运行这种控制台时使用全屏幕程序时发生问题, 清在登录之后将 TERM 变量设置为 scoansi。
# Enable this for the pcvt (VT220 compatible) console driver #device vt #options XSERVER # support for X server on a vt console #options FAT_CURSOR # start with block cursor
这是一个兼容 VT220 的控制台驱动, 它同时能够向下兼容 VT100/102。 在同 sc 硬件不兼容的一些笔记本上它能够运行的很好。 当然, 登录系统时请把 TERM 变量设置为 vt100 或 vt220。 此驱动在连接网络上大量不同的机器时也被证明非常有用, 因为此时 termcap 或 terminfo 通常没有可用的 sc 设备 -- 而 vt100 则几乎每种平台都支持。
# Power management support (see NOTES for more options) #device apm
Advanced Power Management support. Useful for laptops, although in FreeBSD 5.X and above this is disabled in GENERIC by default.
# Add suspend/resume support for the i8254. device pmtimer
用于电源管理事件, 例如 APM 和 ACPI 的时钟设备驱动。
# PCCARD (PCMCIA) support # PCMCIA and cardbus bridge support device cbb # cardbus (yenta) bridge device pccard # PC Card (16-bit) bus device cardbus # CardBus (32-bit) bus
PCMCIA支持。如果您使用膝上型计算机,您需要这个。
# Serial (COM) ports device sio # 8250, 16[45]50 based serial ports
这些串口在 MS-DOS/Windows 的世界中称为 COM 口。
Note: 如果使用内置式的调制解调器, 并占用 COM4 而您另有一个串口在 COM2, 则必须把调制解调器的 IRQ 改为 2 (由于晦涩的技术原因, IRQ2 = IRQ 9) 才能够在 FreeBSD 中访问它。 如果有多口的串口卡, 请参考 sio(4) 以了解需要在 /boot/device.hints 中进行的设置。 某些显卡 (特别是基于 S3 芯片的卡) 使用形如 0x*2e8 的 IO 地址, 而许多廉价的串口卡不能够正确地对 16-位 IO 地址空间进行解码, 因此它们会产生冲突, 并造成 COM4 实际上无法使用。
每一个串口都需要有一个唯一的 IRQ (除非您使用支持中断分享的串口卡), 因此默认的 COM3 和 COM4 IRQ 是不能使用的。
# Parallel port device ppc
ISA-bus并行接口。
device ppbus # Parallel port bus (required)
提供并行总线的支持。
device lpt # Printer
提供并口打印机的支持。
Note: 要使用并口打印机,就必须同时加入上面三行设置。
device plip # TCP/IP over parallel
这是针对并行网络接口的驱动器。
device ppi # Parallel port interface device
普通用途的I/O (“geek port”) + IEEE1284 I/O.
#device vpo # Requires scbus and da
这是针对Iomega Zip驱动器的。它要求scbus和da的支持。 最好的执行效果是工作在EPP 1.9模式。
#device puc
如果您有由 puc(4) 支持的 “哑” 串行或并行 PCI 卡, 则应去掉这一行的注释。
# PCI Ethernet NICs. device de # DEC/Intel DC21x4x (“Tulip”) device em # Intel PRO/1000 adapter Gigabit Ethernet Card device ixgb # Intel PRO/10GbE Ethernet Card device txp # 3Com 3cR990 (“Typhoon”) device vx # 3Com 3c590, 3c595 (“Vortex”)
多种PCI网卡驱动器。注释或删除您系统中没有的设备.
# PCI Ethernet NICs that use the common MII bus controller code. # NOTE: Be sure to keep the 'device miibus' line in order to use these NICs! device miibus # MII bus support
MII总线支持对于一些PCI 10/100 Ethernet NIC来说是必需的。
device bfe # Broadcom BCM440x 10/100 Ethernet device bge # Broadcom BCM570xx Gigabit Ethernet device dc # DEC/Intel 21143 and various workalikes device fxp # Intel EtherExpress PRO/100B (82557, 82558) device lge # Level 1 LXT1001 gigabit ethernet device nge # NatSemi DP83820 gigabit ethernet device pcn # AMD Am79C97x PCI 10/100 (precedence over 'lnc') device re # RealTek 8139C+/8169/8169S/8110S device rl # RealTek 8129/8139 device sf # Adaptec AIC-6915 (“Starfire”) device sis # Silicon Integrated Systems SiS 900/SiS 7016 device sk # SysKonnect SK-984x & SK-982x gigabit Ethernet device ste # Sundance ST201 (D-Link DFE-550TX) device ti # Alteon Networks Tigon I/II gigabit Ethernet device tl # Texas Instruments ThunderLAN device tx # SMC EtherPower II (83c170 “EPIC”) device vge # VIA VT612x gigabit ethernet device vr # VIA Rhine, Rhine II device wb # Winbond W89C840F device xl # 3Com 3c90x (“Boomerang”, “Cyclone”)
使用MII总线控制器代码的驱动器。
# ISA Ethernet NICs. pccard NICs included. device cs # Crystal Semiconductor CS89x0 NIC # 'device ed' requires 'device miibus' device ed # NE[12]000, SMC Ultra, 3c503, DS8390 cards device ex # Intel EtherExpress Pro/10 and Pro/10+ device ep # Etherlink III based cards device fe # Fujitsu MB8696x based cards device ie # EtherExpress 8/16, 3C507, StarLAN 10 etc. device lnc # NE2100, NE32-VL Lance Ethernet cards device sn # SMC's 9000 series of Ethernet chips device xe # Xircom pccard Ethernet # ISA devices that use the old ISA shims #device le
ISA 以太网卡驱动。 参见 /usr/src/sys/i386/conf/NOTES 以了解关于哪个驱动程序能够驱动您的网卡的细节。
# Wireless NIC cards device wlan # 802.11 support device an # Aironet 4500/4800 802.11 wireless NICs. device awi # BayStack 660 and others device wi # WaveLAN/Intersil/Symbol 802.11 wireless NICs. #device wl # Older non 802.11 Wavelan wireless NIC.
Support for various wireless cards.
device mem # Memory and kernel memory devices
The system memory devices.
device io # I/O device
This option allows a process to gain I/O privileges. This is useful in order to write userland programs that can handle hardware directly. This is required to run the X Window system.
device random # Entropy device
Cryptographically secure random number generator.
device ether # Ethernet support
ether 只有在使用以太网卡时才需要。 它包含了通用的以太网协议代码。在 FreeBSD 4.X 中应写作 pseudo-device ether.
device sl # Kernel SLIP
sl 用以提供 SLIP 支持。 目前它几乎已经完全被 PPP 取代了, 因为后者更容易配置, 而且更适合调制解调器之间的连接, 并提供了更强大的功能。 在 FreeBSD 4.X 中, 这一行应写作 pseudo-device sl.
device ppp # Kernel PPP
这一选项用以提供内核级的 PPP 支持, 用于拨号连接。 也有以用户模式运行的 PPP 实现, 使用 tun 并提供包括按需拨号在内的更为灵活的功能。 在 FreeBSD 4.X 中应写作 pseudo-device ppp.
device tun # Packet tunnel.
它会被用户模式的 PPP 软件用到。 参考本书的 PPP 以了解更多的细节。 在 FreeBSD 4.X 中则应使用 pseudo-device tun。
device pty # Pseudo-ttys (telnet etc)
这是一个 “pseudo-terminal” 或模拟登入端口。 它用来接收连入的 telnet 以及 rlogin 会话、 xterm, 以及一些其它程序如 Emacs 等。
Note: 在 FreeBSD 4.X 中, 您应该使用 pseudo-device pty number。 pty 后面的 number 用于指定要创建的 pty 数量。 如果您需要多于默认的同时 16 个 xterm 窗口或远程登录会话, 则应相应的提高这个值, 其上限是 256。
device md # Memory “disks”
Memory disk pseudo-devices. With FreeBSD 4.X use the line pseudo-device md.
device gif # IPv6 and IPv4 tunneling
它实现了在 IPv4 上的 IPv6 隧道、 IPv6 上的 IPv4 隧道、 IPv4 上的 IPv4 隧道、 以及IPv6 上的 IPv6隧道。 从 FreeBSD 4.4 开始 gif 设备具有了 “自动克隆” 能力, 因此只需指定 pseudo-device gif。 更早版本的 FreeBSD 4.X 需要手工指定一个数字, 例如 pseudo-device gif 4。
device faith # IPv6-to-IPv4 relaying (translation)
这个伪设备能捕捉发给它的数据包,并把它们转发给 IPv4/IPv6 翻译服务程序。在 FreeBSD 4.X 中,应写作 pseudo-device faith 1。
# The `bpf' device enables the Berkeley Packet Filter. # Be aware of the administrative consequences of enabling this! device bpf # Berkeley packet filter
这是 Berkeley 包过滤器。这个伪设备允许网络接口被置于混杂模式, 从而,截获广播网 (例如,以太网) 上的每一个数据包。 截获的数据报可以保存到磁盘上,也可以使用 tcpdump(1) 程序来分析。 在 FreeBSD 4.X 中,应写作 pseudo-device bpf。
Note: bpf(4) 设备也被用于 dhclient(8) 来获取默认路由器(网关)的 IP 地址。如果使用DHCP,就不要注释掉这行。
# USB support device uhci # UHCI PCI->USB interface device ohci # OHCI PCI->USB interface device usb # USB Bus (required) #device udbp # USB Double Bulk Pipe devices device ugen # Generic device uhid # “Human Interface Devices” device ukbd # Keyboard device ulpt # Printer device umass # Disks/Mass storage - Requires scbus and da device ums # Mouse device urio # Diamond Rio 500 MP3 player device uscanner # Scanners # USB Ethernet, requires mii device aue # ADMtek USB Ethernet device axe # ASIX Electronics USB Ethernet device cue # CATC USB Ethernet device kue # Kawasaki LSI USB Ethernet device rue # RealTek RTL8150 USB Ethernet
支持各类 USB 设备。
# FireWire support device firewire # FireWire bus code device sbp # SCSI over FireWire (Requires scbus and da) device fwe # Ethernet over FireWire (non-standard!)
支持各类火线设备。
要了解 FreeBSD 所支持的设备的其他情况, 请参考 /usr/src/sys/i386/conf/NOTES。
大内存配置的机器需要超过4GB的虚拟地址。 因为4GB的限制,Intel在Pentium及后续的CPUs上增加了36位物理地址的支持。
Intel Pentium Pro和后续的CPUs允许内存地址扩展到64GB.(PAE) FreeBSD通过PAE选项来支持这个能力。 在FreeBSD 4.X系列里面,4.9-RELEASE开始支持,FreeBSD 5.X系列里面,从5.1-RELEASE开始支持。 in the 4.X series of FreeBSD beginning with 4.9-RELEASE and in the 5.X series of FreeBSD beginning with 5.1-RELEASE。因为Intel架构的限制, 高于或低于4GB都没有什么区别,内存分配到大于4GB仅仅是增加了可利用的内存池。
为了让内核支持PAE,只要增加下面这一行到配置文件:
options PAE
Note: PAE在FreeBSD里面现在只能支持 Intel IA-32处理器。 同时,还应该注意,FreeBSD的PAE支持没有经过广泛的测试, 和其他稳定的特性相比只能当作是beta版。
PAE在FreeBSD下有如下的一些限制:
进程不能接触大于4GB的VM空间。
KLD 模块不能加载到一个打开了PAE支持的内核里面, 这是因为内核模块和内核的建立框架不一样。
没有使用bus_dma(9)界面的设备驱动程序在打开了PAE支持的内核里面 会导致数据腐化(corruption)。因为这个原因,FreeBSD 5.X的PAE内核配置文件 把所有在打开了PAE的内核上不能工作的驱动程序排除在外。
一些系统打开了探测系统内存资源使用能力的功能,因为打开了 PAE支持,这些功能可能会被覆盖掉。 其中一个例子就是内核参数kern.maxvnodes,它是控制 内核能使用的最大vnodes数目的,建议重新调整它及其他类似参数到合适的值。
为了避免KVA的消耗,很有必要增加系统的内核虚拟地址, 或者减少很耗系统资源的内核选项的总量(看上面)。KVA_PAGES选项 可以用来增加KVA空间。
为了稳定和高性能,建议查看tuning(7)手册页。pae(4)手册页包含 FreeBSD'sPAE支持的最新信息。
如果您在运行 FreeBSD 5.0 或更高版本, 则可以略过这节。 新版本使用 devfs(5) 来分配设备节点, 这一过程对用户是透明的。
内核中的几乎每个设备在 /dev 目录中都有对应的 “节点” 项。 这些节点看上去像是普通的文件, 但事实上却是程序在使用对应的设备时, 与内核联系的入口。 Shell 脚本 /dev/MAKEDEV 在首次安装操作系统时会创建几乎所有能够支持的设备节点。 然而, 它并不会创建 所有的 节点, 因此当您增加了某些设备的支持时, 就需要检查这个目录中是否有对应的项了, 如果没有, 就应该添加它们。 这有一个简单的例子:
假定在内核中加入了IDE CD-ROM的支持。可以这样加入:
device acd0
这意味着您应当在/dev目录下找一些以acd0为起点的入口, 通常后面有一个字母,像是以c,或者r开头,表示这是一个“raw”设备。 如果那些文件不在那儿,就必须改变到/dev目录然后键入:
# sh MAKEDEV acd0
这些脚本完成后,您要在/dev目录下确认有acd0c和 racd0c等几个入口,这表示程序已经正确执行。
以下是加入声卡节点的例子:
# sh MAKEDEV snd0
Note: 当创建完诸如声卡这样的设备节点时,如果其他人有权访问您的机器, 可能有必要在/etc/fbtab文件中添加这些节点来保护系统安全。 更多的信息参考fbtab(5)
依上述的简单程序,建立任何不在GENERIC里的硬件设备节点
Note: 所有的SCSI控制器都使用一样的设备节点,所以您无须重新建立节点。 另外,网卡与SLIP/PPP虚拟设备并没有任何设备节点,所以您不必担心怎么建立节点。
在定制一个内核时,可能会出现五种问题。它们是:
如果 config(8) 在给出您的内核描述时失败, 则可能在某些地方引入了一处小的错误。 幸运的是, config(8) 会显示出它遇到问题的行号, 这样您就能够迅速地定位错误。 例如, 如果您看到:
config: line 17: syntax error
可以通过与 GENERIC 或其他参考资料对比, 来确定这里的关键词是否拼写正确。
如果 make 命令失败, 它通常表示内核描述中发生了 config(8) 无法找出的的错误。 同样地, 仔细检查您的配置, 如果仍然不能解决问题, 发一封邮件到 FreeBSD 一般问题邮件列表 并附上您的内核配置, 则问题应该很快就能解决。
如果内核编译得很顺利, 但安装失败 (即 make install 或 make installkernel 命令失败), 第一件事是检查您的系统是否是以 1 或更高的安全级运行的 (参见 init(8))。 内核安装过程将尝试去掉原有内核的 immutable (不可改) 标志, 并在新的内核上设置它。 由于安全级 1 或更高的安全级会阻止修改系统中任何文件的这个标志, 因此安装内核需要 0 或者更低的安全级。
不过这只对 FreeBSD 4.X 以及更早的版本有效。 FreeBSD 5.X 以及之后的版本并不会给内核设置不可改标志, 因此安装失败可能说明发生了更深层次的问题。
如果您的内核无法启动, 或不识别您的设备, 千万别慌! 非常幸运的是, FreeBSD 有一个很好的机制帮助您从不兼容的内核恢复。 在 FreeBSD 启动加载器那里简单地选择一下要启动的内核就可以了。 当系统在引导菜单的 10 秒倒计时时进入它。 按下除了 Enter 之外的任意键, unload 然后输入 boot /boot/kernel.old/kernel, 或者其他任何一个可以正确引导的内核即可。 当重新配置内核时, 保持一个已经证明能够正常启动的内核永远是一个好习惯。
当使用好的内核启动之后您可以检查配置文件并重新尝试编译它。 比较有用的资源是 /var/log/messages 文件, 它会记录每次成功启动所产生的所有内核消息。 此外, dmesg(8) 命令也会显示这次启动时产生的内核消息。
Note: 如果在编译内核时遇到麻烦, 请务必保留一个 GENERIC 或已知可用的其他内核, 并命名为别的名字以免在下次启动时被覆盖。 不要依赖 kernel.old 因为在安装新内核时, kernel.old 会被上次安装的那个可能不正常的内核覆盖掉。 另外, 尽快把可用的内核挪到 /boot/kernel 否则类似 ps(1) 这样的命令可能无法正常工作。 为了完成这一点, 需要修改目录的名字:
# mv /boot/kernel /boot/kernel.bad # mv /boot/kernel.good /boot/kernel对于 FreeBSD 5.X 之前的版本, 正确的 “解除” make 所实施的保护的命令 (为了把另一个内核永久性地挪回来) 是:
# chflags noschg /kernel如果您发现您不能这样做,您的系统的安全级别可能大于0了。在/etc/rc.conf里面编辑 kern_securelevel并把它设置为-1然后重启。 当您很满意这个内核的时候,您可以再把设置改回去。
另外,如果您要“锁住”内核或其他文件,以致它不能被移动或修改, 可以用下面的命令:
# chflags schg /kernel
如果您安装了一个与系统中内建工具版本不同的内核, 例如在 4.x 系统上安装了 5.x 的内核, 许多用于检查系统状态的工具如 ps(1) 和 vmstat(8) 都将无法正常使用。 您应该 重新编译一个和内核版本一致的系统。 这也是为什么一般不鼓励使用与系统其他部分版本不同的内核的一个主要原因。
FreeBSD 可以支持众多种类的打印机, 从最古老的针式打印机到最新的激光打印机以及它们之间所有类型的打印机。 您可以使运行的应用程序产生高质量的打印输出。
FreeBSD 也可以被设置成一个网络上的打印服务器。 它可以从包括 FreeBSD、 Windows 及 Mac OS 在内的多种其他主机上接收打印任务。 FreeBSD 将保证任务在某时被打印, 并且可以把哪台机器, 哪位用户打印的最多记录在统计表中, 生成 “横幅” 页, 显示哪份打印输出的是哪位用户的等等。
在读完这章后,您将知道:
怎样配置FreeBSD打印池。
怎样安装打印过滤器来对特殊的打印任务做特殊的处理, 包括把传来的文档转换成打印机能理解的格式。
怎样在打印输出上开启报头或者横幅页功能。
怎样打印到连接在其他计算机上的打印机。
怎样打印到直接连接在网络上的打印机。
怎样控制打印机的限制, 包括限制打印任务的大小和阻止某些用户打印。
怎样记录打印机统计表和使用情况。
怎样解决打印故障。
在读这章之前, 您应该:
知道怎样配置并安装新内核 (第 8 章)。
为了在FreeBSD中使用打印机, 您需要将伯克利行式打印机打印池系统即LPD 打印池系统设置好。 它是FreeBSD的标准打印控制系统。 这章介绍LPD 打印池系统, 经常简称LPD, 并且将指导您贯穿它的配置。
如果您已经熟悉了 LPD或者其他打印池系统, 您可以跳到设置打印池系统这部分。
LPD完全控制一台主机的打印机。 它负责许多的事情:
它控制本地和连接在网络上其他主机上的打印机的访问。
它允许用户提交要打印的文件; 这些通常被认为是任务。
它为每个打印机维护一个队列来防止多个用户在同一时刻访问一台打印机。
它可以打印报头(也叫做banner或者burst页使用户可以轻松的从一堆打印输出中找到它们打印的任务。
它来设置连接在串口上的打印机的通讯参数。
它能通过网络将任务发送到另外一台主机的 LPD打印池中。
它可以根据不同种类的打印机语言和打印机的性能运行特殊的过滤器来格式化任务。
它记录打印机的使用情况。
通过配置文件 (/etc/printcap)和提供的特殊过滤程序, 您可以使LPD 系统在众多种类的打印机硬件上完成上面全部的或者一些子集的功能。
如果您是系统唯一的用户, 您可能会奇怪为什么要在您不需要访问控制, 报头页或者打印机使用统计时为打印池费心。 它可以设置成允许直接访问打印机, 但您还是应该使用打印池, 因为:
LPD在后台打印任务; 您不用被迫等待数据被完全拷贝到打印机的时间。
LPD可以可以方便的通过过滤器给任务加上日期/ 时间的页眉或者把一种特殊的文件格式 (比如TeX DVI 文件) 转换成一种打印机可以理解的格式。 您不必去手动做这些步骤。
许多提供打印功能的免费和商业程序想要和您系统上的打印池通讯。 通过设置打印池系统, 您将更轻松的支持其他以后要添加的或者现有的软件。
要想在LPD打印池 系统上使用打印机, 您需要 设置打印机硬件和 LPD软件。 这个 文档描述了这两级设置:
参见简单打印机 设置来了解怎样连接一个打印机, 告诉 LPD怎样与 它通讯, 并且打印纯文本到 打印机。
参见高级 打印机设置来了解怎样打印多种 特殊格式的文件, 怎样打印报头页, 怎样通过网络 打印, 怎样控制打印机的访问权限, 并且学会为打印 作业记帐统计。
这部分讲解怎样配置打印机硬件和 LPD使之与打印机配合。 讲解的基础知识有:
如果您正在设置一台通过网络协议 接收数据来打印而不是通过串行或者并行界面的打印机, 参见使用 网络数据流界面的打印机。
尽管这部分叫“简单打印机 设置”, 但还是相当复杂的。 使打印机 配合和LPD 打印池在计算机上正常运转是最难的 部分。 一旦您的打印机可以正常工作后,那些高级选项, 比如报文页和记帐, 是相当简单的。
这部分讲述了打印机连接到计算机的多种 途径。 主要讨论了多种接口和 连接线, 还有允许 FreeBSD 与打印机通讯所需的 内核配置。
如果您已经连接好了您的打印机而且已经 用它在另外一个操作系统下成功的打印, 您 或许可以跳到这个部分软件设置。
现在所出售的在 PC 上使用的打印机通常至少有 以下三种接口中的一个:
串行接口, 也叫 RS232C, RS232D 或者 COM 口, 使用您计算机上的 串口来发送数据到打印机。 串行 接口在计算机上已经非常普遍, 而且电缆 也非常容易买到且容易制作。 串行 接口有时需要特殊的电缆, 而且可能需要 您去配置稍微有点儿复杂的通讯 选项。 大多数 PC 的串口的最高 传输速度只有 115200 bps, 这使得打印 很大的图像需要的时间很长。
并行界面使用 计算机上的并口来发送数据到 打印机。 并行接口在计算机上也已经非常普遍 而且速度高于 RS232 串行界面。 电缆非常容易买到, 但很难手工 制作。 并行接口通常没有 通讯选项, 这使得 配置它相当简单。
并口按打印机上的接头来命名也叫做 “Centronics”接口 。
USB 接口, 即通用串行 总线, 可以达到比并口和串口 高很多的速度。 而电缆简单又便宜。 USB 用来打印比串口和并口 更有优势, 但是 UNIX 系统不能很好的支持它。 避免这个问题的方法就是购买一台 像大多数打印机一样的即有 USB 接口又有并口的 打印机。
一般来说并口只提供 单向通讯( 计算机到打印机), 而串口 和 USB 则可以提供双向通讯。 新的并口( EPP and ECP) 和打印机 在使用了 IEEE1284 标准的电缆之后, 可以在FreeBSD下 双向通讯。
与打印机通过并口双向通讯 通常由这两种方法中的一种来完成。 第一个方法是 使用为 FreeBSD 编写的可以通过打印机使用的语言 与打印机通讯的驱动程序。 这通常 用在喷墨打印机上, 并且可以用来报告 剩余墨水多少和其他状态信息。 第二种方法 使用在支持 PostScript 的打印机上。
PostScript 任务 事实上由程序发送给打印机; 但它并不进行打印 而是直接将结果返回给计算机。 PostScript 也采取双向通讯来将打印中的问题 报告给计算机, 比如 PostScript 程序中的错误 或者打印机卡纸。 这些信息对于用户来说也许是非常 有价值的。 此外, 最好的在支持 PostScript 的打印机上记帐的方法需要双向 通讯: 询问打印机打印总页数 ( 打印机 从出厂一共打印过多少页 ), 然后发送 用户的任务, 之后再次查询总打印页数。 将打印前后得到 的两个值相减就可以得到该用户要付多少 纸钱。
用并口连接打印机需要用 Centronics 电缆把打印机与计算机连接起来。 具体说明指导应该在打印机, 计算机的说明书上有, 或者 干脆两个上面都有。
记住您用的计算机上的哪个并口。 第一个并口在 FreeBSD 上叫 /dev/ppc0 ; 第二个叫 /dev/ppc1, 依此 类推。 打印机设备也用同样的方法命名: /dev/lpt0 是连接在第一个并口 上的打印机, 依此类推。
用串口连接打印机需要用 合适的串口电缆把打印机与计算机连接起来。 具体 说明指导应该在打印机, 计算机的说明书上有, 或者 同样干脆两个上面都有。
如果您不确定什么样儿的电缆才是 “ 合适的串口 电缆 ” , 您可以尝试以下几种不同的 电缆:
调制解调器 电缆每一端的 每一根引脚都直接连接到另一端 相应的引脚 上。 这种电缆也叫做 “DTE-to-DCE” 电缆。
非调制解调器电缆上每一端的有些引脚 是与另一端相应引脚直接连接的, 而有一些则是交叉连接的 (比如, 发送数据引脚连接到 接收数据引脚 ), 还有一些引脚直接在电缆连接头儿内 短接。 这种电缆也叫做 “DTE-to-DTE” 电缆。
一些特殊的打印机需要的串行打印机 电缆, 是一种和非调制解调器电缆类似的电缆, 只是一些信号还是送到了另一端, 而 不是直接在连接头儿内短路。
当然, 您还得为打印机设置通讯参数。 一般是通过打印机面板上的按钮或者 DIP 开关进行设置。 在计算机和打印机上都选择它们所支持的最高 波特 (每秒多少比特, 有时也叫 波特率) 的传输速率。 选择7或者8个数据位; 选择不校验, 偶校验或者奇校验; 选择1个或2个停止位。 还要选择流量 控制协议: 无, XON/XOFF (也叫做 “in-band” 或 “软件”) 流量控制。 记住您的软件配置中的参数也要设成上面的 数值。
这部分描述了要使用FreeBSD系统中的 LPD 打印池进行打印所需的软件设置。
包括这几个步骤:
在需要的时候配置内核来允许您连接 打印机的端口; 配置内核 部分会告诉您 需要做什么。
如果您使用并口, 则需要设置一下 并口的通讯模式; 设置 并口通讯模式 部分会告诉您具体的 细节。
测试操作系统是否能够发送数据到打印机。 检测打印机 联机状况 部分会告诉您要怎样 做。
为 LPD 设置与打印机匹配的参数则 通过修改 /etc/printcap 这个文件来完成。 这章后面 的部分将讲解如何来完成设置。
操作系统的内核为了使某些特殊设备工作需要重新 编译。 打印机所用的串口、 并口就属于那些特殊设备。 因此, 可能需要 添加对串口或并口的支持, 如果内核并没有配置它们的话。
要想知道您现在使用的内核是否支持串口, 输入:
# grep sioN /var/run/dmesg.boot
其中 N 是串口的 编号, 从0开始。 如果您看到 类似下面的输出:
sio2 at port 0x3e8-0x3ef irq 5 on isa sio2: type 16550A
则说明您现在使用的内核支持串口。
要想知道您现在使用的内核是否支持并口, 输入:
# grep ppcN /var/run/dmesg.boot
其中 N 是并口的 编号, 同样从0开始。 如果得到类似 下面的输出:
ppc0: <Parallel port> at port 0x378-0x37f irq 7 on isa0 ppc0: SMC-like chipset (ECP/EPP/PS2/NIBBLE) in COMPATIBLE mode ppc0: FIFO with 16/16/8 bytes threshold
那么您现在使用的内核支持并口。
您可能必须为了使操作系统支持您打印机需要的串口或 并口而 重新配置内核。
要增加对串口的支持, 参见 内核配置这部分。 要增加对并口的支持, 除了参见 上面提到的那部分之外, 还要 参见下面的 部分。
Note: FreeBSD 5.0 支持 devfs 这种在需要的时候自动添加设备节点 的文件系统。 如果您正在使用的 FreeBSD 开启了 devfs 文件系统, 那么您可以安全的跳过 这部分。
尽管内核可能已经支持通过串口或者并口 通讯, 但您还是需要一个软件接口 来使您系统上的程序通过它发送和接收 数据。 这也是 /dev 目录中那些设备节点的作用。
要在 /dev 中为端口添加 一个设备节点:
使用 su(1) 命令切换到 root 帐号。 在出现提示的时候输入 root 帐号的密码。
将当前目录改变到 /dev 目录:
# cd /dev
输入:
# ./MAKEDEV port
其中 port 替换成 您需要添加端口的节点名。 当打印机连接在第一个并口上时, 替换成 lpt0 , 连接在第二个并口上时, 替换成 lpt1 , 依此类推; 当打印机连接在第一个串口上时, 替换成 ttyd0 , 连接在第二个串口上时, 替换成 ttyd1 , 依此类推。
输入:
# ls -l port
来检查设备节点是否正常建立。
在使用并口时, 您可以选择 让 FreeBSD 用中断方式还是轮询方式来 与打印机通讯。 在 FreeBSD 4.X and 5.X 上, 通用的打印机驱动 (lpt(4)) 使用 ppbus(4) 系统, 它由 ppc(4) 驱动来控制端口芯片。
中断 方式是 GENERIC 核心的默认方式。 在这种方式下, 操作系统占用一条中断请求线来检测什么时候 打印机做好接收数据的准备。
轮询 方式是 操作系统反复不断的询问打印机是否做好 接收数据的准备。 当它返回准备好时, 核心开始发送 下面要发送的数据。
中断方式速度通常会快一些, 但却占用了一条宝贵的中断请求线。 一些新出的 HP 打印机 不能正常的工作在中断模式下, 是由于一些定时问题 (还没正确的理解) 造成的。 这些打印机需要使用轮询方式。 您应该使用 任何一种方式, 只要它能正常工作就行。 一些打印机虽然在两种模式下都可以 工作, 但在中断模式下会慢的要命。
您可以用以下两种方法设定通讯模式: 通过 配置内核或者使用 lptcontrol(8) 这个程序。
要通过配置内核的方法设置 通讯模式:
修改内核配置文件。 找到 一个叫 ppc0 的记录。 如果您想要设置的是 第二个并口, 那么用 ppc1 代替。 使用第三个并口的时候用 ppc2 代替, 依此类推。
如果您想要使用中断方式, 在 FreeBSD 4.X 下的方法是指定一个 irq :
device ppc0 at isa? irq N
其中 N 是计算机并口 的中断编号。
在 FreeBSD 5.X 下, 修改下面这一行:
hint.ppc.0.irq="N"
它在 /boot/device.hints 这个文件中, 其中 N 用正确的中断 编号代替。 同时, 核心配置文件也必须 包括 ppc(4) 的驱动:
device ppc
如果您想要使用轮询方式, 则不用指定 irq :
在 FreeBSD 4.X 下, 在内核配置文件中使用下面 这行:
device ppc0 at isa?
在 FreeBSD 5.X 下, 只需要把 /boot/device.hints 这个文件中的下面这行 删除掉:
hint.ppc.0.irq="N"
在 FreeBSD 5.X 下, 有时上面的方法并不能使并口工作在轮询方式。 大多数 情况是由于 acpi(4) 驱动造成的, 它 可以自动侦测到设备并将其挂载到系统上, 但也因此, 它控制着打印机端口的访问模式. 您 得检查 acpi(4) 的配置来 解决这个问题。
保存文件。 然后配置, 建立, 并安装刚配置的 内核, 最后重新启动。 参见 内核配置 这章来获得 更多细节。
使用 lptcontrol(8) 设置通讯模式 :
输入:
# lptcontrol -i -d /dev/lptN
将 lptN 设置成中断方式。
输入:
# lptcontrol -p -d /dev/lptN
将 lptN 设置成轮询方式。
您可以把这些命令加入到 /etc/rc.local 这个文件中, 这样每次启动系统 时都会设置成您想要的方式。 参见 lptcontrol(8) 来获得 更多信息。
在设置打印池系统之前, 您 应该确保您的计算机可以把数据 发送到打印机上。 分别独立调试打印机的通讯和打印池系统 会更简单。
我们为了测试打印机,将发送一些文本给它。 一个叫 lptest(1) 的程序能胜任这项工作, 它可以让打印机立即打印出程序发给它的 字符: 它在每行打出 可以打印的 96 个 ASCII 字符。
当我们使用的是一台 PostScript ( 或者以其他语言为基础的 ) 打印机, 那么 需要更仔细的检测。 一段小小的 PostScript 程序足以完成检测的任务, 比如下面这段程序:
%!PS 100 100 moveto 300 300 lineto stroke 310 310 moveto /Helvetica findfont 12 scalefont setfont (Is this thing working?) show showpage
可以把上面这段 PostScript 代码写进一个文件里, 并且像下面部分的例子里那样 使用。
Note: 上面的小程序是基于 PostScript 写成的, 而不是惠普 的 PCL 。 尽管 PCL 拥有强大的功能, 比如 您可以在打印纯文本的同时夹带着特殊的命令。 PostScript 不能直接打印纯文本, 所以 这类打印机语言是我们要特殊照顾的 对象。
这部分内容将指导您怎样检测FreeBSD是否 可以与一台已经连接在并口上的打印机 通讯。
要测试并口上的 打印机:
用 su(1) 命令转换到 root 用户。
发送数据到打印机。
如果打印机可以直接打印纯文本, 可以用 lptest(1) 。 输入:
# lptest > /dev/lptN
其中 N 是并口的 编号, 从0开始。
如果打印机支持 PostScript 或者 其他打印机语言, 可以发送一段小程序到 打印机。 输入:
# cat > /dev/lptN
然后, 一行一行的 输入 输入 这段程序。 因为在按下 换行 或者 回车 之后, 这一行就不能再修改了。 当您输入完 这段程序之后, 按 CONTROL+D, 或者其他 表示文件结束的键。
另外一种办法, 您可以把这段程序写在一个文件 里并输入:
# cat file > /dev/lptN
其中 file 是 包含这您要发给打印机程序的 文件名。
之后, 您应该看到打印出了一些东西。 如果打印出的东西 看起来并不正确, 请不要着急; 我们将在后面指导您怎样 解决这类问题。
这部分将告诉您如何检测FreeBSD是否可以与 连接在串口上的打印机通讯。
要测试一个连接在串口上 的打印机:
通过 su(1) 命令转换成 root 用户。
修改 /etc/remote 这个文件。 增加 下面这些内容:
printer:dv=/dev/port:br#bps-rate:pa=parity
其中 port 是 串口的设备节点 (ttyd0, ttyd1, 等等。 ), bps-rate 是 与打印机通讯时使用的波特, parity 是通讯时打印机要求 的校验方法 (either even, odd, none, or zero)。
这儿有一个串口打印机的例子, 它连接在第三个串口上, 速度为 19200 波特, 不进行校验:
printer:dv=/dev/ttyd2:br#19200:pa=none
用 tip(1) 连接打印机。 输入:
# tip printer
如果没能成功, 则要再次修改 /etc/remote 这个文件, 并且试试用 /dev/cuaaN 代替 /dev/ttydN。
发送数据到打印机。
如果打印机可以直接打印纯文本, 则用 lptest(1) 。 输入:
% $lptest
如果打印机支持 PostScript 或者其他 打印机语言, 则发送一段小程序到 打印机。 一行一行的输入程序, 必须 非常仔细 因为像退格 或者其他编辑键也许对打印机来说有它的 意义。 您同样也需要按一个特殊的 文件结束键, 让打印机知道它已经 接收了整个程序。 对于 PostScript 打印机, 按 CONTROL+D。
或者, 您同样也可以把程序存储在一个文件里 并输入:
% >file
其中 file 是 包含要发送程序的文件名。 在 tip(1) 发送这个文件之后, 按代表 文件结束的键。
您应该看到打印出了一些东西。 如果它们看起来 并不正确也不要着急; 我们将在以后的部分中解决它。
目前, 您的打印机应该已经连好了线, 系统内核 也为与打印机联机而重新配置好 ( 如果需要的话 ), 而且您也 已经可以发送一些简单的数据到打印机。 现在, 我们要 配置 LPD 来使其控制您的 打印机。
配置 LPD 要修改 /etc/printcap 这个文件。 LPD 打印池系统 在每次打印池被使用的时候都会读取这个文件, 所以对这个文件 的修改会立即生效。
printcap(5) 这个文件的格式很简单。 您可以用您最喜欢的文本编辑器来修改 /etc/printcap 这个文件。 这种格式和其他的 像 /usr/share/misc/termcap 和 /etc/remote 这类文件是一样的。 要得到完整的 关于这种格式的信息, 参见 cgetent(3) 。
简单的打印池配置包括下面的几 步:
为打印机起一个名字 ( 和一些方便的别名 ) , 然后把它们写进文件 /etc/printcap ; 参见 Naming the Printer 这章来得到更多的关于起名的帮助。
关掉报头页 ( 它默认是打开的 ), 通过 增加 sh 项目; 参见 Suppressing Header Pages 部分来得到更多信息。
建立一个打印池缓冲的目录, 并且通过 sd 项目指定它的位置; 参见 Making the Spooling Directory 部分来得到更多信息。
在 /dev 下设置打印机设备 节点, 并且在写在 /etc/printcap 文件中 lp 项目里; 参见 识别打印机 设备 这部分得到更多信息。 还有, 如果打印机连接在 串口上, 设置通讯参数要写在 ms# 项目中。 这些参数在 配置打印池 通讯参数 这部分已经讨论过。
安装纯文本过滤器; 参见 安装文本 过滤器 这章来得到细节。
Note: 基于打印机语言的打印机, 比如 PostScript 打印机, 不能直接打印纯文本。 简单的设置方法在上面 提到并且下面的部分也要讨论, 假如您正在 安装这样一台只能打印它明白的文件的 打印机。
用户总是希望他们能在任何一个安装在他们系统的打印机上打印 纯文本。 使用 LPD 接口的程序也通常这样 希望。 如果您正在安装这样一台打印机, 并且想要它能打印 基于它支持的打印机语言的任务 并且 还可以打印纯文本的任务, 那么强烈建议您在上面提到 的简单设置的步骤上增加一步: 安装一个 自动纯文本到 PostScript ( 或者其他打印机语言 ) 的 转化程序。 参见 在 PostScript 打印机上打印纯文本 将得到 更多有关信息。
第一步 ( 简单 ) 就是给打印机起一个名字。 您是按功能起名字还是干脆起个古怪的名字都没有关系, 因为您可以给打印机设置许多的 别名。
在 /etc/printcap 里至少有一个打印机必须指定, 别名是 lp. 这是默认的打印机名。 如果用户既没有 PRINTER 环境 变量, 也没有在任何 LPD 命令的命令行中指定打印机名, 则 lp 将是默认 要使用的打印机。
还有, 我们通常把最后一个别名设置成能完全描述打印机的名字, 包括厂家和型号。
一旦您选好了名字或者一些别名, 把它们放进文件 /etc/printcap 里。 打印机的名字应该从最左边的一列写起。 用竖杠来隔开每个别名, 并且在最后一个别名后面加上一个冒号。
在下面的例子中, 我们从一个基本的 /etc/printcap 开始, 它只定义了两台打印机 (一台 Diablo 630 行式打印机和一台 Panasonic KX-P4455 PostScript 激光打印机 ):
# # /etc/printcap for host rose # rattan|line|diablo|lp|Diablo 630 Line Printer: bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:
在这个例子中, 第一台打印机被命名为 rattan 并且设置了 line, diablo, lp, 和 Diablo 630 Line Printer 这几个别名。 因为它被设置了 lp 这个别名, 所以它是默认打印机。 第二台 被命名为 bamboo, 并且设置了 ps, PS, S, panasonic, 和 Panasonic KX-P4455 PostScript v51.4 这几个别名。
LPD 打印池系统默认 会为每个任务打印 报头页。 报头页 包含了发送这个任务的用户, 发送这个任务 的主机, 任务的名字, 并用 大字母打出。 但不幸的是, 所有这些额外的文本会妨碍 在简单设置打印机时的除错, 所以我们将先 不打印报头页。
要暂停打印报头页, 为打印机的记录增加 sh 标记, 在 /etc/printcap 文件中。 这儿有一个 /etc/printcap 文件中使用 sh 的例子:
#
# /etc/printcap for host rose - no header pages anywhere
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
:sh:
bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
:sh:
注意我们的正确格式: 第一行从 最左边一列开始, 而后的每一行用 TAB 缩进一次。 一行写不下需要换行时, 在换行前打一个 反斜杠。
下一步设置就是要建立一个 打印池目录, 一个在任务被打印完 之前存放任务的目录, 也有很多其他 的打印池系统所用到的文件存在里面。
由于打印池目录的变量本质, 通常 把这些目录安排在 /var/spool 下。 您也没有必要去 备份打印池目录里的内容。 重新建立它们只要简单的使用 mkdir(1) 命令。
通常, 我们习惯将目录名起成和 打印机一样的名字, 像下面 这样:
# mkdir /var/spool/printer-name
然而, 如果您有很多网络打印机, 您可能想要把这些打印池目录放在一个单独的 您专门为使用 LPD 打印而准备的目录里。 我们 将用我们的两台打印机作为例子 rattan 和 bamboo:
# mkdir /var/spool/lpd # mkdir /var/spool/lpd/rattan # mkdir /var/spool/lpd/bamboo
Note: 如果您在关心用户任务的保密 性, 您可能想保护相应的打印池目录, 使它们 不能被公开访问。 打印池 目录应该被daemon用户拥有, 用户daemon和daemon组拥有读写和 搜索的权限, 并且其他用户没有。 我们将用我们的两台打印机作为例子:
# chown daemon:daemon /var/spool/lpd/rattan # chown daemon:daemon /var/spool/lpd/bamboo # chmod 770 /var/spool/lpd/rattan # chmod 770 /var/spool/lpd/bamboo
最后, 您需要通过/etc/printcap 文件告诉 LPD 这些 目录。 您可以用 sd 标记来指定 打印池目录的 路径:
#
# /etc/printcap for host rose - added spooling directories
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
:sh:sd=/var/spool/lpd/rattan:
bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
:sh:sd=/var/spool/lpd/bamboo:
注意打印机的名字要从 第1列开始, 其他记录每行都要 用TAB键缩进一次, 写不开需要换行在最后加上反 斜杠。
如果您没用 sd 标记指定打印池目录, 打印池系统会将 /var/spool/lpd 目录作为默认目录。
在 为端口在 /dev 目录下增加设备节点 章节中, 我们确定了使用 /dev 目录中的哪个节点来让 FreeBSD 与打印机 通讯。 现在, 我们来告诉 LPD 这个 信息。 当打印池系统有任务需要打印, 它 将为过滤程序(负责传送数据到打印机)打开 指定的设备。
用 lp 标记在 /etc/printcap 里列出 /dev 下的设备节点 。
在我们的例子中, 假设打印机 rattan 在第一个并口上, 打印机 bamboo 在第六个串口上; 下面是 要对 /etc/printcap 文件里增加的内容 :
#
# /etc/printcap for host rose - identified what devices to use
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
:sh:sd=/var/spool/lpd/rattan:\
:lp=/dev/lpt0:
bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
:sh:sd=/var/spool/lpd/bamboo:\
:lp=/dev/ttyd5:
如果您没在您的 /etc/printcap 文件中 用 lp 标记指定设备节点, LPD 将默认使用 /dev/lp 。 /dev/lp 目前在 FreeBSD 中不存在。
如果您正在安装的打印机是连接在 并口上的, 请跳到 安装文本 过滤器 这章。 如果不是的话, 还是最好按下面介绍的 步骤做。
对于连在串口上的打印机, LPD 可以为发送数据到打印机的过滤程序设置好波特率, 校验, 和其他串口通讯参数 。 这是有利的, 因为:
它可以让您只需简单的修改 /etc/printcap 就能尝试不同的通讯 参数; 您并不需要去重新编译过滤器 程序。
它使得打印池系统可以在 多台有不同串口通讯设置的打印机上使用 相同的过滤器程序。
下面这个 /etc/printcap 中 用 lp 标记来控制列出设备的 串口通讯参数 :
设置设备的通讯速度为 bps-rate, 这里 bps-rate 可以为 50, 75, 110, 134, 150, 200, 300, 600, 1200, 1800, 2400, 4800, 9600, 19200, 38400, 57600, or 115200 比特每秒。
设置已打开的中端设备的选项 。 stty(1) 将详细 讲述可用的选项。
当 LPD 打开 用 lp 指定的设备时, 它会 将设备的特性设置成在 ms# 标记后指定的那样。 特别是 parenb, parodd, cs5, cs6, cs7, cs8, cstopb, crtscts, 和 ixon 这些模式, 它们在 stty(1) 手册中有详细说明。
我们举个例子来添加我们连在第6个串口上的 打印机。 我们将设波特为38400。 至于模式, 我们将用 -parenb 设置成不校验, 用 cs8 设置成8位字符, 用 clocal 设置成不要调制解调器控制, 用 crtscts 设置成硬件流量控制:
bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
:sh:sd=/var/spool/lpd/bamboo:\
:lp=/dev/ttyd5:ms#-parenb cs8 clocal crtscts:
我们现在准备告诉 LPD 使用什么文本过滤器 给打印机发送任务。 文本过滤器, 也叫 输入过滤器, 是一个 在 LPD 有一个任务要发给 打印机时运行的程序。 当 LPD 为打印机运行文本过滤器时, 它设置过滤器的 标准输入为要发给打印机的任务, 而标准输出为 用 lp 标记指定的打印机 。 过滤器先从标准输入读取 任务, 为打印机进行一些转换 , 并将结果写到标准输出, 这些结果 将被打印。 想得到更多关于文本过滤器的信息, 见 过滤器 这节。
对于简单的打印机设置, 文本过滤器可以仅仅是一段 执行 /bin/cat 的 shell 脚本来 发送任务到打印机。 FreeBSD 还提供了一个叫做 lpf 的过滤器, 它可以处理退格和下划线来 使那些可能不能很好处理这类字符流的打印机正常工作。 而且, 当然, 您可以用任何其他的 您想用的过滤程序。 lpf 过滤器在 lpf: 一个文本 过滤器 这节将有详细描述。
首先, 我们来写一段叫做 /usr/local/libexec/if-simple 的简单 shell 脚本作为文本过滤器。 用您熟悉的文本编辑器将下面的内容放进 这个文件:
#!/bin/sh # # if-simple - Simple text input filter for lpd # Installed in /usr/local/libexec/if-simple # # Simply copies stdin to stdout. Ignores all filter arguments. /bin/cat && exit 0 exit 2
使这个文件可以被执行:
# chmod 555 /usr/local/libexec/if-simple
然后用 if 标记在 /etc/printcap 里告诉 LPD 使用这个脚本。 我们将仍然为 一直作为例子的这两台打印机在 /etc/printcap 里增加这个标记:
#
# /etc/printcap for host rose - added text filter
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
:sh:sd=/var/spool/lpd/rattan:\ :lp=/dev/lpt0:\
:if=/usr/local/libexec/if-simple:
bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
:sh:sd=/var/spool/lpd/bamboo:\
:lp=/dev/ttyd5:ms#-parenb cs8 clocal crtscts:\
:if=/usr/local/libexec/if-simple:
Note: if-simple 脚本的副本可以在 /usr/share/examples/printing 目录中找到。
lpd(8) 在 /etc/rc 中被运行, 它是否被运行由 lpd_enable 这个变量控制。 这个 变量默认是 NO。 如果您还没有修改 , 那么增加这行:
lpd_enable="YES"
到 /etc/rc.conf 文件当中, 然后既可以重启您的 机器, 也可以直接运行 lpd(8)。
# lpd
现在已经基本完成了 LPD 的基本设置。 但不幸的是, 还不是庆祝的时候, 因为我们还需要测试设置并且修正所有的 问题。 要测试设置, 尝试打印一些东西。 要 用 LPD 系统打印, 您可以 使用 lpr(1) 命令, 它可以提交一个任务来打印。
您可以联合使用 lpr(1) 和 the lptest(1) 程序, 在 检查打印机 通讯 这节介绍怎样生成一些测试文本。
要测试简单 LPD 设置:
输入:
# lptest 20 5 | lpr -Pprinter-name
其中 printer-name 是 在 /etc/printcap 中指定的打印机的一个名字 ( 或者一个别名) 。 要测试默认 打印机, 输入 lpr(1) 不带任何 -P 选项。 同样, 如果您正在测试一台使用 PostScript 的打印机, 发送一个 PostScript 程序到打印机而不是 使用 lptest(1)。 您可以把程序放在一个 文件里, 然后输入: lpr file。
对于一台 PostScript 打印机, 您应该得到那段程序的 结果。 而如果您使用的 lptest(1), 则您得到的 结果应该看起来像下面这样:
!"#$%&'()*+,-./01234 "#$%&'()*+,-./012345 #$%&'()*+,-./0123456 $%&'()*+,-./01234567 %&'()*+,-./012345678
要更进一步的测试打印机, 尝试下载一些大的 程序 (为基于特定语言的打印机 ) 或者运行 lptest(1) 并使用不同的参数。 比如, lptest 80 60 将生成 60 行 每行 80 个字符。
如果打印机不能工作, 参考 故障排除 这节。
这部分将描述用来打印特别格式文件, 页眉, 通过网络打印, 以及对打印机使用限制和 记帐。
尽管 LPD 处理网络协议, 任务排队, 访问控制, 和打印的其他方面, 但大部分 实际 工作还是由 过滤器。 过滤器是 一种与打印机通讯并且处理设备依赖和特殊需要的 程序。 在简单打印机设置这节里, 我们安装了一个纯文本过滤器 -- 一个应该可以用在大多数 打印机上的极简单的过滤器 ( 安装 文本过滤器)。
然而, 为了进行格式转换, 打印 记帐, 适应特殊的打印机, 等等, 您需要明白过滤器是怎样工作的。 在根本上过滤器负责处理这些方面。 但坏消息是大多数时候 您 必须自己提供过滤器。 好消息 是很多过滤器通常都已经有了; 当没有的时候, 它们 通常也是很好写的。
FreeBSD 也提供了一个过滤器, /usr/libexec/lpr/lpf, 可以让大多数可以打印纯文本的 打印机工作。 ( 它处理文件里的退格和 跳格, 并且进行记帐, 但这基本就是它所有能做的了。 ) 这里还有几个过滤器和过滤器组件在 FreeBSD Ports Collection 里。
这是在这节里您将找到的内容:
过滤器是怎样 工作的, 设法给出一个过滤器在打印过程中的 大致角色。 您应该阅读这节来理解 在 LPD 使用过滤器时 “ 表面上看不到 ” 的事情。 这个知识 能够帮您预期 并调试您在为每个打印机安装越来越多的过滤器 时可能遇到的问题。
LPD 默认每个打印机都能 打印 纯文本。 这就出现一个问题在 PostScript (或者基于其他 语言的打印机) 以及所有无法直接打印纯文本的打印机。 让 PostScript 打印机适应纯文本任务 这节将告诉您 要解决这个问题应该做些什么。 如果您使用一台 PostScript 打印机, 那么您应该阅读这个小节。
PostScript 对于许多程序来说都是一个非常受欢迎的输出格式。 一些人甚至直接写 PostScript 代码。 但不幸的是, PostScript 打印机非常昂贵。 模拟 PostScript 在 非 PostScript 打印机上 这节将告诉您怎样进一步修改 打印机的文本过滤器, 使得一台 非 PostScript 打印机接受 并打印 PostScript 数据。 如果 您没有 PostScript 打印机, 那么您应该阅读这个小节。
转换 过滤器 这节讲述了一个自动把 指定格式文件, 比如图像或排版数据, 转换成您打印机可以理解的格式。 在阅读了这节 之后, 您应该可以设置好您的打印机使得用户可以 输入 lpr -t 来打印带有不同宏定义库的文本, 或者用 lpr -d 来打印 TeX DVI 数据, 用 lpr -v 来打印光栅图像数据, 等等。 我推荐您 阅读这节。
输出 过滤器 这节讲述了这个不是经常使用的 LPD: 的功能-输出过滤器。 除非您要打印页眉 (见 页眉 这节 ), 您或许可以完全跳过这节。
lpf: 一个文本 过滤器 描述了 lpf, 一个 FreeBSD 自带的相当 完整而又简单的文本过滤器, 可以使用在行式打印机 (和那些担当行式打印机功能的激光 打印机 ) 上。 如果 您需要一个快速的方法来让打印机统计打印纯文本的工作量 , 或者您有一台遇到退格字符就冒烟的打印机 , 您应该考虑 lpf 。
Note: 您可以在 /usr/share/examples/printing 目录中找到下面将提到的那些脚本的副本。
前面说过, 过滤器是一个被 LPD 启动, 用来处理与打印机通讯过程中设备依赖的部分 的可执行程序。
当 LPD 想要打印 一个任务中的文件, 它启动一个过滤器 程序。 它把要打印的文件设置成过滤器的标准输入, 标准输出设置成打印机, 并且把错误信息定向到 错误日志文件 (在 lf 标识里指定, 默认在 /etc/printcap, 或者 /dev/console 文件里 )。
过滤器被 LPD 启动, 并且 过滤器的参数依赖于 /etc/printcap 文件中所列出的和 用户为任务用 lpr(1) 命令所指定的。 例如, 如果用户输入 lpr -t, LPD 会 启动 troff 过滤器, 即在 目标打印机的 tf 标签里所列出的过滤器。 如果用户想要打印纯文本, 它将会启动 if ***过滤器 ( 这是通常的情况: 参见 输出过滤器 来得到 细节 ) 。
在 /etc/printcap 文件中, 您可以指定三种过滤器:
The 文本过滤器 , 在 LPD 文档中也叫做 输入过滤器 , 处理 常规的文本打印。 可以把它想象成默认过滤器。 LPD 默认每台打印机都可以打印纯文本, 而文本过滤器的任务就是来搞定退格、跳格, 或者其他在某种打印机上容易错误的特殊字符。 如果您 所在的环境对打印机的使用情况进行 记帐, 那么文本过滤器必须也对打印进行统计, 统计通常是通过对打印的行数进行计数然后与打印机所支持的每页的行数做比较后 得出的。 文本过滤器 的启动命令为:
filter-name [-c] -wwidth -llength -iindent -n login -h host acct-file
where当任务用 lpr -l 这个命令提交时出现
这里取您在 /etc/printcap 文件中指定的 pw (页 宽) 标签的值, 默认为 132。
这里取您的 pl (页 长) 标签的值, 默认为 66
这里是来自 lpr -i 命令的总缩进量, 默认为 0
这里是正在打印文件的 用户名
这里是提交打印任务的 主机名
这里是来自 af 变量中指定的用于记帐的文件名。
转换过滤器 将一个特定 的文件格式转换成另一种打印机能够理解并且将内容打印出来的格式. 例如 , ditroff 格式的排版数据就是无法直接打印的, 但您可以安装一个转换过滤器来将 ditroff 文件转换成 一种打印机可以理解并打印的 形式. 参考 转换 过滤器 这一节来了解更多细节. 如果您需要对打印进行 记帐, 那么转换过滤器也必须完成记帐工作. 转换过虑器的启动命令为:
filter-name -xpixel-width -ypixel-height -n login -h host acct-file
pixel-width 的值来自 px 标签 (默认为 0), pixel-height 的值来自 py 标签 (默认为 0)。输出过滤器 仅在没有文本过滤器 时, 或者报头页被打开时使用. 就我的 经验而言, 输出过滤器是很少用到的. 在 输出过滤器 这节中会 介绍它们. 启动输出过滤器的命令行只有两个参数:
filter-name -wwidth -llength
-w 和 -l 参数的意义和文本过滤器中的一样。过滤器也应该在 退出 时给出下面的 几种退出状态:
过滤器已经成功的打印了文件.
过滤器打印失败了, 但想要 LPD 来 试着再打印一次. 如果过滤器返回了这个状态, LPD 将重新启动一个过滤器。
过滤器打印失败并且不想要 LPD 重试. LPD 将放弃这个文件。
文本过滤器随 FreeBSD 一起发布, 文件名为 /usr/libexec/lpr/lpf, 它利用 页宽和页长参数来决定何时发送送纸指令 和为打印记帐的方法. 它使用登陆名, 主机名, 和记帐文件参数来生成记帐记录。
如果您想购买过滤器, 要注意它是否是 LPD-兼容的. 如果是, 则它们必须支持上面提到的那些参数. 如果您打算编写普通的过滤器程序, 则同样需要让它们 支持上面那些参数和退出状态码。
如果您是您的计算机和 PostScript (或者 其他语言的) 打印机的唯一用户, 而且您不打算发送纯文本到打印机且不打算使用程序里那些会发送纯文本到打印机的功能的话, 那么您完全不需要再关心这节的内容。
但是, 如果 PostScript 和纯文本的任务都需要发送到打印机, 那么就需要对打印机进行设置了。 要完成工作, 我们需要一个文本过滤器来检测到达的任务是纯文本的还是 PostScript 格式的。 所有 PostScript 的任务必须以 %! ( 对于其他打印机语言, 参见打印机的文档) 开头。 如果任务的头两个字符是这两个, 就代表这是 PostScript 格式的, 并且可以直接略过任务剩余的部分。 如果任务开头的两个字符不是这两个, 那么过滤器将把文本转换成 PostScript 并打印结果。
我们怎样去做?
如果你有一台串行打印机, 一个好办法就是安装 lprps. lprps 是一个可以与打印机进行双向通信 PostScript 打印机过滤器。 它用打印机传来的详细信息来更新打印机的状态文件, 所以用户和管理员可以准确的看到打印机处在什么样的状态 (比如 “缺墨” 或者 “卡纸”)。 但更重要的是, 它包含了一个叫做 psif 的程序, 它可以检测接收到的文件是否是纯文本的, 并且将使用 textps 命令 ( 也是由 lprps 提供的程序) 转换文本到 PostScript。 然后它会用 lprps 将任务发送到打印机。
lprps 可以在 FreeBSD Ports Collection (详见 The Ports Collection) 中找到。 您当然可以自己获取, 构建并安装它。 在安装之后 lprps, 只需指定 psif 这个程序的路径, 这也是包含在 lprps 中的一个程序。 如果您已经用 ports 安装好了 lprps, 将下面的内容添加到 /etc/printcap 文件中 PostScript 打印机的记录部分中:
:if=/usr/local/libexec/psif:
同时还需要指定 rw 标签来告诉 LPD 使用读-写模式打开打印机。
如果您有一台并行的 PostScript 打印机 (因此不能与打印机进行 lprps 需要的双向通信), 可以使用下面这段 shell 脚本来充当文本过滤器:
#!/bin/sh
#
# psif - Print PostScript or plain text on a PostScript printer
# Script version; NOT the version that comes with lprps
# Installed in /usr/local/libexec/psif
#
IFS="" read -r first_line
first_two_chars=`expr "$first_line" : '\(..\)'`
if [ "$first_two_chars" = "%!" ]; then
#
# PostScript job, print it.
#
echo "$first_line" && cat && printf "\004" && exit 0
exit 2
else
#
# Plain text, convert it, then print it.
#
( echo "$first_line"; cat ) | /usr/local/bin/textps && printf "\004" && exit 0
exit 2
fi
在上面的脚本中, textps 命令是一个独立安装的程序用来将纯文本转换成 PostScript。 您可以使用任何您喜欢的文本到 PostScript 转换程序。 FreeBSD Ports Collection (详见 Ports Collection) 中包含了一个功能非常完整的文本到 PostScript 的转换程序, 它叫做 a2ps。
PostScript 高质量排版和打印的 de facto 标准。 而 PostScript 也是一个 昂贵 的标准。 幸好, Aladdin 开发了一个和 PostScript 类似的叫做 Ghostscript 的程序可以用在 FreeBSD 上。 Ghostscript 可以读取大多数 PostScript 的文件并处理其中的页面交给多种设备, 包括许多品牌的非 PostScript 打印机。 通过安装 Ghostscript 并使用一个特殊的文本过滤器, 则可以使一台非 PostScript 打印机用起来就像真的 PostScript 打印机一样。
Ghostscript 也包括在 FreeBSD Ports Collection 中, 如果您想要从这里安装。 您同样可以很容易地获取, 构建, 并安装它。
要模拟 PostScript, 文本过滤器要检测是否要打印一个 PostScript 文件。 如果不是, 那么过滤器将直接将文件发送到打印机; 否则, 它会用 Ghostscript 先将文件转换成打印机可以理解的格式。
这里有一个例子: 下面的脚本是一个针对 Hewlett Packard DeskJet 500 打印机的文本过滤器。 对于其他打印机, 替换 gs (Ghostscript) 命令中的 -sDEVICE 参数 就可以了。 (输入 gs -h 来获得当前安装的 Ghostscript 所支持的设备列表。)
#!/bin/sh
#
# ifhp - Print Ghostscript-simulated PostScript on a DeskJet 500
# Installed in /usr/local/libexec/ifhp
#
# Treat LF as CR+LF (to avoid the "staircase effect" on HP/PCL
# printers):
#
printf "\033&k2G" || exit 2
#
# Read first two characters of the file
#
IFS="" read -r first_line
first_two_chars=`expr "$first_line" : '\(..\)'`
if [ "$first_two_chars" = "%!" ]; then
#
# It is PostScript; use Ghostscript to scan-convert and print it.
#
/usr/local/bin/gs -dSAFER -dNOPAUSE -q -sDEVICE=djet500 \
-sOutputFile=- - && exit 0
else
#
# Plain text or HP/PCL, so just print it directly; print a form feed
# at the end to eject the last page.
#
echo "$first_line" && cat && printf "\033&l0H" &&
exit 0
fi
exit 2
最后, 需要告知 LPD 所使用的过滤器, 通过 if 标签完成:
:if=/usr/local/libexec/ifhp:
您可以输入 lpr plain.text 和 lpr whatever.ps, 它们都应该可以成功打印。
在完成了 打印机简单设置 这节中所描述的内容之后, 头一件事 恐怕就是为你喜爱的格式的文件安装转换过滤器了 (除了纯 ASCII 文本)。
转换过滤器使打印众多格式的文件变得很容易。 比如, 假设我们大量使用 TeX 排版系统, 并且有一台 PostScript 打印机。 每次从 TeX 生成一个 DVI 文件, 我们都不能直接打印它直到我们将 DVI 文件转换成 PostScript。 转换的命令应该是下面的样子:
% dvips seaweed-analysis.dvi % lpr seaweed-analysis.ps
通过安装 DVI 文件的转换过滤器, 我们可以跳过每次手动转换这一步, 而让 LPD 来完成这个步骤。 现在, 每次要打印 DVI 文件, 我们只需要一步就可以打印它:
% lpr -d seaweed-analysis.dvi
我们要 LPD 转换 DVI 文件是通过指定 -d 选项完成的。 格式和转换 选项 这一节列出了所有的转换选项。
对于每种想要打印机支持的转换, 首先要安装 转换过滤器 然后在 /etc/printcap 中指定它的路径。 在简单打印设置中, 转换过滤器类似于文本过滤器 (详见 安装文本过滤器 ) 不同的是它不是用来打印纯文本, 而是将一个文件转换成打印机能够理解的格式。
您应该安装您希望使用的转换过滤器。 如果要打印很多 DVI 数据, 就需要 DVI 转换过滤器; 如果有大量的 troff 数据, 就应该安装 troff 过滤器。
下面的表格总结了可以与 LPD配合 工作的过滤器, 以及它们在 /etc/printcap文件中的变量名, 还有如何在 lpr命令中调用它们:
| 文件类型 | 在/etc/printcap文件中的变量名 | 在lpr命令中调用使用的参数 |
|---|---|---|
| cifplot | cf | -c |
| DVI | df | -d |
| plot | gf | -g |
| ditroff | nf | -n |
| FORTRAN text | rf | -f |
| troff | tf | -f |
| raster | vf | -v |
| plain text | if | none, -p, or -l |
在例子中, lpr -d就是指 打印机需要在/etc/printcap文件中 df变量所指的过滤器。
不管别人怎么说, 像 FORTRAN 的文本 和 plot 这些格式已经基本不用了。 所以在您的机器上, 就可以安装其他的过滤器来替换这些参数原有的意义。 例如, 假设想要能直接打印 Printerleaf 文件 (由 Interleaf desktop publishing 程序生成), 而且不打算打印 plot 文件, 就可以安装一个 Printerleaf 转换过滤器并且用 gf 变量指定它。 然后就可以告诉您的用户使用 lpr -g 就可以 “打印 Printerleaf 文件。”
以为安装的转换过滤器不是 FreeBSD 基本系统的一部分, 所以它们可能是在 /usr/local 目录下。 通常目录 /usr/local/libexec 是保存它们的地方, 因为它们通常是通过 LPD 运行的; 普通用户没有并不需要直接运行它们。
要启用一个转换过滤器, 只需要在 /etc/printcap 文件中为目标打印机中合适的变量赋上过滤器所在的路径。
在接下来的例子当中, 我们将为 一台叫做 bamboo 的打印机添加一个转换过滤器。 下面是这个例子的 /etc/printcap 文件, 其中使用新变量 df 来为打印机 bamboo 设置转换过滤器.
#
# /etc/printcap for host rose - added df filter for bamboo
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
:sh:sd=/var/spool/lpd/rattan:\
:lp=/dev/lpt0:\
:if=/usr/local/libexec/if-simple:
bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
:sh:sd=/var/spool/lpd/bamboo:\
:lp=/dev/ttyd5:ms#-parenb cs8 clocal crtscts:rw:\
:if=/usr/local/libexec/psif:\
:df=/usr/local/libexec/psdf:
这里的 DVI 过滤器是一段 shell 脚本, 名字叫做 /usr/local/libexec/psdf。 下面是它的代码:
#!/bin/sh # # psdf - DVI to PostScript printer filter # Installed in /usr/local/libexec/psdf # # Invoked by lpd when user runs lpr -d # exec /usr/local/bin/dvips -f | /usr/local/libexec/lprps "$@"
这段脚本以过滤器模式运行 dvips (参数 -f ) 并从标准输入读取要打印的任务。 然后运行 PostScript 文本过滤器 lprps (详见 在 PostScript 打印机上打印纯文本任务 这一节), 并且带着 LPD 传给脚本的全部参数。 lprps 将利用这些参数来为打印进行记帐。
因为安装转换过滤器的步骤并不是固定的, 所以这里会多给出一些例子。 在以后的安装配置过程中可以以这些例子为参考。 甚至如果合适的话, 可以完全照搬过去。
这段例子中的脚本是一个 Hewlett Packard LaserJet III-Si 打印机的光栅格式数据 (实际上也就是 GIF 文件):
#!/bin/sh
#
# hpvf - Convert GIF files into HP/PCL, then print
# Installed in /usr/local/libexec/hpvf
PATH=/usr/X11R6/bin:$PATH; export PATH
giftopnm | ppmtopgm | pgmtopbm | pbmtolj -resolution 300 \
&& exit 0 \
|| exit 2
它的工作原理就是将 GIF 文件转换成 portable anymap, 再转换成 portable graymap, 然后再转换成 portable bitmap, 最后再转换成 LaserJet/PCL- 兼容的数据。
下面是为打印机配置上上述过滤器的 /etc/printcap 文件:
#
# /etc/printcap for host orchid
#
teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\
:lp=/dev/lpt0:sh:sd=/var/spool/lpd/teak:mx#0:\
:if=/usr/local/libexec/hpif:\
:vf=/usr/local/libexec/hpvf:
下面的脚本是一个在名叫 bamboo 的这台 PostScript 打印机上打印用 groff 排版软件生成的 troff 数据的打印过滤器:
#!/bin/sh # # pstf - Convert groff's troff data into PS, then print. # Installed in /usr/local/libexec/pstf # exec grops | /usr/local/libexec/lprps "$@"
上面这段脚本还是用 lprps 来与打印机进行通讯。 如果打印机是接在并口上的, 那么就应该使用下面的这段脚本:
#!/bin/sh # # pstf - Convert groff's troff data into PS, then print. # Installed in /usr/local/libexec/pstf # exec grops
这里是我们要启用过滤器需要在 /etc/printcap 里增加的内容:
:tf=/usr/local/libexec/pstf:
下面的例子也许会让许多 FORTRAN 老手羞愧。 它是一个 FORTRAN- 文本 的过滤器, 能在任意一台 可以打印纯文本的打印机上使用。 我们将为打印机 teak 安装这个过滤器:
#!/bin/sh # # hprf - FORTRAN text filter for LaserJet 3si: # Installed in /usr/local/libexec/hprf # printf "\033&k2G" && fpr && printf "\033&l0H" && exit 0 exit 2
然后我们要在 /etc/printcap 中为打印机能够 teak 启用这个过滤器添加下面的内容:
:rf=/usr/local/libexec/hprf:
最后, 再给出一个有些复杂的例子。 我们将给以前介绍过的 teak 这台激光打印机添加一个 DVI 过滤器。 首先, 最容易的部分: 更新 /etc/printcap 加入 DVI 过滤器的路径:
:df=/usr/local/libexec/hpdf:
现在, 该困难的部分了: 编写过滤器。 为了实现过滤器, 我们需要一个 DVI-到-LaserJet/PCL 转换程序。 FreeBSD Ports Collection (详见 Ports Collection 这一节) 中有一个包: dvi2xx 是这个包的名称。 安装这个包就会得到我们需要的程序, dvilj2p , 它可以将 DVI 数据转换成 LaserJet IIp, LaserJet III, 和 LaserJet 2000 兼容的数据。
dvilj2p 使得过滤器 hpdf 变得十分复杂, 因为 dvilj2p 不能读取标准输入。 它需要从文件中读取数据。 更糟糕的是, 这个文件的名字必须以 .dvi 结尾。 所以使用 /dev/fd/0 作为标准输入是有问题的。 我们可以通过连接 (符号连接) 来解决这个问题。 连接一个临时的文件名 (一个以 .dvi 结尾的文件名) 到 /dev/fd/0, 从而强制 dvilj2p 从标准输入读取。
现在迎面而来的是另外一个问题, 我们不能使用 /tmp 存放临时连接。 符号连接是被用户和组 bin 拥有的。 而过滤器则是以 daemon 用户运行的。 并且 /tmp 目录设置了 sticky 位。 所以过滤器只能建立符号连接, 但它不能在用完之后清除掉这些连接。 因为它们属于不同的用户。
所以过滤器将在当前工作目录下建立符号连接, 即打印池目录 (用变量 sd 在 /etc/printcap 中指定)。 这是一个非常好的让过滤器完成它工作的地方, 特别还是因为 (有时) 这个目录比起 /tmp 来有更多的可用磁盘空间。
最后, 给出过滤器的代码:
#!/bin/sh
#
# hpdf - Print DVI data on HP/PCL printer
# Installed in /usr/local/libexec/hpdf
PATH=/usr/local/bin:$PATH; export PATH
#
# Define a function to clean up our temporary files. These exist
# in the current directory, which will be the spooling directory
# for the printer.
#
cleanup() {
rm -f hpdf$$.dvi
}
#
# Define a function to handle fatal errors: print the given message
# and exit 2. Exiting with 2 tells LPD to do not try to reprint the
# job.
#
fatal() {
echo "$@" 1>&2
cleanup
exit 2
}
#
# If user removes the job, LPD will send SIGINT, so trap SIGINT
# (and a few other signals) to clean up after ourselves.
#
trap cleanup 1 2 15
#
# Make sure we are not colliding with any existing files.
#
cleanup
#
# Link the DVI input file to standard input (the file to print).
#
ln -s /dev/fd/0 hpdf$$.dvi || fatal "Cannot symlink /dev/fd/0"
#
# Make LF = CR+LF
#
printf "\033&k2G" || fatal "Cannot initialize printer"
#
# Convert and print. Return value from dvilj2p does not seem to be
# reliable, so we ignore it.
#
dvilj2p -M1 -q -e- dfhp$$.dvi
#
# Clean up and exit
#
cleanup
exit 0
以上这些转换过滤器基本上建成了您的打印环境, 但也有不足就是必须由用户来指定 (在 lpr(1) 命令行中) 要使用哪一个过滤器。 如果您的用户不是对计算机很在行, 那么选用过滤器将是一件麻烦的事情。 更糟的是, 当过滤器设定的不正确时, 过滤器被用在了不它对应类型的文件上, 打印机也许会喷出上百张纸。
比只安装转换过滤器更好的方法, 就是让文本过滤器 (因为它是默认的过滤器) 来检测要打印文件的类型, 然后自动运行正确的转换过滤器。 像 file 这样的工具可以给我们一定的帮助。 当然, 要区分开 有些 文件的类型还是有困难的 -- 而且, 当然, 您可以仅为它们提供转换过滤器。
FreeBSD Ports Collection 包含了一个可以自动进行转换的文本过滤器, 名字叫做 apsfilter 。 它可以检测出纯文本, PostScript, 和 DVI 格式的文件, 并且运行相应的转换过滤器, 然后打印。
LPD 打印池系统还支持一种我们还没有讨论过的过滤器: 输出过滤器。 输出过滤器只是用来打印纯文本的, 类似于文本过滤器, 但简化了许多地方。 如果您正在使用输出过滤器而不是文本过滤器, 那么:
LPD 为整个任务启动一个输出过滤器, 而不是为任务中的每个文件都启动一次。
LPD 不会提供任务中文件开始和结束的信息给输出过滤器。
LPD 不会提供用户名或者主机名给过滤器, 所以它是无法做打印记帐的。 事实上它只有两个参数:
过滤器-名字 -w宽度 -l长度
宽度 来自于 pw 变量, 而 length 来自于 pl 变量, 这些值都是实际问题中给打印机设置的。
不要让输出过滤器的简化所耽误。 如果想要输出过滤器完成让任务中的每个文件都重新开始一页打印是 不可能 的。 请使用文本过滤器 (也叫输入过滤器); 详见 安装文本过滤器 。 此外, 实际上, 输出过滤器 更复杂 , 它要检查发给它的字节流中是否有特殊的标志字符, 并且给自己发送信号来代替 LPD 的。
可是, 如果打算要报头页或者需要发送控制字符或者其他的初始化字符串来完成打印报头页, 那么输出过滤器则是 必需的 。 (但是它也是 无用的 如果打算对打印的用户计费, 因为 LPD 不会给输出过滤器任何用户或者主机的信息。)
在一台单个的打印机上, LPD 同时允许输出过滤器、 文本过滤器和其他的过滤器。 在某些情况下, LPD 将仅会启动输出过滤器来打印报头页 (详见 报头页)。 然后 LPD 会要求输出过滤器 自己停止运行 , 它发送给过滤器两个字节: ASCII 031跟着一个 ASCII 001。 当输出过滤器看见这两个字节 (031, 001), 它应该通过发送 SIGSTOP 信号来停止自己的运行。 当 LPD 已经运行好了其他的过滤器, 它会通过给输出过滤器发送 SIGCONT 信号来让输出过滤器重新运行。
如果仅有一个输出过滤器而 没有 文本过滤器, 并且 LPD 正在处理一个纯文本任务, LPD 会使用输出过滤器来完成这个任务。 像以前运行一样, 输出过滤器会按顺序打印任务中的文件, 而不会插入送纸或其他进纸的命令, 但这也许并 不是 您想要的结果。 在大多数情况下, 您还是需要一个文本过滤器。
lpf 这个我们前面介绍过的文本过滤器程序, 也可以用来做输出过滤器。 如果需要使用快速且混乱的输出过滤器, 但又不想写字节检测和信号发送代码, 那么试试 lpf。 lpf 也可以包含在一个 shell 脚本中来处理任何打印机可能需要的初始化代码。
/usr/libexec/lpr/lpf 这个程序包含在 FreeBSD 的二进制程序中, 它是一个文本过滤器 (输入过滤器)。 它可以缩排输出 (用 lpr -i 命令提交的任务), 可以打印控制字符禁止断页 用 lpr -l 提交的任务), 可以调整任务中退格和制表符打印的位置, 还可以对打印进行记帐。 它同样可以像输出过滤器一样工作。
lpf 适用于很多打印环境。 尽管它本身没有向打印机发送初始化代码的功能, 但写一个 shell 脚本来完成所需的初始化并执行 lpf 是很容易的。
为了让 lpf 可以正确的进行打印记帐, 那么需要 /etc/printcap 中的 pw 和 pl 变量都填入正确的值。 它用这些值来测定一页能打印多少文本, 并计算出任务有多少页。 想得到更多关于打印记帐的信息, 请参见 对打印机使用进行记帐。
如果您有 很多 用户, 他们正在使用各式各样的打印机, 那么您允许要考虑一下把 报头页 当作一个必要的麻烦了。
报头页, 也叫 banner 或者 burst 页, 可以用来辨别打印出的文件是谁打印的。 它们通常用大号的粗体字母打印出来, 也可能用装饰线围绕四周, 所以在一堆打印出的文件中, 突出的显示了这个文件属于哪个用户的哪个任务。 这可以让用户快速的找到他们的任务。 而报头页一个明显的缺点就是, 在每个任务中都要有一张或者几张纸作为报头页印出来, 可是它们的有用的地方只发挥几分钟的作用, 最后它们会被放进回收站或者扔进垃圾堆。 (注意报头页只是一个任务一个, 而不是任务中的每个文件都有一个, 所以可能对纸张还不算很浪费。)
LPD 系统可以自动为您的打印提供报头页, 如果 您的打印机可以直接打印纯文本。 如果您的打印机是一台 PostScript 打印机, 您将需要一个外部的程序来生成报头页; 详见 在 PostScript 打印机上打印报头页。
在 简单打印设置 这节, 我们通过在 /etc/printcap 文件中指定 sh (“禁止报头页”) 来把报头页功能关掉了。 要重新为打印机开启报头页功能, 只需要删除掉 sh。
听起来很容易, 不是么?
是的。 您 可能 不得不让输出过滤器来给打印机发送初始化字符串。 下面是一个用在 Hewlett Packard PCL-兼容打印机上的输出过滤器的例子:
#!/bin/sh # # hpof - Output filter for Hewlett Packard PCL-compatible printers # Installed in /usr/local/libexec/hpof printf "\033&k2G" || exit 2 exec /usr/libexec/lpr/lpf
用 of 变量指定输出过滤器的路径。 参见 输出过滤器 这一节来得到更多信息。
下面是一个为我们以前介绍的叫做 teak 的打印机配置的 /etc/printcap 文件; 在配置当中我们开启了报头页并且加入了上述的打印过滤器:
#
# /etc/printcap for host orchid
#
teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\
:lp=/dev/lpt0:sd=/var/spool/lpd/teak:mx#0:\
:if=/usr/local/libexec/hpif:\
:vf=/usr/local/libexec/hpvf:\
:of=/usr/local/libexec/hpof:
现在, 当用户再发任务给打印机 teak 的时候, 每个任务都会有一个报头页。 如果用户想要花时间来寻找他们自己打印的文件, 那么他们可以通过 lpr -h 命令来提交任务; 参考 报头页选项 这一节来得到更多关于 lpr(1) 的选项。
Note: LPD 在报头页之后发出一个换纸字符。 如果您的打印机使用一个不同的字符或者字符串当作退纸指令, 在 /etc/printcap 中用 ff 变量指定即可。
通过启用报头页, LPD 将生成出一个 长报头, 一整页的大字母, 标着用户, 主机和任务名。 下面是一个例子 (kelly 打印了用主机 rose 打印了一个叫做 outline 的任务):
k ll ll
k l l
k l l
k k eeee l l y y
k k e e l l y y
k k eeeeee l l y y
kk k e l l y y
k k e e l l y yy
k k eeee lll lll yyy y
y
y y
yyyy
ll
t l i
t l
oooo u u ttttt l ii n nnn eeee
o o u u t l i nn n e e
o o u u t l i n n eeeeee
o o u u t l i n n e
o o u uu t t l i n n e e
oooo uuu u tt lll iii n n eeee
r rrr oooo ssss eeee
rr r o o s s e e
r o o ss eeeeee
r o o ss e
r o o s s e e
r oooo ssss eeee
Job: outline
Date: Sun Sep 17 11:04:58 1995
LPD 会附加一个换页符在这段文本之后, 所以任务会在新的一页上开始 (除非设置了 sf (禁止换纸) 在 /etc/printcap 文件里目标打印机的记录中)。
如果您喜欢, LPD 可以生成一个 短报头; 指定 sb (短 banner) 在文件 /etc/printcap 中。 报头页就会看起来像下面这样:
rose:kelly Job: outline Date: Sun Sep 17 11:07:51 1995
同样是默认的, LPD 也是先打印报头页, 然后才是任务。 要想反过来, 在 /etc/printcap 中指定 hl (最后报头) 。
使用 LPD 内置的报头页会在进行打印记帐的时候产生一种特殊情况: 报头页肯定是 免费 的。
为什么?
因为输出过滤器是仅有的一个在打印报头页时能进行记帐的外部程序, 但却没有提供给它任何 用户或者主机 的信息或者记帐文件, 所以它无法知道谁应该为打印机的使用付费。 如果仅仅是 “增加一页” 给文本过滤器或者其他过滤器 (它们有用户和主机的信息) 是不够的, 因为 用户可以用 lpr -h 命令跳过报头页。 他还是需要为自己并没有打印的报头页付钱。 基本上, lpr -h 是明知用户的首选, 但也不能强制让别人使用它。
让每个过滤器生成自己的报头页 (因此可以为它们计费) 是 仍然不够的。 如果用户想要用 lpr -h 命令禁止报头页, 它们将仍然印出报头页并且为它们付费。 因为 LPD 不会把 -h 这个参数传给任何过滤器。
这样, 您该怎么办呢?
您可以:
认可 LPD 的这个问题, 并且免费提供报头页打印。
安装一个替代 LPD 的软件, 比如 LPRng。 参考 替换标准的打印池软件 来得到更多关于可以替代 LPD 的软件的信息。
写一个 聪明的 输出过滤器。 通常, 输出过滤器不应该去完成除了初始化打印机或者进行一些简单字符转换以外的任何事情。 它适合完成报头页和纯文本任务 (当没有文本 (输入) 过滤器时)。 但是, 如果有文本过滤器为纯文本任务服务, 那么 LPD 将仅为打印报头页启动输出过滤器。 而且, 这个输出过滤器可以理解报头页里 LPD 生成的信息, 然后决定哪位用户和主机应该为报头页付费。 这种方法仅有的问题是输出过滤器仍然不知道应该使用什么记帐文件 (af 变量的内容并没有被传递过来), 但是如果您有一个众所周知的记帐文件, 就可以直接把文件名写进输出过滤器。 为了简化解释报头的步骤, 我们定义 sh (短报头) 变量在 /etc/printcap 文件中。 但这些还是太麻烦了, 而且用户也更喜欢让他们免费打印报头页的慷慨的系统管理员。
像上面描述的那样,LPD 可以生成一个纯文本的报头页来适应多种打印机。 当然, PostScript 不能直接打印纯文本, 所以 LPD 没什么用--或者说大多时候是这样。
一个显而易见的方法来得到报头页就是让每个转换过滤器和文本过滤器都来生成报头页。 这些过滤器应该用用户名和主机的参数来生成一个相对应的报头页。 这种方法的缺点就是用户总是打印出报头页, 无论他们是否用 lpr -h 命令来提交的任务。
让我们来深入深入的研究一下这个方法。 下面的脚本输入三个参数 (用户登陆名, 主机名, 和任务名) 然后生成一个简单的 PostScript 报头页:
#!/bin/sh
#
# make-ps-header - make a PostScript header page on stdout
# Installed in /usr/local/libexec/make-ps-header
#
#
# These are PostScript units (72 to the inch). Modify for A4 or
# whatever size paper you are using:
#
page_width=612
page_height=792
border=72
#
# Check arguments
#
if [ $# -ne 3 ]; then
echo "Usage: `basename $0` <user> <host> <job>" 1>&2
exit 1
fi
#
# Save these, mostly for readability in the PostScript, below.
#
user=$1
host=$2
job=$3
date=`date`
#
# Send the PostScript code to stdout.
#
exec cat <<EOF
%!PS
%
% Make sure we do not interfere with user's job that will follow
%
save
%
% Make a thick, unpleasant border around the edge of the paper.
%
$border $border moveto
$page_width $border 2 mul sub 0 rlineto
0 $page_height $border 2 mul sub rlineto
currentscreen 3 -1 roll pop 100 3 1 roll setscreen
$border 2 mul $page_width sub 0 rlineto closepath
0.8 setgray 10 setlinewidth stroke 0 setgray
%
% Display user's login name, nice and large and prominent
%
/Helvetica-Bold findfont 64 scalefont setfont
$page_width ($user) stringwidth pop sub 2 div $page_height 200 sub moveto
($user) show
%
% Now show the boring particulars
%
/Helvetica findfont 14 scalefont setfont
/y 200 def
[ (Job:) (Host:) (Date:) ] {
200 y moveto show /y y 18 sub def }
forall
/Helvetica-Bold findfont 14 scalefont setfont
/y 200 def
[ ($job) ($host) ($date) ] {
270 y moveto show /y y 18 sub def
} forall
%
% That is it
%
restore
showpage
EOF
现在, 每个转换过滤器和文本过滤器都能调用这段脚本来生成报头页, 然后打印用户的任务。 下面是我们早些时候在这个文档中提到的 DVI 转换过滤器, 被修改之后来生成一个报头页:
#!/bin/sh
#
# psdf - DVI to PostScript printer filter
# Installed in /usr/local/libexec/psdf
#
# Invoked by lpd when user runs lpr -d
#
orig_args="$@"
fail() {
echo "$@" 1>&2
exit 2
}
while getopts "x:y:n:h:" option; do
case $option in
x|y) ;; # Ignore
n) login=$OPTARG ;;
h) host=$OPTARG ;;
*) echo "LPD started `basename $0` wrong." 1>&2
exit 2
;;
esac
done
[ "$login" ] || fail "No login name"
[ "$host" ] || fail "No host name"
( /usr/local/libexec/make-ps-header $login $host "DVI File"
/usr/local/bin/dvips -f ) | eval /usr/local/libexec/lprps $orig_args
过滤器是怎样解释参数列表来决定用户名和主机名的。 解释的方法对于其他转换过滤器来说也是一样的。 尽管文本过滤器需要输入的参数有些小的不同, (参见 过滤器是怎样工作的)。
像我们以前提到的那样, 上面的配置, 尽管相当简单, 关掉了 “禁止报头页” 的选项 (-h 选项) 在 lpr 中。 如果用户想要保护树木 (或者是几便士, 如果你对打印报头页收费的话), 它还不能完成这件事情, 因为每个过滤器都要为每个任务打印一个报头页。
要允许用户对于每个任务都可以关闭报头页, 您需要使用在 为报头页记帐 这节中介绍的那种技巧: 写一个输出过滤器来解释 LPD- 生成的报头页并且生成一个 PostScript 的版本。 如果用户用 lpr -h 命令提交任务, 那么 LPD 将不会生成报头页, 并且输出过滤器也不会生成报头页。 否则, 输出过滤器将从 LPD 读取文本, 然后发送适当的报头页的 PostScript 编码给打印机。
如果您有的是一台连在串口上的 PostScript 打印机, 您可以使用 lprps 里的一个输出过滤器, psof , 它可以完成上述任务。 但注意 psof 不对报头页计费。
FreeBSD 支持网络打印: 发送任务给远程打印机。 网络打印通常指两种不同的方式:
访问一台连接在远程主机上的打印机。 在一台主机上安装一台常规的串行或并行打印机。 然后, 设置 LPD 来通过网络访问其他主机上的打印机。 具体见 安装在远程主机上的打印机 这节。
访问一台直接连接在网络上的打印机。 打印机另有一个网络接口 (或者替代常规的串口或者并口)。 这样的打印机可能像下面这样工作:
它或许可以理解 LPD 的协议, 并且甚至可以接收远程主机发来的任务排进队列。 这样, 它就像一个普通的主机运行着 LPD 一样。 做在 安装在远程主机上的打印机 里介绍的步骤, 可以设置好这样的打印机。
它或许支持网络数据流。 这样, 把打印机 “接” 在一台网络上的主机上, 由这台主机负责安排任务并发送任务到打印机。 参见 带网络数据流接口的打印机 这节来得到更多安装这类打印机的建议。
LPD 打印池系统内建了对给其他也运行着 LPD (或者是与 LPD 兼容的) 的主机发送任务的功能。 这个功能使您可以在一台主机上安装打印机, 并让它可以在其他主机上访问。 这个功能同样适用在那些有网络接口并且可以理解 LPD 协议的打印机上。
要开启这种远程打印的功能, 首先在一台主机上安装打印机, 就是 打印主机, 可以使用在 简单打印机设置 这节中简单设置的方法。 高级的设置可以参考 高级打印机设置 这节中你需要的部分。 一定要测试一下打印机, 看看它是不是所有您开启的 LPD 的功能都正常工作。 同样确定 本地主机 允许使用 远程主机 上的 LPD 服务 (参见 限制远程打印机任务)。
如果您正在使用一台带网络接口并与 LPD 兼容的打印机, 那么我们那下面讨论中的 打印主机 就是打印机本身, 而 打印机名 就是您为打印机配置的名字。 参考随打印机和/或者打印机-网络接口供给的文档。
Tip: 如果您正使用惠普的 Laserjet, 则打印机名 text 将自动地为您完成 LF 到 CRLF 的转换, 因而也就不需要 hpif 脚本了。
然后, 在另外一台你想要访问打印机的主机上的 /etc/printcap 文件中加入它们的记录, 像下面这样:
可以随意给这个记录起名字。 简单起见, 您可以给打印主机使用相同的名字或者别名。
保留 lp 变量为空, (:lp=:)。
建立一个打印池目录并且用 sd 变量指明它的位置。 LPD 将把任务存储在这里在它们被送到打印主机之前。
在 rm 变量中放入打印主机的名字。
在 rp 中放入打印主机上打印机的名字。
就是这样。 不需要列出转换过滤器, 页面大小, 或者其他的一些东西在 /etc/printcap 文件中。
这有一个例子。 主机 rose 有两台打印机, bamboo 和 rattan。 我们要让主机 orchid 的用户可以使用这两台打印机。 下面是 /etc/printcap 文件, 用在主机 orchid (详见 开启报头页) 上的。 文件中已经有了打印机 teak 的记录; 我们在主机 rose 上增加了两台打印机:
#
# /etc/printcap for host orchid - added (remote) printers on rose
#
#
# teak is local; it is connected directly to orchid:
#
teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\
:lp=/dev/lpt0:sd=/var/spool/lpd/teak:mx#0:\
:if=/usr/local/libexec/ifhp:\
:vf=/usr/local/libexec/vfhp:\
:of=/usr/local/libexec/ofhp:
#
# rattan is connected to rose; send jobs for rattan to rose:
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
:lp=:rm=rose:rp=rattan:sd=/var/spool/lpd/rattan:
#
# bamboo is connected to rose as well:
#
bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
:lp=:rm=rose:rp=bamboo:sd=/var/spool/lpd/bamboo:
然后, 我们只需要在主机 orchid 上建立一个打印池目录:
# mkdir -p /var/spool/lpd/rattan /var/spool/lpd/bamboo # chmod 770 /var/spool/lpd/rattan /var/spool/lpd/bamboo # chown daemon:daemon /var/spool/lpd/rattan /var/spool/lpd/bamboo
现在, 主机 orchid 上的用户可以打印到 rattan 和 bamboo 了。 如果, 比如, 一个用户在主机 orchid 上输入了
% lpr -P bamboo -d sushi-review.dviLPD 系统在主机 orchid 上会复制这个任务到打印池目录 /var/spool/lpd/bamboo 并且记下这是一个 DVI 任务。 当主机 rose 上的打印机 bamboo 的打印池目录有空间的时, 这两个 LPDs 系统将会传输这个文件到主机 rose 上。 文件将排在主机 rose 的队列中知道最终被打印出来。 它将被从 DVI 转换成 PostScript (因为 bamboo 是一台 PostScript 打印机) 在主机 rose。
通常, 当您为打印机购买了一块网卡, 可以得到两个版本: 一个是模拟打印池 (贵一些的版本), 或者一个只发送数据给打印机就像在使用串口或者并口一样 (便宜一些的版本)。 这节讲述如何使用这个便宜一些的版本。 要得到贵一些版本的更多信息, 参见前面章节 安装在远程主机上的打印机。
/etc/printcap 文件的格式让您指定使用哪个串口或并口, 并且还要指定 (如果您正在使用串口), 使用多快的波特, 是否使用流量控制, 为制表符延迟, 转换换行, 等等。 但是没有一种方法指定一个连接到一台正在监听 TCP/IP 的或者其他网络接口的打印机。
要发送数据到网络打印机, 需要开发一个通讯程序, 它可以被文本或者转换过滤器调用。 下面是一些例子: 脚本 netprint 将标准输入的所有数据发送到一个连在网络上的打印机。 我们将打印机的名字作为第一个参数, 端口号跟在后面作为第二个参数, 传给 netprint 。 注意它只支持单向通讯 (FreeBSD 到打印机); 很多网络打印机支持双向通讯, 并且这是您可能利用到的 (得到打印机状态, 进行打印记帐, 等等的时候。)。
#!/usr/bin/perl
#
# netprint - Text filter for printer attached to network
# Installed in /usr/local/libexec/netprint
#
$#ARGV eq 1 || die "Usage: $0 <printer-hostname> <port-number>";
$printer_host = $ARGV[0];
$printer_port = $ARGV[1];
require 'sys/socket.ph';
($ignore, $ignore, $protocol) = getprotobyname('tcp');
($ignore, $ignore, $ignore, $ignore, $address)
= gethostbyname($printer_host);
$sockaddr = pack('S n a4 x8', &AF_INET, $printer_port, $address);
socket(PRINTER, &PF_INET, &SOCK_STREAM, $protocol)
|| die "Can't create TCP/IP stream socket: $!";
connect(PRINTER, $sockaddr) || die "Can't contact $printer_host: $!";
while (<STDIN>) { print PRINTER; }
exit 0;
然后我们就可以在多种过滤器里使用这个脚本了。 加入我们有一台 Diablo 750-N 行式打印机联在网络上。 打印机在 5100 端口上接收要打印的数据。 打印机的主机名是 scrivener 。 这里是为这个打印机写的文本过滤器:
#!/bin/sh # # diablo-if-net - Text filter for Diablo printer `scrivener' listening # on port 5100. Installed in /usr/local/libexec/diablo-if-net # exec /usr/libexec/lpr/lpf "$@" | /usr/local/libexec/netprint scrivener 5100
这节将讲述关于限制打印机使用的问题。 LPD 系统让您可以控制谁可以访问打印机, 无论本地或是远程的, 是否他们可以打印机多份拷贝, 任务可以有多大, 和打印机能有多大的队列。
LPD 系统使用户要打印文件的多份拷贝变得容易。 用户可以用 lpr -#5 (举例) 来提交打印任务, 则会将任务中每个文件都打印五份拷贝。 这是不是一件很棒的事情呢。
如果您感觉多份拷贝会对打印机造成不必要的磨损和损耗, 您可以屏蔽掉 lpr(1) 的 -# 选项, 通过增加 sc 变量在 /etc/printcap 文件里。 当用户用 -# 选项提交任务时, 他们将看到:
lpr: multiple copies are not allowed
注意当为一台远程打印机设置的时候 (参见 安装在远程主机上的打印机) 这一节, 您同时还需要增加 sc 变量在远程主机的 /etc/printcap 文件中, 否则用户将还是可以在其他主机上提交多份拷贝的任务。
下面是一个例子。 这个是 /etc/printcap 文件在主机 rose 上。 打印机 rattan 非常轻闲, 所以我们将允许多份拷贝, 但是激光打印机 bamboo 则有些忙, 所以我们禁止多份拷贝, 通过增加 sc 变量:
#
# /etc/printcap for host rose - restrict multiple copies on bamboo
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
:sh:sd=/var/spool/lpd/rattan:\
:lp=/dev/lpt0:\
:if=/usr/local/libexec/if-simple:
bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
:sh:sd=/var/spool/lpd/bamboo:sc:\
:lp=/dev/ttyd5:ms#-parenb cs8 clocal crtscts:rw:\
:if=/usr/local/libexec/psif:\
:df=/usr/local/libexec/psdf:
现在, 我们还需要增机 sc 变量在主机 orchid 的 /etc/printcap 文件中 (顺便我们也禁止打印机 teak 多份打印) :
#
# /etc/printcap for host orchid - no multiple copies for local
# printer teak or remote printer bamboo
teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\
:lp=/dev/lpt0:sd=/var/spool/lpd/teak:mx#0:sc:\
:if=/usr/local/libexec/ifhp:\
:vf=/usr/local/libexec/vfhp:\
:of=/usr/local/libexec/ofhp:
rattan|line|diablo|lp|Diablo 630 Line Printer:\
:lp=:rm=rose:rp=rattan:sd=/var/spool/lpd/rattan:
bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
:lp=:rm=rose:rp=bamboo:sd=/var/spool/lpd/bamboo:sc:
通过使用 sc 变量, 我们阻止了 lpr -# 命令的使用, 但仍然没有禁止用户多次运行 lpr(1) , 或者多次提交任务中同样的文件, 像下面这样:
% lpr forsale.sign forsale.sign forsale.sign forsale.sign forsale.sign
这里有很多种方法可以阻止这种行为 (包括忽略它), 并且是免费的。
您可以控制谁可以打印到哪台打印机通过 UNIX 的组机制和文件 /etc/printcap 中的 rg 变量。 只要把可以访问打印机的用户放进适当的组中, 然后在 rg 变量中写上组的名字。
非这组的用户 (包括 root) 将会得到这样的问候: “lpr: Not a member of the restricted group” 如果他们试图打印到被限制的打印机。
像使用 sc (禁止多份拷贝) 变量一样, 您需要指定 rg 在远程 同样对打印机有访问限制的主机上, 如果您感觉 合适的话 (参考 安装在远程主机上的打印机 这一节)。
比如, 我们将让任何人都可以访问打印机 rattan, 但只有在 artists 组中的人可以使用打印机 bamboo。 这里是类似的主机 rose 上的 /etc/printcap 文件:
#
# /etc/printcap for host rose - restricted group for bamboo
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
:sh:sd=/var/spool/lpd/rattan:\
:lp=/dev/lpt0:\
:if=/usr/local/libexec/if-simple:
bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
:sh:sd=/var/spool/lpd/bamboo:sc:rg=artists:\
:lp=/dev/ttyd5:ms#-parenb cs8 clocal crtscts:rw:\
:if=/usr/local/libexec/psif:\
:df=/usr/local/libexec/psdf:
Let us leave the other example /etc/printcap file (for the host orchid) alone. Of course, anyone on orchid can print to bamboo. It might be the case that we only allow certain logins on orchid anyway, and want them to have access to the printer. Or not.
Note: 这里每台仅能有一个限制的组。
如果您有很多用户访问打印机, 可能需要对用户可以提交的文件尺寸设置一个上限。 毕竟, 文件系统中打印池目录的空间是有限的, 您需要保证这里有空间来存放其他用户的任务。
LPD 允许限制任务中文件的最大字节数, 通过使用 mx 变量。 单位为 BUFSIZ 块, 每块 1024 字节。 如果在这个变量中放入 0 值, 将没有文件大小的限制; 然而, 就算没有指定 mx 变量, 那么默认值 1000 块将被使用。
Note: 这个限制是对于任务中 文件 的, 而 不是 任务总共的大小。
LPD 不会拒绝比限制大小大的文件。 但它是将限制大小以内的部分排入队列, 并且打印出来的只有这些。 剩下的部分将被丢弃。 这个行为是否正确还需讨论。
让我们来为例子打印机 rattan 和 bamboo 增加限制。 由于那些艺术家的 PostScript 文件可能会很大, 我们将限制大小为 5 兆字节。 我们将不对纯文本行式打印机做限制:
#
# /etc/printcap for host rose
#
#
# No limit on job size:
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
:sh:mx#0:sd=/var/spool/lpd/rattan:\
:lp=/dev/lpt0:\
:if=/usr/local/libexec/if-simple:
#
# Limit of five megabytes:
#
bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
:sh:sd=/var/spool/lpd/bamboo:sc:rg=artists:mx#5000:\
:lp=/dev/ttyd5:ms#-parenb cs8 clocal crtscts:rw:\
:if=/usr/local/libexec/psif:\
:df=/usr/local/libexec/psdf:
同样, 限制只对本地用户起作用。 如果远程设置了限制, 远程用户将不会受到这些限制。 您也需要指定 mx 变量在远程主机的 /etc/printcap 文件中。 参见 安装在远程主机上的打印机 这一节来得到更多有关远程打印的信息。
这里还有一种限制远程任务大小的方法; 参见 限制远程打印机任务。
LPD 打印池系统提供了多种方法来限制从远程主机提交的任务:
您可以控制本地 LPD 接收哪台远程主机发来的请求, 通过 /etc/hosts.equiv 文件和 /etc/hosts.lpd 文件。 LPD 查看是否到来的任务请求来自被这两个文件中列出的主机。 如果没有, LPD 会拒绝这个请求。
这些文件的格式非常简单: 每行一个主机名。 注意 /etc/hosts.equiv 文件也被 ruserok(3) 协议使用, 并影响着 rsh(1) and rcp(1) 等程序, 所以要小心。
举个例子, 下面是 /etc/hosts.lpd 文件在主机 rose 上:
orchid violet madrigal.fishbaum.de
意思是主机 rose 将接收来自 orchid, violet, 和 madrigal.fishbaum.de 的请求。 如果任何其他的主机试图访问主机 rose 的 LPD, 任务将被拒绝。
您可以控制打印池目录需要保留多少空间。 建立一个叫做 minfree 的文件在打印池目录下为本地打印机。 在这个文件中插入一个数字来代表多少磁盘块数 (512 字节) 的剩余空间来接收远程任务。
这让您可以保证远程用户不会填满您的文件系统。 您也可以用它来给本地用户一个优先: 他们可以在磁盘剩余空间低于 minfree 文件中的指定值后仍然可以提交任务。
比如, 让我们增加一个 minfree 文件为打印机 bamboo。 我们检查 /etc/printcap 文件来找到这个打印机的打印池目录; 这里是打印机 bamboo 的记录:
bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
:sh:sd=/var/spool/lpd/bamboo:sc:rg=artists:mx#5000:\
:lp=/dev/ttyd5:ms#-parenb cs8 clocal crtscts:rw:mx#5000:\
:if=/usr/local/libexec/psif:\
:df=/usr/local/libexec/psdf:
打印池目录在 sd 变量中给出。 我们设置 3 兆字节 (6144 磁盘块) 为文件系统上必须存在的总共剩余空间, 让 LPD 可以接受远程任务:
# echo 6144 > /var/spool/lpd/bamboo/minfree
您可以控制哪些远程用户可以打印到本地打印机, 通过指定 rs 变量在 /etc/printcap 文件中。 当 rs 出现在一个本地打印机的记录中时, LPD 将接收来自远程主机 并 在本地有同样登陆名的用户提交的任务。 否则, LPD 会拒绝这个任务。
这个功能在一个 (比如) 有许多部门共享一个网络的环境中特别有用, 并且有些用户可以越过部门的边界。 通过为他们在您的系统上建立帐号, 他们可以他们自己的部门的系统里使用您的打印机。 如果 只 允许他们您的打印机, 而不是您的计算机资源, 您可以给他们 “象征” 帐户, 不带主目录并且设置一个没用的 shell , 比如 /usr/bin/false。
当然, 你需要对打印付费。 为什么不? 纸张和墨水都需要花钱的。 并且这里还有维护的费用 -- 打印机是由很多部件组装成的, 并且零件会坏掉。 您可以检查您的打印机, 使用形式, 和维护费用来得出每页 (或者每尺, 每米, 或者每什么) 的费用。 现在, 您怎样启动打印记帐呢?
好了, 坏消息是 LPD 打印池系统在这个部分没有提供很多帮助。 记帐是一个对使用的打印机的种类, 打印的格式, 和 您的 在对打印机的使用计费的需求依赖性很高的。
要实现记帐, 您必须更改打印机的文本过滤器 (对纯文本任务记费) 和转换过滤器 (对其他格式的文件计费), 要统计页数或者查询打印了多少页的话。 您不可以通过使用简单的输出过滤器来逃脱计费, 因为它不能进行记帐。 参见 过滤器 这节。
通常, 有两种方法来进行记帐:
定期记帐 是更常用的方法, 可能因为它更简单。 无论合适何人打印一个任务, 过滤器都将记录用户名, 主机名, 和打印的页数到一个记帐文件。 每个月, 学期, 年, 或者任何您想设定的时间段, 收集这些不同打印机上的记帐文件, 按用户对打印的页数进行结算, 并对使用进行付费。 然后删掉所有记录文件, 开始一个新的计费周期。
实时记帐 不太常用, 可能因为它比较难。 这种方法让过滤器对用户的打印进行实时的记帐。 像磁盘配额, 记帐是实时的。 您可以组织用户打印当他们的帐户超额的时候, 并且可能提供一种方法让用户检查并调整他们的 “打印配额。” 但这个方法需要一些数据库代码来跟踪用户和他们的配额。
LPD 打印池系统对两种方法都支持且很简单: 所以您需要提供过滤器 (大多数时候), 还要提供记帐代码。 但这好的方面是: 您可以有非常灵活的记帐方法。 比如, 您可以选择使用阶段记帐还是实时记帐。 您可以选择记录哪些信息: 用户名, 主机名, 任务类型, 打印页数, 使用了多少平方尺的纸, 任务打印了多长时间, 等等。 您可以通过修改过滤器来存储这些信息。
FreeBSD 包含两个可以让您立刻可以建立起简单的阶段记帐的程序。 它们是文本过滤器 lpf, 在 lpf: 一个文本过滤器 这节中描述, 和 pac(8), 一个收集并统计打印机记帐文件中记录的程序。
像在前面章节提到的过滤器一样 (过滤器), LPD 启动文本或者转换过滤器并在过滤器命令行里带上记帐文件的名字。 过滤器可以使用这个参数知道该往哪写记帐记录。 这个文件的名字来自于 af 变量在 /etc/printcap 文件里, 并且如果没有指定绝对路径, 则默认是相对于打印池目录的。
LPD 启动 lpf 带着页宽和页长的参数 (通过 pw 和 pl 变量)。 lpf 使用这些参数来判定将使用多少张纸。 在文件发送到打印机之后, 它就会在记帐文件中写入记录。 记录像下面这个样子:
2.00 rose:andy 3.00 rose:kelly 3.00 orchid:mary 5.00 orchid:mary 2.00 orchid:zhang
您应该让每个打印机都使用一个独立的记帐文件, 像 lpf 就没有内建文件锁逻辑, 这样两个 lpf 可能会发生彼此记录混合的情况, 如果它们同时要在同一个文件写入内容的时候。 一个最简单的保证每个打印机都使用一个独立的记帐文件的方法就是将 af=acct 写在 /etc/printcap 文件中。 然后, 每个打印机的记帐文件都会在这台打印机的打印池目录中, 文件的名字叫做 acct。
当您准备对用户的打印进行收费时, 运行 pac(8) 程序。 只要转换到要收集信息的这台打印机的打印池目录, 然后输入 pac 。 您将会得到一个美元计费的摘要像下面这样:
Login pages/feet runs price orchid:kelly 5.00 1 $ 0.10 orchid:mary 31.00 3 $ 0.62 orchid:zhang 9.00 1 $ 0.18 rose:andy 2.00 1 $ 0.04 rose:kelly 177.00 104 $ 3.54 rose:mary 87.00 32 $ 1.74 rose:root 26.00 12 $ 0.52 total 337.00 154 $ 6.74
这些时 pac(8) 需要的参数:
哪台 打印机 要结帐。 这个选项仅在用 af 变量在 /etc/printcap 文件中指定了绝对路径的情况下起作用。
以金额来排序输出来代替以用户名字字母排序。
忽略记帐文件中的主机名。 带上这个选项, 用户 smith 在主机 alpha 上与同样的用户 smith 在主机 gamma 上一样。 不带这个选项的话, 他们则是不同的用户。
使用 price 作为每页或每尺美元的单价来替代 pc 变量指定的单价在 /etc/printcap 文件中, 或者两分 (默认)。 price 可以用一个浮点数来指定。
反向排序。
建立一个记帐摘要文件, 并且截短记帐文件。
只打印指定 名字 用户的记帐信息。
在 pac(8) 默认产生的摘要中, 可以看到在不同主机上的每个用户打印了多少页。 如果在您这里, 主机不考虑 (因为用户可以使用任何主机), 运行 pac -m, 来得到下面的摘要:
Login pages/feet runs price andy 2.00 1 $ 0.04 kelly 182.00 105 $ 3.64 mary 118.00 35 $ 2.36 root 26.00 12 $ 0.52 zhang 9.00 1 $ 0.18 total 337.00 154 $ 6.74
要以美元计算应付钱数, pac(8) 指定 pc 变量在 /etc/printcap 文件中 (默认是 200, 或者 2 分每页). 这个参数的单位是百分之一分, 在这个变量中指定每页或者每尺的价格。 您可以覆盖这个值当运行 pac(8) 带着参数 -p 的时候。 参数 -p 的单位是美元, 而不是百分之一分。 例如,
# pac -p1.50设定每页的价格是 1 美元 5 美分。 您可以通过这个选项来达到目标利润。
最终, 运行 pac -s 将存储这些信息在一个记帐文件里, 文件名和打印机帐户的名字相同, 但是带着 _sum 的后缀。 然后截短记帐文件。 当您再次运行 pac(8) 的时候, 它再次读取记帐文件来得到初始的总计, 然后在记帐文件中增加信息。
为了进行远程的精确记帐, 需要判断一个任务将会消耗多少张纸。 这是打印记帐问题的关键。
对于纯文本任务, 这个问题不是太难解决: 对任务中的行数进行计数然后与打印机支持的每页行数进行比较。 别忘了也对添印的行, 或者很长的逻辑上的一行但在打印机上会折成两行的这类进行记帐。
文本过滤器 lpf (在 lpf:一个文本过滤器 这节中介绍) 会在记帐时考虑这些问题。 如果正在编写一个可以进行记帐的文本过滤器, 您可能需要查看 lpf 的源代码。
怎样处理其他格式的文件?
好, 对于 DVI- 到 -LaserJet 或者 DVI- 到 -PostScript 转换, 可以让您的过滤器输出诊断信息, 关于 dvilj 或者 dvips 命令, 并且看到多少页被转换了。 您也许可以对于其他类型的文件和转换程序进行类似操作。
但是这些方法的弱点就是事实上打印机并不是打印了所有的页。 比如, 卡纸, 缺墨, 或者炸掉了 -- 但用户还是要为没有打印的部分付钱。
您该怎样做?
只有一条 肯定 的方法来进行 精确 的记帐。 购买一台可以告诉您它使用了多少纸的打印机, 并且将它连接到串口或者网络上。 几乎所有 PostScript 打印机都支持这个小功能。 其他制造厂或其他型号也可以有这个功能 (比如 Imagen 激光网络打印机)。 为这些打印机更改过滤器使它在打印完每个任务之后接收纸张用量, 并 仅 基于这个值进行记帐。 不需要计算行数, 也不需要容易出错的文件检查。
当然, 您也总是可以大方的使打印免费。
这节将讲述如何使用在 FreeBSD 下设置好的打印机。 下面是一个用户级命令的总览:
打印任务
检查打印队列
从打印机的队列中移除任务
这里还有一个管理命令, lpc(8) , 在 管理 LPD 打印池 这节中描述, 用来控制打印机和它们的队列。
lpr(1), lprm(1), and lpq(1) 这三个命令都接受 -P printer-name 选项来指定对哪个打印机 / 队列进行操作, 在 /etc/printcap 文件中列出的打印机。 这允许您提交, 删除, 并检查任务在多个打印机上。 如果您不使用 -P 选项, 那么这些命令会使用在 环境变量 PRINTER 中指定的打印机。 最终, 如果您也没有 PRINTER 这个环境变量, 这些命令的默认值是叫做 lp 的这台打印机。
从此以后, 术语 默认打印机 就是指 PRINTER 环境变量中指定的这台, 或者叫做 lp 的这一台当没有环境变量 PRINTER 的时候。
要打印文件, 输入:
% lpr filename ...
这个命令会打印所有列出的文件到默认打印机。 如果没有列出文件, lpr(1) 会从标准输入读取打印数据。 比如, 这个命令打印一些重要的系统文件:
% lpr /etc/host.conf /etc/hosts.equiv
要选择一个指定的打印机, 输入:
% lpr -P printer-name filename ...
这个例子打印一个当前目录的长长的列表到叫做 rattan 的这台打印机:
% ls -l | lpr -P rattan
因为没有为 lpr(1) 命令列出文件, lpr 从标准输入读入数据, 在这里是 ls -l 命令的输出。
lpr(1) 命令同样可以接受多种控制格式的选项, 应用文件转换, 生成多份拷贝, 等等。 要得到更多信息, 参考 打印选项 这节。
当使用 lpr(1) 进行打印时, 您希望打印的所有数据被放在一起打包成了一个 “打印任务”, 它被发送到 LPD 打印池系统。 每台打印机都有一个任务队列, 并且您的任务在队列中等待其他用户的其他任务打印。 打印机按照先来先印的规则打印这些任务。
要显示默认打印机的队列, 输入 lpq(1) 。 要指定打印机, 使用 -P 选项。 例如, 命令
% lpq -P bamboo会显示打印机 bamboo 的队列。 下面是命令 lpq 输出的一个例子:
bamboo is ready and printing Rank Owner Job Files Total Size active kelly 9 /etc/host.conf, /etc/hosts.equiv 88 bytes 2nd kelly 10 (standard input) 1635 bytes 3rd mary 11 ... 78519 bytes
这里显示了队列中有三个任务在 bamboo 中。 第一个任务, 用户 kelly 提交的, 标识 “任务编号” 9。 每个要打印的任务都会获得一个不同的任务编号。 大多时候可以忽略这个任务编号, 但在您需要取消任务时会用到这个号码; 参考 移除任务 这节得到更多信息。
编号为 9 的任务包含了两个文件; 在 lpr(1) 命令行中指定的多个文件被看作是一个单个的任务。 它是当前激活的任务 (注意这个词 激活 在 “Rank” 这列下面), 意思是打印机当前正在打印那个任务。 第二个任务包含了标准输入传给 lpr(1) 命令的数据。 第三个任务来自用户 mary; , 它是一个比较大的任务。 她要打印的文件的路径名太长了, 所以 lpq(1) 命令只显示了三个点。
lpq(1) 输出的头一行也很有用: 它告诉我们打印机正在做什么 (或者至少是 LPD 认为打印机应该正在做的)。
lpq(1) 命令同样支持 -l 选项来生成一个详细的长列表。 下面是一个 lpq -l 命令的例子:
waiting for bamboo to become ready (offline ?)
kelly: 1st [job 009rose]
/etc/host.conf 73 bytes
/etc/hosts.equiv 15 bytes
kelly: 2nd [job 010rose]
(standard input) 1635 bytes
mary: 3rd [job 011rose]
/home/orchid/mary/research/venus/alpha-regio/mapping 78519 bytes
如果您对一个打印任务改变了主意, 可以用 lprm(1) 将任务从队列中删除。 通常, 您甚至可以用 lprm(1) 命令来移除一个当前激活的任务, 但是任务的一部分或者所有还是可能打印出来。
要从默认打印机中移除一个任务, 首先使用 lpq(1) 找到任务编号。 然后输入:
% lprm job-number
要从指定打印机中删除任务, 增加 -P 选项。 下面的命令会删除编号为 10 的任务从 bamboo 这台打印机:
% lprm -P bamboo 10
lprm(1) 命令有一些快捷方式:
删除所有属于您的任务 (默认打印机的)。
删除所有属于用户 user 的任务 (默认打印机的)。 超级用户可以删除用户的任务; 您只可以删除自己的任务。
命令行中不带任务编号, 任务名, 或者 - 选项, lprm(1) 会删除默认打印机上当前激活的任务, 如果它属于你。 超级用户可以删除任务激活的任务。
使用参数 -P 和上面的快捷方式来用指定打印机替代默认打印机。 例如, 下面的命令会删除当前用户在打印机 rattan 队列中的所有任务:
% lprm -P rattan -
Note: 如果您正工作在一个网络环境中, lprm(1) 将只允许在提交任务的主机上删除任务, 甚至是同一台打印机也可以在其他主机上使用时。 下面的命令证明了这个:
% lpr -P rattan myfile % rlogin orchid % lpq -P rattan Rank Owner Job Files Total Size active seeyan 12 ... 49123 bytes 2nd kelly 13 myfile 12 bytes % lprm -P rattan 13 rose: Permission denied % logout % lprm -P rattan 13 dfA013rose dequeued cfA013rose dequeued
lpr(1) 支持许多控制文本格式的参数, 转换图形和其他格式文件, 生成多份拷贝, 处理任务, 等等。 这一节将描述这些选项。
下面的 lpr(1) 参数控制任务中文件的格式。 使用这些参数, 如果任务不含纯文本, 或者您想让纯文本通过 pr(1) 格式化。
例如, 下面的命令打印一个 DVI 文件 (来自 TeX 排版系统) 文件名为 fish-report.dvi 到打印 bamboo:
% lpr -P bamboo -d fish-report.dvi
这些选项应用到任务中的每个文件, 所以您不能混合 (说) DVI 和 ditroff 文件在同一个任务中。 替代的方法是, 用独立的任务提交这些文件, 使用不同的转换选项给不同的任务。
Note: 所有这些选项除了 -p 和 -T 都需要转换过滤器安装给目标打印机。 例如, -d 选项需要 DVI 转换过滤器。 参考 转换过滤器 这节得到更多细节。
打印 cifplot 文件。
打印 DVI 文件。
打印 FORTRAN 文本文件。
打印 plot 数据。
缩进 number 列; 如果没有指定 number, 则缩进 8 列。 这个选项仅可以工作在某些过滤器上。
Note: 不要在选项 -i 和数字之间加入空格。
打印文字数据, 包括控制字符。
打印 ditroff (无设备依赖 troff) 数据。
打印之前用 pr(1) 格式化纯文本。 参考 pr(1) 得到更多信息。
使用 title 在 pr(1) 上来替代文件名。 这个选项仅在使用 -p 选项时起作用。
打印 troff 数据。
打印 raster 数据。
下面是一个例子: 这个命令打印了一个很好的 ls(1) 手册页面到默认打印机:
% zcat /usr/share/man/man1/ls.1.gz | troff -t -man | lpr -t
zcat(1) 命令解压缩 ls(1) 的手册并且将内容传给 troff(1) 命令, 它将格式化这些内容并且生成 GNU troff 输出给 lpr(1) , 它提交任务到 LPD 打印池。 因为使用了 -t 选项为 lpr(1) , 打印池将会转换 GNU troff 输出到默认打印机可以理解的格式当任务被打印时。
下面的 lpr(1) 选项告诉 LPD 对任务特殊处理:
生成 copies 个副本给任务中的每个文件, 替代每个文件一份拷贝。 管理员可以禁止这个选项来减少打印机的浪费和鼓励复印机的使用。 参考 限制多份拷贝 。
这个例子打印三份拷贝的文件 parser.c 跟着三份拷贝的文件 parser.h 到默认打印机:
% lpr -#3 parser.c parser.h
打印完成后发信。 使用这个选项, LPD 系统将会发送邮件到您的帐户, 当它完成了处理您的任务后。 在信中, 它将会告诉您任务是否成功完成或者出现了错误, 并且 (通常) 指明是什么错误。
不要复制文件到打印池目录, 要使用符号连接。
如果您正在打印一个很大的任务, 您可能需要这个选项。 它节省打印池目录的空间 (您的任务可能使打印池目录所在的文件系统剩余空间超出)。 它同样也节省了时间, 因为 LPD 将不会拷贝任务的每个字节到打印池目录。
这也有一个缺点: 因为 LPD 将直接指向源文件, 您不能修改或者删除它们直到它们被打印出来。
Note: 如果您打印到一台远程打印机, LPD 将最终将文件从本地主机拷贝到远程主机上, 所以选项 -s 只能节省本地打印池目录的空间, 而不是远程的。 虽然如此, 但它还是很有用。
移除任务中的文件在它们被复制到打印池目录之后, 或者在用 -s 选项打印它们之后。 谨慎使用这个选项!
这些 lpr(1) 的选项调整了通常出现在任务报头页上的文本。 如果报头页被跳过了在目标打印机上, 这些选项将不会起作用。 参考 报头页 得到更多关于设置报头页的信息。
替换报头页上的主机名为 text。 主机名通常都是提交任务的主机名称。
替换报头页上的任务名为 text。 任务名通常是任务中头一个文件的名字, 或者 stdin 如果您正在打印标准输入。
不打印任何报头页。
Note: 在某些地点, 这个选项可能无效, 与报头页的产生方法有关。 参考 报头页 得到详细信息。
作为一个打印机的管理者, 您必须要安装, 设置, 并且测试它们。 使用 lpc(8) 命令, 您可以与打印机以更多的方式交流。 用 lpc(8) , 您可以
启动或停止打印机
启用或禁止它们的队列
重新安排每个队列中的任务。
首先, 一个关于术语的解释: 如果一个打印机被 停止 了, 它将不会打印它队列中的任何东西。 但用户还是可以提交任务, 它们会在队列中等待直到打印机被 启动 或者队列被清空。
如果一个队列被 禁止, 没有用户 (除了 root) 可以提交任务到打印机。 一个 启用 的队列允许任务被提交。 一个打印机可以被 启动 但它的队列被禁止, 在这种情况下打印机将打印队列中的任务知道队列为空。
通常, 您必须有 root 权限来使用 lpc(8) 命令。 普通用户可以使用 lpc(8) 命令来获得打印机状态并且重启一台挂了的打印机。
这里是一个关于 lpc(8) 命令的摘要。 大部分命令带着一个 printer-name 参数来知道要对哪台打印机操作。 您可以用 all 填在 printer-name 的位置来代表所有在 /etc/printcap 文件中列出的打印机。
取消当前任务并停止打印机。 用户仍然可以提交任务, 如果队列还是启用的。
从打印机的打印池目录移除旧的文件。 有时, 组成任务的文件没有被 LPD 正确的删除, 特别是在打印中出现错误或者管理活动比较多的时候。 这个命令查找不属于打印池目录的文件并删除它们。
禁止新任务入队。 如果打印机正在工作, 它将会继续打印队列中剩余的任务。 超级用户 (root) 总是可以提交任务, 甚至提交到一个禁止的队列。
这个命令在测试一台新打印机或者安装过滤器时非常有用: 禁止队列并提交以 root 提交任务。 其他用户将不能提交任务直到您完成了测试并用命令 enable 重新启用了队列的时候。
打印机下线。 等于 disable 命令后跟一个 stop 命令。 message 将作为打印机状态, 当用户使用 lpq(1) 或者 lpc status 命令查看打印机队列状态的时候显示出来。
为打印机开启队列。 用户可以提交任务到打印机但是在打印机启动之前不会打印出任何东西。
打印关于 command-name 命令的帮助。 不带 command-name, 则打印可用命令的摘要。
启动打印机。 普通用户可以使用这个命令, 当一些特别的环境导致 LPD 锁死时, 但他们不能启用一台使用 stop 或者 down 命令停用的打印机。 restart 命令等同于 abort 后跟着一个 start。
启用打印机。 打印机将开始打印队列中的任务。
停止打印机。 打印机将完成当前任务并且将不再打印队列中的任务任务。 尽管打印机被停用, 但用户仍然可以提交任务到一个开启的队列。
重新以 printer-name 安排队列, 通过将列出的 job 编号或者指定的所属 username 的任务放在队列的最前面。 对于这个命令, 您不可以使用 all 当作 printer-name。
打印机上线; 相对于 down 命令。 等同于 start 后跟着一个 enable 命令。
lpc(8) 的命令行接受上面的命令。 如果您不输入任何命令, lpc(8) 则进入一个交互模式, 在这里您可以输入命令直到输入 exit, quit, 或者文件结束符。
如果您已经通读过了这个手册, 那么到现在您应该已经了解了关于 FreeBSD 包含的打印池系统 LPD 的一切。 您可能发现了它很多的缺点, 它们很自然的让您提出这样的问题: “这里还有什么打印池系统吗 (并且可以工作在 FreeBSD 上) ?”
LPRng, 它的意思是 “LPR: 下一代”, 是一个完全重写的 PLP。 Patrick Powell 和 Justin Mason (PLP 维护的主要负责人) 合作完成了 LPRng。 LPRng 的主站是 http://www.lprng.org/。
CUPS, 通用 UNIX 打印系统, 提供了一个轻便的打印层给 UNIX-基础的操作系统。 它是由 Easy Software Products 开发的, 并且成为了 UNIX 供应商和用户的标准打印解决方案。
CUPS 使用 Internet 打印协议 (IPP) 作为管理打印任务和队列的基础。 行式打印机守护程序 (LPD) 服务器消息块 (SMB), 和 AppSocket (a.k.a. JetDirect) 协议的部分功能也被支持。 CUPS 增加了基于浏览网络打印机和 PostScript 打印机描述 (PPD) 的打印选项来支持 UNIX 下的真实打印。
CUPS 的主站是 http://www.cups.org/。
在使用 lptest(1) 进行简单的测试之后, 您可能得到了下面的结果, 而不是正确的结果:
打印机进行了打印, 但在这之前它呆了一段而且什么都没做。 事实上, 您可能需要按一下打印机上的 打印剩余 或者 送纸 按钮来让结果出现。
如果这是问题所在, 打印机可能在等待在打印之前任务是否还有更多的数据。 要修正这个问题, 您可以让文本过滤器发送一个送纸字符 (或者其他需要的) 到打印机。 这通常足够让打印机立即打印出内部缓存内剩余的文本。 它同样可以用来确保每个任务的结尾都占用一整张纸, 这样下一个任务才不会在前一个任务最后一张纸的中间开始。
接下来的 shell 脚本 /usr/local/libexec/if-simple 的脚本打印了一个送纸符在它发送任务到打印机之后:
#!/bin/sh # # if-simple - Simple text input filter for lpd # Installed in /usr/local/libexec/if-simple # # Simply copies stdin to stdout. Ignores all filter arguments. # Writes a form feed character (\f) after printing job. /bin/cat && printf "\f" && exit 0 exit 2
您可能在纸上得到下面这些:
!"#$%&'()*+,-./01234
"#$%&'()*+,-./012345
#$%&'()*+,-./0123456
您也成为了 楼梯效果 的受害者, 这是由对新行的标志字符的解释不一致造成的。 UNIX 风格的操作系统使用一个单个字符: ASCII 码 10, 即换行 (LF)。 MS-DOS, OS/2®, 和其他的系统使用一对儿字符, ASCII 码 10 和 ASCII 码 13 (回车 CR)。 许多打印机使用 MS-DOS 的习惯来代表新行。
当您在 FreeBSD 上打印时, 您的文本仅用了换行字符。 打印机, 打印机看到换行字符后, 走一行纸, 但还光标位置还是在这张纸上要打印的下一个字符处。 这就是回车的作用: 将下一个要打印的字符的位置移到纸张的左边缘。
这里是 FreeBSD 想要打印机做的:
下面有几种完成这个的办法:
使用打印机的配置开关或者控制面板来更改它对这些字符的解释。 查看打印机的手册来找到怎样更改。
Note: 如果您引导您的系统到其他除了 FreeBSD 之外的操作系统, 您可能不得不 重新配置 打印机使用 这个操作系统对 CR 和 LF 字符的解释。 您可能更喜欢下面这另一种解决方案。
让 FreeBSD 的串口驱动自动转换 LF 到 CR+LF。 当然, 这 仅仅 工作在串口打印机上。 要开启这个功能, 定义 ms# 变量并 设置 onlcr 模式在 /etc/printcap 文件中相应打印机处。
发送一个 转义码 到打印机来让它临时对 LF 字符做不同的处理。 参考您的打印机手册来了解您的打印机支持哪些转义码。 当您找到合适的转义码, 修改文本过滤器让其先发送这个转义码, 然后再发送打印任务。
这里是一个为懂得 Hewlett-Packard PCL 转义码的打印机编写的文本过滤器。 这个过滤器使得打印机将 LF 作为一个 LF 和一个 CR 来对待; 然后它发送任务; 最后发送一个送纸符弹出任务的最后一张纸。 它应该可以在几乎所有 Hewlett Packard 打印机上工作。
#!/bin/sh # # hpif - Simple text input filter for lpd for HP-PCL based printers # Installed in /usr/local/libexec/hpif # # Simply copies stdin to stdout. Ignores all filter arguments. # Tells printer to treat LF as CR+LF. Ejects the page when done. printf "\033&k2G" && cat && printf "\033&l0H" && exit 0 exit 2
下面是一个 /etc/printcap 文件的例子在叫做 orchid 的主机上。 它只有一台打印机连接在第一个并口上, 一台 Hewlett Packard LaserJet 3Si 名字叫做 teak。 它使用上面那段脚本作为文本过滤器:
#
# /etc/printcap for host orchid
#
teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\
:lp=/dev/lpt0:sh:sd=/var/spool/lpd/teak:mx#0:\
:if=/usr/local/libexec/hpif:
打印机从来不进纸换行。 所有的文本都打印在头一行文本的上面。
这个问题是 “相反” 于楼梯效果, 像上面描述的那样, 并且更少见。 一些地方, LF 这个 FreeBSD 用来结束一行的字符被作为 CR 这个将打印位置返回到纸的左边的字符对待。 而没有向下走纸一行。
使用打印机的配置开关或者控制面板来强制对 LF 和 CR 进行下面的转换:
当打印时, 每行里打印机都丢掉一些字符没有打。 这个问题可能随着打印的进行越发严重, 丢掉越来越多的字符。
这个问题是由打印机跟不上计算机通过串口发送数据的速度造成的 (这个问题应该不会发生在并口打印机上)。 有两种方法能克服这个问题:
如果打印机支持 XON/XOFF 流量控制, 那就让 FreeBSD 使用它, 通过加入 ixon 模式在 ms# 变量里。
如果打印机支持载波流量控制, 指定 crtscts 模式在 ms# 变量里。 并且要确定连接打印机和计算机的线是支持载波流量控制的。
打印机打印出的东西看起来是一些随机的字符, 而不是想要打印的东西。
这通常意味着另一种串口打印机通讯参数设置不正确的错误。 复查 br 变量中设定的波特, 和 ms# 中的校验设置; 确定打印机也在使用和 /etc/printcap 文件中相同的设置。
如果没有反应, 问题就可能出在 FreeBSD 而不是硬件上了。 增加日志文件 (lf) 变量到 /etc/printcap 文件里出现问题的打印机的记录处。 比如, 下面是打印机 rattan 的记录, 使用了 lf 变量:
rattan|line|diablo|lp|Diablo 630 Line Printer:\
:sh:sd=/var/spool/lpd/rattan:\
:lp=/dev/lpt0:\
:if=/usr/local/libexec/if-simple:\
:lf=/var/log/rattan.log
然后, 再次打印。 检查日志文件 (在我们的例子当中, 是 /var/log/rattan.log 这个文件) 来看是否有错误信息出现。 根据出现的信息, 试着来修正问题。
如果您没有指定 lf 变量, LPD 会使用 /dev/console 作为默认值。
FreeBSD 提供了与其他几种类 UNIX 操作系统, 包括 Linux, 的兼容性。 现在您可能会问, 为什么 FreeBSD 需要能够运行 Linux 的可执行文件? 答案很简单。 许多公司和开发人员只为 Linux 开发程序, 因为这是目前计算机世界 “最热门” 的技术。 这使得我们 FreeBSD 用户不得不去劝说这些公司和开发人员提供他们应用程序可以直接在 FreeBSD 上运行的版本。 问题是, 许多这样的公司并不真的知道到底提供了 FreeBSD 版本之后能带来多少用户, 因此许多仍然只开发 Linux 的版本。 这时 FreeBSD 用户能做什么呢? 答案就是使用 FreeBSD 所提供的 Linux 二进制兼容性。
简而言之, 这种兼容性能够让 FreeBSD 用户不加修改地直接运行大约 90% 的 Linux 应用程序。 这包括类似 StarOffice, Linux 版本的 Netscape, Adobe® Acrobat®, RealPlayer®, VMware™, Oracle, WordPerfect®, Doom, Quake, 等等。 此外, 也有人说, 某些情况下, 在 FreeBSD 上面运行的 Linux 程序的性能, 甚至好于直接在 Linux 上面运行。
然而, 仍然有一些只有 Linux 才有的操作系统特性在 FreeBSD 上并不被支持。 如果 Linux 程序过分地使用只能在 i386 上使用的特性, 例如启用虚拟 8086 模式, 则也有可能无法在 FreeBSD 上运行。
读完这章,您将了解到:
如何在您的系统中启用Linux兼容模式。
如何安装额外的Linux共享库。
如何在FreeBSD上安装Linux应用程序。
在FreeBSD上,Linux兼容模式的执行细节。
阅读这章之前,您应该知道:
如何安装第三方软件(第 4 章)。
默认的Linux兼容模式没有被打开。启用这个功能的最容易的方法是调用linux KLD对象(“Kernel LoaDable object”)。您可以在命令行通过健入linux来加载这个模块。
如果您想让Linux二进制兼容性总是被启用,您可以在/etc/rc.conf加入下面这一行:
linux_enable="YES"
kldstat(8)可以用来检查KLD模块是否加载:
% kldstat Id Refs Address Size Name 1 2 0xc0100000 16bdb8 kernel 7 1 0xc24db000 d000 linux.ko
如果您不想或者无法将Linux KLD加载,您就需要在内核中静态链接进Linux二进制兼容模式。您必须在 您的内核配置文件里面加入options COMPAT_LINUX,然后按照第 8 章重新编译内核。
有两种方法来安装Linux运行时库,要么使用linux_base port, 要么手动安装。
这是最容易的安装方法,只需要像安装其他port一样从 Ports Collection来安装:
# cd /usr/ports/emulators/linux_base # make install distclean
您现在应当是工作在Linux兼容模式下了。一些程序可能会提示系统库的版本不正确。通常,这不是问题。
Note: 有多个版本的emulators/linux_base port,针对不同的版本的Linux。 您应该选择最接近Linux应用程序需要的那个版本来安装。
如果您没有安装 Ports Collection,您也可以通过手动来安装Linux运行时库。 您将需要这些程序依赖的Linux共享库,而且您需要创建一个“shadow root” 目录/compat/linux,任何要被Linux程序打开的共享库都首先在这个目录里面查找。 所以,如果一个Linux程序加载了,例如,/lib/libc.so,FreeBSD 会首先尝试打开 /compat/linux/lib/libc.so,如果不存在,它将尝试打开/lib/libc.so。 共享库应该安装在/compat/linux/lib而不是Linux ld.so报告的其他路径。
通常,您需要寻找Linux程序依赖的共享库。 此后, 你的系统上就会有一组 Linux 共享库, 这组共享库足以用来运行新安装的 Linux 二进制程序。
如果您安装了linux_base port,但是您的 您的应用程序仍会报告丢失共享库的信息?您如何知道Linux程序需要哪个共享库? 基本上,有两种可能性(接下来的指令需要root权限):
如果您有可以访问的Linux系统, 看看应用程序需要什么共享库, 把它们拷贝到您的FreeBSD系统。看下面的例子:
我们假设您通过FTP得到Linux程序Doom, 并把它放在您能访问的Linux系统上。然后您可以通过ldd linuxdoom来检查需要哪些共享库, 就像这样:
% ldd linuxdoom libXt.so.3 (DLL Jump 3.1) => /usr/X11/lib/libXt.so.3.1.0 libX11.so.3 (DLL Jump 3.1) => /usr/X11/lib/libX11.so.3.1.0 libc.so.4 (DLL Jump 4.5pl26) => /lib/libc.so.4.6.29
您需要得到上面输出的右列的所有文件,并把他们拷贝到/compat/linux, 第一列的名字用符号连接指向它们。这样您的FreeBSD系统上就有了这些文件:
/compat/linux/usr/X11/lib/libXt.so.3.1.0 /compat/linux/usr/X11/lib/libXt.so.3 -> libXt.so.3.1.0 /compat/linux/usr/X11/lib/libX11.so.3.1.0 /compat/linux/usr/X11/lib/libX11.so.3 -> libX11.so.3.1.0 /compat/linux/lib/libc.so.4.6.29 /compat/linux/lib/libc.so.4 -> libc.so.4.6.29
Note: 如果您已经有了一个与ldd 输出的第一列的主修订号相匹配的Linux共享库, 您将不需要把右列命名的文件拷贝到您的系统,您已经完成了工作。 如果有一个新的版本,那无论如何都要拷贝一个共享库。 您可以删掉旧的,您只要做一个符号连接到新的版本。 所以,如果有这些库在您的系统上:
/compat/linux/lib/libc.so.4.6.27 /compat/linux/lib/libc.so.4 -> libc.so.4.6.27如果您根据ldd输出的发现需要一个更新版本的库:
libc.so.4 (DLL Jump 4.5pl26) -> libc.so.4.6.29如果结尾的数字只有一到两个版本过期,那也不要担心拷贝/lib/libc.so.4.6.29, 因为程序在稍微旧一些的版本上也能很好地工作。 然而,如果喜欢的话,您可以替换libc.so,变成这样:
/compat/linux/lib/libc.so.4.6.29 /compat/linux/lib/libc.so.4 -> libc.so.4.6.29
Note: 符号链接机制仅仅是Linux程序需要的。 FreeBSD的运行时连接器会自己寻找匹配的主修订号,您不需要为此担心。
ELF格式的程序需要一步额外的步骤“标记”。如果您尝试运行没有标记的ELF程序, 您会得到像下面这样的错误信息:
% ./my-linux-elf-binary ELF binary type not known Abort
为了帮助FreeBSD内核分辨FreeBSD ELF程序和Linux程序,要使用brandelf(1)工具:
% brandelf -t Linux my-linux-elf-binary
GNU工具现在会自动把适当的标记信息放到ELF程序中,您以后遇到这个问题的机会越来越少。
如果DNS不能正常工作或是您得到下列信息:
resolv+: "bind" is an invalid keyword resolv+: "hosts" is an invalid keyword
您就需要配置/compat/linux/etc/host.conf文件,此文件包含:
order hosts, bind multi on
order这一行指出/etc/hosts先被搜索再接着搜索DNS。 如果/compat/linux/etc/host.conf没有被安装,Linux程序会读取FreeBSD的 /etc/host.conf然后提示不兼容的FreeBSD语法。 如果您没有使用/etc/resolv.conf 文件设置DNS,应该删除bind。
这节描述在FreeBSD系统上安装Linux版的Mathematica 4.X。
Linux版Mathematica在FreeBSD下运行的很好,但是 由Wolfram打包的二进制程序需要标记才能让FreeBSD知道需要使用Linux ABI来执行它们。
Linux版的Mathematica 或Mathematica for Students 可以从http://www.wolfram.com/直接定购。
Linux程序可以在Wolfram发布的CDROM的Mathematica Unix目录中找到。 您必须将这个目录树拷贝到本地硬盘上,以便您能在运行安装程序之前用brandelf(1) 来标记Linux程序:
# mount /cdrom # cp -rp /cdrom/Unix/ /localdir/ # brandelf -t Linux /localdir/Files/SystemFiles/Kernel/Binaries/Linux/* # brandelf -t Linux /localdir/Files/SystemFiles/FrontEnd/Binaries/Linux/* # brandelf -t Linux /localdir/Files/SystemFiles/Installation/Binaries/Linux/* # brandelf -t Linux /localdir/Files/SystemFiles/Graphics/Binaries/Linux/* # brandelf -t Linux /localdir/Files/SystemFiles/Converters/Binaries/Linux/* # brandelf -t Linux /localdir/Files/SystemFiles/LicenseManager/Binaries/Linux/mathlm # cd /localdir/Installers/Linux/ # ./MathInstaller
另外,您也可以简单地用下面的命令将默认的ELF标记成Linux:
# sysctl kern.fallback_elf_brand=3
这将让FreeBSD知道没有标记的ELF程序使用Linux ABI,所以您将可以直接从CDROM来运行安装程序。
在您运行Mathematica之前,您必须从Wolfram获得对应您的“机器ID”的密码。
一旦您安装了Linux运行时库,并把Mathematica解包开了, 您可以在安装目录通过运行mathinfo来获得您的“机器ID”。 这个机器ID是以您的第一块以太网卡的MAC地址为基础的。
# cd /localdir/Files/SystemFiles/Installation/Binaries/Linux # mathinfo disco.example.com 7115-70839-20412
当您用email,电话或者传真向Wolfram注册时,给他们您的“机器ID”,就会返回一个包含一组数字的密码。 当您第一次运行Mathematica时就需要得到的密码。
Mathematica 使用一些特殊的字体来显示字符, 与现在使用的标准字体不一样(integrals, sums, Greek letters,等等)。 X协议要求将这些字体安装在 本地。 这意味着您需要从Mathematica的CDROM里面拷贝这些字体并安装到本地。 这些字体一般在CDROM的/cdrom/Unix/Files/SystemFiles/Fonts里面, 或本地硬盘的/usr/local/mathematica/SystemFiles/Fonts。 实际的字体在Type1和X子目录。有很多种方法来使用它们。
第一种方法是把字体拷贝到一个已存在的目录/usr/X11R6/lib/X11/fonts。 这需要编辑fonts.dir文件。添加字体名字进去,并改变第一行的字体数目。 另外,您也需要在拷贝字体的目录下执行mkfontdir(1)。
第二种方法是拷贝目录到/usr/X11R6/lib/X11/fonts:
# cd /usr/X11R6/lib/X11/fonts # mkdir X # mkdir MathType1 # cd /cdrom/Unix/Files/SystemFiles/Fonts # cp X/* /usr/X11R6/lib/X11/fonts/X # cp Type1/* /usr/X11R6/lib/X11/fonts/MathType1 # cd /usr/X11R6/lib/X11/fonts/X # mkfontdir # cd ../MathType1 # mkfontdir
现在,添加新的字体目录到您的字体目录:
# xset fp+ /usr/X11R6/lib/X11/fonts/X # xset fp+ /usr/X11R6/lib/X11/fonts/MathType1 # xset fp rehash
如果您正使用 Xorg 服务器, 则可以通过修改 xorg.conf 文件来自动加载它们。
Note: 对于 XFree86 服务器, 配置文件的名字是 XF86Config。
如果您没有一个叫/usr/X11R6/lib/X11/fonts/Type1的目录, 您可以把MathType1改成Type1。
Maple™是一个类似于Mathematica的商业数学软件。 您可以从http://www.maplesoft.com/买到这个软件并注册得到一个使用许可。 要在FreeBSD上安装这个软件,请按照下面的步骤:
从软件的发行包执行INSTALL shell脚本。当进入安装程序的提示符时, 选择“RedHat” 选项。典型的安装目录是/usr/local/maple。
如果您不这样做,可以从Maple Waterloo Software (http://register.maplesoft.com/) 为Maple订购一个许可。 然后拷贝到/usr/local/maple/license/license.dat。
通过运行Maple中的INSTALL_LIC安装shell脚本来 安装FLEXlm许可管理器。 指定许可服务器为您的机器名。
像下面这样Patch您的/usr/local/maple/bin/maple.system.type 文件:
----- snip ------------------
*** maple.system.type.orig Sun Jul 8 16:35:33 2001
--- maple.system.type Sun Jul 8 16:35:51 2001
***************
*** 72,77 ****
--- 72,78 ----
# the IBM RS/6000 AIX case
MAPLE_BIN="bin.IBM_RISC_UNIX"
;;
+ "FreeBSD"|\
"Linux")
# the Linux/x86 case
# We have two Linux implementations, one for Red Hat and
----- snip end of patch -----
请注意"FreeBSD"|\后面没有空格。
这个补丁指示Maple把“FreeBSD”识别为一种Linux系统。 bin/maple shell脚本调用bin/maple.system.type 脚本执行uname -a来查找操作系统名,根据操作系统名,就知道该使用哪个程序。
启动许可服务器。
下面的脚本,安装成/usr/local/etc/rc.d/lmgrd.sh, 是很方便的启动lmgrd的方法:
----- snip ------------
#! /bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin
PATH=${PATH}:/usr/local/maple/bin:/usr/local/maple/FLEXlm/UNIX/LINUX
export PATH
LICENSE_FILE=/usr/local/maple/license/license.dat
LOG=/var/log/lmgrd.log
case "$1" in
start)
lmgrd -c ${LICENSE_FILE} 2>> ${LOG} 1>&2
echo -n " lmgrd"
;;
stop)
lmgrd -c ${LICENSE_FILE} -x lmdown 2>> ${LOG} 1>&2
;;
*)
echo "Usage: `basename $0` {start|stop}" 1>&2
exit 64
;;
esac
exit 0
----- snip ------------
开始测试Maple:
% cd /usr/local/maple/bin % ./xmaple
您应该成功启动起来了。记得写信告诉Maplesoft您想要一个本地FreeBSD版本!
FLEXlm许可管理器可能是一个使用比较困难的工具。 关于它的额外的文档可以在http://www.globetrotter.com/找到。
lmgrd对许可文件非常挑剔,有一点问题就会core dump。 正确的许可文件看起来像下面这样:
# =======================================================
# License File for UNIX Installations ("Pointer File")
# =======================================================
SERVER chillig ANY
#USE_SERVER
VENDOR maplelmg
FEATURE Maple maplelmg 2000.0831 permanent 1 XXXXXXXXXXXX \
PLATFORMS=i86_r ISSUER="Waterloo Maple Inc." \
ISSUED=11-may-2000 NOTICE=" Technische Universitat Wien" \
SN=XXXXXXXXX
Note: 序列号被'X'代替了。 chillig是主机名。
只要不修改“FEATURE”行,编辑后一般都能工作。
这一节描述在一个 FreeBSD 上安装Linux版本的MATLAB® version 6.5。 它工作的很好,除了Java Virtual Machine™例外(参考 第 10.5.3 节)。
Linux版本的MATLAB可以从MathWorkshttp://www.mathworks.com订购。请确定您也得到了许可文件或安装说明。 等您成功后,让他们知道您想要一个本地FreeBSD版本。
请按照下面的步骤安装MATLAB:
以root身份插入安装CD并挂载上。 推荐使用安装脚本,为了启动安装脚本,键入:
# /compat/linux/bin/sh /cdrom/install
Tip: 安装程序是图形的。如果您得到不能打开显示的错误,可以键入 setenv HOME ~USER, USER是您su(1)成的用户。
当问MATLAB的根目录时,键入: /compat/linux/usr/local/matlab。
Tip: 为了下面的安装过程更方便,在shell提示符下键入 set MATLAB=/compat/linux/usr/local/matlab
根据获得MATLAB许可时的指示来编辑许可文件。
Tip: 您可以用您喜欢的编辑器提前准备这个文件,并在安装程序要您编辑它之前拷贝到 $MATLAB/license.dat
完成安装过程
到这里,您的MATLAB安装已经完成了。 接下来的步骤是让它和您的FreeBSD 系统“胶合”在一起。
为许可管理器建立符号链接的脚本:
# ln -s $MATLAB/etc/lmboot /usr/local/etc/lmboot_TMW # ln -s $MATLAB/etc/lmdown /usr/local/etc/lmdown_TMW
建立启动文件/usr/local/etc/rc.d/flexlm.sh。 下面的例子是一个$MATLAB/etc/rc.lm.glnx86的修改版本。 变化的是文件的位置,和模拟Linux下许可管理器的启动。
#!/bin/sh
case "$1" in
start)
if [ -f /usr/local/etc/lmboot_TMW ]; then
/compat/linux/bin/sh /usr/local/etc/lmboot_TMW -u username && echo 'MATLAB_lmgrd'
fi
;;
stop)
if [ -f /usr/local/etc/lmdown_TMW ]; then
/compat/linux/bin/sh /usr/local/etc/lmdown_TMW > /dev/null 2>&1
fi
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
;;
esac
exit 0
Important: 必须使脚本文件可执行:
# chmod +x /usr/local/etc/rc.d/flexlm.sh您也必须替换username为机器上的一个用户(不要是root)。
用命令启动许可管理器:
# /usr/local/etc/rc.d/flexlm.sh start
改变Java运行时环境(JRE),链接到一个可以工作的版本:
# cd $MATLAB/sys/java/jre/glnx86/ # unlink jre; ln -s ./jre1.1.8 ./jre
把下面的启动脚本放到/usr/local/bin/matlab:
#!/bin/sh /compat/linux/bin/sh /compat/linux/usr/local/matlab/bin/matlab "$@"
然后输入命令chmod +x /usr/local/bin/matlab。
Tip: 依赖于您的emulators/linux_base版本, 您在运行这个脚本时可能会出错,为了避免错误,编辑/compat/linux/usr/local/matlab/bin/matlab, 把这行:
if [ `expr "$lscmd" : '.*->.*'` -ne 0 ]; then(在13.0.1版本是在第410行)改成:
if test -L $newbase; then
The following is needed to solve a problem with MATLAB not exiting correctly.
Create a file $MATLAB/toolbox/local/finish.m, and in it put the single line:
! $MATLAB/bin/finish.sh
Note: The $MATLAB is literal.
Tip: In the same directory, you will find the files finishsav.m and finishdlg.m, which let you save your workspace before quitting. If you use either of them, insert the line above immediately after the save command.
Create a file $MATLAB/bin/finish.sh, which will contain the following:
#!/usr/compat/linux/bin/sh (sleep 5; killall -1 matlab_helper) & exit 0
Make the file executable:
# chmod +x $MATLAB/bin/finish.sh
确信您已经从 Ports Collection 安装了 emulators/linux_base 和 devel/linux_devtools。 如果在使用这些 port 时遇到困难, 您可能就不得不从 package, 或使用较早版本的 Ports Collection 来安装。
如果要运行智能代理, 您还需要安装 Red Hat Tcl 软件包: tcl-8.0.3-20.i386.rpm。 用于安装官方的 RPM (archivers/rpm) 软件包的命令是:
# rpm -i --ignoreos --root /compat/linux --dbpath /var/lib/rpm package
包的安装通常不会出错。
安装Oracle之前,您需要设置正确的环境。 这节只描述了在FreeBSD下安装Linux版本Oracle需要特别注意的地方。 不像在Oracle安装指南中所描述的那样。
正如Oracle安装指南描述的那样,您需要设置共享内存的最大值。 不要在FreeBSD下使用SHMMAX,SHMMAX 只是用来计算SHMMAXPGS和PGSIZE的。 因此要使用SHMMAXPGS。所有其他要使用的选项可以参考指南,例如:
options SHMMAXPGS=10000 options SHMMNI=100 options SHMSEG=10 options SEMMNS=200 options SEMMNI=70 options SEMMSL=61
设置这些选项来适应 Oracle的使用。
当然,确信您的内核配置文件中有下面这些选项:
options SYSVSHM #SysV shared memory options SYSVSEM #SysV semaphores options SYSVMSG #SysV interprocess communication
创建一个oracle帐号,正如您创建其他帐号一样。 oracle 帐号特殊的地方是您需要给它一个Linux shell。 添加/compat/linux/bin/bash到/etc/shells, 然后设置oracle帐号的shell为/compat/linux/bin/bash。
除了普通的Oracle变量外, 比如ORACLE_HOME和ORACLE_SID,您还必须设置下面的环境变量:
| 变量 | 值 |
|---|---|
| LD_LIBRARY_PATH | $ORACLE_HOME/lib |
| CLASSPATH | $ORACLE_HOME/jdbc/lib/classes111.zip |
| PATH | /compat/linux/bin /compat/linux/sbin /compat/linux/usr/bin /compat/linux/usr/sbin /bin /sbin /usr/bin /usr/sbin /usr/local/bin $ORACLE_HOME/bin |
建议在.profile里面设置所有的环境变量。一个完整的例子是:
ORACLE_BASE=/oracle; export ORACLE_BASE ORACLE_HOME=/oracle; export ORACLE_HOME LD_LIBRARY_PATH=$ORACLE_HOME/lib export LD_LIBRARY_PATH ORACLE_SID=ORCL; export ORACLE_SID ORACLE_TERM=386x; export ORACLE_TERM CLASSPATH=$ORACLE_HOME/jdbc/lib/classes111.zip export CLASSPATH PATH=/compat/linux/bin:/compat/linux/sbin:/compat/linux/usr/bin PATH=$PATH:/compat/linux/usr/sbin:/bin:/sbin:/usr/bin:/usr/sbin PATH=$PATH:/usr/local/bin:$ORACLE_HOME/bin export PATH
由于 Linux 模拟器的一处小小的差异, 您必须在 /var/tmp 中创建一个名为 .oracle 的目录才能够启动安装程序。 需要把它设置为属于 oracle 用户。 接下来, 您就可以毫无问题地安装 Oracle 了。 如果您遇到问题, 请首先检查 Oracle 软件包和/或配置文件!安装完 Oracle 之后, 使用下面两节中所说的补丁。
一个比较常见的问题是 TCP 协议适配器安装不正确。 其结果是将无法进行任何的 TCP 侦听。 下面的操作将帮助解决此问题:
# cd $ORACLE_HOME/network/lib # make -f ins_network.mk ntcontab.o # cd $ORACLE_HOME/lib # ar r libnetwork.a ntcontab.o # cd $ORACLE_HOME/network/lib # make -f ins_network.mk install
不要忘记了再运行一下root.sh!
从CD安装Oracle时,一些工作需要在root下执行, 这些工作都被记录在一个叫root.sh的脚本里面。这个脚本被写在orainst目录。 为了使用root.sh来正确定位chown或在Linux本地shell下执行脚本, 应该对它进行修补。
*** orainst/root.sh.orig Tue Oct 6 21:57:33 1998 --- orainst/root.sh Mon Dec 28 15:58:53 1998 *************** *** 31,37 **** # This is the default value for CHOWN # It will redefined later in this script for those ports # which have it conditionally defined in ss_install.h ! CHOWN=/bin/chown # # Define variables to be used in this script --- 31,37 ---- # This is the default value for CHOWN # It will redefined later in this script for those ports # which have it conditionally defined in ss_install.h ! CHOWN=/usr/sbin/chown # # Define variables to be used in this script
当您不从CD安装Oracle时, 您可以从源代码来修补root.sh。 它叫做rthd.sh,定位在源代码树的orainst目录。
genclntsh脚本用来创建一个简单的共享客户端库。在建立demos时被使用。 完成补丁后就注释掉了下面的PATH变量:
*** bin/genclntsh.orig Wed Sep 30 07:37:19 1998 --- bin/genclntsh Tue Dec 22 15:36:49 1998 *************** *** 32,38 **** # # Explicit path to ensure that we're using the correct commands #PATH=/usr/bin:/usr/ccs/bin export PATH ! PATH=/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin export PATH # # each product MUST provide a $PRODUCT/admin/shrept.lst --- 32,38 ---- # # Explicit path to ensure that we're using the correct commands #PATH=/usr/bin:/usr/ccs/bin export PATH ! #PATH=/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin export PATH # # each product MUST provide a $PRODUCT/admin/shrept.lst
在FreeBSD上安装的SAP系统不会被SAP 支持团队-- 所支持——他们只支持某些特定的平台。
这篇文章描述了在FreeBSD系统上安装一个带有Oracle Database for Linux的SAP R/3 System,包括 FreeBSD的安装和Oracle的安装。 下面将描述两个不同的配置:
在FreeBSD 4.3-STABLE上安装带有Oracle 8.0.5 的SAP R/3 4.6B (IDES)。
在FreeBSD 4.5-STABLE上安装带有Oracle 8.1.7的 SAP R/3 4.6C。
虽然这篇文章深入地描述了许多重要的安装步骤,但它不能取代Oracle和 SAP R/3的安装指南。
请参考SAP R/3 Linux edition自带的文档和 Oracle的特殊问题。
下面的CD-ROMs被用作SAP的安装:
| 名称 | 号码 | 描述 |
|---|---|---|
| KERNEL | 51009113 | SAP Kernel Oracle / Installation / AIX, Linux, Solaris |
| RDBMS | 51007558 | Oracle / RDBMS 8.0.5.X / Linux |
| EXPORT1 | 51010208 | IDES / DB-Export / Disc 1 of 6 |
| EXPORT2 | 51010209 | IDES / DB-Export / Disc 2 of 6 |
| EXPORT3 | 51010210 | IDES / DB-Export / Disc 3 of 6 |
| EXPORT4 | 51010211 | IDES / DB-Export / Disc 4 of 6 |
| EXPORT5 | 51010212 | IDES / DB-Export / Disc 5 of 6 |
| EXPORT6 | 51010213 | IDES / DB-Export / Disc 6 of 6 |
此外,我们使用Oracle 8 Server (Linux版本的8.0.5预览版,Linux内核是2.0.33)和 FreeBSD 4.3-STABLE。
| 名称 | 号码 | 描述 |
|---|---|---|
| KERNEL | 51014004 | SAP Kernel Oracle / SAP Kernel Version 4.6D / DEC, Linux |
| RDBMS | 51012930 | Oracle 8.1.7/ RDBMS / Linux |
| EXPORT1 | 51013953 | Release 4.6C SR2 / Export / Disc 1 of 4 |
| EXPORT1 | 51013953 | Release 4.6C SR2 / Export / Disc 2 of 4 |
| EXPORT1 | 51013953 | Release 4.6C SR2 / Export / Disc 3 of 4 |
| EXPORT1 | 51013953 | Release 4.6C SR2 / Export / Disc 4 of 4 |
| LANG1 | 51013954 | Release 4.6C SR2 / Language / DE, EN, FR / Disc 1 of 3 |
依赖于您要安装的语言,可能需要额外的语言CDs。 这儿我们只使用DE和EN,所以只需要第一张语言CD。 还要注意的是所有EXPORT CDs的号码是一样的。 其他3张语言CDs的号码也一样(这和4.6B IDES release CD的号码不同)。
安装使用SAP R/3之前,请先看看下面的注释:
| 号码 | 标题 |
|---|---|
| 0171356 | SAP Software on Linux: Essential Comments |
| 0201147 | INST: 4.6C R/3 Inst. on UNIX - Oracle |
| 0373203 | Update / Migration Oracle 8.0.5 --> 8.0.6/8.1.6 LINUX |
| 0072984 | Release of Digital UNIX 4.0B for Oracle |
| 0130581 | R3SETUP step DIPGNTAB terminates |
| 0144978 | Your system has not been installed correctly |
| 0162266 | Questions and tips for R3SETUP on Windows NT / W2K |
| 号码 | 标题 |
|---|---|
| 0015023 | Initializing table TCPDB (RSXP0004) (EBCDIC) |
| 0045619 | R/3 with several languages or typefaces |
| 0171356 | SAP Software on Linux: Essential Comments |
| 0195603 | RedHat 6.1 Enterprise version: Known problems |
| 0212876 | The new archiving tool SAPCAR |
| 0300900 | Linux: Released DELL Hardware |
| 0377187 | RedHat 6.2: important remarks |
| 0387074 | INST: R/3 4.6C SR2 Installation on UNIX |
| 0387077 | INST: R/3 4.6C SR2 Inst. on UNIX - Oracle |
| 0387078 | SAP Software on UNIX: OS Dependencies 4.6C SR2 |
下面的设备配置对SAP R/3 System来说已经足够了。如果 用于生产用途,就需要更强的配置:
| 组件 | 4.6B | 4.6C |
|---|---|---|
| 处理器 | 2 x 800MHz Pentium III | 2 x 800MHz Pentium III |
| 内存 | 1GB ECC | 2GB ECC |
| Hard Disk Space | 50-60GB (IDES) | 50-60GB (IDES) |
用于生产使用,就需要使用带大缓存的Xeon处理器,和高速大容量磁盘(SCSI, RAID hardware controller),以及USV 和ECC-RAM内存。 配置IDES System前需要大量的硬盘空间,因为安装时将创建27 GB的数据库文件。 这些空间用于系统和数据的初始化也是足够的。
对于这个安装,我的硬件配置如下:带2个800 MHz Pentium III处理器的主板, Adaptec® 29160 Ultra160 SCSI适配器(能够访问40/80 GB DLT磁带机和CDROM), Mylex® AcceleRAID™ (2个通道, firmware 6.00-1-00 with 32 MB RAM)。 Mylex RAID controller被挂上2个17 GB(mirrored)硬盘和4个36 GB硬盘(RAID level 5)。
对于这个安装,配置是Dell™ PowerEdge™ 2500,带2个1000 MHz Pentium III处理器的 主板(256 kB Cache), 2 GB PC133 ECC SDRAM, PERC/3 DC PCI RAID Controller with 128 MB,和一个EIDE DVD-ROM驱动器。RAID controller被挂上2个18 GB硬盘(mirrored) 和4个36 GB硬盘(RAID level 5)。
首先需要安装 FreeBSD。 有很多方法来完成这个工作 (FreeBSD 4.3 通过 FTP 安装, 而 FreeBSD 4.5 则是从 RELEASE CD 安装的)。 要了解进一步的情况请参考 第 2.13 节。
为了简单,对SAP R/3 46B和SAP R/3 46C SR2的安装使用相同的磁盘划分。只是设备名换了,因为是安装在不同的硬件上 (/dev/da 和 /dev/amr, 所以如果是使用AMI MegaRAID®,我们能看到 /dev/amr0s1a 代替了 /dev/da0s1a):
| 文件系统 | 尺寸(1k-blocks) | 尺寸(GB) | 挂载点 |
|---|---|---|---|
| /dev/da0s1a | 1.016.303 | 1 | / |
| /dev/da0s1b | 6 | swap | |
| /dev/da0s1e | 2.032.623 | 2 | /var |
| /dev/da0s1f | 8.205.339 | 8 | /usr |
| /dev/da1s1e | 45.734.361 | 45 | /compat/linux/oracle |
| /dev/da1s1f | 2.032.623 | 2 | /compat/linux/sapmnt |
| /dev/da1s1g | 2.032.623 | 2 | /compat/linux/usr/sap |
预先用Mylex 或PERC/3 RAID 软件配置和初始化这两个逻辑驱动器。 改变BIOS的引导顺序来启动软件。
请注意这里的磁盘划分和SAP推荐的是不一样的,SAP建议把 Oracle子目录(及其他子目录)分离开来, 我决定只简单的创建几个子目录。
首先linux_base port需要安装(以root身份):
# cd /usr/ports/emulators/linux_base # make install distclean
如果您想根据第 10.6 节在FreeBSD上安装 Oracle :
# cd /usr/ports/devel/linux_devtools # make install distclean
Linux开发环境只是安装给SAP R/3 46B IDES的,如果Oracle DB不是在这个 FreeBSD系统上重新链接,它就不需要了。
为了启动R3SETUP程序, PAM支持是必需的。 第一次安装SAP到FreeBSD 4.3-STABLE时我们先安装了 PAM的所有依赖包再安装PAM包,它可以工作。对于SAP R/3 4.6C SR2我们 直接安装PAM RPM也可以工作,所以依赖包不是必需的:
# rpm -i --ignoreos --nodeps --root /compat/linux --dbpath /var/lib/rpm \ pam-0.68-7.i386.rpm
要让Oracle 8.0.5运行智能代理, 我们需要安装RedHat Tcl包tcl-8.0.5-30.i386.rpm (否则重新链接Oracle不能工作)。 重新链接Oracle时还有其他要注意的地方, 但那是Oracle Linux的问题,不是FreeBSD的问题。
添加 linprocfs 到 /etc/fstab 是个好主意。 要了解进一步的细节, 请参考 linprocfs(5) 联机手册。 另一个是设置 kern.fallback_elf_brand=3, 这可以通过 /etc/sysctl.conf 文件来完成。
对简单的安装,创建下面的文件系统就够了:
| mount point | size in GB |
|---|---|
| /compat/linux/oracle | 45 GB |
| /compat/linux/sapmnt | 2 GB |
| /compat/linux/usr/sap | 2 GB |
创建一些链接也是必要的,否则SAP安装程序在检查创建的链接时 会报错:
# ln -s /compat/linux/oracle /oracle # ln -s /compat/linux/sapmnt /sapmnt # ln -s /compat/linux/usr/sap /usr/sap
安装时可能出现的错误(对于PRD系统和SAP R/3 4.6C SR2 的安装):
INFO 2002-03-19 16:45:36 R3LINKS_IND_IND SyLinkCreate:200
Checking existence of symbolic link /usr/sap/PRD/SYS/exe/dbg to
/sapmnt/PRD/exe. Creating if it does not exist...
WARNING 2002-03-19 16:45:36 R3LINKS_IND_IND SyLinkCreate:400
Link /usr/sap/PRD/SYS/exe/dbg exists but it points to file
/compat/linux/sapmnt/PRD/exe instead of /sapmnt/PRD/exe. The
program cannot go on as long as this link exists at this
location. Move the link to another location.
ERROR 2002-03-19 16:45:36 R3LINKS_IND_IND Ins_SetupLinks:0
can not setup link '/usr/sap/PRD/SYS/exe/dbg' with content
'/sapmnt/PRD/exe'
SAP R/3需要两个用户和3个组。 用户名依赖于包含3个字母的SAP系统ID(SID)。一些SIDs 被SAP保留(例如SAP和NIX)。 完成的列表参考SAP文档。对于IDES的安装,我们使用IDS, 对于4.6C SR2安装,使用PRD。 这样我们定义了下面的几个组:
对于默认的Oracle安装,只有dba组被使用。 和oper组一样,我们也可以使用dba组 (更详细的信息参考Oracle和 SAP文档)。
我们也需要下面的用户
| 用户ID | 用户名 | 普通名称 | 组 | 附加组 | 描述 |
|---|---|---|---|---|---|
| 1000 | idsadm/prdadm | sidadm | sapsys | oper | SAP Administrator |
| 1002 | oraids/oraprd | orasid | dba | oper | Oracle Administrator |
使用adduser(8)添加用户要求“SAP Administrator”有下面的记录 (请注意shell和home目录):
Name: sidadm Password: ****** Fullname: SAP Administrator SID Uid: 1000 Gid: 101 (sapsys) Class: Groups: sapsys dba HOME: /home/sidadm Shell: bash (/compat/linux/bin/bash)
对于“Oracle Administrator”:
Name: orasid Password: ****** Fullname: Oracle Administrator SID Uid: 1002 Gid: 100 (dba) Class: Groups: dba HOME: /oracle/sid Shell: bash (/compat/linux/bin/bash)
在您使用组dba和oper的情况下您也应该包括 oper。
这些目录通常建立在不同的文件系统上。这完全依赖于您的需求。 我们选择把它们建立在同一个目录:
首先我们将设置一些目录的所有者和权限(以root身份设置):
# chmod 775 /oracle # chmod 777 /sapmnt # chown root:dba /oracle # chown sidadm:sapsys /compat/linux/usr/sap # chmod 775 /compat/linux/usr/sap
然后我们以orasid身份创建目录, 这些目录将成为/oracle/SID的子目录:
# su - orasid # cd /oracle/SID # mkdir mirrlogA mirrlogB origlogA origlogB # mkdir sapdata1 sapdata2 sapdata3 sapdata4 sapdata5 sapdata6 # mkdir saparch sapreorg # exit
对于Oracle 8.1.7的安装,需要一些额外的目录:
# su - orasid # cd /oracle # mkdir 805_32 # mkdir client stage # mkdir client/80x_32 # mkdir stage/817_32 # cd /oracle/SID # mkdir 817_32
Note: 目录client/80x_32必须是这个名字,不要用其他数字或字母来替换x。
第三步我们要以sidadm身份创建目录:
# su - sidadm # cd /usr/sap # mkdir SID # mkdir trans # exit
SAP R/3在/etc/services里面需要一些条目, 这些不会在安装过程中被正确设置,请添加下面的条目:
sapdp00 3200/tcp # SAP Dispatcher. 3200 + Instance-Number sapgw00 3300/tcp # SAP Gateway. 3300 + Instance-Number sapsp00 3400/tcp # 3400 + Instance-Number sapms00 3500/tcp # 3500 + Instance-Number sapmsSID 3600/tcp # SAP Message Server. 3600 + Instance-Number sapgw00s 4800/tcp # SAP Secure Gateway 4800 + Instance-Number
SAP至少要求两个本地化设置,它不是RedHat的默认安装。 SAP提供从他们的FTP服务器下载必需的RPMs(只有您是OSS的客户才能访问)。 看注解0171356查找您需要的RPMs列表。
也可以只创建适当的链接(例如从de_DE到en_US), 但是我们不推荐在生产系统上这样做(尽管它让IDES system工作的没有一点问题)。 下面的本地化设置是必需的:
de_DE.ISO-8859-1 en_US.ISO-8859-1
像这样创建链接
# cd /compat/linux/usr/share/locale # ln -s de_DE de_DE.ISO-8859-1 # ln -s en_US en_US.ISO-8859-1
如果他们不出现,在安装时可能会有问题。如果忽略这些问题(通过设置CENTRDB.R3S文件 里面的STATUS为OK),不费一番周折, 您就别想登陆进SAP系统。
SAP R/3 需要许多资源。我因此添加了下面的参数在我的内核配置文件中:
# Set these for memory pigs (SAP and Oracle): options MAXDSIZ="(1024*1024*1024)" options DFLDSIZ="(1024*1024*1024)" # System V options needed. options SYSVSHM #SYSV-style shared memory options SHMMAXPGS=262144 #max amount of shared mem. pages #options SHMMAXPGS=393216 #use this for the 46C inst.parameters options SHMMNI=256 #max number of shared memory ident if. options SHMSEG=100 #max shared mem.segs per process options SYSVMSG #SYSV-style message queues options MSGSEG=32767 #max num. of mes.segments in system options MSGSSZ=32 #size of msg-seg. MUST be power of 2 options MSGMNB=65535 #max char. per message queue options MSGTQL=2046 #max amount of msgs in system options SYSVSEM #SYSV-style semaphores options SEMMNU=256 #number of semaphore UNDO structures options SEMMNS=1024 #number of semaphores in system options SEMMNI=520 #number of semaphore identifiers options SEMUME=100 #number of UNDO keys
这篇文档中指定的最小值是来自SAP。没有针对Linux的描述,看看HP-UX的相关介绍了解更多信息 。 安装4.6C SR2需要更多的内存,共享内存比SAP和 Oracle需要的还多,所以尽量为共享内存选一个大值。
Note: FreeBSD 4.5在i386上缺省应该设置MAXDSIZ和 DFLDSIZ到1 GB。否则,奇怪的错误像 “ORA-27102: out of memory”和 “Linux Error: 12: Cannot allocate memory” 会出现。
在安装过程中,有许多CDROM要被挂上和卸下。建议您有多个CDROM驱动器, 您可以把它们都挂上。我决定拷贝CDROM的内容到相应的目录:
/oracle/SID/sapreorg/cd-name
对于4.6B/IDES的安装,cd-name是KERNEL, RDBMS, EXPORT1, EXPORT2,EXPORT3, EXPORT4, EXPORT5 和 EXPORT6中的一个,对于4.6C SR2的安装,是 KERNEL, RDBMS, DISK1,DISK2, DISK3,DISK4和 LANG中的一个。 所有挂载上的CDs里面的文件名都应该是大写, 否则要用-g选项来挂载。所以使用下面的命令:
# mount_cd9660 -g /dev/cd0a /mnt # cp -R /mnt/* /oracle/SID/sapreorg/cd-name # umount /mnt
首先您需要准备一个install目录:
# cd /oracle/SID/sapreorg # mkdir install # cd install
然后运行安装脚本,他会拷贝所有相关的文件到install目录:
# /oracle/SID/sapreorg/KERNEL/UNIX/INSTTOOL.SH
由于这是一个完全定制化的SAP R/3演示系统的IDES安装(4.6B), 我们有6个而不仅仅是3个EXPORT CDs。 基于这点,安装模板CENTRDB.R3S是用来安装一个标准的中央环境 (R/3和数据库),而不是IDES中央环境, 所以从EXPORT1目录拷贝相应的CENTRDB.R3S, 否则R3SETUP只要求3个EXPORT CDs。
新的SAP 4.6C SR2发行版带有4张EXPORT CDs。 控制安装步骤的参数文件是CENTRAL.R3S。 和早期发行版不同,它没有分开的中央环境的安装模板。
安装完后,使用hostname命令得到SAP需要的主机名, 不需要完整的域名。 所以为orasid和 sidadm 直接设置主机名,或设置别名alias hostname='hostname -s'。 可以在.profile和.login里面为这两个用户设置。
确定LD_LIBRARY_PATH设置正确:
# export LD_LIBRARY_PATH=/oracle/IDS/lib:/sapmnt/IDS/exe:/oracle/805_32/lib
从安装目录以root身份启动R3SETUP:
# cd /oracle/IDS/sapreorg/install # ./R3SETUP -f CENTRDB.R3S
这个脚本会问一些问题(括号里面是缺省值,后面是实际输入):
| 问题 | 缺省值 | 输入 |
|---|---|---|
| Enter SAP System ID | [C11] | IDSEnter |
| Enter SAP Instance Number | [00] | Enter |
| Enter SAPMOUNT Directory | [/sapmnt] | Enter |
| Enter name of SAP central host | [troubadix.domain.de] | Enter |
| Enter name of SAP db host | [troubadix] | Enter |
| Select character set | [1] (WE8DEC) | Enter |
| Enter Oracle server version (1) Oracle 8.0.5, (2) Oracle 8.0.6, (3) Oracle 8.1.5, (4) Oracle 8.1.6 | 1Enter | |
| Extract Oracle Client archive | [1] (Yes, extract) | Enter |
| Enter path to KERNEL CD | [/sapcd] | /oracle/IDS/sapreorg/KERNEL |
| Enter path to RDBMS CD | [/sapcd] | /oracle/IDS/sapreorg/RDBMS |
| Enter path to EXPORT1 CD | [/sapcd] | /oracle/IDS/sapreorg/EXPORT1 |
| Directory to copy EXPORT1 CD | [/oracle/IDS/sapreorg/CD4_DIR] | Enter |
| Enter path to EXPORT2 CD | [/sapcd] | /oracle/IDS/sapreorg/EXPORT2 |
| Directory to copy EXPORT2 CD | [/oracle/IDS/sapreorg/CD5_DIR] | Enter |
| Enter path to EXPORT3 CD | [/sapcd] | /oracle/IDS/sapreorg/EXPORT3 |
| Directory to copy EXPORT3 CD | [/oracle/IDS/sapreorg/CD6_DIR] | Enter |
| Enter path to EXPORT4 CD | [/sapcd] | /oracle/IDS/sapreorg/EXPORT4 |
| Directory to copy EXPORT4 CD | [/oracle/IDS/sapreorg/CD7_DIR] | Enter |
| Enter path to EXPORT5 CD | [/sapcd] | /oracle/IDS/sapreorg/EXPORT5 |
| Directory to copy EXPORT5 CD | [/oracle/IDS/sapreorg/CD8_DIR] | Enter |
| Enter path to EXPORT6 CD | [/sapcd] | /oracle/IDS/sapreorg/EXPORT6 |
| Directory to copy EXPORT6 CD | [/oracle/IDS/sapreorg/CD9_DIR] | Enter |
| Enter amount of RAM for SAP + DB | 850Enter (in Megabytes) | |
| Service Entry Message Server | [3600] | Enter |
| Enter Group-ID of sapsys | [101] | Enter |
| Enter Group-ID of oper | [102] | Enter |
| Enter Group-ID of dba | [100] | Enter |
| Enter User-ID of sidadm | [1000] | Enter |
| Enter User-ID of orasid | [1002] | Enter |
| Number of parallel procs | [2] | Enter |
如果没有把CD拷贝到不同的位置,那么SAP安装程序就不能 找到需要的CD(通过CD上的LABEL.ASC来辨别), 它会要求您挂上CD,或键入加载路径。
CENTRDB.R3S不可能是自由出错的, 它再次请求EXPORT4 CD,但是正确的值是6_LOCATI ON,然后7_LOCATION 等,所以您可以键入正确的值。
处理下面提到的问题,一样东西都要直接通过Oracle数据库软件安装的地方。
确定LD_LIBRARY_PATH设置正确。 这和带Oracle 8.0.5的4.6B的安装是不同的:
# export LD_LIBRARY_PATH=/sapmnt/PRD/exe:/oracle/PRD/817_32/lib
以root身份从安装目录启动R3SETUP :
# cd /oracle/PRD/sapreorg/install # ./R3SETUP -f CENTRAL.R3S
这个脚本会问一些问题(括号里面是缺省值,后面是实际输入):
| 问题 | 缺省值 | 输入 |
|---|---|---|
| Enter SAP System ID | [C11] | PRDEnter |
| Enter SAP Instance Number | [00] | Enter |
| Enter SAPMOUNT Directory | [/sapmnt] | Enter |
| Enter name of SAP central host | [majestix] | Enter |
| Enter Database System ID | [PRD] | PRDEnter |
| Enter name of SAP db host | [majestix] | Enter |
| Select character set | [1] (WE8DEC) | Enter |
| Enter Oracle server version (2) Oracle 8.1.7 | 2Enter | |
| Extract Oracle Client archive | [1] (Yes, extract) | Enter |
| Enter path to KERNEL CD | [/sapcd] | /oracle/PRD/sapreorg/KERNEL |
| Enter amount of RAM for SAP + DB | 2044 | 1800Enter (in Megabytes) |
| Service Entry Message Server | [3600] | Enter |
| Enter Group-ID of sapsys | [100] | Enter |
| Enter Group-ID of oper | [101] | Enter |
| Enter Group-ID of dba | [102] | Enter |
| Enter User-ID of oraprd | [1002] | Enter |
| Enter User-ID of prdadm | [1000] | Enter |
| LDAP support | 3Enter (no support) | |
| Installation step completed | [1] (continue) | Enter |
| Choose installation service | [1] (DB inst,file) | Enter |
到目前为止, 安装阶段只在创建用户时给出了一个错误OSUSERDBSID_IND_ORA(创建 用户orasid)和 OSUSERSIDADM_IND_ORA(创建用户sidadm)。
处理下面提到的问题,一样东西都要直接通过Oracle数据库软件安装的地方。
请看相应的SAP注释和 Oracle的关于Linux的Readme 以及Oracle DB可能出现的问题。不是所有的问题都和不兼容库有关。
关于Oracle更多的安装信息,请参考安装Oracle。
如果Oracle 8.0.5要被使用,一些其他的库需要被成功地重新链接, 因为Oracle 8.0.5是与一个老的glibc连接的(Redhat 6.0), 但RedHat 6.1已经使用了一个新的glibc。所以您必须安装下面额外的软件包来保证链接正常:
compat-libs-5.2-2.i386.rpm
compat-glibc-5.2-2.0.7.2.i386.rpm
compat-egcs-5.2-1.0.3a.1.i386.rpm
compat-egcs-c++-5.2-1.0.3a.1.i386.rpm
compat-binutils-5.2-2.9.1.0.23.1.i386.rpm
更多的信息,看相应的SAP注释和Oracle的Readme。 如果这不是选项,您可以使用最初的程序,或使用与最初的Redhat系统重链接的程序。
要编译智能代理,必须安装RedHat Tcl包。如果您不能得到 tcl-8.0.3-20.i386.rpm,一个更新的 tcl-8.0.5-30.i386.rpm也可以用。
除了重新链接,安装是直截了当的:
# su - oraids # export TERM=xterm # export ORACLE_TERM=xterm # export ORACLE_HOME=/oracle/IDS # cd $ORACLE_HOME/orainst_sap # ./orainst
用Enter来确认所有的屏幕直到安装完成,除了您必须取消 Oracle On-Line Text Viewer选项,因为当前Linux下不可用。 Oracle会要求用i386-glibc20-linux-gcc重新链接来 代替gcc,egcs或者i386-redhat-linux-gcc 。
由于时间紧迫,我决定使用Oracle 8.0.5 PreProduction版本。
个安装很容易。挂上CD,启动安装程序。它就会要求Oraclehome目录的定位, 然后拷贝那儿所有的程序。我不删除先前安装的RDBMS。
然后,Oracle数据库就可以毫无问题地运行了。
首先检查用户idsamd (sidadm)和 oraids(orasid)的环境变量。 他们现在都有使用主机名的.profile,.login 和.cshrc文件。在这个例子中,系统的主机名是没有限制的名称, 您必须在所有三个文件中改变hostname为hostname -s。
然后,可以重新启动或继续R3SETUP。 R3SETUP就使用R3load 创建表空间加载数据(对46B IDES,从EXPORT1到EXPORT6,对46C从DISK1到DISK4)。
数据加载完后(可能需要一些时间),需要创建一些口令。对于测试安装,可以使用缺省口令:
| 问题 | 输入 |
|---|---|
| Enter Password for sapr3 | sapEnter |
| Confirum Password for sapr3 | sapEnter |
| Enter Password for sys | change_on_installEnter |
| Confirm Password for sys | change_on_installEnter |
| Enter Password for system | managerEnter |
| Confirm Password for system | managerEnter |
到目前为止,我们只在安装4.6B的过程中dipgntab出现了几个问题。
像下面这样用orasid用户启动 Oracle:
% umask 0; lsnrctl start
另外您可能得到ORA-12546错误,因为sockets没有正确的权限。 看SAP注释072984。
如果您打算倒入non-Latin-1 languages到SAP系统, 您必须更新表的多语言支持。这在SAP OSS注释15023和45619有描述。否则, 您可以在安装SAP的时候忽略这个问题。
Note: 如果您不需要MNLS,还是需要检查表TCPDB和初始化工作是否做了。 更多信息参考SAP注释0015023和0045619。
您不得不要SAP R/3许可密钥。这是必需的, 因为临时许可只能用4个星期。 首先得到硬件的密匙。以用idsadm登入, 然后调用saplicense:
# /sapmnt/IDS/exe/saplicense -get
不带参数调用saplicense会给出一系列选项。 要安装上面的许可密钥,可以这样:
# /sapmnt/IDS/exe/saplicense -install
您要输入下面的值:
SAP SYSTEM ID = SID, 3 chars CUSTOMER KEY = hardware key, 11 chars INSTALLATION NO = installation, 10 digits EXPIRATION DATE = yyyymmdd, usually "99991231" LICENSE KEY = license key, 24 chars
在客户机000中创建一个用户(有些工作需用客户机000来完成,但与用户sap*和 ddic有些不同)。 作为一个用户名,我通常选择wartung (或英语中的service)。 配置文件需要sap_new和 sap_all。对于额外的安全的默认用户口令应当被改变(这包括用户sap*和 ddic)。
在客户端000,用户不同于ddic和sap*,做下面的工作:
| 任务 | 处理 |
|---|---|
| Configure Transport System, e.g. as Stand-Alone Transport Domain Entity | STMS |
| Create / Edit Profile for System | RZ10 |
| Maintain Operation Modes and Instances | RZ04 |
些和所有其他的快速安装步骤在SAP安装指南里面有描述。
文件/oracle/IDS/dbs/initIDS.sap 包含了SAP备份配置。 这儿是使用的磁带机的大小,压缩的类型。要使用sapdba / brbackup来得到这些。 我们可以改变下面的值:
compress = hardware archive_function = copy_delete_save cpio_flags = "-ov --format=newc --block-size=128 --quiet" cpio_in_flags = "-iuv --block-size=128 --quiet" tape_size = 38000M tape_address = /dev/nsa0 tape_address_rew = /dev/sa0
解释
compress:我使用的磁带机是HP DLT1,它支持硬件压缩。
archive_function: 这个定义了保存Oracle文件日志的默认行为:新的日志文件被保存到磁带机上, 保存的日志文件会被再次保存然后再删除。如果您需要恢复数据库, 而其中一个磁带机已经损坏了,这可以防止出现麻烦。
cpio_flags:缺省使用-B来设置块大小为 5120 Bytes。对于DLT-Tapes,HP建议至少32 K,所以我们使用--block-size=128 设置64 K。 --format=newc是必需的,因为我的inode数目超过了65535。 最后一个选项--quiet是必需的,否则brbackup会在用 cpio来输出的时候报错。
cpio_in_flags: 这个标志从磁带机加载回数据。格式是自动验证的。
tape_size: 通常给出了磁带机的存储容量。出于安全原因,这个值要比实际的值要小一些。
tape_address:被cpio使用的非rewindable的设备。
tape_address_rew:被cpio使用的非rewindable的设备。
下面的SAP参数应该在安装以后调整(例子是IDES 46B, 1 GB内存):
| 名称 | 值 |
|---|---|
| ztta/roll_extension | 250000000 |
| abap/heap_area_dia | 300000000 |
| abap/heap_area_nondia | 400000000 |
| em/initial_size_MB | 256 |
| em/blocksize_kB | 1024 |
| ipc/shm_psize_40 | 70000000 |
SAP注释0013026:
SAP注释0157246:
Note: 根据上面的参数,在使用1 GB内存的系统上,可以像下面这样找到内存消耗:
Mem: 547M Active, 305M Inact, 109M Wired, 40M Cache, 112M Buf, 3492K Free
如果出现问题R3SETUP会停止。如果您找到相关的日志文件并修复了问题。 您需要再次重起R3SETUP,对于R3SETUP报的最后一个错误可以使用 REPEAT选项。
要重起R3SETUP,只要使用相应的R3S文件重起:
# ./R3SETUP -f CENTRDB.R3S
for 4.6B, or with
# ./R3SETUP -f CENTRAL.R3S
对4.6C,不管有没有错误都使用CENTRAL.R3S或 DATABASE.R3S。
Note: 在某些阶段,R3SETUP假设database和SAP 进程都启动了。但是如果发生错误使得database没有启动,您就必须手动启动database和SAP。 修复错误后,还需要再次重起R3SETUP。
也不要忘记再次重起Oracle监听。
如果在这阶段R3SETUP报错,编辑R3SETUP使用的模板文件 (CENTRDB.R3S (4.6B)或者CENTRAL.R3S或者DATABASER3S (4.6C))。定位到[OSUSERSIDADM_IND_ORA]或者搜索STATUS=ERROR条目 然后像下面这样编辑它:
HOME=/home/sidadm (was empty)
STATUS=OK (had status ERROR)
然后重起R3SETUP。
R3SETUP也可能在这个阶段报错。修正方法和上面的OSUSERSIDADM_IND_ORA一样。 编辑下面的值:
STATUS=OK
重起R3SETUP。
开始安装之前没有取消Oracle On-Line Text Viewer 既然这个选项当前没有用于Linux,这在安装时是需要标记的,在Oracle 安装中取消它,然后重新安装。
如果这个错误还出现,正确的本地化可能已经丢了。 SAP注释0171356列出了必须的RPMs (比如saplocales-1.0-3, saposcheck-1.0-1 for RedHat 6.1)。 在这个例子中,您忽略了所有相关的错误, STATUS从ERROR到OK然后重起 R3SETUP。SAP系统不会被正确地配置, 您就不能用一个SAPgui连接到系统。 设法使用一个旧的Linux sapgui连接会得到下面的信息:
Sat May 5 14:23:14 2001 *** ERROR => no valid userarea given [trgmsgo. 0401] Sat May 5 14:23:22 2001 *** ERROR => ERROR NR 24 occured [trgmsgi. 0410] *** ERROR => Error when generating text environment. [trgmsgi. 0435] *** ERROR => function failed [trgmsgi. 0447] *** ERROR => no socket operation allowed [trxio.c 3363] Speicherzugriffsfehler
这个问题归咎于SAP R/3不能正确地本地化,也不能自己正确地配置。 要能够连接到SAP, 需要在 DEFAULT.PFL(看注释0043288) 文件中添加下面的记录:
abap/set_etct_env_at_new_mode = 0 install/collate/active = 0 rscp/TCP0B = TCP0B
重起SAP系统。现在,您可以连接到系统, 即使您指定的国家语言不能正常工作。设置完国家后,这些记录会从DEFAULT.PFL文件 删除。然后重新启动SAP系统。
这个错误只会在FreeBSD 4.5上安装Oracle 8.1.7 的时候出现。因为Oracledatabase不能自己正确初始化。 在系统上保留semaphores和shared memory。 然后再次启动数据库会出现ORA-00001错误。
用ipcs -a找到再用ipcrm去掉。
这个错误发生在Oracle 8.1.7上。 如果没有用prdadm用户启动startsap脚本 (例如startsap_majestix_00)会报这个错误。
一种可能的解决方法是用oraprd用户使用svrmgrl:
% svrmgrl SVRMGR> connect internal; SVRMGR> startup; SVRMGR> exit
以oraids用户启动Oracle监听:
# umask 0; lsnrctl start
如果您得到ORA-12546错误,没有权限连接到sockets。 请看SAP注释0072984。
这个错误发生在使用MAXDSIZ和DFLDSIZ大于 1 GB(1024x1024x1024)。 我们一般得到错误“Linux Error 12: Cannot allocate memory”。
通常,看SAP注释0130581 (R3SETUP步骤里面的 DIPGNTAB终止)。在IDES-specific安装的时候,因为某些原因 安装过程没有使用正确的SAP系统名“IDS”,而是用空字符 ""代替。 这会导致一些访问目录的小问题,因为路径是动态使用 SID来创建的(这里是IDS)。所以用下面的方法代替:
/usr/sap/IDS/SYS/... /usr/sap/IDS/DVMGS00
下面的路径被使用
/usr/sap//SYS/... /usr/sap/D00
为了继续安装,我们创建了一个附加的目录:
# pwd /compat/linux/usr/sap # ls -l total 4 drwxr-xr-x 3 idsadm sapsys 512 May 5 11:20 D00 drwxr-x--x 5 idsadm sapsys 512 May 5 11:35 IDS lrwxr-xr-x 1 root sapsys 7 May 5 11:35 SYS -> IDS/SYS drwxrwxr-x 2 idsadm sapsys 512 May 5 13:00 tmp drwxrwxr-x 11 idsadm sapsys 512 May 4 14:20 trans
我们也发现在SAP注释(0029227和0008401)里面描述了这个行为。 我们没有在SAP 4.6C安装里面遭遇这些问题。
安装SAP 4.6C时,这个错误是前面发生过的一个错误的 结果。所以,您不得不查看相应的日志文件并修复错误。
如果查看完日志文件后这个错误确实存在(看SAP注释),您可以设置STATUS 从ERROR到OK(CENTRDB.R3S文件里面) 然后重起R3SETUP。安装完后,您必须从事务SE38执行 RSWBOINS。关于RFCRSWBOINI和RFCRADDBDIF的更多信息 查看SAP注释0162266。
通过查看日志文件确定这个错误,它不是由于前面的问题导致的。
如果您确定已经应用了SAP注释0162266,就只要设置 STATUS从ERROR到OK (CENTRDB.R3S文件里面)。然后重起R3SETUP。 安装完后,您必须从事务SE38执行RADDBDIF。
这个错误在启动SAP进程disp+work时出现。 如果用startsap脚本启动SAP, 就会启动子进程,并由它启动后面所有的其他SAP进程。 所以脚本本身不会注意到有错误发生。
为了检查SAP进程是否正确启动,可以用 ps ax | grep SID查看进程的状态。 您会得到所有Oracle和SAP进程列表。 如果看起来有些进程没有启动,或者您不能正确连接到SAP系统。 查看相应的日志文件,可以在 /usr/sap/SID/DVEBMGSnr/work/ 下找到, 一般查看 dev_ms 和 dev_disp 文件。
如果Oracle和SAP的共享内存总量超过了 内核配置文件定义的大小就会出现signal 31错误,并且不能解析大的内存地址:
# larger value for 46C production systems: options SHMMAXPGS=393216 # smaller value sufficient for 46B: #options SHMMAXPGS=262144
使用saposcol (version 4.6D)会出现一些问题。 SAP系统使用saposcol收集系统性能数据。 这个程序不是必需的。所以这些问题可以看作是小问题。 老版本(4.6B)可以工作,但是不能收集所有的性能数据(很多调用只返回0,像CPU使用率)。
如果您对Linux兼容模式是如何工作的感到好奇,这节正是您所需要的。 下面的绝大部分内容是由
Terry Lambert<tlambert@primenet.com> (Message ID:
<199906020108.SAA07001@usr09.primenet.com>)发表在邮件列表FreeBSD
闲聊邮件列表上的内容组成的。
FreeBSD有一个“可执行类加载器”。它主要是嵌入了execve(2)系统调用。
碰巧的是FreeBSD有一个引导器(loader)的列表,而不是一个简单的返回一个 符号 #!的引导器!
从历史上来讲,只有UNIX平台的引导器会检查魔术(magic)数 (通常是文件的前4个或8个字节)是否是二进制的, 如果是,就调用二进制引导程序。
如果它不是二进制类型的execve(2)调用就会返回一个错误,shell就试图用shell命令执行它。
缺省是使用“当前设定的shell”。
随后,进行了一些hack, sh(1)开始检查前两个字符,如果它们是:\n, 那它就调用csh(1)(我们相信是SCO最先做这个hack的)。
FreeBSD现在所做的是用一个普通的#!引导器仔细检查引导器的列表, 然后由解释程序一个接一个地解释,返回给/bin/sh。
为了支持Linux ABI,FreeBSD就把魔术数看作为一个二进制ELF程序。( 这样一来,它就使得在FreeBSD, Solaris,Linux和其他任何操作系统之间只要使用ELF格式就都可以顺利运行)。
ELF引导器会寻找一个专门的标记, 它是在ELF映像中的一个注释部分,但在SVR4/Solaris的ELF中没有。
为了执行Linux程序,它们必须被打上Linux类型的标记; 使用brandelf(1):
# brandelf -t Linux file
做完之后,ELF引导器就会看到文件上的Linux的标记。
当ELF引导器看到Linux的标记, 引导器就会在proc结构中替换一个指示器。 所有的系统调用就会通过这个指示器来索引(在一个传统的 UNIX系统中, 这就是sysent[]结构队列,包含系统调用)。 此外,为了解决由于信号杂乱所造成的陷阱向量的问题,会造成线程的剧增, 需要切断其他(或较小的)由Linux内核模块产生的修正。
Linux系统调用向量包含一个sysent[]记录的列表, 它的地址位于内核模块之中。
当一个系统调用被Linux程序调用时,有缺陷的代码会把系统调用功能的指示器从proc结构中解除, 然后获得Linux,而不是FreeBSD,系统调用入口点。
另外,Linux模式动态地reroots查找;这和启动文件系统的union 选项是等效的(即时不是unionfs文件系统)。 首先会试图在/compat/linux/original-path 目录查找文件,如果失败了,就会在/original-path 目录下查找。这使得需要其它程序的程序可以运行(例如,Linux工具链都可以在Linux ABI的支持下工作)。 也就是说Linux程序可以加载和执行FreeBSD程序,如果当前没有相应的Linux程序, 那您可以在/compat/linux目录树中放置一个uname(1),来确保Linux程序不提示它们不能运行在Linux上。
在FreeBSD内核中有一个Linux内核;由内核提供的能够提供所有服务的各种潜在功能 在FreeBSD系统调用表记录和Linux系统调用表记录之间是一样的: 文件系统操作,虚拟内存操作,信号发送,System V IPC,...等等。 唯一的不同是FreeBSD会得到FreeBSD的胶合功能, 而Linux程序会得到Linux的胶合功能 (大部分老的操作系统只有它们自己的胶合函数, 函数地址在静态全局变量sysent[]结构数据里面, 而不是动态的初始化到进程的proc结构)。
哪一个是FreeBSD自己的ABI呢?这无关紧要。基本上, 唯一的不同是FreeBSD的胶合功能是被静态连接到内核, 而Linux的胶合功能可能是被静态连接到内核, 也可能它们通过一个内核模块来访问。
有一个真正的模拟器吗?没有,它只不过是一个ABI执行机制,不是一个模拟器。
为什么有时它被叫做“Linux模拟器”? 只是为了更容易地卖出FreeBSD罢了! 实际上,历史上从来没有描述这样一种执行机制的名字,FreeBSD并不是真正地运行Linux程序,如果您不编译进代码, 或加载一个模块。 就需要有一个名字来描述这样一种加载功能--因此就想出了“Linux模拟器”这样一个名字。
FreeBSD 手册中其余章节的内容都是关于系统管理。每一章节都从描述开始,由浅入深。
这些章节被设计成很多相对完整的部分,如果您需要了解某部分内容,直接阅读这部分内容即可,无需按照顺序,也不用在您使用 FreeBSD 的时候需要先读一遍。
FreeBSD 的一个重要问题是系统配置。 正确地配置系统能充分地减少以后维护和升级系统所需的工作量。 这章将解释一些 FreeBSD 的配置过程,包括一些可以调整的 FreeBSD 系统的一些参数。
阅读完本章之后您将会知道:
怎样有效的利用文件系统和交换分区。
rc.conf 的基本设置和 /usr/local/etc/rc.d 启动体系。
怎样设置和测试一块网卡。
怎样在您的网络设备上设置虚拟主机。
怎样使用 /etc 下的各配置文件。
怎样使用 sysctl 来调整 FreeBSD 系统变量。
怎样调整磁盘性能和修改内核限制。
在阅读本章之前,您应该了解:
当使用 disklabel(8) 或者 sysinstall(8) 来分割您的文件系统的时候, 要记住硬盘驱动器外磁道传输数据要比从内磁道传输数据快。 因此应该将小的和经常访问的文件系统放在驱动器靠外的位置, 一些大的分区比如 /usr 应该放在比较靠里的位置。 以类似这样的顺序建立分区是一个不错的主意:root,swap, /var,/usr。
/var 的大小能反映您的机器使用情况。 它用来存储邮件,日志文件和打印队列缓存, 特别是邮箱和日志文件可能会达到无法预料的大小, 这主要取决于在您的系统上有多少用户和您的日志文件可以保存多长时间。 一般大多数用户不需要一个 G 以上的空间,但要记住 /var/tmp 应该足够大来以便存储一些 packages。
/usr 分区存储很多用来系统运行所需要的文件例如 ports(7) (建议这样做) 和源代码 (可选的)。安装的时候这两项都是可选的。 这个分区至少要保留两个 G 的可用空间。
当选择分区大小的时候,记住保留一些空间。 用完了一个分区的空间而在另一个分区上还有很多, 可能会导致出现一些错误。
Note: 一些用户会发现 sysinstall(8) 的 Auto-defaults 自动分区有时会分配给 /var 和 / 较小的分区空间。 分区应该精确一些并且大一些。
一般来讲,交换分区应该大约是系统内存 (RAM) 的两倍。 例如,如果机器有 128M 内存,交换文件应该是 256M。 较小内存的系统可以通过多一点地交换分区来提升性能。 不建议小于 256 兆的交换分区,并且扩充您的内存应该被考虑一下。 当交换分区最少是主内存的两倍的时候,内核的 VM (虚拟内存) 页面调度算法可以将性能调整到最好。如果您给机器添加更多内存, 配置太小的交换分区会导致 VM 页面扫描的代码效率低下。
在使用多块SCSI磁盘(或者不同控制器上的IDE磁盘)的大系统上, 建议在每个驱动器上建立交换分区(直到四个驱动器)。 交换分区应该大约一样大小。内核可以使用任意大小, 但内部数据结构则是最大交换分区的 4 倍。保持交换分区同样的大小, 可以允许内核最佳地调度交换空间来访问磁盘。 即使不太使用,分配大的交换分区也是好的, 在被迫重启之前它可以让您更容易的从一个失败的程序中恢复过来。
一些用户认为一个单独的大分区将会很好, 但是有很多原因会证明为什么这是个坏主意。首先, 每个分区有不同的分区特性,因此分开可以让文件系统调整它们。 例如,根系统和 /usr 一般只是读取,写入很少。 很多读写频繁的被放在 /var 和 /var/tmp中。
适当的划分一个系统,用比较小的分区方法, 那些以写为主的分区将不会比以读为主的分区付出更高的代价。 将以写为主的分区放在靠近磁盘的边缘, 例如放在实际的大硬盘的前面代替放在分区表的后面,将会提高您需要的分区的 I/O 性能。现在可能也需要在比较大的分区上有很好的 I/O 性能, 把他们移动到磁盘外围不会带来多大的性能提升,反而把 /var 移到外面会有很好的效果。最后涉及到安全问题。 一个主要是只读的小的、整洁的根分区可以提高从一个严重的系统崩溃中恢复过来的机会。
系统的配置信息主要位于 /etc/rc.conf。 这个文件包含了配置信息很大的一部分,主要在系统启动的时候来配置系统, 这个名字直接说明了这点;它也是 rc* 文件的配置信息。
系统管理员应该在 rc.conf 文件中建立记录来覆盖 /etc/defaults/rc.conf 中的默认设置。 这个默认文件不应该被逐字的拷贝到 /etc —— 它包含的是默认值而不是一个例子。 所有特定的改变应该在 rc.conf 中。
为了降低管理成本,有很多策略可以应用在成群的应用程序中来从系统指定的配置中分离 site-wide 配置。建议的方法是将 site-wide 配置放在另一个文件中,例如 /etc/rc.conf.site, 并且把它包含进然后把这个文件包括进只包含系统指定信息的 /etc/rc.conf。
由于 rc.conf 可以被 sh(1) 阅读,所以达到这个目的很简单,例如:
rc.conf:
. rc.conf.site
hostname="node15.example.com"
network_interfaces="fxp0 lo0"
ifconfig_fxp0="inet 10.1.1.1"
rc.conf.site:
defaultrouter="10.1.1.254"
saver="daemon"
blanktime="100"
rc.conf.site 文件会被分发给每一个使用 rsync 或相似程序的系统,同时 rc.conf 文件仍然保持独立。
使用 sysinstall(8) 或者 make world 来升级系统不会覆盖 rc.conf 文件, 所以系统配置信息不会丢失。
典型的,被安装的应用程序有他自己的配置文件、语法等等。 从基本系统中分开他们是很重要的以至于他们可以容易的被 package 管理工具定位和管理
一般来说,这些文件被安装在 /usr/local/etc。这个例子中, 一个应用程序有很多配置文件并且创建了一个子目录来存放他们。
通常,当一个 port 或者 package 被安装的时候, 配置文件示例也同样被安装了。它们通常用 .default 的后缀来标识。如果不存在这个应用程序的配置文件,它们会通过拷贝 .default 文件来创建。
例如,看一下这个目下的内容 /usr/local/etc/apache:
-rw-r--r-- 1 root wheel 2184 May 20 1998 access.conf -rw-r--r-- 1 root wheel 2184 May 20 1998 access.conf.default -rw-r--r-- 1 root wheel 9555 May 20 1998 httpd.conf -rw-r--r-- 1 root wheel 9555 May 20 1998 httpd.conf.default -rw-r--r-- 1 root wheel 12205 May 20 1998 magic -rw-r--r-- 1 root wheel 12205 May 20 1998 magic.default -rw-r--r-- 1 root wheel 2700 May 20 1998 mime.types -rw-r--r-- 1 root wheel 2700 May 20 1998 mime.types.default -rw-r--r-- 1 root wheel 7980 May 20 1998 srm.conf -rw-r--r-- 1 root wheel 7933 May 20 1998 srm.conf.default
文件大小显示了只有 srm.conf 改变了。以后 Apache 的升级就不会改变这个文件。
许多用户会选择使用 Ports Collection 来在 FreeBSD 上安装第三方软件。 很多情况下这可能需要进行一些配置以便让这些软件能够在系统初始化的过程中启动。 服务, 例如 mail/postfix 或 www/apache13 就是这些需要在系统初始化时启动的软件包中的两个典型代表。 这一节解释了启动第三方软件所需要的步骤。
FreeBSD 包含的大多数服务,例如 cron(8), 就是通过系统启动脚本启动的。 这些脚本也许会有些不同, 这取决于 FreeBSD 版本。 但是不管怎样, 需要考虑的一个重要方面是他们的启动配置文件要能被基本启动脚本识别捕获。
在 rcNG 出现之前, 应用程序会把一个简单的启动脚本扔到 /usr/local/etc/rc.d 目录中, 这个目录中的脚本会被系统初始化脚本读取。
尽管很多人已经花费了相当多的时间来把旧的配置方式融入到新系统中, 仍然有许多第三方软件需要把脚本放到上面提到的目录中。 是否使用 rcNG 会对这些脚本的执行带来一些变化。 在 FreeBSD 5.1 之前采用的是旧式的配置, 当然, 绝大多数情况下, 新式的脚本也会工作的很好。
每个脚本都应该遵守 FreeBSD 版本所需求的一些规定: 每个脚本必须在文件名最后添加一个 .sh 的扩展名,并且这个脚本能被系统执行。 后者可以通过 chmod 命令把权限设置为 755来实现。 它还应该能接受 start 选项来启动程序并且接受 stop 选项来结束程序。
一个简单的脚本看起来可能会像这样:
#!/bin/sh
echo -n ' utility'
case "$1" in
start)
/usr/local/bin/utility
;;
stop)
kill -9 `cat /var/run/utility.pid`
;;
*)
echo "Usage: `basename $0` {start|stop}" >&2
exit 64
;;
esac
exit 0
这个脚本提供了 stop 和 start 两个选项, 用以操作 utility。
可以用如下方法来启动:
# /usr/local/etc/rc.d/utility.sh start
现在不是所有第三方软件都需要在 rc.conf有这么一行, 不过几乎每天都有port被修改来接受这个配置。 对于一个特定的应用程序来说, 你可以查看安装的最终输出来获得更多信息。 一些第三方软件仍然提供一个脚本来供 rcNG 来使用, 这将在下一节介绍。
现在 FreeBSD 包含rcNG,软件启动配置更加理想了, 当然也变得更深奥。 用 rcNG 这章介绍的关键字,应用程序现在被配置为可以在某一个服务之后启动, 例如DNS; 可能还要在 rc.conf 传递更多的参数给启动脚本。 一个基本的脚本看起来有点象下面这个样子:
#!/bin/sh
#
# PROVIDE: utility
# REQUIRE: DAEMON
# BEFORE: LOGIN
# KEYWORD: FreeBSD shutdown
#
# DO NOT CHANGE THESE DEFAULT VALUES HERE
# SET THEM IN THE /etc/rc.conf FILE
#
utility_enable=${utility_enable-"NO"}
utility_flags=${utility_flags-""}
utility_pidfile=${utility_pidfile-"/var/run/utility.pid"}
. /etc/rc.subr
name="utility"
rcvar=`set_rcvar`
command="/usr/local/sbin/utility"
load_rc_config $name
pidfile="${utility_pidfile}"
start_cmd="echo \"Starting ${name}.\"; /usr/bin/nice -5 ${command} ${utility_flags} ${command_args}"
run_rc_command "$1"
这个脚本将保证 utility 能够在 login 服务之前, 并在 daemon 服务之后启动。 它同时也提供了设置和跟踪 PID 的方法, 称作进程 ID 文件。
可以在 /etc/rc.conf 中加入:
utility_enable="YES"
这个新方法也使得命令行参数、包含 /etc/rc.subr 中所提供的功能, 兼容 rcorder(8) 工具并提供更简单的通过 rc.conf 文件来配置的方法。 实际上它甚至可以放到 /etc/rc.d 目录中。 当然, 在使用 mergemaster(8) 来完成软件升级时这会带来一些麻烦。
其他服务, 例如 POP3 服务器, IMAP, 等等, 也可以通过 inetd(8) 来启动。 这一过程包括从 Ports Collection 安装相应的应用程序, 并把配置加入到 /etc/inetd.conf 文件, 或去掉当前配置中的某些注释。 如何使用和配置 inetd 在 inetd 一节中进行了更为深入的阐述。
一些情况下, 通过 cron(8) 来启动系统服务也是一种可行的选择。 这种方法有很多好处, 因为 cron 会以 crontab 的文件属主身份执行那些进程。 这使得普通用户也能够执行他们的应用。
cron 工具提供了一个独有的功能, 以 @reboot 来指定时间。 这样的设置将在 cron(8) 启动时运行, 通常这也是系统初始化的时候。
FreeBSD 最有用的软件包(utilities)中的一个是 cron(8)。 cron 软件在后台运行并且经常检查 /etc/crontab 文件。cron 软件也检查 /var/cron/tabs 目录,搜索新的 crontab 文件。这些 crontab 文件存储一些 cron 在特定时间执行任务的信息。
cron 程序使用两种不同类型的配置文件, 即系统 crontab 和用户 crontabs。 两种格式的唯一区别是第六个字段。 在系统 crontab 中,第六个字段是用于执行命令的用户名。 这给予了系统 crontab 以任意用户身份执行命令的能力。 在用户 crontab 中, 第六个字段是要执行的命令, 所有的命令都会以这个用户自己的身份执行; 这是一项重要的安全功能。
Note: 同其他用户一样, root 用户也可以有自己的 crontab。 它不同于 /etc/crontab (也就是系统 crontab)。 由于有系统 crontab 的存在, 通常并不需要给 root 建立单独的用户 crontab。
让我们来看一下 /etc/crontab 文件:
# /etc/crontab - root's crontab for FreeBSD # # $FreeBSD: src/etc/crontab,v 1.32 2002/11/22 16:13:39 tom Exp $ ## SHELL=/bin/sh PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin
HOME=/var/log # # #minute hour mday month wday who command
# # */5 * * * * root /usr/libexec/atrun
![]()




命令可以有任意多个传递给它们的标志。无论怎样, 扩展到多行的命令应该用反斜线(“\”)来续行。
这是每个 crontab 文件的基本设置, 虽然它们有一个不同。第六行我们指定的用户名只存在于系统 /etc/crontab 文件。这个字段在普通用户的 crontab 文件中应该被忽略。
Important: 绝对不要用这种方法来编辑/安装系统 crontab。 您需要做的只是使用自己喜欢的编辑器: cron 程序会注意到文件发生了变化, 并立即开始使用新的版本。参见 这个 FAQ 项目 以了解进一步的情况。
要安装刚写好的用户 crontab, 首先使用最习惯的编辑器来创建一个符合要求格式的文件,然后用 crontab 程序来完成。最常见的用法是:
% crontab crontab-file
In this example, crontab-file is the filename of a crontab that was previously created.
还有一个选项用来列出安装的 crontab 文件: 只要传递 -l 选项给 crontab 然后看一下输出。
用户想不用模板(已经存在的文件)而直接安装他的 crontab 文件,用 crontab -e 选项也是可以的。 它将会启动一个编辑器并且创建一个新文件,当这个文件被保存的时候, 它会自动的用 crontab 来安装这个文件。
如果您稍后想要彻底删除自己的用户 crontab 可以使用 crontab 的 -r 选项。
FreeBSD 最近整合了 NetBSD 的 rc.d 系统以完成系统初始化。用户要注意 /etc/rc.d 目录下的文件。这些文件中的很多都是可以接受 start、 stop 和 restart 选项的基本服务。 例如,sshd(8) 可以用下面的命令重启:
# /etc/rc.d/sshd restart
其它的服务跟这个过程相似。当然,在 rc.conf(5) 指定的服务通常可以自动启动。例如,让网络地址转换(NAT) 守护进程在系统启动的时候启动可以简单的在 /etc/rc.conf 中添加下面一行:
natd_enable="YES"
如果 natd_enable="NO" 行已经存在, 只要简单的把 NO 改成 YES 即可。 rc 脚本在下次重新启动的时候会自动的装载所需要的服务, 像下面所描述的那样。
由于 rc.d 系统在系统启动/关闭时首先启动/停止服务,如果设置了适当的 /etc/rc.conf 变量,标准的 start、stop 和 restart 选项将会执行他们的动作。例如 sshd restart 命令只在 /etc/rc.conf 中的 sshd_enable 设置成 YES 的时候工作。不管是否在 /etc/rc.conf 中设置了,要 start、stop 或者 restart 一个服务,命令前可以加上一个“force”前缀。例如要不顾当前 /etc/rc.conf 的设置重新启动 sshd,执行下面的命令:
# /etc/rc.d/sshd forcerestart
用选项 rcvar 可以简单来的检查 /etc/rc.conf 中用适当的 rc.d 脚本启动的服务是否被启用。从而管理员可以运行这样的程序来检查 sshd 是否真的在 /etc/rc.conf 中被启动了:
# /etc/rc.d/sshd rcvar # sshd $sshd_enable=YES
Note: 第二行 (# sshd) 是从 sshd 命令中输出的,而不是 root 控制台。
为了确定一个服务是否真的在运行,可以用 status 选项。例如验证 sshd 是否真的启动了:
# /etc/rc.d/sshd status sshd is running as pid 433.
reload 一个服务也是可以的。 这将要尝试发送一个信号给一个单独的服务, 强制这个服务重新装载它的配置文件。大多数情况这意味着给服务发送一个 SIGHUP 信号。
rcNG 结构不仅仅是给网络服务提供的, 它也给很多系统初始化提供服务。例如,处理 bgfsck 文件。当这个脚本执行的时候,它会输出下列信息:
Starting background file system checks in 60 seconds.
这个文件用做后台文件系统检查,系统初始化的时候完成。
很多系统服务依赖其他服务提供的相应功能。例如,NIS 和其他基于 RPC 的服务启动可能在 rpcbind 服务启动之前失败。 要解决这个问题,依赖关系信息和其他头信息当作注释被包含在每个启动脚本文件的前面。 程序在系统初始化时分析这些注释以决定调用其他系统服务来满足依赖关系。 下面的字句可能会包含在每个启动脚本文件的前面:
PROVIDE: Specifies the services this file provides.
REQUIRE: Lists services which are required for this service. This file will run after the specified services.
BEFORE: Lists services which depend on this service. This file will run before the specified services.
KEYWORD: FreeBSD or NetBSD. This is used for *BSD dependent features.
通过这种方法,系统管理员可以容易的控制系统而不用像其他一些 UNIX 操作系统一样要用 “runlevels” 来控制。
FreeBSD5.X 的附加信息: rc.d 系统可以在 rc(8) 和 rc.subr(8) 手册页中找到。
现在我们不可想象一个计算机没有网络连接的情况。 添加和配置一块网卡是任何 FreeBSD 系统管理员的一项基本任务。
在开始之前,您应该知道您的网卡类型,它用的芯片和它是 PCI 还是 ISA 网卡。FreeBSD 支持很多种 PCI 和 ISA 网卡。 可以查看您的版本硬件兼容性列表以确定您的网卡被支持。
确认系统能够支持您的网卡之后, 您还需要为它选择合适的驱动程序。 /usr/src/sys/conf/NOTES 和 /usr/src/sys/arch/conf/NOTES 将为您提供所支持的一些网卡和芯片组的信息。 如果您怀疑驱动程序是否使所要找的那一个, 请参考驱动程序的联机手册。 联机手册将提供关于所支持的硬件更详细的信息, 甚至还包括可能发生的问题。
Note: NOTES 在 FreeBSD 4.X 上并不存在。 您需要查看 LINT 来了解关于网卡的信息。 参见 第 8.4 节 以了解关于 NOTES 和 LINT 的进一步信息。
如果您有一个普通的网卡,大多数时候您不需要为驱动浪费精力。 常用的网卡在 GENERIC 内核中已经支持了, 所以您的网卡在启动时就会显示出来,像是:
dc0: <82c169 PNIC 10/100BaseTX> port 0xa000-0xa0ff mem 0xd3800000-0xd38 000ff irq 15 at device 11.0 on pci0 dc0: Ethernet address: 00:a0:cc:da:da:da miibus0: <MII bus> on dc0 ukphy0: <Generic IEEE 802.3u media interface> on miibus0 ukphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto dc1: <82c169 PNIC 10/100BaseTX> port 0x9800-0x98ff mem 0xd3000000-0xd30 000ff irq 11 at device 12.0 on pci0 dc1: Ethernet address: 00:a0:cc:da:da:db miibus1: <MII bus> on dc1 ukphy1: <Generic IEEE 802.3u media interface> on miibus1 ukphy1: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
在这个例子中,我们看到有两块使用 dc(4) 驱动的网卡在系统中。
如果您的网卡没有出现在 GENERIC 中, 则需要手工加载合适的驱动程序。 要完成这项工作可以使用下面两种方法之一:
最简单的办法是用 kldload(8) 加载网卡对应的内核模块。 并不是所有的网卡都能够通过这种方法提供支持; 比较明显的例子是 ISA 网卡。
另外, 您也可以将网卡的支持静态联编进内核。 察看 /usr/src/sys/conf/NOTES, /usr/src/sys/arch/conf/NOTES 以及驱动程序的联机手册以了解需要在您的内核配置文件中加一些什么。 要了解关于重新编译内核的进一步细节, 请参见 第 8 章。 如果您的卡在引导时可以被内核 (GENERIC) 识别, 您应该不需要编译新的内核。
现在正确的网卡驱动程序已经装载,那么就应该配置它了。 跟其他配置一样,网卡可以在安装时用 sysinstall 来配置。
要显示您系统上的网络接口的配置,输入下列命令:
% ifconfig
dc0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
inet 192.168.1.3 netmask 0xffffff00 broadcast 192.168.1.255
ether 00:a0:cc:da:da:da
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
dc1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
inet 10.0.0.1 netmask 0xffffff00 broadcast 10.0.0.255
ether 00:a0:cc:da:da:db
media: Ethernet 10baseT/UTP
status: no carrier
lp0: flags=8810<POINTOPOINT,SIMPLEX,MULTICAST> mtu 1500
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
inet 127.0.0.1 netmask 0xff000000
tun0: flags=8010<POINTOPOINT,MULTICAST> mtu 1500
Note: 老版本的 FreeBSD 可能需要在 ifconfig(8) 后面接 -a 选项,需要了解更多的 ifconfig(8) 语法请查阅使用手册。注意所有关于 IPv6 (inet6 等等) 的记录在这个例子里都被忽略了。
在这个例子中,显示出了下列设备:
dc0: The first Ethernet interface
dc1: The second Ethernet interface
lp0: The parallel port interface
lo0: The loopback device
tun0: The tunnel device used by ppp
FreeBSD 使用内核引导时检测到的网卡驱动顺序来命名网卡。例如 sis2 是系统中使用 sis(4) 驱动的第三块网卡。
在这个例子中,dc0 设备启用了。主要表现在:
UP 表示这块网卡已经配置完成准备工作。
这块网卡有一个 Internet (inet) 地址 (这个例子中是 192.168.1.3)。
它有一个有效的子网掩码 (netmask; 0xffffff00 等同于 255.255.255.0)。
它有一个有效的广播地址 (这个例子中是 192.168.1.255)。
网卡的 MAC (ether) 地址是 00:a0:cc:da:da:da
物理传输媒介模式处于自动选择状态 (media: Ethernet autoselect (100baseTX <full-duplex>))。我们看到 dc1 被配置成运行在 10baseT/UTP 模式下。 要了解驱动媒介类型的更多信息, 请查阅它们的使用手册。
连接状态 (status)是 active,也就是说连接信号被检测到了。对于 dc1,我们看到 status: no carrier。 这通常是网线没有插好。
如果 ifconfig(8) 的输出显示了类似于:
dc0: flags=8843<BROADCAST,SIMPLEX,MULTICAST> mtu 1500
ether 00:a0:cc:da:da:da
的信息,那么就是还没有配置网卡。
要配置网卡,您需要 root 权限。 网卡配置可以通过使用 ifconfig(8) 命令行方式来完成, 但是这样每次启动都要做一遍。放置网卡配置信息的文件是 /etc/rc.conf。
用您自己喜欢的编辑器打开 /etc/rc.conf。 并且您需要为每一块系统中存在的网卡添加一行, 在我们的例子中,添加如下几行:
ifconfig_dc0="inet 192.168.1.3 netmask 255.255.255.0" ifconfig_dc1="inet 10.0.0.1 netmask 255.255.255.0 media 10baseT/UTP"
用自己正确的设备名和地址来替换例子中的 dc0,dc1 等内容。您应该应该查阅网卡驱动和 ifconfig(8) 的手册页来了解各选项,也要查看一下 rc.conf(5) 帮助页来了解 /etc/rc.conf 的语法。
如果在安装的时候配置了网络,关于网卡的一些行可能已经存在了。 所以在添加新行前仔细检查一下 /etc/rc.conf。
您也可能需要编辑 /etc/hosts 来添加局域网中不同的机器名称和 IP 地址,如果它们不存在,查看 hosts(5) 帮助和 /usr/share/examples/etc/hosts 以获得更多信息。
对 /etc/rc.conf 做了必要的修改之后应该重启系统以应用对接口的修改, 并且确认系统重启后没有任何配置错误。
系统重启后就应该测试网络接口了。
为了确认网卡被正确的配置了,在这里我们要做两件事情。首先, ping 自己的网络接口,接着 ping 局域网内的其他机器。
首先测试本地接口:
% ping -c5 192.168.1.3 PING 192.168.1.3 (192.168.1.3): 56 data bytes 64 bytes from 192.168.1.3: icmp_seq=0 ttl=64 time=0.082 ms 64 bytes from 192.168.1.3: icmp_seq=1 ttl=64 time=0.074 ms 64 bytes from 192.168.1.3: icmp_seq=2 ttl=64 time=0.076 ms 64 bytes from 192.168.1.3: icmp_seq=3 ttl=64 time=0.108 ms 64 bytes from 192.168.1.3: icmp_seq=4 ttl=64 time=0.076 ms --- 192.168.1.3 ping statistics --- 5 packets transmitted, 5 packets received, 0% packet loss round-trip min/avg/max/stddev = 0.074/0.083/0.108/0.013 ms
现在我们应该 ping 局域网内的其他机器:
% ping -c5 192.168.1.2 PING 192.168.1.2 (192.168.1.2): 56 data bytes 64 bytes from 192.168.1.2: icmp_seq=0 ttl=64 time=0.726 ms 64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=0.766 ms 64 bytes from 192.168.1.2: icmp_seq=2 ttl=64 time=0.700 ms 64 bytes from 192.168.1.2: icmp_seq=3 ttl=64 time=0.747 ms 64 bytes from 192.168.1.2: icmp_seq=4 ttl=64 time=0.704 ms --- 192.168.1.2 ping statistics --- 5 packets transmitted, 5 packets received, 0% packet loss round-trip min/avg/max/stddev = 0.700/0.729/0.766/0.025 ms
您如果您设置了 /etc/hosts 文件,也可以用机器名来替换 192.168.1.2。
调试硬件和软件配置一直是一件头痛的事情, 从最简单的开始可以减轻一些痛苦。 例如网线是否插好了?是否配置好了网络服务?防火墙配置正确吗? 是否使用了被 & os; 支持的网卡? 在发送错误报告之前您应该查看一下硬件说明, 升级 FreeBSD 到最新的 STABLE 版本, 看一下邮件列表或者在 Internet 上搜索一下。
如果网卡工作了, 但性能低下,应该好好阅读一下 tuning(7) 联机手册。 您也可以检查一下网络配置, 不正确的设置会导致慢速的网络连接。
一些用户可能会在一些网卡上经历一到两次 “device timeouts”, 这通常是正常现象。 如果经常这样甚至引起麻烦, 则应确定一下它跟其他设备没有冲突。 仔细检查网线连接, 或者换一块网卡。
有时用户会看到少量 “watchdog timeout” 错误。 这种情况要做的第一件事就是检查线缆连接。 一些网卡需要支持总线控制的 PCI 插槽。 在一些老的主板上,只有一个 PCI 插槽支持 (一般是 slot 0)。 检查网卡和主板说明书来确定是不是这个问题。
“No route to host” 通常发生在如果系统不能发送一个路由到目的主机的包的时候。 这在没有指定默认路由或者网线没有插上时会发生。 检查 netstat -rn 的输出并确认有一个有效的路由能到达相应的主机。 如果没有,请查阅 第 25 章。
“ping: sendto: Permission denied” 错误信息经常由防火墙的配置错误引起。 如果 ipfw 在内核中启用了但是没有定义规则, 那么默认的规则就是拒绝所有通讯,甚至 ping 请求! 查阅 第 24 章 以了解更多信息。
有时网卡性能低下或者低于平均水平, 这种情况最好把传输媒介模式从 autoselect 改变为正确的传输介质模式。 这通常对大多数硬件有用, 但可能不会解决所有人的问题。 接着,检查所有网络设置,并且阅读 tuning(7) 手册页。
FreeBSD 的一个很普通的用途是虚拟主机站点, 一个服务器虚拟成很多服务器一样提供网络服务。 这通过在一个接口上绑定多个网络地址来实现。
一个特定的网络接口有一个“真实”的地址, 也可能有一些“别名”地址。这些别名通常用 /etc/rc.conf 中的记录来添加。
一个 fxp0 的别名记录类似于:
ifconfig_fxp0_alias0="inet xxx.xxx.xxx.xxx netmask xxx.xxx.xxx.xxx"
记住别名记录必须从 alias0 开始并且按顺序递增(例如 _alias1、 _alias2)。 配置程序将会停止在第一个缺少的数字的地方。
计算别名的子网掩码是很重要的,幸运的是它很简单。 对于一个接口来说,必须有一个描述子网掩码的地址。 任何在这个网段下的地址必须有一个全是 1 的子网掩码(通常表示为 255.255.255.255 或 0xffffffff。
举例来说, 假设使用 fxp0 连接到两个网络, 分别是 10.1.1.0, 其子网掩码为 255.255.255.0, 以及 202.0.75.16, 其子网掩码为 255.255.255.240。 我们希望从 10.1.1.1 到 10.1.1.5 以及从 202.0.75.17 到 202.0.75.20 的地址能够互相访问。 如前所述, 只有两个网段中的第一个地址 (本例中, 10.0.1.1 和 202.0.75.17) 应使用真实的子网掩码; 其余的 (10.1.1.2 到 10.1.1.5 以及 202.0.75.18 到 202.0.75.20) 则必须配置为使用 255.255.255.255 作为子网掩码。
下面是根据上述描述所进行的 /etc/rc.conf 配置:
ifconfig_fxp0="inet 10.1.1.1 netmask 255.255.255.0" ifconfig_fxp0_alias0="inet 10.1.1.2 netmask 255.255.255.255" ifconfig_fxp0_alias1="inet 10.1.1.3 netmask 255.255.255.255" ifconfig_fxp0_alias2="inet 10.1.1.4 netmask 255.255.255.255" ifconfig_fxp0_alias3="inet 10.1.1.5 netmask 255.255.255.255" ifconfig_fxp0_alias4="inet 202.0.75.17 netmask 255.255.255.240" ifconfig_fxp0_alias5="inet 202.0.75.18 netmask 255.255.255.255" ifconfig_fxp0_alias6="inet 202.0.75.19 netmask 255.255.255.255" ifconfig_fxp0_alias7="inet 202.0.75.20 netmask 255.255.255.255"
在配置信息中有很多的目录,这些包括:
| /etc | 一般的系统配置信息。这儿的数据是与特定系统相关的。 |
| /etc/defaults | 系统配置文件的默认版本。 |
| /etc/mail | 额外的 sendmail(8) 配置信息,其他 MTA 配置文件。 |
| /etc/ppp | 用于用户级和内核级 ppp 程序的配置。 |
| /etc/namedb | named(8) 数据的默认位置。通常 named.conf 和区域文件存放在这里。 |
| /usr/local/etc | 被安装的应用程序配置文件。可以参考每个应用程序的子目录。 |
| /usr/local/etc/rc.d | 被安装程序的 启动/停止 脚本。 |
| /var/db | 特定系统自动产生的数据库文件,像 package 数据库,位置数据库等等。 |
/etc/resolv.conf 指示了 FreeBSD 如何访问域名系统(DNS)。
resolv.conf 中最常见的记录是:
一个典型的 resolv.conf 文件:
search example.com nameserver 147.11.1.11 nameserver 147.11.100.30
Note: 只能使用一个 search 和 domain 选项。
如果您在使用 DHCP,dhclient(8) 经常使用从 DHCP 服务器接受来的信息重写 resolv.conf。
/etc/hosts 是 Internet 早期使用的一个简单文本数据库。 它结合 DNS 和 NIS 提供名字到 IP 地址的映射。 通过局域网连接的机器可以用这个简单的命名方案来替代设置一个 named(8) 服务器。另外,/etc/hosts 也可以提供一个 Internet 名称的本地纪录以减轻需要从外部查询带来的负担。
# $FreeBSD$ # # Host Database # This file should contain the addresses and aliases # for local hosts that share this file. # In the presence of the domain name service or NIS, this file may # not be consulted at all; see /etc/nsswitch.conf for the resolution order. # # ::1 localhost localhost.my.domain myname.my.domain 127.0.0.1 localhost localhost.my.domain myname.my.domain # # Imaginary network. #10.0.0.2 myname.my.domain myname #10.0.0.3 myfriend.my.domain myfriend # # According to RFC 1918, you can use the following IP networks for # private nets which will never be connected to the Internet: # # 10.0.0.0 - 10.255.255.255 # 172.16.0.0 - 172.31.255.255 # 192.168.0.0 - 192.168.255.255 # # In case you want to be able to connect to the Internet, you need # real official assigned numbers. PLEASE PLEASE PLEASE do not try # to invent your own network numbers but instead get one from your # network provider (if any) or from the Internet Registry (ftp to # rs.internic.net, directory `/templates'). #
/etc/hosts 用简单的格式:
[Internet address] [official hostname] [alias1] [alias2] ...
例如:
10.0.0.1 myRealHostname.example.com myRealHostname foobar1 foobar2
参考 hosts(5) 以获得更多信息。
syslog.conf 是 syslogd(8) 程序的配置文件。 它指出了的 syslog 哪种信息类型被存储在特定的日志文件中。
# $FreeBSD$ # # Spaces ARE valid field separators in this file. However, # other *nix-like systems still insist on using tabs as field # separators. If you are sharing this file between systems, you # may want to use only tabs as field separators here. # Consult the syslog.conf(5) manual page. *.err;kern.debug;auth.notice;mail.crit /dev/console *.notice;kern.debug;lpr.info;mail.crit;news.err /var/log/messages security.* /var/log/security mail.info /var/log/maillog lpr.info /var/log/lpd-errs cron.* /var/log/cron *.err root *.notice;news.err root *.alert root *.emerg * # uncomment this to log all writes to /dev/console to /var/log/console.log #console.info /var/log/console.log # uncomment this to enable logging of all log messages to /var/log/all.log #*.* /var/log/all.log # uncomment this to enable logging to a remote log host named loghost #*.* @loghost # uncomment these if you're running inn # news.crit /var/log/news/news.crit # news.err /var/log/news/news.err # news.notice /var/log/news/news.notice !startslip *.* /var/log/slip.log !ppp *.* /var/log/ppp.log
参考 syslog.conf(5) 手册页以获得更多信息
newsyslog.conf 是一个通常用 cron(8) 计划运行的 newsyslog(8) 程序的配置文件。 newsyslog(8) 指出了什么时候日志文件需要打包或者重新整理。 比如 logfile 被移动到 logfile.0,logfile.0 被移动到 logfile.1 等等。另外,日志文件可以用 gzip(1) 来压缩,它们是这样的命名格式: logfile.0.gz,logfile.1.gz 等等。
newsyslog.conf 指出了哪个日志文件要被管理,要保留多少和它们什么时候被创建。 日志文件可以在它们达到一定大小或者在特定的日期被重新整理。
# configuration file for newsyslog # $FreeBSD$ # # filename [owner:group] mode count size when [ZB] [/pid_file] [sig_num] /var/log/cron 600 3 100 * Z /var/log/amd.log 644 7 100 * Z /var/log/kerberos.log 644 7 100 * Z /var/log/lpd-errs 644 7 100 * Z /var/log/maillog 644 7 * @T00 Z /var/log/sendmail.st 644 10 * 168 B /var/log/messages 644 5 100 * Z /var/log/all.log 600 7 * @T00 Z /var/log/slip.log 600 3 100 * Z /var/log/ppp.log 600 3 100 * Z /var/log/security 600 10 100 * Z /var/log/wtmp 644 3 * @01T05 B /var/log/daily.log 640 7 * @T00 Z /var/log/weekly.log 640 5 1 $W6D0 Z /var/log/monthly.log 640 12 * $M1D0 Z /var/log/console.log 640 5 100 * Z
参考 newsyslog(8) 手册页以获得更多信息。
sysctl.conf 看起来很像 rc.conf。它用 variable=value 的形式来设定值。指定的值在系统进入多用户模式之后被设定。 并不是所有的变量都可以在这个模式下设定。
一个简单的例子举明了在 sysctl.conf 中关闭了重要的退出信号的日志并且让 Linux 程序知道他们其实运行在 FreeBSD 下面:
kern.logsigexit=0 # Do not log fatal signal exits (e.g. sig 11) compat.linux.osname=FreeBSD compat.linux.osrelease=4.3-STABLE
sysctl(8) 是一个允许您改变正在运行中的 FreeBSD 系统的接口。它包含一些 TCP/IP 堆栈和虚拟内存系统的高级选项, 这可以让有经验的管理员提高引人注目的系统性能。用 sysctl(8) 可以读取设置超过五百个系统变量。
基于这点,sysctl(8) 提供两个功能:读取和修改系统设置。
查看所有可读变量:
% sysctl -a
读一个指定的变量,例如 kern.maxproc:
% sysctl kern.maxproc kern.maxproc: 1044
要设置一个指定的变量,直接用 variable=value 这样的语法:
# sysctl kern.maxfiles=5000 kern.maxfiles: 2088 -> 5000
sysctl 变量的设置通常是字符串、数字或者布尔型。 (布尔型用 1 来表示'yes',用 0 来表示'no')。
If you want to set automatically some variables each time the machine boots, add them to the /etc/sysctl.conf file. For more information see the sysctl.conf(5) manual page and the 第 11.10.4 节.
有时想要修改只读的 sysctl(8) 的值。 有时这不被推荐,有时也是不可避免的。
例如一些膝上型电脑的 cardbus(4) 设备不会探测内存范围,并且产生看似于这样的错误:
cbb0: Could not map register memory device_probe_and_attach: cbb0 attach returned 12
像上面的错误通常需要修改一些只读的 sysctl(8) 默认设置。要实现这点,用户可以在本地的 /boot/loader.conf.local 里面放一个 sysctl(8) “OIDs”。那些设置定位在 /boot/defaults/loader.conf 文件中。
修复上面的问题用户需要在刚才所说的文件中设置 hw.pci.allow_unsupported_io_range=1。现在 cardbus(4) 就会正常的工作了。
vfs.vmiodirenable sysctl 变量可以设置成0(关)或者1(开);默认是1。 这个变量控制目录是否被系统缓存。大多数目录是小的, 在系统中只使用单个片断(典型的是1K)并且在缓存中使用的更小 (典型的是512字节)。当这个变量设置为关闭 (0) 时, 缓存器仅仅缓存固定数量的目录,即使您有很大的内存。 而将其开启 (设置为1) 时, 则允许缓存器用 VM 页面缓存来缓存这些目录,让所有可用内存来缓存目录。 不利的是最小的用来缓存目录的核心内存是大于 512 字节的物理页面大小(通常是 4k)。 我们建议如果您在运行任何操作大量文件的程序时保持这个选项打开的默认值。 这些服务包括 web 缓存,大容量邮件系统和新闻系统。 尽管可能会浪费一些内存,但打开这个选项通常不会降低性能。 但还是应该检验一下。
vfs.write_behind sysctl 变量默认是 1 (打开)。 它告诉文件系统簇被收集满的时候把内容写进介质, 典型的是在写入大的连续的文件时。 主要的想法是, 如果可能对 I/O 性能会产生负面影响时, 应尽量避免让缓冲缓存被未同步缓冲区充满。 然而它可能降低处理速度并且在某些情况下您可能想要关闭它。
vfs.hirunningspace sysctl 变量决定了在任何场合多少写 I/O 被排进队列以给系统的磁盘控制器。 默认值一般是足够的,但是对有很多磁盘的机器来说您可能需要把它设置成 4M 或 5M。注意这个设置成很高的值(超过缓存器的写极限)会导致坏的性能。 不要盲目的把它设置太高!高的数值会导致同时发生的读操作的迟延。
sysctl 中还有许多与 buffer cache 和 VM页面 cache 有关的值, 一般不推荐修改它们。 从 FreeBSD 4.3 开始,虚拟内存系统已经能够很好地进行自动调整了。
vm.swap_idle_enabled sysctl 变量在有很多用户进入、离开系统和有很多空闲进程的大的多用户系统中很有用。 这些系统注重在空闲的内存中间产生连续压力的处理。通过 vm.swap_idle_threshold1 和 vm.swap_idle_threshold2 打开这个特性并且调整交换滞后 (在空闲时)允许您降低内存页中空闲进程的优先权,从而比正常的出页 (pageout)算法更快。这给出页守护进程带来了帮助。 除非您需要否则不要把这个选项打开,因为您所权衡的是更快地进入内存, 因而它会吃掉更多的交换和磁盘带宽。在小的系统上它会有决定性的效果, 但是在大的系统上它已经做了合适的页面调度这个选项允许 VM 系统容易的让全部的进程进出内存。
FreeBSD 4.3 IDE 写缓存关掉了。这降低了到 IDE 磁盘的带宽但是保证了传进磁盘数据的严格完整性。这个问题是因为 IDE 驱动器当写完成的时候无所事事。IDE 写缓存打开的时候,IDE 驱动器不按顺序把数据写进磁盘。当有很重的磁盘负载的时候它有时迟延写入一些块。 当机或者掉电会引起严重的文件系统讹误。FreeBSD 的默认值改变成安全的模式。 不幸的是结果是带来了很大的性能损失,所以我们在发行版之后把写缓存的默认值改成了 on。您应该注意 hw.ata.wc sysctl 变量来检查一下系统中的默认值。 如果 IDE 写缓存被关闭了,您可以通过设置内核变量为 1 来打开它。这必须在启动时通过 boot loader 来完成。在内核启动之后尝试这么做将会没有效果。
要了解更多的信息,请查阅 ata(4)。
SCSI_DELAY 内核配置会缩短系统启动时间。 默认值在系统启动过程中有 15 秒的迟延时间, 这是一个足够多且可靠的值。把它减少到 5 通常也能工作(特别是现代的驱动器)。新一些的 FreeBSD (5.0 或更高版本) 应该用启动时刻可调整 kern.cam.scsi_delay。 这个可调整的和内核配置选项接受的值是 毫秒 不是 秒 。
tunefs(8) 程序能够用来很好的调整文件系统。 这个程序有很多不同的选项,但是现在只介绍 Soft Updates 的打开和关闭,这样做:
# tunefs -n enable /filesystem # tunefs -n disable /filesystem
在文件系统被挂载之后不能用 tunefs(8) 来修改。打开 Soft Updates 的最佳时机是在单用户模式下任何分区被被挂载前。
Note: 像 FreeBSD 4.5,在文件系统创建时也可以打开 Soft Updates,通过 newfs(8) 的 -U 选项。
Soft Updates 彻底的改善了数据描述(meta-data)的性能, 主要是文件创建和删除,通过内存缓存。我们建议您在所有的文件系统上使用 Soft Updates。应该知道 Soft Updates 的两点:首先, Soft Updates 保证了崩溃后的文件系统完整性,但是很可能有几秒钟 (甚至一分钟!) 之前的数据没有写到物理磁盘。如果您的系统崩溃了您可能会丢失很多工作。 第二,SoftUpdates 推迟文件系统块的释放时间。如果在文件系统 (例如根文件系统)快满了的情况下对系统进行大规模的升级比如 make installworld, 可能会引起磁盘空间不足从而造成升级失败。
有两种传统的方法来把文件系统的元数据 (meta-data) 写入磁盘。 (Meta-data更新是更新类似 inodes 或者目录这些没有内容的数据)
从前,默认方法是同步更新这些元数据(meta-data)。 如果一个目录改变了,系统在真正写到磁盘之前一直等待。 文件数据缓存(文件内容)在这之后以非同步形式写入。 这么做有利的一点是操作安全。如果更新时发生错误,元数据(meta-data) 一直处于完整状态。文件要不就被完整的创建要不根本就不创建。 如果崩溃时找不到文件的数据块,fsck(8) 可以找到并且依靠把文件大小设置为 0 来修复文件系统。 另外,这么做既清楚又简单。缺点是元数据(meta-data)更新很慢。例如 rm -r 命令,从而改变目录下的所有文件, 但是每个目录的改变(删除一个文件)都要同步写入磁盘。 这包含它自己更新目录,inode 表和可能对文件分散的块的更新。 同样问题出现大的文件操作上(比如 tar -x)。
第二种方法是非同步元数据更新。这是 Linux/ext2fs 和 *BSD ufs 的 mount -o async 默认的方法。所有元数据更新也是通过缓存。 也就是它们会混合在文件内容数据更新中。 这个方法的优点是不需要等待每个元数据更新都写到磁盘上, 所以所有引起元数据更新大的操作比同步方式更快。同样, 这个方法也是清楚且简单的,所以代码中的漏洞风险很小。 缺点是不能保证文件系统的状态一致性。如果更新大量元数据时失败 (例如掉电或者按了重启按钮),文件系统会处在不可预知的状态。 系统再启动时没有机会检查文件系统的状态;inode 表更新的时候可能文件的数据块已经写入磁盘了但是相关联的目录没有,却不能用 fsck 命令来清理(因为磁盘上没有所需要的信息)。 如果文件系统修复后损坏了,唯一的选择是使用 newfs(8) 并且从备份中恢复它。
这个问题通常的解决办法是使用 dirty region logging 或者 journaling 尽管它不是一贯的被使用并且有时候应用到其他的事务纪录中更好。 这种方法元数据更新依然同步写入,但是只写到磁盘的一个小区域。 过后他们将会被移动到正确的位置。因为纪录区很小, 磁盘上接近的区域磁头不需要移动很长的距离,所以这些比写同步快一些。 另外这个方法的复杂性有限,所以出现错误的机会也很少。缺点是元数据要写两次 (一次写到纪录区域,一次写到正确的区域)。正常情况下, 悲观的性能可能会发生。从另一方面来讲, 崩溃的时候所有未发生的元数据操作可以很快的在系统启动之后从记录中恢复过来。
Kirk McKusick,伯克利 FFS 的开发者,用 Soft Updates 解决了这个问题:元数据更新保存在内存中并且按照排列的顺序写入到磁盘 (“有序的元数据更新”)。这样的结果是,在繁重的元数据操作中, 如果先前的更新还在内存中没有别写进磁盘,后来的更新就会捕捉到。 所以所有的目录操作在写进磁盘的时候首先在内存中执行 (数据块按照它们的位置来排列,所以它们不会在元数据前被写入)。 如果系统崩溃了这将导致一个固定的 “日志回朔”: 所有不知如何写入磁盘的操作都像没有发生过一样。文件系统的一致性保持在 30 到 60 秒之前。它保证了所有正在使用的资源被标记例如块和 inodes。崩溃之后, 唯一的资源分配错误是一个实际是“空闲”的资源的资源被标记为“使用”。 fsck(8) 可以认出这种情况并且释放不再使用的资源。它对于忽略崩溃后用 mount -f 强制挂上的文件系统的错误状态是安全的。 为了释放可能没有使用的资源,fsck(8) 需要在过后的时间运行。一个主意是用 后台 fsck:系统启动的时候只有一个文件系统的 快照 被记录下来。fsck 可以在过后运行。所有文件系统可以在“有错误”的时候被挂接, 所以系统可以在多用户模式下启动。接着,后台 fsck 可以在所有文件系统需要的时候启动来释放可能没有使用的资源。 (尽管这样,不用 Soft Updates 的文件系统依然需要通常的 fsck。)
它的优点是元数据操作几乎跟非同步一样快 (也就是比需要两次元数据写操作的 logging 更快)。缺点是代码的复杂性(意味着对于丢失用户敏感数据有更多的风险) 和高的内存使用量。另外它有些特点需要知道。崩溃之后, 文件系统状态会“落后”一些。同步的方法用 fsck 后在一些地方可能产生一些零字节的文件, 这些文件在用 Soft Updates 文件系统之后不会存在, 因为元数据和文件内容根本没有写进磁盘(可能发生在运行 rm 之后)。这可能在文件系统上安装大量数据时候引发问题, 没有足够的剩余空间来两次存储所有文件。
kern.maxfiles 可以根据系统的需求加大或者减小。 这个变量指出了在系统上文件描述符的最大数量。当文件描述符表曼的时候, 用 dmesg 命令可以看到 “file: table is full” 将会在系统信息缓存里反复的出现。
每个打开的文件、套接字、fifo 都使用一个描述符。 一个大规模的服务器很容易使用上千个文件描述符, 这取决于系统中同时运行着的服务的数量和类型。
kern.maxfile 的默认值以系统配置文件中的 MAXUSERS 选项来决定。kern.maxfiles 同 MAXUSERS 的值成比例的增长。编译一个自定义内核的时候, 按照您系统中用户的数量来设置这个值是个好主意。 从这个数字可以确定内核很多先前定义的限制。即使一台机器不会真有 256 个用户同时连接,所需要的资源也可能跟一个高负荷的 web 服务器差不多。
Note: 像是 FreeBSD 4.5,在您的内核配置中设置 MAXUSERS 为会通过系统中内存的数量来选择一个合适的值。
kern.ipc.somaxconn sysctl 变量 限制了接收新 TCP 连接侦听队列的大小。对于一个经常处理新连接的高负载 web服务环境来说,默认的 128 太小了。 大多数环境这个值建议增加到 1024 或者更多。 服务进程会自己限制侦听队列的大小(例如 sendmail(8) 或者 Apache), 常常在它们的配置文件中有设置队列大小的选项。 大的侦听队列对防止拒绝服务 DoS 攻击也会有所帮助。
NMBCLUSTERS 内核配置选项指出了系统可用的网络Mbuf的数量。 一个高流量的服务器使用一个小数目的网络缓存会影响 FreeBSD 的性能。 每个 cluster 可能需要2K内存,所以一个1024的值需要在内核中给网络缓存保留2M内存。 可以用简单的方法计算出来需要多少网络缓存。 如果您有一个同时发生1000个以上连接的web服务器, 并且每个连接用掉16K接收和发送缓存, 就需要大概32M网络缓存来确保web服务器的工作。 一个好的简单计算方法是乘以2,所以2x32Mb/2Kb=64MB/2kb=32768。 我们建议在有大量内存的机器上把这个值设置在4096到32768之间。 没有必要把它设置成任意太高的值,它会在启动时引起崩溃。 netstat(1) 的 -m 选项可以用来观察网络cluster使用情况。
kern.ipc.nmbclusters 可以用来在启动时刻调节这个。 仅仅在旧版本的 FreeBSD 需要使用 NMBCLUSTERS config(8) 选项。
经常使用 sendfile(2) 系统调用的繁忙的服务器, 有必要通过 NSFBUFS 内核选项或者在 /boot/loader.conf (查看 loader(8) 以获得更多细节) 中设置它的值来调节 sendfile(2) 缓存数量。 这个参数需要调节的普通原因是在进程中看到 sfbufa 状态。sysctl kern.ipc.nsfbufs 变量在内核配置变量中是只读的。 这个参数是由 kern.maxusers 决定的,然而它可能有必有因此而调整。
Important: 即使一个套接字被标记成非阻塞,在这个非阻塞的套接字上呼叫 sendfile(2) 可能导致 sendfile(2) 呼叫阻塞直到有足够的 struct sf_buf 可用。
net.inet.ip.portrange.* sysctl 变量自动的控制绑定在 TCP 和 UDP 套接字上的端口范围。 这里有三个范围:一个低端范围,一个默认范围和一个高端范围。 大多数网络程序分别使用由 net.inet.ip.portrange.first 和 net.inet.ip.portrange.last 控制的从 1024 到 5000 的默认范围。端口范围用作对外连接,并且某些情况可能用完系统的端口, 这经常发生在运行一个高负荷 web 代理服务器的时候。 这个端口范围不是用来限制主要的例如 web 服务器进入连接或者有固定端口例如邮件传递对外连接的。 有时您可能用完了端口,那就建议适当的增加 net.inet.ip.portrange.last。 10000、20000 或者 30000 可能是适当的值。 更改端口范围的时候也要考虑到防火墙。一些防火墙会阻止端口的大部分范围 (通常是低范围的端口)并且用高端口进行对外连接(--)。 基于这个问题建议把 net.inet.ip.portrange.first 设置的小一点。
限制 TCP 带宽延迟和 NetBSD 的 TCP/Vegas 类似。 它可以通过将 sysctl 变量 net.inet.tcp.inflight.enable 设置成 1 来启用。 系统将尝试计算每一个连接的带宽延迟积, 并将排队的数据量限制在恰好能保持最优吞吐量的水平上。
这一特性在您的服务器同时向使用普通调制解调器, 千兆以太网, 乃至更高速度的光与网络连接 (或其他带宽延迟积很大的连接) 的时候尤为重要, 特别是当您同时使用滑动窗缩放, 或使用了大的发送窗口的时候。 如果启用了这个选项, 您还应该把 net.inet.tcp.inflight.debug 设置为 0 (禁用调试), 对于生产环境而言, 将 net.inet.tcp.inflight.min 设置成至少 6144 会很有好处。 然而, 需要注意的是, 这个值设置过大事实上相当于禁用了连接带宽延迟积限制功能。 这个限制特性减少了在路由和交换包队列的堵塞数据数量, 也减少了在本地主机接口队列阻塞的数据的数量。在少数的等候队列中、 交互式连接,尤其是通过慢速的调制解调器,也能用低的 往返时间操作。但是,注意这只影响到数据发送 (上载/服务端)。对数据接收(下载)没有效果。
调整 net.inet.tcp.inflight.stab 是 不 推荐的。 这个参数的默认值是 20, 表示把 2 个最大包加入到带宽延迟积窗口的计算中。 额外的窗口似的算法更为稳定, 并改善对于多变网络环境的相应能力, 但也会导致慢速连接下的 ping 时间增长 (尽管还是会比没有使用 inflight 算法低许多)。 对于这些情形, 您可能会希望把这个参数减少到 15, 10, 或 5; 并可能因此而不得不减少 net.inet.tcp.inflight.min (比如说, 3500) 来得到希望的效果。 减少这些参数的值, 只应作为最后不得已时的手段来使用。
Note: 对于 4.X 和更早的 FreeBSD 版本, inflight sysctl 变量直接隶属于 net.inet.tcp。 它们的名字是 (按字母顺序): net.inet.tcp.inflight_debug, net.inet.tcp.inflight_enable, net.inet.tcp.inflight_max, net.inet.tcp.inflight_min, net.inet.tcp.inflight_stab。
不管您计划的如何好,有时候系统并不像您所期待的那样运行。 如果您发现需要更多的交换空间,添加它很简单。 有三种方法增加交换空间:添加一块新的硬盘驱动器、通过 NFS 使用交换空间和在一个现有的分区上创建一个交换文件。
这是添加交换空间最好的方法, 当然为了达到这个目的需要添加一块硬盘。 毕竟您总是可以使用另一块磁盘。如果能这么做, 重新阅读一下手册中关于交换空间的 第 11.2 节 来了解如何最优地安排交换空间。
通过 NFS 来交换只在您没有本地硬盘交换的时候被建议。在 FreeBSD 4.X 以前的版本中使用NFS交换速度很慢并且效率低下。4.0-RELEASE 和更新的版本中他的速度和效率还是可以接受的。即使使用新版本的 FreeBSD,NFS 交换也会被可用的网络带宽限制并且增加 NFS 服务器的负担。
您可以创建一个指定大小的文件用来当作交换文件。 在我们的例子中我们将会使用叫做 /usr/swap0 的 64MB 大小的文件。当然您也可以使用任何您所希望的名字。
Example 11-1. 在 FreeBSD 4.X 上创建一个交换文件
确认您的内核配置包含了 vnode 驱动。 它不包含在最近版本的 GENERIC。
pseudo-device vn 1 #Vnode driver (turns a file into a device)
创建一个 vn-device 设备:
# cd /dev # sh MAKEDEV vn0
创建一个交换文件 (/usr/swap0):
# dd if=/dev/zero of=/usr/swap0 bs=1024k count=64
赋予它(/usr/swap0)一个适当的权限:
# chmod 0600 /usr/swap0
在 /etc/rc.conf 中启用交换文件:
swapfile="/usr/swap0" # Set to name of swapfile if aux swapfile desired.
通过重新启动机器或下面的命令使交换文件立刻生效:
# vnconfig -e /dev/vn0b /usr/swap0 swap
Example 11-2. 在 FreeBSD 5.X 上创建一个交换文件:
确认您的内核配置包含虚拟磁盘(Memory disk)驱动 (md(4))。它在 GENERIC 内核中是默认的。
device md # Memory "disks"
创建一个交换文件(/usr/swap0):
# dd if=/dev/zero of=/usr/swap0 bs=1024k count=64
赋予它(/usr/swap0)一个适当的权限:
# chmod 0600 /usr/swap0
在 /etc/rc.conf 中启用交换文件:
swapfile="/usr/swap0" # Set to name of swapfile if aux swapfile desired.
通过重新启动机器或下面的命令使交换文件立刻生效:
# mdconfig -a -t vnode -f /usr/swap0 -u 0 && swapon /dev/md0
以有效的方式利用硬件资源是非常重要的。在提出 ACPI 之前,管理电源使用和系统散热对操作系统是很困难的。硬件被嵌入的 BIOS 接口管理,例如可插拔 BIOS (PNPBIOS)或者高级电源管理(APM) 等等。电源和资源管理是现代操作系统的关键组成部分。 例如您可能当系统温度过高的时候让您的操作系统能监视到 (并且可能提醒您)。
在 FreeBSD 使用手册的这一章节,我们将提供 ACPI 全面的信息。参考资料会在末尾。ACPI 在 FreeBSD 5.X 及以上的操作系统中作为一个默认的内核模块被支持。对于 FreeBSD 4.9,ACPI 可以通过在内核配置文件中添加 device acpica 并且重新编译内核来启用。
高级配置和电源接口 (ACPI) 是一个业界标准的硬件资源和电源管理接口 (因此而得名) 。它是 操作系统控制的配置和电源管理(Operating System-directed configuration and Power Management),也就是说, 它给操作系统(OS)提供了更多的控制和弹性。 现代操作系统“延伸”了当前即插即用接口(像是 FreeBSD4.X 中使用的 APM)的限制,在 ACPI 的介绍之前。 ACPI 是 APM(高级电源管理) 的直接继承者。
高级电源管理 (APM) 是一种基于系统目前的活动控制其电源使用的机制。 APM BIOS 由 (系统的) 制造商提供, 并且是硬件平台专属的。 在 OS 中的 APM 驱动作为中介来访问 APM 软件接口, 从而实现对电源使用的管理。
APM 有四个主要的问题。 首先, 电源管理是通过 (制造商专属的) BIOS 实现的, 而 OS 则完全不了解其细节。 例如, 用户在 APM BIOS 中设置了硬盘驱动器的空闲等待数值, 当超过这一空闲时间的限制时, 它 (BIOS) 将会减慢硬盘驱动器的速度, 而不会征求 OS 的同意。 第二, APM 逻辑是嵌入 BIOS 的, 因此它是在 OS 的控制之外运转的。 这意味着用户只能通过通过刷新他们 ROM 中的 APM BIOS 才能够解决某些问题; 而这是一个很危险的操作, 因为它可能使系统进入一个无法恢复的状态。 第三, APM 是一种制造商专属的技术, 也就是说有很多第三方的 (重复的工作) 以及 bugs, 如果在一个制造商的 BIOS 中有, 也未必会在其他的产品中解决。 最后但绝不是最小的问题, APM BIOS 没有为实现复杂的电源策略提供足够的余地, 也无法实现能够非常适合具体机器的策略。
即插即用 BIOS (PNPBIOS) 在很多时候都是不可靠的。 PNPBIOS 是 16-位 的技术, 因此 OS 不得不使用 16-位 模拟才能够与 PNPBIOS 的方法 “接口”。
FreeBSD APM 驱动在 apm(4) 手册页中有描述。
acpi.ko 驱动默认的在启动时通过 loader(8) 被加载并且 不应该 被编译进内核。原因是这个模块跟系统很容易的工作在一起,比方说不用为了 acpi.ko 而重新编译内核。 这对更简单的测试来说很有利。另一个原因是系统启动后再启动 ACPI 不是很有用,并且在一些情况下会失败。 拿不准的话只要全部禁止 ACPI 即可。 这个驱动不应该而且不能被卸载,因为系统通过它跟各种各样的硬件打交道。 ACPI 可以通过 acpiconf(8) 来禁止。实际上通过 ACPI 的交互可以通过 acpiconf(8) 来完成。 简单的说,如果任何关于 ACPI 的信息在 dmesg(8) 的输出中,那么它很可能已经运行了。
Note: ACPI 和 APM 不能共存并且应该份开始用。后来装载的如果注意到另一个在运行将会终止执行。
最简单的表现形式是,ACPI 可以通过 acpiconf(8) 的 -s 标志和一个 1-5 的选项来使系统进入休眠状态。 5 选项将会像下面动作一样让系统软关机:
# halt -p
其他选项也是可行的。查看 acpiconf(8) 手册页以获得更多信息。
ACPI 是一种全新的发现设备、 管理电源使用, 提供过去由 BIOS 管理的访问不同硬件的标准化方法。 让 ACPI 在各种系统上都能正确使用的工作一直在进行, 但许多主板的 ACPI 机器语言 (AML) 字节代码中的 bug, FreeBSD 的内核中资系统设计的不完善, 以及 Intel ACPI-CA 解释器中的 bug 仍然不时会出现。
这份文档期望能够帮助您协助 FreeBSD ACPI 的维护人员来找到您所观察到的问题的根源, 并通过调试找到其解决方法。 感谢您阅读这份文档, 我们也希望能够解决您的系统上的问题。
Note: 在提交问题之前, 请确认您已经在运行最新的 BIOS 版本, 此外, 也包括嵌入式控制器的固件版本。
如果您希望提交一个问题, 请确保将下述信息法到 freebsd-acpi@FreeBSD.org:
问题行为的描述, 包括系统类型、型号,以及任何触发问题的相关信息。 另外, 请注意尽可能准确地描述这一问题是否对您是陌生的。
在 “boot -v” 之后得到的 dmesg(8) 输出, 以及任何在重现 bug 时出现的错误信息。
在禁用了 ACPI 之后的 “boot -v” 的 dmesg(8) 输出, 如果您发现禁用 ACPI 能够帮助消除问题。
来自 sysctl hw.acpi的输出。 这也是找到您的系统所提供的功能的一种好办法。
能够得到您的 ACPI Source Language (ASL) 的 URL。 不要 把 ASL 直接发到邮件列表中, 因为它们可能非常大。 为了得到 ASL 您可以运行这个命令:
# acpidump -t -d > name-system.asl
(把 name 改为您的登录名, 并把 system 改为您的硬件制造商及其型号。 例如: njl-FooCo6000.asl)
许多开发者也会订阅 FreeBSD-CURRENT 邮件列表 但还是请发到 freebsd-acpi 这样它会被更多人看到。 请耐心等待, 因为我们都有全职的其他工作。 如果您的 bug 不是显而易见的, 我们可能会要求您通过 send-pr(1) 来提交一个 PR。 在输入 PR 时,请将同样的信息包含进去。 这将帮助我们来追踪和解决问题。 不要在给 freebsd-acpi 写信之前发送 PR 因为我们把它当作已知文体的备忘录而不是报告机制。 您的问题很可能已经被其他人报告过了。
ACPI 存在于采用 ia32 (x86)、 ia64 (安腾)、 以及 amd64 (AMD) 架构的所有现代计算机上。 完整的标准具有大量的各式功能, 包括 CPU 性能管理、 电源控制、 温度监控、 电池系统、 嵌入式控制器以及总线枚举。 绝大多数系统实现比完整标准的功能要少一些。 例如, 桌面系统通常只实现总线枚举部分, 而笔记本则通常支持降温和电源管理功能。 笔记本通常还提供休眠和唤醒支持, 并提供与此适应的复杂功能。
符合 ACPI 的系统中有许多组件。 BIOS 和芯片组制造商提供一些固定的表 (例如, FADT) 在存储器中, 以提供类似 APIC 映射 (用于 SMP)、 配置寄存器、 以及简单的配置值等等。 另外, 一个字节代码 (bytecode) 表 (系统区别描述表 DSDT) 则提供了通过树状命名空间来指定设备及其功能的方法。
ACPI 驱动必须要处理固定表, 实现字节码解释器, 并修改驱动程序和内核, 以接受来自 ACPI 子系统的信息。 对于 FreeBSD, Intel 提供了一个解释器 (ACPI-CA), 它在 Linux 和 NetBSD 也可以使用。 ACPI-CA 源代码可以在 src/sys/contrib/dev/acpica 找到。 用于在 FreeBSD 中允许 ACPI-CA 正确运转的代码则在 src/sys/dev/acpica/Osd。 最后, 用于实现 ACPI 设备的驱动可以在 src/sys/dev/acpica 找到。
要让 ACPI 正常工作, 它的每一部分都必须工作正常。 下面是一些常见的问题, 按照出新的频繁程度排序, 并给出了一些绕过或修正它们的方法。
某些时候, 唤醒操作会导致鼠标不再正常工作。 已知的绕过这一问题的方法, 是在 /boot/loader.conf 文件中添加 hint.psm.0.flags="0x3000" 设置。 如果这样做不能解决问题, 请考虑按前面介绍的方法提交问题报告。
ACPI 提供了三种休眠到 RAM (STR) 的状态, S1-S3, 以及一个休眠到磁盘的状态 (STD), 称作 S4。 S5 是 “软关机” 同时也是系统接好电源但没有开机时的正常状态。 S4 实际上可以用两种不同的方法来实现。 S4BIOS 是一种由 BIOS 辅助的挂起到磁盘方法, 而 S4OS 则是完全由操作系统实现的。
可以使用 sysctl hw.acpi 来查看与休眠有关的项目。 这里是我的 Thinkpad 上得到的结果。
hw.acpi.supported_sleep_state: S3 S4 S5 hw.acpi.s4bios: 0
这表示我可以使用 acpiconf -s 来测试 S3, S4OS, 以及 S5。 如果 s4bios 是一 (1), 则可以使用 S4BIOS 来代替 S4 OS。
当测试休眠/唤醒时, 从 S1 开始, 如果它被支持的话。 这个状态是最可能正常工作的状态, 因为它不需要太多的驱动支持。 没有人实现 S2 但如果您有它的支持, 则应该和 S1 类似。 下一件值得尝试的是 S3。 这是最深的 STR 状态, 并需要一系列驱动的支持才能够正常地重新初始化您的硬件。 如果您在唤醒系统时遇到问题, 请不要吝惜发邮件给 freebsd-acpi 邮件列表, 尽管不要指望问题一定会很快解决, 因为有许多驱动程序/硬件需要进行更多的测试和改进。
为了帮助隔离问题, 请在内核中删去尽可能多的驱动。 如果这样做能够解决问题, 请尝试逐个加载驱动直到问题再次出现。 通常预编译的驱动程序如 nvidia.ko、 X11 显示驱动, 以及 USB 的问题最多, 而以太网卡的驱动则通常工作的很好。 如果您能够通过加载和卸载驱动使系统正常工作, 您可以通过将适当的命令放到 /etc/rc.suspend 和 /etc/rc.resume 来将这个过程自动化。 在这两个文件中有一个注释掉的卸载和加载驱动程序的例子供您参考。 另外您还可以将 hw.acpi.reset_video 设置为零 (0), 如果您的显示在唤醒之后显得很混乱。 此外您还可以尝试更长或更短的 hw.acpi.sleep_delay 值看看是否有所助益。
另一件值得一试的事情是使用一个比较新的包含 ACPI 支持的 Linux 发行版来试试看他们的 休眠/唤醒 功能是否在同样的硬件上能够正常工作。 如果在 Linux 下正常, 则很可能是 FreeBSD 驱动程序的问题, 而隔离问题并找到存在问题的驱动有助于解决它。 需要注意的是 ACPI 的维护人员通常并不维护其他驱动 (例如 声音、 ATA, 等等) 因此如果最终发现是驱动的问题最好还是发到 freebsd-current 邮件列表并发给驱动程序的维护者。 如果您喜欢冒险, 则可以加一些 printf(3) 到有问题的驱动中, 以找到它的恢复功能发生问题的位置。
最后, 试试看禁用 ACPI 并代之以启用 APM。 如果 休眠/唤醒 能够在 APM 下正常工作, 使用 APM 可能会更好, 特别是对于较老的硬件 (2000年以前)。 硬件制造商需要一些时间来让老硬件的 ACPI 工作正常, 而 ACPI 的问题十之八九是 BIOS 中的毛病引发的。
绝大多数系统停止响应是由于未能及时响应中断或发生了中断风暴导致的。 芯片组有很多问题最终会溯源到 BIOS 如何在引导系统之前配置中断, APIC (MADT) 表的正确性, 以及 系统控制中断 (SCI) 如何路由。
通过察看 vmstat -i 的输出中包括 acpi0 的那一行可以区分中断风暴和未能及时响应中断。 如果每秒计数器增长的速度多于一两个, 则您是遇到了中断风暴。 如果系统停止了响应, 您可以尝试停止内核并进入 DDB (在控制台上按 CTRL+ALT+ESC) 并输入 show interrupts。
处理中断问题的救命稻草是尝试禁用 APIC 支持, 这是通过在 loader.conf 中加入 hint.apic.0.disabled="1" 完成的。
崩溃对于 ACPI 是比较罕见的情况, 如果发现, 将会非常重视并很快修复。 您要做的第一件事是设法隔离出能够重现崩溃 (如果可能的话) 的操作并获取一份调用堆栈。 请启用 options DDB 并设置串行控制台 (参见 第 20.6.5.3 节) 或配置一个 dump(8) 分区。 您将在 DDB 中通过 tr 得到调用堆栈。 如果您只能用手抄的方法记录它, 一定要记下头五 (5) 行和最后五 (5) 行。
然后, 尝试通过在启动时禁用 ACPI 来隔离故障。 如果这样做能够正常工作, 请通过设置 debug.acpi.disable 的那组数值来隔离具体是哪个 ACPI 子系统的问题。 请参见 acpi(4) 联机手册中给出的那些例子。
首先请尝试在 loader.conf(5) 中设置 hw.acpi.disable_on_poweroff=“0”。 这将让 ACPI 不再在关机过程中禁用一些事件。 基于同样的原因, 一些系统需要把这个值设置为 “1” (这是默认值)。 这通常能够修复在休眠或关机时立即再次启动的问题。
如果您有 ACPI 的其他问题 (同 docking station 协同工作、 无法检测设备, 等等), 请把描述发给邮件列表; 不过, 这些问题也有可能和 ACPI 中尚未完成的部分有关, 它们可能需要时间才能被实现。 请保持耐心, 并准备测试我们可能会发给您的补丁。
最常见的问题是 BIOS 制造商提供的不正确 (甚至完全错误的!) 字节代码。 这通常会以类似下面这样的内核消息显示在控制台上:
ACPI-1287: *** Error: Method execution failed [\\_SB_.PCI0.LPC0.FIGD._STA] \\ (Node 0xc3f6d160), AE_NOT_FOUND
许多时候, 您可以通过将 BIOS 升级到最新版本来解决此类问题。 绝大多数控制台消息是无害的, 但如果您有其他问题例如电池工作不正常, 则从 AML 开始查找问题将是一条捷径。 字节代码, 或常说的 AML, 是从一种叫做 ASL 的语言写成的源代码进行编译得到的结果。 AML 一般存放在 DSDT 表中。 要得到您系统的 ASL, 需要使用 acpidump(8)。 需要同时指定 -t (显示固定标的内容) 和 -d (将 AML 反编译成 ASL) 两个选项。 请参见 如何提交调试信息 一节了解如何使用它。
最方便的初步检查是尝试重新编译 ASL 来看看是否有错误。 通常可以忽略这一过程中产生的警告, 但错误一般就都是 bug, 它们通常就是导致 ACPI 无法正常工作的原因。 要重新编译您的 ASL, 可以使用下面的命令:
# iasl your.asl
我们的长期目标是让每一个人都能够在不需要任何用户干预的情况下使用 ACPI。 然而, 目前我们仍然在开发绕过 BIOS 制造商常见错误的方法。 Microsoft 解释器 (acpi.sys 和 acpiec.sys) 并不会严格地检查是否遵守了标准, 因此许多只在 Windows 中测试 ACPI 的 BIOS 制造商很可能永远不会修正他们的 ASL。 我们希望不断地找出并用文档说明 Microsoft 的解释器到底允许那些不标准的行为, 并在 FreeBSD 进行对应的修改使它能够正常工作而不需要用户修正 ASL。 作为一项临时缓解问题的方法, 并帮助我们确认其行为, 您可以手工修正 ASL。 如果这样能够解决问题, 请把新旧 ASL 的 diff(1) 发给我们, 这样我们就有可能绕过 ACPI-CA 中的错误行为, 从而不再需要您来手工修正。
下面是一些常见的错误信息, 它们的原因, 以及如何修正。
某些 AML 假定世界是由不同版本的 Windows 组成的。 您可以让 FreeBSD 声称自己是任意 OS 来看一看是否能够修正问题。 比较简单的办法是设置 hw.acpi.osname="Windows 2001" 到 /boot/loader.conf 中, 或使用您在 ASL 中找到的其他字符串。
一些方法可能没按照标准要求的那样显式地返回值。 尽管 ACPI-CA 无法处理它, 但 FreeBSD 提供了一个绕过它并允许其暗含地返回值的方法。 您也可以增加一个显式的 Return 语句, 如果您知道那里需要返回一个值的话。 要强制 iasl 编译 ASL, 需要使用 -f 标志。
在定制 your.asl 之后, 您可以通过下面的命令编译它:
# iasl your.asl
可以使用 -f 标志来强制创建 AML, 即使在编译过程中发生了错误。 请注意某些错误 (例如, 缺少 Return 语句) 会自动被解释器忽略掉。
DSDT.aml 是 iasl 命令的默认输出文件名。 可以加载它来取代您 BIOS 中存在问题的副本 (它仍然存在于闪存中), 其方法是按下面的说明编辑 /boot/loader.conf:
acpi_dsdt_load="YES" acpi_dsdt_name="/boot/DSDT.aml"
一定要把您的 DSDT.aml 复制到 /boot 目录中。
ACPI 驱动程序提供了非常灵活的调试机制。 这允许您指定一组子系统, 以及所需要的详细信息。 需要调试的子系统可以按 “layers(层)” 来指定, 并分为 ACPI-CA 组件 (ACPI_ALL_COMPONENTS) 和 ACPI 硬件支持 (ACPI_ALL_DRIVERS)。 调试输出的详细程度可以通过 “level(详细度)” 来指定, 其范围是 ACPI_LV_ERROR (只报告错误) 到 ACPI_LV_VERBOSE (显示所有)。 “level” 是一个位掩码因此可以一次设置多个选项, 中间用空格分开。 实际使用中您应该考虑使用串行控制台来记录输出, 如果它太长以至于冲掉了控制台消息缓冲的话。 不同的层和输出详细度的完整列表可以在 acpi(4) 联机手册中找到。
调试输出默认并不开启。 要起用它, 您需要在内核设置中添加 options ACPI_DEBUG, 如果您的内核中编入了 ACPI 的话。 您还可以在 /etc/make.conf 中加入 ACPI_DEBUG=1 来在全局起用它。 如果它只是模块, 您可以用下面的方法来重新编译 acpi.ko:
# cd /sys/modules/acpi/acpi && make clean && make ACPI_DEBUG=1
安装 acpi.ko 到 /boot/kernel and add your 并把所需的详细度和层在 loader.conf 中指定。 这个例子将启用所有 ACPI-CA 组件以及所有 ACPI 硬件驱动 (CPU、 LID, 等等) 的消息。 只输出错误信息, 也就是最低的详细度。
debug.acpi.layer="ACPI_ALL_COMPONENTS ACPI_ALL_DRIVERS" debug.acpi.level="ACPI_LV_ERROR"
如果您需要的信息是由某个特定的事件触发的 (比如说, 休眠之后的唤醒), 您可以不修改 loader.conf 而转而使用 sysctl 来在启动和为那个事件准备系统之后再指定层和详细度。 这些 sysctl 的名字和 loader.conf 中的一致。
关于 ACPI 的更多信息可以从下面这些地方找到:
ACPI 邮件列表存档 http://lists.freebsd.org/pipermail/freebsd-acpi/
旧的 ACPI 邮件列表存档 http://home.jp.FreeBSD.org/mail-list/acpi-jp/
The ACPI 2.0 标准 http://acpi.info/spec.htm
FreeBSD 手册页: acpi(4), acpi_thermal(4), acpidump(8), iasl(8), acpidb(8)
DSDT 调试资源. (使用 Compaq 作为例子但通常情况下都很有用。)
启动电脑以及加载操作系统的过程被称为“引导过程”, 或者简称为“引导”。 FreeBSD 的引导过程给用户自定义启动提供了很大的伸缩性, 您可以选择启动不同的操作系统,或者是同一系统的不同版本及内核。
本章将详细介绍您能在 FreeBSD 引导过程中设置的配置选项。 这包括了引导内核、探测设备并启动 init(8) 等等之前所发生的所有事情。 这些事项一般发生在文本由白变灰时。
读完这章您将会知道:
FreeBSD 引导系统里的各项组件, 以及它们之间的交互方式.
在 FreeBSD 引导时给各组件配置选项以控制引导过程。
device.hints(5)的基本知识。
只适用于x86: 本章只描述了运行于 Intel x86 体系之上的 FreeBSD 的引导过程。
启动电脑及启动和引导操作系统构成了一个有趣的两难境地。 按照定义在操作系统被启动之前计算机是无法完成任何任务的,包括运行磁盘上的程序。 如果计算机在没有操作系统的情况下不能运行来自于磁盘上的程序而操作系统又是放在磁盘上的, 那操作系统是如何启动的呢?
在 Munchausen男爵历险记 (The Adventures of Baron Munchausen) 这本书中有一个和这个过程类似的故事, 一个人掉到了下水管道里, 然后靠着拉自己的靴襻 (bootstrap) 克服重重困难爬了出来。 在早期文献中, 多以术语 bootstrap 来指代操作系统的加载机制, 如今它逐渐被简写为 “booting”。
在 x86 硬件体系中,基本输入/输出系统 (BIOS) 负责加载操作系统, 为了做到这一点,BIOS 在磁盘上寻找主引导记录 (MBR),而 MBR 必须在放置的磁盘的特定位置。BIOS 有足够的能力来读入和运行 MBR, 且假使地认为 MBR 能完成加载操作系统的剩余任务。
如果您只安装了一个操作系统,那么一个标准的 MBR 就足够了。 这个 MBR 先在磁盘上搜索可引导的分区, 然后运行分区上的代码以加载操作系统的其它部分。
如果您在磁盘上安装了多个操作系统那么您可以安装一个不同的 MBR,它能显示一张操作系统的列表,您能从中选择启动哪个。 FreeBSD 自带了一个这样的 MBR,其它的操作系统厂商亦提供可选的 MBR。
启动系统的剩余部分被分为三个阶段。第一阶段由 MBR 执行,它只是使计算机进入特定的状态然后执行第二阶段。 第二阶段稍微干得多一些。第三阶段完成加载操作系统的任务。 工作被分为三个阶段是因为 PC 标准对第一第二阶段执行的程序的大小有所限制。 把这些任务连在一起使得 FreeBSD 可以提供更大伸缩性的加载器 (loader)。
然后内核启动,它开始探测设备并初始化它们。 一旦内核引导进程完成任务,内核将控制权交给用户进程 init(8), 它确认磁盘是否处于可用状态。init(8) 然后开始用户级资源配置: 加载文件系统启动网卡,及粗略地启动所有 FreeBSD 系统加载时经常运行的进程。
FreeBSD MBR 放置在 /boot/boot0。 这是真实 MBR 的一份 复制品,真正的 MBR 必须放在磁盘上 FreeBSD 分区以外的特定部分。
boot0 是非常简单的,因为在 MBR 里的代码只有 512 字节。 如果您安装了 FreeBSD MBR 且装了多个操作系统, 在引导时您会看到如下的内容:
目前已经知道一些其它操作系统,特别是 Windows , 会以自己的 MBR 覆盖现有 MBR。 如果发生了这种事情, 或者您想用 FreeBSD 的 MBR 覆盖现有的 MBR,您可以使用以下的命令:
# fdisk -B -b /boot/boot0 device
device 是要写入 MBR 的设备名,比如 ad0 代表第一个 IDE 磁盘,ad2 代表第二个 IDE 控制器上的第一个 IDE 磁盘, da0 代表第一个 SCSI 磁盘,等等。
如果您是 linux 用户,您可能更喜欢使用 LILO 来控制引导过程,您可以编辑 /etc/lilo.conf 文件,或者在安装 FreeBSD 过程中选择 Leave The Master Boot Record Untouched 选项。 如果您安装了 FreeBSD 引导管理器,您可以启动 linux 然后更改 LILO 的配置文件 /etc/lilo.conf,加入以下的选项:
other=/dev/hdXY table=/dev/hdb loader=/boot/chain.b label=FreeBSD
这样就可以通过 LILO 来引导 FreeBSD 和 linux 了。 在我们的例子中,我们使用 XY 确定驱动器号和分区。 如果您使用的是 SCSI 驱动器,您需要将 /dev/hdXY 改成 /dev/sdXY, 这里再次使用了 XY 的语法。 如果您安装的两个系统在同一驱动器上,loader=/boot/chain.b 选项可以去掉。现在您可以执行 /sbin/lilo -v 使修改生效。
概念上,第一,第二阶段同属于一个程序,处于磁盘的相同区域。但由于空间限制, 它们被分为两部分。可是您总是会一起安装它们。
它们放置在引导分区的引导扇区里。在引导扇区里能找到 boot0、MBR 以及其它用于引导系统的程序。/boot 目录下的文件是真实文件的拷贝,真实文件放置在 FreeBSD 文件系统之外。
boot1 非常简单,因为它再多也只能有 512 字节, 只能识别储存着分区信息的 disklabel, 及寻找执行 boot2。
boot2 稍微有点加强,能够理解 FreeBSD 的文件系统以便于寻找里面的文件, 能提供选择内核和加载器的简单界面。
因为 loader 有着更强的功能, 提供了一套易于使用的引导配置,boot2 一般都执行 loader, 但以前它的任务是直接运行内核。
如果您要更改已安装的 boot1 和 boot2,请使用命令 disklabel(8)。
# disklabel -B diskslice
diskslice 是用于引导的磁盘和分区, 比如 ad0s1 代表第一个 IDE 磁盘上的第一个分区。
dangerously dedicated如果您在 disklabel(8) 命令中只使用了磁盘名,比如 ad0,就会破坏磁盘上的所有分区。 这当然不是您所希望的,所以在按下 回车 之前 一定要对命令进行多次确认。
加载器 (loader) 是三个阶段中的最后阶段, 且是放置在文件系统之中的,一般是文件 /boot/loader。
loader 被作为一种友好的配置方式,使用了一组内建且易用的命令集。 这些命令由一个强大的多的解释器支持构建,其本身带有复杂得多的命令集。
初始时,loader 会探测控制台和磁盘,识别是从哪块盘引导的。 它会根据这些信息设置变量, 启动解释器以接受通过脚本或交互方式传来的用户命令。
loader 然后会读取并运行 /boot/loader.rc, 默认地读取 /boot/defaults/loader.conf 以设置可靠的默认变量,读取 /boot/loader.conf 对这些变量作本地修改。loader.rc 依据这些变量进行动作,加载任何被选择的模块和内核。
最后,默认地,loader 会停留 10 秒等待按键, 若没有发生中断,就开始引导内核。如果被中断,用户会得到一个命令行提示符, 在这里用户得更改变量、卸载所有模块、加载模块、最后引导 或重新引导。
这些是最常用的 loader 命令.对所有可用命令的解释请参见 loader(8)。
在给定的时间内如果没有中断发生就引导内核。它显示一个倒数计时, 默认的时间范围是 10 秒。
立即按照给定的选项 (如果有的话) 和内核名 (如果是内核的) 引导内核。
基于变量对各种模块进行自动配置 (和引导内核时发生的一样)。 您只须记住要先使用 unload 命令, 然后修改一些变量,比如 kernel。
显示从文件 /boot/loader.help 读取的帮助信息。如果给定的主题是 index, 那么列出来的是所有可用的主题。
通过给定的文件名处理文件。文件被读入,然后被一行一行地解释。 任何错误都会立即中止 include 命令。
加载内核、内核模块,或者是给定类型的文件 (通过给定的文件名)。 任何在文件名后面的参数都会被传给文件。
显示给定路径或者是根目录 (如果路径没有指定) 下面的文件列表。 如果指定了 -l 选项,文件大小也会显示。
列出所有可以加载模块的设备。 如果指定了-v 选项,会显示出更多的细节。
显示已被加载的模块。如果指明了 -v 选项, 会显示更多的细节。
显示指定的文件,每隔 LINES 停顿一次。
立即重启系统。
设置 loader 的环境变量。
移除所有已被加载的模块。
这里有一些实际中 loader 用法的示例
只是简单的引导默认内核,不同的是进入单用户模式:
boot -s
卸载默认内核和模块,然后加载旧的 (或者其它) 的内核:
unload load kernel.old
您可以使用被称为通用内核的 kernel.GENERIC, 或者您以前安装的内核 kernel.old (当您升级或配置了您自己的内核等时候)。
Note: 使用以下命令加载常用的模块和另一个内核:
unload set kernel="kernel.old" boot-conf
加载内核配置脚本:
load -t userconfig_script /boot/kernel.conf
一旦内核被 loader (一般情况下) 或者 boot2 (越过 loader) 加载, 它将检查引导标志,如果有的话,就会进行必要的动作调整。
这里是一些常用的引导标志:
在内核初始化时,询问作为根加载的设备。
从 CDROM 引导。
运行 UserConfig (引导时的内核配置器)
引导进入单用户模式
在内核引导过程中显示更有的信息
Note: 还有更多的引导标志,阅读 boot(8) 以获取有关它们的信息。
Note: 这是 FreeBSD 5.0 及其以后版本的组件, 不存在于早前的版本中。
在初始化系统启动时,loader(8) 会读取 device.hints(5) 文件。这个文件以变量的形式储存着内核引导信息, 有时被称为 “device hints”。 设备驱动程序用“device hints” 对设备进行配置。
Device hints 也可以在 第三阶段的boot loader 的命令行提示符中指定。变量可以用 set 命令添加,unset 命令删除, show 命令查看。在文件 /boot/device.hints 设置的变量亦可以在这里被覆盖。键入 boot loader 中的变量不是永久性的,在下次启动时就会被忘记。
一旦系统引导成功,kenv(1) 命令可以用来清楚所有的变量。
文件 /boot/device.hints 的语法是一行一个变量, 使用“#”作为注释标记。 每行是按照如下方式组织的:
hint.driver.unit.keyword="value"
第三阶段 boot loader 的语法是:
set hint.driver.unit.keyword=value
driver 是设备驱动程序名,unit 是设备驱动程序单位名,keyword 是 hint 关键字。 关键字可以由以下选项组成:
at:指明设备所绑定的总线
port:指明所使用 I/O 的起始地址。
irq:指明所使用的中断请求号。
drq:指明 DMA channel 号。
maddr:指明设备占用的物理内存地址。
flags:给设备设置各种标志位。
disabled:如果设成 1, 设备被禁用。
设备驱动程序能够接受更多的 hints,推荐您参看它们的联机手册。参看 device.hints(5)、kenv(1)、loader.conf(5) 和 loader(8) 联机手册以获取更多的信息。
一旦内核完成引导,它就把控制权交给了用户进程 init(8),它放置在 /sbin/init, 或者 init_path 变量指定的程序路径中。 这个变量是在 loader 里面设置的。
此模式可以通过 自动重启队列或者通过带有 -s 选项的用户引导或通过在 loader 里设置 boot_single 变量等多种方式来达到。
也可以在多用户模式下调动无 reboot(-r)选项和 halt (-h) 选项的 shutdown(8) 命令来进入单用户模式。
如果系统 控制台 在文件 /etc/ttys 中被设置为 不安全(insecure), 在初始化单用户模式前会出现要求输入 root 密码的命令行提示符。
Example 12-3. 在 /etc/ttys 文件中的不安全控制台
# name getty type status comments # # If console is marked "insecure", then init will ask for the root password # when going to single-user mode. console none unknown off insecure
Note: 把控制台设置成 不安全 (insecure) 使只知道 root 密码的人才能进入单用户模式, 因为您认为控制台在物理上是不安全的。因此如果您考虑到安全性, 请选择 不安全 (insecure),而非 安全 (secure)。
如果 init(8) 发现您的文件系统一切正常,又或者用户在单用户模式完成了工作, 系统就会进入多用户模式,开始系统的资源配置。
资源配置分别从文件 /etc/defaults/rc.conf、 /etc/rc.conf 中读取默认配置和细节配置, 然后加载在文件 /etc/fstab 中提及的文件系统、 启动网络服务、启动各种系统守护进程,最后启动本地安装包的启动脚本。
rc(8) 联机手册是关于资源配置的很好的参考。
由命令 shutdown(8) 的控制, init(8) 会试着运行 /etc/rc.shutdown 脚本, 给所有进程发送 TERM 信号,然后给不按时停止的进程发送 KILL信号。
在支持电源管理的体系上关闭 FreeBSD 系统的电源,只要简单的使用命令 shutdown -p now 立即关闭电源。使用命令 shutdown -r now 重启 FreeBSD。要执行 shutdown(8) 您必须是 root 用户或 operator 组的成员。 也可以使用 halt(8) 和 reboot(8) 命令来关闭系统, 请参看它们的联机手册以获得更多的信息。
Note: 电源管理需要支持,在 FreeBSD 5.X 中要求内核支持 acpi(4) 或以模块加载,在 FreeBSD 4.X 中需要 apm(4) 的支持。
FreeBSD允许多个用户同时使用计算机. 当然,这些用户中不是很多人同时坐在同一台计算机前. [6],而是其他用户可以通过网络来使用同一台计算机以完成他们的工作.要使用系统,每个人都应该有一个帐户.
读完这章,您将了解到:
在一个FreeBSD系统上不同用户帐户之间的区别.
如何添加用户帐户.
如何删除用户帐户.
如何改变帐户细节,如用户的全名,或首选的shell.
如何在每个帐户基础上设置限制,来控制像内存,CPU时钟这样的资源.
如何使用组来使帐户管理更容易.
在阅读这章之前,您应当了解:
了解UNIX和FreeBSD的基础知识 (第 3 章).
所有访问系统的用户都是通过帐户完成的,所以用户和帐户管理是FreeBSD系统不可或缺的重要部分.
每个FreeBSD系统的帐户都有一些和它相对应的信息去验证它.
用户名在login: 提示符的后面键入。 用户名对于一台计算机来讲是唯一的; 您不可以使用两个相同的用户名来登录。 有很多用来创建正确用户名的规则, 具体请参考 passwd(5); 您使用的用户名通常需要8个或更少的小写字母。
每个帐户都有一个口令与它对应。 口令可以是空的, 这样不需要口令就可以访问系统。 这通常不是一个好主意; 每个帐户都应该有口令。
UID是系统用来识别用户的数字,传统上它的范围是0到65536之间[7],用以唯一地标识用户。 FreeBSD在内部使用UID来识别用户 -- 在工作以前。 任何允许您指定一个用户名的 FreeBSD 命令都会把它转换成UID。 这意味着您可以用不同的用户名使用多个帐户, 但它们的UID是一样的。 FreeBSD 会把这些帐户认定是同一个用户。
GID是用来识别用户所在的组的, 传统上范围在0到65536之间[7]的数字。 组是一种基于用户GID而不是它们的UID的用来控制用户访问资源的机制。 这可以减少一些配置文件的大小。 一个用户也可以属于多个组。
登录类是对组机制的扩展,当把系统分配给不同用户时,它提供了额外的灵活性.
默认情况下, FreeBSD 并不强制用户去改变他们的口令。 您可以以用户为单位强制要求一些或所有的用户定期改变他们的口令。
默认情况下 FreeBSD 不会自动完成帐户过期操作。 如果您正在创建帐户, 您应该知道一个帐户的有效使用期限。 例如, 在学校里您会为每个学生建立一个帐户, 您可以指定它们何时过期。 帐户过期后, 虽然帐户的目录和文件仍然存在, 但帐户已经不能继续使用了。
用户名可以唯一地识别FreeBSD的帐户, 但它不会反映用户的全名。 这些信息可能与帐户是相关的。
主目录是用户用来启动的目录的完全路径。 一个通常的规则是把所有用户的主目录都放在 /home/username 下,或者 /usr/home/username 下。 用户将把他们的个人文件放在自己的主目录下, 他们可以在那里创建任何目录.
Shell提供了用户用来操作系统的默认环境。 有很多不同的shell, 有经验的用户会根据他们的经验来选择自己喜好的shell。
有三种类型的帐户: 超级用户, 系统用户, 以及 普通用户。 超级用户帐户通常叫做 root, 可以没有限制地管理系统。 系统用户运行服务。 最后, 普通用户给那些登录系统以及阅读邮件的人使用。
超级用户帐户, 通常叫做 root, 可以重新配置和管理系统, 在收发邮件, 系统检查或编程这样的日常工作中, 尽量不要使用root权限。
这是因为不象普通用户帐户, 超级用户能够无限制地操作系统, 超级用户帐户的滥用可能会引起无法想象的灾难。 普通的用户帐户不会由于出错而破坏系统, 所以要尽可能的使用普通帐户, 除非您需要额外的特权。
在使用超级用户命令时要再三检查, 因为一个额外的空格或缺少某个字符的命令都可能会引起数据丢失。
所以, 在阅读完这章后您第一件要做的事就是, 在平时使用的时候, 创建一个没有特权的用户帐户。 无论您使用的是单用户还是多用户系统这样的申请都是相同的。 在这章的后面, 我们将讨论如何创建一个额外的帐户和如何在普通用户和超级用户之间进行切换。
系统用户是那些要使用诸如DNS、 邮件, web等服务的用户。 使用帐户的原因就是安全; 如果所有的用户都由超级用户来运行, 那它们就可以不受约束地做任何事情。
典型的系统帐户包括 daemon、 operator、 bind (供 域名服务 使用)、 news, 以及 www。
nobody 是普通的没有特权的系统用户。 然而, 大多数与用户联系很密切的服务是使用 nobody的, 记的这点非常重要, 这样可能使用户变的非常有特权。
用户帐户是让真实的用户访问系统的主要方式, 这些帐户把用户和环境隔离, 能阻止用户损坏系统和其他用户, 在不影响其他用户的情况之下定制自己的环境。
任何人访问您的系统必须要有他们自己唯一的帐户。 这可以让您找到谁做了什么事, 并且阻止人们破坏其他用户的设置和阅读其他人的邮件等等。
每个用户能够设置他们自己的环境, 以利于他们通过改变shell, 编辑器, 键盘绑定和语言等适应并且更好的使用这个系统。
在UNIX 的处理用户帐户的环境中有很多不同的命令可用. 最普通的命令如下, 接下来是详细使用它们的例子。
| 命令 | 摘要 |
|---|---|
| adduser(8) | 在命令行添加新用户. |
| rmuser(8) | 在命令行删除用户. |
| chpass(1) | 一个灵活的用于修改用户数据库信息的工具. |
| passwd(1) | 一个用于修改用户口令的简单的命令行工具. |
| pw(8) | 一个强大灵活修改用户帐户的工具. |
adduser(8) 是一个简单的添加新用户的命令. 它为用户创建 passwd 和 group 文件。 它也为新用户创建一个主目录, 它拷贝一个默认的配置文件 (“dotfiles”) 从 /usr/share/skel 这个目录, 然后给新用户发送一封带欢迎信息的邮件。
在FreeBSD 5.0版本, adduser(8)命令从Perl脚本改写为shell脚本, 起包装pw(8)的作用, 所以它的用法在 FreeBSD 4.X 上和 FreeBSD 5.X 上略有不同。
建立初始化配置文件, 使用 adduser -s -config_create. [8] 接下来, 我们配置 adduser(8) 的默认设置, 并建立第一个普通用户帐户, 因为将 root 用于日常使用会带来很多潜在问题。
Example 13-1. 配置 adduser 和添加一个新用户,在FreeBSD 4.X版本
# adduser -v Use option ``-silent'' if you don't want to see all warnings and questions. Check /etc/shells Check /etc/master.passwd Check /etc/group Enter your default shell: csh date no sh tcsh zsh [sh]: zsh Your default shell is: zsh -> /usr/local/bin/zsh Enter your default HOME partition: [/home]: Copy dotfiles from: /usr/share/skel no [/usr/share/skel]: Send message from file: /etc/adduser.message no [/etc/adduser.message]: no Do not send message Use passwords (y/n) [y]: y Write your changes to /etc/adduser.conf? (y/n) [n]: y Ok, let's go. Don't worry about mistakes. I will give you the chance later to correct any input. Enter username [a-z0-9_-]: jru Enter full name []: J. Random User Enter shell csh date no sh tcsh zsh [zsh]: Enter home directory (full path) [/home/jru]: Uid [1001]: Enter login class: default []: Login group jru [jru]: Login group is ``jru''. Invite jru into other groups: guest no [no]: wheel Enter password []: Enter password again []: Name: jru Password: **** Fullname: J. Random User Uid: 1001 Gid: 1001 (jru) Class: Groups: jru wheel HOME: /home/jru Shell: /usr/local/bin/zsh OK? (y/n) [y]: y Added user ``jru'' Copy files from /usr/share/skel to /home/jru Add another user? (y/n) [y]: n Goodbye! #
总体而言, 我们把默认的shell设置成 zsh (一个可以在 Ports Collection 找到的 shell), 关闭欢迎邮件。 然后保存配置, 接着创建一个名为 jru的帐户, 并且确信 jru 在 wheel 组里 (这样它就能够通过 su(1) 转变为 root。)
Note: 输入的口令不会被回显, 也不会显示星号。 请确保不要误输口令。
Note: 从现在起, 使用 adduser(8) 不再需要改变默认设置。 如果您要求改变默认设置, 先退出程序, 然后使用 -s 选项。
Example 13-2. 添加一个新用户在FreeBSD 5.X版本
# adduser Username: jru Full name: J. Random User Uid (Leave empty for default): Login group [jru]: Login group is jru. Invite jru into other groups? []: wheel Login class [default]: Shell (sh csh tcsh zsh nologin) [sh]: zsh Home directory [/home/jru]: Use password-based authentication? [yes]: Use an empty password? (yes/no) [no]: Use a random password? (yes/no) [no]: Enter password: Enter password again: Lock out the account after creation? [no]: Username : jru Password : **** Full Name : J. Random User Uid : 1001 Class : Groups : jru wheel Home : /home/jru Shell : /usr/local/bin/zsh Locked : no OK? (yes/no): yes adduser: INFO: Successfully added (jru) to the user database. Add another user? (yes/no): no Goodbye! #
您可以使用rmuser(8) 从系统中完全删除一个用户. rmuser(8) 执行如下步骤:
删除用户的 crontab(1) 记录 (如果有的话).
删除属于用户的at(1) 工作.
杀掉属于用户的所有进程.
删除本地口令文件中的用户.
删除用户的主目录 (如果他有自己的主目录).
删除来自 /var/mail属于用户的邮件.
删除所有诸如 /tmp的临时文件存储区中的文件.
最后, 删除 /etc/group中所有属于组的该用户名.
Note: 如果一个组变成空,而组名和用户名一样,组将被删除. adduser(8)命令建立每个用户唯一的组.
rmuser(8) 不能用来删除超级用户的帐户, 因为那样做是对系统极大的破坏.
默认情况下, 使用交互模式, 这样能够让您清楚的知道您在做什么.
Example 13-3. 删除用户 交互模式下的帐户删除
# rmuser jru Matching password entry: jru:*:1001:1001::0:0:J. Random User:/home/jru:/usr/local/bin/zsh Is this the entry you wish to remove? y Remove user's home directory (/home/jru)? y Updating password file, updating databases, done. Updating group file: trusted (removing group jru -- personal group is empty) done. Removing user's incoming mail file /var/mail/jru: done. Removing files belonging to jru from /tmp: done. Removing files belonging to jru from /var/tmp: done. Removing files belonging to jru from /var/tmp/vi.recover: done. #
chpass(1) 可以改变用户的口令, shells, 和包括个人信息在内的数据库信息.
只有系统管理员, 即超级用户, 才可以用 chpass(1) 改变其他用户口令和信息。
除了可选择的用户名, 不需要任何选项, chpass(1) 将显示一个包含用户信息的编辑器. 可以试图改变用户在数据库中的信息.
Note: 在 FreeBSD 5.X版本, 编辑退出后,您应该索要您的口令,如果您不是超级用户的话.
Example 13-4. 以超级用户交互执行 chpass 命令
#Changing user database information for jru. Login: jru Password: * Uid [#]: 1001 Gid [# or name]: 1001 Change [month day year]: Expire [month day year]: Class: Home directory: /home/jru Shell: /usr/local/bin/zsh Full Name: J. Random User Office Location: Office Phone: Home Phone: Other information:
普通用户只能改变他们自己很少的一部分信息.
Example 13-5. 以普通用户交互执行 chpass 命令
#Changing user database information for jru. Shell: /usr/local/bin/zsh Full Name: J. Random User Office Location: Office Phone: Home Phone: Other information:
Note: chfn(1) 和 chsh(1) 只是到 chpass(1) 的符号连接, 类似地, ypchpass(1), ypchfn(1) 以及 ypchsh(1) 也是这样。 NIS 是自动支持的, 不一定要在命令前指定 yp。 如果这让您有点不太明白, 不必担心, NIS 将在 第 23 章 介绍。
passwd(1) 是改变您自己作为一个普通用户口令或者作为超级用户口令常用的方法.
Note: 用户改变口令前必须键入原来的口令, 防止用户离开终端时非授权的用户进入改变合法用户的口令。
Example 13-6. 改变您的口令
% passwd Changing local password for jru. Old password: New password: Retype new password: passwd: updating the database... passwd: done
Example 13-7. 改变其他用户的口令同超级用户的一样
# passwd jru Changing local password for jru. New password: Retype new password: passwd: updating the database... passwd: done
Note: 就象 chpass(1)一样, yppasswd(1) 只是一个到 passwd(1)的连接, 所以NIS用任何一个命令都可以正常工作.
pw(8) 是一个用来创建、删除、修改、显示用户和组的命令行工具。 它还有系统用户和组文件编辑器的功能。 pw(8) 有一个非常强大的命令行选项设置, 但新用户可能会觉得它比这里讲的其它命令要复杂很多。
如果您有一些用户, 并想要对他们所使用的系统资源加以限制, FreeBSD 提供了一些系统管理员限制用户访问系统资源的方法。 这些限制通常被分为两种: 磁盘配额, 以及其它资源限制。
磁盘配额限制用户对磁盘的使用, 而且它还提供一种快速检查用户使用磁盘数量而不需要时刻计算的方法。 配额将在 第 16.14 节讨论.
其它资源限制包括CPU、 内存以及用户可能会使用的其它资源。 这些是通过对登录进行分类完成的, 下面将做讨论。
登录的类由 /etc/login.conf 文件定义。 比较精确的描述超出了本章的范围, 但 login.conf(5) 联机手册会有比较详细的描述。 可以说每个用户都分配到一个登录类 (默认是 defalut), 每个登录类都有一套和它相对应的功能。 登录功能是 名字=值 这样的一对值, 其中名字 是一个众所周知的标识符, 值 是一个根据名字经过处理得到的任意字符串。 设置登录类和功能相当简单, 在 login.conf(5) 联机手册会有比较详细的描述。
Note: 系统并不直接读取 /etc/login.conf 中的配置, 相反, 它读取数据库文件 /etc/login.conf.db。 为了从 /etc/login.conf 生成 /etc/login.conf.db, 需要执行下面的命令:
# cap_mkdb /etc/login.conf
资源限制与普通登录限制是有区别的。 首先, 对于每种限制, 有软限制 (比较常见) 和硬限制之分。 一个软限制可能被用户调整过, 但不会超过硬限制。 越往后可能越低, 但不会升高。 其次, 绝大多数资源限制会分配特定用户的每个进程, 而不是该用户的全部进程。 注意, 这些区别是资源限制的特殊操作所规定的, 不是登录功能框架的完成 (也就是说, 他们实际上 不是一个登录功能的特例)。
不再罗嗦了, 下面是绝大多数资源限制的例子 (您可以在 login.conf(5) 找到其它与登录功能相关的内容)。
很明显, 由程序产生的核心文件大小的限制在磁盘使用上是属于其它限制的 (例如, 文件大小, 磁盘配额)。 不过, 由于用户自己无法产生核心文件, 而且通常并不删除它们, 设置这个可以尽量避免由于一个大型应用程序的崩溃所造成的大量磁盘空间的浪费。 (例如, emacs) 崩溃。
这是一个用户程序所能消耗掉的最大CPU时钟数量. 一些不理想的进程会被内核杀掉.
Note: 这是一个有关CPU消耗的时钟 限制, 不是top(1) 和 ps(1) 命令时屏幕上显示的CPU消耗的百分比。 在写此说明时, 后者的限制是是不太可能和没有价值的: 编译器 -- 编译一个可能是合法的工作 -- 可以在某一时刻轻易的用掉 100% 的 CPU。
这是用户可以处理一个文件的最大值。 不象 磁盘配额, 这个限制是对单个文件强制执行的, 不是用户自己的所有文件。
这是一个用户可以运行的最大进程数。 这包括前台和后台进程。 很明显, 这不可能比系统指定 kern.maxproc sysctl(8) 的限制要大。 同时也要注意, 设置的过小会妨碍用户的处理能力: 可能需要多次登录或执行多个管道。 一些任务, 例如编译一些大的程序, 也可能会产生很多进程 (例如, make(1), cc(1) 以及其它一些预处理程序)。
这是一个进程允许锁到主存中的最大内存容量 (参见 mlock(2))。 大型程序, 例如像 amd(8) 在遇到问题时, 它们得到的巨大交换量无法传递给系统进行处理。
这是在给定时间内一个进程可能消耗的最大内存数量。 它包括核心内存和交换内存。 在限制内存消耗方面, 这不是一个完全的限制,但它是一个好的开始。
这是一个进程可以打开的最大文件数。 在FreeBSD中, 文件可以被表现为套接字和IPC通道; 注意不要把这个数设置的太小。 系统级的限制是由 kern.maxfiles 定义的, 详情参见 sysctl(8)。
这是网络内存数量的限制, 这主要是针对通过创建许多套接字的老式 DoS 攻击的, 但也可以用来限制网络通信。
这是一个进程堆栈可能达到的最大值。 它不能单独的限制一个程序可能使用的内存数量; 所以, 需要与其它的限制手段配合使用。
在设置资源限制时, 有一些其他的事需要注意。 下面是一些通常的技巧、 建议和注意事项。
系统启动的进程/etc/rc会被指派给 守护程序 的登录类.
虽然 /etc/login.conf 文件是一个对绝大多数限制做合理配置的资源文件, 但只有您也就是系统管理员,才知道什么最适合您的系统。 设置的太高可能会因为过于开放而, 而导致系统被滥用, 设置过低, 则可能降低效率。
使用 X Window 的用户可能要比其他用户使用更多的资源。 因为X11本身就使用很多资源, 而且它鼓励用户同时运行更多的程序。
务必注意, 许多限制措施是针对单个进程来实施的, 它们并不限制某一用户所能用到的总量。 例如, 将 openfiles 设置为 50 表示以该用户身份运行的进程最多只能打开 50 个文件。 因而, 用户实际可以打开的文件总数就应该是 maxproc 和 openfiles 值的乘积。 对内存用量的限额与此类似。
有关资源限制,登录类的更深入信息可以查看相关联机手册: cap_mkdb(1), getrlimit(2), login.conf(5).
组简单的讲就是一个用户列表. 组通过组名和GID (组 ID) 来识别。 在 FreeBSD (以及绝大多数其他 UNIX 系统) 中, 内核用以决定一个进程是能够完成一项动作的两个因素是它所属的用户 ID 和组 ID。 与用户 ID 不同, 每个进程都有一个和它相关联的组的列表。 您可能听说过用户或进程的 “组 ID”; 大多数情况下, 这表示列表中的第一个组。
与组ID对应的组名在/etc/group中。 这是一个由冒号来界定的文本文件。 第一部分是组名, 第二部分是加密后的口令, 第三部分是组ID, 第四部分是以逗号相隔的成员列表。 它可以用手工方式进行编辑 (当然, 如果您能保证不出语法错误的话!)。 对于更完整的语法描述, 参见 group(5) 联机手册.
如果不想手工编辑 /etc/group, 也可以使用 pw(8) 添加和编辑组。 例如, 要添加一个叫 teamtwo 的组, 确定它存在:
上面的数字 1100 是组 teamtwo 的组 ID。 目前, teamtwo 还没有成员, 因此也就没有多大用处。 接下来, 把 jru 加入到 teamtwo 组。
Example 13-9. 使用 pw(8) 在组中添加用户
# pw groupmod teamtwo -M jru # pw groupshow teamtwo teamtwo:*:1100:jru
-M 所需的参数是一个用逗号分隔的组中用户成员的列表。 前面我们已经知道, 口令文件中, 每个用户已经指定了一个所属组。 之后用户被自动地添加到组列表里; 当我们使用 groupshow 命令时 pw(8) 用户列表不被显示出来。 但当通过 id(1) 或者类似工具查看时, 就会看到用户列表。 换言之, pw(8) 命令只能读取 /etc/group 文件; 它从不尝试从 /etc/passwd 文件读取更多信息。
正如您所看到的, jru 是组 jru 和组 teamtwo的成员.
有关pw(8)的更多信息, 请参看其它联机手册。 更多的关于 /etc/group 文件格式的信息, 请参考 group(5) 联机手册。
这一章将对系统安全的基本概念进行介绍, 除此之外, 还将介绍一些好的习惯, 以及 FreeBSD 下的一些更深入的话题。 这章的许多内容对于一般的系统和 Internet 安全也适用。 如今, Internet 已经不再像以前那样是一个人人都愿意与您作好邻居的 “友善” 的地方。 让系统更加安全, 将保护您的数据、 智力财产、 时间, 以及其他很多东西不至于被入侵者或心存恶意的人所窃取。
FreeBSD 提供了一系列工具和机制来保证您系统和网络的完整和安全。
FreeBSD提供了大量的工具和机制来确保您的系统和网络的安全。
读完这章,您将了解:
基本的 FreeBSD 系统安全概念。
FreeBSD 中众多可用的密码学设施,例如 DES 和 MD5。
如何设置一次性口令验证机制。
如何配置 TCP Wrappers 以便与 inetd 配合使用。
如何在 FreeBSD 5.0 以前的版本上设置 KerberosIV。
如何在 FreeBSD 5.0 或更高版本上设置 Kerberos5。
如何配置 IPsec 并在 FreeBSD/Windows 机器之间建构 VPN。
如何配置并使用 OpenSSH,以及 FreeBSD 的 SSH 执行方式。
系统 ACL 的概念,以及如何使用它们。
如何使用 Portaudit 工具来审核从 Ports Collection 安装的第三方软件包的安全性。
如何从 FreeBSD 的安全公告中获得有用信息并采取相应措施。
对于进程记帐功能的感性认识, 并了解如何在 FreeBSD 中启用它。
在开始阅读这章之前,您需要:
理解基本的 FreeBSD 和 Internet 概念。
其他安全方面的话题, 则贯穿本书的始终。 例如, 强制性访问控制 (MAC) 在 第 15 章 中进行了介绍, 而 Internet 防火墙则在 第 24 章 中进行了讨论。
安全是系统管理员自始至终的基本要求。 由于所有的 BSD UNIX 多用户系统都提供了与生俱来的安全性, 因此建立和维护额外的安全机制, 确保用户的 “诚实” 可能也就是最需要系统管理员考虑的艰巨的工作了。 机器的安全性取决于您设置的安全设施, 而许多安全方面的考虑, 则会与人们使用计算机时的便利性相矛盾。 一般来说, UNIX 系统能够胜任数目众多进程并发地处理各类任务, 这其中的许多进程是以服务身份运行的 -- 这意味着, 外部实体能够与它们互联并产生会话交互。 如今的桌面系统, 已经能够达到许多昔日的小型机甚至主机的性能, 而随着这些计算机的联网和在更大范围内完成互联, 安全也成为了一个日益严峻的课题。
最好能够通过像 “洋葱” 那样的分层方式来实现安全。 简而言之, 方便的话, 应该建立尽可能多的安全层次, 并小心地监视针对系统的各类入侵。 当然, 不应过分地构建安全机制, 因为这样做可能会干扰甚至阻碍入侵检测, 而后者正是安全机制中最为重要的一环。 例如, 在所有操作系统的可执行文件上都设置 schg 标志 (参见 chflags(1)) 往往收效甚微, 因为这样做, 尽管短时间内能够保护这些文件, 但也阻止了闯入者进行那些易于检测的修改, 这意味着您设置的安全机制可能根本就无法监测到攻击者。
系统的安全也应能够应付各种形式的攻击, 这也包括那些使系统崩溃, 或阻止其正常运转, 但并不试图窃取 root 帐号 (“破译 root”) 的攻击形式。 安全问题大体可分为以下几类:
拒绝服务攻击。
窃取其他用户的帐户。
通过可访问服务窃取root帐户。
通过用户帐户窃取root帐户。
建立后门。
拒绝式服务攻击是侵占机器所需资源的一种行为。 通常, DoS 攻击采用暴力(brute-force)手段通过压倒性的流量来破坏服务器和网络栈, 以使机器崩溃或无法使用。 某些 DoS 攻击则利用在网络栈中的错误, 仅用一个简单的信息包就可以让机器崩溃, 这类情况通常只能通过给内核打补丁来修复。 在一些不利的条件下, 对服务器的攻击能够被修复, 只要适当地修改一下系统的选项来限制系统对服务器的负荷。 顽强的网络攻击是很难对付的。 例如,一个欺骗性信息包的攻击, 无法阻止入侵者切断您的系统与Internet的连接。 它不会使您的机器死掉,但它会把Internet连接占满。
窃取用户帐户要比D.o.S.攻击更加普遍。 许多系统管理员仍然在他们的服务器上运行着基本的 telnetd,rlogind, rshd 和 ftpd 服务。 这些服务在默认情况下不会以加密连接来操作。 结果是如果您的系统有中等规模大小的用户群, 在通过远程登录的方式登录到您系统的用户中, 一些人的口令会被人窃取。 仔细的系统管理员会从那些成功登录系统的远程访问日志中寻找可疑的源地址。
通常必须假定,如果一个入侵者已经访问到了一个用户的帐户, 那么它就可能使自己成为 root。 然而, 事实是在一个安全和维护做得很好的系统中, 访问用户的帐户不一定会让入侵者成为 root。 这个差别是很重要的,因为没有成为 root 则入侵者通常是无法隐藏它的轨迹的, 而且, 如果走运的话, 除了让用户的文件乱掉和系统崩溃之外, 它不能做什么别的事情。 窃取用户帐户是很普遍的事情, 因为用户往往不会对系统管理员的警告采取措施。
系统管理员必须牢牢记住,可能有许多潜在的方法会使他们机器上的 root 用户受到威胁。入侵者可能知道 root 的口令,而如果在以 root 权限运行的服务器上找到一个缺陷 (bug), 就可以通过网络连接到那台服务器上达到目的;另外, 一旦入侵者已经侵入了一个用户的帐户, 可以在自己的机器上运行一个 suid-root 程序来发现服务器的漏洞, 从而让他侵入到服务器并获取 root。 攻击者找到了入侵一台机器上 root 的途径之后, 他们就不再需要安装后门了。许多 root 漏洞被发现并修正之后, 入侵者会想尽办法去删除日志来消除自己的访问痕迹, 所以他们会安装后门。 后门能给入侵者提供一个简单的方法来重新获取访问系统的 root 权限, 但它也会给聪明的系统管理员一个检测入侵的简便方法。 让入侵者无法安装后门事实上对您的系统安全是有害的, 因为这样并不会修复那些侵入系统的入侵者所发现的新漏洞。
安全的管理方法应当使用像 “洋葱皮” 一样多层次的方法来实现, 这些措施可以按下面的方式进行分类:
确保 root 和维护人员帐户的安全。
确保 root - 以root用户权限运行的服务器和suid/sgid可执行程序的安全。
确保用户帐户的安全。
确保口令文件的安全。
确保内核中核心组件、直接访问设备和文件系统的安全。
快速检测系统中发生的不适当的变化。
做个偏执狂。
这一章的下一节将比较深入地讲述上面提到的每一个条目。
命令与协议: 在这份文档中,我们使用 粗体 来表示应用程序, 并使用 单倍距 字体来表示命令。 这样的排版区分能够有效地区分类似 ssh 这样的概念, 因为它既可以表示命令,又可以表示协议。
接下来的几节中, 将介绍在这一章中 前一节 中所介绍的那些加强 FreeBSD 系统安全性的手段。
首先,如果您没有确保 root 帐户的安全, 就没必要先劳神确保用户帐户的安全了。绝大多数系统都会指派一个口令给 root 帐户。 我们的第一个假定是,口令 总是 不安全的。 这并不意味着您要把口令删掉。 口令通常对访问机器的控制台来说是必须的。 也就是说, 您应该避免允许在控制台以外的地方使用口令, 甚至包括使用 su(1) 命令的情形。 例如,确信您的 pty 终端在 /etc/ttys 文件中被指定为 insecure (不安全),这将使直接通过 telnet 或 rlogin 登录 root 会不被接受。 如果使用如 sshd 这样的其他登录服务, 也要确认直接登录 root 是关闭的。您可以通过编辑 /etc/ssh/sshd_config 文件来做到这一点,确信 PermitRootLogin 被设置成 NO。 考虑到每一种访问方法 -- 如FTP这样的服务, 以免因为它们而导致安全性的损失。 直接登录 root 只有通过系统控制台才被允许。
当然, 作为一个系统管理员, 您应当获得 root身份, 因此, 我们开了一些后门来允许自己进入。 但这些后门只有在经过了额外的口令确认之后才能使用。 一种让 root 可访问的方法是增加适当的用户帐户到 wheel 组 (在 /etc/group 中)。wheel 组中的用户成员可以使用 su 命令来成为 root。 绝对不应该通过在口令项中进行设置来赋予维护人员天然的 wheel 组成员身份。 维护人员应被放置在 staff 组中,然后通过 /etc/group 文件加入到 wheel 组。事实上,只有那些需要以 root 身份进行操作的用户才需要放进 wheel 组中。 当然,也可以通过 某种其它的验证手段,例如 Kerberos,可以通过 root 帐户中的 .k5login 文件来允许执行 ksu(1) 成为 root ,而不必把它们放进 wheel 组。 这可能是一种更好的解决方案, 因为 wheel 机制仍然可能导致入侵者获得 root ,如果他拿到了口令文件,并能够进入职员的帐户。 尽管有 wheel 比什么都没有要强一些, 但它并不是一种绝对安全的办法。
一种间接地提高员工帐号, 乃至 root 权限安全性的方法, 便是采用其他的登录访问方式, 并使用 “星号” 替代员工加密的口令。使用 vipw(8) 命令, 可以把每一个加密的口令替换成一个 “*” 符。 这将更新 /etc/master.passwd 文件,以及 用户名/口令数据库,以禁用口令登录。
如下面的员工帐号
foobar:R9DT/Fa1/LV9U:1000:1000::0:0:Foo Bar:/home/foobar:/usr/local/bin/tcsh
应被改为:
foobar:*:1000:1000::0:0:Foo Bar:/home/foobar:/usr/local/bin/tcsh
这一更改将阻止一般的登录,因为加密的口令永远不会与 “*” 匹配。一旦这么做之后, 任何员工都必须使用其他的方式来完成登录,例如,使用 kerberos(1) 或者通过 ssh(1) 利用 公钥/密钥对 的方式来完成登录。当使用 Kerberos 这样的工具时,通常必须加强运行 Kerberos 的服务器,以及桌面工作站的安全性。当使用 公钥/密钥对以 ssh 登录时,通常必须加固用户 开始 登录的那台机器的安全 (通常这是他们的工作站)。 在这之上还可以增加一层安全性,即在使用 ssh-keygen(1) 生成它的时候,使用口令来保护它们。 如果能够用 “星号” 替换掉所有员工的口令, 那么,这也就保证了他们只能通过您设置的安全的方法来登录。 这将迫使所有的员工使用安全的、经过加密的连接来完成他们的会话, 而这将使得入侵者通过监听网络通讯, 从某些不相关的、 不太安全的机器上窃取口令成为不可能。
另一种间接的安全机制则是, 从严格受限的机器向限制更宽松的机器上登录。 例如, 如果您的服务器运行了所有的服务,那么,工作站应该什么都不运行。 为了让工作站尽可能地安全,应该避免运行任何没有必要的服务, 甚至不运行任何服务。 另外, 也应该考虑使用带口令保护功能的屏幕保护程序。 毋庸置疑, 如果攻击者能够物理地接触您的工作站, 那么他就有能力破坏任何安全设施,这确实是我们需要考虑的一个问题,但同样地, 真正能够物理接触您的工作站或服务器并实施攻击的人在现实生活中并不常见, 绝大多数攻击来自于网络, 而攻击者往往无法物理地接触服务器或工作站。
使用类似 Kerberos 这样的工具,也为我们提供了使用一个工具来禁用某个用户, 或修改他们的口令, 并在所有机器上立即生效的方法。 如果员工的帐号被窃取, 能够在所有的其他机器上生效的口令变更将很有意义。如果口令分散地保存在多个机器上, 一次修改 N 台机器上的口令很可能是一件痛苦的事情。 此外, Kerberos 还能够提供更多的限制,除了 Kerberos 令牌有很好的过期机制之外, 它还能够强制用户在某个特定的期限内修改口令(比如说,每月一次).
谨慎的管理员只运行他们需要的服务, 不多, 不少。 要当心第三方的服务程序很可能有更多的问题。 例如, 运行旧版的 imapd 或 popper 无异于将 root 令牌拱手送给全世界的攻击者。 永远不要运行那些您没有仔细检查过的服务程序, 另外也要知道, 许多服务程序并不需要以 root 的身份运行。 例如, ntalk、 comsat, 以及 finger 这些服务, 都能够以一种被称作 沙盒 的特殊用户的身份运行。 除非您已经解决掉了许多麻烦的问题, 否则沙盒就不是完美的, 但洋葱式安全规则仍然成立: 如果有人设法攻破了在沙盒中运行的程序, 那么在做更多坏事之前, 他们还必须想办法攻破沙盒本身的限制。 攻击者需要攻破的层次越多, 他们成功的可能性就越小。 过去, 破解 root 的漏洞几乎在所有以 root 身份运行的服务上都发现过, 包括那些基本的系统服务。 如果您的机器只打算向外界提供 sshd 登录, 而用户不会使用 telnetd 或 rshd 甚至 rlogind 登录, 就应该毫不犹豫地关闭它们!
FreeBSD 现在默认在沙盒中运行 ntalkd, comsat, 以及 finger。此外, named(8) 也可以这样运行。 /etc/defaults/rc.conf 中包括了如何如此运行 named 的方法,只是这些内容被注释掉了。 如何升级或安装系统将决定这些沙盒所使用的特殊用户是否被自动安装。 谨慎的系统管理员将根据需要研究并实现沙盒。
此外,还有一些服务通常并不在沙盒中运行: sendmail, popper, imapd, ftpd, 以及一些其他的服务。当然,它们有一些替代品,但安装那些服务可能需要做更多额外的工作。 可能必须以 root 身份运行这些程序, 并通过其他机制来检测入侵。
系统中另一个比较大的 root 漏洞 是安装在其中的 suid-root 和 sgid 的可执行文件。绝大多数这类程序, 例如 rlogin, 被存放于 /bin, /sbin, /usr/bin, 或 /usr/sbin 中。 尽管并没有 100% 的安全保证,但系统默认的 suid 和 sgid 可执行文件通常是相对安全的。 当然,偶尔也会发现一些存在于这些可执行文件中的 root 漏洞。1998年,Xlib 中发现了一处 root 漏洞,这使得 xterm (通常是做了suid的) 变得可以入侵。 做的安全些, 总比出现问题再后悔要强。 因此,谨慎的管理员通常会限制 suid 可执行文件, 并保证只有员工帐号能够执行它们,或只开放给特定的用户组,甚至彻底干掉 (chmod 000) 任何 suid 可执行文件, 以至于没有人能够执行它们。没有显示设备的服务器通常不会需要 xterm 可执行文件。 sgid 可执行文件通常同样地危险。 一旦入侵者攻克了sgid-kmem,那么他就能够读取 /dev/kmem 并进而读取经过加密的口令文件, 从而窃取任何包含口令的帐号。另外,攻破了 kmem 的入侵者能够监视通过 pty 传送的按键序列,即使用户使用的是安全的登录方式。 攻破了 tty 组的用户则能够向几乎所有用户的 tty 写入数据。如果用户正在运行一个终端程序,或包含了键盘模拟功能的终端仿真程序, 那么,入侵者能够以那个用户的身份执行任何命令。
用户帐号的安全通常是最难保证的。虽然您可以为您的员工设置严苛的登录限制, 并用 “星号” 替换掉他们的口令,但您可能无法对普通的用户这么做。 如果有足够的决策权,那么在保证用户帐号安全的斗争中或许会处于优势, 但如果不是这样,您能做的只是警惕地监控这些帐号的异动。 让用户使用 ssh 或 Kerberos 可能会有更多的问题, 因为需要更多的管理和技术支持,尽管如此,与使用加密的口令文件相比, 这仍不失为一个好办法。
尽可能使用 * 替换掉口令是保证口令文件安全唯一的解决方法, 如果能够用 ssh 或 Kerberos 的话。即使只有 root 用户能够读取加密过的口令文件 (/etc/spwd.db), 入侵者仍然可能设法读到它的内容, 即使他暂时还无法写入这个文件。
您的安全脚本应该经常检查并报告口令文件的异动 (参见后面的 检查文件完整性 一节)。
如果攻击者已经拿到了 root 那么他就有能力作任何事情, 当然, 有一些事情是他们比较喜欢干的。 例如, 绝大多数现代的内核都包括一个内建的听包设备。 在 FreeBSD 中,这个设备被称作 bpf 。攻击者通常会尝试在攻克的系统上运行它。 如果您不需要 bpf 设备提供的功能,那么,就不要把它编入内核。
但即使已经关掉了 bpf 设备,您仍然需要担心 /dev/mem 和 /dev/kmem 。 就事论事地说,攻击者仍然能够通过直接访问的方式写入磁盘设备。同样地, 还有一个被称作模块加载器, kldload(8) 的机制,也会包含潜在的危险。 尝试入侵企业网络的入侵者会尝试在正在运行的内核上安装他自己的 bpf 设备,或其他听包设备。为了防止这些问题, 需要抬高内核安全级,至少调整到1。可以通过对 kern.securelevel 执行 sysctl 来完成这个任务。一旦把安全级调整到1, 对于直接访问设备的写入操作将被拒绝,而特殊的 chflags 标记,如 schg ,将被强制执行。一定要在重要的启动执行文件、 目录和脚本文件上设置 schg 标记 -- 在安全级生效之前的所有文件。这可能做得有些过火, 并将导致在较高安全级上运行时升级系统变得困难。 此外, 运行于较高安全级上,而没有正确设置 schg 标记的系统仍然是存在弱点的。另一种方法是把 / 和 /usr 以只读方式挂接。 此外,请注意过于严苛的安全设置将使得入侵检测同样无法进行。
当实施严格的限制时,往往会在使用的方便性上付出代价。例如,使用 chflags 来把 schg 标记 应用到 / 和 /usr 中的绝大多数文件上可能会起到反作用, 因为尽管它能够保护那些文件,但同样关掉了一个很好的监测机制。 层次化安全的最后一层可能是最重要的 -- 检测。 安全的其他部分可能相对来讲意义并不那么大 (或者,更糟糕的事情是, 那些措施会给您安全的假象), 假如您无法检测潜在的入侵事件。 层次化安全最重要的功能是减缓入侵者, 而不是彻底不让他们入侵,这能够让检测起到作用,并更好地捕捉入侵行为。
检测入侵的一种好办法是查找那些被修改、删除或添加的文件。 检测文件修改的最佳方法是与某个 (通常是中央的) 受限访问的系统上的文件进行比对。 在一台严格限制访问的系统上撰写您的安全脚本通常不能够被入侵者察觉, 因此,这非常重要。为了最大限度地发挥这一策略的优势,通常会使用只读的 NFS, 或者设置 ssh 钥匙对以便为其他机器提供访问。除了网络交互之外, NFS可能是一种很难被察觉的方法 -- 它允许您监控每一台客户机上的文件系统, 而这种监控几乎是无法察觉的。如果一台严格受限的服务器和客户机是通过交换机连接的, 那么 NFS 将是一种非常好的方式。 不过,如果那台监控服务器和客户机之间通过集线器 (Hub),或经过许多层的路由来连接,则这种方式就很不安全了, 此时,应考虑使用 ssh ,即使这可以在审计记录中查到。
一旦为这个受限的机器赋予了至少读取它应监控的客户系统的权限, 就应该为实际的监控撰写脚本。以 NFS 挂接为例,可以用类似 find(1) 和 md5(1) 这样的命令为基础来完成我们所需的工作。 最好能够每天对被控机的所有执行文件计算一遍 md5,同时,还应以更高的频率测试那些 /etc 和 /usr/local/etc 中的控制文件。一旦发现了不匹配的情形,监控机应立即通知系统管理员。 好的安全脚本也应该检查在系统分区,如 / 和 /usr 中是否有新增或删除的可执行文件,以及不适宜的 suid 。
如果打算使用 ssh 来代替 NFS,那么撰写安全脚本将变得困难许多。 本质上,需要在脚本中使用 scp 在客户端复制文件, 另一方面,用于检查的执行文件 (例如 find) 也需要使用 scp 传到客户端,因为 ssh 客户程序很可能已经被攻陷。 总之,在一条不够安全的链路上 ssh 可能是必须的, 但也必须应付它所带来的难题。
安全脚本还应该检查用户以及职员成员的权限设置文件: .rhosts、 .shosts、 .ssh/authorized_keys 等等。 ... 这些文件可能并非通过 MD5 来进行检查。
如果您的用户磁盘空间很大, 检查这种分区上面的文件可能非常耗时。 这种情况下, 采用标志来禁止使用 suid 可执行文件和设备在这些文件系统上出现将是一个好主意。 您可能会想看看 nodev 和 nosuid 这两个选项 (参见 mount(8))。 尽管如此, 这些扫描仍然应该至少每周进行一次, 这样做的意义并不是检测有效的攻击, 而是检查攻击企图。
进程记帐 (参见 accton(8)) 是一种相对成本较低的, 可以帮助您在被入侵后评估损失的机制。 对于找出入侵者是如何进入系统的这件事情来说, 它会非常的有所助益,特别是当入侵者什么文件都没有修改的情况下。
最后, 安全脚本应该处理日志文件, 而日志文件本身应该通过尽可能安全的方法生成 -- 远程 syslog 可能非常有用。 入侵者会试图掩盖他们的踪迹, 而日志文件对于希望了解入侵发生时间的系统管理员来说则显得尤为重要。 保持日志文件的永久性记录的一种方法是在串口上运行系统控制台, 并持续不断地在一台安全的机器上收集这些信息。
带点偏执不会带来伤害。作为一种惯例, 系统管理员在不影响使用的便利的前提下可以启用任何安全特性,此外, 在经过深思熟虑之后,也可以增加一些 确实会 让使用变得不那么方便的安全特性。 更重要的是,有安全意识的管理员应该学会混合不同的安全策略 -- 如果您逐字逐句地按照这份文档来配置您的机器, 那无异于向那些同样能得到这份文档的攻击者透露了更多的信息。
这一节将介绍拒绝服务攻击。 DoS 攻击通常是基于数据包的攻击, 尽管几乎没有任何办法来阻止大量的伪造数据包耗尽网络资源, 但通常可以通过一些手段来限制这类攻击的损害,使它们无法击垮服务器。
限制服务进程 fork.
限制 springboard 攻击 (ICMP 响应攻击, ping 广播,等等)。
内核路由缓存
对于通过复制进程 (fork) 来进行服务的服务器的一种很常见的攻击是想办法耗尽其进程、 文件描述符或者内存, 直到机器彻底死掉。 inetd (参见 inetd(8)) 提供了许多选项来限制这类攻击。 需要注意的是, 尽管能够阻止一台机器彻底垮掉, 但通常无法防止服务本身被击垮。 请仔细阅读 inetd 的联机手册, 特别是它的 -c、 -C 以及 -R 这三个选项。 伪造 IP 攻击能够绕过 inetd 的 -C 选项, 因此, 这些选项需要配合使用。 某些独立的服务器也有类似的限制参数。
例如, Sendmail 就提供了自己的 -OMaxDaemonChildren 选项, 它通常比 sendmail 的负载限制选项更为有效, 因为服务器负载的计算有滞后性。 您可以在启动 sendmail 时指定一个 MaxDaemonChildren 参数, 把它设的足够高以便承载您所需要的负荷, 当然, 不要高到足以让运行 sendmails 的机器死掉。 此外, 以队列模式 (-ODeliveryMode=queued) 并把服务程序 (sendmail -bd) 和队列执行程序分别执行 (sendmail -q15m) 也是一个好主意。 如果您希望保证队列的实时性, 可以考虑使用更短的间隔, 例如 -q1m, 但同时也需要指定一个合理的子进程数, 也就是通过 MaxDaemonChildren 选项以免 那个 sendmail 造成重叠的故障。
Syslogd 可以被直接地攻击,因此, 强烈建议只要可行,就在启动它的时候加上 -s 参数, 其他情况下,则至少应该加上 -a。
对于基于连接的服务,例如 TCP Wrapper 的 reverse-identd, 都应该格外的小心, 因为它们都可能直接遭受攻击。 一般情况下, 基于安全考虑, 不应使用 TCP Wrapper 所提供的 reverse-ident 这样的功能。
此外, 将内部服务保护起来, 阻止来自其他主机的访问也十分重要, 这些工作可以通过设置边界路由器来完成。 主要的想法, 是阻止来自您的 LAN 以外的访问, 这有助于避免 root 受到攻击。 尽可能配置排他式的防火墙, 例如, “用防火墙阻止所有的网络流量 除了 端口 A、B、 C、D,以及 M-Z”。 通过采用这种方法, 您可以很容易地将低端口的访问阻止在外, 而又不难配置使防火墙放过那些明确需要开放的服务, 例如 named (如果您的机器准备作为域的主要解析服务器), ntalkd, sendmail,以及其他可以从 Internet 访问的服务。 如果您尝试以其他方式配置防火墙 -- 采用比较宽松的策略, 那么您将很有可能忘记 “关掉” 一两个服务, 或者在增加了一些服务之后忘记更新防火墙策略。 尽管如此, 仍然可以考虑允许让数据进入编号较高的那一部分端口, 这将保证那些需要这样特性的服务能够正常工作, 而又不影响低端口服务的安全性。 此外, 还应注意到 FreeBSD 允许您来控制动态绑定的端口的范围, 即一系列 net.inet.ip.portrange 变量,通过 sysctl 来完成设置。 (sysctl -a | fgrep portrange)。 这使得您完成较复杂的防火墙策略变得易如反掌。 例如, 您可能希望普通的高段端口的起止范围是 4000 到 5000, 而更高范围则是 49152 到 65535, 随后在防火墙中阻止低于 4000 的所有端口 (当然, 除了那些特地为 Internet 访问而开设的端口)。
另一种常被称作 springboard 的攻击也是非常常见的 DoS 攻击 -- 它通过使服务器产生其无法处理的响应来达到目的。 最常见的攻击就是 ICMP ping 广播攻击。 攻击者通过伪造 ping 包, 将其源 IP 设置为希望攻击的机器的 IP。 如果您的边界路由器没有进行禁止 ping 广播地址的设置, 则您的网络将最终陷于响应伪造的 ping 之中, 特别是当攻击者同时使用了多个不同的网络时。 广播攻击能够产生超过 120 兆位的瞬时流量。 另一种常见的针对 ICMP 错误报告系统的 springboard 攻击, 通过建立可以生成 ICMP 出错响应的包, 攻击者能够攻击服务器的网络下行资源, 并导致其上行资源耗尽。 这种类型的攻击也可以通过耗尽 mbuf 来使得使得被攻击的服务器崩溃,特别是当这些服务器无法足够快地完成 ICPM 响应的时候。 可以通过为 FreeBSD 内核配置称为 ICMP_BANDLIM 的编译选项来使这类攻击变得不那么有效。 最后一类主要的 springboard 是针对某些 inetd 的内部服务, 例如 udp echo 服务进行的。 攻击者简单地伪造一个来自服务器 A 的 echo 口的 UDP 包, 然后将这个包发到 B 的 echo 口。 于是, 两台服务器将不停地将包弹给对方。 攻击者能够将两台服务器的这种服务都耗竭, 并且通过这种方式, 只需要很少的包就可以让 LAN 超载。 类似的问题对 chargen 口也是存在的。 好的系统管理员应该关闭这些 inetd 的测试服务。
伪造的包攻击也可以用来使内核的路由缓存过载。 请参考 net.inet.ip.rtexpire, rtminexpire, 以及 rtmaxcache sysctl 参数。 伪造的包可以用随机的源 IP 攻击, 使得内核在路由表中产生一个临时的缓存项, 它可以通过 netstat -rna | fgrep W3 看到。 这些路由通常需要 1600 秒才会过期。 如果内核发现路由表变得太大, 它会动态地降低 rtexpire 但以 rtminexpire 为限。 这引发了两个问题:
在访问量不大的服务器上, 内核对于突然袭击的反应不够快。
rtminexpire 的值没有低到让内核在此类攻击时活下去的程度。
如果您的服务器通过 T3 或更快的线路接入 Internet, 那么通过 sysctl(8) 来手动地降低 rtexpire 和 rtminexpire 就非常必要。 当然,绝不要把它们设置为零 (除非您想让机器崩溃) 将这两个参数设置为 2 通常已经足以抵御这类攻击了。
如果您打算使用, 那么 Kerberos 和 ssh 都有一些需要解决的问题。 Kerberos V 是一个很棒的验证协议, 但使用了它的 telnet 和 rlogin 应用程序有一些 bug, 使得它们不适合处理二进制流。 而且, 除非使用了 -x 选项, 否则默认情况下 Kerberos 并不加密会话。 ssh 在默认时加密所有的会话内容。
除了默认转发加密密钥, ssh 在所有的其他方面都做得很好。 这意味着如果您持有供您访问系统其他部分密钥的工作站作了很好的安全防护, 而您连到了一台不安全的机器上, 则您的密钥可能被别人获得。 尽管实际的密钥并没有被泄漏, 但由于 ssh 会在您登录的过程中启用一个转发端口, 如果攻击者拿到那台不安全的机器上的 root 那么他将能够利用那个端口来使用您的密钥, 从而访问您能够访问的那些机器。
我们建议您在使用 ssh 时配合 Kerberos 来完成工作人员的登录过程。 ssh 在编译时可以加入 Kerberos 支持。 在减少了潜在地暴露 ssh 密钥的机会的同时, 它还能够通过 Kerberos 来保护口令。 ssh 密钥只有在做过安全防护的机器上执行自动操作时才应使用 (这是 Kerberos 不适合的情形)。 此外,我们还建议您要么在 ssh 配置中关闭密钥转发, 要么在 authorized_keys 中增加 from=IP/DOMAIN 选项, 来限制这些密钥能够登录的来源机器。
UNIX 系统上的每个用户都有一个与其帐户关联的口令。 很显然, 密码只需要被这个用户和操作系统知道。 为了保证口令的私密性, 采用了一种称为 “单向散列” 的方法来处理口令, 简单地说, 很容易从口令推算出散列值, 反之却很难。 其实, 刚才那句话可能并不十分确切: 因为操作系统本身并不 真的 知道您的口令。 它只知道口令 经过加密的形式。 获取口令对应 “明文” 的唯一办法是采用暴力在口令可能的区间内穷举。
不幸的是,当 UNIX 刚刚出现时,安全地加密口令的唯一方法基于DES, 数据加密标准 ( the Data Encryption Standard )。 于是这给那些非美国居民带来了问题, 因为 DES 的源代码在当时不能被出口到美国以外的地方, FreeBSD 必须找到符合美国法律,但又要与其他那些使用 DES 的 UNIX 版本兼容的办法。
解决方案是把加密函数库分割为两个, 于是美国的用户可以安装并使用 DES 函数库, 而国际用户则使用另外一套库提供的一种可以出口的加密算法。 这就是 FreeBSD 为什么使用 MD5 作为它的默认加密算法的原因。 MD5 据信要比 DES 更安全,因此,安装 DES 更多地是出于兼容目的。
在 FreeBSD 4.4 之前,libcrypt.a 曾经是 一个指向相应加密算法的符号连接。FreeBSD 4.4 开始,把 libcrypt.a 变成了一个可以配置的密码验证散列库。 现在这个库支持 DES,MD5和Blowfish散列函数。默认情况下, FreeBSD 使用 MD5 来加密口令。
可以很容易地识别 FreeBSD 使用哪种加密方法。 检查 /etc/master.passwd 文件中的加密密码是一种方法。 用 MD5 散列加密的密码通常要比用 DES 散列得到的长一些, 并且以 $1$ 字符开始。 以 $2a$ 开始的口令是通过 Blowfish 散列函数加密的。 DES 密码字符没有任何可以用于鉴别的特征, 但他们要比 MD5 短, 并且以不包括 $ 在内的 64 个可显示字符来表示, 因此相对比较短的、没有以美元符号开头的字符串很可能是一个 DES 口令。
新口令所使用的密码格式是由 /etc/login.conf 中的 passwd_format 来控制的, 可供选择的算法包括 des, md5 和 blf。 请参考 login.conf(5) 联机帮助以获得更进一步的详情。
UNIX 系统上的每个用户都有一个与其帐户关联的口令。很显然, 为了保证口令的私密性, 使用了一种容易加密,却很难解密的被称作 “单向散列” 的方法来处理口令。换言之,我们刚刚说的那句话并不十分确切: 操作系统本身并不 真的 知道您的口令。 它只知道口令 经过加密的形式。 获取口令对应 “明文” 的唯一办法是采用暴力在口令可能的区间内穷举。
S/Key 是基于单向 hash 功能的一次性密码管理方式。 为了考虑兼容性而使用了 MD4 散列, 而其他系统则使用了 MD5 和 DES-MAC。 S/Key 从 1.1.5 版之后就一直是 FreeBSD 基本系统的一部分, 包含这一特性的操作系统也日益增多。 S/Key 是 Bell Communications Research, Inc. 的注册商标。
从 FreeBSD 的 5.0 版开始, S/Key 被功能相同的 OPIE (One-time Passwords In Everything) 取代了。 OPIE 默认使用 MD5 散列。
下面将介绍三种不同的口令。 第一种是您常用的 UNIX 风格或 Kerberos 口令; 我们在后面的章节中将称其为 “UNIX 口令”。 第二种是使用 S/Key 的 key 程序或 OPIE 的 opiekey(1) 程序生成, 并为 keyinit 或 opiepasswd(1) 以及登录提示所接受的一次性口令,我们称其为 “一次性口令”。 最后一类口令是您输入给 key/opiekey 程序 (有些时候是 keyinit/opiepasswd 程序) 用以产生一次性口令的秘密口令,我们称其为 “秘密口令” 或通俗地简称为 “口令”。
秘密口令和您的 UNIX 口令毫无关系, 尽管可以设置为相同的, 但不推荐这么做。 S/Key 和 OPIE 秘密口令并不像旧式的 UNIX 口令那样只能限于8位以内[9]。 您想要用多长的口令都可以。 有六、七个词的短句是很常见的选择。 在绝大多数时候, S/Key 或 OPIE 系统和 UNIX 口令系统完全相互独立地工作。
除了口令之外, 对于 S/Key 和 OPIE 还有两组至关重要的数据。 其一被称作 “种子” 或 “key”, 它包括两个字符和五个数字。 另一个被称作 “迭代轮数”, 这是一个 1 到 100 之间的数字。 S/Key 通过将种子加到秘密口令后面, 并执行迭代轮数那么多次的 MD4/MD5 散列运算来得到结果, 并将结果表示为 6 个短的英文单词。 这 6 个英文单词就是您的一次性口令。 验证系统 (主要是 PAM) 会记录上次使用的一次性口令, 如果用户提供的口令的散列值与上次一致, 则可以通过身份验证。 由于使用了单向的散列函数, 因此即使截获了上次使用的口令, 也没有办法恢复出下次将要使用的口令; 每次成功登录都将导致迭代轮数递减, 这样用户和登录程序将保持同步。 每当迭代轮数减少到 1 时, 都必须重新初始化 S/Key 和 OPIE。
接下来将讨论和每个系统有关的三个程序。 key 和 opiekey 程序能够接收带迭代计数, 种子和秘密口令, 并生成一个一次性口令, 或一张包含连续的一组一次性口令的表格。 keyinit 和 opiepasswd 程序分别用于初始化 S/Key 和 OPIE, 并修改口令、 迭代次数、种子和一次性口令。 keyinfo 和 opieinfo 程序可以用于检查相应的验证数据文件 (/etc/skeykeys 或 /etc/opiekeys) 并显示执行命令的用户当前的迭代轮数和种子。
我们将介绍四种不同的操作。 在安全的连接上通过 keyinit 或 opiepasswd 来第一次设置一次性口令, 或修改口令及种子。 第二类操作是在不安全的连接上使用 keyinit 或 opiepasswd 辅以在安全连接上执行的 key 或 opiekey 来完成同样的工作。 第三类操作是在不安全的连接上使用 key/opiekey 来登录。 最后一类操作是采用 key 或 opiekey 来生成大批的密码, 以便抄下来或打印出来,在没有安全连接的地方使用。
第一次初始化 S/Key, 修改口令或种子需要在安全的连接 (例如, 在那台机器的控制台上或者通过 ssh) 登录来完成。 以自己的身份登录并执行不带参数的 keyinit 命令:
% keyinit Adding unfurl: Reminder - Only use this method if you are directly connected. If you are using telnet or rlogin exit with no password and use keyinit -s. Enter secret password: Again secret password: ID unfurl s/key is 99 to17757 DEFY CLUB PRO NASH LACE SOFT
对于 OPIE, 则使用 opiepasswd:
% opiepasswd -c [grimreaper] ~ $ opiepasswd -f -c Adding unfurl: Only use this method from the console; NEVER from remote. If you are using telnet, xterm, or a dial-in, type ^C now or exit with no password. Then run opiepasswd without the -c parameter. Using MD5 to compute responses. Enter new secret pass phrase: Again new secret pass phrase: ID unfurl OTP key is 499 to4268 MOS MALL GOAT ARM AVID COED
在 Enter new secret pass phrase: 或 Enter secret password: 提示之后, 应输入一个密码或口令字。 请留意, 这并不是您用于登录的口令, 它用于生成一次性的登录密钥。 “ID” 这一行给出了所需的参数: 您的登录名, 迭代轮数, 以及种子。 登录系统时, 它能够记住这些参数并呈现给您, 因此无需记忆它们。 最后一行给出了与您的秘密口令对应的、用于登录的一个一次性口令; 如果您立即重新登录, 则它将是您需要使用的那个口令。
如果您需要通过一个不安全的连接来初始化, 则应首先在安全连接上执行过一次 key 或 opiekey; 这可以在 Macintosh 的桌面附件, 或是在可信的机器的 shell 上面完成。 此外还需要指定一个迭代轮数 (100 也许是一个较好的选择) 也可以选择一个自己的种子, 或让计算机随机生成一个。 在不安全的连接上 (当然是连到您希望初始化的机器上),使用 keyinit -s 命令:
% keyinit -s Updating unfurl: Old key: to17758 Reminder you need the 6 English words from the key command. Enter sequence count from 1 to 9999: 100 Enter new key [default to17759]: s/key 100 to 17759 s/key access password: s/key access password:CURE MIKE BANE HIM RACY GORE
对于 OPIE, 则需要使用 opiepasswd:
% opiepasswd
Updating unfurl:
You need the response from an OTP generator.
Old secret pass phrase:
otp-md5 498 to4268 ext
Response: GAME GAG WELT OUT DOWN CHAT
New secret pass phrase:
otp-md5 499 to4269
Response: LINE PAP MILK NELL BUOY TROY
ID mark OTP key is 499 gr4269
LINE PAP MILK NELL BUOY TROY
为了接受默认的种子 ( keyinit 程序令人困惑地将其称作 key), 按下 Return。 在输入访问口令之前, 到一个有安全连接或 S/Key 桌面附件的机器上, 并给它同样的参数:
% key 100 to17759 Reminder - Do not use this program while logged in via telnet or rlogin. Enter secret password: <secret password> CURE MIKE BANE HIM RACY GORE
对于 OPIE:
% opiekey 498 to4268 Using the MD5 algorithm to compute response. Reminder: Don't use opiekey from telnet or dial-in sessions. Enter secret pass phrase: GAME GAG WELT OUT DOWN CHAT
现在回到不安全的连接, 并将生成的一次性口令粘贴到相应的应用程序中。
一旦初始化过 S/Key 或 OPIE, 当您登录时将看到类似这样的提示:
% telnet example.com Trying 10.0.0.1... Connected to example.com Escape character is '^]'. FreeBSD/i386 (example.com) (ttypa) login: <username> s/key 97 fw13894 Password:
对于 OPIE 则是:
% telnet example.com Trying 10.0.0.1... Connected to example.com Escape character is '^]'. FreeBSD/i386 (example.com) (ttypa) login: <username> otp-md5 498 gr4269 ext Password:
另外, S/Key 和 OPIE 提示有一个很有用的特性 (这里没有表现出来): 如果您在口令提示处按下 Return(回车) 系统将回显刚键入的口令, 您可以藉此看到自己所键入的内容。 如果试图手工键入一个一次性密码, 这会非常有用。
此时您需要生成一个一次性密码来回答这一提示。 这项工作必须在一个可信的系统上执行 key 或 opiekey 来完成。 (也可以找到 DOS、 Windows 以及 Mac OS 等操作系统上运行的版本)。 这个程序需要将迭代轮数和种子提供给它。 您可以从登录提示那里复制和粘贴它们。
在可信的系统上:
% key 97 fw13894 Reminder - Do not use this program while logged in via telnet or rlogin. Enter secret password: WELD LIP ACTS ENDS ME HAAG
对于 OPIE:
% opiekey 498 to4268 Using the MD5 algorithm to compute response. Reminder: Don't use opiekey from telnet or dial-in sessions. Enter secret pass phrase: GAME GAG WELT OUT DOWN CHAT
现在使用刚刚生成的一次性口令登录:
login: <username> s/key 97 fw13894 Password: <return to enable echo> s/key 97 fw13894 Password [echo on]: WELD LIP ACTS ENDS ME HAAG Last login: Tue Mar 21 11:56:41 from 10.0.0.2 ...
有时,会需要到不能访问可信的机器或安全连接的地方。 这种情形下, 可以使用 key 和 opiekey 命令来一次生成许多一次性口令。 例如:
% key -n 5 30 zz99999 Reminder - Do not use this program while logged in via telnet or rlogin. Enter secret password: <secret password> 26: SODA RUDE LEA LIND BUDD SILT 27: JILT SPY DUTY GLOW COWL ROT 28: THEM OW COLA RUNT BONG SCOT 29: COT MASH BARR BRIM NAN FLAG 30: CAN KNEE CAST NAME FOLK BILK
对于 OPIE:
% opiekey -n 5 30 zz99999 Using the MD5 algorithm to compute response. Reminder: Don't use opiekey from telnet or dial-in sessions. Enter secret pass phrase: <secret password> 26: JOAN BORE FOSS DES NAY QUIT 27: LATE BIAS SLAY FOLK MUCH TRIG 28: SALT TIN ANTI LOON NEAL USE 29: RIO ODIN GO BYE FURY TIC 30: GREW JIVE SAN GIRD BOIL PHI
-n 5 按顺序请求 5 个口令, 30 则指定了最后一个迭代轮数应该是多少。 注意这些口令将按与使用顺序相反的顺序来显示。 如果您比较偏执, 可以手工写下这些结果; 一般来说把它粘贴到 lpr 就可以了。 注意,每一行都显示迭代轮数及其对应的一次性的密码; 一些人建议用完一个就划掉一个。
S/Key 可以对 UNIX 口令的使用实施基于主机名、 用户名、 终端端口或登录会话的 IP 地址的各种限制。 这些限制可以在配置文件 /etc/skey.access 中找到。 skey.access(5) 联机帮助提供了关于文件格式的详细资料, 并给出了更详细的使用这一配置文件时在安全方面需要注意的事项。
如果没有 /etc/skey.access 这个文件 (在 FreeBSD 4.X 系统上这是默认的), 那么所有的用户都可以使用 UNIX 口令。 然而如果它存在, 所有的用户将被要求使用 S/Key, 除非明确地在 skey.access 中配置允许这样做。 无论如何, UNIX 在控制台上总是可用的。
下面是一个示例的 skey.access 配置文件, 它展示了最常用的三类配置语句:
permit internet 192.168.0.0 255.255.0.0 permit user fnord permit port ttyd0
第一行 (permit internet) 允许来自 IP 源地址 (需要注意这是可能被伪造的) 与指定的掩码值进行逻辑与之后, 与给定值匹配的用户使用 UNIX 口令。 这不应被认为是一种安全机制, 它只是为那些使用不安全网络的获得许可的用户提供了用 S/Key 进行身份验证的手段。
第二行 (permit user) 允许指定的用户, 在本例中是 fnord, 在任何时候使用 UNIX 口令。 一般说来, 只应为无法使用 key 程序, 例如那些使用哑终端, 或无法学会如何使用它的用户启用这样的功能。
第三行 (permit port) 允许通过指定终端线的用户使用 UNIX 口令; 这可以被用于拨号用户。
OPIE 可以像 S/Key 一样对 UNIX 口令的使用进行基于 IP 的登录限制。 对应的文件是 /etc/opieaccess, 在 在 FreeBSD 5.0 和更高版本的系统中, 默认情况下它就已经存在了。 请参阅 opieaccess(5) 以了解关于这个文件进一步的情况, 以及安全方面需要进行的一些考虑。
下面是一个示范的 opieaccess 文件:
permit 192.168.0.0 255.255.0.0
这行允许指定 IP 地址的用户 (再次强调这种地址容易被伪造) 在任何时候使用 UNIX 口令登录。
如果 opieaccess 中没有匹配的规则, 则将默认拒绝任何非 OPIE 登录。
每一个熟悉 inetd(8) 都应该听说过 TCP Wrappers, 但几乎没有人对它在网络环境中的作用有全面的理解。 几乎每个人都会安装防火墙来处理网络连接, 然而虽然防火墙有非常广泛的用途, 它却不是万能的, 例如它无法处理类似向连接发起者发送一些文本这样的任务。 而 TCP 软件能够完成它以及更多的其他事情。 接下来的几段中将讨论许多 TCP Wrappers 提供的功能, 并且, 还给出了一些配置实例。
TCP Wrappers 软件扩展了 inetd 为受其控制的服务程序实施控制的能力。 通过使用这种方法, 它能够提供日志支持、 返回消息给联入的连接、 使得服务程序只接受内部连接, 等等。 尽管防火墙也能够完成其中的某些功能, 但这不仅增加了一层额外的保护, 也提供了防火墙无法提供的功能。
然而, 由 TCP Wrappers 提供的一些额外的安全功能, 不应被视为好的防火墙的替代品。 TCP Wrappers 应结合防火墙或其他安全加强设施一并使用, 为系统多提供一层安全防护。
由于这些配置是对于 inetd 的扩展, 因此, 读者应首先阅读 配置 inetd 这节。
Note: 尽管由 inetd(8) 运行的程序并不是真正的 “服务程序”, 但传统上也把它们称为服务程序。 下面仍将使用这一术语。
在 FreeBSD 中使用 TCP Wrappers 的唯一要求是确保 inetd 在从 rc.conf 中启动时包含了 -Ww 选项; 这是默认的设置。 当然, 还需要对 /etc/hosts.allow 进行适当的配置, 但 syslogd(8) 在配置不当时会在系统日志中记录相关消息。
Note: 与其它的 TCP Wrappers 实现不同, 使用 hosts.deny 在这里被认为是不推荐和过时的做法。 所有的配置选项应放到 /etc/hosts.allow 中。
在最简单的配置中, 服务程序的连接策略是根据 /etc/hosts.allow 允许或阻止。 FreeBSD 中的默认配置是允许一切发到由 inetd 所启动的服务的连接请求。 在基本配置之后将讨论更复杂的情况。
基本配置的形式通常是 服务 : 地址 : 动作。 这里 服务 是从 inetd 启动的服务程序的名字。 而 地址 可以是任何有效的主机名、 一个 IP 或由方括号 ([ ]) 括起来的 IPv6 地址。 动作字段可以使 allow 或 deny, 分别用于允许和禁止相应的访问。 在配置时您需要注意所有的配置都是按照第一个匹配的规则运转的, 这表示配置文件将按照顺序查找匹配规则, 而一旦找到匹配, 则搜索也就停止了。
另外也有许多其他选项, 这些将在后面介绍。 简单的配置行从上面这些描述之中可以很容易得出。 例如, 允许 POP3 连接通过 mail/qpopper 服务, 应把下面的行添加到 hosts.allow:
# This line is required for POP3 connections: qpopper : ALL : allow
增加这样之后, 需要重新启动 inetd。 可以通过使用 kill(1) 命令来完成这项工作, 或使用 /etc/rc.d/inetd 的 restart parameter 参数。
TCP Wrappers 也有一些高级的配置选项; 它们能够用来对如何处理连接实施更多的控制。 一些时候, 返回一个说明到特定的主机或请求服务的连接可能是更好的办法。 其他情况下, 记录日志或者发送邮件给管理员可能更为适合。 另外, 一些服务可能只希望为本机提供。 这些需求都可以通过使用 通配符, 扩展字符以及外部命令来实现。 接下来的两节将介绍这些。
假设由于发生了某种状况, 而导致连接应该被拒绝掉, 而将其原因发送给发起连接的人。 如何完成这样的任务呢? 这样的动作可以通过使用 twist 选项来实现。 当发起了连接请求时, twist 将调用一个命令或脚本。 在 hosts.allow 文件中已经给出了一个例子:
# The rest of the daemons are protected.
ALL : ALL \
: severity auth.info \
: twist /bin/echo "You are not welcome to use %d from %h."
这个例子将把消息 “You are not allowed to use daemon from hostname.” 返回给访问先前没有配置过允许访问的服务客户。 对于希望把消息反馈给连接发起者, 然后立即切断这样的需求来说, 这样的配置非常有用。 请注意所有反馈信息 必须 被引号 " 包围; 这一规则是没有例外的。
Warning如果攻击者向服务程序发送大量的连接请求, 则可能发动一次成功的拒绝服务攻击。
另一种可能是针对这种情况使用 spawn。 类似 twist, spawn 也暗含拒绝连接, 并可以用来执行外部命令或服务。 与 twist 不同的是, spawn 不会向连接发起者发送回应。 考虑下面的配置:
# We do not allow connections from example.com:
ALL : .example.com \
: spawn (/bin/echo %a from %h attempted to access %d >> \
/var/log/connections.log) \
: deny
这将拒绝来自 *.example.com 域的所有连接; 同时还将记录主机名, IP 地址, 以及对方所尝试连接的服务名字到 /var/log/connections.log 文件中。
除了前面已经介绍过的转义字符, 例如 %a 之外, 还有一些其它的转义符。 参考 hosts_access(5) 联机手册可以获得完整的列表。
前面的例子都使用了 ALL。 其它选项能够将功能扩展到更远。 例如, ALL 可以被用来匹配每一个服务、 域,或 IP 地址。 另一些可用的通配符包括 PARANOID, 它可以用来匹配任何来自可能被伪造的 IP 地址的主机。 换言之, paranoid 可以被用来定义来自 IP 与其主机名不符的客户。 下面的例子将给您更多的感性认识:
# Block possibly spoofed requests to sendmail: sendmail : PARANOID : deny
在这个例子中, 所有连接 sendmail 的 IP 地址与其主机名不符的主机都将被拒绝。
Caution如果服务器和客户机有一方的 DNS 配置不正确, 使用 PARANOID 可能会严重地削弱服务。 在设置之前, 管理员应该谨慎地考虑。
要了解关于通配符和他们的功能, 请参考 hosts_access(5) 联机手册。
为了使设置能够生效, 应该首先把 hosts.allow 的第一行配置注释掉。 这节的开始部分已经说明了这一点。
Kerberos 是一个网络附加系统/协议, 它使得用户能够通过一个安全服务器的服务来验证身份。 象远程登录, 远程复制, 系统间的相互文件复制和其他完成高风险任务的服务将被变得相当安全和可控制。
下面将具体介绍如何配置随 FreeBSD 发行的 Kerberos。 不过, 您还是应该阅读相应的联机手册以获得完整的说明。
Kerberos 是 FreeBSD 的一项可选组件。 安装该软件最简单的办法就是 在使用 sysinstall 安装 FreeBSD 时选择 krb4 或 krb5。 这样将会安装 “eBones” (KerberosIV) 或 “Heimdal” (Kerberos5) 的 Kerberos 实现。 采用实现的原因是它们在美国/加拿大 以外的地区开发, 因此这些国家之外的人使用, 而不必受美国的加密代码出口管制的限制。
此外, 您可以从 security/krb5 得到 Kerberos 的 MIT 实现。
这项工作只需要在 Kerberos 服务器上完成。 首先确认没有旧的 Kerberos 数据库存在。 您应该进入到 /etc/kerberosIV 目录中并检查下述文件是否已经存在:
# cd /etc/kerberosIV # ls README krb.conf krb.realms
如果您发现了除此之外的其它文件 (例如 principal.* 或 master_key) 已经存在, 请使用 kdb_destroy 命令来销毁旧的数据库, 或者, 如果 Kerberos 没有在运行,简单地删除掉那些多余的文件。
现在必须编辑 krb.conf 和 krb.realms 文件来定义您的 Kerberos 领域。 在本例中, 这个领域将是 EXAMPLE.COM 而其服务器是 grunt.example.com。 我们编辑或创建如下的 krb.conf 文件:
# cat krb.conf EXAMPLE.COM EXAMPLE.COM grunt.example.com admin server CS.BERKELEY.EDU okeeffe.berkeley.edu ATHENA.MIT.EDU kerberos.mit.edu ATHENA.MIT.EDU kerberos-1.mit.edu ATHENA.MIT.EDU kerberos-2.mit.edu ATHENA.MIT.EDU kerberos-3.mit.edu LCS.MIT.EDU kerberos.lcs.mit.edu TELECOM.MIT.EDU bitsy.mit.edu ARC.NASA.GOV trident.arc.nasa.gov
在这个例子中, 除此之外的其它领域并不是必需的。 把他们在这里一并展示是为了演示如何让机器了解多个领域的存在。 简单起见, 在实际的配置中可以省略它们。
第一行命名了这个系统工作的领域。 其它行包含了领域/主机的记录。 每行的第一项是一个领域, 其后是在这个领域中充当 “密钥分发中心” 的主机名。 其后的 admin server 表示该主机同时还提供管理数据库服务。进一步的详细说明请参考 Kerberos 联机手册。
现在应该添加 grunt.example.com 到 EXAMPLE.COM 领域, 同时追加一项以便将出现在 EXAMPLE.COM 领域中 .example.com 域的所有主机也加入进来。 krb.realms 这个文件需要按照下面的方法修改:
# cat krb.realms grunt.example.com EXAMPLE.COM .example.com EXAMPLE.COM .berkeley.edu CS.BERKELEY.EDU .MIT.EDU ATHENA.MIT.EDU .mit.edu ATHENA.MIT.EDU
再次强调, 其它领域并不是必需的。 在这里只是要展示如何使用多个领域。 可以删掉它们以简化配置。
第一行将 指定的 系统置于所指名字的领域内。 这一行的其它部分则指明了特定子域内的主机应该默认属于哪个领域。
接下来我们就可以创建数据库了。 只有在 Kerberos 服务器上 (或密钥分发中心上) 才需要它。 可以通过 kdb_init 命令来完成这一步:
# kdb_init Realm name [default ATHENA.MIT.EDU ]: EXAMPLE.COM You will be prompted for the database Master Password. It is important that you NOT FORGET this password. Enter Kerberos master key:
现在我们应该保存密钥, 这样本机上运行的其他服务就能够了解这一变化。 用 kstash 命令来完成这一步:
# kstash Enter Kerberos master key: Current Kerberos master key version is 1. Master key entered. BEWARE!
这一操作将把主口令保存到 /etc/kerberosIV/master_key。
有两个主要的东西需要被添加到要用 Kerberos 来确保安全的 每一个 系统上。 它们的名字是 kpasswd 和 rcmd。 这些程序允许另外系统改变 Kerberos 的密码, 在不同的系统上可能有不同的名字。
服务程序 kpasswd 和 rcmd 使得其他系统能够修改 Kerberos 口令, 以及执行类似 rcp(1), rlogin(1) 和 rsh(1) 这样的命令。
我们添加下面这些记录:
# kdb_edit Opening database... Enter Kerberos master key: Current Kerberos master key version is 1. Master key entered. BEWARE! Previous or default values are in [brackets] , enter return to leave the same, or new value. Principal name: passwd Instance: grunt <Not found>, Create [y] ? y Principal: passwd, Instance: grunt, kdc_key_ver: 1 New Password: <---- enter RANDOM here Verifying password New Password: <---- enter RANDOM here Random password [y] ? y Principal's new key version = 1 Expiration date (enter yyyy-mm-dd) [ 2000-01-01 ] ? Max ticket lifetime (*5 minutes) [ 255 ] ? Attributes [ 0 ] ? Edit O.K. Principal name: rcmd Instance: grunt <Not found>, Create [y] ? Principal: rcmd, Instance: grunt, kdc_key_ver: 1 New Password: <---- enter RANDOM here Verifying password New Password: <---- enter RANDOM here Random password [y] ? Principal's new key version = 1 Expiration date (enter yyyy-mm-dd) [ 2000-01-01 ] ? Max ticket lifetime (*5 minutes) [ 255 ] ? Attributes [ 0 ] ? Edit O.K. Principal name: <---- null entry here will cause an exit
现在需要分析在每台机器上定义的服务的所有情况。 为了做到这一点, 可以使用 ext_srvtab 命令。 这将创建一个文件, 它需要被 通过安全的途径 复制或移动到每一个 Kerberos 客户端的 /etc/kerberosIV 目录中。 在每一台服务器上都必须存在这个文件, 它对 Kerberos 的运行至关重要。
# ext_srvtab grunt Enter Kerberos master key: Current Kerberos master key version is 1. Master key entered. BEWARE! Generating 'grunt-new-srvtab'....
现在,这个命令只产生一个临时文件,必须被重命名为 srvtab 以便所有的服务可以识别它。 用 mv(1) 命令把它挪到原系统的这个位置:
# mv grunt-new-srvtab srvtab
如果文件是针对客户系统的, 而且网络可能会不安全, 则应把 client-new-srvtab 复制到可移动的介质上, 并通过物理上安全的方式拿走。 将其改名为 srvtab 并放到客户机的 /etc/kerberosIV 目录中, 并赋予 mode 600:
# mv grumble-new-srvtab srvtab # chmod 600 srvtab
现在添加一些用户记录到数据库。 首先为用户 jane 创建其对应的项。 使用 kdb_edit 命令来完成此项工作:
# kdb_edit Opening database... Enter Kerberos master key: Current Kerberos master key version is 1. Master key entered. BEWARE! Previous or default values are in [brackets] , enter return to leave the same, or new value. Principal name: jane Instance: <Not found>, Create [y] ? y Principal: jane, Instance: , kdc_key_ver: 1 New Password: <---- enter a secure password here Verifying password New Password: <---- re-enter the password here Principal's new key version = 1 Expiration date (enter yyyy-mm-dd) [ 2000-01-01 ] ? Max ticket lifetime (*5 minutes) [ 255 ] ? Attributes [ 0 ] ? Edit O.K. Principal name: <---- null entry here will cause an exit
首先必须启动 Kerberos 的服务程序。 这里需要指出, 如果您正确地修改了 /etc/rc.conf 则系统在启动时会自动完成这个工作。 只有在 Kerberos 服务器上才需要这么做。 Kerberos 客户程序将自动地从 /etc/kerberosIV 目录中的文件获取所需要的信息。
# kerberos & Kerberos server starting Sleep forever on error Log file is /var/log/kerberos.log Current Kerberos master key version is 1. Master key entered. BEWARE! Current Kerberos master key version is 1 Local realm: EXAMPLE.COM # kadmind -n & KADM Server KADM0.0A initializing Please do not use 'kill -9' to kill this job, use a regular kill instead Current Kerberos master key version is 1. Master key entered. BEWARE!
接下来应使用 kinit 命令来获取与我们刚刚创建的 ID jane 对应的 ticket:
% kinit jane MIT Project Athena (grunt.example.com) Kerberos Initialization for "jane" Password:
尝试使用 klist 列出句柄以了解是否真的拥有它们:
% klist Ticket file: /tmp/tkt245 Principal: jane@EXAMPLE.COM Issued Expires Principal Apr 30 11:23:22 Apr 30 19:23:22 krbtgt.EXAMPLE.COM@EXAMPLE.COM
现在可以试试看用 passwd(1) 来修改口令, 以验证 kpasswd 服务程序是否能够从 Kerberos 数据库中获得需要的授权:
% passwd realm EXAMPLE.COM Old password for jane: New Password for jane: Verifying password New Password for jane: Password changed.
Kerberos 使我们能够给予 每一个 需要使用 root 特权的用户使用他们自己 单独的 su(1) 口令。 现在我们追加一个被授予 su(1) 到 root 权限的 ID。 这件事是由与 root 相关联的一个 principal 实例来控制的。使用 kdb_edit 可以在 Kerberos 数据库中建立一个 jane.root 条目:
# kdb_edit Opening database... Enter Kerberos master key: Current Kerberos master key version is 1. Master key entered. BEWARE! Previous or default values are in [brackets] , enter return to leave the same, or new value. Principal name: jane Instance: root <Not found>, Create [y] ? y Principal: jane, Instance: root, kdc_key_ver: 1 New Password: <---- enter a SECURE password here Verifying password New Password: <---- re-enter the password here Principal's new key version = 1 Expiration date (enter yyyy-mm-dd) [ 2000-01-01 ] ? Max ticket lifetime (*5 minutes) [ 255 ] ? 12 <--- Keep this short! Attributes [ 0 ] ? Edit O.K. Principal name: <---- null entry here will cause an exit
现在试试看获得相应的句柄, 以确认它已经正常工作了:
# kinit jane.root MIT Project Athena (grunt.example.com) Kerberos Initialization for "jane.root" Password:
接下来我们需要把用户添加到 root的 .klogin 文件里:
# cat /root/.klogin jane.root@EXAMPLE.COM
试试看 su(1):
% su Password:
然后看看我们拥有哪些句柄:
# klist Ticket file: /tmp/tkt_root_245 Principal: jane.root@EXAMPLE.COM Issued Expires Principal May 2 20:43:12 May 3 04:43:12 krbtgt.EXAMPLE.COM@EXAMPLE.COM
在前文给出的例子中, 我们创建了一个称为 jane 的用户, 以及一个 root 实例。 此处的用户名和它的 principal 相同, 这是 Kerberos 默认的; 一个形如 <username>.root 的 <principal>.<instance> 将允许 <username> 使用 su(1) 成为 root, 只要所需的那些条目在 root home 目录中的 .klogin 中存在的话:
# cat /root/.klogin jane.root@EXAMPLE.COM
类似地, 如果用户的 home 目录中有这样的设置:
% cat ~/.klogin jane@EXAMPLE.COM jack@EXAMPLE.COM
则表明在 EXAMPLE.COM 领域的经过身份验证的 jane 或者 jack (通过 kinit, 详情见前文) 能够使用 jane 的身份或系统 (grunt) 中的文件, 无论通过 rlogin(1), rsh(1) 或是 rcp(1)。
举例来说, jane 现在通过 Kerberos 登入了其它系统:
% kinit
MIT Project Athena (grunt.example.com)
Password:
% rlogin grunt
Last login: Mon May 1 21:14:47 from grumble
Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994
The Regents of the University of California. All rights reserved.
FreeBSD BUILT-19950429 (GR386) #0: Sat Apr 29 17:50:09 SAT 1995
或者, 当 jack 登录到 jane 在同一台机器上的账号 (jane 按照前面所介绍的那样配置了 .klogin 文件, 而负责 Kerberos 的管理员, 则为 jack 的 principal 配置了一个空的 instance):
% kinit
% rlogin grunt -l jane
MIT Project Athena (grunt.example.com)
Password:
Last login: Mon May 1 21:16:55 from grumble
Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994
The Regents of the University of California. All rights reserved.
FreeBSD BUILT-19950429 (GR386) #0: Sat Apr 29 17:50:09 SAT 1995
在 FreeBSD-5.1 之后的每一个 FreeBSD 版本都只包含 Kerberos5 支持了, 因而, Kerberos5 是它们所包含的唯一的 Kerberos 版本, 其配置在绝大多数方面和 KerberosIV 非常类似。 下述信息只适用于 FreeBSD-5.0 之后版本中的 Kerberos5。 希望使用 KerberosIV 的用户可以安装 security/krb4 port。
Kerberos 是一组附加的网络系统/协议, 用以让用户通过一台安全服务器提供的服务来验证身份。 包括远程登录、远程复制、在系统间安全地复制文件, 以及其它高危险性的操作, 由于其存在而显著地提高了安全型并且更加可控。
Kerberos 可以理解为一种身份验证代理系统。 它也被描述为一种以受信第三方为主导的身份验证系统。 Kerberos 只提供一种功能 -- 在网络上安全地完成用户的身份验证。 它并不提供授权功能 (也就是说用户能够做什么操作) 或审计功能 (记录用户作了什么操作)。 一旦客户和服务器都使用了 Kerberos 来证明各自的身份之后, 他们还可以加密全部的通讯以保证业务数据的私密性和完整性。
因此, 强烈建议将 Kerberos 同其它提供授权和审计服务的安全手段联用。
接下来的说明可以用来指导如何安装 FreeBSD 所附带的 Kerberos。 不过, 您仍然需要参考相应的联机手册以获得完整的描述。
为了展示 Kerberos 的安装过程, 我们约定:
DNS 域 (“zone”) 为 example.org。
Kerberos 领域是 EXAMPLE.ORG。
Note: 在安装 Kerberos 时请使用实际的域名即使您只是想在内部网上用一用。 这可以避免 DNS 问题并保证了同其它 Kerberos 之间的互操作性。
Kerberos 最早由 MIT 作为解决网络安全问题的一个方案提出。 Kerberos 协议采用了强加密, 因此客户能够在不安全的网络上向服务器 (以及相反地) 验证自己的身份。
Kerberos 是网络验证协议名字, 同时也是用以表达实现了它的程序的形容词。 (例如 Kerberos telnet)。 目前最新的协议版本是 5,在 RFC 1510 中有所描述。
该协议有许多免费的实现, 这些实现涵盖了许多种不同的操作系统。 最初研制 Kerberos 的麻省理工学院 (MIT) 也仍然在继续开发他们的 Kerberos 软件包。 在 US 它被作为一种加密产品使用, 因而历史上曾经受到 US 出口管制。 MIT Kerberos 可以通过 port (security/krb5) 来安装和使用。 Heimdal Kerberos 是另一种第 5 版实现, 并且明确地在 US 之外的地区开发, 以避免出口管制 (因此在许多非商业的类 UNIX 系统中非常常用。 Heimdal Kerberos 软件包可以通过 port (security/heimdal) 安装, 最新的 FreeBSD 的最小安装也会包含它。
为使尽可能多的读者从中受益, 这份说明以 FreeBSD 附带的 Heimdal 软件包为准。
密钥分发中心 (KDC) 是 Kerberos 提供的集中式验证服务 -- 它是签发 Kerberos tickets 的那台计算机。 KDC 在 Kerberos 领域中的其它机器看来是 “受信的”, 因此必须格外注意其安全性。
需要说明 Kerberos 服务器只需要非常少的计算资源, 尽管如此, 基于安全理由仍然推荐使用独占的机器来扮演 KDC 的角色。
要开始配置 KDC, 首先请确认您的 /etc/rc.conf 文件包含了作为一个 KDC 所需的设置 (您可能需要适当地调整路径以适应自己系统的情况):
kerberos5_server_enable="YES" kadmind5_server_enable="YES" kerberos_stash="YES"
Note: kerberos_stash 只在 FreeBSD 4.X 上使用。
接下来需要修改 Kerberos 的配置文件, /etc/krb5.conf:
[libdefaults]
default_realm = EXAMPLE.ORG
[realms]
EXAMPLE.ORG = {
kdc = kerberos.example.org
admin_server = kerberos.example.org
}
[domain_realm]
.example.org = EXAMPLE.ORG
请注意这个 /etc/krb5.conf 文件假定您的 KDC 有一个完整的主机名, 即 kerberos.example.org。 如果您的 KDC 主机名与它不同, 则应添加一条 CNAME (别名) 项到 zone 中去。
Note: 对于有正确地配置过的 BIND DNS 服务器的大型网络, 上述例子可以精简为:
[libdefaults] default_realm = EXAMPLE.ORG将下面的内容加入到 example.org zone 数据文件中:
_kerberos._udp IN SRV 01 00 88 kerberos.example.org. _kerberos._tcp IN SRV 01 00 88 kerberos.example.org. _kpasswd._udp IN SRV 01 00 464 kerberos.example.org. _kerberos-adm._tcp IN SRV 01 00 749 kerberos.example.org. _kerberos IN TXT EXAMPLE.ORG.
Note: 要让客户机能够找到 Kerberos 服务, 您 必须 已经配置了一个完整的 /etc/krb5.conf 或最小配置的 /etc/krb5.conf 加上 正确配置的 DNS 服务器。
接下来需要创建 Kerberos 数据库。 这个数据库包括了使用主密码加密的所有实体的密钥。 您并不需要记住这个密码, 它会保存在一个文件 (/var/heimdal/m-key) 中。 要创建主密钥, 需要执行 kstash 并输入一个口令。
主密钥一旦建立, 您就可以用 kadmin 程序的 -l 参数 (表示 “local”) 来初始化数据库了。 这个选项让 kadmin 直接地修改数据库文件而不是通过 kadmind 的网络服务。 这解决了在数据库创建之前连接它的鸡生蛋的问题。 进入 kadmin 提示符之后, 用 init 命令来创建领域的初始数据库。
最后, 仍然在 kadmin 中, 使用 add 命令来创建第一个 principal。 暂时使用全部的默认设置, 随后可以在任何时候使用 modify 命令来修改这些设置。 另外, 也可以用 ? 命令来了解可用的选项。
典型的数据库创建过程如下:
# kstash Master key: xxxxxxxx Verifying password - Master key: xxxxxxxx # kadmin -l kadmin> init EXAMPLE.ORG Realm max ticket life [unlimited]: kadmin> add tillman Max ticket life [unlimited]: Max renewable life [unlimited]: Attributes []: Password: xxxxxxxx Verifying password - Password: xxxxxxxx
现在是启动 KDC 服务的时候了。 运行 /etc/rc.d/kerberos start 以及 /etc/rc.d/kadmind start 来启动这些服务。 尽管此时还没有任何正在运行的 Kerberos 服务, 但您仍然可以通过获取并列出您刚刚创建的那个 principal (用户) 的 ticket 来验证 KDC 确实在正常工作, 使用 KDC 本身的功能:
% k5init tillman
tillman@EXAMPLE.ORG's Password:
% k5list
Credentials cache: FILE:/tmp/krb5cc_500
Principal: tillman@EXAMPLE.ORG
Issued Expires Principal
Aug 27 15:37:58 Aug 28 01:37:58 krbtgt/EXAMPLE.ORG@EXAMPLE.ORG
首先我们需要一份 Kerberos 配置文件 /etc/krb5.conf 的副本。 只需简单地用安全的方式 (使用类似 scp(1) 的网络工具, 或通过软盘) 复制 KDC 上的版本, 并覆盖掉客户机上的对应文件就可以了。
接下来需要一个 /etc/krb5.keytab 文件。 这是提供 Kerberos 服务的服务器和工作站的一个主要区别 -- 服务器必须有 keytab 文件。 这个文件包括了服务器的主机密钥, 这使得 KDC 得以验证它们的身份。 此文件必须以安全的方式传到服务器上, 因为如果密钥被公之于众, 则安全也就毁于一旦。 也就是说, 通过明文的通道, 例如 FTP 是非常糟糕的想法。
一般来说, 您会希望使用 kadmin 程序来把 keytab 传到服务器上。 由于也需要使用 kadmin 来为主机建立 principal (KDC 一端的 krb5.keytab), 因此这并不复杂。
注意您必须已经获得了一个 ticket 而且这个 ticket 必须许可使用 kadmind.acl 中的 kadmin 接口。 请参考 Heimdal info 中的 “Remote administration(远程管理)” 一节 (info heimdal) 以了解如何设计访问控制表。 如果不希望启用远程的 kadmin 操作, 则可以简单地采用安全的方式连接 KDC (通过本机控制台, ssh(1) 或 Kerberos telnet(1)) 并使用 kadmin -l 在本地执行管理操作。
安装了 /etc/krb5.conf 文件之后, 您就可以使用 Kerberos 上的 kadmin 了。 add --random-key 命令可以用于添加主机 principal, 而 ext 命令则允许导出服务器的主机 principal 到它的 keytab 中。 例如:
# kadmin kadmin> add --random-key host/myserver.example.org Max ticket life [unlimited]: Max renewable life [unlimited]: Attributes []: kadmin> ext host/myserver.example.org kadmin> exit
注意 ext 命令 (这是 “extract” 的简写) 默认会把导出的密钥放到 /etc/krb5.keytab 中。
如果您由于没有在 KDC 上运行 kadmind (例如基于安全理由) 因而无法远程地使用 kadmin 您可以直接在 KDC 上添加主机 principal (host/myserver.EXAMPLE.ORG) 随后将其导出到一个临时文件中 (以免覆盖 KDC 上的 /etc/krb5.keytab), 方法是使用下面的命令:
# kadmin kadmin> ext --keytab=/tmp/example.keytab host/myserver.example.org kadmin> exit
随后需要把 keytab 复制到服务器上 (例如使用 scp 或软盘)。 一定要指定一个不同于默认的 keytab 名字以免覆盖 KDC 上的 keytab。
到现在您的服务器已经可以同 KDC 通讯了 (因为已经配置了 krb5.conf 文件), 而且它还能够证明自己的身份 (由于配置了 krb5.keytab 文件)。 现在可以启用一些 Kerberos 服务。 在这个例子中, 我们将在 /etc/inetd.conf 中添加下面的行来启用 telnet 服务, 随后用 /etc/rc.d/inetd restart 重启 inetd(8) 服务来使设置生效:
telnet stream tcp nowait root /usr/libexec/telnetd telnetd -a user
关键的部分是 -a (表示验证) 类型设置为用户 (user)。 请参考 telnetd(8) 联机手册以了解细节。
设置客户机是非常简单的。 在正确配置了 Kerberos 的网络中, 只需要将位于 /etc/krb5.conf 的配置文件进行一下设置就可以了。 这一步骤可以简单地通过安全的方式将文件从 KDC 复制到客户机上来完成。
尝试在客户机上执行 kinit、 klist, 以及 kdestroy 来测试获取、 显示并删除 刚刚为 principal 建立的 ticket 是否能够正常进行, 如果能, 则用其它的 Kerberos 应用程序来连接启用了 Kerberos 的服务。 如果应用程序不能正常工作而获取 ticket 正常, 则通常是服务本身, 而非客户机或 KDC 有问题。
在测试类似 telnet 的应用程序时, 应考虑使用抓包程序 (例如 tcpdump(1)) 来确认您的口令没有以明文方式传输。 尝试使用 telnet 的 -x 参数, 它将加密整个数据流 (类似 ssh)。
核心的 Kerberos 客户端应用 (按照传统命名, 包括了 kinit、 klist、 kdestroy, 以及 kpasswd) 已经随 基本的 FreeBSD 安装到了系统上。 请注意 5.0 之前的 FreeBSD 版本将它们改名为 k5init、 k5list、 k5destroy、 k5passwd, 以及 k5stash (尽管这些命令通常只会用到一次)。
许多非核心的 Kerberos 客户应用程序也是默认安装的。 在 Hemidal 的 “最小” 安装理念下, telnet 是唯一一个采用了 Kerberos 的服务。
Heimdal port 则提供了一些默认不安装的客户应用程序, 例如启用了 Kerberos 版本的 ftp、 rsh、 rcp、 rlogin 以及一些更不常用的程序。 MIT port 也包括了一整套 Kerberos 客户应用程序。
在某个领域中的用户往往都有自己的 Kerberos principal (例如 tillman@EXAMPLE.ORG) 并映射到本机用户帐户 (例如本机上名为 tillman 的帐户)。 客户端应用程序, 如 telnet 通常并不需要用户名或 principal。
不过, 有时您可能会需要赋予某些没有匹配 Kerberos principal 的人使用本地用户帐户的权限。 例如 tillman@EXAMPLE.ORG 可能需要访问本地的 webdevelopers 用户帐号。 其它 principal 可能也会需要访问这个本地帐号。
用户 home 目录中的 .k5login 和 .k5users 这两个文件可以配合 .hosts 和 .rhosts 来有效地解决这个问题。 例如, 如果 .k5login 中有如下内容:
tillman@example.org jdoe@example.org
并放到了本地用户 webdevelopers 的 home 目录中, 则列出的两个 principals 都可以使用那个帐号, 而无须共享口令。
建议您在开始实施之前首先阅读这些命令的联机帮助。 特别地, ksu 的联机手册包括了 .k5users 的相关内容。
当使用 Heimdal 或 MIT Kerberos ports 时, 需要确认 PATH 环境变量把 Kerberos 客户应用列在系统自带的版本之前。
同一领域内的所有计算机的时间设置是否同步? 如果不是的话, 则身份验证可能会失败。 第 23.11 节 描述了如何使用 NTP 来同步时钟。
MIT 和 Heimdal 能够很好地互操作。 一个例外是 kadmin, 因为这个协议没有被标准化。
如果您改变了主机名, 您还需要修改您的 host/ principal 并更新 keytab。 这一规律也适用于类似 Apache 的 www/mod_auth_kerb 所使用的 www/ principal 这样的特殊 keytab 项。
您的领域中的每一台主机必须在 DNS (或至少在 /etc/hosts 中) 可以解析 (同时包括正向和反向)。 CNAME 能够正常使用, 但必须有正确的对应 A 和 PTR 记录。 此时给出的错误信息可能很让人困惑: “Kerberos5 refuses authentication because Read req failed: Key table entry not found”。
某些作为客户使用您的 KDC 的操作系统可能没有将 ksu 设置为 setuid root 的权限。 这意味着 ksu 将不能够正常工作, 从安全角度说这是一个不错的主意, 但可能令人烦恼。 这类问题并不是 KDC 的错误。
使用 MIT Kerberos 时, 如果希望允许一个 principal 拥有超过默认的十小时有效期的 ticket 则必须使用 kadmin 中的 modify_principal 来修改 principal 本身以及 krbtgt 的 maxlife(最大有效期)。 此后, principal 可以使用 kinit 的 -l 参数来请求一个有更长有效期的 ticket。
Note: 如果在 KDC 上运行了听包程序, 并在工作站上执行 kinit, 您可能会注意到 TGT 是在 kinit 一开始执行的时候就发出了的 -- 甚至在您输入口令之前! 关于这个现象的解释是 Kerberos 服务器可以无限制地收发 TGT (Ticket Granting Ticket) 给任何未经授权的请求; 但是, 每一个 TGT 都是使用用户的口令派生出来的密钥进行加密的。 因此, 当用户输入口令时它并不会发送给 KDC, 而是直接用于解密 kinit 所拿到的 TGT。 如果解密过程得到了一个包含合法的时间戳的有效 ticket, 则说明用户的 Kerberos 凭据有效。 这些凭据包含了一个会话密钥用以在随后建立 Kerberos 服务器的加密通讯, 传递由服务器自己的私钥加密的实际的 ticket-granting ticket。 这个第二层加密对于用户来说是看不到的, 但它使得 Kerberos 服务器能够验证每一个 TGT 的真实性。
如果需要有效期更长的 ticket (例如一周) 而且您使用 OpenSSH 连接保存您的 ticket 的机器, 请确认 sshd_config 中的 Kerberos TicketCleanup 被设置为 no 否则在注销时会自动删除所有的 ticket。
切记主机的 principals 的 ticket 有效期一定要比用户的长。 如果您的用户 principal 的有效期是一周, 而所连接的主机的有效期是九个小时, 则缓存的主机 principal 将先行过期, 结果是 ticket 缓存无法正常工作。
当配置 krb5.dict 文件来防止使用特定的简单口令 (kadmind 的联机手册中简要介绍了它), 请切记只有指定了口令策略的 principals 才会使用它们。 krb5.dict 文件的格式很简单: 每个串占一行。 创建一个到 /usr/share/dict/words 的符号连接会很有用。
MIT 和 Heimdal 主要的区别在于 kadmin 程序使用不同 (尽管等价) 的命令和协议。 如果您的 KDC 是 MIT 的, 则其影响是不能使用 Heimdal 的 kadmin 程序来远程管理 KDC (或相反)。
完成同样工作的命令可能会有些许的不同。 推荐按照 MIT Kerberos 的网站 (http://web.mit.edu/Kerberos/www/) 上的说明来操作。 请小心关于路径的问题, MIT port 会默认安装到 /usr/local/, 您因此可能会执行 “普通的” 系统应用程序而非 MIT, 如果您的 PATH 环境变量把 把系统目录放在前面的话。
Note: 如果使用 FreeBSD 提供的 MIT security/krb5 port, 一定要仔细阅读 port 所安装的 /usr/local/share/doc/krb5/README.FreeBSD, 如果您想知道为什么通过 telnetd 和 klogind 登录时会出现一些诡异的现象的话。 最重要地, “incorrect permissions on cache file(缓存文件权限不正确)” 行为需要使用 login.krb5 来进行验证, 才能够正确地修改转发凭据的属主。
在网络上启用的每个服务都必须进行修改以便让其能够配合 Kerberos 工作 (否则就只能使用其它方法来保护它们不受网络攻击的侵害), 如果不是这样, 则用户的凭据就有可能被窃取并再次使用。 一个例子是对所有的远程 shell (例如通过 rsh 和 telnet) 启用了 Kerberos 但没有将使用明文验证的 POP3 邮件服务器 Kerberos化。
在多用户环境中 Kerberos 的安全性会被削弱。 这是因为它把 ticket 保存到 /tmp 目录中, 而这个目录可以被任何用户读取。 如果有用户与其它人同时共享一台计算机 (也就是 multi-user), 则这个用户的 ticket 就可能被其它用户窃取 (复制)。
可以通过使用 -c 文件名 这样的命令行选项, 或者(推荐的)改变 KRB5CCNAME 环境变量来避免这个问题, 但很少有人这么做。原则上, 将 ticket 保存到用户的 home 目录并简单地设置权限就能够缓解这个问题。
根据设计, KDC 必须是安全的, 因为主密码数据库保存在它上面。 决不应该在 KDC上面运行其它服务, 而且还应确保它的物理安全。 由于 Kerberos 使用同一个密钥 (传说中的那个 “主” 密钥) 来加密所有的密码, 而将这个文件保存在 KDC, 因此其安全尤为重要
不过, 主密钥的泄露并没有想象中的那么可怕。 主密钥只用来加密 Kerberos 数据库以及产生随机数发生器的种子。 只要 KDC 是安全的, 即使攻击者拿到了主密钥也做不了什么。
另外, 如果 KDC 不可用 (例如由于拒绝服务攻击或网络故障) 则网络服务将由于验证服务无法进行而不能使用, 从而导致更大范围的拒绝服务攻击。 通过部署多个 KDC (一个主服务器, 配合一个或多个从服务器) 并采用经过仔细设计和实现的备用验证方式可以避免这种问题 (PAM 是一个不错的选择)。
Kerberos 允许用户、主机和服务之间进行相互认证。 但它并没有提供机制来向用户、主机或服务验证 KDC。 这意味着种过木马的程序,例如 kinit 有可能记录用户所有的用户名和密码。 尽管如此, 可以用类似 security/tripwire 这样的文件系统完整性检查工具来避免此类情况的发生。
许多用户可能并没有注意到 FreeBSD 所附带的 OpenSSL 工具包的功能。 OpenSSL 提供了建立在普通的通讯层基础上的加密传输层; 这些功能为许多网络应用和服务程序所广泛使用。
对 OpenSSL 的一些常见用法包括加密邮件客户的身份验证过程, 基于 Web 的交易如信用卡等等。 许多 ports 如 www/apache13-ssl, 以及 mail/sylpheed-claws 等等都提供了编译进 OpenSSL 支持的方法。
Note: 绝大多数情况下 Ports Collection 会试图使用 security/openssl 除非明确地将 WITH_OPENSSL_BASE make 变量设置为 “yes”。
FreeBSD 中附带的 OpenSSL 版本能够支持 安全套接字层 v2/v3 (SSLv2/SSLv3) 和 安全传输层 v1 (TLSv1) 三种网络协议, 并可作为通用的密码学函数库使用。
Note: 尽管 OpenSSL 支持 IDEA 算法, 但由于美国专利, 它在默认情况下是不编译的。 如果想使用它, 请查阅相应的授权, 如果认为授权可以接受, 则可以在 make.conf 中设置 MAKE_IDEA。
为应用软件提供证书是 OpenSSL 最为常用的功能之一。 证书是一种能够确保公司或个人有效身份不被伪造的凭据。 如果证书没有被众多 “权威发证机构”, 或 CA 中的某一个确认, 则会产生一个警告。 权威发证机构通常是一家公司, 例如 VeriSign, 它能够通过签署来证明个人或公司证书的有效性。 这个过程是需要付费的, 当然, 这不是使用证书的必要条件; 然而, 这样做会让那些比较偏执的用户感到轻松。
为了生成证书, 需要使用下面的命令:
# openssl req -new -nodes -out req.pem -keyout cert.pem Generating a 1024 bit RSA private key ................++++++ .......................................++++++ writing new private key to 'cert.pem' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:US State or Province Name (full name) [Some-State]:PA Locality Name (eg, city) []:Pittsburgh Organization Name (eg, company) [Internet Widgits Pty Ltd]:My Company Organizational Unit Name (eg, section) []:Systems Administrator Common Name (eg, YOUR name) []:localhost.example.org Email Address []:trhodes@FreeBSD.org Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:SOME PASSWORD An optional company name []:Another Name
请注意, 在 “Common Name” 提示后面我们输入的是一个域名。 这个提示要求输入服务器的名字, 这个名字今后将用于完成验证过程; 如果在这里输入域名以外的内容, 那么证书也就失去其意义了。 您还可以指定一些其他的选项, 比如证书的有效期, 以及使用的加密算法等等。 这些选项的完整列表, 可以在 openssl(1) 联机手册中找到。
上述命令执行完之后应该会在当前目录生成一个 cert.pem 文件。 这就是刚刚生成的证书, 您可以把它发给任意一家 CA 进行签署。
如果不需要来自 CA 的签名, 也可以创建自行签名的证书。 首先, 需要生成 RSA 密钥:
# openssl dsaparam -rand -genkey -out myRSA.key 1024
接下来, 生成 CA 密钥:
# openssl gendsa -des3 -out \ myca.key myRSA.key
然后用这个密钥来创建证书:
# openssl req -new -x509 -days 365 -key \ myca.key -out new.crt
上述步骤将在当前目录中生成两个新文件: 一个是权威发证机构的签名文件, myca.key; 另一个是证书本身, new.crt。 这些文件应该放到同一个目录中, 一般而言, 推荐放到 /etc, 并且只允许 root 读取。 建议把权限设置为 0700, 这可以通过 chmod 工具来完成。
那么有了这些文件可以做些什么呢? 一个比较典型的用法是用来加密 Sendmail MTA 的通讯连接。 这可以解决用户通过本地 MTA 发送邮件时使用明文进行身份验证的问题。
Note: 这个用法可能并不完美, 因为某些 MUA 会由于没有在本地安装证书而向用户发出警告。 请参考那些软件的说明了解关于安装证书的信息。
下面的设置应添加到本地的 .mc 文件
dnl SSL Options define(`confCACERT_PATH',`/etc/certs')dnl define(`confCACERT',`/etc/certs/new.crt')dnl define(`confSERVER_CERT',`/etc/certs/new.crt')dnl define(`confSERVER_KEY',`/etc/certs/myca.key')dnl define(`confTLS_SRV_OPTIONS', `V')dnl
这里, /etc/certs/ 是准备用来在本地保存证书和密钥的位置。 最后, 需要重新生成本地的 .cf 文件。 这一工作可以简单地通过在 /etc/mail 目录中执行 make install 来完成。 接下来, 可以使用 make restart 来重新启动 Sendmail 服务程序。
如果一切正常的话, 在 /var/log/maillog 中就不会出现错误提示, Sendmail 也应该出现在进程列表中。
做一个简单的测试, 使用 telnet(1) 来连接邮件服务器:
# telnet example.com 25 Trying 192.0.34.166... Connected to example.com. Escape character is '^]'. 220 example.com ESMTP Sendmail 8.12.10/8.12.10; Tue, 31 Aug 2004 03:41:22 -0400 (EDT) ehlo example.com 250-example.com Hello example.com [192.0.34.166], pleased to meet you 250-ENHANCEDSTATUSCODES 250-PIPELINING 250-8BITMIME 250-SIZE 250-DSN 250-ETRN 250-AUTH LOGIN PLAIN 250-STARTTLS 250-DELIVERBY 250 HELP quit 221 2.0.0 example.com closing connection Connection closed by foreign host.
如果输出中出现了 “STARTTLS” 则说明一切正常。
使用 FreeBSD 网关在两个被 Internet 分开的网络之间架设 VPN。
这一节将指导您完成架设 IPsec, 并在一个包含了 FreeBSD 和 Microsoft Windows 2000/XP 机器的网络中使用它来进行安全的通讯的全过程。 为了配置 IPsec, 您应当熟悉如何编译一个定制的内核的一些概念 (参见 第 8 章)。
IPsec 是一种建立在 Internet 协议 (IP) 层之上的协议。 它能够让两个或更多主机以安全的方式来通讯 (并因此而得名)。 FreeBSD IPsec “网络协议栈” 基于 KAME 的实现, 它支持两种协议族, IPv4 和 IPv6。
Note: FreeBSD 5.X 包括了采用 “硬件加速的” IPsec 协议栈, 也称作 “Fast IPsec”, 它来自 OpenBSD。 它能够通过 crypto(4) 子系统来利用加密硬件 (只要可能) 优化 IPSec 的性能。 这个子系统是新的, 暂时还不支持 KAME 版本的 IPsec 的全部功能。 此外, 为了启用硬件加速的 IPsec, 必须把下面的选项加入到内核配置中:
options FAST_IPSEC # new IPsec (cannot define w/ IPSEC)请注意, 目前还不能把 “Fast IPsec” 子系统同 KAME 的 IPsec 实现同时混用。 请参考 fast_ipsec(4) 联机手册以了解进一步的信息。
IPsec 包括了两个子协议:
Encapsulated Security Payload (ESP), 保护 IP 包数据不被第三方介入, 通过使用对称加密算法 (例如 Blowfish、 3DES)。
Authentication Header (AH), 保护 IP 包头不被第三方介入和伪造, 通过计算校验和以及对 IP 包头的字段进行安全散列来实现。 随后是一个包含了散列值的附加头, 以便能够验证包。
ESP 和 AH 可以根据环境的不同, 分别或者一同使用。
IPsec 既可以用来直接加密主机之间的网络通讯 (也就是 传输模式); 也可以用来在两个子网之间建造 “虚拟隧道” 用于两个网络之间的安全通讯 (也就是 隧道模式)。 后一种更多的被称为是 虚拟专用网 (VPN)。 ipsec(4) 联机手册提供了关于 FreeBSD 中 IPsec 子系统的详细信息。
要把 IPsec 支持放进内核, 应该在配置文件中加入下面的选项:
options IPSEC #IP security
options IPSEC_ESP #IP security (crypto; define w/ IPSEC)
如果需要 IPsec 的调试支持, 还应增加:
options IPSEC_DEBUG #debug for IP security
由于对如何建立 VPN 并不存在标准, 因此 VPN 可以采用许多种不同的技术来实现, 每种技术都有其长处和弱点。 这篇文章讲展现一个具体的应用情景, 并为它设计了适合的 VPN。
现有条件如下:
至少有两个不同的站点
每个站点都使用内部的 IP
两个站点都通过运行 FreeBSD 的网关接入 Internet。
每个网络上的网关至少有一个公网的 IP 地址。
网络的内部地址可以是公网或私有的 IP 地址, 这并不是问题。 如果需要, 还可以在网关上运行 NAT。
两个网络上的 IP 地址 不冲突。 虽然理论上可以通过 VPN 和 NAT 连用来使这种情况能够正常工作, 但那毫无疑问将是管理的噩梦。
如果您发现您正打算连接两个内网使用同一私有 IP 地址范围的网络 (例如它们都使用 192.168.1.x), 则其中的一个必须修改网络地址。
网络的拓扑结构如下:

请注意两个公网 IP 地址。 在这篇文章的其余部分我将用这些字母来表示它们。 在文章中看到这些字母的时候, 请把它们换成自己的公网 IP 地址。 另外, 在内部, 两个网关都是使用的 .1 的 IP地址, 而两个网络使用了不同的私有 IP 地址 (相应地, 192.168.1.x 和 192.168.2.x)。 所有私有网络上的机器都被配置为使用 .1 这台机器作为它们的网关。
我们希望, 从网络的观点看, 每一个网络上的机器都应该能够像在直接连接到同一路由器上一样看到对方网络上的机器 -- 尽管可能比路由器略慢一些, 并且有时会有丢包的现象。
这意味着 (举例来说), 主机 192.168.1.20 应该能够运行
ping 192.168.2.34
并且这能够透明地工作。 Windows 机器应该能够看到其他网络上的机器, 浏览文件共享, 等等, 就像在本地网络上一样。
而且这些事情必须是安全的, 也就是说两个网络之间的通讯必须加密。
在两个网络之间建立 VPN 可以分为几步。 这些步骤包括:
在两个网络之间, 通过 Internet 建立一个 “虚拟的” 网络连接。 使用类似 ping(8) 这样的工作来验证它是否正常工作。
在两个网络之间应用安全策略以保证它们之间的通讯被透明地加密盒解密。 可以使用 tcpdump(1) 或类似的工具来验证这一点。
在 FreeBSD 网关上配置其他软件, 让 Windows 机器能够通过 VPN 看到另一个网络中的机器。
假设您目前已经登录到了网络 #1 的网关机上 (其公网 IP 地址是 A.B.C.D, 私网 IP 地址是 192.168.1.1), 则您可以执行 ping 192.168.2.1, 这是公网 IP 为 W.X.Y.Z 的私网地址。 需要做什么实现上述功能呢?
作为网关的机器需要知道如何能够到达 192.168.2.1。 换言之, 它需要一条通往 192.168.2.1 的路由。
私网 IP 地址, 例如 192.168.x 这样的地址是不应在 Internet 上面大量出现的。 于此相反, 发送到 192.168.2.1 的数据包将会封装到另外的包中。 这样的包对外展现的应该是来自 A.B.C.D, 并被发到 W.X.Y.Z 去。 这个过程称为 封装。
一旦包到达了 W.X.Y.Z 就需要对其 “拆封”, 并传递给 192.168.2.1。
可以把上述过程理解为在两个网络间建立了一个 “隧道”。 两个 “隧道口” 是 IP 地址 A.B.C.D 和 W.X.Y.Z, 而隧道必须被告知哪些私有地址可以自由地在其中通过。 隧道被用来在公共的 Internet 上传递私有的 IP 数据。
在 FreeBSD 上, 隧道可以通过一般的网络接口, 或 gif 来建立。 您也许已经猜到了, 每一台网关机的 gif 接口需要配置四个 IP 地址; 两个是公网 IP 地址, 另两个则是私网 IP 地址。
对于 gif 设备的支持必须在两台网关机上编译进 FreeBSD 内核。 可以通过添加下面的设置来达到目的:
pseudo-device gif
到两边的内核配置文件中, 并重新编译、 安装和启动它们。
配置隧道可以分为两步来完成。 首先隧道必须被告知外部的 (或公网的) IP 地址, 可以通过 gifconfig(8) 来完成这步。 私网 IP 地址则必须使用 ifconfig(8) 来配置。
Note: 在 FreeBSD 5.X 中, gifconfig(8) 的功能已经并入 ifconfig(8)。
在网络 #1 的网关机上可以通过下面的两个命令来配置隧道。
gifconfig gif0 A.B.C.D W.X.Y.Z
ifconfig gif0 inet 192.168.1.1 192.168.2.1 netmask 0xffffffff
在另一边也需要做类似的设置, 只是 IP 地址的顺序是反过来的。
gifconfig gif0 W.X.Y.Z A.B.C.D
ifconfig gif0 inet 192.168.2.1 192.168.1.1 netmask 0xffffffff
随后执行:
gifconfig gif0
可以查看当前的配置情况。 例如, 在网络 #1 的网关上您应该能够看到:
# gifconfig gif0
gif0: flags=8011<UP,POINTTOPOINT,MULTICAST> mtu 1280
inet 192.168.1.1 --> 192.168.2.1 netmask 0xffffffff
physical address inet A.B.C.D --> W.X.Y.Z
如您所见, 虽然到已经在物理地址 A.B.C.D 和 W.X.Y.Z 之间建立起来, 而允许通过隧道的地址则是 192.168.1.1 到 192.168.2.1 这个范围。
这同时会在两边机器的路由表中加入一项, 可以通过 netstat -rn 来观察。 来自网络 #1的网关机的输出如下。
# netstat -rn
Routing tables
Internet:
Destination Gateway Flags Refs Use Netif Expire
...
192.168.2.1 192.168.1.1 UH 0 0 gif0
...
正如 “Flags” 的值所显示的那样, 这是一个主机路由, 这意味着每一个网关都知道如何到达另一端的网关, 但它们现在还不知道如何到达对方的网络。 我们接下来立刻解决这个问题。
您很可能在两台机器上都在运行防火墙。 这需要作一些变动, 以便适应 VPN 的需要。 一般来说会希望两个网络相互传递数据包, 或者通过防火墙来隔离两边的危险。
如果您将防火墙配置为允许两边的网络传输通过, 则测试工作会简单不少。 随后您可以随时将限制变得更严格一些。 假如您在网关上使用 ipfw(8) 则下面的命令
ipfw add 1 allow ip from any to any via gif0
将允许两端点的 VPN 数据通过, 而不影响其他防火墙策略。 很显然, 您需要在两个网关上都执行上述命令。
现在已经可以让两台机器相互 ping 了。 在 192.168.1.1 您应该能够正常执行
ping 192.168.2.1
并得到回应。 对于另一台网关来说也是一样。
然而, 到目前为止仍然还无法连上另一网络上的内部主机。 原因是路由 -- 尽管网关机知道如何到达对方那里, 但它们都不知道如何到达对方后面的网络。
要解决这个问题, 就必须在两边都添加一条静态路由。 可以在第一台网关上执行:
route add 192.168.2.0 192.168.2.1 netmask 0xffffff00
这相当于是说 “为了到达 192.168.2.0 子网的机器, 需要把包发给 192.168.2.1”。 您需要在另一个网关上也执行类似的命令, 但使用 192.168.1.x 的地址。
来自一个网络上的 IP 访问现在能够抵达对面的网络了。
在两个网络之间建立 VPN 的过程已经完成了三分之二, 它现在已经是 “虚拟的” “网络”, 然而它还不够专用。 您可以使用 ping(8) 和 tcpdump(1) 来进行测试, 并记录两边收发的数据包
tcpdump dst host 192.168.2.1
接下来登录到本机的另一个会话
ping 192.168.2.1
您将在输出中发现
16:10:24.018080 192.168.1.1 > 192.168.2.1: icmp: echo request
16:10:24.018109 192.168.1.1 > 192.168.2.1: icmp: echo reply
16:10:25.018814 192.168.1.1 > 192.168.2.1: icmp: echo request
16:10:25.018847 192.168.1.1 > 192.168.2.1: icmp: echo reply
16:10:26.028896 192.168.1.1 > 192.168.2.1: icmp: echo request
16:10:26.029112 192.168.1.1 > 192.168.2.1: icmp: echo reply
如您所见, ICMP 消息在收发的过程中都没有加密。 如果使用了 -s 参数来运行 tcpdump(1), 甚至可以得到包中的更多信息以及其中的数据。
很明显这是不能接受的。 下一节将讨论如何让两个网络之间的连接更安全, 这件事是通过对通讯实施加密来完成的。
小结:
使用 “pseudo-device gif” 配置两边的内核。
编辑网关 #1 上的 /etc/rc.conf 并将下面的行添加进去 (根据需要改 IP )。
gifconfig_gif0="A.B.C.D W.X.Y.Z"
ifconfig_gif0="inet 192.168.1.1 192.168.2.1 netmask 0xffffffff"
static_routes="vpn"
route_vpn="192.168.2.0 192.168.2.1 netmask 0xffffff00"
在两台机器上编辑防火墙脚本 (/etc/rc.firewall, 或类似的名字) 在其中加入
ipfw add 1 allow ip from any to any via gif0
在网络 #2 的网关机上也对 /etc/rc.conf 做同样的修改, 注意把 IP 地址倒过来。
为了加密连接通讯将用到 IPsec。 IPsec 提供了一种机制, 使得两台主机协商一个加密密钥, 并使用它加密之间的通讯。
在配置时有两个地方需要考虑。
必须有能够让两台主机协商所采用的加密方式的机制。 一旦双方确认了这机制, 则称他们之间建立了 “安全关联”。
必须采用某种机制来指定哪些通讯需要加密。 很明显地, 通常并不需要所有的发出数据都被加密 -- 一般只需要加密在 VPN 上传输的那些数据。 这类决定哪些数据被加密的规则被称为 “安全策略”。
安全关联和安全策略都是由内核来维护的, 并可以通过用户态的程序来修改。 在能够这样做之前, 首先需要配置内核来让它支持 IPsec 和安全载荷封装 (ESP) 协议。 配置下面的内核选项
options IPSEC
options IPSEC_ESP
然后重新编译、 安装最后重新启动新的内核。 在继续进行设置之前, 您需要在两台网关上都进行同样的设置。
在建立安全关联时有两种选择。 一种方法是完全手工地在两台主机之间选择加密算法、 密钥等等, 另一种方法是使用实现了 Internet 密钥交换协议 (IKE) 的服务程序来帮您完成这些任务。
我们推荐后者。 不说别的, 它配置起来要容易得多。
用 setkey(8) 可以编辑和显示安全策略。 打个比方, setkey 之于内核的安全策略表, 就相当于 route(8) 之于内核中的路由表。 setkey 还可以显示当前的安全关联, 这一点和 netstat -r 类似。
FreeBSD 上用于管理安全关联的可供选择的服务程序有很多。 这篇文章将介绍如何使用其中的一种, racoon。 racoon 可以从 FreeBSD ports collection 安装, 它位于 security/ 分类下。 安装方法与其他软件无异。
racoon 需要在两台网关机上都运行。 需要配置 VPN 另一端的 IP, 以及一个密钥 (这个密钥可以任意选择, 但两个网关上的密钥必须一致)。
两端的服务程序将相互通讯, 并确认它们各自的身份 (使用刚刚配置的密钥) 然后服务程序将生成一个新的密钥, 并用它来加密 VPN 上的数据通讯。 它们定期地改变密钥, 因此即使供给者破解了一个密钥 (虽然这在理论上并不十分可行) 他也得不到什么 -- 破解密钥的时候, 已经产生一组新的密钥了。
racoon 的配置保存在 ${PREFIX}/etc/racoon 中。 在那里应该能够找到一个配置文件, 不需要修改太多的设置。 raccon 配置的另一部分, 也就是需要修改的内容, 是 “预先配置的共享密钥”。
默认的 racoon 配置文件应该可以在 ${PREFIX}/etc/racoon/psk.txt 这个文件中找到。 需要强调的是, 这个密钥 并非 用于加密 VPN 连接的密钥, 他们只是密钥管理服务程序用以信任对方的一种凭据。
psk.txt 包含了需要打交道的每一个远程站点。 在本例中一共有两个站点, 每一个 psk.txt 都只有一行 (因为每个 VPN 接入点都只和一个端点连接)。
在网关机 #1 上应该是:
W.X.Y.Z secret
这包括了远程站点的 公网 IP 地址, 空格, 以及提供秘密的字符串。 很明显不应使用 “secret” 作为实际的密钥 -- 通常的口令选择策略在这里也适用。
在网关 #2 上对应的配置是
A.B.C.D secret
也就是说, 对面端的公网 IP 地址, 以及同样的密钥。 psk.txt 的权限必须是 0600 (也就是说, 只有 root 能够读写) 否则 racoon 将不能运行。
两边的机器上都必须执行 racoon。 另外, 还需要增加一些防火墙规则来允许 IKE 通讯通过, 它是通过 UDP 在 ISAKMP (Internet 安全关联密钥管理协议) 端口上运行的协议。 再次强调, 这个规则应该在规则集尽可能早的位置出现。
ipfw add 1 allow udp from A.B.C.D to W.X.Y.Z isakmp
ipfw add 1 allow udp from W.X.Y.Z to A.B.C.D isakmp
一旦 racoon 开始运行, 就可以开始测试让网关进行相互的 ping 了。 此时连接还没有进行加密, 但 racoon 将在两个主机之间建立安全关联 -- 这可能需要一段时间, 对您来说, 具体的现象则是在 ping 命令开始响应之前会有短暂的延迟。
一旦安全关联建立之后, 就可以使用 setkey(8); 来查看它了。 在两边的网关上执行
setkey -D
就可以看到安全关联的相关信息了。
现在只完成了一半的工作。 另一半是设置安全策略。
想要完成一个有判断力的安全策略, 首先要看我们已经完成的步骤。 接下来的讨论针对连接的两端。
您所发出的每一个 IP 包都包括一个包头, 其内容是和这个包有关的描述性数据。 包头包括了包的来源和目的的 IP 地址。 正如我们所了解的那样, 私有 IP 地址, 例如 192.168.x.y 这样的地址范围, 不应该出现在 Internet 的公网上。 于此相反, 他们必须首先封装到别的包中。 包的来源或目的如果是私有 IP 地址, 则必须替换成公网 IP 地址。
因此如果发出的包类似下面这样:

随后它将被封装进另一个包中, 像下面这样:

封装过程是在 gif 设备上完成的。 如上图所示, 包现在有了外部的实际 IP 地址, 而原始的包则被封装到里面作为数据。 这个包将通过 Internet 传递。
很明显地, 我们希望 VPN 之间的通讯是加密的。 用语言来描述大致是:
“如果包从 A.B.C.D 发出且其目的地是 W.X.Y.Z, 则通过必要的安全关联进行加密。”
“如果包来自 W.X.Y.Z 且其目的地是 A.B.C.D, 则通过必要的安全关联进行解密。”
这已经很接近了, 但还不够正确。 如果这么做的话, 所有来自和发到 W.X.Y.Z 的包, 无论是否属于 VPN 通讯都会被加密。 这可能并不是您所希望的, 因此正确的安全策略应该是
“如果包从 A.B.C.D 发出, 且封装了其他的包, 其目的地是 W.X.Y.Z, 则通过必要的安全关联进行加密。”
“如果包来自 W.X.Y.Z, 且封装了其他的包, 其目的地是 A.B.C.D, 则通过必要的安全关联进行解密。”
一个很小, 但却必要的改动。
安全策略也是通过 setkey(8) 设置的。 setkey(8) 提供了一种用于配置策略的语言。 可以直接在 stdin 上输入策略, 或通过 -f 选项来指定一个包含配置命令的文件。
网关 #1 上的配置 (其 IP 地址是 A.B.C.D) 强制将所有到 W.X.Y.Z 的通讯进行加密的配置是:
spdadd A.B.C.D/32 W.X.Y.Z/32 ipencap -P out ipsec esp/tunnel/A.B.C.D-W.X.Y.Z/require;
把这些命令放到一个文件 (例如 /etc/ipsec.conf) 然后执行
# setkey -f /etc/ipsec.conf
spdadd 会告诉 setkey(8) 我们希望把规则加入到安全策略数据库中。 命令的其它部分指定了什么样的包能够匹配这规则。 A.B.C.D/32 和 W.X.Y.Z/32 是用于指定规则能够匹配的网络或主机的 IP 地址和掩码。 本例中, 希望应用到两个主机之间的通讯上。 ipencap 则告诉内核这规则只应被用于封装其他包的那些数据包。 -P out 表示策略是针对发出的包的, 而 ipsec 则表示需要对数据包进行加密。
第二行指定了如何加密。 esp 是将要使用的协议, 而 tunnel 则表示包应该进一步封装进一个 IPsec 包里面。 反复使用 A.B.C.D 和 W.X.Y.Z 用来选择所用的安全关联 而最后的 require 则强制所有匹配这规则的包都被加密。
上面的规则只匹配了发出的包。 接下来需要配置类似的匹配进入包的规则。
spdadd W.X.Y.Z/32 A.B.C.D/32 ipencap -P in ipsec esp/tunnel/W.X.Y.Z-A.B.C.D/require;
请注意本例中 in 代替了 out 并且 IP 地址的顺序也相反。
在另一个网关上 (其公网 IP 地址是 W.X.Y.Z) 也需要类似的规则。
spdadd W.X.Y.Z/32 A.B.C.D/32 ipencap -P out ipsec esp/tunnel/W.X.Y.Z-A.B.C.D/require; spdadd A.B.C.D/32 W.X.Y.Z/32 ipencap -P in ipsec esp/tunnel/A.B.C.D-W.X.Y.Z/require;
最后是添加允许 ESP 和 IPENCAP 包进出的防火墙规则。 这些规则需要在两边分别设置。
ipfw add 1 allow esp from A.B.C.D to W.X.Y.Z
ipfw add 1 allow esp from W.X.Y.Z to A.B.C.D
ipfw add 1 allow ipencap from A.B.C.D to W.X.Y.Z
ipfw add 1 allow ipencap from W.X.Y.Z to A.B.C.D
由于规则的对称性, 因此可以在两台网关上使用同样的规则。
发出的包如下图所示:

当 VPN 数据被远端接到时, 它将首先被解密 (使用 racoon 协商得到的安全关联)。 然后它们将进入 gif 接口, 并在那里展开第二层, 直到只剩下最里层的包, 并将其转发到内网上。
可以通过与之前同样的 ping(8) 命令来测试安全性。 首先登录到 A.B.C.D 网关上并执行:
tcpdump dst host 192.168.2.1
在同一主机上登录另一会话, 执行
ping 192.168.2.1
此时的输出应该是:
XXX tcpdump output
如您看到的, tcpdump(1) 给出的将是 ESP 包。 假如您想查看它们的内容可以使用 -s option 选项, 您将 (显然地) 看到一些乱码, 因为传输过程实施了加密。
祝贺您。 您已经完成了两个远程站点之间的 VPN 的架设工作。
小结
将两边的内核配置加入:
options IPSEC
options IPSEC_ESP
安装 security/racoon。 编辑两台网关上的 ${PREFIX}/etc/racoon/psk.txt 并添加远程主机的 IP 和共享的密钥。 文件的权限应该是 0600。
将下面的设置加入两台主机的 /etc/rc.conf 中:
ipsec_enable="YES"
ipsec_file="/etc/ipsec.conf"
在两个网关上都建立 /etc/ipsec.conf 并添加必要的 spdadd。 在网关 #1 上是:
spdadd A.B.C.D/32 W.X.Y.Z/32 ipencap -P out ipsec esp/tunnel/A.B.C.D-W.X.Y.Z/require; spdadd W.X.Y.Z/32 A.B.C.D/32 ipencap -P in ipsec esp/tunnel/W.X.Y.Z-A.B.C.D/require;
在网关 #2 上则是:
spdadd W.X.Y.Z/32 A.B.C.D/32 ipencap -P out ipsec esp/tunnel/W.X.Y.Z-A.B.C.D/require; spdadd A.B.C.D/32 W.X.Y.Z/32 ipencap -P in ipsec esp/tunnel/A.B.C.D-W.X.Y.Z/require;
添加防火墙规则以允许 IKE, ESP, 和 IPENCAP 通讯能够到达各自的主机:
ipfw add 1 allow udp from A.B.C.D to W.X.Y.Z isakmp
ipfw add 1 allow udp from W.X.Y.Z to A.B.C.D isakmp
ipfw add 1 allow esp from A.B.C.D to W.X.Y.Z
ipfw add 1 allow esp from W.X.Y.Z to A.B.C.D
ipfw add 1 allow ipencap from A.B.C.D to W.X.Y.Z
ipfw add 1 allow ipencap from W.X.Y.Z to A.B.C.D
前面的两步应该足以让 VPN 运转起来了。 两个网络上的机器都应该能通过 IP 来访问对方, 而所有的通讯都被自动地进行加密。
OpenSSH 是一组用于安全地访问远程计算机的连接工具。 它可以作为 rlogin、 rsh rcp 以及 telnet 的直接替代品使用。 更进一步, 其他任何 TCP/IP 连接都可以通过 SSH 安全地进行隧道/转发。 OpenSSH 对所有的传输进行加密, 从而有效地阻止了窃听、 连接劫持, 以及其他网络级的攻击。
OpenSSH 由 OpenBSD project 维护, 它基于 SSH v1.2.12 并包含了最新的错误修复和更新。 它同时兼容 SSH 协议的 1 和 2 两个版本。 从 FreeBSD 4.0 开始, OpenSSH 成为了基本系统的一部分。
通常,当使用 telnet(1) 或 rlogin(1) 时, 数据是以明码的形式发送的,并没有加密。 在客户机和服务器之间的网络上运行的听包程序可以在会话中偷窃到传输的用户名/密码和数据。 OpenSSH 提供了多种的身份验证和加密方法来防止这种情况的发生。
确信已将下面这行加入了 rc.conf 文件:
sshd_enable="YES"
将在下次启动系统时加载 OpenSSH 的 sshd(8) 服务程序。 另外, 也可以简单地使用 sshd 来直接启动 sshd 服务。
ssh(1) 的工作方式和 rlogin(1) 非常类似。
# ssh user@example.com Host key not found from the list of known hosts. Are you sure you want to continue connecting (yes/no)? yes Host 'example.com' added to the list of known hosts. user@example.com's password: *******
登录过程和使用 rlogin 或 telnet 建立的会话非常类似。 在连接时, SSH 会利用一个密钥指纹系统来验证服务器的真实性。 只有在第一次连接时, 用户会被要求输入 yes。 之后的连接将会验证预先保存下来的密钥指纹。 如果保存的指纹与登录时接收到的不符, 则将会给出警告。 指纹保存在 ~/.ssh/known_hosts 中, 对于 SSH v2 指纹, 则是 ~/.ssh/known_hosts2。
默认情况下, OpenSSH 服务器只接受 SSH v2 连接。 然而, 客户端可以自行选择协议的版本 1 和 2 之一。 广为人知的一个事实是, 第 2 版的协议要更加健壮和安全。
通过 -1 或 -2 参数, 可以强制 ssh(1) 使用 v1 或 v2 的协议。
scp(1) 命令和 rcp(1); 的用法类似, 它用于将文件复制到远程的机器上, 或复制过来, 区别是它是安全的。
# scp user@example.com:/COPYRIGHT COPYRIGHT user@example.com's password: ******* COPYRIGHT 100% |*****************************| 4735 00:00 #
由于先前的例子中已经保存了指纹, 使用 scp(1) 时会自动地加以验证。
scp(1) 使用的参数同 cp(1) 类似。 第一个参数是一个或一组文件, 然后是复制的目标。 由于文件是通过 SSH 在网上传递的, 因此某些文件的名字需要写成 用户名@主机名:<远程文件路径>。
针对 OpenSSH 服务程序和客户端的系统级配置文件在 /etc/ssh 目录中。
ssh_config 用于配置客户端的设定, 而 sshd_config 则用于配置服务器端。
另外 sshd_program (默认是 /usr/sbin/sshd), 以及 sshd_flags 这两个 rc.conf 选项提供了更多的配置选择。
ssh-keygen(1) 可以被用来生成 RSA 密钥对来代替使用口令验证用户的身份:
% ssh-keygen -t rsa1 Initializing random number generator... Generating p: .++ (distance 66) Generating q: ..............................++ (distance 498) Computing the keys... Key generation complete. Enter file in which to save the key (/home/user/.ssh/identity): Enter passphrase: Enter the same passphrase again: Your identification has been saved in /home/user/.ssh/identity. ...
ssh-keygen(1) 将产生一个公私密钥对来用于验证身份。 私钥被保存到 ~/.ssh/identity, 而公钥则保存到 ~/.ssh/identity.pub。 远程机器上的 ~/.ssh/authorized_keys 中必须有对应的公钥, 才能够完成身份验证过程。
这将允许从远程以基于 RSA 的验证来代替口令验证连接到本机上。
Note: 使用 -t rsa1 这个选项将创建用于 第1版 SSH 协议的 RSA 密钥对。 如果您希望使用用于 SSH 第2版协议的 RSA密钥对, 则应使用 ssh-keygen -t rsa 这个命令。
如果在 ssh-keygen(1) 中使用了通行字, 则每次使用私钥时都需要输入它。
另外, 还可以使用 ssh-keygen -t dsa 来创建一个用于第2版 SSH 协议的 DSA 密钥。 这将生成一对 DSA 公/私钥, 并且只能用于第2版的 SSH 协议会话。 公钥将保存为 ~/.ssh/id_dsa.pub, 而私钥保存为 ~/.ssh/id_dsa。
DSA 公钥也应该放到远程主机的 ~/.ssh/authorized_keys 里面。
ssh-agent(1) 和 ssh-add(1) 是用于管理多个受密码保护的私钥的工具。
Warning随版本的不同, OpenSSH 可能会使用不同的文件和选项。 为了避免出现问题, 请参考 ssh-keygen(1) 联机手册。
OpenSSH 能够创建隧道以便用加密的会话来封装其他协议。
下面的命令告诉 ssh(1) 为 telnet 创建一个隧道:
% ssh -2 -N -f -L 5023:localhost:23 user@foo.example.com %
上述 ssh 命令使用了下面这些选项:
强制 ssh 使用第2版的协议 (如果需要和较老的 SSH 一同工作请不要使用这个选项)。
表示不使用命令行, 或者说只使用隧道。 如果省略, ssh 将同时初始化会话。
强制 ssh 在后台执行。
表示产生一条 本地端口:远程主机:远程端口 形式的隧道。
远程 SSH 服务器。
SSH 隧道通过监听 localhost 上面指定端口来完成工作。 它将把本机主机/端口上接收到的连接通过 SSH 连接转发到远程主机/端口。
本例中, 位于 localhost 的 5023 端口 被用于转发 localhost 的连接到远程主机的 23 端口。 由于 23 是 telnet 使用的, 因此它将通过 SSH 隧道完成 telnet 会话。
这可以用来封装任意不安全的 TCP 协议, 例如 SMTP、 POP3、 FTP等等。
Example 14-1. 使用 SSH 为 SMTP 创建安全隧道
% ssh -2 -N -f -L 5025:localhost:25 user@mailserver.example.com user@mailserver.example.com's password: ***** % telnet localhost 5025 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 mailserver.example.com ESMTP
这可以与 ssh-keygen(1) 以及额外的用户帐号配合来建立一个更透明的 SSH 隧道环境。 密钥可以被用在需要输入口令的地方, 而且可以为不同的用户配置不同的隧道。
工作时, 有一个允许外来连接的 SSH 服务器。 同一个办公网络中有一个邮件服务器提供 POP3 服务。 这个网络, 或从您家到办公室的网络可能不, 或不完全可信。 基于这样的原因, 您需要以安全的方式来察看邮件。 解决方法是创建一个到办公室 SSH 服务器的连接, 并通过这个连接来访问 POP3 服务:
% ssh -2 -N -f -L 2110:mail.example.com:110 user@ssh-server.example.com user@ssh-server.example.com's password: ******
当这个通道连上时, 您可以把 POP3 请求发到 localhost 端口 2110。 这个连接将通过通道安全地转发到 mail.example.com。
一些大脑长包的网络管理员会使用一些极端的防火墙策略, 不仅过滤进入的连接, 而且也过滤连出的连接。 一些时候您可能只能连接远程机器 22 端口,以及 80 端口用来进行 SSH 和网页浏览。
您可能希望访问一些其它的 (也许与工作无关的) 服务, 例如提供音乐的 Ogg Vorbis 流媒体服务器。 如果 Ogg Vorbis server 在 22 或 80 端口以外的端口播放音乐, 则您将无法访问它。
解决方法是建立一个到您的网络的防火墙之外的网络上的 SSH 服务器, 并通过它提供的通道连接到 Ogg Vorbis 服务器上。
% ssh -2 -N -f -L 8888:music.example.com:8000 user@unfirewalled-system.example.org user@unfirewalled-system.example.org's password: *******
现在您可以把客户程序指定到 localhost 的 8888 端口, 它将把请求转发给 music.example.com 的 8000 端口, 从而绕过防火墙。
与文件系统在其他方面的加强, 如快照等一道, FreeBSD 5.0 及更高版本提供了通过文件系统访问控制表 (ACLs) 实现的安全机制。
访问控制表以高度兼容 (POSIX.1e) 的方式扩展了标准的 UNIX 权限模型。 这一特性使得管理员能够利用其优势设计更为复杂的安全模型。
如果想为 UFS 文件系统启用 ACL 支持, 则需要添加下列选项:
options UFS_ACL
并重新编译内核。 如果这个选项没有编译进内核, 则在挂接支持 ACL 的文件系统时将会收到警告。 这个选项在 GENERIC 内核中已经包含了。 ACL 依赖于在文件系统上启用扩展属性。 在新一代的 UNIX file system, UFS2 中内建了这种支持。
Note: 在 UFS1 上配置扩展属性需要比 UFS2 更多的管理开销。 而且, 在 UFS2 上的扩展属性的性能也有极大的提高。 因此, 如果想要使用访问控制表, 推荐使用 UFS2 而不是 UFS1。
ACL 可以在挂接时通过选项 acls 来启动, 它可以加入 /etc/fstab。 另外, 也可以通过使用 tunefs(8) 修改超级块中的 ACL 标记来持久性地设置自动的挂接属性。 一般而言, 后一种方法是推荐的做法, 其原因是:
挂接时的 ACL 标记无法被重挂接 (mount(8) -u) 改变, 只有完整地 umount(8) 并做一次新的 mount(8) 才能改变它。 这意味着 ACLs 状态在系统启动之后就不可能在 root 文件系统上发生变化了。 另外也没有办法改变正在使用的文件系统的这个状态。
在超级块中的设置将使得文件系统总被以启用 ACLs 的方式挂接, 即使在 fstab 中的对应项目没有作设置, 或设备顺序发生变化时也是如此。 这避免了不慎将文件系统以没有启用 ACLs 的状态挂接, 从而避免没有强制 ACLs 这样的安全问题。
Note: 可以修改 ACL 行为, 以允许在没有执行一次全新的 mount(8) 的情况下启用它, 但我们认为不鼓励在不启用 ACL 的时候这么做是有必要的, 因为如果启用了 ACL, 然后关掉它, 然后在没有刷新扩展属性的情况下重新启用它是很容易造成问题的。 一般而言, 一旦启用了文件系统的 ACLs 就不应该再关掉它, 因为此时的文件系统的保护措施可能和用户所期待的样子不再兼容, 而重新启用 ACL 将重新把先前的 ACL 附着到文件上, 而由于它们的权限发生了变化, 就很可能造成无法预期的行为。
在察看目录时, 启用了 ACLs 的文件将在通常的属性后面显示 + (加号)。 例如:
drwx------ 2 robert robert 512 Dec 27 11:54 private drwxrwx---+ 2 robert robert 512 Dec 23 10:57 directory1 drwxrwx---+ 2 robert robert 512 Dec 22 10:20 directory2 drwxrwx---+ 2 robert robert 512 Dec 27 11:57 directory3 drwxr-xr-x 2 robert robert 512 Nov 10 11:54 public_html
这里我们看到了 directory1, directory2, 以及 directory3 目录使用了 ACLs。 而 public_html 则没有。
文件系统 ACL 可以使用 getfacl(1) 工具来查看。 例如, 如果想查看 test 的 ACL 设置, 所用的命令是:
% getfacl test
#file:
#owner:1001
#group:1001
user::rw-
group::r--
other::r--
要修改这个文件上的 ACL 设置, 则需要使用 setfacl(1) 工具。 例如:
% setfacl -k test
-k 参数将把所有当前定义的 ACL 从文件或文件系统中删除。 一般来说应该使用 -b 因为它会保持让 ACL 正常工作的那些项不变。
% setfacl -m u:trhodes:rwx,group:web:r--,o::--- test
在前面的命令中, -m 选项被用来修改默认的 ACL 项。由于已经被先前的命令 删除,因此没有预先定义的项,于是默认的选项被恢复,并附加上指定的选项。 请小心地检查,如果您加入了一个不存在的用户或组,那么将会在 stdout 得到一条 “Invalid argument” 的错误提示。
过去几年中, 安全领域在如何处理漏洞的评估方面取得了长足的进步。 几乎每一个操作系统都越来越多地安装和配置了第三方工具, 而系统被入侵的威胁也随之增加。
漏洞的评估是安全的一个关键因素, 尽管 FreeBSD 会发布基本系统的安全公告, 然而为每一个第三方工具都发布安全公告则超出了 FreeBSD Project 的能力。 在这一前提下, 一种减轻第三方漏洞的威胁, 并警告管理员存在已知的安全问题的方法也就应运而生。 名为 Portaudit 的 FreeBSD 附加工具能够帮助您达成这一目的。
security/portaudit port 会下载一个数据库, 这一数据库是由 FreeBSD Security Team 和 ports 开发人员维护的, 其中包含了已知的安全问题。
要开始使用 Portaudit, 需要首先从 Ports Collection 安装它:
# cd /usr/ports/security/portaudit && make install clean
在安装过程中, periodic(8) 的配置文件将被修改, 以便让 Portaudit 能够在每天的安全审计过程中运行。 不需要进行更多的配置了。
安装完成之后, 管理员必须通过运行下面的命令, 来更新保存在本地 /var/db/portaudit 的数据库:
# portaudit -F
Note: 由于每天执行 periodic(8) 时都会自动更新数据库, 因此, 运行这条命令是可选的。 在这里只是作为例子给出。
管理员可以使用下面的命令审计通过 Ports Collection 安装的第三方工具:
# portaudit -a
下面是一个示范的输出:
Affected package: cups-base-1.1.22.0_1 Type of problem: cups-base -- HPGL buffer overflow vulnerability. Reference: <http://www.FreeBSD.org/ports/portaudit/40a3bca2-6809-11d9-a9e7-0001020eed82.html> 1 problem(s) in your installed packages found. You are advised to update or deinstall the affected package(s) immediately.
通过访问上面给出的 URL, 管理员能够了解关于那个漏洞的进一步信息。 这些信息通常包括受到影响的 FreeBSD Port 版本, 以及其他可能包含安全公告的网站。
简而言之, Portaudit 是一个强大的工具, 并能够配合 Portupgrade port 来非常有效地工作。
像其它具有产品级品质的操作系统一样, FreeBSD 会发布 “安全公告”。 通常这类公告会只有在在相应的发行版本已经正确地打过补丁之后发到安全邮件列表并在勘误中说明。 本节将介绍什么是安全公告, 如何理解它, 以及为系统打补丁的具体步骤。
FreeBSD 安全公告的样式类似下面的范例, 这一例子来自 freebsd-security-notifications 邮件列表。
=============================================================================
FreeBSD-SA-XX:XX.UTIL Security Advisory
The FreeBSD Project
Topic: denial of service due to some problem
Category: core
Module: sys
Announced: 2003-09-23
Credits: Person@EMAIL-ADDRESS
Affects: All releases of FreeBSD
FreeBSD 4-STABLE prior to the correction date
Corrected: 2003-09-23 16:42:59 UTC (RELENG_4, 4.9-PRERELEASE)
2003-09-23 20:08:42 UTC (RELENG_5_1, 5.1-RELEASE-p6)
2003-09-23 20:07:06 UTC (RELENG_5_0, 5.0-RELEASE-p15)
2003-09-23 16:44:58 UTC (RELENG_4_8, 4.8-RELEASE-p8)
2003-09-23 16:47:34 UTC (RELENG_4_7, 4.7-RELEASE-p18)
2003-09-23 16:49:46 UTC (RELENG_4_6, 4.6-RELEASE-p21)
2003-09-23 16:51:24 UTC (RELENG_4_5, 4.5-RELEASE-p33)
2003-09-23 16:52:45 UTC (RELENG_4_4, 4.4-RELEASE-p43)
2003-09-23 16:54:39 UTC (RELENG_4_3, 4.3-RELEASE-p39)
FreeBSD only: NO
For general information regarding FreeBSD Security Advisories,
including descriptions of the fields above, security branches, and the
following sections, please visit
http://www.FreeBSD.org/security/.
I. Background
II. Problem Description
III. Impact(11)
IV. Workaround(12)
V. Solution(13)
VI. Correction details(14)
VII. References(15)










进程记帐是一种管理员可以使用的跟踪系统资源使用情况的手段, 包括它们分配给了哪些用户、 提供系统监视手段, 并且可以精细到用户执行的每一个命令。
当然, 这种做法是兼有利弊的。 它的好处是, 查找入侵时可以迅速把范围缩小到攻击者进入的时刻; 而这样做的缺点, 则是记帐会产生大量的日志, 因而需要很多磁盘空间来存储它们。 这一节将带领管理员一步一步地配置基本的进程记帐。
在使用进程记帐之前, 管理员必须启用它。 要完成这项工作, 需要运行下面的命令:
# touch /var/account/acct # accton /var/account/acct # echo 'accounting_enable="YES"' >> /etc/rc.conf
一旦启用之后, 记帐就会开始跟踪 CPU 统计数据、 命令, 等等。 所有的记帐日志不是以可读的方式记录的, 要查看它们, 需要使用 sa(8) 这个工具。 如果没有给出其他参数, 则 sa 将按用户, 以分钟为单位显示他们所使用的时间、 总共的 CPU 和用户时间, 以及平均的 I/O 操作数目, 等等。
要显示关于刚刚发出的命令的相关信息, 则应使用 lastcomm(1) 工具。 lastcomm 可以用来显示在某一 ttys(5) 上的用户信息, 例如:
# lastcomm ls
trhodes ttyp1
将会显示出所有已知的 trhodes 在 ttyp1 终端上执行 ls 的情况。
更多的可用选项在联机手册 lastcomm(1)、 acct(5) 和 sa(8) 中有所介绍。
这章介绍了 FreeBSD 中磁盘的使用方法。包括内存盘, 网络附属磁盘和标准的 SCSI/IDE 存储设备,以及使用 USB 的设备。
读完这章,您将了解到:
FreeBSD 中用来描述硬盘上数据组织的术语 (partitions and slices)。
如何在您的系统上增加硬盘。
如何配置 FreeBSD 来使用 USB 存储设备。
如何设置虚拟文件系统,例如内存磁盘。
如何使用配额来限制磁盘空间的使用。
如何增加磁盘安全来预防功击。
如何刻录 CD 和 DVD 。
用于备份的多种存储媒介。
如何在 FreeBSD 上使用备份程序。
如何备份到软磁盘。
文件系统快照是什么, 以及如何有效地使用它们。
在读这章之前,您应该:
知道怎样去配置和安装新的 FreeBSD 内核 (第 8 章).
下面是在 FreeBSD 上被支持的物理存储设备和它们被分配的设备名。
Table 16-1. 物理磁盘命名规则
| 驱动器类型 | 驱动设备命名 |
|---|---|
| IDE hard drives | ad |
| IDE CDROM drives | acd |
| SCSI hard drives and USB Mass storage devices | da |
| SCSI CDROM drives | cd |
| Assorted non-standard CDROM drives | mcd for Mitsumi CD-ROM, scd for Sony CD-ROM, matcd for Matsushita/Panasonic CD-ROM [a] |
| Floppy drives | fd |
| SCSI tape drives | sa |
| IDE tape drives | ast |
| Flash drives | fla for DiskOnChip® Flash device |
| RAID drives | aacd for Adaptec AdvancedRAID, mlxd and mlyd for Mylex, amrd for AMI MegaRAID, idad for Compaq Smart RAID, twed for 3ware® RAID. |
| Notes: a. matcd(4) 驱动已经在 2002 年 10 月 5 日从 FreeBSD 4.X 分支删去, FreeBSD 5.0 和之后的版本不再包含此驱动。 |
|
假设我们要给一台只有一个磁盘的机器增加一个新的 SCSI 磁盘。首先 需要关掉计算机,然后按操作规程来安装驱动器,控制器和驱动程序。由于 各厂家生产的产品各不相同,具体的安装细节不在此文档介绍之内。
以 root 用户登录。安装完驱动后,检查一下 /var/run/dmesg.boot 有没有找到新的磁盘。在我们 的例子中新增加的磁盘就是 da1,我们从 /1 挂上它。 (如果您正添加一个 IDE 驱动器,在 4.0 版以前的系统里是 wd1,以后的版本的系 统里是 ad1 )。
因为 FreeBSD 运行在 IBM-PC 兼容机上,它必须遵循 PC BIOS 分区 规范。这与传统的 BSD 分区是不同的。一个 PC 的磁盘最高只能有四个 BIOS 主分区。如果磁盘只安装 FreeBSD 您可以使用 dedicated 模式。另外, FreeBSD 必须安装在 PC BIOS 支持的分区内。FreeBSD 把分区叫作 slices 这可能会把人搞糊涂。您也可以在只安装 FreeBSD 的磁盘上使用 slices,也可以在安装有其它操作系统的磁盘上使用 slices。这不会影响其它操作系统的 fdisk 分区工具。
在 slice 方式表示下,驱动器被添加到 /dev/da1s1e。 可以读作:SCSI 磁盘,编号为 1 (第二个SCSI 磁盘), slice 1 (PC BIOS 分区 1), 的 BSD 分区 e 。在有些例子中,也可以简化为 /dev/da1e。
由于 bsdlabel(8) (在 FreeBSD 4.X 中叫做 disklabel(8)) 使用 32-位 的整数来表示扇区号, 因此在多数情况下它的表现力限于每个磁盘 2^32-1 个扇区或 2TB。 fdisk(8) 格式允许的起始扇区号不能高于 2^32-1 而分区长度也不能大于 2^32-1, 通常情况下这限制了分区大小最大为 2TB 而磁盘大小则是 4TB。 sunlabel(8) 格式的限制是每个分区 2^32-1 个扇区, 但允许 8 个分区因此最大支持 16TB 的磁盘。 要使用更大的分区, 则应使用 gpt(8)。
使用 Sysinstall
您可以使用 sysinstall 命令 (在 FreeBSD 5.2 之前是 /stand/sysinstall), 选择它的使用菜单来分区和标记一个新的磁盘。需要有 root 权限, 或者直接使用 root 账户登录或者使用 su 命令来切换到根用户。运行 sysinstall ,然后选择 Configure 菜单。在 FreeBSD Configuration Menu 下,上下滚动, 选择 Fdisk 条目。
fdisk 分区编辑器
进入 fdisk 分区编辑器后,选择 A ,FreeBSD 将使用全部的磁盘。当被告知 “remain cooperative with any future possible operating systems”时,回答 YES。使用 W 保存刚才的修改。现在使用 q 退出 FDISK 编辑器。下面会看到有关 “主引导区” 的信息。 现在您已经在运行的系统上添加了一个磁盘, 因此应该选择 None。
Disk Label 编辑器
接下来,您应该退出 sysinstall 并且再次启动它,并按照上面的步骤直接进入 Label 选项。进入 磁盘标签编辑器。 这就是您要创建的 BSD 分区。一个磁盘最多可以有 8 个分区,标记为 a-h。有几个分区标签有特殊的用途。 a 分区被用来作为根分区(/)。 系统磁盘(例如:从那儿启动的分区)必须有一个 a 分区。b 分区被用作交换分区,可以用很多磁盘用作交 换分区。 c 分区代表整个硬盘,或在 FreeBSD slice 模式下代表整个 slice。其它分区作为一般分区来使用。
sysinstall 的标签编辑器用 e 表示非 root 和非 swap 分区。在标签编辑器中,可以使用键入C 创建一个文件系统。当提示这是否是一个 FS(文件系统)或 swap 时,选择 FS,然后给出一个加载点(如: /mnt)。 当在 post-install 模式时添加一个磁盘, sysinstall 不会在 /etc/fstab 中创建记录,所以是否指定加载点并不重要。
现在已经准备把新标签写到磁盘上,然后创建一个文件系统,可以按下 W。出现任何错误都会不能创建新的分区。可以退出标签编辑 器然后重新执行 sysinstall 。
完成
下面一步就是编辑 /etc/fstab,为您的磁盘添加一个新 记录。
这步安装将允许磁盘与可能安装在您计算机上的其它操作系统一起 正确工作,而不会搞乱其它操作系统的分区。推荐使用这种方法来安装 新磁盘,除非您有更好的理由再使用 dedicated 模式!
# dd if=/dev/zero of=/dev/da1 bs=1k count=1 # fdisk -BI da1 #初始化新磁盘 # disklabel -B -w -r da1s1 auto #加上标签 # disklabel -e da1s1 # 现在编辑您刚才创建的磁盘分区 # mkdir -p /1 # newfs /dev/da1s1e # 为您创建的每个分区重复这个操作 # mount /dev/da1s1e /1 # 挂上分区 # vi /etc/fstab # 完成之后,添加合适的记录到您的 /etc/fstab文件。
如果有一个 IDE 磁盘,记得要用 ad 来替换 da,4.X 以前的系统要用 wd。
如果您并没有安装其它的操作系统,可以使用 dedicated 模式。记住这种模式可能会弄乱 Microsoft 的操作系统,但不会对它进行破坏。 它不识别找到的 IBM OS/2 的 “appropriate” 分区。
# dd if=/dev/zero of=/dev/da1 bs=1k count=1 # disklabel -Brw da1 auto # disklabel -e da1 # 创建 `e' 分区 # newfs -d0 /dev/da1e # mkdir -p /1 # vi /etc/fstab # 为 /dev/da1e添加一个记录 # mount /1
另一种方法:
# dd if=/dev/zero of=/dev/da1 count=2 # disklabel /dev/da1 | disklabel -BrR da1 /dev/stdin # newfs /dev/da1e # mkdir -p /1 # vi /etc/fstab # 为 /dev/da1e添加一个记录 # mount /1
Note: 从 FreeBSD 5.1-RELEASE 版本开始, bsdlabel(8) 程序代替了 老版本的 disklabel(8) 程序。bsdlabel(8) 中大量过时的选项 和参数也被取消。在上面的例子中选项 -r 可以使用 bsdlabel(8)程序来删除。更多的信息,请参考 bsdlabel(8) 手册页。
选择一个大容量存储比较好的解决方案,最重要的因素是产品的速度、 性能和成本。通常这三者不可能都满足;要获得比较快和可靠的大容量存储 设备,就比较昂贵。但如果将成本降下来,那它的速度或可靠性就会打折扣。
在设计下面描述的系统时,价格被选为最重要的因素,接下来是速度 和性能。这人系统的数据传输速度及大的取决于网络。性能也非常重要, CCD 驱动器上的所有数据都被备份到了 CD-R 盘,可以很容易的对数据进行恢复。
在选择一个大容量的存储解决方案时,第一步是要设计您自己的需求。 如果您的需求更偏重于速度和性能,那么您的解决方案将就不同于上面的设计。
除了 IDE 系统磁盘外,还有三个 Western Digital 30GB、5400 RPM 的 IDE 磁盘构成了大约 90G 的连接磁盘驱动存储空间。最好是每个 IDE 硬盘 都使用一个自己的 IDE 控制器和数据线,为了降低成本,没有使用更多的 IDE 控制器,取而代之配置跳线使每个 IDE 控制器都拥有一个主盘和一个 从盘。
重启动后,系统 BIOS 被配置成自动检测硬盘。FreeBSD 检测到它们:
ad0: 19574MB <WDC WD205BA> [39770/16/63] at ata0-master UDMA33 ad1: 29333MB <WDC WD307AA> [59598/16/63] at ata0-slave UDMA33 ad2: 29333MB <WDC WD307AA> [59598/16/63] at ata1-master UDMA33 ad3: 29333MB <WDC WD307AA> [59598/16/63] at ata1-slave UDMA33
Note: 如果 FreeBSD 没有检测到它们,请确定它们的跳线是否设置 正确。大多数 IDE 磁盘有一个 “Cable Select” 跳线。这个 不是 设置 master/slave 硬盘的跳线。查阅文档 信息来确定正确的跳线设置。
接下来考虑的是,如何创建文件系统。应该好好研究一下 vinum(8) (第 17 章)和 ccd(4) 两种方式,在这里我们选择 ccd(4)
ccd(4) 允许用户将几个相同的的磁盘通过一个逻辑文件系统 连接起来。要使用 ccd(4),您需要在内核中配置 ccd(4) 支持选项。把这行加入到内核配置文件中,然后重建内核:
pseudo-device ccd 4
在 5.X 和以后的版本中,您必须使用下面的行来代替:
device ccd
Note: 在 FreeBSD 5.X 里,不必指定一系统的 ccd(4) 设备, ccd(4) 设备将自动按需要创建新的 -- 设备。
ccd(4) 在FreeBSD 3.0 或以后的版本中也可以作为一个内核模块 来加载
要安装 ccd(4), 首先需要使用 disklabel(8) 来编辑硬盘:
disklabel -r -w ad1 auto disklabel -r -w ad2 auto disklabel -r -w ad3 auto
这儿把整个硬盘创建成 ad1c, ad2c 和 ad3c 。
Note: 从 FreeBSD 5.1-RELEASE 开始, bsdlabel(8) 程序代替 了老版本的 disklabel(8) 程序。bsdlabel(8) 中大量过时的选项 和参数也被取消; 在上面的例子中,选项 -r 应该被删掉。 更的信息可以参考 bsdlabel(8) 手册。
下一步是改变 disklable 的类型。也可以使用 disklabel(8) 来编辑:
disklabel -e ad1 disklabel -e ad2 disklabel -e ad3
这儿在每个已经设置了 EDITOR 环境变量的磁盘上打开了 disklable,在我我例子中使用的是 vi(1)。
可以看到:
8 partitions: # size offset fstype [fsize bsize bps/cpg] c: 60074784 0 unused 0 0 0 # (Cyl. 0 - 59597)
添加一个新的 e 分区给 ccd(4) 用。这可以是 c 分区的一个拷贝,但 fstype 必须 是 4.2BSD。做完之后,您会看到一面这些:
8 partitions: # size offset fstype [fsize bsize bps/cpg] c: 60074784 0 unused 0 0 0 # (Cyl. 0 - 59597) e: 60074784 0 4.2BSD 0 0 0 # (Cyl. 0 - 59597)
ccd0c 的设备节点可能不存在,所以要 创建它,执行下面的命令:
cd /dev sh MAKEDEV ccd0
Note: 在 FreeBSD 5.0 中,devfs(5) 将自动管理在 /dev, 里的设备结点,所以没有必要使用 MAKEDEV 命令。
现在已给每个磁盘都加上了标签,下面需要建立 ccd(4)。要这样做, 需要使用 ccdconfig(8) 工具,同时要提供类似下面的选项:
ccdconfig ccd032
0
/dev/ad1e
/dev/ad2e /dev/ad3e
每个选项的意义和用法如下所示:
运行 ccdconfig(8) 后 ccd(4) 就配置好了。现在要创建文件 系统了,参考 newfs(8) 选项,执行下同的命令:
newfs /dev/ccd0c
最后,要挂上 ccd(4) ,需要先配置它。把当前的配置文件写入 /etc/ccd.conf 中,使用下面的命令:
ccdconfig -g > /etc/ccd.conf
当重新启动系统时,如果 /etc/ccd.conf 存在, 脚本 /etc/rc 就运行 ccdconfig -C。 这样就能自动配置 ccd(4) 以到它能被挂上。
Note: 如果启动进入了单用户模式,在 mount(8) 上 ccd(4) 之前,需要执行下面的命令来配置队列:
ccdconfig -C
要自动挂接 ccd(4),需要为 ccd(4) 在 /etc/fstab 中配置一个记录,以便在启动时它能被挂上。 如下所示:
/dev/ccd0c /media ufs rw 2 2
Vinum 卷管理是一个实现虚拟磁盘的块驱动设备工具。它使磁盘从 块设备的接口和数据映射中独立出来。与传统的存储设备相比,增加了 灵活性、性能和可靠性。 vinum(8) 实现了 RAID-0、RAID-1 和 RAID-5 三种模式,它们即可以独立使用,也可组合使用。
参考 第 17 章 得到更多 vinum(8) 的信息。
FreeBSD 支持很多硬件 RAID 控制器。 这些硬件不需要 FreeBSD 指定软件来管理 RAID 系统。
使用 BIOS 支持的硬件,一般情况下这些硬件可以自行操作。 下面是一个简明的描述设置一个 Promise IDE RAID 控制器。 当硬件设备装好且系统重启后,屏幕上显示一个询问信息。接着进入硬件设置屏幕。在这里, 您可以把所有的磁盘联合在一起使用。这样 FreeBSD 将磁盘看作一个驱动器。其它 级别的 RAID 也可以相应的进行设置。
FreeBSD 允许您热插拔阵列中损坏的磁盘。 在您重新启动系统之前请注意这一点。
您可能会在 /var/log/messages 或者在 dmesg(8) 的输出中看到类似下面这些的内容:
ad6 on monster1 suffered a hard error. ad6: READ command timeout tag=0 serv=0 - resetting ad6: trying fallback to PIO mode ata3: resetting devices .. done ad6: hard error reading fsbn 1116119 of 0-7 (ad6 bn 1116119; cn 1107 tn 4 sn 11)\\ status=59 error=40 ar0: WARNING - mirror lost
使用 atacontrol(8),查看更多的信息:
# atacontrol list
ATA channel 0:
Master: no device present
Slave: acd0 <HL-DT-ST CD-ROM GCR-8520B/1.00> ATA/ATAPI rev 0
ATA channel 1:
Master: no device present
Slave: no device present
ATA channel 2:
Master: ad4 <MAXTOR 6L080J4/A93.0500> ATA/ATAPI rev 5
Slave: no device present
ATA channel 3:
Master: ad6 <MAXTOR 6L080J4/A93.0500> ATA/ATAPI rev 5
Slave: no device present
# atacontrol status ar0
ar0: ATA RAID1 subdisks: ad4 ad6 status: DEGRADED
您首先需要将磁盘从阵列中移除以便您可以 安全的拆除它:
# atacontrol detach 3
换上磁盘
把磁盘作为备用磁盘安装:
# atacontrol attach 3 Master: ad6 <MAXTOR 6L080J4/A93.0500> ATA/ATAPI rev 5 Slave: no device present
重建阵列:
# atacontrol rebuild ar0
rebuild 命令挂起直到完成。然而,可以打开另一个终端 (使用 Alt+Fn) 通过下面的命令来检查进程:
# dmesg | tail -10 [output removed] ad6: removed from configuration ad6: deleted from ar0 disk1 ad6: inserted into ar0 disk1 as spare # atacontrol status ar0 ar0: ATA RAID1 subdisks: ad4 ad6 status: REBUILDING 0% completed
等待操作完成。
到目前为止,有许多外部外部存储解决方案, 例如:通用串行总线 (USB):硬盘、USB thumbdrives、CD-R burners 等等。 FreeBSD 为这些设备提供了支持。
USB 大容量存储设备驱动,在 umass(4), 中提供了对 USB 存储设备的支持。如果您使用 GENERIC 内核,您不必要改变配置文件里的任何内容。 如果您使用了定制的内核,就要确定下面的行出现在您的内核配置文件里:
device scbus device da device pass device uhci device ohci device usb device umass
umass(4) 驱动程序使用 SCSI 子系统来访问 USB 存储设备, 您的 USB 设备将被系统看成为一个 SCSI 设备。依靠您主板上的 USB 芯片, 您只须选择 device uhci 或 device ohci 二者之一即可, 但是两者都加入内核配置文件当中也没有坏外。 不要忘了如果您加入了上面的几行要重新编译和安装内核。
Note: 如果您的 USB 设备是一个 CD-R 或 DVD 刻录机, SCSI CD-ROM 驱动程序, cd(4), 就必须加入内核中通过下面这行:
device cd因为刻录机被看作一个 SCSI 设备drive, 驱动程序 atapicam(4) 不应该在内核配置文件中使用。
在FreeBSD 5.X,中提供了对 USB 2.0 控制器的支持, 在 4.X 分支从 FreeBSD 4.10-RELEASE 后,您应该加入:
device ehci
到您的配置文件以提供对 USB 2.0 的支持。注意 uhci(4) 和 ohci(4) 驱动程序仍然需要,如果您想提供对 USB 1.X 的支持。
Note: 在 FreeBSD 4.X 上, USB daemon (usbd(8)) 必须能够 检测到正在运行的一些 USB 设备。为了启用它, 添加 usbd_enable="YES" 到您的 /etc/rc.conf 文件里,然后重新启动 计算机。
配置好后准备进行测试:插入您的 USB 设备, 在系统信息中 (dmesg(8)), 应该会出现像下面的设备:
umass0: USB Solid state disk, rev 1.10/1.00, addr 2 GEOM: create disk da0 dp=0xc2d74850 da0 at umass-sim0 bus 0 target 0 lun 0 da0: <Generic Traveling Disk 1.11> Removable Direct Access SCSI-2 device da0: 1.000MB/s transfers da0: 126MB (258048 512 byte sectors: 64H 32S/T 126C)
当然啦,商标,设备标识 (da0) 和其它的细节信息会根据您的配置不同 而有所不同。
因为 USB 设备被看作 SCSI 设备中的一个, camcontrol 命令也能够用来列出 USB 存储设备和系统的关联:
# camcontrol devlist <Generic Traveling Disk 1.11> at scbus0 target 0 lun 0 (da0,pass0)
如果设备要作成文件系统,您应该能够挂接它。 第 16.3 节 将帮助您格式化和创建分区在 USB 设备上,如果您需要。
如果您要去摘下设备 (在此这前磁盘必须被 unmount), 在系统信息中您能够看到下面的信息:
umass0: at uhub0 port 1 (addr 2) disconnected (da0:umass-sim0:0:0:0): lost device (da0:umass-sim0:0:0:0): removing device entry GEOM: destroy disk da0 dp=0xc2d74850 umass0: detached
除了 Adding Disks 和 Mounting and Unmounting File Systems 章之外,阅读 umass(4), camcontrol(8), 和 usbdevs(8) 也是很有益的。
CD 与普通的磁盘相比有很多不同的特性。最初它们是不能被用户写入的。 由于没有磁头和磁道移动时的延迟,所以它们可以连续的进行读取。 方便的在两个系统之间进行数据的传输,比起相同大小的存储介质来说。
CD 有磁道,这关系到数据读取时的连续性而不是物理磁盘的性能。 要在 FreeBSD 中制作一个 CD,您要准备好要写到 CD 上的数据文件, 然后根据每个 tracks 写入到 CD。
ISO 9660 文件系统被设计用来处理这些差异。它通常不会对文件系统作限制。 幸运的是,它提供了一个可扩展机制允许在制作 CD 时越越这些限制, 而同时在不支持这些扩展的系统上仍旧能够进行工作。
sysutils/ port 包括了 mkisofs(8), 这是一个可以用来生成包含 ISO 9660 文件系统的数据文件的程序。 他也提供了对于一些扩展的支持选项,下面将详细介绍。
使用哪个工具来刻录 CD 依赖于 CD 刻录机是 ATAPI 还是其它类型的。ATAPI CD 刻录器使用 burncd 程序,可以在基本系统中找到。SCSI 和 USB CD 刻录机使用 cdrecord 程序,可以 在 sysutils/cdrtools port中找到。
burncd 程序受到一系列支持设备的限制。如果想知道 设备是否被支持,可以查看 支持的 CD-R/RW 驱动器 列表。
Note: 如果您运行的是 FreeBSD 5.X、FreeBSD 4.8-RELEASE 或更高版本, 它将可能使用 cdrecord 和其它工作在一个 ATAPI 硬件 ATAPI/CAM module 为 SCSI 设备。
如果您想使用一个图形界面的 CD 刻录软件, 您可以参考一下 X-CD-Roast 或 K3b。这些工具作为安装包可以从 sysutils/xcdroast 和 sysutils/k3b ports 得到。 X-CD-Roast 和 K3b 需要 ATAPI/CAM module 和 ATAPI 硬件。
mkisofs(8) 程序作为 sysutils/cdrtools port 的一部分, 将生成 ISO 9660 文件系统,其中包含 UNIX 命名空间中的文件名。 最简单的用法是:
# mkisofs -o imagefile.iso /path/to/tree
这个命令将创建一个包含 ISO9660 文件系统的 imagefile.iso 文件,它是目录树 /path/to/tree 的一个拷贝。在处理过程中, 它将文件名称映射为标准的 ISO9660 文件系统的文件名,将排除那些不典型的 ISO 文件系统的 文件。
有很多选项能够用来克服那些限制。特别的,-R 选项能够启用 Rock Ridge 扩展一般的 UNIX 系统,-J 选项能启用用于 Microsoft 系统的 Joliet 扩展,-hfs 选项能用来创建用于 Mac OS 系统的 HFS 文件系统。
对于那些即将要在 FreeBSD 系统中使用 CD 的人来说,-U 选项能用来消除所有文件名的限制。当使用 -R 选项时,它会产生一个 文件系统映像,它与您从那儿启动 FreeBSD 树是一样的,虽然它在许多方面也违反了 ISO 9660 的标准。
最后一个常用的选项是 -b。 它用来指定启动映像的位置, 用以生成 “El Torito” 启动 CD。 这个选项使用一个参数, 用以指定将写入 CD 的目录的根。 默认情况下, mkisofs(8) 会以常说的 “软盘模拟” 方式来创建 ISO, 因此它希望引导影响的尺寸恰好是 1200, 1440 或 2880 KB。 某些引导加载器, 例如 FreeBSD 发行版磁盘, 并不使用模拟模式; 这种情况下, 需要使用 -no-emul-boot 选项。 因此, 如果 /tmp/myboot 是一个包含了在 /tmp/myboot/boot/cdboot 的可引导的 FreeBSD 系统, 您就可以使用下面的命令在 /tmp/bootable.iso 生成 ISO 9660 文件系统:
# mkisofs -R -no-emul-boot -b boot/cdboot -o /tmp/bootable.iso /tmp/myboot
如果内核中已经配置了 vn (FreeBSD 4.X), 或 md (FreeBSD 5.X),就可以挂上文件系统:
# vnconfig -e vn0c /tmp/bootable.iso # mount -t cd9660 /dev/vn0c /mnt
在 FreeBSD 4.X, 和 FreeBSD 5.X 中:
# mdconfig -a -t vnode -f /tmp/bootable.iso -u 0 # mount -t cd9660 /dev/md0 /mnt
可以发现 /mnt 和 /tmp/myboot 是一样的。
还可以使用 mkisofs(8) 的其它选项来调整它的行为。特别是修改 ISO 9660 的划分格式,创建 Joliet 和 HFS 格式的磁盘。查看 mkisofs(8) 手册页得到更多的帮助。
如果用的是 ATAPE 的 CD 刻录机,可以使用 burncd 命令来记录您的 CD ISO 映像文件。 burncd 命令是基本 系统的一部分,中以使用 /usr/sbin/burncd 来安装。 用法如下:
# burncd -f cddevice data imagefile.iso fixate
在 cddevice 上刻录一份 imagefile.iso 的副本。 默认的设备是 /dev/acd0 (在 FreeBSD 4.X 下则是 /dev/acd0c)。 请参考 burncd(8) 以了解设置写入速度的参数,如何在刻录完成之后自动弹出CD,以及刻录音频数据。
如果没有一个 ATAPI CD 刻录机,必须使用 cdrecord 来刻录您的 CD 。 cdrecord 不是基本系统的一部分;必须 从 sysutils/cdrtools 或适当的 package 安装它。基本系统的变化可能会引起这个程序的错误。可能是由 “coaster” 引起的。当升级系统时,同时需要升级 port ,或者 如果已升级到 tracking -STABLE ,那么使用 新版本时也要升级 port。
cdrecord 有许多选项,基本用法与 burncd 相似。刻录一个 ISO 9660 映像文件只需这样做:
# cdrecord dev=device imagefile.iso
使用 cdrecord 的比较巧妙的方法是找到使用的 dev 。要找到正确的设置,可以使用 cdrecord 的 -scanbus 标记,这会产生这样的结果:
# cdrecord -scanbus
Cdrecord 1.9 (i386-unknown-freebsd4.2) Copyright (C) 1995-2000 Jörg Schilling
Using libscg version 'schily-0.1'
scsibus0:
0,0,0 0) 'SEAGATE ' 'ST39236LW ' '0004' Disk
0,1,0 1) 'SEAGATE ' 'ST39173W ' '5958' Disk
0,2,0 2) *
0,3,0 3) 'iomega ' 'jaz 1GB ' 'J.86' Removable Disk
0,4,0 4) 'NEC ' 'CD-ROM DRIVE:466' '1.26' Removable CD-ROM
0,5,0 5) *
0,6,0 6) *
0,7,0 7) *
scsibus1:
1,0,0 100) *
1,1,0 101) *
1,2,0 102) *
1,3,0 103) *
1,4,0 104) *
1,5,0 105) 'YAMAHA ' 'CRW4260 ' '1.0q' Removable CD-ROM
1,6,0 106) 'ARTEC ' 'AM12S ' '1.06' Scanner
1,7,0 107) *
这个列表列出了设备的的适当的 dev 值。找到您的 CD burner ,使用三个用逗号分隔的数值来表示 dev.在 这个例子中,CRW 是 dev=1,5,0,所以正确的输入应是 dev=1,5,0 。有一个很容易的方法可以指定这个值;看看 cdrecord(1) 的介绍了解有关音轨,控制速度和其他的东西。
您可以这样复制 CD,把 CD 上面的音频数据解压缩出一系列的文件, 再把这些文件写到一张空白 CD 上。 这个过程对于 ATAPI 和 SCSI 驱动器来说有些微的不同。
SCSI 驱动器
使用 cdda2wav 来解压缩音频。
% cdda2wav -v255 -D2,0 -B -Owav
使用 cdrecord 来写 .wav 文件。
% cdrecord -v dev=2,0 -dao -useinfo *.wav
确保 2,0 被适当地设置了, 具体方法在 第 16.6.4 节 中有所描述。
ATAPI 驱动器
ATAPI CD 驱动用 /dev/acddtnn表示每个轨道, 这里 d 是驱动器号, nn 是轨道号,由两位小数位组成,省略前缀零。 所以第一个盘片上的第一个轨道就是 /dev/acd0t01,第二个就是 /dev/acd0t02,第三个就是 /dev/acd0t03,等等。
确保在 /dev 中存在合适的文件。
# cd /dev # sh MAKEDEV acd0t99
Note: 在 FreeBSD 5.0 中,devfs(5) 会为您自动创建 并管理 /dev 中的节点, 所以不再需要使用 MAKEDEV。
使用 dd(1) 解压缩每个轨道。当解压缩文件的时候您也必须使用 一个特殊的块大小。
# dd if=/dev/acd0t01 of=track1.cdr bs=2352 # dd if=/dev/acd0t02 of=track2.cdr bs=2352 ...
使用 burncd 把解压缩的文件刻录到光盘上。您必须指定 这些文件是音频文件,这样 burncd 会在刻录完成时 结束光盘。
# burncd -f /dev/acd0 audio track1.cdr track2.cdr ... fixate
您可以把数据 CD 复制成一个与之等价的镜像文件, 镜像文件可以使用 mkisofs(8) 创建,您可以使用这个工具复制 任何数据 CD。这里给出的例子假定您的 CDROM 设备 acd0。代替您 正确的 CDROM 设备。在 FreeBSD 4.X 下面,字符 c 必须被附加到 设备名的结尾处来指明是整个分区, 或者对于 CDROM,指明是整个光盘。
# dd if=/dev/acd0 of=file.iso bs=2048
现在您有一个镜像文件了,您可以像上面描述的那样把它刻录成 CD。
现在您已经创建了一张标准的数据 CDROM,您或许想要 挂载来读取上面的设备。 默认情况下,mount(8) 假定文件系统是 ufs 类型的。如果您尝试下面的命令:
# mount /dev/cd0 /mnt
您会得到一条 “Incorrect super block” 的错误信息,没有挂载成功。CDROM 不是 UFS 文件系统,所以试图这样挂载它是 是不行的。您需要告诉 mount(8) 文件系统是 ISO9660 类型的,这样 就可以了。只需要指定 mount(8) 的 -t cd9660 选项。例如, 如果您想要挂载 CDROM 设备, /dev/cd0 到 /mnt 目录,您需要执行:
# mount -t cd9660 /dev/cd0 /mnt
注意您的设备名 (在这个例子中是 /dev/cd0)可能 有所不同,取决于您的 CDROM 使用的接口。另外, -t cd9660 选项等同于执行 mount_cd9660(8)。上面的例子可以缩短 为:
# mount_cd9660 /dev/cd0 /mnt
用这种方法您基本可以使用任何买到的数据 CDROM。 然而某些有 ISO 9660 扩展的光盘可能会行为古怪。 例如,joliet 光盘用两个字节的 unicode 字符存储所有的文件名。 FreeBSD 内核还不能识别 unicode (重要!),所以非英语字符被做了有问题的标记。 (如果您正在运行 FreeBSD 4.3 或者以后的版本, CD9660 驱动包含了加载合适的 unicode 换算表的方法。 一些常用编码的模块可以通过 sysutils/cd9660_unicode port 来安装。)
有时候,当您试图挂载 CDROM 的时候,会得到一条 “Device not configured” 的错误信息。这通常 表明 CDROM 驱动认为托盘里没有光盘, 或者驱动器在总线上不可见。 需要几秒钟时间等待 CDROM 驱动器辨别已经接到反馈的信息, 请耐心等待。
有时候,SCSI CDROM 可能会找不到,因为没有足够的 时间来应答总线的 reset 信号。如果您有一个 SCSI CDROM 请将下面的选项添加到您的内核 配置文件并重建您的内核。
options SCSI_DELAY=15000
这个告诉您的 SCSI 总线启动时暂停 15 秒钟, 给您的 CDROM 驱动器足够的机会来应答 总线 reset 信号。
您可以选择把一个文件目录刻录到 CD 上而不用 创建 ISO 9660 文件系统。有些人这么做是为了备份的 目的。这个运行的比刻录一个标准 CD 速度要快的多:
# burncd -f /dev/acd1 -s 12 data archive.tar.gz fixate
要重新找回这样刻录到 CD 上的数据, 您必须从原始设备节点读取数据:
# tar xzvf /dev/acd1
您不能像挂载一个通常的 CDROM 一样挂载这张光盘。 这样的 CDROM 也不能在除了 FreeBSD 之外的任何操作系统上读出。 如果您想要可以挂载 CD,或者 和另一种操作系统共享数据,您必须像上面描述的那样使用 mkisofs(8)。
这个驱动允许 ATAPI 设备(CD-ROM, CD-RW, DVD 驱动器等...)通过 SCSI 子系统访问, 这样允许使用像 sysutils/cdrdao 或者 cdrecord(1) 这样的程序。
要使用这个驱动,您需要把下面几行 添加到您的内核配置文件中:
device atapicam device scbus device cd device pass
您也需要在您的内核配置文件有 下面几行:
device ata
这个应该已经有了。
然后重建,安装您的新内核,重新启动机器。 在启动过程中,您的刻录机会被识别, 就像这样:
acd0: CD-RW <MATSHITA CD-RW/DVD-ROM UJDA740> at ata1-master PIO4 cd0 at ata1 bus 0 target 0 lun 0 cd0: <MATSHITA CDRW/DVD UJDA740 1.00> Removable CD-ROM SCSI-0 device cd0: 16.000MB/s transfers cd0: Attempt to query device size failed: NOT READY, Medium not present - tray closed
驱动器现在可以通过 /dev/cd0 设备名访问了,例如要 挂载 CD-ROM 到 /mnt,只需要键入下面的 命令:
# mount -t cd9660 /dev/cd0 /mnt
作为 root,您可以运行下面的 命令来得到刻录机的 SCSI 地址:
# camcontrol devlist <MATSHITA CDRW/DVD UJDA740 1.00> at scbus1 target 0 lun 0 (pass0,cd0)
这样 1,0,0 就是 SCSI 地址了,可以被 cdrecord(1) 和其他的 SCSI 程序使用。
有关 ATAPI/CAM 和 SCSI 系统的更多信息, 可以参阅 atapicam(4) 和 cam(4) 手册 页。
和 CD 相比,DVD 是下一代光学存储介质技术。 DVD 可以容纳比任何 CD 更多的数据,已经成为现今视频出版业的标准。
我们称作可记录 DVD 的有五种物理记录格式:
DVD-R:这是第一种可用的 DVD 可记录格式。 DVD-R 标准由 DVD Forum 定义。 这种格式是一次可写的。
DVD-RW:这是 DVD-R 标准的可覆写版本。 一张 DVD-RW 可以被覆写大约 1000 次。
DVD-RAM:这也是一种被 DVD Forum 所支持的可覆写格式。 DVD-RAM 可以被看作一种可移动硬盘。 然而,这种介质和大部分 DVD-ROM 驱动器以及 DVD-Video 播放器不兼容; 只有少数 DVD 刻录机支持 DVD-RAM。
DVD+RW:这是一种由 DVD+RW Alliance 定义的可覆写格式。一张 DVD+RW 可以被覆写大约 1000 次。
DVD+R:这种格式是 DVD+RW 格式的一次可写变种。
一张单层的可记录 DVD 可以存储 4,700,000,000 字节,相当于 4.38 GB 或者说 4485 MB (1 千字节等于 1024 字节)。
Note: 必须说明一下物理介质与应用程序的分歧。 例如 DVD-Video 是一种特殊的文件系统, 可以被覆写到任何可记录的 DVD 物理介质上: DVD-R、DVD+R、DVD-RW 等等。在选择介质类型之前, 您一定要确认刻录机和 DVD-Video 播放器 (一种单独的播放器或者计算机上的 DVD-ROM 驱动器) 是和这种介质兼容的。
growisofs(1) 将被用来实施 DVD 刻录。 这个命令是 dvd+rw-tools 工具集 (sysutils/dvd+rw-tools) 的一部分。 dvd+rw-tools 支持所有的 DVD 介质类型。
这些工具将使用 SCSI 子系统来访问设备,因此 ATAPI/CAM 支持 必须加入内核。 如果您的刻录机采用 USB 接口则不需要这么做,请参考 第 16.5 节 来了解 USB 设备配置的进一步详情。
此外,还需要启用 ATAPI 设备的 DMA 支持。 这一工作可以通过在 /boot/loader.conf 文件中加入下面的行来完成:
hw.ata.atapi_dma="1"
试图使用 dvd+rw-tools 之前您应该参考 dvd+rw-tools 硬件兼容性列表 是否有与您的 DVD 刻录机有关的信息。
Note: 如果您想要一个图形化的用户界面,您应该看一看 K3b (sysutils/k3b),它提供了 growisofs(1) 的一个友好界面和许多其他刻录工具。
growisofs(1) 命令是 mkisofs 的前端,它会调用 mkisofs(8) 来创建文件系统布局,完成到 DVD 上的刻录。 这意味着您不需要在刻录之前创建数据映像。
要把 /path/to/data 目录的数据刻录到 DVD+R 或者 DVD-R 上面,使用下面的命令:
# growisofs -dvd-compat -Z /dev/cd0 -J -R /path/to/data
-J -R 选项传递给 mkisofs(8) 用于文件系统创建(这种情况下: 带有 joliet 和 Rock Ridge 扩展的 ISO 9660 文件系统), 参考 mkisofs(8) 手册页了解更多细节。
选项 -Z 用来在任何情况下初始刻录会话: 不管多会话与否。 DVD 设备,/dev/cd0, 必须依照您的配置做出改变。 -dvd-compat 参数会结束光盘, 光盘成为不可附加的。这会提供更多的和 DVD-ROM 驱动器的介质兼容性。
也可以刻录成一个 pre-mastered 映像, 例如记录一个映像文件 imagefile.iso, 我们可以运行:
# growisofs -dvd-compat -Z /dev/cd0=imagefile.iso
刻录的速度可以被检测到并自动进行调整, 根据介质和驱动器的使用情况。如果您想强制改变速度, 可以使用 -speed= 参数。更多的信息,请看 growisofs(1) 联机手册。
DVD-Video 是一个特殊的基于 ISO 9660 和 micro-UDF (M-UDF) 规范的文件系统。DVD-Video 也呈现了一个特殊的数据体系结构, 这就是为什么您需要一个特殊的程序像 multimedia/dvdauthor 来制作 DVD 的原因。
如果您已经有了 DVD-Video 文件系统的映像, 就可以以同样的方式制作另一个映像,可以参看前面章节的例子。 如果您想制作 DVD 并想放在特定的目录中,如在目录 /path/to/video 中, 可以使用下面的命令来刻录 DVD-Video:
# growisofs -Z /dev/cd0 -dvd-video /path/to/video
-dvd-video 选项将传递给 mkisofs(8) 并指示它创建一个 DVD-Video 文件系统布局。 除此之外。 -dvd-video 选项也包含了 -dvd-compat growisofs(1) 选项。
不像 CD-RW, 一个空白的 DVD+RW 在每一次使用前必须先格式化。 growisofs(1) 程序将会适时的自动对其进行适当的处理, 这是 recommended 的方式。您也可以使用 dvd+rw-format 来对 DVD+RW 进行格式化:
# dvd+rw-format /dev/cd0
您只需要执行这样的操作一次,牢记只有空白的 DVD+RW 介质才需要格式化。您可以以前面章节同样的方式来刻录 DVD+RW。
如果您想刻录新的数据 (刻录一个新的完整的文件系统 而不仅仅是追加一些数据) 到 DVD+RW,您不必再将其格式化成空白盘, 您只须要直接覆盖掉以前的记录即可。 (执行一个新的初始化对话), 像这样:
# growisofs -Z /dev/cd0 -J -R /path/to/newdata
DVD+RW 格式化程序为简单的向以前的记录追加数据提供了可能性。 这个操作有一个新的会话和一个已经存在的会话合并而成。 它不需要多个写会话过程, growisofs(1) 将在介质上 增加 ISO 9660 文件系统。
例如,我们想追加一些数据到到我们以前的 DVD+RW 上,我们可以使用下面的命令:
# growisofs -M /dev/cd0 -J -R /path/to/nextdata
我们用来刻录初始会话的同样的 mkisofs(8) 选项会在以后的写操作中使用。
Note: 如果您想获得与 DVD-ROM 驱动更好的兼容性,可以使用 -dvd-compat 选项。在 DVD+RW 这种情况下,将不能预防您添加数据。
如果出于某种原因您真的想要空白介质盘, 可以执行下面的命令:
# growisofs -Z /dev/cd0=/dev/zero
DVD-RW 接受两种光盘格式:增补顺序写入和受限式覆写。默认的 DVD-RW 盘是顺序写入格式。
空白的 DVD-RW 能够直接进行刻录而不需要格式化操作, 然而非空的顺序写入格式的 DVD-RW 需要格式化才能写入新的初始区段。
要格式化一张 DVD-RW 为顺序写入模式,运行:
# dvd+rw-format -blank=full /dev/cd0
Note: 一次完全的格式化 (-blank=full) 在 1x 倍速的介质上将会花费大约 1 个小时。快速格式化可以使用 -blank 选项来进行,如果 DVD-RW 要以 Disk-At-Once (DAO) 模式刻录的话。要以 DAO 模式刻录 DVD-RW,使用命令:
# growisofs -use-the-force-luke=dao -Z /dev/cd0=imagefile.iso-use-the-force-luke=dao 选项不是必需的, 因为 growisofs(1) 试图最低限度的检测 (快速格式化) 介质并进行 DAO 写入。
事实上对于任何 DVD-RW 都应该使用受限式覆写模式, 这种格式比默认的增补顺序写入更加灵活。
在一张顺序 DVD-RW 上写入数据,使用和其他 DVD 格式相同的说明:
# growisofs -Z /dev/cd0 -J -R /path/to/data
如果您想在您以前的刻录上附加数据,您必须使用 growisofs(1) 的 -M 选项。然而, 如果您在一张增补顺序写入模式的 DVD-RW 上附加数据, 将会在盘上创建一个新的区段,结果就是一张多区段光盘。
受限式覆写格式的 DVD-RW 在新的初始化区段前不需要格式化, 您只是要用 -Z 选项覆写光盘,这和 DVD+RW 的情形是相似的。也可以用和 DVD+RW 同样方式的 -M 选项把现存的 ISO 9660 文件系统写入光盘。 结果会是一张单区段 DVD。
要把 DVD-RW 置于受限式覆写格式, 必须使用下面的命令:
# dvd+rw-format /dev/cd0
更改回顺序写入模式使用:
# dvd+rw-format -blank=full /dev/cd0
几乎没有哪个 DVD-ROM 驱动器支持多区段 DVD,它们大多数时候都只读取第一个区段。 顺序写入格式的 DVD+R、DVD-R 和 DVD-RW 可以支持多区段, DVD+RW 和 DVD-RW 受限式覆写格式不存在多区段的概念。
在 DVD+R、DVD-R 或者 DVD-RW 的顺序写入格式下, 一次初始化 (未关闭) 区段之后使用下面的命令, 将会在光盘上添加一个新的区段:
# growisofs -M /dev/cd0 -J -R /path/to/nextdata
对 DVD+RW 或者 DVD-RW 在受限式覆写模式下使用这条命令, 会合并新区段到存在的区段中来附加数据。 结果就是一张单区段光盘。 这是在这些介质上用于在最初的写操作之后添加数据的方式。
Note: 介质上的一些空间用于区段之间区段的开始与结束。 因此,应该用大量的数据添加区段来优化介质空间。 对于 DVD+R 来说区段的数量限制为 154, 对于 DVD-R 来说大约是 2000,对于双层 DVD+R 来说是 127。
要获得更多的关于 DVD 的信息 dvd+rw-mediainfo /dev/cd0 命令可以运行来获得 更多的信息。
更多的关于 dvd+rw-tools 的信息可以在 growisofs(1) 手册页找到,在 dvd+rw-tools web site 和 cdwrite mailing list 联接中也可找到。
Note: dvd+rw-mediainfo 命令的输出结果记录或 媒体的问题被做成问题报告。没有这些输出,对你的帮助将会十分困难。
把数据存储在软盘上有时也是十分有用的。 例如,当没有其它可靠的存储介质或要传递少量的数据到其它的 计算机。
这一章将介绍怎样在 FreeBSD 上使用软盘。 在使用 DOS 3.5 英寸软盘时首要要涉及的就是格式化, 但其概念与其它的软盘格式化极为类似。
软盘的访问像其它设备一样是通过在 /dev 中的条目来实现的。 访问 raw 软盘在 4.X 和更早的版本,使用 /dev/fdN, 这里 N 标识设备号,通常为 0 , 或 /dev/fdNX, 这里 X 标识为一个字符。
在 5.0 或更新的版本中,简单的使用 /dev/fdN。
也有 /dev/fdN.size 这样的设备,这里 size 代表软盘的含量以 KB 为单位。 这个条目用在低级格式化时来确定磁盘的大小。下面的例子就是 1440kB
有时这些条目必须在 /dev 目录中进行重建。 可以这样做:
# cd /dev && ./MAKEDEV "fd*"
在 5.0 版本中, devfs(5) 将自动管理在 /dev 目录中的设备,所以不摧荐使用 MAKEDEV 命令。
如果期望得到确定大小的磁盘可以给 fdformat(1) 传递 -f 参数。支持的大小列在 fdcontrol(8) 中,但是建议和工作状态最好的 1440kB 。
一张软盘在使用这前必须先被低级格式化。 通常卖主已经做过了,但格式化是检测介质完整性的一种好方法。 尽管这有可能会强取大量(或少量)的硬盘大小,但 大部分磁盘都能被格式化设计为 1440kB 。
低级格式化软盘你需要使用 fdformat(1) 命令。这个程序需要设备名作为参数。
要留意一切错误信息,这些信息能够帮助你确定 磁盘的好与坏。
使用 /dev/fdN.size 设备来格式化软盘。插入一张新的 3.5 英寸的软盘在你的设备里:
# /usr/sbin/fdformat /dev/fd0.1440
使用 /dev/fdN 设备来格式化软盘。插入一张新的 3.5 英寸的软盘在你的设备中:
# /usr/sbin/fdformat -f 1440 /dev/fd0
经过低级格式化后,你需要给它分配一个标签。 这个磁盘标签以后会被消毁,但是系统却需要它来确定硬盘的大小。
新的磁盘标签将会接管整个磁盘,会包括所有合适的关于软盘的 geometry 信息。 磁盘标签的 geometry 值列在 /etc/disktab中。
你能够使用 disklabel(8) 像下面这样:
# /sbin/disklabel -B -r -w /dev/fd0 fd1440
Note: 从 FreeBSD 5.1-RELEASE, 开始 bsdlabel(8) 程序代替了旧版本的 disklabel(8) 程序。随着 bsdlabel(8) 一起许多陈旧的选项和参数也被清除了; 在上面的例子中,选项 -r 将被去掉。要想得到更多的信息, 请参考 bsdlabel(8) 手册页。
现在对软盘进行高级格式化。 这会在它上面安置一个新的文件系统,可使 FreeBSD 来对它进行读写。 在创建完新的文件系统后,磁盘标签将被消毁,所以如果你想重新格式化磁盘, 你必须重新创建磁盘标签。
软盘的文件系统可以选择 UFS 或 FAT 。 FAT 是通常情况下软盘比较好的选择。
要制作新的文件系统在软盘上,可以使用下面的命令:
# /sbin/newfs_msdos /dev/fd0
现在磁盘已经可以进行读取和使用。
要使用软盘,需要先使用 mount_msdos(8) (在 4.X 和更早的版本中) 或 mount_msdosfs(8) (在 5.0 或更新 的版本中)。也可以使用在 ports collection 中的emulators/mtools 程序。
主流的磁带机有 4mm, 8mm, QIC, mini-cartridge 和 DLT。
4mm 磁带机取代了 QIC 而成为工作站备份数据在设备面停止了 QIC 设备 的生产。 4mm 的驱动器更加小和安静,但对于数据保存的可信度仍不及 8mm 驱动器。它要比 8mm 的便宜和小得多 (3 x 2 x 0.5 inches, 76 x 51 x 12 mm) 。和 8mm 的一样,读写关的寿命都不长,因为它们同样使用螺旋式 的方式来读写。
数据传输的速度约在 ~150 kB/s, 到 ~500 kB/s 之间,可存储 空间从 1.3 GB 到 2.0 GB 之间,硬件压缩可使空间加倍。磁带库 单元可以有 6 台磁带机,120 个磁带匣,以自动切换的方式使用同一个磁带柜, 磁带库的容量可达 240 GB 。
DDS-3 标准现在支持的磁带机容量最高可达到 12 GB (或压缩的 24 GB )。
4mm 和 8mm 同样都使用螺旋式读写的方式,所有螺旋式读写的优点及缺点, 都可以在 4mm 和 8mm 磁带机上看到。
磁带在经过 2,000 次的使用或 100 次的全部备份后,就该退休了。
8mm 磁带机是最常见的 SCSI 磁带机,也是磁带交换的最佳选择。几乎每个 工作站都有一台 2 GB 8mm 磁带机。8mm 磁带机可信度高、方便、安静。 卡匣小 (4.8 x 3.3 x 0.6 inches; 122 x 84 x 15 mm)而且不贵。8mm 磁带机 的下边是一个短短的读写头,而读写头的寿命取决于磁带经过读写头时,相对高 速运动情况。
数据传输速度约在 250 kB/s 到 500 kB/s 之间,可存储的空间从 300 MB 到 7 GB,硬件压缩可使空间加倍。磁带库单元可以有 6 台磁 带机,120 个磁带匣,以自动切换的方式使用同一个磁带柜,磁带库的容量可达 840+ GB。
Exabyte “Mammoth” 模型支持 12 GB 的容量在一个磁带 上(压缩后可达 24 GB )相当于普通磁带的二倍。
数据是使用螺旋式读写的方式记录在磁带上的,读写头和磁带约相差 6 度, 磁带以 270 度缠绕着轴,并抵住读写头,轴适时地旋转,使得磁带具有高密度, 从一端到另一端并可使磁道紧密地分布。
QIC-150 是最常见的磁带机。 QIC 磁带机是最便宜的 “正规” 备份驱动器。和 8mm or 4mm 比较,QIC 磁带机最高可能要 5 倍的价钱每 GB。 假如您需要六台左右的磁带机,那么 QIC 将是正确的选择。 QIC 是 最常见 的磁带机,每个工作站都会有一台 QIC 磁带机。 QIC 磁带机具有几种不同的存储密度。QIC 磁带机并不安静,读写时的声音都可清 淅地听到。 QIC 磁带机的规格:(6 x 4 x 0.7 inches; 15.2 x10.2 x 1.7 mm)。
数据传输的速度介于 150 kB/s 到 500 kB/s 之间,可存储的空间 从 40 MB 到 15 GB。较新的 QIC 磁带机具有硬件压缩的功能。 QIC 的使用率愈来愈低,渐渐被 DAT 所取代。
数据以磁道的方式记录在磁带上,磁道数及磁道的宽度会根据容量而有所不同。 通常新的磁带机具有的向后兼容的读取功能(通常也具备写入的功能)。对于数据 的安全性,QIC 具有不错的评价。
磁带机在经过 5,000 次的使用后,就该退休了。
在这一章列出的磁带机中 DLT 具有最快的数据传输率。 1/2" (12.5mm) 的 磁带包含在单轴的磁带匣 (4 x 4 x 1 inches; 100 x 100 x 25 mm)中。磁带匣 的一边是一个旋转匣道,通过匣道的开合,可以让磁带卷动。磁带匣内只有一个 轴,而本章中所提到的其他磁带匣都是有两个轴的(9磁道磁带机例外)。
数据传输的速度约 1.5 MB/s,是 4mm, 8mm, 或 QIC 磁带机的三倍。 可存储的空间从 10 GB 到 20 GB,具有磁带机数据库。磁带机数据库 单元可以有 1 to 20 台磁带机,5 到 900 个磁带匣,磁带机数据库的容量可达 50 GB 到 9 TB 。
如果要压缩的话,DLT 型 IV 格式的磁带机最高可支持 70 GB 的存储 容量。
数据存储在平行于磁带运行方向的磁道上(就像 QIC 磁带),一次写入两个 磁道。读写头的寿命相当长,每当磁带停止前进,磁带与读写头之间没有相对运动。
AIT 是 Sony 开发的一种新格式,每个磁带最高可以存储 50 GB。磁带 机使用内存芯片来保存磁带上的索引内容。这个索引能够被磁带机驱动器快速阅读 来搜索磁带机上文件所处的位置,而不像其他的磁带机需要花几分钟的时间才能找 到文件。像 SAMS:Alexandria 这样的软件:能够操 作四十或者更多的 AIT 磁带库,直接使用内存芯片来进行通信把内容显示在屏幕上, 以决定把什么文件备份到哪个磁带上,加载和恢复数据。
像这样的库成本大概在 $20,000 美元左右,零售市场可能还要贵一点。
当在一块完全空白的磁带上尝试定入数据时,会得到类似下面这样的错误信息:
sa0(ncr1:4:0): NOT READY asc:4,1 sa0(ncr1:4:0): Logical unit is in process of becoming ready
信息指出这块磁带没有块编号 (block 编号为 0)。在 QIC-525 之后的所有 QIC 磁带,都采用 QIC-525 标准,必须写入一个 Identifier Block 。对于这种问题, 有以下两种解决的办法:
用mt fsf 1 可以让磁带机对磁带写入 Identifier Block 。
使用面板上的按钮磁带。
再插入一次,并存储 dump 数据到磁带上。
这时dump 将传回 “DUMP: End of tape detected” ,然后您会得到这样的错误信息: “HARDWARE FAILURE info:280 asc:80,96”。
这时用 mt rewind 来倒转磁带。
磁带操作的后续操作就完成了。
软磁盘通常是用来备份的设备中不太合适的设备:
这种设备不太可靠,特别是长期使用。
备份和恢复都很慢
它们只有非常有限的存储容量。
然而,如果没有其它的备份数据的方法,那软盘备份总比没有备份要好。
如果必须使用软盘的话,必须确保盘片的质量。软盘在办公室中使用已经有许多 年了。最好使用一些名牌厂商的产品以确保质量。
最好的备份数据到软盘的方法是使用 tar(1) 程序加上 -M 选项, 它可以允许数据备份到多张软盘上。
要备份当前目录中所有的文件可以使用这个命令 (需要有 root权限):
# tar Mcvf /dev/fd0 *
当第一张盘满的时候, tar(1) 会指示您插入下一张盘,插入第二张盘之后就按回车。
Prepare volume #2 for /dev/fd0 and hit return:
这个步骤可能需要重复很多次,直到这些文件备份完成为止。
不幸的是,tar(1) 在为多卷文件作备份时是不允许使用 -z 选项的。当然,可以用 gzip(1) 压缩所有的文件,把它们打包到磁盘,以后在用 gunzip(1) 解开。
要恢复所有文件:
# tar Mxvf /dev/fd0
有两种方法来恢复软盘中的个别文件。首先,就要用第一张软盘启动:
# tar Mxvf /dev/fd0 filename
tar(1) 程序会提示您插入后面的软盘,直到它找到所需要的文件。
如果您知道哪个文件在哪个盘上,您就可以插入那张盘,然后使用上同同样的命令。 如果软盘上的第一个文件与前面的文件是连续的,那 tar(1) 命令会警告您它无法 恢复,即使您不要求它这样做。
有三个主要的备份程序 dump(8)、tar(1) 和 cpio(1)。
dump 和 restore 是 UNIX 传统的备份程序。它以 block 而不是以文件为单位来备份数据、链接或目录。 dump 备份的是设备上的整个文件系统,不能只备份一 一个文件系统的部分或是用到两个以上文件系统的目录树。 dump 不会写文件和目录到磁带机,而是写入包含文件 和目录的原始数据块。
Note: 如果在您的 root 目录使用 dump ,将不需要 备份 /home、/usr 或其他目录, 因为这些是典型的其他文件系统或符号连接到那些文件系统的加载点。
dump 是最早出现于 AT&T UNIX 的 Version 6 (约 1975)。 默认的参数适用于 9-track 磁带(6250 bpi),所以如果要用高密度的磁带(最高可达 62,182 ftpi),就不能用默认的参数,而要另外指定参数。这些默认值必须在命令行被 修改以更好地利用当前磁带机的功能。
rdump 和 rrestore 可以通过网络在另一 台计算机的磁带机上备份数据。这两个程序都是依靠 rcmd(3) 和 ruserok(3) 来访问远程的磁带机。因此,运行备份的用户必须要有远程 主机的 .rhosts 访问权。rdump 和 rrestore 的参数必须适用于远程主机(例如,当您从 FreeBSD 连到 一台 SUN 工作站 knomodo 去使用磁带机时,使用:
# /sbin/rdump 0dsbfu 54000 13000 126 komodo:/dev/nsa8 /dev/da0a 2>&1
要注意的是:必须检查您在使用 .rhosts 时的安全情况。
也可以通过使用 ssh 用一个更安全的方式来使用 dump 和 restore 。
Example 16-1. 通过 ssh 使用 dump
# /sbin/dump -0uan -f - /usr | gzip -2 | ssh -c blowfish \
targetuser@targetmachine.example.com dd of=/mybigfiles/dump-usr-l0.gz
或使用 dump 的 built-in 方法, 设置环境变量 RSH:
tar(1) 也同样是在 AT&T UNIX Version 6 (约 1975)中出现的。 tar 可以直接对文件系统操作。它直接将文件和目录写到 磁带上, tar 不支持像 cpio(1) 那样多的选项,但 tar 不需要用像用 cpio 那样奇怪的 命令行管道。
许多版本的 tar 不支持通过网络备份,而 GNU 版的 tar (FreeBSD 用的就是 GNU 版的)提供与 rdump 相同的语法来使用远程的设备。例如要 tar Sun 工作站 komodo 上一台 Exabyte 磁带机,主使用:
# /usr/bin/tar cf komodo:/dev/nsa8 . 2>&1
对于不支持远程设备的版本,可以使用一个管道和 rsh 传送数据给远程的磁带机。
# tar cf - . | rsh hostname dd of=tape-device obs=20b
如果您担心通过网络备份会有安全问题,应当使用 ssh , 而不是 rsh。
cpio(1) 是 UNIX 最早用来作文件交换的磁带机程序。它有执行字节 交换的选项,可以用几种不同的格式写入,并且可以将数据用管道传给其他程序。 cpio 没办法自动查找目录树内的文件列表,必须通过标准 输入 stdin 来指定。
cpio 不支持通过网络的备份方式。可以使用 pipeline 和 rsh 来传送数据给远程的磁带机。
# for f in directory_list; do find $f >> backup.list done # cpio -v -o --format=newc < backup.list | ssh user@host "cat > backup_device"
这里的 directory_list 是要备份的目录列表, user@host 结合了将 要执行备份的用户名和主机名,backup_device 是写 入备份的设备(如 /dev/nsa0)。
pax(1) 是符合 IEEE/POSIX 标准的程序。多年来各种不同版本 的 tar 和 cpio 间有些不兼容。 为了防止这种情况,并使其标准化,POSIX 出了这套新的工具程序。 pax 尝试可以读写各种 cpio 和 tar 的格式,并可以自己增加新的格式。它的命令 集比 tar 更接近 cpio。
Amanda (Advanced Maryland Network Disk Archiver) 并非单一的程序,而是一个客户机/服务器模式的备份系统 。一台 Amanda 服务器可以备份任意数量执行 Amanda 的客户机或是将连上 Amanda 服务器的计算机上的数据备份到一台磁带机上。一个常见的问题是,数据写入磁带机的时间将超 过取行数据的时间,而 Amanda 解决了这个问题。它使用一个 “holding disk” 来同时备份几个文件系统。 Amanda 建立 “archive sets” 的一组磁带,用来备份在 Amanda 的配置文件中所列出的完整的文件系统。
Amanda 配置文件提供完整的备份控制及 Amanda 产生的网络传输。 Amanda 可以使用上述任何一个设备程序来向磁带写入数据。Amanda 可以从 port 或 package 取得,它并非系统默认安装的。
“Do nothing” 不是一个程序,而是被广泛使用的备份策略。 不需要预算,不需要备份的计划表,全部都不用。如果您的数据发生了什么问题, 忽略它!
如果您的时间和数据不值得您做这些事,那么 “Do nothing” 将是最好的备份程序。要注意的是,UNIX 是相当好用的工具,您可能在几个月 内,就发现您已经收集了不少对您来说相当具有价值的文件和程序。
“Do nothing” 对于像 /usr/obj 和其他 可由您的计算机产生的文件来说,是最好的方法。例如这本手册包含有 HTML 或 PostScript 格式的文件。这些文档格式是从 SGML 输入文件创建的。创建 HTML 或 PostScript 格式的文件的备份就没有必要了。只要经常备份 SGML 文件就够了。
在dump(8) 时期 Elizabeth D. Zwicky 测试了所有以上列出的备份程序。在各种各样怪异的文件系统中, dump 是您明智的选择。Elizabeth 建立起各种各样、 奇怪或常见的文件系统,并用各种备份程序,测试在各种文件系统上备份 及恢复数据。这些怪异之处包括:具有 holes 和一个 nulls block 的文件, 文件名具有有趣字符,无法读写的文件及设备,在备份时改变文件大小,在 备份时建立或删除的文件。她将结果刑在: LISA V in Oct. 1991. See torture-testing Backup and Archive Programs.
在遇到灾难前,只需要执行以下四个步骤:
第一,打出您的每个磁盘驱动器的磁盘标签(例如: disklabel da0 | lpr),文件系统表, (/etc/fstab) ,以及所有启动信息,并将每个拷贝 两份。
第二,确定遇到的情况时,用来启动及修复的软盘 (boot.flp 和 fixit.flp) 具有您所有的设备代号。最简单的方法是用软盘启动,然后检查启动信息, 如果设备都被列出,并且可以正常使用,就可以跳到第三步。
否则,必须建立两张传统的可启动软盘,并包含: fdisk, disklabel, newfs, mount, 以及所有使用的 备份程序。这些程序必须被静态的连接。如果使用的是 dump, 那么这张软盘就必须包含 restore。
第三,定期将数据备份到磁带。任何在上次备份后的改变都无法恢复。记得将 磁盘写保护。
第四,测试在第二步所建立的软盘及备份的磁带,将过程记录下来,并和这张 可启动的软盘和磁带放在一起。也许您在恢复时会想要,而这份记录将防止您破坏 您的磁带 (怎么说呢?因为您可能将 tar xvf /dev/sa0 打成 tar cvf /dev/sa0 而重写了备份磁带)。
为了安全,您可以每次都做两份备份磁带及一张启动磁盘,并将其中 一份备份磁带存放在其它地方。其它地方不是指同一栋办公大楼的地下室 (世贸中心的一些公司应该学到了一些教训),而是真的要让人的磁带离您 的的计算机远远的。
Example 16-3. 一个建立启动磁盘的 shell 脚本例子:
#!/bin/sh
#
# create a restore floppy
#
# format the floppy
#
PATH=/bin:/sbin:/usr/sbin:/usr/bin
fdformat -q fd0
if [ $? -ne 0 ]
then
echo "Bad floppy, please use a new one"
exit 1
fi
# place boot blocks on the floppy
#
disklabel -w -B /dev/fd0c fd1440
#
# newfs the one and only partition
#
newfs -t 2 -u 18 -l 1 -c 40 -i 5120 -m 5 -o space /dev/fd0a
#
# mount the new floppy
#
mount /dev/fd0a /mnt
#
# create required directories
#
mkdir /mnt/dev
mkdir /mnt/bin
mkdir /mnt/sbin
mkdir /mnt/etc
mkdir /mnt/root
mkdir /mnt/mnt # for the root partition
mkdir /mnt/tmp
mkdir /mnt/var
#
# populate the directories
#
if [ ! -x /sys/compile/MINI/kernel ]
then
cat << EOM
The MINI kernel does not exist, please create one.
Here is an example config file:
#
# MINI -- A kernel to get FreeBSD onto a disk.
#
machine "i386"
cpu "I486_CPU"
ident MINI
maxusers 5
options INET # needed for _tcp _icmpstat _ipstat
# _udpstat _tcpstat _udb
options FFS #Berkeley Fast File System
options FAT_CURSOR #block cursor in syscons or pccons
options SCSI_DELAY=15 #Be pessimistic about Joe SCSI device
options NCONS=2 #1 virtual consoles
options USERCONFIG #Allow user configuration with -c XXX
config kernel root on da0 swap on da0 and da1 dumps on da0
device isa0
device pci0
device fdc0 at isa? port "IO_FD1" bio irq 6 drq 2 vector fdintr
device fd0 at fdc0 drive 0
device ncr0
device scbus0
device sc0 at isa? port "IO_KBD" tty irq 1 vector scintr
device npx0 at isa? port "IO_NPX" irq 13 vector npxintr
device da0
device da1
device da2
device sa0
pseudo-device loop # required by INET
pseudo-device gzip # Exec gzipped a.out's
EOM
exit 1
fi
cp -f /sys/compile/MINI/kernel /mnt
gzip -c -best /sbin/init > /mnt/sbin/init
gzip -c -best /sbin/fsck > /mnt/sbin/fsck
gzip -c -best /sbin/mount > /mnt/sbin/mount
gzip -c -best /sbin/halt > /mnt/sbin/halt
gzip -c -best /sbin/restore > /mnt/sbin/restore
gzip -c -best /bin/sh > /mnt/bin/sh
gzip -c -best /bin/sync > /mnt/bin/sync
cp /root/.profile /mnt/root
cp -f /dev/MAKEDEV /mnt/dev
chmod 755 /mnt/dev/MAKEDEV
chmod 500 /mnt/sbin/init
chmod 555 /mnt/sbin/fsck /mnt/sbin/mount /mnt/sbin/halt
chmod 555 /mnt/bin/sh /mnt/bin/sync
chmod 6555 /mnt/sbin/restore
#
# create the devices nodes
#
cd /mnt/dev
./MAKEDEV std
./MAKEDEV da0
./MAKEDEV da1
./MAKEDEV da2
./MAKEDEV sa0
./MAKEDEV pty0
cd /
#
# create minimum file system table
#
cat > /mnt/etc/fstab <<EOM
/dev/fd0a / ufs rw 1 1
EOM
#
# create minimum passwd file
#
cat > /mnt/etc/passwd <<EOM
root:*:0:0:Charlie &:/root:/bin/sh
EOM
cat > /mnt/etc/master.passwd <<EOM
root::0:0::0:0:Charlie &:/root:/bin/sh
EOM
chmod 600 /mnt/etc/master.passwd
chmod 644 /mnt/etc/passwd
/usr/sbin/pwd_mkdb -d/mnt/etc /mnt/etc/master.passwd
#
# umount the floppy and inform the user
#
/sbin/umount /mnt
echo "The floppy has been unmounted and is now ready."
关键问题是: 您的硬件是否幸免于难? 由于已经做好了定期的备份工作, 旖旎并不需要担心软件的问题。
如果硬件已经损毁, 这些部分应该在尝试使用计算机之前换掉。
如果硬件还能用, 检查一下您的软盘。 如果使用定制的引导软盘, 启动单用户模式 (在 boot: 提示后输入 -s)。 跳过下面一段。
如果您使用 boot.flp 和 fixit.flp 软盘, 请继续阅读。 将 boot.flp 软盘插到计算机的第一个软驱并启动机器。 此时, 最初的安装菜单将显示在屏幕上。 选择 Fixit--Repair mode with CDROM or floppy. 选项。 在得到提示后插入 fixit.flp 。 restore 以及其他需要的程序, 可以在 /mnt2/rescue (对于 FreeBSD 5.2 之前的版本, 则是 /mnt2/stand)。
分别恢复每一个文件系统
试着 mount 上您的第一个磁盘的 root 分区(例如: mount /dev/da0a /mnt)。假如这个磁盘标签已经损坏,使用 disklabel 来重新分割并分配磁盘标签(利用您以前保留下来的数据)。使用 newfs 来建立文件系统,并重新挂上软盘读写的 root 分区 (mount -u -o rw /mnt)。然后使用备份程序及备份磁带来修复文件系统 (例如: restore vrf /dev/sa0)。最后 Unmount 这个文件系统 (例如: umount /mnt)。对于每个损坏的文件系统都重复一次。
当您的系统正常启动后,将您的数据备份到新的磁带。任何造成数据丢失的 的灾难都可能再次发生。现在花一些时间,也许可以使您免于下次的灾难。
除了你的物理磁盘以外,插入你计算机的: 软盘 CDs,硬盘驱动器,等等;其它磁盘格式是不被 FreeBSD - virtual disks支持的。
这还包括网络文件系统,例如 Network File System 和 Coda, 基于内存的 文件系统和后备文件系统。
按照你运行的 FreeBSD 版本,你可以使用不同的工具来创建和使用 后备文件系统和内存文件系统。
Note: FreeBSD 4.X 用户可以使用 MAKEDEV(8) 来创建需要的设备。 FreeBSD 5.0 和更新的版本使用 devfs(5) 来创建设备节点,对用户来说是透明的。
应用程序 vnconfig(8) 可以配置和启用 vnode 伪磁盘设备。 一个 vnode 代表一个文件。这就意味 使用 vnconfig(8) 可以用来创建和操作一个文件系统。 也可以在文件中挂接一个软盘或 CD 映像。
要使用 vnconfig(8),你需要在内核配置文件中 vn(4) 的支持:
pseudo-device vn
挂接一个存在的文件系统映像:
Example 16-4. 使用 vnconfig 来挂接一个存在的文件系统映像在 FreeBSD 4.X 系统上。
# vnconfig vn0 diskimage # mount /dev/vn0c /mnt
使用 vnconfig(8) 创建一个新的文件系统映像:
Example 16-5. 使用 vnconfig 创建新的文件后援磁盘
# dd if=/dev/zero of=newimage bs=1k count=5k
5120+0 records in
5120+0 records out
# vnconfig -s labels -c vn0 newimage
# disklabel -r -w vn0 auto
# newfs vn0c
Warning: 2048 sector(s) in last cylinder unallocated
/dev/vn0c: 10240 sectors in 3 cylinders of 1 tracks, 4096 sectors
5.0MB in 1 cyl groups (16 c/g, 32.00MB/g, 1280 i/g)
super-block backups (for fsck -b #) at:
32
# mount /dev/vn0c /mnt
# df /mnt
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/vn0c 4927 1 4532 0% /mnt
在 FreeBSD 5.X 系统中使用应用程序 mdconfig(8) 被用来配置和启用内存磁盘,md(4),使用 mdconfig(8)你需要在你的内核配置文件中添加 md(4) 模块来支持它:
device md
mdconfig(8) 命令支持三种类型的内存后备虚拟磁盘: 使用 malloc(9),来分配内存磁盘,内存磁盘作为文件或作为 备用的交换分区。一种使用方式是在文件中来挂接一个软盘和 CD 映像。
挂接一个存在的文件系统映像:
Example 16-6. 在 FreeBSD 5.X 中使用 mdconfig 命令来挂接一个存在的文件系统映像。
# mdconfig -a -t vnode -f diskimage -u 0 # mount /dev/md0 /mnt
使用 mdconfig(8) 来创建一个新的文件系统映像:
Example 16-7. 使用 mdconfig 创建一个新的文件后援磁盘
# dd if=/dev/zero of=newimage bs=1k count=5k
5120+0 records in
5120+0 records out
# mdconfig -a -t vnode -f newimage -u 0
# disklabel -r -w md0 auto
# newfs md0c
/dev/md0c: 5.0MB (10240 sectors) block size 16384, fragment size 2048
using 4 cylinder groups of 1.27MB, 81 blks, 256 inodes.
super-block backups (for fsck -b #) at:
32, 2624, 5216, 7808
# mount /dev/md0c /mnt
# df /mnt
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/md0c 4846 2 4458 0% /mnt
如果你没有使用 -u 选项指定一个单位号 mdconfig(8) 将使用 md(4) 自动为它选择一个未使用的设备。 分配给它的单位名将被输出到标准输出设备像 md4。想得到更多的关于 mdconfig(8) 的信息请参考手册页。
Note: 从 FreeBSD 5.1-RELEASE 开始, bsdlabel(8) 程序代替了旧版的 disklabel(8) 程序。相应的 bsdlabel(8) 中的许多陈旧的选项和参数也被取消; 在上面的例子中选项 -r 应该被删掉。想获得更多的信息, 请参考 bsdlabel(8) 的手册页。
应用程序 mdconfig(8) 是非常有作的,然而它 需要许多命令行来创建一个 file-backed 文件系统。 FreeBSD 5.0 也提供了一个被称作 mdmfs(8) 的工具, 这个程序配置一个 md(4) 磁盘使用 mdconfig(8),在它上面安装一个 UFS 文件系统使用 newfs(8),挂接它使用 mount(8)。例如, 如果你想创建和挂接像上面一样的文件系统映像, 简单的执行下面的步骤:
Example 16-8. 使用 mdmfs 命令配置和挂接一个 File-Backed 磁盘
# dd if=/dev/zero of=newimage bs=1k count=5k 5120+0 records in 5120+0 records out # mdmfs -F newimage -s 5m md0 /mnt # df /mnt Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/md0 4846 2 4458 0% /mnt
如果你使用没有加单位号的 md 选项, mdmfs(8) 将使用 md(4) 的自动单位号特性来自动为其 选择一个未使用的设备。更详细的 mdmfs(8),请参考手册页。
md(4) 驱动程序是一个简单有效的手段用来创建 内存文件系统在 FreeBSD 4.X 系统上。malloc(9) 被 用来分配内存。
简单的获得一个文件系统你需要准备,例如: vnconfig(8)
Example 16-9. FreeBSD 4.X 下的 md 内存磁盘
# dd if=newimage of=/dev/md0 5120+0 records in 5120+0 records out # mount /dev/md0c /mnt # df /mnt Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/md0c 4927 1 4532 0% /mnt
更多的详情,请参考 md(4) 手册页。
同样的工具也可以用来创建内存后备式文件系统: mdconfig(8) 或 mdmfs(8)。内存后备文件系统的 内存分配要使用 malloc(9) 来完成。
Example 16-10. 用 mdconfig 创建一个新的内存后备磁盘
# mdconfig -a -t malloc -s 5m -u 1
# newfs -U md1
/dev/md1: 5.0MB (10240 sectors) block size 16384, fragment size 2048
using 4 cylinder groups of 1.27MB, 81 blks, 256 inodes.
with soft updates
super-block backups (for fsck -b #) at:
32, 2624, 5216, 7808
# mount /dev/md1 /mnt
# df /mnt
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/md1 4846 2 4458 0% /mnt
Example 16-11. 用 mdmfs 创建一个新的内存后备磁盘
# mdmfs -M -s 5m md2 /mnt # df /mnt Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/md2 4846 2 4458 0% /mnt
代替使用一个 malloc(9) 后备文件系统,可以使用 swap,正确的替换使用 swap 替换 malloc 在命令行 mdconfig(8) 中。mdmfs(8) 程序默认 (没有 -M 选项) 创建一个 swap-based 磁盘。更多的详情,请参考 mdconfig(8) 和 mdmfs(8) 手册页。
当一个内存后备式文件系统不再使用时,你应该释放掉系统的资源。 每一件要做的事情就是摘掉文件系统,然后使用 mdconfig(8) 把磁盘从系统中分离出来释放看资源。
例如分离和释放所有的资源使用 /dev/md4 命令:
# mdconfig -d -u 4
mdconfig -l 命令可以列出关于配置 md(4) 设备的信息。
在 FreeBSD 4.X 系统中,vnconfig(8) 命令用来分离设备。 例如分离所有的资源使用 /dev/vn4 命令:
# vnconfig -u vn4
FreeBSD 5.0 提供了一个和 Soft Updates 关联的新功能: 文件系统快照
快照允许用户创建指定文件系统的映像,并把它们当做一个文件来对待。 快照文件必须在文件系统正在使用时创建,一个用户对每个文件系统创建的 快照不能大于20个。活动的快照文件被记录在超级块中,所以它们可以在系统 启动的时候一块进行挂接后摘掉。当一个快照不再需要时,可以使用标准的 rm(1) 使用来使其删除。快照可以以任何顺序进行移除,但所有使用 的快照不可能同时进行移除,因为其它的快照将有可能互相引用一些块。
在初始创建时,schg 标志 (看 chflags(1) 手册页) 用来确保 root 用户不能用来写快照文件系统。 unlink(1) 命令是个例外对快照文件来说。 它能够移除 schg 标志位,在不删除快照文件前, 没有必要清除 schg 标志。
快照被 mount(8) 命令创建。放置一个快照 /var 到文件系统 /var/snapshot/snap 使用下面的命令:
# mount -u -o snapshot /var/snapshot/snap /var
作为选择,你也可以使用 mksnap_ffs(8) 来创建一个快照:
# mksnap_ffs /var /var/snapshot/snap
当快照文件被创建好后,可以用于下面一些目的:
有些管理员用文件快照来进行备份, 因为快照可以被转移到 CD 或磁带上。
检查文件系统的完整性, fsck(8) 可以用来检查快照文件。 假设文件系统在挂接后前是一致的, 则会得到一致的结果 (不做修改)。 这是由 fsck(8) 进程在后台完成的。
在快照上运行 dump(8) 程序。 dump 将返回包含文件系统和快照的时间戳。dump(8) 也能够抓取快照,使用 -L 标志可以首先创建快照, 完成 dump 映像之后再自动删除它。
用 mount(8) 来挂接快照作为文件系统的一个冻结的镜像。 要 mount(8) 快照 /var/snapshot/snap 运行:
# mdconfig -a -t vnode -f /var/snapshot/snap -u 4 # mount -r /dev/md4 /mnt
现在你就可以看到挂接在 /mnt 目录下的 /var 文件系统的快照。 每一样东西都保存的像它创建时的状态一样。 唯一例外的是更早的快照文件将表现为长度为 0 的文件。 用完快照文件之后可以把它卸下,使用:
# umount /mnt # mdconfig -d -u 4
想了解更多关于 softupdates 和 文件系统快照的信息, 包括技术说明, 可以访问 Marshall Kirk McKusick 的 WWW 站点 http://www.mckusick.com/。
配额是操作系统的一个可选择的属性,它允许限制用户使用的磁盘空间大小或是 使用的文件数量。这可以防止某个用户占用所有的磁盘空间。
在决定使用磁盘配额前,确信磁盘配额已经在内核中配置好了。只要在在内核 中配置文件中添加下面一行就行了:
options QUOTA
在默认情况下 GENERIC 内核是不会启用这个功能的, 所以必须配置、重建和安装一个定制的内核。请参考 FreeBSD 内核配置 第 8 章 这章了解更多有关内核配置的信息。
接下来,需要在 /etc/rc.conf 中启用磁盘配额。可以 通过添加下面这行来完成:
enable_quotas="YES"
为了更好的控制配额时的启动,还有另外一个可配置的变量。通常 启动时,集成在每个文件系统上的配额会被配额检查程序 quotacheck(8) 自动检查。配额检查功能能够确保在配额数据库中 的数据正确地反映了文件系统的数 据情况。这是一个很耗时间的处理进程,它会影响系统的启动时间。如果 想跳过这一步,可以在文件 /etc/rc.conf 加入 下面这一行来达到目的:
check_quotas="NO"
如果运行的是 3.2-RELEASE 以前的版本,配置比较简单,只需要配置 一个选项,在您的 /etc/rc.conf 中设置下面这行:
check_quotas="YES"
最后,要编辑 /etc/fstab 文件,以在每一个 文件系统基础上雇用磁盘配额。这是启用用户和组配额,或同时启用用户 和组配额的地方。
要在一个文件系统上启用每个用户的配额,可以在 /etc/fstab 里添加 userquota 选项在要雇用配额文件的系统上。例如:
/dev/da1s2g /home ufs rw,userquota 1 2
同样的,要启用组配额,使用 groupquota 选项来代替 userquota 选项。要同时启用用户和组配额,可以这样做:
/dev/da1s2g /home ufs rw,userquota,groupquota 1 2
默认情况下,配额文件是存放在文件系统的以 quota.user 和 quota.group 命名的根目录下。可以查看 fstab(5) 联机手册了解更多信息。即使联机手册 fstab(5) 说中以为配额文件指定其他 的位置,这里并不推荐这样做,因为不同的配额工具不一定遵循这样的规则。
到这儿,可以用新内核重新启动系统。 /etc/rc 将自动 运行适当的命令来创建最初的配额文件,所以并不需要手动来创建任何零长度的配额 文件。
在通常的操作过程中,并不要求手动运行 quotacheck(8)、 quotaon(8), 或 quotaoff(8) 命令,然而可能需要阅读与他们的操作 相似的联机手册。
一旦您配置好了启用配额的系统,可以检查一下它们是真的有用。 可以这样做:
# quota -v
您应该能够看到一行当前正在使用的每个文件系统启用的磁盘配额 使用情况的摘要信息。
现在可以使用 edquota(8) 命令准备启用配额限制。
有几个有关如何强制限制用户或组可以分配到的磁盘空间大小的选项。 您可以限制磁盘存储块的配额, 或文件的数量, 甚至同时限制两者。 这些限制最终可分为两类: 硬限制和软限制。
硬性限制是一种不能越过的限制。 一旦用户达到了系统指定的硬性限制, 他就无法在对应的文件系统分配到更多的资源。 例如, 如果文件系统上分给用户的硬性限制是 500 KB, 而现在已经用掉了 490 KB, 那么这个用户最多还能再分配 10 KB 的空间。 换言之, 如果这时试图再分配 11 KB, 则会失败。
软限制可以被有时间限制性地被越过。这段时间可以被理解为允许限期, 默认是一个星期。如果一个用户延缓时间太长的话,软限制将会变成硬限制, 根本就不允许再继续占用磁盘配额。当用户因到软限制以下时,允许延期将 重新开始计算。
下面是一个运行 edquota(8) 时看到的例子。当 edquota(8) 命令被调用时,会被转移进 EDITOR 环境变量指派的编辑 器中,允许编辑配额限制。如果环境变量没有设置,默认在 vi 编辑器上进行。
# edquota -u test
Quotas for user test:
/usr: kbytes in use: 65, limits (soft = 50, hard = 75)
inodes in use: 7, limits (soft = 50, hard = 60)
/usr/var: kbytes in use: 0, limits (soft = 50, hard = 75)
inodes in use: 0, limits (soft = 50, hard = 60)
在每一个启用了磁盘配额的文件系统上,通常会看到两行。一行是 block 限制,另一行是 inode 限制。简单地改变要修改的配额限制的值。 例如,提高这个用户软限制的数值到 500 ,硬限制到 600 :
/usr: kbytes in use: 65, limits (soft = 50, hard = 75)
to:
/usr: kbytes in use: 65, limits (soft = 500, hard = 600)
当离开编辑器的时候,新的配额限制设置将会被保存。
有时,在 UIDs 的范围上设置配额限制是非常必要的。这可以通过在 edquota(8) 命令后面加上 -p 选项来完成。首先, 给用户分配所需要的配额限制,然后运行命令 edquota -p protouser startuid-enduid。例如,如果 用户 test 已经有了所需要的配额限制,下面的命令 可以被用来复制那些 UIDs 为10,000 到 19,999 的配额限制:
# edquota -p test 10000-19999
更多细节请参考 edquota(8) 手册页。
即可以使用 quota(1) 也可以使用 repquota(8) 命令来检查 配额限制和磁盘使用情况。 quota(1) 命令能够检查单个用户和组的配置 使用情况。只有超级用户才可以检查其它用户的配额和磁盘使用情况。 repquota(8) 命令可以用来了解所有配额和磁盘的使用情况。
下面是一个使用 quota -v 命令后的输出情况:
Disk quotas for user test (uid 1002):
Filesystem usage quota limit grace files quota limit grace
/usr 65* 50 75 5days 7 50 60
/usr/var 0 50 75 0 50 60
前面以 /usr 作为例子。 此用户目前已经比软限制 50 KB 超出了 15 KB, 还剩下 5 天的宽限期。 请注意, 星号 * 说明用户已经超出了其配额限制。
通常, 如果用户没有使用文件系统上的磁盘空间, 就不会在 quota(1) 命令的输出中显示, 即使已经为那个用户指定了配额。 而使用 -v 选项则会显示它们, 例如前面例子中的 /usr/var。
配额能够在 NFS 服务器上被配额子系统强迫使用。在 NFS 客房端, rpc.rquotad(8) 命令可以使用 quota 信息用于 quota(1) 命令,可以允许用户察看它们的 quota 统计信息。
可以这样在 /etc/inetd.conf 中启用 rpc.rquotad:
rquotad/1 dgram rpc/udp wait root /usr/libexec/rpc.rquotad rpc.rquotad
现在重启 inetd:
# kill -HUP `cat /var/run/inetd.pid`
FreeBSD 提供了极好的数据保护措施,防止未受权的数据访问。 文件权限和强制访问控制(MAC)(看 第 15 章) 可以帮助预防在操作系统处于运行状态和计算机加电时未受权的第三方访问数据。 但是,和操作系统强制受权不相关的是,如果黑客有物理上访问计算机的可能, 那他就可以简单的把计算机的硬件安装到另一个系统上拷贝出敏感的数据。
不管怎样,黑客都有可能取得并获取停机时的硬件, GEOM 基于磁盘的加密 (gbde) 能够保护在计算机文件系统上的数据并防止黑客得到重要的信息。 不像 cumbersome 加密方法只加密个别的文件, gbde 透明的加密整个文件系统。 整个硬盘都是加密过的非明文数据。
成为 root
配置 gbde 需要超级用户的权力。
% su - Password:
验证操作系统的版本
gbde(4) 需要 FreeBSD 5.0 或更高的版本。
# uname -r 5.0-RELEASE
在内核配置文件中添加对 gbde(4) 的支持
使用您喜欢的文本编辑器, 在内核配置文件中添加下面一行:
options GEOM_BDE
配置,编译,安装 FreeBSD 内核, 这个过程在 第 8 章 中有详细描述。
重新引导进入新的内核。
下面这个例子假设您添加了一个新的硬盘在您的系统并将拥有一个单独的加密分区。 这个分区将挂接在 /private目录下。 gbde 也可以用来加密 /home 和 /var/mail, 但是这需要更多的复杂命令来执行。
添加新的硬盘
添加新的硬盘到系统中可以查看在 第 16.3 节 中的说明。 这个例子的目的是说明一个新的硬盘分区已经添加到系统中如: /dev/ad4s1c。在例子中 /dev/ad0s1* 设备代表系统中存在的标准 FreeBSD 分区。
# ls /dev/ad* /dev/ad0 /dev/ad0s1b /dev/ad0s1e /dev/ad4s1 /dev/ad0s1 /dev/ad0s1c /dev/ad0s1f /dev/ad4s1c /dev/ad0s1a /dev/ad0s1d /dev/ad4
创建一个目录来保存 gbde Lock 文件
# mkdir /etc/gbde
gbde lock 文件包含了 gbde 需要访问的加密分区的信息。 没有 lock 文件, gbde 将不能解密包含在加密分区上的数据。 每个加密分区使用一个独立的 lock 文件。
初始化 gbde 分区
一个 gbde 分区在使用前必须被初始化, 这个初始化过程只需要执行一次:
# gbde init /dev/ad4s1c -i -L /etc/gbde/ad4s1c
gbde(8) 将打开您的编辑器, 提示您去设置在一个模板文件中的配置变量。 使用 UFS1 或 UFS2,设置扇区大小为 2048:
$FreeBSD: src/sbin/gbde/template.txt,v 1.1 2002/10/20 11:16:13 phk Exp $ # # Sector size is the smallest unit of data which can be read or written. # Making it too small decreases performance and decreases available space. # Making it too large may prevent filesystems from working. 512 is the # minimum and always safe. For UFS, use the fragment size # sector_size = 2048 [...]
gbde(8) 将让您输入两次用来加密数据的密钥短语。 两次输入的密钥必须相同。 gbde 保护您数据的能力依靠您选择输入的密钥的质量。 [10]
gbde init 命令为您的 gbde 分区创建了一个 lock 文件, 在这个例子中存储在 /etc/gbde/ad4s1c中。
Cautiongbde lock 文件必须和加密分区上的内容一块备份。 当一个 lock 文件被独自删除时, 不能确定一个 gbde 分区上的数据被解密过。 没有 lock 文件, 就是合法的磁盘所有者不经过大量细致的工作也将不能访问经过加密分区上的数据, 这是 gbde(8) 在设计时整体上不支持。
把加密分区和内核进行关联
# gbde attach /dev/ad4s1c -l /etc/gbde/ad4s1c
在加密分区的初始化过程中您将被要求提供一个密码短语。 新的加密设备将在 /dev 中显示为 /dev/device_name.bde:
# ls /dev/ad* /dev/ad0 /dev/ad0s1b /dev/ad0s1e /dev/ad4s1 /dev/ad0s1 /dev/ad0s1c /dev/ad0s1f /dev/ad4s1c /dev/ad0s1a /dev/ad0s1d /dev/ad4 /dev/ad4s1c.bde
在加密设备上创建文件系统
当加密设备和内核进行关联后, 您就可以使用 newfs(8) 在此设备上创建文件系统, 使用 newfs(8) 来初始化一个 UFS2 文件系统比初始化一个 UFS1 文件系统还要快,摧荐使用 -O2 选项。
Note: -O2 选项在 FreeBSD 5.1-RELEASE 或更新的版本中是默认的选项。
# newfs -U -O2 /dev/ad4s1c.bde
Note: newfs(8) 命令必须在一个 gbde 分区上执行, 这个分区通过一个存在的 *.bde 设备名进行标识。
挂接加密分区
为加密文件系统创建一个挂接点。
# mkdir /private
挂接加密文件系统。
# mount /dev/ad4s1c.bde /private
校验加密文件系统是否有效
加密的文件系统现在对于 df(1) 应该可见并可以使用。
% df -H Filesystem Size Used Avail Capacity Mounted on /dev/ad0s1a 1037M 72M 883M 8% / /devfs 1.0K 1.0K 0B 100% /dev /dev/ad0s1f 8.1G 55K 7.5G 0% /home /dev/ad0s1e 1037M 1.1M 953M 0% /tmp /dev/ad0s1d 6.1G 1.9G 3.7G 35% /usr /dev/ad4s1c.bde 150G 4.1K 138G 0% /private
每次系统启动后, 在使用加密文件系统前必须和内核重新进行关联, 校验错误和再次挂接。使用的命令必须由 root用户来执行。
关联 gbde 分区到内核
# gbde attach /dev/ad4s1c -l /etc/gbde/ad4s1c
您将被要求提供您在初始化加密 gbde 分区的过程中选定的密码短语。
校验文件系统错误
加密文件系统不能列在 /etc/fstab 文件中进行自动加载, 在加载前必须手动运行 fsck(8) 命令对文件系统进行错误检测。
# fsck -p -t ffs /dev/ad4s1c.bde
挂接加密文件系统
# mount /dev/ad4s1c.bde /private
加密后的文件系统现在可以有效使用。
可以创建一个脚本来自动进行关联、检测、和挂接一个加密分区, 但是为了安全起见,脚本程序中不应该包含 gbde(8) 密码。 取而代之,摧荐这样的脚本要手工来运行, 在要求提供密码时可以通过控制台或 ssh(1)。
gbde(8) 在 CBC 模式上使用 128-bit AES 对扇区进行加密, 每个扇区在硬盘上的加密都使用不同的 AES 密钥。 想了解更多的信息关于 gbde 的设计,包括每个扇区的密钥是怎样从用户提供的密钥短语产生的, 请看 gbde(4)。
sysinstall(8) 是和 gbde 加密设备不兼容的。 在启动 sysinstall(8) 时必须将 *.bde 设备和内核进行分离,否则在初始化探测设备时将引起冲突。 与加密设备进行分离在我们的例子中使用如下的命令:
# gbde detach /dev/ad4s1c
也应该注意,作为 vinum(4) 不能使用 geom(4) 子系统, 您不能同时使用 gbde 和 vinum 卷。
无论您有什么样的磁盘,总会有一些潜在问题:
它们可能容量太小。
它们可能速度太慢。
它们可能也太不可靠。
一些用户采取一些技术来保护他们免与受到这些问题的影响, 例如使用多个, 有些时候甚至是冗余的, 磁盘。
除了支持许多种不同的硬件 RAID 控制器之外, FreeBSD 的基本系统中包括了 Vinum 卷管理器, 它是一个用以实现磁盘驱动器的块设备。
Vinum 提供了比传统磁盘存储更好的灵活性、性能和可靠性, 它还实现了 RAID-0, RAID-1, 以及 RAID-5 并可以单独和组合使用。
这一章对传统磁盘存储的潜在问题进行了简要说明,并介绍了 Vinum 卷管理器。
Vinum 是一个所谓的 卷管 理工具, 是能够解决这三个问题的虚拟磁盘驱动程序。 让我们来仔细地看看这些问题。已经有针对这些问题的很多方法被提出和实现了:
磁盘越大,存储的数据也就越多。您经常会发现您需要 一个比您可使用的磁盘大得多的文件系统。 无可否认,这个问题 已经没有十年前那样严峻了,但它仍然存在。通过创建一个在许多 磁盘上存储数据的抽象设备,一些系统可以解决这个问题。
现代系统经常需要用一个高度并发的方式来访问数据。 例如,巨大的FTP 或HTTP 服务器可以支持数以千计的并发会话, 可以有多个连到外部世界的100 Mbit/s , 这远远地超过了绝大多数磁盘的数据传输速率。
当前的磁盘驱动器最高可以以70 MB/s的速度传输数据, 但这个值在一个有许多不受约束的进程访问一个驱动器的环境中变得并不重要, 它们可能只完成了这些值的一小部分。这样一种情况下,从磁盘子 系统的角度来看问题就更加有趣:重要的参数是在子系统上的负 荷,换句话说是传输占用了驱动器多少时间。
在任何磁盘传输中, 驱动器必须先寻道, 等待磁头访问第一个扇区, 然后执行传输. 这些动作看起来可能很细小: 我们不会感有任何中断。
假设传输10 kB数据, : 现在的高性能磁盘平均寻道时间是3.5ms。 最快的驱动器可以旋转在15,000 rpm,, 所以平均寻址时间为2ms. 在70 MB/s的速度传输时, 数据的传输时间大约150 μs, 几乎无法和寻址时间相比. 在这样一种情况下, 高效的传输也会降低到 1 MB/s 显然传输的快慢依赖与所传输数据的大小。
对于这个瓶颈的一般和明显的解决方法是采用 “多个磁盘”:而不是只使用一个大磁盘, 它使用几个比较小的磁盘联合起来形成一个大的磁盘. 每个磁盘都可以独立地进行传输数据,所以通过使用多个磁盘 大大提高了数据吞吐量。
当然,所要求的吞吐量的提高要比磁盘的数量小得多。 尽管每个驱动器并行传输数据,但没有办法确保请求能够平均 分配到每个驱动器上。不可避免一个驱动器的负载可能比另一个要高得多。
磁盘的负载平衡很大程度依赖于驱动器上数据的共享方式. 在下面的讨论中, 将磁盘存储想象成一个巨大的数据扇区,像一本书的页 那样用编号来设定地址. 最明显的方法是把虚拟磁盘分成许多连续的扇区组, 每个扇区大小就是独立的磁盘大小,用这种方法来存储数据, 就像把一本厚厚的书分成很多小的章节。 这个方法叫做 串联 它有一个优点就是磁盘不需要有任何特定的大小关系。 当访问到的虚拟磁盘根据它的地址空间来分布的时候, 它能工作得很好。 当访问集中在一个比较小的区域的时候,性能的提高没有显著的改进。 图 17-1 举例说明了用串联组织的方式来分配存储单元的顺序。
另外一种影射方法是把地址空间分布在比较小的容量相同的磁盘上, 从而能够在不同的设备上存储它们。例如,前256 个扇区可能存储在第一 个磁盘上,接着的256 个扇区存储在另一个磁盘上等等。 写满最后一个磁 盘后,进程会重复以前的工作,直到所有的磁盘被写满。这个影射叫做 分段(striping) 或者 RAID-0 [11]. 分段要求很精确地寻址,通过多个磁盘进行数据传输的时候,它 可能会引起额外的I/O 负载,但它也可能提供更多的连续负载。 图 17-2 显示了用分段形式分配的存储单元的顺序。
T当前磁盘的最后一个问题是它们不太可靠。虽然磁盘驱动器 的可靠性在过去几年有了很大的提高,它们仍然是会损坏的服务器的 最核心组件。当它们发生故障的时候, 结果可能是灾难性的: 替换一个坏的磁盘驱动器,然后恢复数据可能要花费几天时间。
解决这个问题的传统方法是建立镜象 镜象, 在不同的物理硬件上对数据做两个拷贝。 由于RAID 的出现levels, 所以这个技术也被叫做 第一级RAID 或者 RAID-1. 任何写到卷的数据也会被写到镜象上,所 以可以从任何一个拷贝读取数据,如果其中有一个失败了,数据就可以 在其他驱动器上访问到。
镜象有两个问题:
价格. 它需要两倍的存储容量。
性能影响。 写入操作必须在两个驱动器上执行,所以它们 花费两倍的带宽。读取数据并不会影响性能:看起来它们会更快。
一个 可选的方案采用 parity, 其实现了 RAID 2, 3, 4 和 5. 而其中, RAID-5 是我们最感兴趣的。 在 Vinum 的实现中, 这是一个条带组织结构的变体, 其中, 每一个条带中都以一个专用的块, 来保存其它块的奇偶校验值。 这样, RAID-5 plex 除了在每个块中都包含了一个奇偶校验块之外, 实现 RAID-5 时也就和普通的条带 plex 一样了。 作为 RAID-5 的一项要求, 奇偶校验块在每一个条带中的顺序都是不同的。 数据块的编号, 决定了它的相对块号。
与镜像相比, RAID-5 最显著的优势在于只需使用少得多的存储空间。 读取类似于条带式存储的组织, 但写入会慢得多, 大约仅相当于读性能的 25%。 如果一个驱动器失效, 则阵列仍然可以在降级的模式运行: 读取来自正常的驱动器数据的操作照常进行, 但读取失效的驱动器的数据, 则来自于余下驱动器上相关的计算结果。
为了解决这些问题,Vinum 提出了一个四层的目标结构:
T最显著的目标是虚拟磁盘, 叫做 卷(volume). 卷本质上与一个UNIX 磁盘 驱动器有同样的属性,虽然它们是有些不太一样。它们没有大小的限制。
卷下面是 plexes, 每一个表示卷的所有地址空间。在层次结构中的这个水平能够提供 冗余功能。可以把plex 想象成用一个镜象排列的方式组织起来的 独立磁盘,每个都包含同样的数据。
由于Vinum 存在于UNIX 磁盘存储框架中,所以它也可能 使用UNIX 分区作为多个磁盘plex 的组成部分, 但事实上这并不可靠:UNIX 磁盘只能有有限数量的分区。 取而代之,Vinum 把一个简单的UNIX 分区 (the drive) 分解成叫做subdisks的相邻区域, 它可以使用这个 来为plex 建立块。
Subdisks 位于 Vinum 驱动器上, 当前的UNIX 分区。Vinum 驱动器可以包含很多的subdisks。 除了驱动器开始的一小块区域用来存储配置和描述信息以外,整个 驱动器都可以用于存储数据。
下面的章节描述了这些目标提供了Vinum 所要求的功能的方法。
Vinum 通过给一个卷连上多个plex 来完成镜象的功能。 每个plex 是一个在一个卷中的数据的描述。一个卷可以包含一个 到八个plex。
Although虽然一个plex 描述了一个卷的所有数据,, 但可能描述的部分被物理地丢失了。可能是设计的问题 (没有为plex 部分定义一个subdisk)也可能是意外的故障 (由于驱动器的故障导致)。只要至少有一个plex 能够为 卷的完全地址范围提供数据,卷就能够正常工作。
Vinum 在plex 水平既执行串联也执行分段:
一个串连的plex轮流使用 每个subdisk 的地址空间。
一个 分段的plex 在每个subdisk 上 划分数据. Subdisk 必须是大小一样的,为了从一个连接的plex 中 区分开它,必须至少有两个subdisk。
FreeBSD 5.4提供的Vinum 版本能实现两种plex:
串联的plex 更加灵活:它们可以包含任何数量的subdisk, subdisk 也可能有不同的长度。Plex 可以通过添加额外的subdisk 来得到扩展。 它们需要更少的 CPU 时钟相对分段plexes, 尽管 CPU 上的负载差异是不可测量的。 另一方面,它们的负载可能不平衡,一个磁盘可能负载很重, 而其他的可能很空闲。
分段(RAID-0) plexes 的最大优点是 它们减少了负载不平衡的情况: 通过选择一个最合适大小的分段 (大约是256 kB), 您甚至可以在各个组成的驱动器上降低负载 . 这种方法的缺点是在subdisk 上受到非常复杂的编码限制 : 它们必须是同样大小, 通过添加新的subdisk 来扩展一个plex 是非常复杂的,以至Vinum 当前没有实现它. Vinum 利用一个额外 的,代价不高的限制:一个分段的plex 必须有至少两个subdisk, 因为否则的话,它是无法从一个连接的plex 进行区分的。
表 17-1 总结一下每个plex 组织 的优点和缺点.
Vinum 维护着一个描述以一个独立系统为目标 配置数据库的。最初,用户通过vinum(8) 工具的帮助从一个或多个配置文件创建配置数据库。Vinum 在它的控制 下在每个磁盘(Vinum 叫 device) 上存储一个 它的配置数据库的拷贝。这个数据库在每个状态变化的时候被升级, 以便能精确地回复每个Vinum 目标的状态。
配置文件描述了独立的 Vinum.一个简单卷的定义可能是这样的:
drive a device /dev/da3h
volume myvol
plex org concat
sd length 512m drive a
这个文件描述了四个Vinum 目标:
drive 行描述了一个磁盘分区(驱动器) 和与下面的硬件相关的它的位置。它给出了一个符号名 a. 这个与设备名称分开的符号名允许 磁盘从一个位置移动到另一个位置而不会搞混。
volume 行描述了一个卷。 唯一的必须属性是名称,在这个例子中是 myvol.
plex 行定义了一个plex。 唯一需要的参数是组织,在这个例子中是 concat. 没有名称是必然的: 系统自动通过添加suffix .pxpx 来从卷名称产生一个名字,这里的x 是在卷中的plex 的编号。而这个plex 将被 叫做myvol.p0。
sd 行描述了一个subdisk。 最小的说明是存储subdisk 的驱动器名称,和subdisk 的长度。 对于plex,没有名称也是必然的:系统自动通过添加 suffix .sx 来分配源自plex 的名称,这里 x是plex 中subdisk 的编号。 Vinum 给这个subdisk 命名为myvol.p0.s0。
处理完这个文件后, vinum(8)会产生下面的输出:
# vinum -> create config1
Configuration summary
Drives: 1 (4 configured)
Volumes: 1 (4 configured)
Plexes: 1 (8 configured)
Subdisks: 1 (16 configured)
D a State: up Device /dev/da3h Avail: 2061/2573 MB (80%)
V myvol State: up Plexes: 1 Size: 512 MB
P myvol.p0 C State: up Subdisks: 1 Size: 512 MB
S myvol.p0.s0 State: up PO: 0 B Size: 512 MB
这个输出显示了vinum(8)简要的列表格式。 图图 17-4中它用图形来表示这一点。
下面这个图显示了一个由按顺序排列的subdisk 组成的plex。 在这个小小的例子中,卷包含一个plex,plex 包含一个subdisk。
这个卷本身和普通的磁盘分区相比并没有什么特别的优越性, 它包含了一个 plex, 因此不是冗余的。 这个 plex 中包括了一个子磁盘, 因此这和从磁盘分区分配存储没什么两样。 接下来的几节, 将介绍一些更有用的配置方法。
卷的容错性可以通过镜像来提高。 在配置镜像卷时, 确保 plex 分布在不同的驱动器上十分重要, 这样一个驱动器坏掉时, 就不会同时影响两个 plex。 下面的配置将映射卷:
drive b device /dev/da4h
volume mirror
plex org concat
sd length 512m drive a
plex org concat
sd length 512m drive b
上面的例子中, 并不需要再次指定驱动器 a, 因为 Vinum 监控所有其配置数据库的对象。 完成定义之后, 配置如下所示:
Drives: 2 (4 configured)
Volumes: 2 (4 configured)
Plexes: 3 (8 configured)
Subdisks: 3 (16 configured)
D a State: up Device /dev/da3h Avail: 1549/2573 MB (60%)
D b State: up Device /dev/da4h Avail: 2061/2573 MB (80%)
V myvol State: up Plexes: 1 Size: 512 MB
V mirror State: up Plexes: 2 Size: 512 MB
P myvol.p0 C State: up Subdisks: 1 Size: 512 MB
P mirror.p0 C State: up Subdisks: 1 Size: 512 MB
P mirror.p1 C State: initializing Subdisks: 1 Size: 512 MB
S myvol.p0.s0 State: up PO: 0 B Size: 512 MB
S mirror.p0.s0 State: up PO: 0 B Size: 512 MB
S mirror.p1.s0 State: empty PO: 0 B Size: 512 MB
图 17-5 以图形方式展示了其结构。
这个例子中, 每一个 plex 包含了完整的 512 MB 地址空间。 在前面的例子中, plex 则只包括一个子盘。
恰面例子中的镜像卷要比没有镜像的卷具有更好的容灾能力, 但它的性能要差一些: 每一次写入卷时, 需要同时写道两个驱动器上, 因而也就需要更大的磁盘访问带宽。 如果希望非常好的性能, 则需要另外一种方式: 不做镜像, 而将数据分成条带放到尽可能多的、不同的磁盘上。 下面给出了一个跨越四个磁盘驱动器的 plex 卷:
drive c device /dev/da5h
drive d device /dev/da6h
volume stripe
plex org striped 512k
sd length 128m drive a
sd length 128m drive b
sd length 128m drive c
sd length 128m drive d
和之前类似, 并不需要定义 Vinum 已经知道的驱动器。 在完成定义之后, 将得到如下配置:
Drives: 4 (4 configured)
Volumes: 3 (4 configured)
Plexes: 4 (8 configured)
Subdisks: 7 (16 configured)
D a State: up Device /dev/da3h Avail: 1421/2573 MB (55%)
D b State: up Device /dev/da4h Avail: 1933/2573 MB (75%)
D c State: up Device /dev/da5h Avail: 2445/2573 MB (95%)
D d State: up Device /dev/da6h Avail: 2445/2573 MB (95%)
V myvol State: up Plexes: 1 Size: 512 MB
V mirror State: up Plexes: 2 Size: 512 MB
V striped State: up Plexes: 1 Size: 512 MB
P myvol.p0 C State: up Subdisks: 1 Size: 512 MB
P mirror.p0 C State: up Subdisks: 1 Size: 512 MB
P mirror.p1 C State: initializing Subdisks: 1 Size: 512 MB
P striped.p1 State: up Subdisks: 1 Size: 512 MB
S myvol.p0.s0 State: up PO: 0 B Size: 512 MB
S mirror.p0.s0 State: up PO: 0 B Size: 512 MB
S mirror.p1.s0 State: empty PO: 0 B Size: 512 MB
S striped.p0.s0 State: up PO: 0 B Size: 128 MB
S striped.p0.s1 State: up PO: 512 kB Size: 128 MB
S striped.p0.s2 State: up PO: 1024 kB Size: 128 MB
S striped.p0.s3 State: up PO: 1536 kB Size: 128 MB
这个卷在 图 17-6 中给出。 条带的阴影部分, 表示在 plex 地址空间中的位置: 颜色最浅的在最前面, 而最深的在最后。
如果硬件足够多, 也能够构建比标准 UNIX 分区同时提高了容灾性和性能的卷。 典型的配置文件类似:
volume raid10
plex org striped 512k
sd length 102480k drive a
sd length 102480k drive b
sd length 102480k drive c
sd length 102480k drive d
sd length 102480k drive e
plex org striped 512k
sd length 102480k drive c
sd length 102480k drive d
sd length 102480k drive e
sd length 102480k drive a
sd length 102480k drive b
第二个 plex 中的子盘和第一个 plex 中的错开了两个驱动器: 这能够帮助确保即使同时访问两个驱动器, 写操作也不会同时发生在同一个盘上。
图 17-7 给出了该卷的结构。
如前面所描述的那样, Vinum 会给 plex 和子盘指定默认的名字, 而这些名字也是可以定制的。 不推荐盖面默认的名字: 使用允许给对象任意命名的 VERITAS 卷管理器的经验证明, 这一灵活性并没有带来太多的好处, 相反, 它很容易导致对象的混淆。
名字中可以包括任何非空白的字符, 但一般来说, 建议只使用字母、 数字和下划线。 卷、 plex, 以及子盘的名字, 可以包含最多 64 个字符, 而驱动器的名字, 则最长可以使用 32 个字符。
Vinum 对象会在 /dev/vinum 之下生成设备接点。 前述的配置将使 Vinum 创建以下设备节点:
控制设备 /dev/vinum/control 和 /dev/vinum/controld, 分别由 vinum(8) 和 Vinum 服务使用。
每一个卷缩对应的块设备和字符设备。 这些是 Vinum 中用到的主要设备。 块设备的名字就是卷的名字, 而字符设备的名字, 则遵循 BSD 的习惯, 在卷的名字前面增加 r。 因此, 前面的配置对应的块设备是 /dev/vinum/myvol, /dev/vinum/mirror, /dev/vinum/striped, /dev/vinum/raid5 和 /dev/vinum/raid10, 而字符设备则是 /dev/vinum/rmyvol, /dev/vinum/rmirror, /dev/vinum/rstriped, /dev/vinum/rraid5 和 /dev/vinum/rraid10。 显然, 这有时会造成问题: 有可能有两个卷, 分别叫做 r 和 rr, 这样, 在创建设备节点 /dev/vinum/rr 时就会产生冲突: 它到底是卷 r 对应的字符设备, 还是卷 rr 的块设备? 目前, Vinum 并不处理这样的冲突: 先定义的卷, 将得到希望的设备名。
一个包含每个驱动器对应项的 /dev/vinum/drive 目录。 这些项事实上是指向对应磁盘节点的符号连接。
包含每个卷对应项的 /dev/vinum/volume 目录。 每一个 plex 对应一个子目录, 而这些目录中, 则是组成它们的子盘。
目录 /dev/vinum/plex, /dev/vinum/sd, 以及 /dev/vinum/rsd, 它们中包括了每一个 plex 的设备节点, 以及每一个子盘的块设备和字符设备。
例如, 考虑下面的配置文件:
drive drive1 device /dev/sd1h
drive drive2 device /dev/sd2h
drive drive3 device /dev/sd3h
drive drive4 device /dev/sd4h
volume s64 setupstate
plex org striped 64k
sd length 100m drive drive1
sd length 100m drive drive2
sd length 100m drive drive3
sd length 100m drive drive4
处理这个文件之后, vinum(8) 将在 /dev/vinum 中建立下面的结构:
brwx------ 1 root wheel 25, 0x40000001 Apr 13 16:46 Control
brwx------ 1 root wheel 25, 0x40000002 Apr 13 16:46 control
brwx------ 1 root wheel 25, 0x40000000 Apr 13 16:46 controld
drwxr-xr-x 2 root wheel 512 Apr 13 16:46 drive
drwxr-xr-x 2 root wheel 512 Apr 13 16:46 plex
crwxr-xr-- 1 root wheel 91, 2 Apr 13 16:46 rs64
drwxr-xr-x 2 root wheel 512 Apr 13 16:46 rsd
drwxr-xr-x 2 root wheel 512 Apr 13 16:46 rvol
brwxr-xr-- 1 root wheel 25, 2 Apr 13 16:46 s64
drwxr-xr-x 2 root wheel 512 Apr 13 16:46 sd
drwxr-xr-x 3 root wheel 512 Apr 13 16:46 vol
/dev/vinum/drive:
total 0
lrwxr-xr-x 1 root wheel 9 Apr 13 16:46 drive1 -> /dev/sd1h
lrwxr-xr-x 1 root wheel 9 Apr 13 16:46 drive2 -> /dev/sd2h
lrwxr-xr-x 1 root wheel 9 Apr 13 16:46 drive3 -> /dev/sd3h
lrwxr-xr-x 1 root wheel 9 Apr 13 16:46 drive4 -> /dev/sd4h
/dev/vinum/plex:
total 0
brwxr-xr-- 1 root wheel 25, 0x10000002 Apr 13 16:46 s64.p0
/dev/vinum/rsd:
total 0
crwxr-xr-- 1 root wheel 91, 0x20000002 Apr 13 16:46 s64.p0.s0
crwxr-xr-- 1 root wheel 91, 0x20100002 Apr 13 16:46 s64.p0.s1
crwxr-xr-- 1 root wheel 91, 0x20200002 Apr 13 16:46 s64.p0.s2
crwxr-xr-- 1 root wheel 91, 0x20300002 Apr 13 16:46 s64.p0.s3
/dev/vinum/rvol:
total 0
crwxr-xr-- 1 root wheel 91, 2 Apr 13 16:46 s64
/dev/vinum/sd:
total 0
brwxr-xr-- 1 root wheel 25, 0x20000002 Apr 13 16:46 s64.p0.s0
brwxr-xr-- 1 root wheel 25, 0x20100002 Apr 13 16:46 s64.p0.s1
brwxr-xr-- 1 root wheel 25, 0x20200002 Apr 13 16:46 s64.p0.s2
brwxr-xr-- 1 root wheel 25, 0x20300002 Apr 13 16:46 s64.p0.s3
/dev/vinum/vol:
total 1
brwxr-xr-- 1 root wheel 25, 2 Apr 13 16:46 s64
drwxr-xr-x 3 root wheel 512 Apr 13 16:46 s64.plex
/dev/vinum/vol/s64.plex:
total 1
brwxr-xr-- 1 root wheel 25, 0x10000002 Apr 13 16:46 s64.p0
drwxr-xr-x 2 root wheel 512 Apr 13 16:46 s64.p0.sd
/dev/vinum/vol/s64.plex/s64.p0.sd:
total 0
brwxr-xr-- 1 root wheel 25, 0x20000002 Apr 13 16:46 s64.p0.s0
brwxr-xr-- 1 root wheel 25, 0x20100002 Apr 13 16:46 s64.p0.s1
brwxr-xr-- 1 root wheel 25, 0x20200002 Apr 13 16:46 s64.p0.s2
brwxr-xr-- 1 root wheel 25, 0x20300002 Apr 13 16:46 s64.p0.s3
虽然 plex 和子盘一般并不推荐指定名字, 但还是必须给 Vinum 驱动器命名。 这样, 当把驱动器转移到不同的地方时, 它仍然能够被自动地识别出来。 驱动器名最长可以包含 32 个字符。
对于系统而言, 卷和磁盘是一样的。 唯一的例外是, 与 UNIX 驱动器不同, Vinum 并不对卷进行分区, 因而它也就不包含分区表。 这导致修改了某些磁盘工具, 特别是 newfs(8), 它会试图将 Vinum 卷名当作分区标识。 例如, 磁盘驱动器的名字可能是 /dev/ad0a 或 /dev/da2h。 这些名字分别表达在第一个 (0) IDE (ad) 磁盘上的第一个分区 (a), 以及第三个 (2) SCSI 磁盘 (da) 上的第八个分区 (h)。 于此相反, Vinum 卷可能叫做 /dev/vinum/concat, 这个名字和分区名没有什么关系。
一般而言, newfs(8) 会试图解释磁盘的名字, 如果它无法理解这个名字, 则会给出错误提示。 例如:
# newfs /dev/vinum/concat newfs: /dev/vinum/concat: can't figure out file system partition
Note: 对于 FreeBSD 5.0 之前的版本:
要在卷上创建文件系统, 应使用 newfs(8) 的 -v 参数:
# newfs -v /dev/vinum/concat
在 GENERIC 内核中, 并不包含 Vinum。 可以编译一个定制的包含 Vinum 的内核, 然而并不推荐这样做。 启动 Vinum 的标准方法, 是使用内核模块 (kld)。 甚至不需要使用 kldload(8) 来启动 Vinum: 在启动 vinum(8) 时, 它会检查这一模块是否已经加载, 如果没有, 则会自动地加载它。
Vinum 将配置信息, 采用与配置文件一样的形式来存放到磁盘分区上。 当从配置数据库中读取时, Vinum 会识别一系列在配置文件中不可用的关键字。 例如, 磁盘配置文件可能包含下面的文字:
volume myvol state up volume bigraid state down plex name myvol.p0 state up org concat vol myvol plex name myvol.p1 state up org concat vol myvol plex name myvol.p2 state init org striped 512b vol myvol plex name bigraid.p0 state initializing org raid5 512b vol bigraid sd name myvol.p0.s0 drive a plex myvol.p0 state up len 1048576b driveoffset 265b plexoffset 0b sd name myvol.p0.s1 drive b plex myvol.p0 state up len 1048576b driveoffset 265b plexoffset 1048576b sd name myvol.p1.s0 drive c plex myvol.p1 state up len 1048576b driveoffset 265b plexoffset 0b sd name myvol.p1.s1 drive d plex myvol.p1 state up len 1048576b driveoffset 265b plexoffset 1048576b sd name myvol.p2.s0 drive a plex myvol.p2 state init len 524288b driveoffset 1048841b plexoffset 0b sd name myvol.p2.s1 drive b plex myvol.p2 state init len 524288b driveoffset 1048841b plexoffset 524288b sd name myvol.p2.s2 drive c plex myvol.p2 state init len 524288b driveoffset 1048841b plexoffset 1048576b sd name myvol.p2.s3 drive d plex myvol.p2 state init len 524288b driveoffset 1048841b plexoffset 1572864b sd name bigraid.p0.s0 drive a plex bigraid.p0 state initializing len 4194304b driveoff set 1573129b plexoffset 0b sd name bigraid.p0.s1 drive b plex bigraid.p0 state initializing len 4194304b driveoff set 1573129b plexoffset 4194304b sd name bigraid.p0.s2 drive c plex bigraid.p0 state initializing len 4194304b driveoff set 1573129b plexoffset 8388608b sd name bigraid.p0.s3 drive d plex bigraid.p0 state initializing len 4194304b driveoff set 1573129b plexoffset 12582912b sd name bigraid.p0.s4 drive e plex bigraid.p0 state initializing len 4194304b driveoff set 1573129b plexoffset 16777216b
这里最明显的区别是, 指定了配置的位置信息、名称 (这些在配置文件中还是可用的, 但不鼓励用户自行指定) 以及状态信息 (这是用户不能指定的)。 Vinum 并不在配置信息中保存关于驱动器的信息: 它会扫描已经配置的磁盘驱动器上包含 Vinum 标识的分区。 这使得 Vinum 能够在 UNIX 驱动器被指定了不同的 ID 时也能够正确识别它们。
要在引导系统时自动启动 Vinum, 需要在 /etc/rc.conf 中加入下面的配置:
start_vinum="YES" # set to YES to start vinum
如果您的系统中没有 /etc/rc.conf, 创建一个并加入这些设置就可以了。 这样, 系统就会在启动时自动加载 Vinum 的 kld, 并启动配置中所提到的所有对象。 这是在挂接文件系统之前进行的, 因此, fsck(8) 和挂接文件系统都能够自动地在 Vinum 卷上进行。
当使用 vinum start 命令来启动 Vinum 时, Vinum 会从某一个 Vinum 驱动器中读取配置数据库。 正常情况下, 每个驱动器上都包含了同样的配置数据库副本, 因此从哪个驱动器上读取是无所谓的。 但是, 在系统崩溃之后, Vinum 就必须检测哪一个驱动器上的配置数据库是最新的, 并从上面读取配置。 如果需要, 它会更新其它驱动器上的配置。
如果文件系统使用完全镜像的 Vinum 配置, 有时也会希望根文件系统也作了镜像。 这种配置要比镜像其它文件系统麻烦一些, 因为:
根文件系统在引导过程中很早的时候就必须处于可用状态, 因此 Vinum 的基础设施在这一时刻就应该可用了。
包含根文件系统的卷, 同时也保存了系统的引导程序和内核, 因此它们必须能够被宿主系统的内建工具 (例如 PC 机的 BIOS) 识别, 而通常是没办法让它们了解 Vinum 的细节的。
下面几节中, 术语 “根卷” 标识包含根文件系统的 Vinum 卷。 把这个卷命名为 "root" 可能是个不错的主意, 不过从技术上说, 并不严格地要求这样做。 不过, 接下来的命令例子都使用这个名字。
有许多关于它的尺度:
Vinum 必须在启动时可以被内核使用。 因此, 在 第 17.8.1.1 节 中所介绍的方法, 也就无法适应这一任务的需要了。 在接下来的配置中, 也 不能 设置 start_vinum 参数。 第一种方法是通过将 Vinum 静态联编到内核中来实现, 这样, 它就在任何时候都可用了, 虽然一般并不需要这样。 另一种方法是通过 /boot/loader (第 12.3.3 节) 来尽早加载 vinum 内核模块, 这一操作发生在内核加载之前。 这可以通过将下面的配置:
vinum_load="YES"
加入到 /boot/loader.conf 文件中来实现。
Vinum 必须尽早初始化, 因为需要由它来提供根文件系统的卷。 默认情况下, Vinum 的内核部分并不主动地查找可能包含 Vinum 卷信息的驱动器, 而会等待管理员 (或者某个启动脚本) 来执行 vinum start 命令。
Note: 下面介绍的是 FreeBSD 5.X 和更高版本所需的配置。 对于 FreeBSD 4.X 的配置方法与此不同, 在 第 17.9.5 节 中有所买噢书。
通过将下面的配置:
vinum.autostart="YES"
加入 /boot/loader.conf, Vinum 将在内核部分初始化的过程中, 自动地扫描所有的驱动器以查找 Vinum 信息。
需要说明的是, 并不需要指定内核到什么地方去找根文件系统。 /boot/loader 会在 /etc/fstab 中查找根文件系统的设备名, 并将这一信息转交给内核。 当需要挂接根文件系统时, 内核会根据设备名来知道它由哪个驱动提供, 并将其转译为内部设备 ID (major/minor 编号)。
因为目前的 FreeBSD 引导程序只有 7.5 KB 的代码, 并且已经承担了从 UFS 文件系统中读取文件 (例如 /boot/loader) 的重任, 因此完全没有办法再让它去分析 Vinum 配置数据中的 Vinum 结构, 并找到引导卷本身的信息。 因此, 需要一些技巧来为引导代码提供标准的 "a" 分区, 而它则包含了根文件系统。
要让这些得以实现, 根卷需要满足下面的条件:
根卷不能是条带卷或 RAID-5 卷。
根卷 plex 不能包含连接的子盘。
需要说明的是, 使用多个 plex, 每个 plex 都复制一份根文件系统的副本, 是需要而且是可行的。 然而, 引导过程只能使用这些副本中的一个来引导系统, 直到内核最终自行挂接根文件系统为止。 这些 plex 中的每个子盘, 在这之后会有它们自己的 "a" 分区, 以表达每一个可以引导的设备。 每一个 "a" 分区, 尽管并不需要和其它包含根卷的 plex 处于各自驱动器的同一位置。 但是, 这样创建 Vinum 卷使得镜像卷相互对称, 从而能够避免了混淆。
为了创建每一个根卷的 "a" 分区, 需要完成下面的操作:
使用下面的命令来了解根卷成员子盘的位置 (从设备开始的偏移量) 和尺寸:
# vinum l -rv root
需要注意的是, Vinum 偏移量和尺寸的单位是字节。 它们必须是 512 的整数倍, 才能得到 disklabel 命令所需的块号。
在每一个根卷成员设备上, 执行命令:
# disklabel -e devname
这其中, 对于没有 slice (也就是 fdisk) 表的磁盘, devname 必须是磁盘的名字 (例如 da0), 或者是 slice 的名字 (例如 ad0s1)。
如果设备上已经有了 "a" 分区 (比如说, 包含 Vinum 之前的根文件系统), 则应改为其它的名字, 以便继续访问 (如果需要的话), 但它并不会继续用于启动系统。 注意, 活动的分区 (类似正挂接的根文件系统) 不能被改名, 因此, 要完成这项工作, 必须从 “Fixit” 盘启动, 或者分两步操作, 并 (在镜像情形中) 首先操作那些非引导盘。
然后, 设备上 Vinum 分区的偏移 (如果有的话) 必须加到这个设备上根卷对应的子盘上。 其结果值, 将成为新的 "a" 分区的 "offset" 值。 这个分区的 "size" 值, 可以根据前面的配置计算得出。 "fstype" 应该是 4.2BSD。 "fsize"、 "bsize", 以及 "cpg" 值, 则应与文件系统的实际情况匹配, 尽管在配置 Vinum 时并不重要。
这样, 新的 "a" 分区, 将创建并覆盖这一设备上的 Vinum 分区的范围。 注意, disklabel 只有在 Vinum 分区的 fstype 被标记为 "vinum" 时, 才允许这样做。
这就成了! 所有的 "a" 分区现在都已存在, 而且是根卷的一份副本。 强烈建议您再次验证其结果, 方法是:
# fsck -n /dev/devnamea
务必注意, 所有包含控制信息的文件, 都必须放到 Vinum 卷上的根文件系统。 在启动新的 Vinum 根卷时, 它们可能和实际在用的根文件系统不匹配。 因此, /etc/fstab 和 /boot/loader.conf 这两个文件需要特别地注意。
在下次重启时, 引导程序需要从新的基于 Vinum 的根文件系统中获取适当的控制信息, 并据此工作。 在内核初始化过程的结尾部分, 在所有的设备都被宣示之后, 如果显示了下面的信息, 则表示配置成功:
Mounting root from ufs:/dev/vinum/root
在 Vinum 根卷配置好之后, vinum l -rv root 的输出可能类似下面的样子:
...
Subdisk root.p0.s0:
Size: 125829120 bytes (120 MB)
State: up
Plex root.p0 at offset 0 (0 B)
Drive disk0 (/dev/da0h) at offset 135680 (132 kB)
Subdisk root.p1.s0:
Size: 125829120 bytes (120 MB)
State: up
Plex root.p1 at offset 0 (0 B)
Drive disk1 (/dev/da1h) at offset 135680 (132 kB)
需要注意的值是 135680, 也就是偏移量 (相对于 /dev/da0h 分区)。 这相当于 disklabel 记法中的 265 个 512-字节的磁盘块。 类似地, 根卷的尺寸是 245760 个 512-字节的磁盘块。 /dev/da1h 中, 包含了根卷的第二个副本, 采用了同样的配置。
这些设备的 disklabel 类似下面的样子:
... 8 partitions: # size offset fstype [fsize bsize bps/cpg] a: 245760 281 4.2BSD 2048 16384 0 # (Cyl. 0*- 15*) c: 71771688 0 unused 0 0 # (Cyl. 0 - 4467*) h: 71771672 16 vinum # (Cyl. 0*- 4467*)
可以看到, 伪装的 "a" 分区的 "size" 参数和前面的一样, 而 "offset" 参数则是 Vinum 分区 "h", 以及设备中这一分区 (或 slice) 的偏移量之和。 这是一种典型的配置, 它能够避免在 第 17.9.4.3 节 中介绍的问题。 此外, 我们也看到整个 "a" 分区完全处于设备上包含了 Vinum 数据的 "h" 分区之中。
注意, 在上面的配置中, 整个设备都是 Vinum 专用的, 而且没有留下 Vinum 之前的根分区, 因为它永久性地成为了新建的 Vinum 配置中的一个子盘。
如果遇到了问题, 则需要从中恢复的办法。 下面列出了一些常见的缺陷, 及其解决方法。
如果由于某种原因系统不再继续启动, 引导程序可以在 10-秒 倒计时的时候, 按 space 键来停止。 加载器变量 (例如 vinum.autostart) 可以通过使用 show 命令来查看, 并使用 set 和 unset 命令来设置。
如果遇到的问题是由于 Vinum 的内核模块没有列入预加载的列表, 而没有正确加载, 则可以简单使用 load vinum 会有所帮助。
此后, 可以使用 boot -as 来继续启动过程。 选项 -as 会要求内核询问所挂接的根文件系统 (-a), 并使引导过程在单用户模式停止 (-s), 此时根文件系统是以只读方式挂接的。 这样, 及时只挂接了多 plex 卷中的一个 plex, 也不会引致 plex 之间数据不一致的问题。
当提示输入要挂接的根文件系统时, 可以输入任何一个包含根文件系统的设备。 如果正确地配置了 /etc/fstab, 则默认的应该是类似 ufs:/dev/vinum/root。 一般可以使用类似 ufs:da0d 这样的设备来代替它, 因为它通常包括了 Vinum 之前的根文件系统。 需要注意的是, 如果在这里输入了 "a" 分区, 则它可能表达的实际上是 Vinum 根设备的一个子盘, 而在镜像式配置中, 这只会挂接镜像的根设备中的一个。 如果之后将这个文件系统以读写方式挂接, 则需要从 Vinum 根卷中删去其他的 plex, 否则这些卷中可能会包含不一致的数据。
如果 /boot/loader 加载失败, 而主引导程序加载正常 (在启动时, 屏幕最左边一列有一个旋转的线), 则可以尝试在此时中断主引导程序的过程, 方法是按 space 键。 这将在引导的第二阶段暂停, 具体可以参见 第 12.3.2 节。 此时, 可以尝试从另一个分区, 例如原先包含根文件系统, 并不再叫作 "a" 的那个分区, 启动。
这种情况一般是由于 Vinum 安装过程中破坏了引导程序造成的。 不幸的是, Vinum 目前只在分区开始的地方保留了 4 KB 的空间, 之后就开始写 Vinum 头信息了。 然而, 目前第一阶段和第二阶段的引导程序, 加上 disklabel 嵌入的内容则需要 8 KB。 因此, 如果 Vinum 分区从偏移量 0 开始, 而这个 slice 或磁盘能够启动, 则 Vinum 的安装将毁掉引导程序。
类似地, 如果从上述情形中恢复, 例如, 从 “Fixit” 盘启动, 并通过 disklabel -B 按照 第 12.3.2 节 中介绍的方法来恢复引导程序, 则引导程序会覆盖掉 Vinum 头, 这样 Vinum 也就找不到它的磁盘了。 尽管这并不会真的毁掉 Vinum 的配置数据, 或者 Vinum 卷上的数据, 并且可以通过输入一模一样的 Vinum 配置数据来恢复, 但从这种状况中完全恢复是非常困难的。 要真正解决问题, 必须将整个 Vinum 分区向后移动至少 4 KB, 以便使 Vinum 头和系统的引导程序不再冲突。
在 FreeBSD 4.X 中, 由于缺少那些让 Vinum 自动扫描所有磁盘所需的内部函数, 而检测根设备的内部 ID 的代码不够智能, 以至于无法自动处理类似 /dev/vinum/root 这样的名字。 因此, 会有一些小差异。
必须明确地告诉 Vinum 要扫描哪些磁盘, 方法是在 /boot/loader.conf 中加入:
vinum.drives="/dev/da0 /dev/da1"
所有可能包含 Vinum 数据的盘在这里都应提及。 基本原则是, 宁多毋缺。 此外, 也无需明确指定 slice 或分区, 因为 Vinum 在指定的驱动器上的所有 slice 和分区上扫描 Vinum 头。
由于用以分析根文件系统名字, 并产生设备 ID (major/minor 编号) 的程序, 只能够处理 “传统的” 类似 /dev/ad0s1a 这样的设备名, 因此它们不可能处理类似 /dev/vinum/root 这样的根卷名。 因此, Vinum 本身需要预先配置内核的一些内部参数, 以便在初始化时能够保持根设备的 ID。 这可以通过加载器变量 vinum.root 来配置, 对应的 /boot/loader.conf 设置是:
vinum.root="root"
现在, 当内核初始化过程尝试找到要挂接的 root 设备时, 它将能看到是否已经有某个内核模块预先初始化了所需要的内核参数。 这种情况下, 并且 所指定的根设备和来自加载器的根设备 (也就是我们的 "vinum" ) 的 major 编号相符, 则就是用预先分配的设备 ID, 而不是自己去找一个。 这样, 在通常的自动启动过程中, 它就能够继续挂接 Vinum 根卷来作为根文件系统了。
但是, 当指定了 boot -a 来要求在启动时手工选择根设备时, 仍然是无法自动地分析 Vinum 卷名的。 如果输入的设备名与 Vinum 设备不匹配, 则 major 编号的不匹配会使这个过程采用普通的分析过程, 这样, 输入 ufs:da0d 就能够正常工作了。 注意, 一旦这个过程失败, 则再输入 ufs:vinum/root 将不能正常工作, 因为它无法再被解析了。 唯一的解决办法是, 重新启动并从头开始 (在 “askroot” 提示处, 可以省略 /dev/。)
FreeBSD是一个由分布于全世界的用户和贡献者支持的项目。 这章将讨论FreeBSD的国际化和本地化的问题,允许非英语用户也能使用FreeBSD很好地工作。 在系统和应用水平上,主要是通过执行i18N标准来实现的,所以这里我们将为读者提供详细的介绍。
读完这一章,您将了解到:
不同的语言和地域是如何在现代操作系统上进行编码的。
如何为您的登入shell设置本地化。
如何配置您的控制台为非英语语言。 languages.
如何使用不同的语言来有效地使用X Windows。
在哪里可以找到更多有关开发符合i18N标准的应用程序的信息。
阅读这章之前,您应当了解:
怎样安装额外的第三方程序(第 4 章)。
开发人员把internationalization简写成I18N,中间的数字是前后两个字母间的字母个数。 L10N依据“localization” 使用同样的命名规则。 I18N/L10N方法、协议和应用结合在一起,允许用户使用他们自己所选择的语言。
I18N应用程序使用I18N工具来编程。它允许开发人员写一个简单的文件, 就可以将显示的菜单和文本翻译成本地语言。我们非常鼓励程序员遵循这种规则。
I18N不是FreeBSD特有的,它是一个规则。我们鼓励您帮助FreeBSD完善这一规则。
本地化设置需要具备三个条件:语言代码 (Language Code)、 国家代码 (Country Code) 和编码(Encoding)。 本地名字可以用下面这些部分来构造:
语言代码_国家代码.编码
为了用特殊的语言来对FreeBSD系统进行本地化(或其他类UNIX系统), 用户必须要知道相应的国家和语言代码(国家代码告诉应用程序使用哪一种语言规范)。 此外,WEB浏览器,SMTP/POP服务器,web服务器等都是以这个为基础的。下面就是一个国家和语言代码的例子:
一些语言不使用 ASCII 编码,它们使用8-位, 宽或多字节的字符, 更多的信息请参考 multibyte(3)。 比较老的应用程序可能会无法识别它们, 并误认为是控制字符。 比较新的应用程序通常会认出 8-位字符。 随实现的不同, 用户可能不得不将宽或多字节字符支持编入应用程序, 或进行一些额外的配置, 才能够正常使用它们。 要输入和处理宽或多字节字符, FreeBSD Ports Collection 已经为每种语言提供了不同的程序。 请参考各个 FreeBSD Port 中的 I18N 文档。
特别需要指出的是, 用户可能需要查看应用程序的文档, 以确定如何正确地配置它, 或需要为 configure/Makefile/编译器 指定什么样的参数。
记住下面这些:
特定语言的简单C字符集(参考multibyte(3)),以及ISO-8859-1, ISO-8859-15, KOI8-R, CP437.
宽字节或多字节编码,如EUC, Big5。
您可以在IANA Registry检查一下现行的字符集列表。
Note: FreeBSD 4.5及以后的版本使用X11兼容的本地编码来代替。
通常只要在登入shell里面设置LANG为本地化, 一般通过设置用户的 ~/.login_conf 或用户shell的启动文件(~/.profile,~/.bashrc, ~/.cshrc)。没有必要设置 LC_CTYPE,LC_CTIME。 更多的信息请参考特定语言的FreeBSD文档。
您应当在您的配置文件中设置下面两个变量:
LANG 为POSIX设置本地化语言功能。
MM_CHARSET应用程序的MIME字符集。
这包括用户的shell配置,特定的应用配置和X11配置。
有两种方法来设置本地化,接下来都会描述。 第一种 (推荐) 就是在 登入分类 里面指定环境变量。 第二种方法是把环境变量加到shell的启动文件里面。
这种方法允许把本地化名称和MIME字符集的环境变量赋给可能的shell, 而不是加到每个特定shell的启动文件里面。 用户级设置 Level Setup 允许普通用户自己完成这个设置,而管理员级设置需要超级用户权限。
这有一个设置用户根目录文件.login_conf的小例子, 它为上述两个变量设置了Latin-1编码。
me:\
:charset=ISO-8859-1:\
:lang=de_DE.ISO8859-1:
这是一个为.login_conf设置繁体中文的BIG-5编码的例子。应该设置下面的大部分变量, 因为很多软件都没有为中文,日文和韩文设置正确的本地化变量。
#Users who do not wish to use monetary units or time formats
#of Taiwan can manually change each variable
me:\
:lang=zh_TW.Big5:\
:lc_all=zh_TW.Big:\
:lc_collate=zh_TW.Big5:\
:lc_ctype=zh_TW.Big5:\
:lc_messages=zh_TW.Big5:\
:lc_monetary=zh_TW.Big5:\
:lc_numeric=zh_TW.Big5:\
:lc_time=zh_TW.Big5:\
:charset=big5:\
:xmodifiers="@im=xcin": #Setting the XIM Input Server
更多的信息参考管理员级设置和login.conf(5)
检查用户的登入分类在 /etc/login.conf里面是否设置了正确的语言。主要确定下面的几个设置:
language_name:accounts_title:\
:charset=MIME_charset:\
:lang=locale_name:\
:tc=default:
再次使用前面的Latin-1编码的例子:
german:German Users Accounts:\
:charset=ISO-8859-1:\
:lang=de_DE.ISO8859-1:\
:tc=default:
使用vipw添加新用户,看起来像下面这样:
user:password:1111:11:language:0:0:User Name:/home/user:/bin/sh
用adduser添加新用户看起来像下面这样:
在/etc/adduser.conf里面设置defaultclass = 语言。应该记住,您必须为使用其它语言的所有用户设置 缺省类别。
每一次使用adduser(8)的时候,一个特定语言的可选择性回答会像下面这样给出:
Enter login class: default []:
如果您打算给每一个用户使用另外一种语言,您应该这样:
# adduser -class language
如果您使用pw(8)来添加新用户,应该这样使用:
# pw useradd user_name -L language
Note: 不推荐使用这种方法,因为它需要给每一个可能的shell程序一个不同的启动文件。 应该用登入分类方法来代替这种方法。
为了设置本地化名称和MIME字符集,只要在/etc/profile或 /etc/csh.login启动文件里面设置这两个变量。下面我们使用德语做例子:
在/etc/profile里面:
LANG=de_DE.ISO8859-1; export LANG MM_CHARSET=ISO-8859-1; export MM_CHARSET
或在/etc/csh.login里面:
setenv LANG de_DE.ISO8859-1 setenv MM_CHARSET ISO-8859-1
另外,您可以把上面的设置添加到/usr/share/skel/dot.profile (和前面的/etc/profile一样),或者/usr/share/skel/dot.login (和前面的/etc/csh.login一样)。
对于X11:
在$HOME/.xinitrc里面:
LANG=de_DE.ISO8859-1; export LANG
或者:
setenv LANG de_DE.ISO8859-1
依赖您的shell(看上面)。
对于所有的简单C字符集,在/etc/rc.conf中用正在讨论的语言设置正确的控制台字符:
font8x16=font_name font8x14=font_name font8x8=font_name
这儿的font_name来自于/usr/share/syscons/fonts目录, 不带.fnt后缀。
您还需要确定正确地为您的 C 字符集配置了 keymap 和 screenmap, 这一工作可以通过 sysinstall (在 FreeBSD 5.2 之前的版本是 /stand/sysinstall) 来完成。。 进入 sysinstall 之后, 选择 Configure, Console。 此外, 您也可以将下面的设置加入 /etc/rc.conf:
scrnmap=screenmap_name keymap=keymap_name keychange="fkey_number sequence"
这儿的screenmap_name是来自/usr/share/syscons/scrnmaps目录, 不带.scm后缀。 一个带影射字体的屏幕布局通常被作为一个工作区, 用来在VGA适配器字体矩阵上扩展8位到9位。 如果屏幕字体是使用一个8位的排列,要移动这些字母离开这些区域。
如果您在/etc/rc.conf里面启用了moused daemon:
moused_enable="YES"
那么需要在下一段检查鼠标指针信息。
默认情况下, syscons(4)驱动程序的鼠标指针在字符集中占用0xd0-0xd3的范围。 如果您的语言使用这个范围,您必须把指针范围移出这个范围。 要在5.0以前的FreeBSD版本中启用工作区,需要在您的内核中添加下面这行:
options SC_MOUSE_CHAR=0x03
对于 FreeBSD 4.4 和以后的版本, 需要在 /etc/rc.conf 中加入:
mousechar_start=3
这里, keymap_name 来自于 /usr/share/syscons/keymaps 目录, 但去掉了 .kbd 后缀。 如果不确定应该使用哪一个键盘布局, 则可以使用 kbdmap(1) 来测试, 而无需反复重启。
通常, keychange 是设定功能键时, 匹配选定的终端类型来说是必需的, 因为功能键序列无法在键盘布局中定义。
此外您还应该检查并确认在 /etc/ttys 中已经为所有的 ttyv* 项配置了正确的终端类型。 目前, 相关的默认定义是:
| 字符集设置 | 终端类型 |
|---|---|
| ISO-8859-1 or ISO-8859-15 | cons25l1 |
| ISO-8859-2 | cons25l2 |
| ISO-8859-7 | cons25l7 |
| KOI8-R | cons25r |
| KOI8-U | cons25u |
| CP437 (VGA default) | cons25 |
| US-ASCII | cons25w |
对于多字节字符语言,可以您的在 /usr/ports/language 目录中使用正确的FreeBSD port。一些port以控制台出现, 而系统把它作为串行vtty终端,因此, 必须为 X11 和伪串行控制台准备足够的vtty终端。 下面是在控制台中使用其他语言的应用程序的部分列表:
| 语言 | 特定区域 |
|---|---|
| Traditional Chinese (BIG-5) | chinese/big5con |
| Japanese | japanese/kon2-16dot or japanese/mule-freewnn |
| Korean | korean/han |
虽然X11不是FreeBSD计划的一部分, 但我们已经为FreeBSD用户包含了一些信息。 具体细节可以参考Xorg Web 站点 或是您使用的 X11 Server 的网站。
在~/.Xresources里面,您可以适当调整特定应用程序的I18N设置(如字体,菜单等)。
安装 Xorg 服务器 (x11-servers/xorg-server) 或 XFree86 服务器 (x11-servers/XFree86-4-Server), 然后安装对应语言的 TrueType 字体。 请设置正确的地区信息, 这将让您能够在菜单和其它地方看到所选择的语言。
X11输入方法(XIM)协议是所有X11客户端的一个新标准。 所有将作为XIM客户端来写的X11应用程序从XIM输入服务器输入。 不同的语言有几种XIM服务器可用。
一些简单的C字符集通常是用硬编码来编码进打印机的。更宽或多位的字符集需要特定的设置, 我们推荐使用apsfilter。您也可以使用特定语言转换器把文档转换为 PostScript或PDF格式。
FreeBSD 的快速文件系统 (FFS) 是完全支持 8-位 字符的, 因此它可以被用于任何简单的 C 字符集 (参见 multibyte(3)), 但在文件系统中不会保存字符集的名字; 也就是说, 它不加修改地保存 8-位信息, 而并不知道如何编码。 正式说来, FFS 目前还不支持任何形式的宽或多字节字符集。 不过, 某些宽或多字符集提供了独立的针对 FFS 的补丁来帮助启用关于它们的支持。 目前这些要么是无法移植的, 要么过于粗糙, 因此我们不打算把它们加入到源代码中。 请参考相关语言的 Web 站点, 以了解关于这些补丁的进一步情况。
FreeBSD MS-DOS已经能够配置成用在MS-DOS上,Unicode字符集和可选的FreeBSD文件系统字符集的更多信息, 请参考mount_msdos(8)手册页。
许多FreeBSD Ports已经支持I18N了。他们中的一些都用-I18N作标记。 这些和其他很多程序已经内建I18N的支持,不需要考虑其他的事项了。
然而一些像MySQL这样的应用程序需要重新配置字符集,可在 Makefile里面设置,或者直接把参数传递给configure。
关于KOI8-R编码的更多信息请查阅KOI8-R参考(Russian Net Character Set)。
把下面的行加入到您的~/.login_conf文件:
me:My Account:\
:charset=KOI8-R:\
:lang=ru_RU.KOI8-R:
参看前面的设置本地化的例子。
对于FreeBSD 5.0以前的版本,添加下面这行到内核配置文件:
options SC_MOUSE_CHAR=0x03
对于 FreeBSD 4.4 和更高版本把下面一行加到 /etc/rc.conf:
mousechar_start=3
在/etc/rc.conf里面使用如下设置:
keymap="ru.koi8-r" scrnmap="koi8-r2cp866" font8x16="cp866b-8x16" font8x14="cp866-8x14" font8x8="cp866-8x8"
对于/etc/ttys里面的ttyv*记录,要使用 cons25r作为终端类型。
参看前面的设置控制台的例子。
既然绝大多数带俄语字符的打印机遵循CP866的标准, 那么需要一个针对KOI8-R到CP866转换的特定输出过滤器。这样的一个过滤器默认的安装在 /usr/libexec/lpr/ru/koi2alt。 一个支持俄语的打印机的/etc/printcap记录看起来是这样的:
lp|Russian local line printer:\
:sh:of=/usr/libexec/lpr/ru/koi2alt:\
:lp=/dev/lpt0:sd=/var/spool/output/lpd:lf=/var/log/lpd-errs:
更多信息参考printcap(5)手册页。
下面的例子是在挂上MS-DOS 文件系统后,启用对俄语文件名支持的fstab(5)记录:
/dev/ad0s2 /dos/c msdos rw,-Wkoi2dos,-Lru_RU.KOI8-R 0 0
选项 -L 用于选择地区名称, 而 -W 则用于设置字符转换表。 要使用 -W 选项, 则一定要首先挂接 /usr, 然后再挂接 MS-DOS 分区, 因为转换表是放在 /usr/libdata/msdosfs 的。 要了解进一步的细节, 请参考 mount_msdos(8) 联机手册。
先描述没有X的本地化设置
进入russian/X.language目录,然后执行如下的命令:
# make install
上述 port 将安装最新版本的 KOI8-R 字体。 Xorg (也包括 XFree86 的 3.3 和更高版本) 已经包括了一些 KOI8-R 字体, 但上述 port 中的版本能够更好地适应缩放。
请检查您的 /etc/XF86Config 文件中的 "Files" 小节。 下面的配置必须加到任何 FontPath 项 之前。
FontPath "/usr/X11R6/lib/X11/fonts/cyrillic/misc" FontPath "/usr/X11R6/lib/X11/fonts/cyrillic/75dpi" FontPath "/usr/X11R6/lib/X11/fonts/cyrillic/100dpi"
如果您使用一个高分辨率的显示模式,可以交换75 dpi 和100 dpi行。
为了激活俄语"键盘",加下面几行到XF86Config文件里面:
对于XFree86 3.X:
XkbLayout "ru" XkbOptions "grp:caps_toggle"
对于 Xorg (或 XFree86 4.X):
Option "XkbLayout" "ru" Option "XkbOptions" "grp:caps_toggle"
要确信XkbDisable 已经关闭(注释掉)了。
RUS/LAT的切换用CapsLock。老的CapsLock功能可以通过 Shift+CapsLock 来模拟(只有在LAT模式的时候)。
如果您的键盘上有“Windows”键, 注意在俄语模式中,一些非字母顺序的键会影射错误,可以在XF86Config文件中添加下面这行:
对于XFree86 3.X:
XkbVariant "winkeys"
对于 Xorg (或 XFree86 4.X):
Option "XkbVariant" "winkeys"
Note: 俄语的XKB键盘可能不能在老版本的XFree86下工作, 更多的信息参考上面的注释。俄语XKB键盘也不能很好的工作在 非本地化应用程序下面。早期的非本地化应用程序最低限度应该调用
XtSetLanguageProc (NULL, NULL, NULL);。更多的本地化X11应用程序的信息请参考 KOI8-R for X Window。
FreeBSD-Taiwan计划有一个使用很多中文ports的中文化指南在 http://netlab.cse.yzu.edu.tw/~statue/freebsd/zh-tut/。 目前, FreeBSD 中文化指南 的维护人员是 沈俊兴 <statue@freebsd.sinica.edu.tw>。
沈俊兴 <statue@freebsd.sinica.edu.tw>
利用 FreeBSD-Taiwan 的 zh-L10N-tut建立了 Chinese FreeBSD Collection
(CFC)。 相关的 packages 和脚本等可以在 ftp://freebsd.csie.nctu.edu.tw/pub/taiwan/CFC/ 找到。
Slaven Rezic <eserte at cs.tu-berlin.de>
写了一个在FreeBSD机器下如何使用日尔曼语言的德语指南。 可以在http://www.de.FreeBSD.org/de/umlaute/下找到。
FreeBSD 在两个发行版之间都有着持续的发展。 对于喜欢冒险的人来说,有几种机制让您的系统与最新的发展保持同步。 警告--冒险并不适合每一个人! 本章将有助于您决定是紧跟最新发展还是坚持发行版。
读了本章后,您将了解到:
FreeBSD-STABLE 和 FreeBSD-CURRENT两个发展分支的不同点。
怎样使用CVSup, CVS或 CTM保持您的系统更新。
如何使用 make buildworld 等命令来重新编译和安装基本系统。
在读本章这前,您应该了解的:
FreeBSD有两个开发分支:FreeBSD-CURRENT 和 FreeBSD-STABLE。 这部分将对每个做些说明,并且讲述您的系统如何与各自的树一同保持最新。 先讨论 FreeBSD-CURRENT,然后是 FreeBSD-STABLE。
我们再次强调, FreeBSD-CURRENT 是 FreeBSD 开发的“最前沿”。FreeBSD-CURRENT 用户要有较高的技术能力,并且应该有能力自已解决困难的系统问题。 如果您是个 FreeBSD 新手,那么在安装之前最好三思。
FreeBSD-CURRENT 是 FreeBSD 的发展前沿。 包括了在下一个官方发行的软件中可能存在, 也可能不存在的发展、实验性变化、传统机制。由于许多 FreeBSD 开发者每天编译 FreeBSD-CURRENT 源代码,有时这些代码会是不能编译的。 虽然这些问题会很快解决,但不管是 FreeBSD-CURRENT 引起的破坏还是急切的泛涵性 (greatly desired functionality) 都将是在您获取源代码的的时候值得注意的!
FreeBSD-CURRENT 适合下边三种主要兴趣团体:
FreeBSD 社区的成员: 积极工作在源码树的某部分的人和为保持 “最新” 为绝对需求的人。
FreeBSD 社区的成员: 为促使 FreeBSD-CURRENT 保持尽可能的健全而愿花时间去解决问题的积极的测试员; 以及那些愿意提出关于 FreeBSD 变化和总体方向的建设性建议并且提供补丁实现它们的人们。
那些只是想关注或为了参考目的使用当前 (current) 源码的人们 (如,为了阅读,而不是执行)。 这些人也偶尔做做注释或贡献代码。
追求最新功能, 您听说里面有一些很酷的新功能, 并希望成为您周围的人中第一个尝试它们的人。 尽管您能够因此首先了解到最新的功能, 但这也意味着在出现新的 bug 时您也首当其冲。
修复错漏的快捷方式。任何 FreeBSD-CURRENT 的既定版本在修复已知错漏的同时又可能会产生新的错漏。
无所不在的“官方支持”。 我们尽最大努力在3个“合法的” FreeBSD-CURRENT 组之一真诚给人们提供帮助,但是我们 没有时间提供技术支持。 这并不是因为我们是那种不喜欢帮助人解困的无耻之徒 (如果我们是的话,就不会制作 FreeBSD 了)。 我们不能每天简单地回复上百的消息,而且 我们继续发展 FreeBSD! 在改善 FreeBSD 和回复大量关于实验代码的问题之间如果要做个选择的话, 开发人员会选择前者。
加入 freebsd-current 和 cvs-all 列表。 这个不仅仅是个好主意,而且很 重要。如果您不去 freebsd-current, 您就不会看到人们所做的关于系统当前状态的说明, 这样您就有可能在别人已经发现并解决了的一大堆问题面前难倒。 更重要的是您会错过一些重要的公告---对于您的系统安全可能是至关重要的。
cvs-all 列表允许您看到每个变化的提交记录, 因为这些记录与其它相关信息是同步的。
要加入这些列表,或其它可能的列表,请访问 http://lists.FreeBSD.org/mailman/listinfo ,并且点击您想订阅的列项。 关于其它步骤的说明那里有提供。
从FreeBSD 镜像站点获取源码。您有两种方式选择:
与称作 standard-supfile 的 supfile 一起使用 cvsup,这个可以从 /usr/share/examples/cvsup得到。 这是最被推荐的方式,因为它允许您一次获取整个集合, 以后就只取更改过的部分。许多人从 cron 运行 cvsup,以保持他们的源码自动更新。 您须要定制上边的 supfile 样本,并且配置 cvsup 以适应您的环境。
使用工具 CTM。 如果您的连接性能不太好(高价连接或只能通过电子邮件存取), CTM 是个选择。 但这也颇有争议并且常常得到到坏文件。因此很少使用它, 这也注定了不能长期用它来工作。对于使用 9600 bps 或更快连接的人,我们推荐使用 CVSup。
如果您获取源码是用于运行,而不只是看看,那么就获取 整个 FreeBSD-CURRENT,不要选部分。 这样做的原因是源码的大部分都依赖于其他部分, 要是您试着只编译其中一部分的话,保证您会陷入麻烦。
在编译 FreeBSD-CURRENT 之前,请仔细阅读 /usr/src 里的 Makefile 文件。 尽管是部分的升级过程,您至少也要首先安装新的内核和重建系统。阅读 FreeBSD-CURRENT 邮件列表 邮件列表和 /usr/src/UPDATING, 会让您在其它循序渐进的过程中保持最新, 这对于我们向下一个发行版转移是很有必要的。
热心一点!如果您正运行 FreeBSD-CURRENT, 我们很想知道您关于它的一些想法, 尤其是关于错漏修复或增进的建议。 非常欢迎带有代码的建议!
FreeBSD-STABLE 是我们的发展分支,我们的主要发行版就由此而来。 这个分支会以不同速度变化,并且假定这些是第一次进入 FreeBSD-CURRENT 进行测试。然而,这 仍然 是个发展中的分支,这意味着在一定的时候,FreeBSD-STABLE 源码可能或不可能满足一些特殊的要求。 它只不过是另一个工程发展途径,并不是终端用户的资源。
如果您有兴趣追随 FreeBSD 的开发过程或为其做点贡献, 尤其是和下一个 “非计划” 的 FreeBSD 发行版有关时, 您应该考虑采用 FreeBSD-STABLE。
尽管安全更新也会进入 FreeBSD-STABLE 分支,但您并不 必须 使用 FreeBSD-STABLE 来达到这样的目的。 每一个 FreeBSD 的安全公告都会解释如何修复受到影响的发行版中的问题 [12],而因为安全原因而去采用一个开发分支显然可能会同时引入一些不希望的修改。
尽管我们尽力确保 FreeBSD-STABLE 分支在任何时候都能够正确编译和运行, 但没有人能够担保它在任何时候都总可以。 此外, 尽管代码在进入 FreeBSD-STABLE 之前都是在 FreeBSD-CURRENT 上完成开发, 但使用 FreeBSD-STABLE 的人要比使用 FreeBSD-CURRENT 的更多。 有证据显示, 犄角旮旯里的各种问题有些时候仍然会由于在 FreeBSD-CURRENT 不那么明显 而在 FreeBSD-STABLE 暴露出来。
基于这些原因, 不 推荐您盲目地追随 FreeBSD-STABLE, 并且, 在粗略地测试过代码之前不要更新任何生产服务器到 FreeBSD-STABLE 也非常重要。
如果您没有用于完成这些工作的资源, 我们推荐您使用最新的 FreeBSD 发行版, 并使用发行版提供的二进制更新机制来在发行版之间完成迁移。
加入 freebsd-stable 列表。让您随时了解可能出现在 FreeBSD-STABLE 里的“build 依赖性”或其它需要特别注意的问题。 当开发员正在考虑某些有争议的修复或更新时, 他们就会在这个邮件列表里发表声明,给用户机会回应, 看他们对于提出的变化是否还有什么问题。
cvs-all 列表允许您看到每一个变化的提交记录条目, 这些变化是随着由可能的副作用引起的任何相关信息而产生的。
要加入这些列表或其他可用的,访问 http://lists.FreeBSD.org/mailman/listinfo 并点击您希望订阅的列表。关于其它步骤的说明可以在那里看到。
如果安装一个新的系统又想它尽可能稳定的话,您可以仅仅从 ftp://snapshots.jp.FreeBSD.org/pub/FreeBSD/snapshots/ 获取最新的分支快照并象其它发行版一样安装它。或者您可以从镜像站点安装最新的 FreeBSD-STABLE 发行版, 并按照下边的说明升级您的系统到最新的 FreeBSD-STABLE 源码。
如果您已经在运行以前的 FreeBSD 发行版,并希望通过源码方式升级, 那么您可能轻易的从 FreeBSD 镜像站点完成。 有两种方式:
与称作 standard-supfile 的 supfile 一起使用 cvsup,这个可以从 /usr/share/examples/cvsup 得到。 这是最被推荐的方式,因为它允许您一次获取整个集合, 以后就只取更改过的部分。许多人从 cron 运行 cvsup,以保持他们的源码自动更新。 您须要定制上边的 supfile 样本,并且配置 cvsup 以适应您的环境。
使用工具 CTM。 如果您的连接性能不太好(高价连接或只能通过电子邮件存取), CTM 是个选择。 但这也颇有争议并且常常得到到坏文件。因此很少使用它, 这也注定了不能长期用它来工作。对于使用 9600 bps 或更快连接的人,我们推荐使用 CVSup。
本质上说,如果您需要快速存取源码并且不计较通信宽带的话,可以使用 cvsup 或 ftp。否则,就使用 CTM。
在编译 FreeBSD-STABLE 之前,请仔细阅读 /usr/src 里的 Makefile。 您至少应该安装一个新的内核并重建系统, 首先做为升级过程的一部分。阅读 FreeBSD-STABLE 邮件列表 邮件列表和 /usr/src/UPDATING, 可能让您在其它循序渐进的过程中保持更新, 这在我们向下一发行版转移时是很有必要的。
有许多方式通过互联网(或电子邮件)与 FreeBSD 项目源码特定领域或所有领域保持更新,主要依赖于您的兴趣。 我们提供的主要服务是匿名 CVS、 CVSup,和 CTM。
Warning虽然只更新源码树中的部分是可能的, 唯一被支持的更新过程是更新整个树、并且重编译用户区 (如:在用户空间运行的所有程序,像 /bin 和 /sbin下边的)和内核源码。 只更新源码树中的部分,或只有内核,或只有用户区 (userland) 通常会出现错误。这些问题包括有编译错误、内核崩溃 (kernel panics)、数据出错。
匿名 CVS 和 CVSup 使用 下拉(pull) 模式来更新源代码。 在 CVSup 中, 用户 (或者 cron 叫本) 会调用 cvsup 程序, 后者会同某一个 cvsupd 服务进行交互, 以更新您的文件。 您接到的更新是更新时刻最新的, 并且您只会收到那些需要的更新。 您可以很容易地限制更新的范围, 只更新那些您需要的文件。 服务器端会根据您手头已经有的文件即时地生成更新内容。 匿名 CVS 相对于 CVSup 而言要简单一些, 因为它只是对 CVS 的一种扩展, 让您可以从远程的 CVS 代码库得到更新。 CVSup 相对而言, 要比 匿名 CVS 更有效率, 然而后者却更容易使用。
CTM,在另一方面, 不能交互的把您有的源码与主压缩包里的进行比较, 也不能把它们拉下来。实际上,在主 CTM 机器里, 可以用来识别文件里自上次运行以来发生的变化的脚本, 每天要执行好几次,任何侦测到的变化都会被压缩、 标识上序列号并进行编码以利于能过电子邮件传输 (只能是可打印的ASCII)。一旦接收到, 这些“CTM deltas”就会被传送给 ctm_rmail(1) 工具---可以自动进行解码、校验和应用这些变化到用户的复制的源码里。 这个过程比 CVSup 更为有效, 而且更少占用我们的服务器资源,因为它不仅仅采用 下拉(pull) 模式,还采用 上推(push) 模式。
当然,There are other trade-offs, of course. 如果您不经意删除了您的压缩包的部分内容, CVSup 会检测到并为您重建破坏的部分。 CTM 是不会这样做的, 如果您删除了您的源码树中的某部分(并已不能恢复), 那么您就必须从破坏处 (从最新的CVS “base delta”) 开始,使用 CTM 或 Anonymous CVS 进行重建,仅仅删除坏的数据并再同步。
只要您根据一定版本的 FreeBSD (FreeBSD-STABLE、FreeBSD-CURRENT 等等), 已经同步了您本地的源码树,那么您就可以使用这些源码树来重建系统。
做好备份无需强调在行动 之前 备份整个系统是多么的重要。 尽管重新编译系统是 (如果您按照文档的指示做的话) 一件很容易完成的工作, 但出错也是在所难免的, 另外, 别人在源码里面引入的错误也可能造成系统无法引导。
请确信自己已经做过备份, 并且在手边有恢复软盘或可以引导的光盘。 您可能永远也不会用到它, 但安全第一嘛!
订阅恰当的邮件列表FreeBSD-STABLE 和 FreeBSD-CURRENT 分支自然是 发展中的。为 FreeBSD 做贡献的都是人,偶尔也会犯错误。
有时这些错误没什么危害,只是引起您的系统生成新的诊断警告。 有时是灾难性的,并导致您的系统不能惊动启动或破坏您的文件系统 (甚至更糟)。
如果出现了类似的问题, 贴一封“小心(heads up)”帖到相关的邮件列表里, 讲清问题的本质以及受影响的系统。在问题解决后,再贴封“解除(all clear)”声明。
如可您想跟踪 FreeBSD-STABLE 或 FreeBSD-CURRENT 而又不阅读 FreeBSD-STABLE 邮件列表 和 FreeBSD-CURRENT 邮件列表 各自的邮件列表,那么您是自找麻烦。
不要使用 make world许多较早的文档推荐使用 make world 来完成这项工作。 这样做会跳过一些必要的步骤, 因此只有在您知道自己在做什么的时候才可以这样做。 几乎所有的情况下 make world 都是不应该做的事情, 您应该使用这里描述的方法。
要更新系统, 您必须查看 /usr/src/UPDATING 文件, 以了解 buildworld 之前需要完成的步骤, 然后使用下面的过程:
# make buildworld # make buildkernel # make installkernel # reboot
Note: 有些时候, 需要额外地执行一次 mergemaster -p 才能够完成 buildworld 步骤。 这些会在 UPDATING 中进行描述。 一般而言, 您可以简单地跳过这一步, 只要进行的不是 FreeBSD 的大跨度版本升级。
在 installkernel 成功完成之后, 您需要引导到单用户模式 (例如, 在加载器提示后面输入 boot -s)。 接下来执行:
# mergemaster -p # make installworld # mergemaster # reboot
阅读进一步的说明上边描述的序列只是有助于您开始工作的简要。 要清楚的理解每一不步,尤其是您想使用定制内核配置, 您就应阅读下面的部分。
在您做其它事之前,请阅读 /usr/src/UPDATING (或在您的源码里的等效的文件)。 这个文件要包含有关于您可能遇到的问题的重要信息, 或指定了您可能使用到的命令的执行顺序。如果 UPDATING 与您这里读到相矛盾,那就先依据 UPDATING。
Important: 正如先前所述,阅读 UPDATING 并不能替代订阅正确的邮件列表。两都是互补的,并不彼此排斥。
检查 /usr/share/examples/etc/make.conf (在 FreeBSD 4.X 中叫做 /etc/defaults/make.conf) 以及 /etc/make.conf。 第一个文件包含了一些默认的定义 - 它们中的绝大多数都注释掉了。 为了在重新编译系统时能够使用它们, 请把这些选项加入到 /etc/make.conf。 请注意在 /etc/make.conf 中的任何设置同时也会影响每次运行 make 的结果, 因此设置一些适合自己系统的选项是一个好习惯。
一般的用户通常会从 /usr/share/examples/etc/make.conf (或者 FreeBSD 4.X 中的 /etc/defaults/make.conf) 复制 CFLAGS 和 NOPROFILE 这样的设置到 /etc/make.conf 中并令它们生效。
请考虑其他的一些选项 (例如 COPTFLAGS、 NOPORTDOCS 等等), 看看是否合用。
/etc 目录包含有除了您的系统启动时执行的脚本外大部分的系统配置信息。 有些脚本随 FreeBSD 的版本而不同。
有些配置文件在天天运行的系统里也是要使用到的。尤其是 /etc/group。
偶尔, 作为安装过程的一部分, make installworld 会要求事先创建某些特定的用户或组。 在进行升级时, 它们可能并不存在。 这会给升级造成问题。 有时, make buildworld 会检查它们是否已经存在。
最近就有个这样的例子,当时 smmsp 用户是被增加了的。当 mtree(8) 试着建立 /var/spool/clientmqueue 时,安装过程失败了。
解决办法是检查 /usr/src/etc/group 并把它的组列表与您的进行比较。如果在新文件里有而您的文件里没有的, 就把它们复制过来。同样地,您把 /etc/group 里的任何这样的组进行更名---与 /usr/src/etc/group 中有相同 GID,但不同名的那些。
自 4.6-RELEASE 开始,您可以通过 -p 选项以预建 (pre-buildworld) 模式运行 mergemaster(8)。 这样只是比较那些对于成功执行 buildworld 或 installworld 起关键作用的文件。 在第一次时,如果早期的 mergemaster 版本不支持 -p 的话,就使用源码树中的新版本:
# cd /usr/src/usr.sbin/mergemaster # ./mergemaster.sh -p
Tip: 如果您是个偏执狂 (paranoid), 您可以检查您的系统看看哪个文件属于您已更名或删除了的那个组。
# find / -group GID -print将显示所有 GID 组 (可以是组名也可以是数字地组 ID)所有的文件。
您可能相在单用户模式下编译系统。 除了对更快处理事情显然有好处外,重装系统将接触许多重要的系统文件, 包括所有标准系统二进制文件、库文件、包含 (include) 文件等等。在运行的系统里(尤其是同时系统里有激活的用户) 更改这些文件是自寻烦恼。
另一种模式是在多用户模式下编译系统,然后转换到单用户模式下安装。 如果您喜欢这种方式,只需在建立 (build) 完成后才执行下边的步骤。 您推迟转换到单用户模式下直到您必须 installkernel 或 installworld。
从运行的系统里,以超级用户方式执行:
# shutdown now
这样就会转换到单用户模式。
另外也可以,重启系统,在启动提示符处,输入 -s 标识。系统就会启动单用户。再在 shell 提示符处执行:
# fsck -p # mount -u / # mount -a -t ufs # swapon -a
这会检查文件系统,重新装载 / 为读/写,参考 /etc/fstab 装载其它所有的 UFS 文件系统,然后打开交换 (swapping) 开关。
Note: 如果您的 CMOS 时钟是设置为本地时间,而不是 GMT (如果 date(1) 命令输出不能显示正确的时间和地区也有确有其事), 您可能也需要执行下边的命令:
# adjkerntz -i这样可以确定您正确的本地时区设置--不这样做, 您以后可能会碰到一些问题。
随着重新构建系统的进行, 编译结果会放到 (默认情况下) /usr/obj 下。 这些目录会映射到 /usr/src。
通过删除这个目录, 可以加速 make buildworld 的过程, 并避免相互依赖关系等复杂的问题。
/usr/obj 中的某些文件可能设置了不可改标记 (详情参见 chflags(1)), 需要首先去掉这些标志。
# cd /usr/obj # chflags -R noschg * # rm -rf *
建议把执行 make(1) 后得到的输出存成一个文件。 如果什么地方出了错,您就会有个错误信息的备份。 尽管这样不能帮您分析哪里出了错, 但如果您把您的问题贴到某个邮件列表里就能帮助其他的人。
这样做最简单的办法是使用 script(1) 命令,同是带上参数指定存放输出的文件名。 您应在重建系统之前立即这样做,然后在过程完成时输入 exit。
# script /var/tmp/mw.out
Script started, output file is /var/tmp/mw.out
# make TARGET
... compile, compile, compile ...
# exit
Script done, ...
如果您这样做,就 不要 把文件存到 /tmp 里边。下次启动时,这个目录就会被清除掉。 存放的最好地方是 /var/tmp (如上个实例)或 root 的主目录。
您必须在/usr/src目录里边:
# cd /usr/src
(当然,除非您的源码是在其它地方,真是这样的话更换成那个目录就行了)。
使用 make(1) 命令重建系统。这个命令会从 Makefile (描述组成 FreeBSD 的程序应该怎样被重建, 以什么样的顺序建立等等) 里读取指令。
输入的一般命令格式如下:
# make -x -DVARIABLE target
这个例子里,-x 是会传递给 make(1) 的一个选项。查看 make(1) 手册有您可用的选项例子。
-DVARIABLE 传递一个变量给 Makefile。这些变量控制了 Makefile 的行为。这些同 /etc/make.conf 设置的变量一样, 只是提供了另一种设置它们的方法。
# make -DNOPROFILE target
是另一种指定不被建立 (built) 的先定库 (profiled libraries) 的方式,协同 /etc/make.conf 里的
NOPROFILE= true # 避免编译先定库
一起使用。
目标 (target) 告诉 make(1) 什么该做。每个 Makefile 定义了一定数量不同的“目标 (targets)”, 然后您选择的目标就决定了什么会发生。
有些目标列在 Makefile 里的,但并不意味着您要执行。相反,建立过程 (build process) 利用它们把重建系统的一些必要的步骤分割成几个子步骤。
大部分的时间不需要向 make(1) 传递参数,因此您的命令看起来可能象这样:
# make target
从 FreeBSD 的 2.2.5 版本开始 (实际上,是先在 FreeBSD-CURRENT 分支里第一次创建,然后在 FreeBSD-STABLE 的 2.2.2 和 2.2.5 两个版本间,进行了大翻新),world target 已经分成了两个部分:buildworld 和 installworld。 从 FreeBSD 的 5.3 版开始, world target 在默认时已经改为完全不动作, 因为它事实上对于许多用户都具有相当的危险性。
正如名字所暗示的,buildworld 在 /usr/obj 下边建立了一个全新的树,然后 installworld 就在当前的机器里安装这个树。
因为两个原因,这点很有用。首先,它允许您安全地完成建立 (build),而没有您运行的系统组成部分的影响。建立 (build) 是“自主的 (self hosted)”。因为这样, 您可以安全地在以多用户模式运行的机器里执行 buildworld ,而不用当心不良影响。 但是依然推荐您在单用户模式时运行 installworld。
第二,允许您使用 NFS 装载 (NFS mounts) 升级您网络里的多台计算机。如果您有三台 A、B 和 C 想进行升级,在A 执行 make buildworld 和 make installworld。然后从 A NFS 装载 (NFS mount) B 和 C 的 /usr/src 和 /usr/obj,接着您就执行 make installworld 在 B 和 C 上安装建立 (build) 的结果。
尽管 world target 仍然存在,强烈建议您不要用它。
运行
# make buildworld
现在可能给 make 指定 -j 选项了,这样会使用产生出几个并发的进程来。 这在多处理器 (multi-CPU) 机器里最有用。但是, 由于大部分的编译过程是 IO 限制远胜 CPU 限制,它在单处理器 (single-CPU) 的机器里也是有用的。
在一般的单 CPU 机器里,您要运行:
# make -j4 buildworld
make(1) 然后会有至多 4 个进程在同一时刻执行。 贴到邮件列表里的实验证据显示这样会收到最好的效果。
如果您有一台多 CPU 机器,那您就使用 SMP 配置内核,试试 6 到 10 之间的值,看这些值提速如何。
注意,这仍处在实验性阶段,如果提交到源码树上的话, 可能会断送其前程 (break this feature)。 如果用这个参数编译的话,您报告错误前试试不用它。
有许多因素影响 build 时间,但通常一台带有 128 MB 内存 500 MHz 的 Pentium III 要花费大约 2 小时来 build FreeBSD-STABLE 树,并且在整个过程中不带什么技巧或捷径。 FreeBSD-CURRENT 树花的时间还要更长一点。
要充分利用您的新系统,您应该重新编译内核。 这是很有必要的,因为特定的内存结构已经发生了改变,像 ps(1) 和 top(1) 这样的程序会不能工作, 除非内核同源码树的版本是一样的。
最简单、最安全的方式是 build 并安装一个基于 GENERIC 的内核。虽然 GENERIC 可能没有适合您的系统的所有必要的设备, 但它包括了启动您的系统到单用户模式所必需的内容。 这是个不错的检测新系统是否工作正常的测试。在从 GENERIC 启动、核实系统可以工作后, 您就可以建立 (build) 一个基于您的正常内核配置文件的新的内核了。
在新的 FreeBSD 版本中,首先完成 build world 然后再编译新内核非常重要。
Note: 如果您想建立一个定制内核,而且已经有了配置文件, 只需象这样使用 KERNCONF=MYKERNEL:
# cd /usr/src # make buildkernel KERNCONF=MYKERNEL # make installkernel KERNCONF=MYKERNEL在 FreeBSD 4.2 或更早的版本里,您必须使用 KERNEL= 替换 KERNCONF=。在 2001 年 2 月 2 号以前发行的 4.2-STABLE 并不识别 KERNCONF=。
注意,如果您已把 内核安全级别(kern.securelevel) 调高到了 1 以上,而且还设置了 noschg 或相似的标识到了您的内核二进制里边,您可能会发现转换到单用户模式里使用 installkernel 是很有必要的。 如果您没有设置它, 则应该也能毫无问题地在多用户模式执行这两个命令。 请参考 init(8) 以了解更多关于 内核安全级(kern.securelevel) 的信息;查看 chflags(1) 了解更多关于不同文件标识的信息。
如果您升级到 FreeBSD 4.0 以前版本,您应旧的内核 build 程序。但还是推荐您使用新版的 config(8), 可以使用下边的命令行:
# /usr/obj/usr/src/usr.sbin/config/config KERNELNAME
如果您正建立一个足以使用 make buildworld 的 FreeBSD 版本,那么您现在应该使用 installworld 来安装新的系统二进制。
执行
# cd /usr/src # make installworld
Note: 如果在 make buildworld 的命令行指定了变量,您就必须在 make installworld 命令行里指定同样的变量。 对于其它的选项也不是必需的,如,-j 就不能同 installworld 一起使用。
举例,您执行了:
# make -DNOPROFILE buildworld您就必须使用:
# make -DNOPROFILE installworld来安装结果,否则就要试着安装先定 (profiled) 的在 make buildworld 阶段没有建立 (built) 的二进制文件。
重新编译整个系统不会使用新的或改过的配置文件更新某些目录 (尤其像 /etc、/var 和 /usr)
更新这些文件最简单的方式就是使用 mergemaster(8),手工去做也是可以的,只要您愿意。 不管您选择哪一种,一定记得备份 /etc 以防出错。
mergemaster(8) 工具是个有针对性的脚本 (Bourne script),用于检测 /etc 和 /usr/src/etc 源码树里边的配置文件的不同点。 这是保持系统配置文件同源码树里的一起更新的推荐方式。
mergemaster 被集成到了 3.3-RELEASE 和 3.4-RELEASE 之间的 FreeBSD 基本系统里,这意味着自 3.3 版本起所有的 -STABLE 和 -CURRENT 系统都有。
在提示符里简单地输入 mergemaster 就可以开始,并观看它的开始过程。mergemaster 会建立一个临时的根(root)环境,在 / 下, 放置各种系统配置文件。这些文件然后同当前安装到您系统里的进行比较。 此时,不同的文件会以 diff(1) 格式进行显示,使用 + 符号标识增加或修改的行,- 标识将完全删除的行或将被替换成新行。查看 diff(1) 手册可以得到更多关于 diff(1) 语法和文件不同点怎样显示的信息。
mergemaster(8) 会给您显示每个文件的不同处, 这样您就可以选择是删除新文件 (相对临时文件), 是以未改状态安装临时文件,是以当前安装的文件合并临时文件, 还是再看一次 diff(1) 结果。
“选择删除临时文件”将使 mergemaster(8) 知道我们希望保留我们当前的文件不改,并删除新的。 并不推荐这个选择,除非您没有更改当前文件的理由。任何时候在 mergemaster(8) 提示符里输入 ?,您就会得到帮助。 如果选择跳过文件,在其它文件处理完后再次进行。
“选择安装未修改临时文件”将会使新文件替换当前的。 对大部分未改的文件,这是个最好的选择。
“选择合并文件”将为您打开一个文本编辑器, 里边是两个文件的内容。您现在就可以一边合并它们, 一边在屏幕里查看,同时从两者中选取部分生成最终文件。 当两个文件一起比较时,l 键会选择左边的内容, r 会选择右边的。最终的输出是由两个部分组成的一个文件, 用它就可以安装了。这个选项通常用于用户修改了设置的文件。
“选择再次查看 diff(1) 结果”将会在提供给选择之前, 显示文件的不同处,就象 mergemaster(8) 所做的一样。
在 mergemaster(8) 完成了对系统文件的处理后, 您会得到其它的选项。mergemaster(8) 可能会问您是否要重建密码文件, 如果您的 FreeBSD 版本超过 5.0,还会问您是否想要执行 MAKEDEV(8),最后带上一个选项删除剩下的临时文件。
如果想要手工更新,但不要只是从 /usr/src/etc 把文件复制到 /etc 就了事。有些文件是必须先“安装”的。 这是因为 /usr/src/etc 目录并 不是 想像的那样是 /etc 目录的一个复制。事实上,有些是文件是 /etc 有的,而 /usr/src/etc 里边没有。
如果您使用 mergemaster(8) (作为推荐),您可以向前跳到下一节。
手工做最简单的方式是安装这些文件到一个新的目录,完成后再来查找不同处。
备份您已有的 /etc虽然,理论上,没有什么会自动访问这个目录, 事情还是做稳操胜当一点。复制已有 /etc 到一个安全的地方,如:
# cp -Rp /etc /etc.old-R 完成递归复制 (设者注:即可以复制目录以下的所有内容),-p 保留文件的时间、所属等等。
您需要建立的个虚目录 (a dummy set of directories ) 来安装新的 /etc 和其它文件。 /var/tmp/root 是个不错的选择, 除此之外,还有一些子目录是需要的。
# mkdir /var/tmp/root # cd /usr/src/etc # make DESTDIR=/var/tmp/root distrib-dirs distribution
这样就建好了需要的目录结构,然后安装文件。在 /var/tmp/root 下建立的大部分子目录是空的, 而且要删除掉。最简单的方式是:
# cd /var/tmp/root # find -d . -type d | xargs rmdir 2>/dev/null
这样会删除所有的空目录。(标准的错误信息被重定向到了 /dev/null,以防止关于非空目录的警告。
/var/tmp/root 现在包含了应放在 / 下某个位置的所有文件。 您现在必须仔细检查每一个文件,检测它们与您已有的文件有多大不同。
注意,有些已经安装在 /var/tmp/root 下的文件有个“.”在开头。在写的时候,像这样唯一的文件是 /var/tmp/root/ 和 /var/tmp/root/root/ 里 shell 启动文件,尽管可能有其它的(依赖于您什么时候读取这个)。 确信使用 ls -a 可以看到它们。
最简单的方式是使用 diff(1) 去比较两个文件:
# diff /etc/shells /var/tmp/root/etc/shells
这会显示出 /etc/shells 文件和新的 /var/tmp/root/etc/shells 文件的不同处。 用这些来决定是合并您已做的变化还是复制您的旧文件过来。
使用日戳 (Time Stamp) 命名新的 Root(根)目录(/var/tmp/root),这样您可以轻松地比较两个版本的不同: 频繁重建系统意味着必须频繁更新 /etc,而这可能会有点烦琐。
在合并到 /etc 的文件里, 最新更改的您可以做个复制,由此加快这个(指更新)过程。 下边就给出了一个怎样做的主意。
像平常一样建立系统 (Make the world)。当您想更新 /etc 和其它目录里, 给目标目录一个含有当前日期的名字。假如您是 1998 年 2 月 14 日做的,您可以执行下边的:
# mkdir /var/tmp/root-19980214 # cd /usr/src/etc # make DESTDIR=/var/tmp/root-19980214 \ distrib-dirs distribution如上边列出的,从这个目录合并变化。
在您完成后,不要 删除 /var/tmp/root-19980214 目录。
在您下载了最新版的源码并改过后,执行第一步。 这样将得到一个新的目录,可能叫做 /var/tmp/root-19980221 (如果等了一周做的升级)。
您现在能看到两个目录间的不同了---在隔周的时间里使用 diff(1) 建立递归 diff 产生的不同:
# cd /var/tmp # diff -r root-19980214 root-19980221一般情况下,这两种间的不同处比 /var/tmp/root-19980221/etc 和 /etc 之间的不同要小很多。 因为不同点更小,也就更容易把这些变化移到您的 /etc 目录里边。
您现在可以删除早先的两个 /var/tmp/root-* 目录:
# rm -rf /var/tmp/root-19980214每次您需要合并这些变化到 /etc 里,就重复这个流程。
您可以使用 date(1) 自动产生目录的名称:
# mkdir /var/tmp/root-`date "+%Y%m%d"`
Note: 如果您正在运行 FreeBSD 5.0 或更后的版本, 您可以安全地跳过这部分。这些版本使用了 devfs(5) 来透明地分配设备结点。
许多情况下,在有必要更新设备结点时,mergemaster(8) 工具就可以实现,并且可以自动地完成。 这里的说明用于怎样手工更新设备结点。
考虑到安全,这里用的是多步流程。
复制 /var/tmp/root/dev/MAKEDEV 到 /dev:
# cp /var/tmp/root/dev/MAKEDEV /dev
如果您使用 mergemaster(8) 去更新 /etc,那么您的 MAKEDEV 脚本应该已经被更新过,虽然它不会影响检查 (使用 diff(1)), 必要时手工复制一下。
现在,给当前的 /dev 做个快照。照的时候一定要注意每个文件名的许可 (permissions)、所属(ownerships)、主从数字 (major and minor numbers), 不必包括日戳 (time stamps)。最简单的方式是使用 awk(1) 提取信息:
# cd /dev
# ls -l | awk '{print $1, $2, $3, $4, $5, $6, $NF}' > /var/tmp/dev.out
重做设备结点:
# sh MAKEDEV all
这时,把这个目录的另一个快照输出到 /var/tmp/dev2.out。现在检查这两个文件, 查找任何您没建立的设备结点。就该不会很多,但是保险一点总是好的。
# diff /var/tmp/dev.out /var/tmp/dev2.out
您可能注意到磁盘分区 (disk slice) 的差别,它会使像:
# sh MAKEDEV sd0s1
那样的命令重新建立分区入口 (slice entries)。您的具体情况可能不同。
Note: 这一步应被看作最后的扫尾工作。 您可以安全地跳过这一步。 如果正在使用的是 FreeBSD 5.2 或更新的版本, /rescue 目录会为用户自动更新, 其内容是在 make installworld 过程中所生成的静态联编的可执行程序, 这就不需要更新 /stand (在 FreeBSD 5.2 和更新版本中不再存在) 了。
为了完成,您可能想额外地更新 /stand 里的文件。这些文件由链接到 /stand/sysinstall 的二进制文件硬链接组成。这个文件要静态链接,以便没有其它文件系统时 (尤其是 /usr) 被装载时也能工作。
# cd /usr/src/release/sysinstall # make all install
恭喜!您现在成功升级了您的 FreeBSD 系统。
如果还有轻微的错误,可以轻易地重建系统的选定部分。 例如,在部分升级或合并 /etc 时,您不小心删除了 /etc/magic,file(1) 命令就会停止工作。这种情况下,执行下边进行修复:
# cd /usr/src/usr.bin/file # make all install
这个不好说,因为要看变化的情况。如,如果您刚运行了 CVSup,并得到下边更新的文件:
src/games/cribbage/instr.c src/games/sail/pl_main.c src/release/sysinstall/config.c src/release/sysinstall/media.c src/share/mk/bsd.port.mk
这就不必重建整个系统。您只需到相关的子目录里执行 make all install,仅此而已。 但是,如果有重大变化,如 src/lib/libc/stdlib, 那么您就要重建系统或至少静态链接的那些部分 (除了您增加的部分都是静态链接的)。
在这天后,就是您的事了。要是说每两个星期重建一下系统的话, 您可能会高兴。或者您可能只想重做改变过的部分, 确信您能找出所有依赖关系。
当然,所有这些依赖于您想升级的频率,和您是否想跟踪 FreeBSD-STABLE 或 FreeBSD-CURRENT。
这个通常表示硬件错误。 (重)建系统是个强压测试系统硬件的有效地方式, 并且常常产生内存错误。 这些正好表示它们自已做为编译器离奇地死于收到的奇怪信息。
一个确信的指示器是如果重新开始 make,并且整个过程中会死在不同的点上。
对于这种情况,您没有什么可做的,除了更换机器里的部件,看是哪一个坏了。
简短地说,可以。
/usr/obj 包含了所有在编译阶段生成的目标文件。通常, 在 make buildworld 过程中第一步之一就是删除这个目录重新开始。 这种情况下,在您完成后,保留 /usr/obj 没有多大意义,还可释放一大堆磁盘空间(通常在 340 MB 左右)。
只是,如果您清楚您在干什么,您可以让 make buildworld 跳过这一步。 这会让后继的 build 执行得更快,因为大部分的源码都不必再进行编译了。 这个的另一面就在于敏感的依赖问题可以潜在, 并以奇怪的方式引起 build 的失败。这在 FreeBSD 邮件列表里经常引起沸腾, 当有人抱怨他们 build 失败时,并没意识到这是因为自已是想抄近路 (意思是说少了些必要的步骤)。
依赖于您在您找到问题之前整个过程进行了多远。
一般而言 (当然这并不是硬性规定), make buildworld 的过程中将会首先构建新版的基本构建工具 (例如 gcc(1), 以及 make(1)) 和系统库。 随后会安装这些工具和库。 这些新版本的工具和库在随后将被用于重新编译和连接它们本身。 整个系统 (现在包括了常规的用户程序, 例如 ls(1) 或 grep(1)) 会同新版的系统文件一起被重新构建。
如果您正处于最后一个阶段, 并且了解它 (因为您已经看过了所保存的输出) 则可以 (相当安全地) 做:
... 问题修复 ...
# cd /usr/src
# make -DNOCLEAN all
这样就不会取消先前的 make buildworld 所做的工作。
在“make buildworld”的输出中如果看到如下信息:
-------------------------------------------------------------- Building everything.. --------------------------------------------------------------
出现在 make buildworld 的输出中, 则这样做应该不会有什么问题。
如果没有看到这样的信息, 或者您不确定, 则从头开始构建将是万无一失的做法。
以单用户模式运行
把 /usr/src 和 /usr/obj 目录放到不同磁盘里的独立文件系统里。如果可能,这些磁盘在不同的磁盘控制器里。
更好的,是把这些文件系统放置到多个使用 ccd(4) (连接磁盘驱动器--concatenated disk driver)设备的磁盘里。
关掉 profiling (在 /etc/make.conf 里设置 “NOPROFILE=true”)。您差不多用不了它。
在 /etc/make.conf 里也为 CFLAGS 设置上 -O -pipe。 最佳优化 -O2 会更慢,而且 -O 和 -O2 之间的优化差别基本上可以忽略。 -pipe 让编译器使用管道而不用临时文件进行通信, 这样可以减少磁盘存取 (以内存作为代价)。
传递 -jn 选项给 make(1) 以便并发运行多个进程。 这样就不会考虑您的是否是单个或多个处理器机器。
存放 /usr/src 的文件系统可以使用 noatime 选项被装载(或再装载)。 这样会防止文件系统记录文件的存取时间。您可能并不需要这些信息。
# mount -u -o noatime /usr/src
Warning这个例子里假定 /usr/src 是在它自已的文件系统里。如果不是 (例如假设它是 /usr 的部分),那么您就需要那个文件系统装载点, 而不是 /usr/src。
存放 /usr/obj 的文件系统可以使用 async 选项被装载(或被再装载)。 这会引起异步写盘。换句话说,写是立即完成了, 而数据要延迟几秒才会写到盘里。这就允许写到一堆, 如此产生戏剧性的性能提高。
Warning记住,这个选项会使您的文件系统更加脆弱。 使用这个选项增大了这样一个机率:要是电源断了, 在机器重启后,文件系统将处在不可恢复状态。
如果在这个文件系统里 /usr/obj 是很关键的,这不是问题。如果您有其它有价值的数据在同一个文件系统, 那么在您使用这个选项这前,确认备份一下。
# mount -u -o async /usr/obj
Warning同上,如果 /usr/obj 不在自已的文件系统里,使用相关装载点的名字把它从例子里边替换掉。
绝对确信您的环境没有先前 build 留下的残余。这点够简单。
# chflags -R noschg /usr/obj/usr # rm -rf /usr/obj/usr # cd /usr/src # make cleandir # make cleandir
不错,make cleandir 真的要执行两次。
然后重新开始整个过程,使用 make buildworld 开始。
如果您还有问题,就把错误和 uname -a 的输出发送到 FreeBSD 一般问题邮件列表 邮件列表。准备回答其它关于您的设置的问题!
如果您有多台机器想跟踪同样的源码树, 那么让它们都下载源码并重建所有东西,看起有点浪费资源: 磁盘空间、网络带宽以及 CPU 周期。 解决的办法是让一台机器处理大部分的工作,而其它的机器通过 NFS 装载 (mount) 这些工作。这部分列举了一种这样做的方法。
首先,确定一批机器,运行的二进制代码是同一套---我们称作 建造套件(build set)。每台机器可以有定制内核, 但他们运行的是相同的用户区二进制文件(userland binaries)。 从这个集起,选择一台机器做为 建造机器(build machine)。 这将是用于建造(build)系统和内核的机器。想像一下,它应该是一台快速的机器, 有足够的空余的 CPU 来执行make buildworld。 您也想要选一台机器做为 测试机器(test machine), 这个将用于软件的更新生成产品之前对他们进行测试。这个 必须 是一台您能提供的平时也可使用的机器。 它可以是“建造机器”,但没这个必要。
在这个“建造套件”里的所有机器需要从同一台机器、 同一个点上装载 /usr/obj 和 /usr/src。理想地, 它们在“建造机器”上的两个不同的驱动器里, 但是在那台机器上可以进行 NFS 装载。如果您有多个“建造套件”, /usr/src 应该在某个“建造机器”上, 而在其它机器上进行 NFS 装载。
最后,确认“建造套件”里所有机器上的 /etc/make.conf 与“建造机器”里的相同。 这意味着“建造机器”必须建造部分基本系统用于 “建造套件”里所有机器的安装。同样, 每台“建造机器”要有它自已的内核名字,使用 /etc/make.conf 里的 KERNCONF 进行设置,并且每台“建造机器”应该把它们列在 KERNCONF 里,同时把自已的内核列在最前。 “建造机器”的 /usr/src/sys/arch/conf 里一定要有每台机器的内核配置文件,如果它想建造它们的内核的话。
既然所有的妥当了,就准备建造所有的东西。如第 19.4.7.2 节中描述的一样在“建造机器”上建造内核和系统, 但是什么也不安装。在建造结束后,转到“测试机器”上, 安装您刚建造的内核。如果这台机器通过 NFS 装载了 /usr/src 和 /usr/obj, 在您重启到单用户模式里,您需要启动网络然后装载他们。 最简单的方式是启动到多用户模式下,然后执行 shutdown now 转到单用户模式。一旦进入,您就可以安装新的内核和系统,并执行 mergemaster,就像平常一样。完成后, 重启返回到一般多用户模式操作这台机器。
在您确信所有在“测试机器”里都工作正常后, 就使用相同的过程在“建造套件”里的其它机器里安装新的软件。
类似的想法是使用 ports 树。 第一个关键的步骤是从同一台机子里装载 /usr/ports 到“建造套件”里的所有机子。 然后正确设置 /etc/make.conf 共享 distfiles。您应把 DISTDIR 设置到一个共享的目录里, 那里可以被任何一个 root 用户写入,并且是由您的 NFS 装载映射的。设置每一台机子的 WRKDIRPREFIX 到一个本地建造 (build) 目录。最后,如果您要建造和发布包 (packages),那么您应该设置 PACKAGES 到一个类似于 DISTDIR 的目录。
UNIX 一直都是支持串口通讯的。事实上, 早期的 UNIX 系统就是利用串行线来输入和输出数据的。 那时常见的 “终端” 包括一个每秒10个字符的串行打印机和键盘, 现在这些已经发生了很大的变化。 这章将介绍一些利用 FreeBSD 进行串行通讯的方法。
读完这章,您将了解到:
如何通过终端连接到您的FreeBSD系统。
如何使用modem拨号到远程主机。
如何允许远程用户通过modem登录到您的系统。
如何从串行控制台引导您的系统。
阅读这章之前,您应当了解:
每秒位-- 数据的传输速度
数据终端设备 -- 如您的计算机
数据通讯设备 -- 如您的modem
用于硬件串行通讯的EIA标准
当讨论通讯数据速度的时候,这节不会使用术语 “baud”。Baud指电气标准传输率,它已经使用了很长时间, 而 “bps” (bits per second) 才是正确使用的术语 (至少它不会打扰那些爱争吵的家伙)。
要连接 modem 或终端到您的 FreeBSD 系统, 您需要有一个串口以及连接到您串行设备所需的线缆。 如果您比较熟悉硬件和它要求的线缆, 则可以跳过这节。
有好几种不同的串行线缆。 两个最普通的类型是 null-modem 线缆和标准RS-232线缆。 您硬件的规格说明会有详细描述。
一根null-modem线缆会直接通过像 “地信号” 这样的信号,而转换其他的信号。 例如, “数据发送” 连到对端的 “数据接收” 引脚上。
如果需要, 您可以自己做一个null-modem的线缆。 下面这个表列出了这个线缆 DB-25 头上的 RS-232C 信号名和引脚标号。
| 信号 | 引脚 # | 引脚 # | 信号 | |
|---|---|---|---|---|
| SG | 7 | 连接到 | 7 | SG |
| TD | 2 | 连接到 | 3 | RD |
| RD | 3 | 连接到 | 2 | TD |
| RTS | 4 | 连接到 | 5 | CTS |
| CTS | 5 | 连接到 | 4 | RTS |
| DTR | 20 | 连接到 | 6 | DSR |
| DCD | 8 | 6 | DSR | |
| DSR | 6 | 连接到 | 20 | DTR |
Note: 在连接头里面连接好“数据发送就绪” (DSR)和 “载波检测” (DCD) 两个信号,然后连接到对端的 “数据终端就绪” (DTR)。
串行端口是FreeBSD主机与终端传输数据的设备。 这节描述了端口的种类和它们在 FreeBSD 上是如何编址的。
存在好几种端口。 在购买和做线缆之前, 您需要确定它是否适合您机器的终端。
绝大多数的终端有DB25端口。个人计算机, 也包括运行 FreeBSD 的PC机, 通常都会有 DB25 或 DB9 插口。 如果您的计算机有一个多插口的串口卡, 则可以使用RJ-12 或RJ-45端口。
请仔细看看硬件的说明, 此外您也可以通过外观了解是什么插口。
在FreeBSD中,您可以通过 /dev 目录中的一个记录来访问每个串行端口。有两种不同的记录:
呼入端口被命名为/dev/ttydN, 这里 N 是端口号,从零开始。 通常,您使用呼入端口作为终端。呼入端口要求数据线使用载波检测 (DCD) 信号来工作。
呼出端口被命名为 /dev/cuaaN。 您通常不使用呼出端口作为终端, 只使用modem。 如果串行线或终端不支持载波检测数据传输, 您可以使用呼出端口。
如果您已经连接一个终端到第一个串行端口 (在 MS-DOS 上是COM1), 则可以使用 /dev/ttyd0 来作为终端。 如果它是在第二个串行端口 (COM2), 那就是 /dev/ttyd1,等等。
FreeBSD默认支持4个串行端口。在MS-DOS下,这些是 COM1, COM2, COM3, 和 COM4。FreeBSD当前支持 “dumb” 多插口串行接口卡,如 BocaBoard 1008 和 2016,与许多 Digiboard 和 Stallion Technologies 制造的智能多接口卡一样好。 然而, 默认的内核只会寻找标准的COM端口。
要看看您的内核是否支持您的串口,只要在内核启动时查看一下启动信息, 或使用 /sbin/dmesg 命令重新检测内核启动信息。 特别的,寻找以sio字符启动的信息。
Tip: 提示:要看看带有sio字符的信息, 可以使用下面的命令:
# /sbin/dmesg | grep 'sio'
例如,在一个带有4个串口的系统上,这些是串口特定的内核启动信息:
sio0 at 0x3f8-0x3ff irq 4 on isa sio0: type 16550A sio1 at 0x2f8-0x2ff irq 3 on isa sio1: type 16550A sio2 at 0x3e8-0x3ef irq 5 on isa sio2: type 16550A sio3 at 0x2e8-0x2ef irq 9 on isa sio3: type 16550A
如果您的内核没有认出您的所有串口,您需要为您的系统定制内核。 更多有关配置内核的细节,可以看看第9章第 8 章。
在您的内核配置文件中相关的设备行是这样的,FreeBSD 4.X:
device sio0 at isa? port port IO_COM1 irq 4 device sio1 at isa? port port IO_COM2 irq 3 device sio2 at isa? port IO_COM3 irq 5 device sio3 at isa? port IO_COM4 irq 9
FreeBSD 5.X:
device sio
您可以注释掉或完全删除您没有的设备。 FreeBSD 5.X 需要修改 /boot/device.hints文件。请看看 sio(4) 的有关如何为您的多插口主板写入配置信息的联机手册。 如果您使用了一个不同版本的 FreeBSD 的配置文件,请小心点, 因为设备的标记在两个版本之间已经改变了。
Note: 这里端口 IO_COM1 代替了 0x3f8,端口 IO_COM2 代替了 0x2f8,端口 IO_COM3 代替了 0x3e8,端口 IO_COM4 代替了 0x2e8,这些都是各自端口相应的端口地址。 中断4,3,5,9都是经常用的中断。也要注意有些正常的串行端口可能 无法 在一些ISA总线的PC上共享中断 (多插口板卡有板载的电子设备,允许在板上所有 16550A 的设备共享一个或两个中断请求)。
内核中的绝大多数设备可以通过 “设备特殊文件” 来访问, 它就在/dev目录下。 sio 设备通过 /dev/ttydN (拨入)和 /dev/cuaaN (拨出) 设备来访问。 FreeBSD 也提供了初始化的设备 (/dev/ttyidN 和 /dev/cuaiaN) 以及锁定的设备 (/dev/ttyldN 和 /dev/cualaN)。 初始化的设备在每次端口被打开时被用来初始化设备通讯端口参数。 例如使用 RTS/CTS 的流控制信号的 crts的调制解调器。 锁定设备用来锁定端口的标记以阻止用户或程序改变某个参数。 参见 termios(4)、sio(4) 以及 stty(1) 联机手册了解更多信息。
Note: 从 FreeBSD 5.0 开始, devfs(5) 文件系统将根据需要创建设备节点。 如果您在运行启用 devfs 的FreeBSD版本, 您就可以跳过这一节。
一个在/dev 目录下的叫做 MAKEDEV 的 shell 脚本管理着设备指定文件。 要使用 MAKEDEV 来建立拨号设备指定文件, 可以使用 COM1: (port 0), cd 进入 /dev, 然后执行命令 MAKEDEV ttyd0。 同样地,要建立拨号设备指定文件以使用 COM2: (port 1), 可以执行 MAKEDEV ttyd1。
MAKEDEV 不仅仅创建 /dev/ttydN 设备指定文件,也创建 /dev/cuaaN, /dev/cuaiaN, /dev/cualaN, /dev/ttyldN, 以及 /dev/ttyidN节点。
建立完新设备指定文件后, 需要检查文件的权限来确定谁可以在这些文件上读写 -- 您可能不想让普通的用户使用您的 modem 吧。 在/dev/cua*文件上的默认权限应该是足够了:
crw-rw---- 1 uucp dialer 28, 129 Feb 15 14:38 /dev/cuaa1 crw-rw---- 1 uucp dialer 28, 161 Feb 15 14:38 /dev/cuaia1 crw-rw---- 1 uucp dialer 28, 193 Feb 15 14:38 /dev/cuala1
这些许可允许用户uucp和在组dialer 上的用户使用呼出设备。
ttydN (或cuaaN) 设备是您将要打开的应用程序的一般设备。 当进程打开某个设备时, 它将有一个终端 I/O 设置的默认配置。 您可以在命令行看看这些设置:
# stty -a -f /dev/ttyd1
当您修改了这个设备的设置,这个设置会生效,除非设备被关闭。 当它被重新打开时,它将回到默认设置。 要修改默认设置,您可以打开和调整 “初始状态” 设备的设置。例如, 要为ttyd5 打开 CLOCAL 模式,8位通讯和默认的 XON/XOFF 流控制, 输入:
# stty -f /dev/ttyid5 clocal cs8 ixon ixoff
串行设备的系统初始化是用/etc/rc.serial文件类控制的。 这个文件会影响串行设备的默认设置。
要防止某个设置被一个应用程序所修改,需要调整 “锁状态”设备。 例如,要锁定ttyd5 的速度为57600 bit/s, 键入:
# stty -f /dev/ttyld5 57600
现在,一个打开ttyd5 和设法改变端口速度的应用程序将被固定在57600bit/s。很自然地, 您需要确定初始状态,然后用root帐户锁定状态设备的写入功能。
很显然,您应该只让 root 用户可以初始化或锁定设备的状态。
当您在计算机控制台或是在一个连接的网络上时, 终端提供了一个方便和低成本的访问FreeBSD系统的方法。 这节描述了如何在FreeBSD上使用终端。
早期的 UNIX 系统没有控制台。 人们通过将终端连接到计算机的串口来登录和使用程序。 它很像用 modem 和一些终端软件来拨号进入一个远程的系统, 只能执行文本的工作。
今天的 PC 已经可以使用高质量的图形了, 但与今天的其他UNIX操作系统一样,建立一个登录会话的能力仍然存在。 通过使用一个终端连接到一个没有使用的串口, 您就能登录和运行任何文本程序或在 X 视窗系统中运行一个 xterm 窗口程序。
对于商业用户,您可以把任何终端连接到 FreeBSD 系统, 然后把它们放在员工的桌面上。 对于家庭用户,则可以使用一台比较老的 IBM PC 或 Macintosh 运行一个终端连接到一台运行 FreeBSD 的高性能机器上。
对于FreeBSD,有三种终端:
下面一小节将描述每一种终端。
哑终端需要专门的好几种硬件,让您通过串行线连接到计算机。 它们被叫做 “哑” 是因为它们只能够用来显示, 发送和接收文本。 您不能在它上面运行任何程序。
有好几百种哑终端,包括Digital Equipment Corporation 的VT-100和Wyse的WY-75。只有几种可以在FreeBSD上工作。 一些高端的终端可以显示图形,但只有某些软件包可以使用这些高级特性。
哑终端被广泛用于那些不需要图形应用的工作中。
如果一个 哑终端 有足够的能力来显示,发送和接收文本, 那任何个人计算机都可以作为一个哑终端。 您所需要的只是适当的线缆和一些终端模拟软件。
这样一个配置被广泛运用于家庭。例如,如果您的妻子忙于在您的 FreeBSD 系统控制台上工作,您也可以从一台低档的个人计算机登录到 FreeBSD 系统执行一些文本的工作。
这节描述了您在一个终端上启用一个登录会话,需要在 FreeBSD 系统上配置些什么。假设您已经配置好了内核来支持串行端口,您就可以连接了。
在 第 12 章 中曾经提到, init 进程依赖于系统启动时所有的处理控制和初始化。 通过 init 来执行的一些任务将先读取 /etc/ttys文件, 然后在可用的终端上启用一个 getty 进程。 getty 进程可用来阅读一个登录名和启动 login程序。
然而,要为您的FreeBSD系统配置终端,您需要以 root 身份执行下面的步骤:
如果它不在那儿,您需要为串行端口在 /dev目录下添加一行记录到 /etc/ttys。
指定 /usr/libexec/getty 在端口上运行, 然后从 /etc/gettytab 文件指定适当的 getty 类型。
指定默认的终端类型。
设置端口为 “on”。
确定端口是否为 “secure”。
迫使init 重新读取 /etc/ttys文件。
作为可选的步骤,您可以通过在 /etc/gettytab 中建立一个记录,在第2步创建一个定制的 getty 类型来使用。这章不会介绍如何做。 您可以参考 gettytab(5) 和 getty(8) 的联机手册了解更多信息。
/etc/ttys文件列出了您 FreeBSD系统上允许登录的所有端口。 例如, 第一个虚拟控制台 ttyv0 在这个文件中有一个记录。 您可以使用这个记录登录进控制台。 这个文件也包含其他虚拟控制台的记录,串口,和伪 ttys 终端。 对于一个硬连线的终端, 只要列出串行端口的 /dev 记录而不需要 /dev部分 (例如, /dev/ttyv0 可以被列为 ttyv0)。
默认的 FreeBSD 安装包括一个支持最初四个串口 ttyd0 到 ttyd3 的/etc/ttys 文件。 如果您从那些端口中某一个使用终端,您不需要添加另一个记录。
Example 20-1. 添加终端记录到/etc/ttys
假设我们连接两个终端给系统: 一个 Wyse-50 和一个老的运行 Procomm 终端软件模拟一个 VT-100 终端的286IBM PC。 在 /etc/ttys 文件中的相应的记录是这样的:
ttyd1"/usr/libexec/getty std.38400"
wy50
on
insecure
ttyd5 "/usr/libexec/getty std.19200" vt100 on insecure


getty 程序在它的命令行接收一个参数 (可选), getty 类型。 一个 getty 类型会在终端行描述一个特征, 像波特率和奇偶校验。 getty 程序从 /etc/gettytab 文件读取这些特征。
文件/etc/gettytab 包含了许多老的和新的终端行记录。 在很多例子中,启动文本 std 的记录将用硬连线终端来工作。 这些记录忽略了奇偶性。 这是一个从110到115200 bit/s的 std 记录。 当然,您可以添加您自己的记录到这个文件。 gettytab 的联机手册提供了更多的信息。
当在/etc/ttys中设置 getty 类型的时候, 确信在终端上的通讯设置匹配。 在我们的例子中, Wyse-50 不使用奇偶性, 用38400 bit/s 来连接。286 PC不使用奇偶性,用19200bit/s来连接。

在我们的例子中, Wyse-50 使用真正的终端类型, 而运行 Procomm 的286 PC将被设置成在VT-100上的模拟。


对/etc/ttys文件做一个必要的修改后,您必须发送一个 SIGHUP 信号给初始化进程来迫使它重新读取配置文件,例如:
# kill -HUP 1
Note: init 总是系统运行时的第一个进程,因此它总是PID 1。
如果能够正确设置,所有的线缆都是适当的,终端将可以启用了, 然后一个 getty 进程将在每个终端运行, 您将在您的终端上看到登录命令行。
即使您小心翼翼地注意细节,您仍然可能会在设置终端时出错。 这有一个有关问题和解决办法的列表:
确定终端被嵌入和打开了。如果把一台个人计算机充当一个终端, 确信终端模拟软件运行在正确的串口上。
确信线缆被稳固地连接在终端和 FreeBSD 计算机上。 确信用了正确的电缆。
确定终端和 FreeBSD 的传输速度和奇偶设置已经一致了。 如果您有一个图像显示终端,确信对比度已经调节好了。 如果它是一个可打印的终端,确信纸张和墨水已经就绪了。
确定一个 getty 进程正在运行和服务终端。 例如, 可以用ps 命令得到运行 getty 程序的列表,键入:
# ps -axww|grep getty
您将看到一个终端的记录。例如,下面的显示表明一个getty 正在第二个串行端口 ttyd1 运行, 正在/etc/gettytab中使用 std.38400 的记录:
22189 d1 Is+ 0:00.03 /usr/libexec/getty std.38400 ttyd1
如果没有 getty 进程运行, 确信您已经在/etc/ttys中启用了端口。 在修改完/etc/ttys文件后,记得运行 kill -HUP 1。
如果 getty 进程确实在运行, 但终端上仍然没有显示出登录提示, 或者虽然显示了单缺不允许您输入, 您的终端或电缆可能不支持硬件握手。 请尝试将 /etc/ttys 中的 std.38400 改为 3wire.38400 并一定能够记得在改完 /etc/ttys 之后 kill -HUP 1)。 3wire 记录和 std 类似, 但忽略硬件握手。 您可能需要在使用 3wire 时减少波特率或启用软件流控制以避免缓冲区溢出。
确信终端和 FreeBSD 使用相同的 bit/s 传输率和奇偶校验设置。 检查一下 getty 进程确信当前使用正确的 getty 类型。 如果没有, 编辑/etc/ttys然后运行kill -HUP 1。
为拨入服务配置FreeBSD系统与连接到终端是非常相似的,除非您正在使用 modem来拨号而不是终端。
外置modem看起来很容易拨号。 因为,外置 modem 可以通过储存在非易失性的RAM中的参数来配置, 它们通常提供指示器来显示重要的RS-232信号的状态。 不停闪光的信号灯能给用户留下比较深刻的印象, 而且指示器也可以用来查看modem是否正常地工作。
内置modem通常缺乏非易失性的RAM, 所以对它们的配置可能会限制在通过 DIP 开关来设置。 如果您的内置modem有指示灯,您也很难看得到。
如果您使用一个外置的 modem,那您将需要适当的电缆线。 一个标准的串行线应当足够长以至普通的信号能够连接上:
Transmitted Data (TD)
Received Data (RD)
Request to Send (RTS)
Clear to Send (CTS)
Data Set Ready (DSR)
Data Terminal Ready (DTR)
Carrier Detect (CD)
Signal Ground (SG)
FreeBSD需要对速度超过2400bit/s的RTS 和 CTS信号进行流控制, 当一个呼叫被回复或线路被挂起的时候, CD 信号就会被侦测到,一个会话完成之后,DTR 信号就会刷新modem。 一些线缆不需要任何信号就可以连接, 所以如果您有问题, 当线路被挂断时, 一个登录任务就会丢失, 您可能会在线缆上有问题。
像其他 UNIX 类的操作系统一样, FreeBSD 使用硬件信号来寻找出一个呼叫什么时候会回复或一个线路会被挂起。 FreeBSD 避免发送命令给 modem 或监视 modem 的状况。 如果您熟悉连接 modem 到基于 PC 的 BBS,这可能看起来有点笨拙。
FreeBSD支持基于 NS8250, NS16450, NS16550 和 NS16550A 的EIA RS-232C通讯接口。 8250和16450设备有单字符缓冲。 16550设备提供了一个 16 个字符的缓冲, 可以提高更多的系统性能。 因为单字符缓冲设备比 16 个字符的缓冲需要更多的系统资源来工作, 所以基于16550A的接口卡可能更好。 如果系统没有活动的串口, 或有较大的负载, 16 字符缓冲的卡对于低错误率的通讯来说更好。
对于终端, init 会在每个配置串口上为每个拨入连接产生一个 getty 进程。 例如, 如果一个 modem 被附带在 /dev/ttyd0 中,用命令ps ax可以显示下面这些:
4850 ?? I 0:00.09 /usr/libexec/getty V19200 ttyd0
当用户拨上modem, 并使用它进行连接时, CD 线就会被 modem 认出。 内核注意到载波信号已经被检测到, 需要完成 getty 端口的打开。 getty 发送一个登录:在指定的初始线速度上的命令行。 Getty 会检查合法的字符是否被接收, 在典型的配置中, 如果发现 “垃圾”, getty 就会设法调节线速度,直到它接收到合理的字符。
用户在键入他/她的登录名称后, getty执行/usr/bin/login, 这会要求用户输入密码来完成登录, 然后启动用户的shell。
在 /etc 目录中,有三个您将需要编辑的系统配置文件, 来允许拨号访问到您的 FreeBSD 系统。 第一, /etc/gettytab 包含了针对 /usr/libexec/getty 守护程序的配置信息。 第二, 保存信息来告诉 /sbin/init 什么 tty 设备将有运行在它们系统上的 getty进程。 最后, 您可以把端口初始化命令放在 /etc/rc.serial 脚本中。
在 UNIX 上, 关于拨号 modem 的想法主要有两种。 一种是把本地接口配置成一个固定速度, 以至一个远程用户拨号进入时都保持一个固定速度。 这样配置的好处是远程用户总是可以立即看到一个系统的登录界面。 这种下降趋势是系统不知道一个用户真正的数据速度是多少, 所以像 Emacs 全屏程序将不会调节屏幕刷新来确保对比较慢的连接有比较好的回应。
另一所学校将他们的 modem 所在的 RS-232 设置为自动适应远程用户的连接速度。 例如, V.32bis (14.4 Kbps) 的连接将让 modem 所在的 RS-232 接口运行在 19.2 Kbps, 而 2400 bps 的连接则会使 modem 的 RS-232 以 2400 bps 运行。 由于 getty 并不知道任何一个特定的 modem 的连接速率, 因此 getty 会以初始的速率给出一个 login: 消息并监视用户回应的字符。 如果用户看到一些乱码, 则他们应该知道连续按 Enter 键直到能够看到可以识别的提示为止。 如果数据传输速率不匹配, getty 将把用户输入的任何信息看作 “乱码”, 并尝试下一个速度并再次给出 login: 提示。 这个过程可以令人作呕地继续下去, 但用户通常只需按一两次键盘就可以看到正常的提示了。 很明显, 这个登录过程看起来可能没有前面所介绍的 “锁定速率” 方法那样脉络清晰, 但在低速连接上的用户应该能够从全屏幕程序中得到更好的交互响应。
这一节将尽量给出较为公平的配置信息, 但更偏向于使用遵守连接速率的 modem。
/etc/gettytab是一个用来配置 getty 信息的 termcap 风格的文件。 请看看 gettytab 的联机手册了解完整的文件格式和功能列表。
您将需要在 /etc/gettytab 中设置一个记录来告诉 getty 您希望在 modem 上使用的速度。 如果您的 modem 的速率是 2400 bit/s, 则可以使用现有的 D2400 的记录。
#
# Fast dialup terminals, 2400/1200/300 rotary (can start either way)
#
D2400|d2400|Fast-Dial-2400:\
:nx=D1200:tc=2400-baud:
3|D1200|Fast-Dial-1200:\
:nx=D300:tc=1200-baud:
5|D300|Fast-Dial-300:\
:nx=D2400:tc=300-baud:
如果您有一个更高速度的 modem, 必须在 /etc/gettytab 中添加一个记录。 下面是一个让您可以以最高 19.2 Kbit/s 的用在 14.4 Kbit/s的modem上的接口记录:
#
# Additions for a V.32bis Modem
#
um|V300|High Speed Modem at 300,8-bit:\
:nx=V19200:tc=std.300:
un|V1200|High Speed Modem at 1200,8-bit:\
:nx=V300:tc=std.1200:
uo|V2400|High Speed Modem at 2400,8-bit:\
:nx=V1200:tc=std.2400:
up|V9600|High Speed Modem at 9600,8-bit:\
:nx=V2400:tc=std.9600:
uq|V19200|High Speed Modem at 19200,8-bit:\
:nx=V9600:tc=std.19200:
这样做的结果是 8-数据位, 没有奇偶校验的连接。
上面使用19.2 Kbit/s的连接速度的例子,也可以使用 9600 bit/s (for V.32), 2400 bit/s, 1200 bit/s,300 bit/s, 直到 19.2 Kbit/s。 通讯率的调节使用 nx= (“next table”) 来实现。 每条线使用一个 tc= (“table continuation”) 的记录来加速对于一个特殊传输率的标准设置。
如果您有28.8 Kbit/s的modem,或您想使用它的 14.4Kbit/s 模式, 就需要使用一个更高的超过 19.2 Kbit/s 的通讯速度的 modem。 这是一个启动 57.6 Kbit/s 的 gettytab 记录的例子:
#
# Additions for a V.32bis or V.34 Modem
# Starting at 57.6 Kbps
#
vm|VH300|Very High Speed Modem at 300,8-bit:\
:nx=VH57600:tc=std.300:
vn|VH1200|Very High Speed Modem at 1200,8-bit:\
:nx=VH300:tc=std.1200:
vo|VH2400|Very High Speed Modem at 2400,8-bit:\
:nx=VH1200:tc=std.2400:
vp|VH9600|Very High Speed Modem at 9600,8-bit:\
:nx=VH2400:tc=std.9600:
vq|VH57600|Very High Speed Modem at 57600,8-bit:\
:nx=VH9600:tc=std.57600:
如果您的 CPU 速度较低, 或系统的负荷很重, 而且没有 16550A的串行端口,您可能会在57.6 Kbit/s上得到 “sio” “silo”错误。
/etc/ttys文件的配置在 例 20-1中介绍过。 配置 modem 是相似的, 但我们必须指定一个不同的终端类型。 锁定速度和匹配速度配置的通用格式是:
ttyd0 "/usr/libexec/getty xxx" dialup on
上面的第一条是这个记录的设备特定文件 -- ttyd0 表示 /dev/ttyd0 是这个 getty 将被监视的文件。 第二条 "/usr/libexec/getty xxx" 是将运行在设备上的进程 init。 第三条,dialup,是默认的终端类型。 第四个参数, on, 指出了线路是可操作的 init。 也可能会有第五个参数, secure, 但它将只被用作拥有物理安全的终端 (如系统终端)。
默认的终端类型可能依赖于本地参考。 拨号是传统的默认终端类型, 以至用户可以定制它们的登录脚本来注意终端什么时候拨号, 和自动调节它们的终端类型。 然而, 作者发现它很容易在它的站点上指定 vt102 作为默认的终端类型, 因为用户刚才在它们的远程系统上使用的是VT102模拟器。
您对/etc/ttys作修改之后,您可以发送 init 进程给一个 HUP 信号来重读文件。您可以使用下面的命令来发送信号:
# kill -HUP 1如果这是您的第一次设置系统, 您可能要在发信号 init 之前等一下, 等到您的 modem 正确地配置并连接好。
对于一个锁定速度的配置,您的 ttys 记录必须有一个为 getty 提供固定速度的记录。 对于一个速度被锁定在 19.2kbit/s 的 modem, ttys 记录是这样的:
ttyd0 "/usr/libexec/getty std.19200" dialup on
如果您的 modem 被锁定在一个不同的数据速度, 为 std.speed 使用适当的速度来代替 std.19200。 确信您使用了一个在 /etc/gettytab 中列出的正确的类型。
在一个匹配速度的设置中,您的 ttys 录需要参考在 /etc/gettytab 适当的起始 “auto-baud” 记录。 例如, 如果您为一个以 19.2 Kbit/s 开始的可匹配速度的 modem 添加上面建议的记录, 您的 ttys 记录可能是这样的:
ttyd0 "/usr/libexec/getty V19200" dialup on
高速modem, 像 V.32,V.32bis,和 V.34 modem,需要使用硬件 (RTS/CTS) 流控制。 您可以在 /etc/rc.serial 中添加 stty 命令来设置硬件流控制标记。
例如,在拨入和拨出初始设备的第一个 (COM2) 串行端口上设置termios标记crtscts, 下面这些行会被添加到 /etc/rc.serial中:
# Serial port initial configuration stty -f /dev/ttyid1 crtscts stty -f /dev/cuaia1 crtscts
如果您有一个 modem, 它的参数能被存储在非易失性的 RAM 中, 您将必须使用一个终端程序来设置参数。 使用同样的通讯速度来连接 modem 作为初始速度 getty 将使用和配置 modem 的非易失性RAM来匹配这些要求:
CD asserted when connected
DTR asserted for operation; dropping DTR hangs up line and resets modem
CTS transmitted data flow control
Disable XON/XOFF flow control
RTS received data flow control
Quiet mode (no result codes)
No command echo
请读读您的 modem 的文档找到您需要用什么命令和 DIP 接口设置。
例如,要在一个 USRobotics Sportster 14400 的外置 modem 上设置上面的参数,可以用下面这些命令:
ATZ AT&C1&D2&H1&I0&R2&W
您也可能想要在 modem 上寻找机会调节这个设置, 例如它是否使用 V.42bis 和 MNP5 压缩。
外置 modem 也有一些用来设置的 DIP 开关, 也许您可以使用这些设置作为一个例子:
Switch 1: UP -- DTR Normal
Switch 2: N/A (Verbal Result Codes/Numeric Result Codes)
Switch 3: UP -- Suppress Result Codes
Switch 4: DOWN -- No echo, offline commands
Switch 5: UP -- Auto Answer
Switch 6: UP -- Carrier Detect Normal
Switch 7: UP -- Load NVRAM Defaults
Switch 8: N/A (Smart Mode/Dumb Mode)
在拨号 modem 上的结果代码应该被 禁用/抑制, 以避免当 getty 在 modem 处于命令模式并回显输入时错误地给出 login: 提示时可能造成的问题。 这样可能导致 getty 与 modem 之间产生更长的不必要交互。
对于锁定速度的配置, 您需要配置 modem 来获得一个不依赖于通讯率的稳定的 modem到计算机 的传输率。 在一个 USR Sportster 14400 外置 modem 上, 这些命令将锁定 modem到计算机 的传输率:
ATZ AT&B1&W
对于一个变速的配置, 您需要配置 modem 调节它的串行端口传输率匹配接收的传输率。 在一个 USR Sportster 14400 的外置 modem 上, 这些命令将锁定 modem 的错误修正传输率适合命令要求的速度, 但允许串行端口速度适应没有纠错的连接:
ATZ AT&B2&W
大多数高速的modem提供了用来查看当前操作参数的命令。 在USR Sportster 14400外置modem上, 命令 ATI5 显示了存储在非易失性RAM中的设置。 要看看正确的 modem 操作参数, 可以使用命令 ATZ 然后是 ATI4。
如果您有一个不同牌子的 modem, 检查 modem 的使用手册看看如何双重检查您的 modem 的配置参数。
这儿是几个检查拨号modem的步骤。
把您的modem连接到FreeBSD系统, 启动系统, 然后, 如果您的 modem 有一个指示灯, 当登录时看看 modem 的 DTR 指示灯是否亮: 会在系统控制台出现命令行——如果它亮, 意味着 FreeBSD 已经在适当的通讯端口启动了一个 getty 进程, 等待 modem 接收一个呼叫。
如果DTR指示灯不亮, 通过控制台登录到 FreeBSD系统,然后执行一个 ps ax 命令来看 FreeBSD 是否正在正确的端口运行 getty进程。 您将在进程显示中看到像这样的一行:
114 ?? I 0:00.10 /usr/libexec/getty V19200 ttyd0 115 ?? I 0:00.10 /usr/libexec/getty V19200 ttyd1
如果您看到是这样的:
114 d0 I 0:00.10 /usr/libexec/getty V19200 ttyd0
modem 不接收呼叫, 这意味着 getty 已经在通讯端口打开了。 这可以指出线缆有问题或 modem 错误配置, 因为 getty 无法打开通讯端口。
如果您没有看到任何 getty 进程等待打开想要的 ttydN 端口, 在 /etc/ttys 中双击您的记录看看那儿是否有错误。 另外,检查日志文件 /var/log/messages 看看是否有一些来自 init 或 getty 的问题日志。 如果有任何信息, 仔细检查配置文件 /etc/ttys 和 /etc/gettytab,还有相应的设备文件 /dev/ttydN, 是否有错误,丢失记录,或丢失了设备指定文件。
设法拨入系统。 确信使用8位, 没有奇偶检验, 在远程系统上的1阻止位。 如果您不能立刻得到一个命令行, 试试每隔一秒按一下 Enter。 如果您仍没有看到一个登录: 设法发送一个 BREAK。 如果您正使用一个高速的 modem 来拨号, 请在锁定拨号 modem 的接口速度后再试试。
如果您不能得到一个登录:prompt,再检查一下 /etc/gettytab,重复检查:
在/etc/ttys 中指定的初始可用的名称与 /etc/gettytab 的一个可用的相匹配。
每个 nx= 记录与另一个 gettytab 可用名称匹配。
每个 tc= 记录与另一个 gettytab可用名称相匹配。
如果您拨号但 FreeBSD 系统上的 modem 没有回应, 确信 modem 能回应电话。 如果 modem 看起来配置正确了, 通过检查 modem 的指示灯来确认 DTR 线连接正确。
如果您做了好几次,它仍然无法工作,打断一会,等会再试试。 如果还不能工作, 也许您应该发一封电子邮件给 FreeBSD 一般问题邮件列表 寻求帮助。
下面将让您的主机通过 modem 连接到另一台计算机上。 这只要适当地建立一个终端作为远程主机就可以。
这可以用来登录进一个BBS。
如果您用 PPP 有问题, 那这种连接可以用来从 Internet 上下载一个文件。 如果您必须 FTP 一些东西, 而 PPP 断了, 使用终端会话来 FTP 它们。 然后使用 zmodem 来把它们传输到您的机器上。
事实上, 联机手册对于这个的描述已经过时了。 一个通用的 Hayes拨号已经内建其中。 只要在您的 /etc/remote 文件中使用 at=hayes。
Hayes 驱动不够 “聪明” 只能认出一些比较新的 modem 的高级特性 -- 如 BUSY、 NO DIALTONE, 或 CONNECT 115200 的信息将被搞乱。 当您使用的时候, 您必须把这些信息关掉。(通过 ATX0&W)。
另外,拨号的延迟是 60 秒。 您的 modem 可能使用另外的时间或提示认为有其他的通讯问题。 试试 ATS7=45&W。
Note: 注意: 实际上 tip 不支持所有的 Hayes modems。 解决方法是编辑 /usr/src/usr.bin/tip/tip 目录中的 tipconf.h 文件。很明显, 您需要它的源代码才能这样做。
把行#define HAYES 0 改为 #define HAYES 1。 然后 make 并 make install就可以了。
在 /etc/remote 文件中编译一个叫做 “direct” 的记录。 例如, 如果您的 modem 连接在第一个串行端口, /dev/cuaa0, 就添加下面这行:
cuaa0:dv=/dev/cuaa0:br#19200:pa=none
使用 br 命令来启用您 modem 支持的最高传输速度。 然后键入 tip cuaa0, 您就可以连到您的 modem 上了。
如果在您的系统上没有 /dev/cuaa0,可以这样:
# cd /dev # sh MAKEDEV cuaa0
或以 root 使用 cu, 执行下面的命令:
# cu -lline -sspeed
line line是串行端口 (例如 /dev/cuaa0), speed 是速度 (如57600)。 键入 ~. 退出。
在电话号码中的 @ 标记告诉计算机在 /etc/phones 文件中查找一个电话号码。 但 @ 标记也是一个在像 /etc/remote 这样的可用文件中的特殊字符。 用一个反斜线符号退出:
pn=\@
在您的 /etc/remote 文件中通常放着一个叫做 “generic” 的记录。 例如:
tip115200|Dial any phone number at 115200 bps:\
:dv=/dev/cuaa0:br#115200:at=hayes:pa=none:du:
tip57600|Dial any phone number at 57600 bps:\
:dv=/dev/cuaa0:br#57600:at=hayes:pa=none:du:
然后,您可以这样:
# tip -115200 5551234
如果您更喜欢cu而不是tip,使用一个通用的cu记录:
cu115200|Use cu to dial any number at 115200bps:\
:dv=/dev/cuaa1:br#57600:at=hayes:pa=none:du:
然后键入:
# cu 5551234 -s 115200
添加一项 tip1200 或 cu1200, 并将 bps 速率换成更合适的值。 tip 的默认值是1200 bps, 也就是为什么会有 tip1200 这条记录的原因。 虽然您并不需要使用 1200 bps。
除非每次都要等到您连接到主机然后键入 CONNECT <host>, 否则使用 tip 的 cm 功能。 例如, 在 /etc/remote 中的这些记录:
pain|pain.deep13.com|Forrester's machine:\
:cm=CONNECT pain\n:tc=deep13:
muffin|muffin.deep13.com|Frank's machine:\
:cm=CONNECT muffin\n:tc=deep13:
deep13:Gizmonics Institute terminal server:\
:dv=/dev/cuaa2:br#38400:at=hayes:du:pa=none:pn=5551234:
将让您键入 tip pain 或 tip muffin 连接到主机pain或muffin, 和 tip deep13 连接到终端服务器。
经常有一个问题, 一个大学有几个modem线路, 几千个学生设法使用它们。
在 /etc/remote 中为您的大学添加一个记录, 然后为 pn 功能使用 @ 标记:
big-university:\
:pn=\@:tc=dialout
dialout:\
:dv=/dev/cuaa3:br#9600:at=courier:du:pa=none:
接着, 在 /etc/phones 中列出大学的电话号码:
big-university 5551111 big-university 5551112 big-university 5551113 big-university 5551114
tip 将按顺序试用每一个,然后就停止。 如果想继续测试, 隔一段时间再运行 tip。
Ctrl+P是默认的“强制”字符,被用来告诉tip下一个字符是文字的数据。您可以用~s给任何其他的字符设置强制字符,这意思是“设置一个变量”。
在新的一行键入 ~sforce=single-char。 single-char 是任何简单的字符。 如果您遗漏了 single-char, 那强制字符就是空字符, 这可以键入 Ctrl+2 或 Ctrl+Space来完成。 更好的 single-char 是 Shift+Ctrl+6, 这只用在一些终端服务器上。
通过在您的 $HOME/.tiprc 文件中指定下面这行, 就可以得到您想要的任何强制字符:
force=<single-char>
您一定是键入了 Ctrl+A, 即 tip 的 “raise character”, 会临时地指定成坏掉的 caps-lock键。 使用上面的 ~s 来合理地设置各种 raisechar。 事实上, 如果您不想使用这些特性的话,您可以用同样的方法设置强制字符。
这儿有一个很好的示例 .tiprc 文件, 对 Emacs用户来说,需要经常按 Ctrl+2 和 Ctrl+A:
force=^^ raisechar=^^
The ^^ is Shift+Ctrl+6.
如果您正在与另一台 UNIX 系统对话, 您可以用 ~p(put) 和 ~t (take) 发送和接收文件。 这些命令可以在远程系统上运行 cat 和 echo 来接收和发送文件。 语法是这样的:
~p local-file [remote-file]
~t remote-file [local-file]
由于没有错误校验, 所以您需要使用其他协议, 如 zmodem。
要接收这些文件,可以在远程终端启动发送程序。然后,键入 ~C rz 在本地开始接收它们。 要发送文件, 可以在远程终端启动接收程序。 然后, 键入 ~C sz files 把它们发送到远程系统。
FreeBSD可以通过一个串口只使用一个哑 (dumb) 终端就可以启动一个系统。 这样一种配置只有两种人能使用: 希望在机器上安装 FreeBSD 的系统管理员, 他没有键盘或显示器, 还有就是要调试内核或设备驱动程序的开发人员。
就象 第 12 章 描述的, FreeBSD 采用一个三步的启动过程。 最先两步储存在 FreeBSD 启动磁盘的启动 slice 的启动代码块中。 引导块然后就被加载, 接着运行第三步启动引导器 (/boot/loader)。
为了设置串行控制台, 您必须配置启动代码块, 启动引导器代码和内核。
这一节假定您使用默认的配置, 只希望迅速地获得关于配置串口控制台的概览。
使用串口电缆连接 COM1 和控制终端。
要在串行控制台上察看启动信息, 使用下面的命令 echo "set console=comconsole" > /boot/loader.conf。
编辑 /etc/ttys 并把 ttyd0 的 off 改为 on, dialup 改为 vt100。 否则通过串行控制台上将不会提示输入口令, 从而导致潜在的安全漏洞。
重新启动并观察是否生效。
如果需要不同的配置, 更进一步的配置讨论可以在 第 20.6.3 节 找到。
准备一个串行线缆。
您需要使用一个 null-modem 的线缆或标准的串行线和一个 null-modem 适配器。 请参考 第 20.2.2 节 中有关串行线的讨论。
拔掉键盘。
绝大多数的PC在开机检测的时候会检测到键盘, 如果没有检测到键盘, 则会出现错误。 一些机器会提示缺少键盘, 就不会继续引导系统。
如果您的计算机出现错误, 但仍能继续启动, 您可以不必理它。
如果您的计算机没有键盘拒绝启动, 那您需要配置 BIOS 来避免它。 请参考您的主板的使用说明了解更多细节。
Tip: 在 BIOS 中设置键盘 “Not installed” 并不意味着您不能使用键盘。 这样做只是告诉 BIOS 不要在机器开机检测时检测键盘以至提示您系统找不到键盘。 即使您设置了 “Not installed”, 只要把键盘插上去仍然可以使用。
Note: 如果系统有 PS/2 鼠标, 如果幸运的话, 您也可以象键盘一样把它拔下来, 这是因为 PS/2 鼠标与键盘的一些硬件是共享的, 您的鼠标插上去, 系统会认为键盘仍在那儿。
插一个哑 (dumb) 终端到COM1:(sio0)。
如果您没有哑终端, 可以使用一个比较老的带有一个 modem 程序的PC/XT机器, 或在其他 UNIX 机器上的串口。 如果您没有 COM1: (sio0), 去找一个。 这时, 您就不能只能选择 COM1:来启动系统。 如果您已经在另一台设备上使用 COM1, 您必须临时删除那个设备, 然后安装一个新的系统引导块和内核。
确信您的内核配置文件已经为 COM1: (sio0) 设置了适当的标记:
有关的标记是:
启用控制台支持。 如果没有设置它, 则其他的控制台标记都会被忽略。 现在, 绝大多数的设置都有控制台的支持。 这个标记的第一个就是首选的。 这个单独选项是不能确保串口适用于控制台的, 设置下面的标记或加上下面描述的 -h 选项, 和这个放在一起。
不管下面有没有讨论, 都强制这个选项支持控制台。 这个标记在 FreeBSD 2.X 中取代了 COMCONSOLE选项。 标记 0x20 必须和 0x10 一起使用。
预留这个单元 (配合 0x10) 并让它不能用于普通的使用。 您不应在希望作为控制台的串口单元上设置这个标志。 这一标志是为内核远程调试准备的。 参见 开发者手册 以了解关于远程调试更进一步的情况。
Note: 在FreeBSD 4.0-CURRENT和以后的版本中,标记 0x40通常是不同的, 有另一个标记可以来指定一个串口用于远程调试。
例如:
device sio0 at isa? port IO_COM1 flags 0x10 irq 4
看看 sio(4) 的联机手册了解更多信息。
如果标记没有被设置, 您必须运行UserConfig或重新编译内核。
在启动磁盘的 a 分区的根目录创建 boot.config 文件。
这个文件将指导引导块代码如何启动系统。 为了激活串行控制台, 您必须有一个或多个下面的选项——如果您要多个选项, 在同一行必须都包含它们:
切换内部和串行控制台。 您使用这个来交换控制台设备。 例如, 如果您从内部控制台启动, 您可以使用 -h 来直接使用启动引导器和内核来使用串口作为它的控制台设备。 另外, 如果您从串口启动, 您可以使用 -h 来告诉启动引导器和内核使用显示设备作为控制台。
切换单一和双重控制台配置。 在单一配置中, 控制台将是本机的控制台 (显示设备) 或串口。 在双重控制台配置中, 显示设备和串口将同时成为控制台, 无论 -h 的选项的情形。 然而, 双控制台配置只在引导块运行的过程中起作用。 一旦启动引导器获得控制, 由 -h 选项指定的控制台将成为唯一的控制台。
在启动时,探测键盘。如果键盘找不到, -D 和 -h 选项会自动设置。
Note: 由于当前版本引导块的空间限制, -P 选项只能探测扩展的键盘。 少于101键的键盘将无法被探测到。 如果您碰到这个情况, 您必须避免使用 -P 选项。 目前还没有绕过这个问题的办法。
使用 -P 选项来自动选择控制台, 或使用 -h 选项来激活控制台。
您也可以使用boot联机文档中所描述的其他选项。
除了 -P 选项, 所有选项将被传给启动引导器 (/boot/loader)。 启动引导器将通过检查 -h 选项的状态来决定是显示设备成为控制台, 还是串口成为控制台。 这表示如果您指定 -D 选项, 但在 /boot.config 中没有 -h 选项, 您在启动代码块时使用串口作为控制台。 启动引导器将使用内部显示设备作为控制台。
启动机器
当您启动您的FreeBSD时,引导块将把 /boot.config 的内容发给控制台。例如:
/boot.config: -P Keyboard: no
如果您把 -P 放在 /boot.config 中并指出键盘存在或不存在, 那将只出现第二行。 这些信息会被定位到串口或内部控制台, 或两者同时, 这完全取决于 /boot.config 中的选项。
出现上面信息后,在引导块加载启动引导器和更多信息被映到屏幕之前将有一个小小的停顿。 在通常情况下, 您不需要打断启动进程, 但为了确信设置是否正确, 您也可以这样做。
在控制台上按 Enter 以外的任意键就能打断启动进程。 引导块将进入命令行模式。 您将看到:
>> FreeBSD/i386 BOOT Default: 0:ad(0,a)/boot/loader boot:
检验上面出现的信息, 可能是串口, 或内部控制台, 或两个同时, 完全取决于您在 /boot.config 中的选项。 如果信息出现在正确的控制台, 按 Enter 继续启动进程。
如果您要使用串行控制台, 但您没有看到命令行, 那可能设置有问题。 这时, 输入 -h 然后按 Enter/Return 来告诉引导块 (然后是启动引导器和内核) 选择串口作为控制台。 一旦系统起来了, 就可以回去检查一下是什么出了问题。
启动引导器加载完后, 您将进入启动进程的第三步, 您仍然可以在启动引导器通过设定您喜欢的环境来切换内部控制台和串行控制台。 参考 第 20.6.6 节。
这是几个在这章要讨论的几个设置和选择的控制台的摘要。
默认的串口被设置成9600波特,8数据位, 无奇偶校验, 1个停止位。 如果您希望改变速度, 就必须重新编译引导块。在 /etc/make.conf 中添加下面一行, 然后编译新的引导块:
BOOT_COMCONSOLE_SPEED=19200
参见 第 20.6.5.2 节 以了解如何编译和安装新的引导块。
如果串行控制台用其他方法来配置而不是在启动时用 -h, 或内核使用的串行控制台与引导块使用的不同, 就必须在内核配置中加入下面这行,并重新编译内核:
options CONSPEED=19200
使用串口而不是 sio0 作为控制台需要做一些重编译。 如果您无论如何都要使用另一个串口, 重新编译引导块, 启动引导器和内核。
取得内核源代码 (参考 第 19 章)。
编辑 /etc/make.conf 文件, 然后设置 BOOT_COMCONSOLE_PORT作为您要使用 (0x3f8、 0x2f8、 0x3E8 或 0x2E8) 端口的地址。 只有 sio0 到 sio3 (COM1 到 COM4) 都可以使用; 但多口串行卡将不会工作。 不需要任何中断设置。
创建一个定制的内核配置文件, 在您要使用的串口添加合适的标记。 例如, 如果要将 sio1 (COM2) 作为控制台:
device sio1 at isa? port port IO_COM2 flags 0x10 irq 3
or
device sio1 at isa? port port IO_COM2 flags 0x30 irq 3
其他端口的控制台标记也不要设。
重新编译和安装引导块:
# cd /sys/boot # make clean # make # make install
重建和安装内核。
用 disklabel(8) 将引导块写到启动盘上,然后从新内核启动。
您可能希望通过串行线进入登录提示, 现在您可以看到启动信息, 通过串行控制台键入内核调试信息。可以这样做。
用一个编辑器打开 /etc/ttys 文件, 然后找到下面的行:
ttyd0 "/usr/libexec/getty std.9600" unknown off secure ttyd1 "/usr/libexec/getty std.9600" unknown off secure ttyd2 "/usr/libexec/getty std.9600" unknown off secure ttyd3 "/usr/libexec/getty std.9600" unknown off secure
ttyd0 到 ttyd3 相当于 COM1 到 COM4。 可以打开或关闭某个端口。 如果您已经改变了串口的速度, 还必须改掉标准的 9600 与当前的例如 19200 相匹配。
您也可以改变终端的类型从不知名的到您串行终端的真实类型。 编辑完这个文件, 您必须 kill -HUP 1 来使这个修改生效。
前面一节描述了如何通过调整引导块来设定串行控制台。 这节将讲到在启动引导器中通过键入一些命令和环境变量来指定控制台。 由于启动引导器会被启动进程的第三步所调用, 引导块以后, 在启动引导器中的设置将忽略在引导块中的设置。
您可以很容易地指定启动引导器和内核来使用串行控制台, 只需要在 /boot/loader.rc中写入下面这行:
set console=comconsole
无论前一节中的引导块如何配置, 这个设置都会生效。
您最好把上面一行放在文件的第一行, 以便尽早地在启动时看到串行控制台的启动信息。
同样地,您可以指定内部控制台为:
set console=vidconsole
如果您不设置启动引导环境变量控制台, 启动引导器和内核将使用在引导块时用 -h 选项指定的控制台。
在 3.2 以及更新的版本中,您可以在 /boot/loader.conf.local 或 /boot/loader.conf 中, 而不是在 /boot/loader.rc 指定控制台。 用这种方法, 您的 /boot/loader.rc 文件将是这样的:
include /boot/loader.4th start
然后, 创建 /boot/loader.conf.local 并加入下面的行。
console=comconsole
或
console=vidconsole
看看 loader.conf(5) 的联机手册了解更多信息。
Note: 目前, 引导块还没有与引导加载器的 -P 选项等价的选项, 此外也没有在存在键盘时自动选则使用什么控制台的能力。
这篇文章本意是想告诉人们如何设定没有显示设备或键盘的专用服务器。 不幸的是, 绝大多数系统没有键盘可以让您启动, 而没有显示设备就不让您启动。 使用 AMI BIOS 的机器可以通过在 CMOS 中将 “graphics adapter” 项设为 “Not installed” 来在启动时不要求显示适配器。
然而, 许多机器并不支持这个选项, 如果您的系统没有显示硬件就拒绝启动。 对于这些机器, 即使您没有显示器, 也必须在机器上插上显示适配器。 建议您试试采用 AMI BIOS 的机器。
FreeBSD 有很多方法可以将计算机与计算机连接起来。 通过使用拨号 modem 来建立网络或 Internet 连接, 或允许其他人通过您的机器来连上网络, 这些都要求使用 PPP 或 SLIP。 这章将详细介绍设置这些基于 modem 的通信服务的方法。
读完这一章,您将会了解到:
如何设置用户级PPP.
如何设置内核级PPP.
如何设置 PPPoE (PPP over Ethernet).
如何设置 PPPoA (PPP over ATM).
如何配置和安装SLIP客户端和服务器.
在阅读这章之前,您应当:
熟悉基本的网络术语.
理解拨号连接和PPP,SLIP的基础知识.
您可能想知道用户级PPP与内核级PPP不同之处.回答很简单: 用户级PPP处理用户级的输入和输出数据,而不是内核级. 在内核与用户区之间复制数据的花费要大一些,但它能提供具有更多特性的PPP实现 . 用户级PPP使用 tun设备与外界通信而内核级PPP使用 ppp设备.
Note: 除非需要与其它PPP软件(比如pppd)相区别,在这一章中 用户级PPP就简称为ppp.另外,若没有额外的注明,本章所介绍 的所有命令都需要root权限. .
本章假定您具备如下条件:
您有一个ISP提供的用于连接使用PPP的帐号.
您需要一个连接到您的系统并做了正确配置的modem或其它设备,使您能连接到ISP.
ISP的拨号号码.
您的登录名称和密码(可能是一般的UNIX风格的登录名和密码对, 也可能是PAP或CHAP登录名和密码对.)
一个或多个域名服务器IP地址. 通常,您会从ISP处得到两个这样的IP地址. 如果您至少得到了一个, 就可以 在文件ppp.conf中加入enable dns命令 使ppp设置域名服务.这个功能取决于ISP对支持DNS协商的具体实现.
下面的信息由您的ISP提供,但不是必需的:
ISP的网关IP地址. 网关是您要连接的且要被设为默认路由的主机. 如果您没有这个信息,您可以虚构一个,在连接时ISP的PPP服务器会自动告诉您正确的值.
这个虚构的IP号被ppp称为 HISADDR.
需要使用的子网掩码.如果ISP没有提供,您可以安全地使用 255.255.255.255.
如果ISP提供了一个静态的IP地址和主机名,可以输入它们.否则,让对方主机指定它 认为合适的IP地址.
如果您不知道这些信息,请与您的ISP联系.
Note: 在这节中,所有作为样例显示的配置文件信息都对行进行了编号. 这些行号只是为了使解释和讨论变得方便,在真实当地用tab键和sp文件中并不存在. 缩进是必需的.
一般情况下,大多数用户只需要一个tun设备 (/dev/tun0),提及tun0时, 即指tunN,N是您系统中具体的号码.
若的FreeBSD(FreeBSD 4.X 及早前版本)没有启用devfs(5),应当先检查 是否存在tun0设备,如果已经启用了devfs(5),这一步就没必要了 (因为devfs(5)会根据需要创建设备).
为了确保tun0配置正确, 最简单的方式是重新创建它。 按照以下步骤可以重新创建设备:
# cd /dev # sh MAKEDEV tun0
如果您的内核要有16个tunnel设备,您必须创建它们.可以通过执行以下命令完成:
# cd /dev # sh MAKEDEV tun15
ppp和pppd(PPP的内核级实现) 都使用/etc/ppp目录中的配置文件.用户级PPP的例子能 在/usr/share/examples/ppp/中找到.
配置ppp要求根据您的需要编辑几个文件.编辑哪几个文件取决于您的 IP是静态分配还是动态分配的.
您需要编辑配置文件/etc/ppp/ppp.conf.如下所示.
Note: 以冒号:结尾的行从第一列 (行首)开始, 其它所有的行都要使用空格或制表符 (Tab) 来缩进。
1 default: 2 set log Phase Chat LCP IPCP CCP tun command 3 ident user-ppp VERSION (built COMPILATIONDATE) 4 set device /dev/cuaa0 5 set speed 115200 6 set dial "ABORT BUSY ABORT NO\\sCARRIER TIMEOUT 5 \ 7 \"\" AT OK-AT-OK ATE1Q0 OK \\dATDT\\T TIMEOUT 40 CONNECT" 8 set timeout 180 9 enable dns 10 11 provider: 12 set phone "(123) 456 7890" 13 set authname foo 14 set authkey bar 15 set login "TIMEOUT 10 \"\" \"\" gin:--gin: \\U word: \\P col: ppp" 16 set timeout 300 17 set ifaddr x.x.x.x y.y.y.y 255.255.255.255 0.0.0.0 18 add default HISADDR
指定默认的项.当PPP运行时这个项中的命令将自动执行.
启用登录参数.工作正常后,为避免产生过多的日志文件,这行应该简化为:
set log phase tun.
告诉PPP怎样向对方自我标识. 如果在建立或使用连接时遇到任何麻烦,PPP就会向对方主机自我标识.对方主机管理员 在处理这个问题时,这些信息会有用.
标明modem要连接的端口号.COM1是 /dev/cuaa0, COM2 是/dev/cuaa1.
设置连接的速度.如果115200 不能工作,试试 38400.
拨号字符串. 用户级PPP使用一种与chat(8)程序相似的语法. 请参考联机手册了解这种语言的相关信息.
注意,为了便于阅读此命令进行了换行.任何ppp.conf里的 命令都可以这样做,前提是行的最后一个字符必须是“\”.
设置连接的时间间隔.默认是180秒,所以这一行是多余的.
告诉PPP向对方主机确认本地域名解析设置.如果您运行了本地的域名服务器,要注释或删除掉这一行.
为了可读性的需要设置一个空行.空行会被PPP忽略.
为“provider”指定一个项.可以改成 ISP的名字.这样您以后就可以使用load ISP 开启连接.
设置提供商的电话号码. 多个电话号码可以使用冒号(:) 或管道符号(|)隔开.这两个字符的区别在ppp(8)的联机手册中有介绍. 总的来讲,如果您要循环使用这些号码,可以使用冒号.如果您想使用第一个号码, 当第一个号码失败了再用第二个号码,就使用管道符号。 如所示的那样, 要给整个电话号码加上引号(")。
如果电话号码里有空格,必须用引号(")将其括起来. 否则会造成简单却难以察觉的错误.
指定用户名和密码.当使用一个UNIX风格的命令提示符登录时,这些值可以用带有\U \P参数 的set login命令进行修改.当使用PAP或CHAP进行连接时, 这些值在验证使用.
如果您使用的是PAP或者CHAP,在这里就不会有登录.要注释或删除掉这一行. 请参考 PAP和CHAP认证 以获取更多细节.
登录命令是的语法是chat类型的.在这个例子中,是这样的:
J. Random Provider login: foo password: bar protocol: ppp
您需要改变这个脚本以适合您自己的需要.当您第一次写这个脚本时, 应当确保已经启用“chat”并处于登录状态,这样您才能确认通信是否 正在按计划进行.
设置默认的超时时间.这里,连接若在300秒内无响应将被断开.如果您不想设置成超时, 将这个值设置成0,或在命令行使用-ddial选项.
设置接口地址. 字符串 x.x.x.x需要用ISP提供给您的IP地址替换. 字符串 y.y.y.y要用ISP的网关IP地址替换(即您要连接的主机). 如果ISP没有给您网关地址,可以使用10.0.0.2/0. 如果您需要使用一个“猜到”的地址,请确保在/etc/ppp/ppp.linkup 中为每个PPP和动态IP地址指令创建了项. 如果没有这一行,ppp 将无法运行-auto模式.
添加一个到ISP网关的默认路由。 HISADDR这个关键字会被第17行所指定的网关地址替换。 这行必须出现在第17行之后,以免在 HISADDR 初始化之前使用它的值。
如果您不想使用 -auto 的 PPP,则这行应挪到, ppp.linkup 文件中。
若您有一个静态IP地址,且使用-auto 模式运行ppp(因为在连接之前已经正确设置了路由表项),那就不需要再向ppp.linkup 添加项.您可能希望在连接以后创建一个项来调用程序.这在以后的sendmail的例子中会解释. .
示例配置文件可以在目录/usr/share/examples/ppp/中找到.
如果ISP没给您指定静态的IP地址,ppp要被配置成能够与对方协商确定本地和远程地址. 要完成这项工作,先要“猜”一个IP地址,然后允许 ppp在连接后使用IP配置协议(IPCP)进行正确配置. ppp.conf的配置是与 PPP和静态IP地址一样的,除了以下的改变:
17 set ifaddr 10.0.0.1/0 10.0.0.2/0 255.255.255.255
再次强调,不要包括行号,它只是一个引用标记.缩排一个空格是必须的.
/字符以后是PPP所要求的地址位码. 您可以根据需要使用不同IP号码,但以上的例子永远是可行的.
最后的参数(0.0.0.0)告诉 PPP从0.0.0.0 而不是 10.0.0.1 开始协商地址,对于有些ISP, 这是必需的.不要将 0.0.0.0 作为 set ifaddr的第一个参数,因为这使得PPP在 -auto 模式时不能设置初始路由.
如果您不运行-auto模式, 就需要在/etc/ppp/ppp.linkup中创建一个项. 连接建立之后,ppp.linkup被启用. 这时候, ppp将指派接口地址,接着再添加路由表项:
1 provider: 2 add default HISADDR
为了建立连接, ppp 会按按照如下规则在 ppp.linkup寻找项:首先,试图寻找相同的标签 (如同在ppp.conf一样).如果失败了,寻找作为网关 IP地址的项,此项是四个八位字节的风格.如果依旧没有找到,就寻找MYADDR项
这行告诉 ppp添加指向 HISADDR的默认路由. HISADDR由通过IPCP协商得到的IP号替换.
参考/usr/share/examples/ppp/ppp.conf.sample 和/usr/share/examples/ppp/ppp.linkup.sample 中的pmdemand项以获取细节化的例子.
当要配置 ppp接受来自LAN上的 拨入时,您需要决定是否将包转给LAN.如果是的话,您就必须从LAN子网中 给对方分配一个IP, 需要在文件/etc/ppp/ppp.conf 中使用命令enable proxy .您还应该确定文件 /etc/rc.conf中包含以下内容:
gateway_enable="YES"
配置FreeBSD的拨号服务描述了怎么使用命令 getty(8)启动拨号服务.
除了getty 还有 mgetty, 它是getty的智能版本,是按照拨号线的思想设计的.
使用mgetty的好处是它能积极地与modems进行 talks , 这就意味着如果在/etc/ttys中的端口被关闭, 您的moderm就不会回应拨入.
最新版本的mgetty (from 0.99beta onwards)也支持自动侦测PPP数据流,允许客户端不使用脚本就可以访问服务器 .
参考Mgetty 和 AutoPPP的联机手册了解更多信息.
ppp命令通常必须作为root用户运行. 但如果想让一个普通用户将ppp运行于服务器模式(就像下面描述的那样) ,您必须要把此用户加入network组以使其获得运行 ppp 的权限.
您还需要使用allow命令使用户能访问配置文 件的一个或多个部分:
allow users fred mary
如果这个命令被用在 default 部分中,您可以让指定的用户访问任何东西.
创建一个名为/etc/ppp/ppp-shell文件,加入以下内容:
#!/bin/sh
IDENT=`echo $0 | sed -e 's/^.*-\(.*\)$/\1/'`
CALLEDAS="$IDENT"
TTY=`tty`
if [ x$IDENT = xdialup ]; then
IDENT=`basename $TTY`
fi
echo "PPP for $CALLEDAS on $TTY"
echo "Starting PPP for $IDENT"
exec /usr/sbin/ppp -direct $IDENT
这个脚本要有可执行属性. 然后通过如下命令创建一个指向此脚本且名为 ppp-dialup的符号链接:
# ln -s ppp-shell /etc/ppp/ppp-dialup
您应该将这个脚本作为所有拨入用户的shell. 以下是在文件/etc/password中关于一个PPP用户的例子,用户名为 pchilds (切记不要直接修改这个密码文件, 而是使用vipw命令).
pchilds:*:1011:300:Peter Childs PPP:/home/ppp:/etc/ppp/ppp-dialup
创建一个名为 /home/ppp的目录作为拨入用户的主目录, 包含以下这些空文件:
-r--r--r-- 1 root wheel 0 May 27 02:23 .hushlogin -r--r--r-- 1 root wheel 0 May 27 02:22 .rhosts
这样就可以防止/etc/motd被显示出来.
像上面那样创建ppp-shell文件, 为每个静态分配IP用户创建一个到 ppp-shell的 符号链接.
例如,如果您有三个拨号用户, fred,sam,和 mary,您为他们路由C类网络,您需要键入以下内容:
# ln -s /etc/ppp/ppp-shell /etc/ppp/ppp-fred # ln -s /etc/ppp/ppp-shell /etc/ppp/ppp-sam # ln -s /etc/ppp/ppp-shell /etc/ppp/ppp-mary
每个用户的Shell必须被设成一个符号链接(例如用户 mary的Shell应该是/etc/ppp/ppp-mary).
/etc/ppp/ppp.conf文件应该包含下面 这些行:
default: set debug phase lcp chat set timeout 0 ttyd0: set ifaddr 203.14.100.1 203.14.100.20 255.255.255.255 enable proxy ttyd1: set ifaddr 203.14.100.1 203.14.100.21 255.255.255.255 enable proxy
Note: 缩进得必须的.
default:项在每次会话时都会加载.每个在 /etc/ttys中启用的行都必须为其创建一个相似于 ttyd0: 的项.每一行应该从动态IP 地址池中取得 唯一的IP地址.
根据上面/usr/share/examples/ppp/ppp.conf文件的内容, 您必须为每个静态拨号用户添加一个项.我们继续以fred, sam, 和mary为例.
fred: set ifaddr 203.14.100.1 203.14.101.1 255.255.255.255 sam: set ifaddr 203.14.100.1 203.14.102.1 255.255.255.255 mary: set ifaddr 203.14.100.1 203.14.103.1 255.255.255.255
如果需要,/etc/ppp/ppp.linkup 也应该包括每个静态IP用户的的路由信息.下面这一行为客户连接添加了 203.14.101.0C类路由.
fred: add 203.14.101.0 netmask 255.255.255.0 HISADDR sam: add 203.14.102.0 netmask 255.255.255.0 HISADDR mary: add 203.14.103.0 netmask 255.255.255.0 HISADDR
在配置和编译mgetty 时启用 AUTO_PPP选项 使mgetty能够探测PPP连接的的LCP状态 并自动产生PPP Shell. 但如果默认的login/password队列没有出现, 那就必须使用PAP或CHAP来验证用户.
这节假定您已经为用户成功地配置,编译了带有AUTO_PPP选项的 mgetty.
确认钅件/usr/local/etc/mgetty+sendfax/login.config 包含以下内容:
/AutoPPP/ - - /etc/ppp/ppp-pap-dialup
这行告诉mgetty运行 ppp-pap-dialup脚本来侦听PPP连接.
创建/etc/ppp/ppp-pap-dialup文件写入以下内容 (此文件应该是可执行的):
#!/bin/sh exec /usr/sbin/ppp -direct pap$IDENT
对应于每个在/etc/ttys的启用行,都要在/etc/ppp/ppp.conf 中创建相应的项. 这和上面的定义是相同的.
pap: enable pap set ifaddr 203.14.100.1 203.14.100.20-203.14.100.40 enable proxy
每个通过这种方式登录的用户必须在 /etc/ppp/ppp.secret文件中有一个username/password项,或者加入 以下选项以使服务器通过PAP方式用/etc/password文件验证用户.
enable passwdauth
如果您想为某些用户分配静态IP, 可以在/etc/ppp/ppp.secret中将IP号作为第三个参数指定. 参看 /usr/share/examples/ppp/ppp.secret.sample 中的例子.
可以配置PPP以提供DNS和NetBIOS域名服务器地址.
要在PPP版本 1.x中启用这些扩展,必须向 /etc/ppp/ppp.conf的相关项加入以下行:
enable msext set ns 203.14.100.1 203.14.100.2 set nbns 203.14.100.5
PPP版本2及以上 :
accept dns set dns 203.14.100.1 203.14.100.2 set nbns 203.14.100.5
这将告诉客户端首选域名服务器和备用域名服务器.
在版本2及以上版本中, 如果省略了 set dns, PPP会使用 /etc/resolv.conf中的值.
一些ISP将系统设置成使用PAP或CHAP机制来完成连接的验证部分. . 如果是这样,在您连接时ISP就不会给出login:提示符而是立即开始PPP对话.
PAP安全性要比CHAP差一些,但在这里安全性并不是问题,因为密码(即使用明文传送)只是通过串行线传送. 黑客没有太多机会“窃听”.
参考PPP 和静态IP地址 或 PPP 和动态IP地址 节,必须做以下修改:
13 set authname MyUserName 14 set authkey MyPassword 15 set login
这一行指明您的PAP/CHAP用户名. 您需要为MyUserName输入正确的值.
这一行指明您的 PAP/CHAP password密码。 您需要为 MyPassword 输入正确的值。 另外,您可能希望加入一些额外的选项,例如:
16 accept PAP
或
16 accept CHAP
以明确您的意图,但PAP和CHAP都是被默认接受的.
Your ISP will not normally require that you log into the server if you are using PAP or CHAP. You must therefore disable your “set login” string.
与后台运行的ppp程序进行对话是可能的, 前提是设置了一个合适的诊断端口. 做到这一点,需要把下面的行加入到您的配置中:
set server /var/run/ppp-tun%d DiagnosticPassword 0177
这行告诉 PPP在指定的UNIX域socket中侦听,当用户连接时需要给出指定的密码. %d用tun设备号替换.
一旦启用了socket, 就可以在脚本中调用程序pppctl(8)来处理正在运行的 的PPP.
PPP可以使用内建的NAT,而不需内核支持. 这个功能可以通过在/etc/ppp/ppp.conf中的 以下行启用:
nat enable yes
PPP NAT也可以使用命令行选项 -nat启动. 在文件 /etc/rc.conf中也有 ppp_nat项,且是默认启用的.
如果您使用了这个特性, 您还会发现在 /etc/ppp/ppp.conf中以下 选项对于启用incoming connections forwarding是有用的:
nat port tcp 10.0.0.2:ftp ftp nat port tcp 10.0.0.2:http http
or do not trust the outside at all
nat deny_incoming yes
现在您已配置了ppp,但在真正工作之前还有一些事情要做.它们都与编辑 /etc/rc.conf有关.
从上依次往下看,确认设置了 hostname= 行, e.g.:
hostname="foo.example.com"
如果您的ISP提供给您一个静态的IP和名字,将这个名字设为hostname是最合适的.
寻找 network_interfaces 变量. 如果要配置系统通过拨号连入ISP, 一定要将tun0设备加入这个列表,否则就删除它.
network_interfaces="lo0 tun0" ifconfig_tun0=
Note: ifconfig_tun0变量应该是空的,且要创建一个名为 /etc/start_if.tun0的文件. 这个文件应该包含这一行:
ppp -auto mysystem此脚本在网络配置时被执行,开启PPP守护进程进入自动模式.如果这台机子充当一个LAN的网关, 您可能希望使用-alias.参考相关联机手册了解更多细节.
务必在 /etc/rc.conf 中, 把路由程序设置为 NO:
router_enable="NO"
不启动 routed 服务程序非常重要, 因为 routed 总会删掉由 ppp 所建立的默认路由。
此外, 还应该确保 sendmail_flags 这一行没有 -q 参数, 否则 sendmail 将会不断地尝试查找网络, 而这样做将会导致机器不断地进行拨号。 可以考虑:
sendmail_flags="-bd"
替代的作法是当每次PPP连接建立时您必须通过键入以下命令强制 sendmail重新检查邮件队列:
# /usr/sbin/sendmail -q
您也可以在ppp.linkup使用!bg命令自动完成这些工作:
1 provider: 2 delete ALL 3 add 0 0 HISADDR 4 !bg sendmail -bd -q30m
如果您不喜欢这样做, 可以设立一个 “dfilter” 以阻止 SMTP传输.参考相关文件了解更多细节 .
现在您唯一要做的事是重新启动计算机。 重起之后,可以输入:
# ppp
然后是dial provider以开启 PPP会话. 或者如果您想让ppp自动建立会话 ,因为您有一个广域连接(且没有创建 start_if.tun0 脚本),键入:
# ppp -auto provider
当第一次设置PPP时,下面几步是必须的:
客户端:
确保 tun编译进了进核.
确保tunN 设备文件在 /dev 目录中是可用的.
在 /etc/ppp/ppp.conf中创建一个项. pmdemand示例应该适合于绝大多数ISP.
如果您使用动态IP地址,在/etc/ppp/ppp.linkup创建一个项.
更新/etc/rc.conf 文件.
如果您要求按需拨号,创建一个start_if.tun0脚本.
服务器端:
确保tun设备已编译入内核.
确保tunN设备文件在 /dev目录中是可用的.
在/etc/passwd中创建一个项 (使用vipw(8)程序).
在用户的home目录创建一个运行 ppp -direct direct-server或相似命令的profile.
在/etc/ppp/ppp.conf中创建一个项. direct-server示例应该能满足要求.
在 /etc/ppp/ppp.linkup中创建一个项.
更新 /etc/rc.conf 文件.
在开始设置内核级PPP时, 需要确信pppd已经被定位在/usr/sbin 中 且存在/etc/ppp目录 .
pppd能在两种模式下工作:
作为一个“客户” -- 您要通过PPP串行线或modem线把您的机器连接到互联网上 .
作为“服务器” --计算机已经位于网络上,且被用于通过PPP与其它计算机连接.
两种情况您都需要设立一个选项文件, (/etc/ppp/options 或者是 ~/.ppprc 如果您的计算机有多个用户使用PPP).
您还需要一些modem/serial软件(comms/kermit就很适合), 使您能够拨号并与远程主机建立连接.
下面这个 /etc/ppp/options选项文件能够被用来与CISCO终端服务器的 PPP线连接.
crtscts # enable hardware flow control
modem # modem control line
noipdefault # remote PPP server must supply your IP address
# if the remote host does not send your IP during IPCP
# negotiation, remove this option
passive # wait for LCP packets
domain ppp.foo.com # put your domain name here
:<remote_ip> # put the IP of remote PPP host here
# it will be used to route packets via PPP link
# if you didn't specified the noipdefault option
# change this line to <local_ip>:<remote_ip>
defaultroute # put this if you want that PPP server will be your
# default router
连接:
使用 Kermit (或其他 modem 程序来拨号), 然后输入您的用户名和口令 (或在远程主机上启用 PPP 所需的其他信息)。
退出 Kermit (并不挂断连接)。
键入下面这行:
# /usr/src/usr.sbin/pppd.new/pppd /dev/tty01 19200
一定要使用正确的速度和设备名.
现在您的计算机已经用PPP连接. 如果连接失败 , 您可在文件/etc/ppp/options中添加 debug选项,察看控制台信息以跟踪问题.
下面这个/etc/ppp/pppup脚本能自动完成这三个步骤:
#!/bin/sh
ps ax |grep pppd |grep -v grep
pid=`ps ax |grep pppd |grep -v grep|awk '{print $1;}'`
if [ "X${pid}" != "X" ] ; then
echo 'killing pppd, PID=' ${pid}
kill ${pid}
fi
ps ax |grep kermit |grep -v grep
pid=`ps ax |grep kermit |grep -v grep|awk '{print $1;}'`
if [ "X${pid}" != "X" ] ; then
echo 'killing kermit, PID=' ${pid}
kill -9 ${pid}
fi
ifconfig ppp0 down
ifconfig ppp0 delete
kermit -y /etc/ppp/kermit.dial
pppd /dev/tty01 19200
/etc/ppp/kermit.dial 是一个 Kermit 脚本, 它会完成拨号, 并在远程主机上完成所有需要的身份验证过程 (这份文档的最后有一个脚本实例)。
使用下面这个脚本/etc/ppp/pppdown断开PPP连线:
#!/bin/sh
pid=`ps ax |grep pppd |grep -v grep|awk '{print $1;}'`
if [ X${pid} != "X" ] ; then
echo 'killing pppd, PID=' ${pid}
kill -TERM ${pid}
fi
ps ax |grep kermit |grep -v grep
pid=`ps ax |grep kermit |grep -v grep|awk '{print $1;}'`
if [ "X${pid}" != "X" ] ; then
echo 'killing kermit, PID=' ${pid}
kill -9 ${pid}
fi
/sbin/ifconfig ppp0 down
/sbin/ifconfig ppp0 delete
kermit -y /etc/ppp/kermit.hup
/etc/ppp/ppptest
通过执行/usr/etc/ppp/ppptest,看看pppd 是否仍在运行:
#!/bin/sh
pid=`ps ax| grep pppd |grep -v grep|awk '{print $1;}'`
if [ X${pid} != "X" ] ; then
echo 'pppd running: PID=' ${pid-NONE}
else
echo 'No pppd running.'
fi
set -x
netstat -n -I ppp0
ifconfig ppp0
执行脚本 /etc/ppp/kermit.hup以挂起moderm,这个文件包含:
set line /dev/tty01 ; put your modem device here set speed 19200 set file type binary set file names literal set win 8 set rec pack 1024 set send pack 1024 set block 3 set term bytesize 8 set command bytesize 8 set flow none pau 1 out +++ inp 5 OK out ATH0\13 echo \13 exit
也可以用chat 代替kermit:
以下两个文件用以建立pppd连接.
/etc/ppp/options:
/dev/cuaa1 115200
crtscts # enable hardware flow control
modem # modem control line
connect "/usr/bin/chat -f /etc/ppp/login.chat.script"
noipdefault # remote PPP serve must supply your IP address
# if the remote host doesn't send your IP during
# IPCP negotiation, remove this option
passive # wait for LCP packets
domain <your.domain> # put your domain name here
: # put the IP of remote PPP host here
# it will be used to route packets via PPP link
# if you didn't specified the noipdefault option
# change this line to <local_ip>:<remote_ip>
defaultroute # put this if you want that PPP server will be
# your default router
/etc/ppp/login.chat.script:
Note: 以下的内容应该放在一行内.
ABORT BUSY ABORT 'NO CARRIER' "" AT OK ATDT<phone.number> CONNECT "" TIMEOUT 10 ogin:-\\r-ogin: <login-id> TIMEOUT 5 sword: <password>
一旦这些被安装且修改正确,您所要做的就是运行pppd,就像这样:
# pppd
/etc/ppp/options要包括下面这些内容:
crtscts # Hardware flow control
netmask 255.255.255.0 # netmask (not required)
192.114.208.20:192.114.208.165 # IP's of local and remote hosts
# local ip must be different from one
# you assigned to the Ethernet (or other)
# interface on your machine.
# remote IP is IP address that will be
# assigned to the remote machine
domain ppp.foo.com # your domain
passive # wait for LCP
modem # modem line
下面这个脚本/etc/ppp/pppserv 使pppd以服务器方式启动:
#!/bin/sh
ps ax |grep pppd |grep -v grep
pid=`ps ax |grep pppd |grep -v grep|awk '{print $1;}'`
if [ "X${pid}" != "X" ] ; then
echo 'killing pppd, PID=' ${pid}
kill ${pid}
fi
ps ax |grep kermit |grep -v grep
pid=`ps ax |grep kermit |grep -v grep|awk '{print $1;}'`
if [ "X${pid}" != "X" ] ; then
echo 'killing kermit, PID=' ${pid}
kill -9 ${pid}
fi
# reset ppp interface
ifconfig ppp0 down
ifconfig ppp0 delete
# enable autoanswer mode
kermit -y /etc/ppp/kermit.ans
# run ppp
pppd /dev/tty01 19200
使用脚本/etc/ppp/pppservdown停止服务器:
#!/bin/sh
ps ax |grep pppd |grep -v grep
pid=`ps ax |grep pppd |grep -v grep|awk '{print $1;}'`
if [ "X${pid}" != "X" ] ; then
echo 'killing pppd, PID=' ${pid}
kill ${pid}
fi
ps ax |grep kermit |grep -v grep
pid=`ps ax |grep kermit |grep -v grep|awk '{print $1;}'`
if [ "X${pid}" != "X" ] ; then
echo 'killing kermit, PID=' ${pid}
kill -9 ${pid}
fi
ifconfig ppp0 down
ifconfig ppp0 delete
kermit -y /etc/ppp/kermit.noans
The following Kermit script (/etc/ppp/kermit.ans) will enable/disable autoanswer mode on your modem. It should look like this:
set line /dev/tty01
set speed 19200
set file type binary
set file names literal
set win 8
set rec pack 1024
set send pack 1024
set block 3
set term bytesize 8
set command bytesize 8
set flow none
pau 1
out +++
inp 5 OK
out ATH0\13
inp 5 OK
echo \13
out ATS0=1\13 ; change this to out ATS0=0\13 if you want to disable
; autoanswer mode
inp 5 OK
echo \13
exit
一个名为/etc/ppp/kermit.dial的脚本用于向远程主机 进行拨号和验证.您要根据需要定制它.要加入您的登寻名和密码.您还要根据modem 和远程主机的反应更改输入语句.
;
; put the com line attached to the modem here:
;
set line /dev/tty01
;
; put the modem speed here:
;
set speed 19200
set file type binary ; full 8 bit file xfer
set file names literal
set win 8
set rec pack 1024
set send pack 1024
set block 3
set term bytesize 8
set command bytesize 8
set flow none
set modem hayes
set dial hangup off
set carrier auto ; Then SET CARRIER if necessary,
set dial display on ; Then SET DIAL if necessary,
set input echo on
set input timeout proceed
set input case ignore
def \%x 0 ; login prompt counter
goto slhup
:slcmd ; put the modem in command mode
echo Put the modem in command mode.
clear ; Clear unread characters from input buffer
pause 1
output +++ ; hayes escape sequence
input 1 OK\13\10 ; wait for OK
if success goto slhup
output \13
pause 1
output at\13
input 1 OK\13\10
if fail goto slcmd ; if modem doesn't answer OK, try again
:slhup ; hang up the phone
clear ; Clear unread characters from input buffer
pause 1
echo Hanging up the phone.
output ath0\13 ; hayes command for on hook
input 2 OK\13\10
if fail goto slcmd ; if no OK answer, put modem in command mode
:sldial ; dial the number
pause 1
echo Dialing.
output atdt9,550311\13\10 ; put phone number here
assign \%x 0 ; zero the time counter
:look
clear ; Clear unread characters from input buffer
increment \%x ; Count the seconds
input 1 {CONNECT }
if success goto sllogin
reinput 1 {NO CARRIER\13\10}
if success goto sldial
reinput 1 {NO DIALTONE\13\10}
if success goto slnodial
reinput 1 {\255}
if success goto slhup
reinput 1 {\127}
if success goto slhup
if < \%x 60 goto look
else goto slhup
:sllogin ; login
assign \%x 0 ; zero the time counter
pause 1
echo Looking for login prompt.
:slloop
increment \%x ; Count the seconds
clear ; Clear unread characters from input buffer
output \13
;
; put your expected login prompt here:
;
input 1 {Username: }
if success goto sluid
reinput 1 {\255}
if success goto slhup
reinput 1 {\127}
if success goto slhup
if < \%x 10 goto slloop ; try 10 times to get a login prompt
else goto slhup ; hang up and start again if 10 failures
:sluid
;
; put your userid here:
;
output ppp-login\13
input 1 {Password: }
;
; put your password here:
;
output ppp-password\13
input 1 {Entering SLIP mode.}
echo
quit
:slnodial
echo \7No dialtone. Check the telephone line!\7
exit 1
; local variables:
; mode: csh
; comment-start: "; "
; comment-start-skip: "; "
; end:
本节将讲述通过modem连接使用PPP时可能出现的问题 . 例如,您可能需要确切地知道您拨入的系统会出现一个怎样的命令行提示符.有些ISP会提供 ssword提示符,而其它的可能会出现 password; 如果没有根据情况的不同相应地编写ppp 脚本,登录就会失败.诊断ppp最常用的方法是手动进行连接 . 以下的信息会一步一步地带您完成手动连接.
如果您的内核是经过重新配置的,那么就需要检查sio设备. 如果没有配置过内核, 就没什么可担心的了.只要查看 dmesg的输出以找到modem设备:
# dmesg | grep sio
您应该找到与sio设备有关的输出. 这些就是我们需要的COM端口. 如果您的modem按照标准串行端口工作,您能在sio1或COM2找到它. 如果是这样, 您只需创建serial设备,而不必重建内核. cd到/dev目录,然后运行 MAKEDEV脚本 :
# sh MAKEDEV cuaa0 cuaa1 cuaa2 cuaa3
它会为您的系统创建串行(serial)设备. 如果modem设备连接在sio1接口(在DOS中称为COM2),那么您的modem将会是 /dev/cuaa1。
通过手动控制ppp来连接Internet 是诊断连接及获知ISP处理PPP客户端方式的一个快速,简单的方法. .让我们从PPP 命令行开始.在所有的例子中我们使用 example作为运行PPP主机的主机名.键入ppp 命令打开ppp :
# ppp
现在我们已经打开了ppp.
ppp ON example> set device /dev/cuaa1
设置modem设备,在本例子中是 cuaa1.
ppp ON example> set speed 115200
设置连接速度,在本例中我们使用15,200 kbps.
ppp ON example> enable dns
使ppp配置域名服务, 在文件/etc/resolv.conf中添加域名服务器行. .如果 ppp不能确定我们的主机名,可以在稍后设置.
ppp ON example> term
切换到 “终端”样我们就能手动地控制模式,这modem.
deflink: Entering terminal mode on /dev/cuaa1 type '~h' for help
at OK atdt123456789
使用命令at初始化modem, 然后使用atdt和ISP给您的号码进行拨号.
CONNECT
连接配置,如果我们遇到了与硬件无关的连接问题,可以在这里尝试解决.
ISP Login:myusername
这里提示您输入用户名,输入ISP提供的用户名然后按回车.
ISP Pass:mypassword
这时提示我们输入密码,输入 ISP提供的密码. 如同登录入FreeBSD,密码不会显示.
Shell or PPP:ppp
由于ISP的不同,这个提示符可能不会出现.这里我们被问及:是使用 一个运行于提供商端的Shell还是启动ppp. 这本例中,我们选择使用ppp因为我 们想得到Internet连接.
Ppp ON example>
注意在这个例子中,第一个 p已经大写. 这显示我们已经成功地连接上了ISP.
PPp ON example>
我们已经成功通过了 ISP的验证,正在等待分配IP地址.
PPP ON example>
我们得到了一个 IP 地址,成功地完成了连接.
PPP ON example>add default HISADDR
这里,我们添加默认路由.在能与外界通信之前我们需要这样做,因为现在我们 只与服务器端建立了连接.如果由于已存在的路由而导致操作失败, 您可以在add前加!号. 作为另外一种方式,您也可以在真正连接之前设置这些(指add default HISADDR),ppp会根据这项设定协商取 得一个新的路由.
如果一切顺利,现在我们应该能得到一个活动的Internet连接,可以使用CTRL+z使其转入后台.如果您发现 PPP重新变为 ppp,那代表我们失去了连接.. 大写的P表明我们有到ISP的连接 而小写的p表明由于某种原因我们失去了连接.这便于我们了解连接状态. ppp 只有这两个状态.
如果您有一根直连线且似乎不能建立连接,要使用set ctsrts off以关闭字节流的CTS/RTS.这种情况一般发 生在连接兼容PPP的终端服务器时. 当它向通信连接写入数据时,PPP就会挂起, 一直等待一个CTS, 或者一个不可能出现的Clear to Send信号。 如果使用了这个选项, 您还应使用 set accmap选项, 某些存在缺陷的硬件在完成端对端发送特定字符, 特别是 XON/XOFF 时可能会遇到困难。 请参见 ppp(8) 联机手册以了解关于可用选项的更多细节, 以及如何使用它们。
如果您有一个比较旧的modem, 您要用 set parity even。 奇偶校验的默认设置是 none, 但在旧式的 (当流量大量增加时) 调制解调器和某些 ISP 被用来纠错。 您需要使用这个选项才能使用 Compuserve ISP。
PPP 可能并不返回命令模式, 这通常是 ISP 等待您这一端发起协商时发生了错误。 此时, 使用 ~p 命令将强制 ppp 开始发送配置信息。
如果您没有看到登陆提示, 则很可能需要使用 PAP 或 CHAP 验证来代替前面例子中的 UNIX 风格验证。 要使用 PAP 或 CHAP 只需在进入终端模式之前把下面的选项加入 PPP:
ppp ON example> set authname myusername
此处 myusername 应改为您的 ISP 分配给您的用户名。
ppp ON example> set authkey mypassword
此处 mypassword 应该为您的 ISP 分配给您的口令。
如果连接正常, 但无法查找域名, 请尝试 ping(8) 某个 IP 地址来看看是否返回了信息。 如果您发现百分之百 (100%) 丢包, 那么您很可能没有分配默认路由。 请仔细检查选项 add default HISADDR 是否在连接时被设置了。 如果您能连接到远程的 IP 地址则有可能域名解析服务器的地址没有被加入到 /etc/resolv.conf。 这个文件应该是下面的样子:
domain example.com nameserver x.x.x.x nameserver y.y.y.y
此处 x.x.x.x 和 y.y.y.y 应该改为您的 ISP 的 DNS 服务器的 IP 地址。 这一信息在您注册时可能会提供给您, 不过通常只需给 ISP 打个电话就能知道了。
您还可以让 syslog(3) 为您的 PPP 连接提供日志。 只需增加:
!ppp *.* /var/log/ppp.log
到 /etc/syslog.conf 中。 绝大多数情况下, 这个功能默认已经打开了。
本节将介绍如何建立基于以太网的PPP (PPPoE).
以下是一个ppp.conf的例子:
default: set log Phase tun command # you can add more detailed logging if you wish set ifaddr 10.0.0.1/0 10.0.0.2/0 name_of_service_provider: set device PPPoE:xl1 # replace xl1 with your Ethernet device set authname YOURLOGINNAME set authkey YOURPASSWORD set dial set login add default HISADDR
在文件/etc/rc.conf加入以下内容:
ppp_enable="YES" ppp_mode="ddial" ppp_nat="YES" # if you want to enable nat for your local network, otherwise NO ppp_profile="name_of_service_provider"
在某些时候,有必要使用一个服务标签来建立您的连接.服务标签用于区分同一网络中的不同服务器.
您可以在ISP提供的文档中找到必要的服务标签信息.若不能找到,向您的ISP询求技术支持.
作为最后的方法, 您可以试试 Roaring Penguin PPPoE, 它可以在 Ports Collection 中找到。 然而需要注意的是, 它可能会清楚 modem 的固件, 并使其无法正常工作, 因此一定要仔细考虑之后再做这个操作。 简单地安装由服务提供商随 modem 提供的程序。 随后, 选择 System 菜单。 您的配置文件应该会在这里列出。 一般来说它的名字应该是 ISP。
配置文件名 (service tag, 服务标签) 将被用于 PPPoE 在 ppp.conf 中的配置项, 作为服务商 set device 命令的一部分 (参见 ppp(8) 联机手册以了解更多细节)。 它应该类似下面的样子:
set device PPPoE:xl1:ISP
记住将xl1换成实际的以太网设备.
记住将 ISP 换成您刚刚找到的profile名.
获得更多的信息,请参考:
Cheaper Broadband with FreeBSD on DSL by Renaud Waldura.
Nutzung von T-DSL und T-Online mit FreeBSD by Udo Erdelhoff (in German).
这个modem不遵循RFC 2516 (A Method for transmitting PPP over Ethernet (PPPoE), written by L. Mamakos, K. Lidl, J. Evarts, D. Carrel, D. Simone, and R. Wheeler). 而是使用不同的数据包格式作为以太网的框架.请向 3Com抱怨,如果您认为它应该遵守PPPOE的规范.
为了让FreeBSD能够与这个设备通信,必须设置sysctl.通过更改/etc/sysctl.conf,这一步 可以在启动时自动完成:
net.graph.nonstandard_pppoe=1
或直接执行命令: sysctl net.graph.nonstandard_pppoe=1.
很不幸,由于这是系统全局设置,无法同时与正常的PPP客户端(或服务器) 和3ComHomeConnect® ADSL Modem通信 .
以下将介绍如何设置基于ATM的PPP(PPPoA). PPPoA是欧洲DSL提供商的普遍选择 .
针对这一设备的 PPPoA 支持, 在 FreeBSD 中是作为 port 提供的, 因为其固件使用了 阿尔卡特许可协议, 因而不能与 FreeBSD 的基本系统一起免费地再发布。
使用 Ports Collection 可以非常方便地安装 net/pppoa port, 之后按照它提供的指使操作就可以了。
和许多 USB 设备类似, 阿尔卡特的 SpeedTouch™ USB 需要从主机上下载固件才能够正常工作。 您可以在 FreeBSD 中将此操作自动化, 这样当设备插到某个 USB 口的时候就会自动下载固件了。 可以在 /etc/usbd.conf 文件中加入下面的信息来让它自动完成固件的传送。 注意, 必须以 root 用户的身份编辑它。
device "Alcatel SpeedTouch USB"
devname "ugen[0-9]+"
vendor 0x06b9
product 0x4061
attach "/usr/local/sbin/modem_run -f /usr/local/libdata/mgmt.o"
要启动USB守护进程usbd, 在/etc/rc.conf加入以下行:
usbd_enable="YES"
也可以将ppp设置成启动时拨号. 向 /etc/rc.conf加入以下这几行. 同样地您需要以root用户登录.
ppp_enable="YES" ppp_mode="ddial" ppp_profile="adsl"
为了使其正常工作,您需要使用net/pppoa port提供的ppp.conf样例.
可以使用 mpd 来连接多种类型的服务, 特别是 PPTP 服务。 您可以在 Ports Collection 中找到 mpd, 它的位置是 net/mpd。 许多 ADSL modem 需要在 modem 和计算机之间建立一条 PPTP 隧道, 而阿尔卡特 SpeedTouch Home 正是其中的一种。
首先需要从 port 完成安装, 然后才能配置 mpd 来满足您的需要, 并完成服务商的配置。 port 会把一系列包括了详细注解的配置文件实例放到 PREFIX/etc/mpd/。 注意, 这里的 PREFIX 表示 ports 安装的目录, 默认情况下, 应该是 /usr/local/。 关于配置 mpd 的完整说明, 会以 HTML 格式随 port 一起安装。 这些文件将放在 PREFIX/share/doc/mpd/。 下面是通过 mpd 连接 ADSL 服务的一个简单例子。 配置被分别放到了两个文件中, 第一个是 mpd.conf:
default:
load adsl
adsl:
new -i ng0 adsl adsl
set bundle authname username
set bundle password password
set bundle disable multilink
set link no pap acfcomp protocomp
set link disable chap
set link accept chap
set link keep-alive 30 10
set ipcp no vjcomp
set ipcp ranges 0.0.0.0/0 0.0.0.0/0
set iface route default
set iface disable on-demand
set iface enable proxy-arp
set iface idle 0
open
mpd.links包含连接的信息:
adsl:
set link type pptp
set pptp mode active
set pptp enable originate outcall
set pptp self 10.0.0.1
set pptp peer 10.0.0.138
初始化连接:
# mpd -b adsl
您可以通过以下命令查看连接状态:
% ifconfig ng0
ng0: flags=88d1<UP,POINTOPOINT,RUNNING,NOARP,SIMPLEX,MULTICAST> mtu 1500
inet 216.136.204.117 --> 204.152.186.171 netmask 0xffffffff
使用mpd连接ADSL服务是推荐的方式.
也可以使用net/pptpclient连接其它的 PPPoA.
为了使用net/pptpclient连接 DSL服务,需要安装port或package并编辑/etc/ppp/ppp.conf.您需要有 root权限以进行这两项操作.以下是ppp.conf中的一个示例项. 参考ppp的联机手册ppp(8),以获取更多有关ppp.conf 选项的信息.
adsl: set log phase chat lcp ipcp ccp tun command set timeout 0 enable dns set authname usernameset authkey password
set ifaddr 0 0 add default HISADDR
Warning由于您必须将帐号密码以明文的方式放入ppp.conf 您应该确保没有任何人能看到此文件的内容.以下一系列命令将会确保此文件只对 root用户可读.参考chmod(1)和chown(8) 的联机手册以获得更多信息.
# chown root:wheel /etc/ppp/ppp.conf # chmod 600 /etc/ppp/ppp.conf
以下将为到DSL路由器的会话打开一个tunnel. 以太网DSL modem有一个设置的局域网IP地址. 以Alcatel SpeedTouch Home为例,这个地址是 10.0.0.138.路由器的文档应该会告诉您它使用地址.执行以下命令 以打开tunnel并开始会话:
# pptp address adsl
Tip: 您应该在命令的最后加上(“&”)号,否则 pptp 无法返回到命令行提示符.
要创建一个 tun虚拟设备用于进程pptp 和ppp 之间的交互.一旦您返回到了命令行,或者 pptp 进程确认了一个连接,您可以这样检查tunnel设备:
% ifconfig tun0
tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1500
inet 216.136.204.21 --> 204.152.186.171 netmask 0xffffff00
Opened by PID 918
如果您无法连接,一般可以通过telnet或者web浏览器检查路由器(modem)的配置. 如果依旧无法连接,您应该检查pptp的输出及ppp的日志文件 /var/log/ppp.log 以获得线索.
下面是一个在静态主机网络上设置FreeBSD机器的方法.对于动态主机名分配(您的地址在每次拨号时都会改变), 您可能还需要更复杂的设置.
首先,确定您的modem连接的串行口. 许多人会设置符号连接, 比如/dev/modem指向真实的设备名 /dev/cuaaN.这充许您抽像真实的设备名. 当您需 要在/etc和.kermrc文件中修复整个系统上的许多文件时, 这是一件非常麻烦的事情!
Note: /dev/cuaa0 is COM1, cuaa1 is COM2, etc.
确保您的内核文件包含以下内容:
pseudo-device sl 1
在 FreeBSD 5.X 中, 则应使用:
device sl
这包含在GENERIC内核,所以这应该不会是个问题,除非您 已经删除了它。
把您本地网络上的机器、 网关以及域名服务器, 都加入到 /etc/hosts 文件中。 我们的是下面这个样子:
127.0.0.1 localhost loghost 136.152.64.181 water.CS.Example.EDU water.CS water 136.152.64.1 inr-3.CS.Example.EDU inr-3 slip-gateway 128.32.136.9 ns1.Example.EDU ns1 128.32.136.12 ns2.Example.EDU ns2
在 FreeBSD 5.0 之前的版本中, 请务必确保 /etc/host.conf 中的 hosts 在 bind 之前出现。 从 FreeBSD 5.0 开始, 系统转而使用 /etc/nsswitch.conf 文件, 请确认在这个文件中 hosts 一行里, files 出现在 dns 之前。 如果没有这些参数, 可能会发生很奇怪的事情。
编辑/etc/rc.conf.
编辑以下这行设置主机名(hostname):
hostname="myname.my.domain"
应该用您主机的Internet全名代替.
改变以下这些行将sl0添加到网络接口 列表中:
network_interfaces="lo0"
改为:
network_interfaces="lo0 sl0"
加入以下这一行设置sl0的启动标志:
ifconfig_sl0="inet ${hostname} slip-gateway netmask 0xffffff00 up"
改变这一行以指明默认的路由:
defaultrouter="NO"
改为:
defaultrouter="slip-gateway"
创建文件/etc/resolv.conf,写入以下内容:
domain CS.Example.EDU nameserver 128.32.136.9 nameserver 128.32.136.12
正如您看到的, 这些行设置了域名服务器.当然,实际的域名和IP地址取决于您的环境.
设置root和 toor的密码(其它任何没有密码的帐号).
重启计算机,然后确认使用了正确的主机名.
在命令提示符之后输入 slip 进行拨号, 输入您的机器名和口令。 具体需要输入什么, 与您的环境密切相关。 如果使用 Kermit, 则可以使用类似下面的脚本:
# kermit setup set modem hayes set line /dev/modem set speed 115200 set parity none set flow rts/cts set terminal bytesize 8 set file type binary # The next macro will dial up and login define slip dial 643-9600, input 10 =>, if failure stop, - output slip\x0d, input 10 Username:, if failure stop, - output silvia\x0d, input 10 Password:, if failure stop, - output ***\x0d, echo \x0aCONNECTED\x0a
当然, 您还需要修改用户名和口令来满足实际需要。 完成这些操作之后, 只需在 Kermit 提示符之后输入 slip 就可以连接了。
Note: 将密码以纯文本的形式存放在文件系统无论如何都是个 坏 主意。 请考虑这样做的风险。
在这里退出 Kermit (也可以用 Ctrl-z 将其挂起), 以 root 用户键入:
# slattach -h -c -s 115200 /dev/modem
如果您能ping通路由器另一端的主机,就是连接好了! 如果不行, 您可以使用-a选项代替 -c作为slattach的参数.
按下面的步骤做:
# kill -INT `cat /var/run/slattach.modem.pid`
来杀掉 slattach。 切记上述操作只有以 root 身份才能完成。 接下来回到 kermit (如果之前是将它挂起了, 则使用 fg) 并退出 (q)。
在 slattach(8) 联机手册中提到, 必须使用 ifconfig sl0 down 才能将接口标记为关闭, 但和这样做似乎没有什么区别。 (ifconfig sl0 仍然报告同样的东西。)
有时, 您的 modem 可能会拒绝挂断。 这种情况下, 只需重新启动 kermit 并再次退出它就可以了。 一般来说试二次就可以了。
如果还不行, 尽管发邮件到 freebsd-net 邮件列表来提问。 常见的问题包括:
执行slattach时不使用-c和-a选项 (这应该不是关键的,但有些用户报告这样做解决了问题.)
使用s10替换 sl0 (在一些字体下很难看出不同).
试试ifconfig sl0来查看您的接口状态.例如,您可以这样做:
# ifconfig sl0
sl0: flags=10<POINTOPOINT>
inet 136.152.64.181 --> 136.152.64.1 netmask ffffff00
如果在使用 ping(8) 时得到了 “no route to host” 这样的提示, 则说明您的路由表可能有问题。 可以用 netstat -r 命令来显示当前的路由:
# netstat -r Routing tables Destination Gateway Flags Refs Use IfaceMTU Rtt Netmasks: (root node) (root node) Route Tree for Protocol Family inet: (root node) => default inr-3.Example.EDU UG 8 224515 sl0 - - localhost.Exampl localhost.Example. UH 5 42127 lo0 - 0.438 inr-3.Example.ED water.CS.Example.E UH 1 0 sl0 - - water.CS.Example localhost.Example. UGH 34 47641234 lo0 - 0.438 (root node)
前述的例子来自于一个非常繁忙的系统. 您系统上的这些数字会因网络活动的不同而改变.
本文提供了在FreeBSD上设置SLIP服务的建议,主要是指配置您的系统使其能根据远程SLIP客户端的 登录自动地开启连接.
这一节本身就是非常技术性的, 所以要求有一定的背景知识.本节假定您熟悉TCP/IP网络协议,特别是网络和和结点寻址 ,网络地址掩网, 划分子网, 路由, 路由协议(比如RIP).在一个拨号服务器上配置SLIP需要这些概念性的知识. 如果您不熟悉它们,请先阅读Craig Hunt的 TCP/IP 网络管理 由O'Reilly & Associates, Inc.出版(ISBN号为0-937175-82-X),或者Douglas Comer有关TCP/IP 协议的书籍.
另外还假定您已经设置好了您的modem并配置了相应的文件允许通过modem登录. 如果您还没有准备好您的系统,请 参考拨号服务的配置指南; 如果您能使用网页浏览器,也可以浏览 http://www.FreeBSD.org/docs.html上的指南列表. 您还需要参考sio(4)以获取串行端口设备驱动的信息, ttys(5),gettytab(5), getty(8), & init(8)以获取配置系统以接受modem登录的 相关信息,也许还有 stty(1)以获取有关串行口参数设置的信息(比如clocal指直线串行 接口).
使用FreeBSD作为SLIP服务器,在典型配置时,它是这样工作的: 一个SLIP客户拨号并以专用的login ID登录到FreeBSD SLIP服务器系统.这个用户使用/usr/sbin/sliplogin 作为shell.sliplogin程序在文件/etc/sliphome/slip.hosts中查找这个用户的项, 如果找到了匹配项,就将串行线连接到一个可用的SLIP接口,然后运行shell脚本/etc/sliphome/slip.login 以配置SLIP接口.
例如,如果一个SLIP用户的ID是Shelmerg, 在/etc/master.passwd中Shelmerg的项如下的所示:
Shelmerg:password:1964:89::0:0:Guy Helmer - SLIP:/usr/users/Shelmerg:/usr/sbin/sliplogin
Shelmerg登录时, sliplogin在文件 /etc/sliphome/slip.hosts中搜索与用户ID匹配的行;如下所示:
Shelmerg dc-slip sl-helmer 0xfffffc00 autocomp
sliplogin找到这条区配行, 并将串行线与另一个可用的SLIP接口连起来, 然后执行/etc/sliphome/slip.login脚本:
/etc/sliphome/slip.login 0 19200 Shelmerg dc-slip sl-helmer 0xfffffc00 autocomp
如果一切顺利, /etc/sliphome/slip.login为sliplogin )绑定的接口(在上面的例子中,是slip.login参数列表的第一个参数)运行 ifconfig以设置SLIP接口的本地IP地址(dc-slip),远程IP地址(sl-helmer), 掩码(0xfffffc00),及其它附加的标志(autocomp). 如果出现错误 ,sliplogin 通常会使用syslog守护进程将有用的信息写入 /var/log/messages 参考syslogd(8)和syslog.conf(5)联机手册及/etc/syslog.conf, 以获知syslogd是如何工作的).
好了,让我们开始设置系统 .
FreeBSD默认的内核一般定义了两个SLIP接口:(sl0和 sl1); 您可以使用 netstat -i命令查看您的内核是否定义了这些接口.
netstat -i样例输出:
Name Mtu Network Address Ipkts Ierrs Opkts Oerrs Coll ed0 1500 <Link>0.0.c0.2c.5f.4a 291311 0 174209 0 133 ed0 1500 138.247.224 ivory 291311 0 174209 0 133 lo0 65535 <Link> 79 0 79 0 0 lo0 65535 loop localhost 79 0 79 0 0 sl0* 296 <Link> 0 0 0 0 0 sl1* 296 <Link> 0 0 0 0 0
netstat -i显示的sl0 sl1接口表明您的内核内建了两个SLIP接口. ( sl0和sl1 之后的星号表明 这两个接口是“关闭”的.)
然而,FreeBSD默认的内核并没有配置额外的包 (默认的,您的FreeBSD不会被作为一个路由器) 因为Internet RFC对Internet主机有特殊要求(参考 RFCs 1009 [Requirements for Internet Gateways], 1122 [Requirements for Internet Hosts -- Communication Layers], 还有 1127 [A Perspective on the Host Requirements RFCs]). 如果您想让FreeBSD SLIP服务器成为一个路由器,就必须编辑 /etc/rc.conf,将gateway_enable变量设为YES.
然后您要重新启动使新的设置生效.
您会发现靠近默认内核配置文件(/sys/i386/conf/GENERIC)的最后, 有这么一行:
pseudo-device sl 2
这一行定义内核中可用的SLIP设备个数;行末尾的数字表示同时进行操作的SLIP连接的最大个数.
请参考第 8 章FreeBSD内核配置这一章以获取配置内核的帮助.
正如先前所提到的, /etc/sliphome目录有三个文件构成/usr/sbin/sliplogin的配置 (参考sliplogin的联机手册sliplogin(8)): slip.hosts, 定义SLIP用户及有关IP地址; slip.login,一般只配置SLIP接口; 文件 slip.logout(可选的),串行连接终止时,撤消slip.login所做的修改.
/etc/sliphome/slip.hosts里的每行包含至少四个元素,元素之间由空格隔开:
SLIP用户的登录ID
SLIP连接的本地地址(指SLIP服务器)
SLIP连接的远程地址
网络掩网
本地和远程地址可以是主机名 (通过文件/etc/hosts或者域名服务解析为IP地址, 在FreeBSD 5.X上这取决于文件/etc/nsswitch.conf的设置 在FreeBSD 4.X里,则是/etc/host.conf),网络掩网可以是一个 能通过文件/etc/networks解析的名字.在一个样例系统中, /etc/sliphome/slip.hosts是这样的:
# # login local-addr remote-addr mask opt1 opt2 # (normal,compress,noicmp) # Shelmerg dc-slip sl-helmerg 0xfffffc00 autocomp
在这行的末尾是一个或多个选项.
normal --不压缩报头
compress -- 压缩报头
autocomp --如果远程端允许,压缩报头
noicmp --禁用ICMP数据包 (这样就会丢弃所有的“ping”数据包,不占用您的带宽)
对SLIP连接的本地及远程地址的选择取决是您是准备在SLIP服务器上使用 TCP/IP 子网还是使用“ARP代理” (它并不是“真正的”ARP代理,而是我们在本节用于介绍的术语). 如果您不能确定选择何种方式或者如何分配地址,请参考"前提条件"(第 21.7.2.1 节)里列出的TCP/IP书籍 或者向您的IP网络管理员请教.
如果您准备为您的SLIP客户使用一个独立的子网 , 您需要先从分配得到的网络号中取出一个子网号然后再在这个子网里给每个SLIP客户分配IP地址. 然后您还需要通过SLIP服务器在最近的IP路由器上配置一个指向SLIP子网的静态路由.
如果您要使用 “代理 ARP”的方式,您需要从SLIP服务器的以太子网中为每个SLIP客户分配IP地址, 还必须修改/etc/sliphome/slip.login 和 /etc/sliphome/slip.logout脚本以使用 arp(8)来管理proxy-ARP在服务器ARP表中的项.
典型的/etc/sliphome/slip.login 如下所示:
#!/bin/sh - # # @(#)slip.login 5.1 (Berkeley) 7/1/90 # # generic login file for a slip line. sliplogin invokes this with # the parameters: # 1 2 3 4 5 6 7-n # slipunit ttyspeed loginname local-addr remote-addr mask opt-args # /sbin/ifconfig sl$1 inet $4 $5 netmask $6
这个slip.login脚本仅仅为带有相应本地及远程地址和掩码的SLIP接口执行 ifconfig .
如果您决定使用“ARP代理” 方式(而非为您的SLIP客户使用独立的子网),您的/etc/sliphome/slip.login 应该是这样:
#!/bin/sh - # # @(#)slip.login 5.1 (Berkeley) 7/1/90 # # generic login file for a slip line. sliplogin invokes this with # the parameters: # 1 2 3 4 5 6 7-n # slipunit ttyspeed loginname local-addr remote-addr mask opt-args # /sbin/ifconfig sl$1 inet $4 $5 netmask $6 # Answer ARP requests for the SLIP client with our Ethernet addr /usr/sbin/arp -s $5 00:11:22:33:44:55 pub
slip.login新加的行arp -s $5 00:11:22:33:44:55 pub在SLIP服务器的ARP表中加入了一个表项.这个ARP项使得 每当这个以太网上的其它IP节点对SLIP客户端IP地址进行ARP请求时,SLIP服务器会以自已的以太网MAC地址作为回应 .
当使用以上的例子时, 一定要将 以太网MAC地址(00:11:22:33:44:55)替换成您系统网卡的MAC地址,否则“ARP代理”将 完全无法工作!您可以查看netstat -i输出结果以取得以太网MAC地址; 输出的第二行应该是这样:
ed0 1500 <Link>0.2.c1.28.5f.4a 191923 0 129457 0 116
这行表明这个系统的以太网MAC地址是00:02:c1:28:5f:4a --netstat -i输出的以太网MAC地址必须改成用冒号隔开,并且要单个十六进数前加上. 这是arp(8)要求的格式; 参考arp(8) 的联机手册以获取完整的使用方法.
Note: 创建 /etc/sliphome/slip.login和 /etc/sliphome/slip.logout时,一定要设置 “执行(execute)”位 (chmod 755 /etc/sliphome/slip.login /etc/sliphome/slip.logout) ,否则 sliplogin将无法执行它.
/etc/sliphome/slip.logout并不是必需的 (除非您使用了“ARP代理”),如果您准备创建它,这里有一个基本的 slip.logout 脚本的例子 :
#!/bin/sh - # # slip.logout # # logout file for a slip line. sliplogin invokes this with # the parameters: # 1 2 3 4 5 6 7-n # slipunit ttyspeed loginname local-addr remote-addr mask opt-args # /sbin/ifconfig sl$1 down
If you are using “proxy ARP”, you will want to have /etc/sliphome/slip.logout remove the ARP entry for the SLIP client:
#!/bin/sh - # # @(#)slip.logout # # logout file for a slip line. sliplogin invokes this with # the parameters: # 1 2 3 4 5 6 7-n # slipunit ttyspeed loginname local-addr remote-addr mask opt-args # /sbin/ifconfig sl$1 down # Quit answering ARP requests for the SLIP client /usr/sbin/arp -d $5
命令arp -d $5 删除slip.login在SLIP客户登录时添加的ARP项 .
再次强调:确保您创建/etc/sliphome/slip.logout时设置了执行位 (ie, chmod 755 /etc/sliphome/slip.logout).
如果没有使用 “代理 ARP” 的方法来在您的 SLIP 客户机和网络的其余部分 (也可能是 Internet) 之间路由数据包, 您可能需要增加离您最近的默认路由器的静态路由, 以便通过 SLIP 服务器来在 SLIP 客户机子网上进行路由。
向您最近的默认路由添加一个静态路由可以说是很麻烦 (或者说是不可能,如果您没有权限这么做)。 如果在您的组织中使用多路由器网络, 有些路由器 (比如 Cisco 和 Proteon 生产的) 不但要配置指向 SLIP 子网的路由, 而且还需要配置将哪些静态路由传给其它的路由器。 所以一些专家意见和问题解答对于使基于静态路由表的路由正常工作很有必要。
Note: GateD现在是一个私有软件,无法取得它的源代码 ( GateD上有更多的信息 ).This section only exists to ensure backwards compatibility for those that are still using an older version.
另一种避免静态路由所造成的头疼的方法, 是在您的 FreeBSD SLIP 服务器上安装 GateD, 并配置它使用合适的路由协议 (RIP/OSPF/BGP/EGP) 来告诉其他路由器您的 SLIP 子网的存在。 您需要编写一个 /etc/gated.conf 文件来配置 GateD; 这里是 FreeBSD SLIP 服务器作者编写的一个例子:
#
# gated configuration file for dc.dsu.edu; for gated version 3.5alpha5
# Only broadcast RIP information for xxx.xxx.yy out the ed Ethernet interface
#
#
# tracing options
#
traceoptions "/var/tmp/gated.output" replace size 100k files 2 general ;
rip yes {
interface sl noripout noripin ;
interface ed ripin ripout version 1 ;
traceoptions route ;
} ;
#
# Turn on a bunch of tracing info for the interface to the kernel:
kernel {
traceoptions remnants request routes info interface ;
} ;
#
# Propagate the route to xxx.xxx.yy out the Ethernet interface via RIP
#
export proto rip interface ed {
proto direct {
xxx.xxx.yy mask 255.255.252.0 metric 1; # SLIP connections
} ;
} ;
#
# Accept routes from RIP via ed Ethernet interfaces
import proto rip interface ed {
all ;
} ;
上面这个 gated.conf 示例文件, 将把关于 SLIP 子网 xxx.xxx.yy 的信息, 通过 RIP 广播到 Ethernet 上; 如果您使用了的 Ethernet 驱动不是 ed, 则需要把 ed 改为相应的网络接口。 这个例子也配置了将跟踪信息写到 /var/tmp/gated.output 以提供调试 GateD 活动的信息; 当然, 如果 GateD 工作正常, 就可以关闭这些跟踪信息了。 您需要把 xxx.xxx.yy 改成您自己的 SLIP 子网 (一定要同时修改 proto direct 小节)。
一旦在系统中安装并配置了 GateD, 就可以告诉 FreeBSD 启动脚本来运行 GateD 而不是 routed 了。 最简单的办法,是配置 router 和 router_flags 两个 /etc/rc.conf 变量。 请参见 GateD 的联机手册, 以了解更多关于命令行参数的信息。
“电子邮件”,或通常所说的 email,是现今使用最广泛的通信方式之一。 本章将对如何在 FreeBSD 上运行邮件服务,以及如何使用 FreeBSD 来收发电子邮件作基本的介绍; 然而,它并不是一份完整的参考手册,实际上,许多需要考虑的重要事项都没有提及。 我们推荐读者阅读 附录 B 中的参考书籍,以获得对于这部分的全面认识。
读完这章,您将了解:
那些软件与收发电子邮件有关。
FreeBSD 下的基本 sendmail 配置文件在哪里。
本地和远程邮箱之间的区别。
如何阻止垃圾邮件制造者非法地使用您的邮件服务器作为转发中继。
如何安装和配置用于替代 sendmail 的其他邮件传输代理。
如何处理常见的邮件服务器问题。
如何使用 SMTP 和 UUCP。
如何设置系统使其只能发送邮件。
如何在拨号连接时使用邮件。
如何配置 SMTP 验证以增加安全性。
如何安装并使用用户邮件代理,如 mutt 来收发邮件。
如何从远程的 POP 或 IMAP 服务器上下载邮件。
如何在进入的邮件上自动地应用过滤器和规则。
阅读本章之前,您需要:
邮件交换可以分为 5 部分。它们是: 用户端程序、服务端守护进程、DNS、远程或本地的邮箱、 当然,还有邮件主机自己。
这包括一些基于命令行的程序,例如 mutt、 pine、elm 和 mail,以及类似 balsa、 xfmail 这样的 GUI 程序。 此外,还有我们更“熟悉的”WWW 浏览器这样的程序。 这些程序简单地通过调用服务守护进程把邮件事务交给本地的 “邮件主机”,或者通过 TCP 把邮件发出去。
FreeBSD 默认情况下采用 sendmail, 但它也支持为数众多的其它邮件服务程序, 这其中包括:
exim;
postfix;
qmail.
邮件服务器后台守护程序通常有两个功能 -- 接收外面发来的邮件和把邮件传送出去。 但它 不 负责使用类似 POP 或 IMAP 这样的协议来帮您阅读邮件, 也不负责连接到本地的 mbox 或 Maildir 信箱。 您可能需要其它的 服务程序 来完成这些任务。
Warning较早版本的 sendmail 有一些严重的安全问题, 他们可能导致攻击者从本地和/或远程操作您的电脑。 您应该确认自己使用的是最新版本以避免这些问题。 另外, 也可以从 FreeBSD Ports Collection 来安装其它的 MTA。
域名系统 (DNS) 及其服务程序 named 在email的投递过程当中扮演着很重要的角色。 为了能够从您的站点向其它的站点传递邮件, 服务程序需要通过 DNS 查找接收邮件的远程站点的位置。 类似地, 在远程站点向您的主机投递邮件时也会发生这样的查找。
DNS 负责将主机名映射为 IP 地址, 同时, 也需要保存递送邮件时所需要的信息, 这些信息称作 MX 记录。 MX (Mail eXchanger,邮件交换) 记录指定了哪个, 或哪些主机能够接收特定域下的邮件。 如果您没有为主机名或域名设置 MX 记录, 则邮件将被直接递交给主机名对应 IP 所在的主机。
您可以通过 host(1) 命令来查找任何域或主机名对应的 MX 记录, 如下面的例子所示:
% host -t mx FreeBSD.org FreeBSD.org mail is handled (pri=10) by mx1.FreeBSD.org
为您的域接收邮件是通过邮件服务器来完成的。 它收集发送给您的域的那些邮件,并保存到 mbox (存储邮件默认的方法) 或 Maildir 格式, 这取决于您采用的配置。 一旦邮件被保存下来, 就可以在本地通过类似 mail(1) 或 mutt 这样的程序, 或在远程通过 POP 或 IMAP 这样的协议来读取了。 简单地说, 如果您只在本地阅读邮件,那就没有必要安装 POP 或 IMAP 服务。
如果希望在远程访问邮箱, 就需要访问 POP 或 IMAP 服务器。 这些协议允许用户从远程方便地访问他们的信箱。 尽管 POP 和 IMAP 都允许用户从远程访问信箱, 但 IMAP 有很多优点, 这包括:
IMAP 既可以从远程服务器上抓取邮件, 也可以把邮件放上去。
IMAP 支持并发更新。
IMAP 对于使用低速网络的用户尤为有用, 因为它能够让这些用户把邮件的结构下载下去, 而无需立即下载整个邮件。 它还可以在服务器端执行类似查找这样的操作, 以减少客户机和服务器之间的通讯量。
您可以按照下面的步骤来安装和配置 POP 或 IMAP 服务器:
选择一个最符合需要的 IMAP 或 POP 服务器。 下列 POP 和 IMAP 服务器是最著名的, 而且都有很多成功案例:
qpopper;
teapop;
imap-uw;
courier-imap;
通过 ports collection 安装 POP 或 IMAP 服务。
根据需要修改 /etc/inetd.conf 来加载 POP 或 IMAP 服务。
Warning此外还应注意的是 POP 和 IMAP 传递的信息, 包括用户名和口令等等, 通常都是明文的。 这意味着如果您希望加密传输过程中的信息, 可能需要考虑使用 ssh(1) 隧道。 关于如何实施隧道在 第 14.11.7 节 中进行了详细阐述。
sendmail(8) 是 FreeBSD 中的默认邮件传输代理 (MTA)。 sendmail 的任务是从邮件用户代理 (MUA) 接收邮件然后根据配置文件的定义把它们送给配置好的的寄送程序。 sendmail 也能接受网络连接, 并且发送邮件到本地邮箱或者发送它到其它程序。
sendmail 使用下列配置文件:
| 文件名 | 功能 |
|---|---|
| /etc/mail/access | sendmail 访问数据库文件 |
| /etc/mail/aliases | 邮箱别名 |
| /etc/mail/local-host-names | sendmail 接收邮件主机列表 |
| /etc/mail/mailer.conf | 邮寄配置程序 |
| /etc/mail/mailertable | 邮件分发列表 |
| /etc/mail/sendmail.cf | sendmail的主配置文件 |
| /etc/mail/virtusertable | 虚拟用户和域列表 |
访问数据库定义了什么主机或者 IP 地址可以访问本地邮件服务器和它们是哪种类型的访问。 主机可能会列出 OK、 REJECT、RELAY 或者简单的通过 sendmail 的出错处理程序检测一个给定的邮件错误。 主机默认列出 OK,允许传送邮件到主机, 只要邮件的最后目的地是本地主机。列出 REJECT 将拒绝所有的邮件连接。如果带有 RELAY 选项的主机将被允许通过这个邮件服务器发送邮件到任何地方。
Example 22-1. 配置 sendmail 的访问许可数据库
cyberspammer.com 550 We do not accept mail from spammers FREE.STEALTH.MAILER@ 550 We do not accept mail from spammers another.source.of.spam REJECT okay.cyberspammer.com OK 128.32 RELAY
在上面的例子中我们有 5 条记录。 与左边列表匹配的发件人受到右边列表动作的影响。 前边的两个例子给出了 sendmail 的出错处理程序检测到的错误代码。 当一个邮件与左边列表相匹配时,这个信息会被打印到远程主机上。 下一条记录拒绝来自 Internet 上的一个特别主机的邮件 another.source.of.spam。接下来的记录允许来自 okay.cyberspammer.com 的邮件连接, 这条记录比上面那行 cyberspammer.com 更准确。更多的准确匹配使不准确的匹配无效。最后一行允许电子邮件从主机和 128.32 开头的 IP 地址转发。 这些主机将被允许通过这台邮件服务器前往其它邮件服务器发送邮件。
当这个文件被升级的时候,您必须在 /etc/mail/ 运行 make 升级数据库。
别名数据库包含一个扩展到用户,程序或者其它别名的虚拟邮箱列表。 下面是一些在 /etc/mail/aliases 中使用的例子:
Example 22-2. 邮件别名
root: localuser ftp-bugs: joe,eric,paul bit.bucket: /dev/null procmail: "|/usr/local/bin/procmail"
这个文件的格式很简单; 冒号左边的邮箱名, 会被展开成右边的形式。 第一个例子简单地将
root 邮箱扩展为 localuser,
之后将继续在别名数据库中进行查找。 如果没有找到匹配的记录, 则邮件会被发给本地用户 localuser。 第二个例子展示了一个邮件列表。 发送到 ftp-bugs 的邮件会被展开成 joe, eric 和 paul 这三个邮箱。 注意也可以通过
<user@example.com> 这样的形式来指定远程的邮箱。
接下来的例子展示了如何把邮件写入到文件中, 这个例子中是 /dev/null。 最后一个例子展示了如何将邮件发给一个程序,
具体而言是通过 UNIX 管道发到 /usr/local/bin/procmail 的标准输入。
更新此文件时, 您需要在 /etc/mail/ 中使用 make 来更新数据库。
这是一个 sendmail(8) 被接受为一个本地主机名的主机名列表。 可以放入任何 sendmail 将从那里收发邮件的域名或主机。例如,如果这个邮件服务器从域 example.com 和主机 mail.example.com 接收邮件,它的 local-host-names 文件,可以看起来象如下这样:
example.com mail.example.com
当这个文件被升级,sendmail(8) 必须重新启动,以便更新设置。
sendmail的主配置文件 sendmail.cf 控制着 sendmail 的所有行为, 包括从重写邮件地址到打印拒绝远程邮件服务器信息等所有事。 当然,作为一个不同的角色,这个配置文件是相当复杂的, 它的细节部分已经超出了本节的范围。幸运的是, 这个文件对于标准的邮件服务器来说很少需要被改动。
sendmail 主配置文件可以用 m4(1) 宏定义 sendmail 的特性和行为。它的细节请看 /usr/src/contrib/sendmail/cf/README。
当这个文件被修改时, sendmail 必须重新启动以便对新修改生效。
virtusertable 映射虚拟域名和邮箱到真实的邮箱。 这些邮箱可以是本地的、远程的、/etc/mail/aliases 中定义的别名或一个文件。
Example 22-3. 虚拟域邮件映射的例子
root@example.com root postmaster@example.com postmaster@noc.example.net @example.com joe
在上面这个例子中, 我们映射了一个域 example.com。
这个文件是按照从上到下, 首个匹配的方式来处理的。 第一项将 <root@example.com> 映射到本地邮箱 root。 下一项则将 <postmaster@example.com> 映射到位于 noc.example.net 的 postmaster。 最后,
如果没有来自 example.com 的匹配, 则将使用最后一条映射,
它表示将所有的其它邮件发给 example.com 域的某个人。 这样,
将映射到本地信箱 joe。
先前已经提到,FreeBSD 中的 sendmail 已经安装了您的 MTA (邮件传输代理程序)。因此它它负责着您的收发邮件的工作。
然而,基于不同的理由,一些系统管理员想要改变他们系统的 MTA。这些理由从简单的想要尝试另一个 MTA,到需要一个特殊的特性或者 package 依赖某个邮寄程序等等。幸运的是,不管是什么理由,FreeBSD 都能容易的改变它。
对于可用的 MTA 您有很多的选择。一个好的出发点是 FreeBSD Ports Collection,在那里您能找到很多。 当然您可以从任何位置不受任何限制的使用 MTA,只要您能让它运行在 FreeBSD 下。
开始安装您的新 MTA。一旦它被安装, 它可以让您有机会决定它是否能满足您的需要和在接管 sendmail 之前让您有机会配置您的新软件。 当完成这些之后,您应该确信安装的新软件不会尝试更改系统的二进制文件例如象 /usr/bin/sendmail。除此以外, 您的新邮件软件启用之前要已经配置好它。
具体配置请参考您所选择的 MTA 软件的配置文档或其它相关资料。
值得注意的是启动 sendmail 在 4.5-RELEASE 版本和 4.6-RELEASE 版本之间有些不同。因此,停用它的过程也稍有不同。
输入:
sendmail_enable="NO"
到 /etc/rc.conf 文件。它将停用 sendmail 接收邮件服务, 但是如果 /etc/mail/mailer.conf 文件(见下文) 没有被改变,sendmail 将仍然可以发送邮件。
为了完全的停用 sendmail,您必须在 /etc/rc.conf 文件里使用
sendmail_enable="NONE"
Warning如果用这个方法停止 sendmail 的发送邮件服务,那么就必须有一个能够完全正常地工作的邮件发送系统。 如果不这样做的话,类似 periodic(8) 这样的系统功能将无法正确地通过电子邮件将它们的执行结果送到通常希望的地方去。 系统中的很多部分都要求有和 sendmail 在功能上兼容的系统。 如果应用程序在您禁用之后仍然继续使用 sendmail 的执行文件来发送文件, 则这些邮件可能会进入睡眠的 sendmail 队列,并永远无法到达目的地。
如果只是想要停止 sendmail 的接收邮件服务, 您应该在 /etc/rc.conf 文件中设置
sendmail_enable="NO"
更多的有关 sendmail 可用的启动选项,参看 rc.sendmail(8) 联机手册.
您也许有两种方法在机器引导时运行您的新 MTA,这个也倚赖您所运行的 FreeBSD 版本。
在 /usr/local/etc/rc.d/ 中添加一个以 .sh 为后缀的脚本文件, 并可以用 root 身份运行。这个脚本应该接受 start 和 stop 参数。用如下命令启动这个脚本
/usr/local/etc/rc.d/supermailer.sh start
您也可以手工启动这个服务。如果想要停止它, 系统脚本将使用 stop 选项,运行如下命令
/usr/local/etc/rc.d/supermailer.sh stop
您也可以手工停止正在系统运行的服务。
在 FreeBSD 较后来的版本, 您可以使用上面的方法或者在 /etc/rc.conf 文件做如下设置
mta_start_script="filename"
filename 是您想要在引导时执行的 MTA 脚本文件的名字。
因为 sendmail 程序是一个在 UNIX 系统下普遍存在的一个标准的软件,一些软件就假定它已经被安装并且配置好。 基于这个原因,许多其它的 MTA 提供者都提供了兼容 sendmail 的命令行界面来执行。 这使它们象“混入”sendmail 一样变的很容易掌握。
因此,如果您使用其它的邮寄程序, 您必须确定这个软件是去尝试运行标准的 sendmail 二进制,就象 /usr/bin/sendmail,还是运行您自己选择的替换邮寄程序。 幸运的是,FreeBSD 提供了一个系统调用 mailwrapper(8),它能为您做这件工作。
当 sendmail 安装后被运行,您可以在 /etc/mail/mailer.conf 中找到如下行:
sendmail /usr/libexec/sendmail/sendmail send-mail /usr/libexec/sendmail/sendmail mailq /usr/libexec/sendmail/sendmail newaliases /usr/libexec/sendmail/sendmail hoststat /usr/libexec/sendmail/sendmail purgestat /usr/libexec/sendmail/sendmail
这个的意思就是当这些公共命令 (例如 sendmail 它本身) 运行时, 系统实际上调用了一个 sendmail 指定的 mailwrapper 的副本,它检查 mailer.conf 并且运行 /usr/libexec/sendmail/sendmail 做为替代。当默认的 sendmail 功能被调用, 系统将很容易的改变实际上运行的二进制文件。
因此如果您想要 /usr/local/supermailer/bin/sendmail-compat 替换 sendmail 被运行,您应该改变 /etc/mail/mailer.conf 文件为:
sendmail /usr/local/supermailer/bin/sendmail-compat send-mail /usr/local/supermailer/bin/sendmail-compat mailq /usr/local/supermailer/bin/mailq-compat newaliases /usr/local/supermailer/bin/newaliases-compat hoststat /usr/local/supermailer/bin/hoststat-compat purgestat /usr/local/supermailer/bin/purgestat-compat
一旦做完您想要配置的每件事,您应该杀掉 sendmail 进程并且启动属于您的新软件的进程, 或者简单的重启。重启也将给您机会保证您正确的配置您的系统, 在引导的时候自动的运行您新的 MTA。
您可能会发现主机实际上是在另外一个域里面, 例如,如果您是在 foo.bar.edu 里,而您要找一台叫 mumble 的主机,它在 bar.edu 域里,您就必须用完整的域名 mumble.bar.edu,而不是用 mumble。
传统上,这在 BSD BIND resolvers 中是可行的。 然而目前随 FreeBSD 附带的 BIND 已不为同一域外提供缩写服务。所以,这个不完整的主机名 mumble 必须以 mumble.foo.bar.edu 这种形式才能被找到, 或者将在根域中搜索它。
这跟以前的处理是不同的,以前版本将会继续寻找 mumble.bar.edu 和 mumble.edu。 如果您想要了解这种方式是否是好,或者它有什么安全方面的漏洞, 请参阅 RFC 1535 文档。
如果您想要一个好的工作环境,您可以使用如下行:
search foo.bar.edu bar.edu替换先前旧的版本:
domain foo.bar.edu把这行放在您的 /etc/resolv.conf 文件中。然而,请一定要确定这样的搜寻顺序不会造成 RFC 1535 里提到的“boundary between local and public administration” 问题。
下面是 sendmail FAQ 中的回答:
我得到了如下的信息: 553 MX list for domain.net points back to relay.domain.net 554 <user@domain.net>... Local configuration error 我如何解决这个问题? 您已经通过 MX 记录指定把发送给特定的域 (例如,domain.net) 的邮件被转寄到指定的主机 (在这个例子中,relay.domain.net), 而这台机器并不认为它自己是 domain.net。请把 domain.net 添加到 /etc/mail/local-host-names 文件中 [在 8.10 版之前是 /etc/sendmail.cw] (如果您使用 FEATURE(use_cw_file) 的话) 或者在 /etc/mail/sendmail.cf 中添加“Cw domain.net”。
sendmail 的 FAQ 可以在 http://www.sendmail.org/faq/ 找到, 如果您想要对您的邮件做任何的“调整”, 则推荐首先看一看它。
您想要把局域网上的 FreeBSD 主机连接到互连网上,而这台 FreeBSD 主机将会成为这个局域网的邮件网关, 这个拨号连接不必一直保持在连接状态。
最少有两种方法可以满足您的要求。一种方法就是使用 UUCP。
另一种方法是找到一个专职的服务器来为您的域提供副 MX 主机服务。 例如,如果您公司的域名是 example.com,您的互连网服务提供者把 example.net 作为您域的副 MX 服务:
example.com. MX 10 example.com.
MX 20 example.net.
只有一台主机被指定当做您的最终收信主机 (在 example.com 主机的 /etc/mail/sendmail.cf 文件中添加 Cw example.com)。
当 sendmail 试图分发邮件的时候, 它会尝试通过 modem 连接到您 (example.com)。 因为您并不在线,所以总是会得到一个超时的错误。 sendmail 将会把邮件发送到副 MX 主机,也就是说,您的互连网服务提供者 (example.net)。副 MX 主机将周期性的尝试连接并发送邮件到您的主机 (example.com)。
您也许想要使用下面的这个登录脚本:
#!/bin/sh # Put me in /usr/local/bin/pppmyisp ( sleep 60 ; /usr/sbin/sendmail -q ) & /usr/sbin/ppp -direct pppmyisp
如果您想要为一个用户建立一个分开登录的脚本, 您可以使用 sendmail -qRexample.com 替换上面的脚本。这样将使所有的邮件按照您的 example.com 队列立即被处理。
更深入的方法可以参考下面这段:
这段信息是从 FreeBSD Internet 服务提供商的邮件列表 拿来的。
> 我们为用户提供副 MX 主机服务。用户每天都会上线好几次 > 并且自动把信件取回主 MX 主机 > (当有他们的邮件时我们并没有通知他们)。 > 我们的 mailqueue 程序每 30 分钟清一次邮件队列。那段时间他们 > 就必须上线 30 分钟以确保他们的信件送达他们的主 MX 主机。 > > 有任何指令可以用 sendmail 寄出所有邮件么? > 普通用户在我们的机器上当然没有 root 权限。 在 sendmail.cf 的“privacy flags”部分,有这样的设定 Opgoaway,restrictqrun 移除 restrictqrun 可以让非 root 用户启动队列处理的程序。 您可能也要重新安排您的 MX 设定。我们是用户的 MX 主机, 而且我们还设定了这个: # If we are the best MX for a host, try directly instead of generating # local config error. OwTrue 这样的话远程机器会直接把信送给您,而不会尝试连接您的用户的机器。 然后您就可以把邮件发送到您的用户。这个设定只对 “主机”有效,所以您必须要让您的用户在 DNS 中把他们的邮件主机设置为 “customer.com”或者 “hostname.customer.com”。只要为“customer.com”在 DNS 里添加一个 A 记录就可以了。
默认的 FreeBSD 安装中, sendmail 会配置为只发送来自它所在主机上的邮件。 例如,如果有可用的 POP 服务器,则用户将可以从学校、 公司或其他什么别的地方检查邮件,但他们仍然无法从远程直接发送邮件。 通常,在几次尝试之后, MAILER-DAEMON 将发出一封包含 “5.7 Relaying Denied” 错误信息的邮件。
有很多方法可以避免这种现象。 最直截了当的方法是把您的 ISP 的地址放到 /etc/mail/relay-domains 文件中。 完成这项工作的简单的方法是:
# echo "your.isp.example.com" > /etc/mail/relay-domains
建立或编辑这个文件以后您必须重新启动 sendmail。 如果您是一个管理员并且不希望在本地发送邮件, 或者想要在其它的机器甚至其它的 ISP 上使用一个客户端系统, 这个方法是很方便的。如果您仅有一到两个邮件帐户它也非常的有用。 如果有大量的地址需要添加, 您可以很简单的使用您喜欢的文本编辑器打开这个文件添加域名, 每行一个:
your.isp.example.com other.isp.example.net users-isp.example.org www.example.org
现在邮件可以通过您的系统传送, 这个列表中存在的主机 (前提是用户在您的系统上已经有一个帐户) 将可以成功的发送。这是一个允许正常的远程用户从您的系统发送邮件, 并且阻止其它非法用户通过您系统发送垃圾邮件的好方法。
下面这节将介绍邮件配置和为整个域安装邮件。
在邮箱外,只要您设置 /etc/resolv.conf 或者运行您自己的名字服务器,您就可以发送邮件到外部的主机。 如果您想要您的邮件发送给某个特定的 MTA(例如, sendmail) 在您的 FreeBSD 主机上,有两个方法:
运行您自己的域名服务器和您自己的域。例如, FreeBSD.org
获得直接分发给您主机的邮件。您可以直接使用您当前的 DNS 名称。例如,example.FreeBSD.org。
不管您选择上面那种方法,为了直接在您的主机上发送邮件, 必须有一个静态的 IP 地址(不是象 PPP 拨号一样的动态地址)。 如果您在防火墙后面,它必须让 SMTP 协议通过。 如果您想要在您的主机上直接的收取邮件, 您必须确定两件事:
确定在您 DNS 中的 MX 记录(最小编号的)指向您的 IP 地址。
确定在您 DNS 中的 MX 记录没有禁止您的主机。
上面的每条记录都允许您在您的主机直接接收邮件。
试试这个:
# hostname example.FreeBSD.org # host example.FreeBSD.org example.FreeBSD.org has address 204.216.27.XX
如果您看到这些, 则直接发往 <yourlogin@example.FreeBSD.org> 应该已经可以正常工作了 (假设
sendmail 已经在 example.FreeBSD.org
上正确启动了)。
如果您看到这些:
# host example.FreeBSD.org example.FreeBSD.org has address 204.216.27.XX example.FreeBSD.org mail is handled (pri=10) by hub.FreeBSD.org
所有发送到主机 (example.FreeBSD.org) 的邮件在相同的用户名下将会被 hub 终止的收集,而不是直接发送到您的主机。
上面的信息是通过您的 DNS 服务器来处理的。支持邮件路由信息的 DNS 记录是 邮件 交换 记录。如果 MX 记录不存在,邮件将通过它自己的 IP 地址被直接的发送到主机。
freefall.FreeBSD.org的MX记录如下所示:
freefall MX 30 mail.crl.net freefall MX 40 agora.rdrop.com freefall MX 10 freefall.FreeBSD.org freefall MX 20 who.cdrom.com
正如您说看到的,freefall 有很多 MX 记录。 最小编号的 MX 记录是直接接收邮件的主机。如果因为一些原因它不可用,其它 (有时会访问“backup MXes”)接收信息将会暂时接替并做临时的排列。
为了有效的使用交换式 MX 站点,应当从您的机器上分离一些 Internet 连接。您的 ISP 或者其它友好的站点可以没有任何问题的为您提供这个服务。
为了设置一个“邮件主机”(又称邮件服务器) 您必须要把许多邮件发送到与它相连的几个工作站中。 基本上,您想要“要求”在您域的每个主机的所有邮件 (在这个例子里是 *.FreeBSD.org) 转向到您的邮件服务器,从而使您的用户可以在主邮件服务器里接收他们的邮件。
要使工作最简单,带有同样 用户名 的帐户应该同时存在于两台机器上。使用 adduser(8) 来这样做。
您将使用的邮件主机必须为每个工作站指定一个邮件交换。您可以在 DNS 中这样配置:
example.FreeBSD.org A 204.216.27.XX ; Workstation
MX 10 hub.FreeBSD.org ; Mailhost
无论 A 记录指向哪,这将为工作站重新定位到邮件主机。邮件将被发送到 MX 主机。
您不能自己这样做除非您运行着一个 DNS 服务器。 如果不是这样,或者不能运行您自己的 DNS 服务器,告诉您的 ISP 或者给您提供 DNS 服务的人。
如果您正在使用虚拟邮件主机,下面的信息将会对您有用。 在这个例子里,我们假定您有一个客户并且他有自己的域, 这个例子中是 customer1.org,您要把 customer1.org 所有的邮件发送到您的邮件主机 mail.myhost.com。 您的 DNS 记录应该是这样:
customer1.org MX 10 mail.myhost.com
您 不 需要有个 A 记录, 如果您只为域 customer1.org 处理邮件。
Note: 必须清楚 customer1.org 将不能工作,除非存在一个 A 记录。
最后一件您必须要做的事是告诉 sendmail 接受邮件的是什么域和(或)主机名。 这里有好几种方法。下面方法可以任选一种:
添加您的主机到 /etc/mail/local-host-names 文件中,如果您使用的是 FEATURE(use_cw_file)。如果您使用 sendmail 8.10 或者更高版本,文件是 /etc/sendmail.cw。
添加一行 Cwyour.host.com 到您的 /etc/sendmail.cf 或 /etc/mail/sendmail.cf 文件,如果您使用 sendmail 8.10 或者更高版本。
sendmail 的配置,在 FreeBSD 中已经配置好为您的站点直接的连接 Internet。 如果站点希望他们的邮件通过 UUCP 交换,则必须安装其它的 sendmail 配置文件。
手工的配置 /etc/mail/sendmail.cf 是一个高级主题。sendmail 8 版本通过 m4(1) 预处理生成一个配置文件,实际上这个配置发生在一个比较高的抽象层。 m4(1) 配置文件可以在 /usr/src/usr.sbin/sendmail/cf 下找到。
如果您没有在系统上安装全部源码,则可以从单独的压缩文件中提取 sendmail 配置文件。假定您的 FreeBSD 源码 CDROM 已经被 mount:
# cd /cdrom/src # cat scontrib.?? | tar xzf - -C /usr/src/contrib/sendmail
这个提取只有几百 K 字节。cf 目录中的 README 文件能够为您提供一个到 m4(1) 配置的基本的介绍。
最好的支持 UUCP 传送的方法是使用 mailertable 的特点。建立一个资料库让 sendmail 可以使用它自己的路由决策。
首先,您必须建立您自己的 .mc 文件。 /usr/src/usr.sbin/sendmail/cf/cf 目录包含一些例子。 假定您已经命名自己的文件叫做 foo.mc, 您要做的只是把它转换成一个有效的 sendmail.cf:
# cd /usr/src/usr.sbin/sendmail/cf/cf # make foo.cf # cp foo.cf /etc/mail/sendmail.cf
一个典型的 .mc 文件看起来可能象这样:
VERSIONID(`Your version number') OSTYPE(bsd4.4) FEATURE(accept_unresolvable_domains) FEATURE(nocanonify) FEATURE(mailertable, `hash -o /etc/mail/mailertable') define(`UUCP_RELAY', your.uucp.relay) define(`UUCP_MAX_SIZE', 200000) define(`confDONT_PROBE_INTERFACES') MAILER(local) MAILER(smtp) MAILER(uucp) Cw your.alias.host.name Cw youruucpnodename.UUCP
accept_unresolvable_domains、 nocanonify 和 confDONT_PROBE_INTERFACES 特性将避免在传送邮件时使用DNS的机会。UUCP_RELAY 项是支持 UUCP 传送所必须的。简单的放入一个 Internet 上可以处理 UUCP 虚拟域地址的主机名。通常,您在这里填入您 ISP 邮件的回复处。
一旦您做完这些,您还需要这个 /etc/mail/mailertable 文件。 如果您只有一个用来传递所有邮件的对外通道的话, 以下的文件就足够了:
# # makemap hash /etc/mail/mailertable.db < /etc/mail/mailertable . uucp-dom:your.uucp.relay
一个更复杂点的例子象这样:
# # makemap hash /etc/mail/mailertable.db < /etc/mail/mailertable # horus.interface-business.de uucp-dom:horus .interface-business.de uucp-dom:if-bus interface-business.de uucp-dom:if-bus .heep.sax.de smtp8:%1 horus.UUCP uucp-dom:horus if-bus.UUCP uucp-dom:if-bus . uucp-dom:
头三行处理域地址邮件,不应该被传送出默认的路由, 而由某些 UUCP 邻居取代的特殊情况,这是为了走“捷径”。 下一行处理本地网的邮件让它可以使用 SMTP 来传送。 最后,UUCP 邻居提起。UUCP 虚拟域的记载, 允许一个 uucp-neighbor !recipient 推翻默认规则。最后一行则以一个单独的句点最为结束, 以 UUCP 传送到提供您所有的邮件网关的 UUCP 邻居。 所有在 uucp-dom: 关键字里的节点名称必须是有效的 UUCP 邻居,您可以用 uuname 去确认。
提醒您这个文件在使用前必须被转换成 DBM 数据库文件。最好在 mailertable 最上面用注解写出命令行来完成这个工作。 当您每次更换您的 mailertable 后您总是需要执行这个命令。
最后提示:如果您不确定某个特定的路径可用, 记得把 -bt 选项加到 sendmail。这会将 sendmail 启动在 地址检测模式。只要按下 3,0,接着输入您希望测试的邮件路径位置。 最后一行告诉您使用邮件代理程序, 代理程序会通知目的主机以及 (可能转换) 地址。 要离开此模式请按 Ctrl+D。
% sendmail -bt ADDRESS TEST MODE (ruleset 3 NOT automatically invoked) Enter <ruleset> <address> > 3,0 foo@example.com canonify input: foo @ example . com ... parse returns: $# uucp-dom $@ your.uucp.relay $: foo < @ example . com . > > ^D
许多时候, 可能只希望通过转发服务器来发送邮件。 典型的情况包括:
使用桌面机, 但希望通过类似 send-pr(1) 这样的程序发送邮件。 这样就需要使用 ISP 的邮件转发服务器。
不在本地处理邮件的服务器, 但它需要把邮件交给转发服务器来进行处理。
几乎任何一个 MTA 都能够胜任这样的工作。 然而不幸的是, 要把一个全功能的 MTA 正确地配置为只把邮件交给其他服务器是一件很困难的事情。 使用 sendmail 以及 postfix 这样的程序, 多少有些杀鸡用牛刀的感觉。
此外, 如果您使用典型的 Internet 访问服务, 您的协议可能会包含禁止运行 “邮件服务器” 的条款。
满足这些需要最简单的办法是安装 mail/ssmtp port。 以 root 身份执行下面的命令:
# cd /usr/ports/mail/ssmtp # make install replace clean
一旦装好, mail/ssmtp 就可以用四行 /usr/local/etc/ssmtp/ssmtp.conf 来配置:
root=yourrealemail@example.com mailhub=mail.example.com rewriteDomain=example.com hostname=_HOSTNAME_
请确认您为 root 使用了真实的电子邮件地址。 用您的 ISP 提供的外发邮件转发服务器名称, 替换掉 mail.example.com (某些 ISP 可能将其称为 “外发邮件服务器” 或 “SMTP 服务器”)。
接下来确认禁用了 sendmail, 这可以通过将 sendmail_enable="NONE" 加入 /etc/rc.conf 来完成。
mail/ssmtp 也提供了一些其他选项。 请参见在 /usr/local/etc/ssmtp 中的示例配置, 或者 ssmtp 的联机手册来得到一些例子和更多的其他信息。
以这种方式配置 ssmtp, 能够让您计算机上的任何需要发送邮件的软件都正常运转, 而不必冒违反 ISP 的使用政策, 或使您的电脑被劫持用于发送垃圾邮件的风险。
如果您有静态的 IP 地址, 就应该不用修改任何默认的配置。 将主机名设置为分配给您的 Internet 名称,其他的事情 sendmail 都会替您做好。
如果您的 IP 地址是动态分配的, 并使用 PPP 连接拨入 Internet, 则您可能会从 ISP 的邮件服务器上得到一个信箱。 这里我们假设您的 ISP 的域名是 example.net, 您的用户名是 user, 您把自己的机器称作 bsd.home, 而您的 ISP 告诉您可以使用 relay.example.net 来转发邮件。
为了从邮箱收取邮件, 需要安装一个收信代理。 fetchmail 是一个能够支持许多种不同协议的不错的选择。 这个程序可以通过 package 或 Ports Collection (mail/fetchmail) 来安装。 通常, 您的 ISP 会提供 POP。 如果您使用用户 PPP,您还可以在 Internet 连接建立时自动地抓取邮件, 这可以通过在 /etc/ppp/ppp.linkup 中增加如下的项来实现:
MYADDR: !bg su user -c fetchmail
如果您正使用 sendmail (如下所示) 来为非本地用户传送邮件, 则可能需要让 sendmail 在您的 Internet 连接建立时立即传送邮件队列。 要完成这项工作, 应该把下面的命令放到 /etc/ppp/ppp.linkup 中的 fetchmail 之后
!bg su user -c "sendmail -q"
假设您在 bsd.home 上有一个 user 用户。 在 bsd.home 上的 user 主目录中创建一个 .fetchmailrc 文件:
poll example.net protocol pop3 fetchall pass MySecret
因为包含了密码 MySecret, 这个文件应该只有 user 可读。
要使用正确的 from: 头来发送文件, 您必须告诉 sendmail 使用 <user@example.net> 而不是i <user@bsd.home>。 另外, 您可能也需要要求 sendmail 通过 relay.example.net
来发送邮件, 以便更快地传送它们。
以下的 .mc 文件应该可以满足您的需求:
VERSIONID(`bsd.home.mc version 1.0') OSTYPE(bsd4.4)dnl FEATURE(nouucp)dnl MAILER(local)dnl MAILER(smtp)dnl Cwlocalhost Cwbsd.home MASQUERADE_AS(`example.net')dnl FEATURE(allmasquerade)dnl FEATURE(masquerade_envelope)dnl FEATURE(nocanonify)dnl FEATURE(nodns)dnl define(`SMART_HOST', `relay.example.net') Dmbsd.home define(`confDOMAIN_NAME',`bsd.home')dnl define(`confDELIVERY_MODE',`deferred')dnl
如何转换这个 .mc 文件到 sendmail.cf 文件的细节,请参考前面的章节。 另外,在更新 sendmail.cf 文件后, 不要忘记重启 sendmail。
在您的邮件服务器上启用 SMTP 验证有很多好处。 SMTP 验证可以让 sendmail 多一重安全保障, 而且也使得使用不同机器的漫游用户能够使用同一个邮件服务器, 而不需要每次都修改它们的邮件客户端配置。
从 ports 中安装 security/cyrus-sasl。 您可以从 security/cyrus-sasl 找到它。 security/cyrus-sasl 有一系列编译时可选的选项, 包括我们将要使用的验证方式等等。请务必选择 pwcheck。
安装完 security/cyrus-sasl 之后, 编辑 /usr/local/lib/sasl/Sendmail.conf (如果不存在则建立) 并在其中增加:
pwcheck_method: passwd
这个方法将允许sendmail 依照您的 FreeBSD passwd 数据库进行验证。 这将为每个用户建立一个新用户名设置和口令使用 SMTP 验证减少麻烦,并且保证登录和邮件口令是相同的。
现在编辑 /etc/make.conf 文件,添加如下行:
SENDMAIL_CFLAGS=-I/usr/local/include/sasl1 -DSASL SENDMAIL_LDFLAGS=-L/usr/local/lib SENDMAIL_LDADD=-lsasl
这些行将给 sendmail 合适的配置选项, 为在编译时间链接到 cyrus-sasl。 确定 cyrus-sasl 被安装之前重新编译 sendmail。
重新编译 sendmail 运行如下命令:
# cd /usr/src/usr.sbin/sendmail # make cleandir # make obj # make # make install
如果 /usr/src 和共享库没有大的变化并且它们都必须可用,sendmail 编译应该没有任何问题。
sendmail 被重新编译和安装后, 编辑您的 /etc/mail/freebsd.mc 文件 (或者无论您选择使用的您的哪个 .mc 文件。许多管理员选择使用跟 hostname(1) 一样的唯一的 .mc 文件输出)。添加这些行在这个文件:
dnl set SASL options TRUST_AUTH_MECH(`GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN')dnl define(`confAUTH_MECHANISMS', `GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN')dnl define(`confDEF_AUTH_INFO', `/etc/mail/auth-info')dnl
这些选项配置有不同的方法,对于 sendmail 验证用户。 如果您想要使用除 pwcheck 之外的方法,请参考相关文档。
最后,在 /etc/mail 运行 make(1)。 它将建立您的新 .mc 文件并建立一个 .cf 文件命名为 freebsd.cf (或者您想使用您的其它名字的 .mc文件)。接着使用命令 make install restart,这将复制文件到 sendmail.cf,并且正确的重新启动 sendmail。 更多有关这个过程的信息,您可以参考 /etc/mail/Makefile 文件。
如果所每个步骤都做对了, 您应该可以通过您的邮件客户端进入您的登录信息并且传送一个测试信息。 更多的分析,设置 sendmail 的 LogLevel 到 13 并且查看 /var/log/maillog 中的信息。
您也许希望添加如下行到 /etc/rc.conf 文件, 这将允许服务在重起之后自动运行:
sasl_pwcheck_enable="YES" sasl_pwcheck_program="/usr/local/sbin/pwcheck"
这将保证 SMTP_AUTH 初始化在系统启动时自动运行。
更多的信息,请参看 sendmail 相关页 SMTP 验证。
邮件用户代理 (MUA) 是一个用于收发邮件的应用程序。 更进一步, 随着电子邮件的 “演化” 并愈发复杂, MUA 在和电子邮件相结合方面变得日趋强大; 这为用户提供了更多的功能和灵活性。 FreeBSD 包含了对于众多邮件用户代理的支持, 所有这些都可以通过 FreeBSD Ports Collection 来轻松安装。 用户可以选择类似 evolution 以及 balsa 这样的图形界面程序, 也可以选择类似 mutt、 pine 或 mail 这样的控制台程序, 或者某些大型机构使用的 web 界面。
mail(1) 是 FreeBSD 中默认的邮件用户代理 (MUA)。 它是一个基于控制台的 MUA, 提供了所有用于收发文本形式的电子邮件所需的基本功能, 虽然它处理附件的能力有限, 而且只支持本地的信箱。
虽然 mail 没有内建的 POP 或 IMAP 服务器支持, 然而这些信箱可以通过类似 fetchmail 这样的应用程序, 来下载到本地的 mbox 文件中。 这一应用程序在本章的稍后部分 (第 22.12 节) 进行了介绍。
要收发邮件, 只需简单地使用 mail 命令, 如下所示:
用户保存在 /var/mail 中的信箱的内容会被 mail 程序自动地读取。 如果信箱是空的, 程序会退出并给出一个消息表示没有邮件。 一旦读完了信箱, 将启动应用程序的界面, 并列出邮件。 所有的邮件会被自动编号, 类似下面的样子:
Mail version 8.1 6/6/93. Type ? for help. "/var/mail/marcs": 3 messages 3 new >N 1 root@localhost Mon Mar 8 14:05 14/510 "test" N 2 root@localhost Mon Mar 8 14:05 14/509 "user account" N 3 root@localhost Mon Mar 8 14:05 14/509 "sample"
现在, 您通过使用 mail 的 t 命令, 并给出邮件的编号, 就可以看到邮件了。 在这个例子中, 我们将阅读第一封邮件:
& t 1 Message 1: From root@localhost Mon Mar 8 14:05:52 2004 X-Original-To: marcs@localhost Delivered-To: marcs@localhost To: marcs@localhost Subject: test Date: Mon, 8 Mar 2004 14:05:52 +0200 (SAST) From: root@localhost (Charlie Root) This is a test message, please reply if you receive it.
正如在上面的例子中所看到的, t 键将显示完整的邮件头。 要再次查看邮件的列表, 可以使用 h 键。
如果需要回复邮件, 也可以使用 mail 来完成, 方法是使用 R 或 r 这两个 mail键。 R 键会要求 mail 只回复发送邮件的人, 而 r 不仅回复发送邮件的人, 而且也会将回复抄送给原来邮件的其他接收者。 如果需要, 也可以在这些命令后面指定邮件的编号。 做完这些之后, 就可以输入回复了, 在邮件的最后应该有一个只有一个 . 的行, 例如:
& R 1 To: root@localhost Subject: Re: test Thank you, I did get your email. . EOT
要发出新邮件, 可以使用 m, 后面接收件人的邮件地址。 多个收件人之间, 应该使用 , 隔开。 接下来需要输入邮件的主题, 然后是正文。 同样的, 在邮件最后需要一个只有 . 的空行表示结束。
& mail root@localhost Subject: I mastered mail Now I can send and receive email using mail ... :) . EOT
在 mail 工具中, 可以用 ? 来显示帮助, 而参考 mail(1) 联机手册则可以获得更多关于 mail 的帮助信息。
Note: 正如前面所提到的那样, mail(1) 命令在设计时没有考虑到要处理附件, 因而在这方面他的功能很弱。 新的 MUA, 如 mutt, 能够更好地处理附件。 但如果您仍然希望使用 mail 命令, 那么 converters/mpack port 则是一个值得考虑的附加工具。
mutt 是一个短小精悍的邮件用户代理, 它提供了许多卓越的功能, 包括:
能够按线索阅读邮件;
支持使用 PGP 对邮件进行数字签名和加密;
支持 MIME;
支持 Maildir;
高度可定制。
所有这些特性, 都使得 mutt 得以跻身于目前最先进的邮件用户代理的行列。 请参考 http://www.mutt.org 以了解更多关于 mutt 的资料。
稳定版本的 mutt 可以通过 mail/mutt port 来安装, 而开发版本, 则可以通过使用 mail/mutt-devel port 安装。 通过 port 安装之后,可以通过下面的命令来启动 mutt:
% mutt
mutt 会自动读取 /var/mail 中的用户信箱, 并显示其内容。 如果用户信箱中没有邮件, 则 mutt 将等待来自用户的命令。 下面的例子展示了 mutt 列出邮件的情形:

要阅读邮件, 只需用光标键选择它, 然后按 Enter 键。 以下是 mutt 显示邮件的例子:

和 mail(1) 类似, mutt 允许用户只回复发件人, 或者回复所有人。 如果只想回复发信任, 使用 r 快捷键。 要回复所有人 (group reply), 可以用 g 快捷键。
Note: mutt 会使用 vi(1) 命令作为编辑器, 用于创建和回复邮件。 这一行为可以通过建立用户自己的 .muttrc 文件来订制, 方法是修改 editor 变量。
要撰写新邮件, 需要首先按 m。 在输入了有效的邮件主题之后, mutt 将启动 vi(1), 您可以在其中撰写邮件。 写好邮件的内容之后, 存盘并退出 vi, 则 mutt 将继续, 并显示一些关于将发出的邮件的摘要信息。 要发送邮件, 只需按 y。 下面给出了摘要信息的一个例子:

mutt 也提供了相当详尽的帮助, 在绝大多数菜单中, 都可以使用 ? 键将其呼出。 屏幕顶行中也会给出常用的快捷键。
pine 主要是针对初学者设计的, 但也提供了一些高级功能。
Warning过去, pine 软件被发现有许多远程漏洞, 这些漏洞会允许远程的攻击者在用户的本地系统上, 通过发送精心炮制的邮件来执行任意的代码。 所有的 已知 问题都已经被修正了, 但 pine 的代码是以很不安全的风格编写的, 并且 FreeBSD 安全官相信仍然有一些尚未被发现的安全漏洞。 您应当考虑并承担安装 pine 可能带来的风险。
最新版本的 pine 可以通过使用 mail/pine4 port 来安装。 装好之后, pine 可以通过下面的命令启动:
% pine
第一次启动 pine 时, 它会显示出一个欢迎页, 并给出简要的介绍, 以及 pine 开发小组要求用户匿名发送一封邮件, 以便帮助他们了解有多少用户在使用他们开发的客户程序的请求。 要发送这封匿名的邮件, 请按 Enter, 您也可以按 E 退出, 而不发送匿名邮件。 下面是欢迎页的一个例子:

接下来展现给用户的将是主菜单, 可以很容易地通过光标键在上面进行选择。 这个主菜单提供了用于撰写新邮件、 浏览邮件目录, 甚至管理地址簿等等的快捷方式。 主菜单下面是完成各种功能的快捷键说明。
由 pine 打开的默认目录是 inbox。 要查看邮件所以in, 应按 I, 或选择下面所示的 MESSAGE INDEX 选项:

邮件索引展示了当前目录下的邮件, 可以使用光标键翻阅。 按 Enter 键阅读高亮选定的邮件。

在上面的截屏中, 使用 pine 显示了一封示例邮件。 在屏幕底部也显示了快捷键供参考。 其中的一个例子是 r 键, 它告诉 MUA 回复正显示的邮件。

在 pine 中回复邮件, 是通过 pico 编辑器完成的, 后者默认情况下会随 pine 一起安装。 而 pico 工具使得浏览邮件变得更加简单, 并且要比 vi(1) 或 mail(1) 更能容忍误操作。 回复写好之后, 可以用 Ctrl+X 来发出它。 此前, pine 程序会要求确认。

pine 程序可以通过使用主菜单中的 SETUP 选项来进行定制。 请参考 http://www.washington.edu/pine/ 来了解更多信息。
fetchmail 是一个全功能的 IMAP 和 POP 客户程序, 它允许用户自动地从远程的 IMAP 和 POP 服务器上下载邮件, 并保存到本地的信箱中; 这样, 访问这些邮件就变得更方便了。 fetchmail 可以通过 mail/fetchmail port 安装, 它提供了许多有用的功能, 其中包括:
支持 POP3、 APOP、 KPOP、 IMAP、 ETRN 以及 ODMR 协议。
通过 SMTP 转发邮件, 这使得过滤、 转发, 以及邮件别名能够正常工作。
能够以服务程序的方式运行, 并周期性地检查邮件。
能够从多个信箱收取邮件, 并根据配置, 将这些邮件转发给不同的本地用户。
尽管介绍全部 fetchmail 的功能超出了本书的范围, 但这里仍然介绍了其基本的功能。 fetchmail 工具需要一个名为 .fetchmailrc 的配置文件才能正常工作。 这个文件中包含了服务器信息, 以及登录使用的凭据。 由于这个文件包含敏感内容, 建议将其设置为只有属主所有, 使用下面的命令:
% chmod 600 .fetchmailrc
下面的 .fetchmailrc 提供了一个将某一用户的信箱通过 POP 下载到本地的例子。 它告诉 fetchmail 连接到 example.com, 并使用用户名 joesoap 和口令 XXX。 这个例子假定 joesoap 同时也是本地的系统用户。
poll example.com protocol pop3 username "joesoap" password "XXX"
下一个例子将连接多个 POP 和 IMAP 服务器, 并根据需要转到不同的本地用户:
poll example.com proto pop3: user "joesoap", with password "XXX", is "jsoap" here; user "andrea", with password "XXXX"; poll example2.net proto imap: user "john", with password "XXXXX", is "myth" here;
另外, fetchmail 也可以通过指定 -d 参数, 并给出 fetchmail 在轮询 .fetchmailrc 文件中列出的服务器的时间间隔, 来以服务程序的方式运行。 下面的例子会让 fetchmail 每 60 秒轮询一次:
% fetchmail -d 60
更多关于 fetchmail 的资料, 可以在 http://www.catb.org/~esr/fetchmail/ 找到。
procmail 是一个强大得惊人的过滤进入邮件的应用程序。 它允许用户定义 “规则”, 并用这些规则来匹配进入的邮件, 进而执行某些特定的功能, 或将这些邮件转发到其他信箱和/或邮件地址。 procmail 可以通过 mail/procmail port 来安装。 装好之后, 可以直接把它集成到绝大多数 MTA 中; 请参考您使用的 MTA 的文档了解具体的作法。 另外, procmail 可允许通过把下面的设置加入到用户主目录中的 .forward 文件中, 来启用 procmail 功能:
"|exec /usr/local/bin/procmail || exit 75"
接下来我们将介绍一些基本的 procmail 规则, 以及它们都是做什么的。 各种各样的规则, 都应该写到 .procmailrc 文件中, 而这个文件则必须放在用户的主目录下。
主要的规则, 也可以在 procmailex(5) 联机手册中找到。
将所有来自 <user@example.com> 的邮件,
转发到外部地址 <goodmail@example2.com>:
:0 * ^From.*user@example.com ! goodmail@example2.com
转发所有不超过 1000 字节的邮件到外部地址 <goodmail@example2.com>:
:0 * < 1000 ! goodmail@example2.com
把所有发送到 <alternate@example.com> 的邮件放到信箱
alternate 中:
:0 * ^TOalternate@example.com alternate
将所有标题为 “Spam” 的邮件发到 /dev/null:
:0 ^Subject:.*Spam /dev/null
将收到的所有 FreeBSD.org 邮件列表的邮件, 转发到各自的信箱:
:0
* ^Sender:.owner-freebsd-\/[^@]+@FreeBSD.ORG
{
LISTNAME=${MATCH}
:0
* LISTNAME??^\/[^@]+
FreeBSD-${MATCH}
}
本章将覆盖某些在 UNIX 系统上常用的网络服务。话题将会涉及 如何安装、配置、测试和维护多种不同类型的网络服务。本章节中将提 供大量配置文件的样例,期望能够对您有所裨益。
在读完本章之后,您将会知道:
如何管理 inetd。
如何设置运行一个网络文件系统。
如何配置一个网络信息服务器以共享用户帐号。
如何通过DHCP自动配置网络。
如何配置一个域名服务器。
如何设置Apache HTTP 服务器。
如何设置文件传输(FTP)服务器。
如何使用Samba为 Windows 客户端设置文件和打印服务。
如何同步时间和日期,以及如何设置使用NTP协议的时间服务器。
在阅读此章节之前,您应当:
理解有关/etc/rc中脚本的基本知识。
熟悉基本网络术语。
懂得如何安装额外的第三方软件(第 4 章)。
inetd(8) 被叫做 “超级 Internet 服务器”, 因为它能够管理许多不同的服务程序的连接。 当 inetd 接到连入的连接时, 它就会判断连接所需要启动的服务程序, 并运行它们, 然后将连接转交给这些服务程序 (在启动程序时, 这些程序的标准输入、输出和错误输出描述符被替换为连入的连接)。 与一个一个地运行单独的服务程序相比, 只启动一个 inetd 能够削减平均的系统负荷。
一般说来, inetd 会被用来启动其他服务程序。 但一些非常简单的协议, 例如 chargen、 auth, 以及 daytime, 则会由它自行处理。
这一节将介绍如何通过命令行选项, 以及配置文件 /etc/inetd.conf 来配置 inetd 的一些基本知识。
inetd 通过 /etc/rc.conf 系统进行初始化。inetd_enable 选项默认被设定为 NO,不过可以通过sysinstall打开, 如果选用中等安全的模板。在/etc/rc.conf中设定:
inetd_enable="YES"或
inetd_enable="NO"可以激活或者禁止inetd在启动时加载。
此外,可以通过inetd_flags把不同的 命令行参数传给inetd。
inetd 语法:
inetd [-d] [-l] [-w] [-W] [-c maximum] [-C rate] [-a address | hostname] [-p filename] [-R rate] [configuration file]
打开调试选项。
记录成功的连接
为外部服务打开TCP Wrapping(默认)。
为inetd的内置服务打开TCP Wrapping (默认)。
指定单个服务的最大并发访问数量,默认为不限。 也可以在此服务的具体配置里面通过max-child改掉。
指定单个服务一分钟内能被单个IP地址调用的最大次数, 默认不限。也可以在此服务的具体配置里面通过max-connections-per-ip-per-minute 改掉。
指定单个服务一分钟内能被调用的最大次数,默认为256。 设为0 则允许不限次数调用。
指定绑定的IP地址。此外,可以使用主机名,这样系统就 可以根据主机名对应的IPV4或者IPV6来选择绑定地址。通常当 inetd 在 jail(8) 中运行 的时候指定主机名,这种情况下主机名来自 jail(8) 环 境变量
当使用主机名方式时,如果IPV4和IPV6都会被绑定到服务, 那么,需要在/etc/inetd.conf.中为该服务 的每个对应协议添加一条记录。比如,一个TCP服务需要两条记录, 一条使用tcp4,另一条使用tcp6。
指定用来存放进程ID的文件。
以上选项在/etc/rc.conf中将可以 被inetd_flags开关传递给inetd。 默认情况下,inetd_flags 被置为 -wW,也既是对inetd的内置或外部服务打开TCP wrapping. 对于新手,通常不用去动这些参数,就算它们出现在/etc/rc.conf里头。
Note: 对inetd而言,所谓外部服务是当 连接请求到来时,被调用并接受连接,启动于inetd之外的守护进程。 反之,内置服务则是那些inetd自己可 以完全处理的了。
inetd的配置通过 /etc/inetd.conf文件进行控制。
当 /etc/inetd.conf内容发生改变,可以 对inetd进程发送一个HangUP信号,以强制 inetd重新读取配置文件,如下所示:
配置文件中的每一行都是一个独立服务。如果要注释掉该服务,可以在行首加上 “#”。/etc/inetd.conf的格式如下:
service-name
socket-type
protocol
{wait|nowait}[/max-child[/max-connections-per-ip-per-minute]]
user[:group][/login-class]
server-program
server-program-arguments
ftpd使用IPv4的例子:
ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l
指明各个服务的服务名。其服务名必须与/etc/services中列出的一致。 这将决定inetd会监听哪个port。 一旦有新的服务需要添加,必须先在/etc/services里面添加。
可以是stream、dgram、raw或者 seqpacket。 stream 用在基于连接的,TCP 服务;而dgram被用于服务用于UDP传输协议。
下列之一:
wait|nowait 指明从inetd 里头调用的服务是否可以自己处理socket. dgramsocket类型必须使用wait, 而stream socket daemons, 由于通常使用多线程方式,应当使用 nowait. wait 通常usually 把多个socket丢给单个服务进程, 而nowait 则 会为每个新的socket生成一个子进程。
使用max-child选项可以设定针对服务, inetd可以派生出来的最大子进程数量。 如果某特定服务需要限定最高10个实例,把/10 放到nowait后头就可以了。
在max-child之外,还有一个开关可以限制 来自同一个地方,针对某个服务的最大连接数。这个开关就是: max-connections-per-ip-per-minute。 比如,设定该值为10就可以限定单个IP地址去向某服务的连接最大 为每分钟十个。这个对于防止有意或者无意的资源耗尽或者拒绝服 务(DoS)颇有用处。
在这部分,必须选择wait或 nowait。 max-child和 max-connections-per-ip-per-minute 则为可有可无。
一个stream-type多线程的服务,如果没有 max-child或者 max-connections-per-ip-per-minute需要, 一般使用: nowait。
同样的服务,如果需要限制最大连接数,则如下: nowait/10。
此外,如果要限制每分钟单个IP来访连接为20个,同时最多 派生10个进程,可以如下: nowait/10/20。
以上开关都默认被使用在fingerd服务上面, 如下所示:
finger stream tcp nowait/3/10 nobody /usr/libexec/fingerd fingerd -s
该开关指定服务将以什么用户身份运行。一般而言,服务运行身份是 root。基于安全目的,可以看到有些服务以 daemon身份,或者是最小特权的 nobody身份运行。
当连接到来时,执行服务程序的全路径。如果服务是由 inetd内置提供的,以internal代替。
当server-program调用到时,该开关 的值通过argv[0]通过传递给服务而工作。 如果命令行为:mydaemon -d,则 mydaemon -d为server-program-arguments 开关的值。同样的,如果服务是由inetd 内置提供的,这里还是 internal。
随安装时候选择的安全模式不同,部分inetd的服务 会被设为默认打开。如果没有确实的需要,禁止它们!只要在/etc/inetd.conf里头 需要禁止的服务前头加上“#”,然后 对inetd发送hangup信号。某些服务,比如fingerd, 由于对攻击者提供太多信息,可能对任何人都应该禁止。
某些服务在安全上没有考虑,并且有一些连接超时检测设得很长或没有检测机制。 这回允许攻击者慢慢地发送连接,这样可以导致可用资源的消耗。在某些服务上面加上 max-connections-per-ip-per-minute和max-child 的限制似乎不错。
默认情况下,TCP wrapping 是打开的。参考 hosts_access(5) 手册,以获得更多关于在各种inetd 调用的服务上设置TCP限制的信息。
daytime, time, echo, discard, chargen, 和 auth 都是inetd内置的服务。
auth服务提供 identity (ident, identd)网络服务,并且某种程度上可配置。
参考 inetd(8) 手册获得更多信息。
网络文件系统是FreeBSD支持的文件系统中的一种,也被称为NFS. NFS允许一个系统在网络上与它人共享目录和文件。通过使用NFS,用户和程序可以象访问本地文件 一样访问远端系统上的文件。
以下是NFS最显而易见的好处:
本地工作站使用更少的磁盘空间,因为通常的数据可以存放在一 台机器上而且可以通过网络访问到。
用户不必在每个网络上机器里头都有一个home目录。Home目录 可以被放在NFS服务器上并且在网络上处处可用。
诸如软驱,CDROM,和 Zip® 之类的存储设备可以在网络上面被别的机器使用。 这可以减少整个网络上的可移动介质设备的数量。
NFS 至少包括两个主要的部分: 一台服务器, 以及至少一台客户机, 客户机远程地访问保存在服务器上的数据。 要让这一切运转起来, 需要配置并运行几个程序。
Note: 在 FreeBSD 4.X 中, portmap 工具将发挥后续版本中 rpcbind 工具的作用。 因此, 在 FreeBSD 4.X 中, 您可能需要把后续例子中的 rpcbind 改成 portmap 以便使用。
服务器必须运行以下服务:
| 服务 | 描述 |
|---|---|
| nfsd | NFS,为来自NFS客户端的 请求服务。 |
| mountd | NFS挂载服务,处理nfsd(8)递交过来的请求。 |
| rpcbind | 此服务允许 NFS 客户程序查询正在被 NFS 服务使用的端口。 |
客户端同样运行一些进程,比如 nfsiod。 nfsiod处理来自NFS的请求。 这是可选的,而且可以提高性能,对于普通和正确的操作来说并不是必须的。 参考nfsiod(8)手册获得更多信息。
NFS的配置过程相对简单。这个过程只需要 对/etc/rc.conf文件作一些简单修改。
在NFS服务器这端,确认/etc/rc.conf 文件里头以下开关都配上了:
rpcbind_enable="YES" nfs_server_enable="YES" mountd_flags="-r"
只要NFS服务被置为enable,mountd 就能自动运行。
在客户端一侧,确认下面这个开关出现在 /etc/rc.conf里头:
nfs_client_enable="YES"
/etc/exports文件指定了哪个文件系统 NFS应该输出(有时被称为“共享”)。 /etc/exports里面每行指定一个输出的文件系统和 哪些机器可以访问该文件系统。在指定机器访问权限的同时,访问选项 开关也可以被指定。有很多开关可以被用在这个文件里头,不过不会在这 里详细谈。您可以通过阅读exports(5) 手册来发现这些开关。
以下是一些/etc/exports的例子:
紧接着的这个例子说明了如何输出一个文件系统,尽管具体设定和您 的环境以及网络配置有关。作为实例,为了输出/cdrom 到三个的例子机器,它们有同样域名(因此他们的域名不大对)或者在您的 /etc/hosts文件里头有记录。-ro 标志将被输出的文件系统置为只读。由于这个标志,远程系统将无法在被输出 的文件系统上写入任何变动。
/cdrom -ro host1 host2 host3
下面的例子可以输出/home给三个以IP地址方式表示的主机。 对于在没有配置DNS服务器的私有网络里头,这很有用。 此外,the /etc/hosts 文件也可以用以配置主机名;参看 hosts(5) 。 -alldirs 标记允许子目录被作为挂载点。 也就是说,客户端可以根据需要挂载需要的目录。
/home -alldirs 10.0.0.2 10.0.0.3 10.0.0.4
下面几行输出 /a ,以便两个来自不同域的客户端可以访问文件系统。 -maproot=root 标记授权远端系统上的 root 用户在被输出的文件系统上以root身份进行读写。 如果没有特别指定 -maproot=root 标记, 则即使用户在远端系统上是 root 身份, 也不能修改被输出文件系统上的文件。
/a -maproot=root host.example.com box.example.org
为了能够访问到被输出的文件系统,客户端必须被授权。 请确认客户端在您的 /etc/exports 被列出。
在 /etc/exports 里头,每一行里面,输出信息和文件系统一一对应。 一个远程主机每次只能对应一个文件系统。而且只能有一个默认入口。比如,假设 /usr 是独立的文件系统。这个 /etc/exports 就是无效的:
# Invalid when /usr is one file system /usr/src client /usr/ports client
一个文件系统,/usr, 有两行指定输出到同一主机, client. 解决这一问题的正确的格式是:
/usr/src /usr/ports client
The properties of one filesystem exported to a given host must all occur on one line. Lines without a client specified are treated as a single host. This limits how you can export filesystems, but for most people this is not an issue.
下面是一个有效输出列表的例子, /usr and /exports 是本地文件系统:
# Export src and ports to client01 and client02, but only # client01 has root privileges on it /usr/src /usr/ports -maproot=root client01 /usr/src /usr/ports client02 # The client machines have root and can mount anywhere # on /exports. Anyone in the world can mount /exports/obj read-only /exports -alldirs -maproot=root client01 client02 /exports/obj -ro
一旦修改 /etc/exports 了之后, 为了让变动生效,您必须重启 mountd。 可以通过对mountd 进程发送HUP信号重启:
# kill -HUP `cat /var/run/mountd.pid`
另外,系统重启动可以让FreeBSD把一切都弄好。尽管如此,重启不是必须的。 以 root 身份执行下面的命令可以搞定一切。
在 NFS 服务器端:
# rpcbind # nfsd -u -t -n 4 # mountd -r
在 NFS 客户端:
# nfsiod -n 4
现在每件事情都应该就绪,以备挂载一个远端文件系统。 在这些例子里头, 服务器名字将是:server ,而客户端的名字将是: client。 如果您只打算临时挂载一个远端文件系统或者只是打算作测试配置正确与否, 只要在客户端以 root 身份执行下面的命令:
# mount server:/home /mnt
这条命令会把服务端的 /home 目录挂载到客户端的 /mnt 上。 如果配置正确,您应该可以进入客户端的 /mnt 目录并且看到所有服务端的文件。
如果您打算让系统每次在重启动的时候都自动挂载远端的文件系统,把那个文件系统加到 /etc/fstab 文件里头去。下面是例子:
server:/home /mnt nfs rw 0 0
fstab(5) 手册里有所有可用的开关。
NFS 有很多实际应用。下面是比较常见的一些:
多个机器共享一台CDROM或者其他设备。这对于在多台机器中安装软件来说更加便宜跟方便。
在大型网络中,配置一台中心 NFS 服务器用来放置所有用户的home目录可能会带来便利。 这些目录能被输出到网络以便用户不管在哪台工作站上登录,总能得到相同的home目录。
几台机器可以有通用的/usr/ports/distfiles 目录。 这样的话,当您需要在几台机器上安装port时,您可以无需在每台设备上下载而快速访问源码。
amd(8) (自动挂接服务) 能够自动地在访问时挂接远程的文件系统。 如果文件系统在一段时间之内没有活动, 则会被 amd 自动卸下。 通过使用 amd, 能够提供一个持久挂接以外的选择, 而后者往往需要列入 /etc/fstab。
amd 通过将自己以 NFS 服务器的形式, 附加到 /host 和 /net 目录上来工作。 当访问这些目录中的文件时, amd 将查找相应的远程挂接点, 并自动地挂接。 /net 用于挂接远程 IP 地址上导出的文件系统, 而 /host 则用于挂接远程主机名上的文件系统。
访问 /host/foobar/usr 中的文件, 相当于告诉 amd 尝试挂接在主机 foobar 上导出的 /usr。
Example 23-2. 通过 amd 来挂接导出的文件系统
您可以通过使用 showmount 命令来查看远程主机上导出的文件系统。 例如, 要查看 foobar 上导出的文件系统, 可以用:
% showmount -e foobar Exports list on foobar: /usr 10.10.10.0 /a 10.10.10.0 % cd /host/foobar/usr
如同在前面例子中所看到的, showmount 显示了导出的 /usr。 当进入 /host/foobar/usr 这个目录时, amd 将尝试解析主机名 foobar 并自动地挂接需要的文件系统导出。
amd 可以通过启动脚本来启动, 方法是在 /etc/rc.conf 中加入:
amd_enable="YES"
除此之外, 还可以给 amd 通过 amd_flags 选项来传递额外的参数。 默认情况下, amd_flags 为:
amd_flags="-a /.amd_mnt -l syslog /host /etc/amd.map /net /etc/amd.map"
/etc/amd.map 文件定义了挂接导出文件系统时所使用的默认选项。 /etc/amd.conf 文件, 则定义了更多关于 amd 的高级功能选项。
请参考 amd(8) 和 amd.conf(5) 联机手册, 以了解进一步的情况。
某些特定的 ISA PC 系统上的以太网适配器上有一些限制, 这些限制可能会导致严重的网络问题, 特别是与 NFS 配合使用时。 这些问题并非 FreeBSD 所特有的, 但 FreeBSD 系统会受到这些问题的影响。
这样的问题, 几乎总是在当 (FreeBSD) PC 系统与高性能的工作站, 例如 Silicon Graphics, Inc., 和 Sun Microsystems, Inc. 的工作站联网时发生。 NFS 挂接能够正常工作, 而且一些操作也可能成功, 但服务器会很快变得对客户机不太理会, 虽然对其他客户机的请求仍然能够正常处理。 这种情况通常发生在客户端, 无论它是一个 FreeBSD 系统或是终端。 在许多系统上, 一旦发生了这样的问题, 通常没办法正常地关闭客户机。 唯一的办法通常是让终端复位, 因为这一 NFS 状况没有办法被解决。
尽管 “正确的” 解决办法, 是为 FreeBSD 系统配备一块高性能的、 适用的以太网适配器, 然而也有办法绕过问题并得到相对满意的结果。 如果 FreeBSD 系统是 服务器, 则在客户机挂接时, 应该指定 -w=1024。 如果 FreeBSD 系统是 客户机, 则应加入 -r=1024 参数。 这些选项可以通过在对应的 fstab 的第四个字段加入, 以便让客户机能够自动地挂接, 或者通过 mount(8) 的 -o 参数在手工挂接时指定。
还需要注意的是另一个问题, 有时会被误认为是和上面一样的问题。 这个问题多见于 NFS 服务器和客户机在不同的网络上时。 如果是这种情况, 一定要 确定 您的路由器确实把必需的 UDP 信息路由到了目的地, 否则您将什么也做不了。
下面的例子中, fastws 是主机 (接口) 的名字, 它是一台高性能的终端, 而 freebox 是另一台主机 (接口) 的名字, 它是一个使用较低性能的以太网适配器的 FreeBSD 系统。 同时, /sharedfs 将被导出成为 NFS 文件系统 (参见 exports(5)), 而 /project 将是客户机上挂接这一导出文件系统的挂接点。 所有的应用场景中, 请注意附加选项, 例如 hard 或 soft 以及 bg 可能是您的应用所需要的。
关于 FreeBSD 系统 (freebox) 作为客户机的示范 /etc/fstab 文件, 见于 freebox 之上:
fastws:/sharedfs /project nfs rw,-r=1024 0 0
在 freebox 上手工挂接:
# mount -t nfs -o -r=1024 fastws:/sharedfs /project
以 FreeBSD 系统作为服务器的例子, 是 fastws 上的 /etc/fstab:
freebox:/sharedfs /project nfs rw,-w=1024 0 0
在 fastws 上手工挂接的命令是:
# mount -t nfs -o -w=1024 freebox:/sharedfs /project
几乎所有的 16-位 以太网控制器, 都能够在没有上述读写尺寸限制的情况下正常工作。
对于那些关心到底是什么问题的人, 下面是失败如何发生的解释, 同时这也说明了为什么这是一个无法恢复的问题。 典型情况下, NFS 会使用一个 “块” 为单位进行操作, 其尺寸是 8 K (虽然它可能会将操作分成更小尺寸的分片)。 由于最大的以太网包尺寸大约是 1500 字节, 因此 NFS “块” 会分成多个以太网包, 虽然在更高层的代码看来它仍然是一个完整的单元, 并在接收方重新组装, 作为一个整体来 确认。 高性能的工作站, 可以将构成 NFS 单元的包迅速发出, 其节奏会快到标准允许的最大限度。 在容量较小的卡上, 后来的包会冲掉同一单元内的较早的包, 因而整个单元无法被重建或确认。 其结果是, 工作站将超时并重试, 但仍然是完整的 8 K 单元, 这一过程将无休止地重复下去。
如果将单元尺寸限制在以太网包尺寸之下, 我们就能够确保每一个以太网包都能够被独立地接收和确认, 从而避免了上面的死锁情形。
溢出在高性能工作站将数据库投向 PC 系统时仍会发生, 但在更好的网卡上, 能够保证这类溢出不会在每一个 NFS “单元” 上都发生。 当出现溢出时, 被影响的单元被重传, 因而此时有很大的机会它将被正确接收、 重组, 并确认。
NIS, 表示网络信息服务 (Network Information Services), 最初由 Sun Microsystems 开发, 用于 UNIX (最初是 SunOS) 系统的集中管理。 目前, 它基本上已经成为了业界标准; 所有主流的类 UNIX 系统 (Solaris, HP-UX, AIX®, Linux, NetBSD, OpenBSD, FreeBSD, 等等) 都支持 NIS。
NIS 也就是人们所熟知的黄页(Yellow Pages), 但由于商标的问题, Sun 将其改名为现在的名字。 旧的术语 (以及 yp), 仍然经常可以看到, 并被广泛使用。
这是一个基于 RPC 的客户机/服务器系统, 它允许在一个 NIS 域中的一组机器共享一系列配置文件。 这样, 系统管理员就可以配置只包含最基本配置数据的 NIS 客户机系统, 并在单点上增加、 删除或修改配置数据。
尽管实现的内部细节截然不同, 这和 Windows NT® 域系统非常类似, 以至于可以将两者的基本功能相互类比。
有一系列术语和重要的用户进程将在您在 FreeBSD 上实现 NIS 时用到, 无论是在创建 NIS 服务器, 或作为 NIS 客户机:
| 术语 | 说明 |
|---|---|
| NIS 域名 | NIS 主服务器和所有其客户机 (包括从服务器) 会使用同一 NIS 域名。 和 Windows NT 域名类似, NIS 域名与 DNS 无关。 |
| rpcbind | 必须运行这个程序, 才能够启用 RPC (远程过程调用, NIS 用到的一种网络协议)。 如果没有运行 rpcbind, 则没有办法运行 NIS 服务器, 或作为 NIS 客户机 (对于 FreeBSD 4.X, portmap 完成 rpcbind 的功能)。 |
| ypbind | “绑定(bind)” NIS 客户机到它的 NIS 服务器上。 这样, 它将从系统中获取 NIS 域名, 并使用 RPC 连接到服务器上。 ypbind 是 NIS 环境中, 客户机-服务器通讯的核心; 如果客户机上的 ypbind 死掉的话, 它将无法访问 NIS 服务器。 |
| ypserv | 只应在 NIS 服务器上运行它; 这是 NIS 的服务器进程。 如果 ypserv(8) 死掉的话, 则服务器将不再具有响应 NIS 请求的能力 (此时, 如果有从服务器的话, 则会接管操作)。 有一些 NIS 的实现 (但不是 FreeBSD 的这个) 的客户机上, 如果之前用过一个服务器, 而那台服务器死掉的话, 并不尝试重新连接到另一个服务器。 通常, 发生这种情况时, 唯一的办法就是重新启动服务器进程 (或者, 甚至重新启动服务器) 或客户机上的 ypbind 进程。 |
| rpc.yppasswdd | 另一个只应在 NIS 主服务器上运行的进程; 这是一个服务程序, 其作用是允许 NIS 客户机改变它们的 NIS 口令。 如果没有运行这个服务, 用户将必须登录到 NIS 主服务器上, 并在那里修改口令。 |
在 NIS 环境中, 有三种类型的主机: 主服务器, 从服务器, 以及客户机。 服务器的作用是充当主机配置信息的中央数据库。 主服务器上保存着这些信息的权威副本, 而从服务器则是保存这些信息的冗余副本。 客户机依赖于服务器向它们提供这些信息。
许多文件的信息可以通过这种方式来共享。 通常情况下, master.passwd、 group, 以及 hosts 是通过 NIS 分发的。 无论什么时候, 如果客户机上的某个进程请求这些本应在本地的文件中的资料的时候, 它都会向所绑定的 NIS 服务器发出请求, 而不使用本地的版本。
一台 NIS 主服务器。 这台服务器, 和 Windows NT 域控制器类似, 会维护所有 NIS 客户机所使用的文件。 passwd, group, 以及许多其他 NIS 客户机所使用的文件, 都被存放到主服务器上。
Note: 可以将一台 NIS 主服务器用在多个 NIS 域中。 然而, 本书不打算对这种配置进行介绍, 因为这种配置, 通常只出现在小规模的 NIS 环境中。
NIS 从服务器。 这一概念, 与 Windows NT 的备份域控制器类似。 NIS 从服务器, 用于维护 NIS 主服务器的数据文件副本。 NIS 从服务器提供了一种冗余, 这在许多重要的环境中是必需的。 此外, 它也帮助减轻了主服务器的负荷: NIS 客户机总是挂接到最先响应它们的 NIS 服务器上, 而这也包括来自从服务器的响应。
NIS 客户机。 NIS 客户机, 和多数 Windows NT 工作站类似, 通过 NIS 服务器 (或对于 Windows NT 工作站, 则是 Windows NT 域控制器) 来完成登录时的身份验证过程。
这一节将通过实例介绍如何配置 NIS 环境。
Note: 这一节假定您正运行的是 FreeBSD 3.3 或更高版本。 这里给出的方法 或许 可以在 FreeBSD 3.0 以上的其他版本上使用, 但不保证。
假定您正在管理大学中的一个小型实验室。 在这个实验室中, 有 15 台 FreeBSD 机器, 目前尚没有集中的管理点; 每一台机器上有自己的 /etc/passwd 和 /etc/master.passwd。 这些文件通过人工干预的方法来保持与其他机器上版本的同步; 目前, 如果您在实验室中增加一个用户, 将不得不在所有 15 台机器上手工执行 adduser 命令。 毋庸置疑, 这一现状必须改变, 因此您决定将整个实验室转为使用 NIS, 并使用两台机器作为服务器。
因此, 实验室的配置应该是这样的:
| 机器名 | IP 地址 | 机器的角色 |
|---|---|---|
| ellington | 10.0.0.2 | NIS 主服务器 |
| coltrane | 10.0.0.3 | NIS 从服务器 |
| basie | 10.0.0.4 | 教员工作站 |
| bird | 10.0.0.5 | 客户机 |
| cli[1-11] | 10.0.0.[6-17] | 其他客户机 |
如果您是首次配置 NIS, 仔细思考如何进行规划就十分重要。 无论您的网络的大小如何, 都必须进行几个决策。
这可能不是您过去使用的 “域名(domainname)”. 它的规范的叫法, 应该是 “NIS 域名”。 当客户机广播对此信息的请求时, 它会将 NIS 域的名字作为请求的一部分发出。 这样, 统一网络上的多个服务器, 就能够知道谁应该回应请求。 您可以把 NIS 域名想象成以某种方式相关的一组主机的名字。
一些机构会选择使用它们的 Internet 域名来作为 NIS 域名。 并不推荐这样做, 因为在调试网络问题时, 这可能会导致不必要的困扰。 NIS 域名应该是在您网络上唯一的, 并且有助于了解它所描述的到底是哪一组机器。 例如对于 Acme 公司的美工部门, 可以考虑使用 “acme-art” 这样的 NIS 域名。 在这个例子中, 您使用的域名是 test-domain。
然而, 某些操作系统 (最著名的是 SunOS) 会使用其 NIS 域名作为 Internet 域名。 如果您的网络上存在包含这类限制的机器, 就 必须 使用 Internet 域名来作为您的 NIS 域名。
选择 NIS 服务器时, 需要时刻牢记一些东西。 NIS 的一个不太好的特性就是其客户机对于服务器的依赖程度。 如果客户机无法与其 NIS 域的服务器联系, 则这台机器通常会陷于不可用的状态。 缺少用户和组信息, 会使绝大多数系统进入短暂的冻结状态。 基于这样的考虑, 您需要选择一台不经常重新启动, 或用于开发的机器来承担其责任。 如果您的网络不太忙, 也可以使用运行着其他服务的机器来安放 NIS 服务, 只是需要注意, 一旦 NIS 服务器不可用, 则 所有 的 NIS 客户机都会受到影响。
所有的 NIS 信息的正规版本, 都被保存在一台单独的称作 NIS 主服务器的机器上。 用于保存这些信息的数据库, 称为 NIS 映射(map)。 在 FreeBSD 中, 这些映射被保存在 /var/yp/[domainname] 里, 其中 [domainname] 是提供服务的 NIS 域的名字。 一台 NIS 服务器, 可以同时支持多个域, 因此可以建立很多这样的目录, 所支撑一个域对应一个。 每一个域都会有一组独立的映射。
NIS 主和从服务器, 通过 ypserv 服务程序来处理所有的 NIS 请求。 ypserv 有责任接收来自 NIS 客户机的请求, 翻译请求的域, 并将名字映射为相关的数据库文件的路径, 然后将来自数据库的数据传回客户机。
配置主 NIS 服务器相对而言十分的简单, 而其具体步骤则取决于您的需要。 FreeBSD 提供了一步到位的 NIS 支持。 您需要做的全部事情, 只是在 /etc/rc.conf 中加入一些配置, 其他工作会由 FreeBSD 完成。
nisdomainname="test-domain"这一行将在网络启动 (例如重新启动) 时, 把 NIS 域名配置为 test-domain。
nis_server_enable="YES"这将要求 FreeBSD 在网络子系统启动之后立即启动 NIS 服务进程。
nis_yppasswdd_enable="YES"这将启用 rpc.yppasswdd 服务程序, 如前面提到的, 它允许用户在客户机上修改自己的 NIS 口令。
Note: 随 NIS 配置的不同, 可能还需要增加其他一些项目。 请参见 关于 NIS 服务器同时充当 NIS 客户机 这一节, 以了解进一步的情况。
现在, 所需要做的最后的工作是以超级用户身份执行 /etc/netstart 命令。 这将依据 /etc/rc.conf 为您配置好所有的东西。
NIS 映射 是一些数据库文件, 它们位于 /var/yp 目录中。 这些文件基本上都是根据 NIS 主服务器的 /etc 目录自动生成的, 唯一的例外是: /etc/master.passwd 文件。 一般来说, 您会有非常充分的理由不将 root 以及其他管理帐号的口令发到所有 NIS 域上的服务器上。 因此, 在开始初始化 NIS 映射之前, 我们应该:
# cp /etc/master.passwd /var/yp/master.passwd # cd /var/yp # vi master.passwd
这里, 删除掉和系统有关的帐号对应的项 (bin、 tty、 kmem、 games, 等等), 以及其他不希望被扩散到 NIS 客户机的帐号 (例如 root 和任何其他 UID 0 (超级用户) 的帐号)。
Note: 确认 /var/yp/master.passwd 这个文件是同组,其他 以及其他用户不可读的 (模式 600)! 如果需要的话, 用 chmod 命令来改它。
完成这些工作之后, 就可以初始化 NIS 映射了! FreeBSD 提供了一个名为 ypinit 的脚本来帮助您完成这项工作 (详细信息, 请见其联机手册)。 请注意, 这个脚本在绝大多数 UNIX 操作系统上都可以找到, 但并不是所有操作系统的都提供。 在 Digital UNIX/Compaq Tru64 UNIX 上它的名字是 ypsetup。 由于我们正在生成的是 NIS 主服务器的映射, 因此应该使用 ypinit 的 -m 参数。 如果已经完成了上述步骤, 要生成 NIS 映射, 只需执行:
ellington# ypinit -m test-domain Server Type: MASTER Domain: test-domain Creating an YP server will require that you answer a few questions. Questions will all be asked at the beginning of the procedure. Do you want this procedure to quit on non-fatal errors? [y/n: n] n Ok, please remember to go back and redo manually whatever fails. If you don't, something might not work. At this point, we have to construct a list of this domains YP servers. rod.darktech.org is already known as master server. Please continue to add any slave servers, one per line. When you are done with the list, type a <control D>. master server : ellington next host to add: coltrane next host to add: ^D The current list of NIS servers looks like this: ellington coltrane Is this correct? [y/n: y] y [..output from map generation..] NIS Map update completed. ellington has been setup as an YP master server without any errors.
ypinit 应该会根据 /var/yp/Makefile.dist 来创建 /var/yp/Makefile 文件。 创建完之后, 这个文件会假定您正在操作只有 FreeBSD 及其德单服务器 NIS 环境。 由于 test-domain 还有一个从服务器, 您必须编辑 /var/yp/Makefile:
ellington# vi /var/yp/Makefile
应该能够看到这样一行, 其内容是
NOPUSH = "True"
(如果还没有注释掉的话)。
配置 NIS 从服务器, 甚至比配置主服务器还要简单。 登录到从服务器上, 并按照前面的方法, 编辑 /etc/rc.conf 文件。 唯一的区别是, 在运行 ypinit 时需要使用 -s 参数。 这里的 -s 选项, 同时要求提供 NIS 主服务器的名字, 因此我们的命令行应该是:
coltrane# ypinit -s ellington test-domain Server Type: SLAVE Domain: test-domain Master: ellington Creating an YP server will require that you answer a few questions. Questions will all be asked at the beginning of the procedure. Do you want this procedure to quit on non-fatal errors? [y/n: n] n Ok, please remember to go back and redo manually whatever fails. If you don't, something might not work. There will be no further questions. The remainder of the procedure should take a few minutes, to copy the databases from ellington. Transferring netgroup... ypxfr: Exiting: Map successfully transferred Transferring netgroup.byuser... ypxfr: Exiting: Map successfully transferred Transferring netgroup.byhost... ypxfr: Exiting: Map successfully transferred Transferring master.passwd.byuid... ypxfr: Exiting: Map successfully transferred Transferring passwd.byuid... ypxfr: Exiting: Map successfully transferred Transferring passwd.byname... ypxfr: Exiting: Map successfully transferred Transferring group.bygid... ypxfr: Exiting: Map successfully transferred Transferring group.byname... ypxfr: Exiting: Map successfully transferred Transferring services.byname... ypxfr: Exiting: Map successfully transferred Transferring rpc.bynumber... ypxfr: Exiting: Map successfully transferred Transferring rpc.byname... ypxfr: Exiting: Map successfully transferred Transferring protocols.byname... ypxfr: Exiting: Map successfully transferred Transferring master.passwd.byname... ypxfr: Exiting: Map successfully transferred Transferring networks.byname... ypxfr: Exiting: Map successfully transferred Transferring networks.byaddr... ypxfr: Exiting: Map successfully transferred Transferring netid.byname... ypxfr: Exiting: Map successfully transferred Transferring hosts.byaddr... ypxfr: Exiting: Map successfully transferred Transferring protocols.bynumber... ypxfr: Exiting: Map successfully transferred Transferring ypservers... ypxfr: Exiting: Map successfully transferred Transferring hosts.byname... ypxfr: Exiting: Map successfully transferred coltrane has been setup as an YP slave server without any errors. Don't forget to update map ypservers on ellington.
现在应该会有一个叫做 /var/yp/test-domain 的目录。 在这个目录中, 应该保存 NIS 主服务器上的映射的副本。 接下来需要确定这些文件都及时地同步更新了。 在从服务器上, 下面的 /etc/crontab 项将帮助您确保这一点:
20 * * * * root /usr/libexec/ypxfr passwd.byname 21 * * * * root /usr/libexec/ypxfr passwd.byuid
这两行将强制从服务器将映射与主服务器同步。 由于主服务器会场时确保所有其 NIS 映射的变动都与从服务器知会, 因此这些项并不是绝对必需的, 尽管如此, 强制更新能够保证这些对依赖于服务器的系统至关重要的口令信息及时地同步, 同时, 在繁忙的网络上, 有时也会出现映射同步更新不完全的情况。
现在, 在从服务器上执行 /etc/netstart, 就可以启动 NIS 服务了。
NIS 客户机会通过 ypbind 服务程序来与特定的 NIS 服务器建立一种称作绑定的联系。 ypbind 会检查系统的默认域 (这是通过 domainname 命令来设置的), 并开始在本地网络上广播 RPC 请求。 这些请求会指定 ypbind 尝试绑定的域名。 如果已经配置了服务器, 并且这些服务器接到了广播, 它将回应 ypbind, 后者则记录服务器的地址。 如果有多个可用的服务器 (例如一个主服务器, 加上多个从服务器), ypbind 将使用第一个响应的地址。 从这一时刻开始, 客户机会把所有的 NIS 请求直接发给那个服务器。 ypbind 偶尔会 “ping” 服务器以确认其仍然在正常运行。 如果在合理的时间内没有得到响应, 则 ypbind 会把域标记为未绑定, 并再次发起广播, 以期找到另一台服务器。
配置一台 FreeBSD 机器作为 NIS 客户机是非常简单的。
编辑 /etc/rc.conf 文件, 并在其中加上下面几行, 以设置 NIS 域名, 并在网络启动时启动 ypbind:
nisdomainname="test-domain" nis_client_enable="YES"
要从 NIS 服务器导入所有的口令项, 需要从您的 /etc/master.passwd 文件中删除所有用户, 并使用 vipw 在这个文件的最后一行加入:
+:::::::::
Note: 这一行将让 NFS 服务器的口令映射中的帐号能够登录。 也有很多修改这一行来配置 NIS 客户机的办法。 请参见稍后的 netgroups 小节 以了解进一步的情况。 要了解更多信息, 可以参阅 O'Reilly 的 Managing NFS and NIS 这本书。
Note: 需要至少保留一个本地帐号 (也就是不通过 NIS 导入) 在您的 /etc/master.passwd 文件中, 而这个帐号应该是 wheel 组的成员。 如果 NIS 发生不测, 这个帐号可以用来远程登录, 成为 root, 并修正问题。
要从 NIS 服务器上导入组信息, 需要在 /etc/group 文件末尾加入:
+:*::
完成这些步骤之后, 就应该可以通过运行 ypcat passwd 来看到 NIS 服务器的口令映射了。
基本上, 任何远程用户都可以发起一个 RPC 到 ypserv(8) 并获得您的 NIS 映射的内容, 如果远程用户了解您的域名的话。 要避免这类未经授权的访问, ypserv(8) 支持一个称为 “securenets” 的特性, 用以将访问限制在一组特定的机器上。 在启动过程中, ypserv(8) 会尝试从 /var/yp/securenets 中加载 securenet 信息。
Note: 这个路径随 -p 参数改变。 这个文件包含了一些项, 每一项中包含了一个网络标识和子网掩码, 中间用空格分开。 以 “#” 开头的行会被认为是注释。 示范的 securenets 文件如下所示:
# allow connections from local host -- mandatory 127.0.0.1 255.255.255.255 # allow connections from any host # on the 192.168.128.0 network 192.168.128.0 255.255.255.0 # allow connections from any host # between 10.0.0.0 to 10.0.15.255 # this includes the machines in the testlab 10.0.0.0 255.255.240.0
如果 ypserv(8) 接到了来自匹配上述任一规则的地址的请求, 则它会正常处理请求。 反之, 则请求将被忽略, 并记录一条警告信息。 如果 /var/yp/securenets 文件不存在, 则 ypserv 会允许来自任意主机的请求。
ypserv 程序也支持 Wietse Venema 的 TCP Wrapper 软件包。 这样, 管理员就能够使用 TCP Wrapper 的配置文件来代替 /var/yp/securenets 完成访问控制。
Note: 尽管这两种访问控制机制都能够提供某种程度的安全, 但是, 和特权端口检查一样, 它们无法避免 “IP 伪造” 攻击。 您的防火墙应该阻止所有与 NIS 有关的访问。
使用 /var/yp/securenets 的服务器, 可能会无法为某些使用陈旧的 TCP/IP 实现的 NIS 客户机服务。 这些实现可能会在广播时, 将主机位都设置为 0, 或在计算广播地址时忽略子网掩码。 尽管这些问题可以通过修改客户机的配置来解决, 其他一些问题也可能导致不得不淘汰那些客户机系统, 或者不使用 /var/yp/securenets。
在使用陈旧的 TCP/IP 实现的系统上, 使用 /var/yp/securenets 是一个非常糟糕的做法, 因为这将导致您的网络上的 NIS 丧失大部分功能。
使用 TCP Wrapper 软件包, 会导致您的 NIS 服务器的响应延迟增加。 而增加的延迟, 则可能会导致客户端程序超时, 特别是在繁忙的网络或者很慢的 NIS 服务器上。 如果您的某个客户机因此而产生一些异常, 则应将这些客户机变为 NIS 从服务器, 并强制其绑定自己。
在我们的实验室中, basie 这台机器, 是一台教员专用的工作站。 我们不希望将这台机器拿出 NIS 域, 而主 NIS 服务器上的 passwd 文件, 则同时包含了教员和学生的帐号。 这时应该怎么做?
有一种办法来禁止特定的用户登录机器, 即使他们身处 NIS 数据库之中。 要完成这一工作, 只需要在客户机的 /etc/master.passwd 文件中加入一些 -username 这样的项, 其中, username 是希望禁止登录的用户名。 一般推荐使用 vipw 来完成这个工作, 因为 vipw 会对您在 /etc/master.passwd 文件上所作的修改进行合法性检查, 并在编辑结束时重新构建口令数据库。 例如, 如果希望禁止用户 bill 登录 basie, 我们应该:
basie# vipw [在末尾加入 -bill, 并退出] vipw: rebuilding the database... vipw: done basie# cat /etc/master.passwd root:[password]:0:0::0:0:The super-user:/root:/bin/csh toor:[password]:0:0::0:0:The other super-user:/root:/bin/sh daemon:*:1:1::0:0:Owner of many system processes:/root:/sbin/nologin operator:*:2:5::0:0:System &:/:/sbin/nologin bin:*:3:7::0:0:Binaries Commands and Source,,,:/:/sbin/nologin tty:*:4:65533::0:0:Tty Sandbox:/:/sbin/nologin kmem:*:5:65533::0:0:KMem Sandbox:/:/sbin/nologin games:*:7:13::0:0:Games pseudo-user:/usr/games:/sbin/nologin news:*:8:8::0:0:News Subsystem:/:/sbin/nologin man:*:9:9::0:0:Mister Man Pages:/usr/share/man:/sbin/nologin bind:*:53:53::0:0:Bind Sandbox:/:/sbin/nologin uucp:*:66:66::0:0:UUCP pseudo-user:/var/spool/uucppublic:/usr/libexec/uucp/uucico xten:*:67:67::0:0:X-10 daemon:/usr/local/xten:/sbin/nologin pop:*:68:6::0:0:Post Office Owner:/nonexistent:/sbin/nologin nobody:*:65534:65534::0:0:Unprivileged user:/nonexistent:/sbin/nologin +::::::::: -bill basie#
前一节介绍的方法, 在您需要为非常少的用户和/或机器进行特殊的规则配置时还算凑合。 在更大的网络上, 您 一定会 忘记禁止某些用户登录到敏感的机器上, 或者, 甚至必须单独地修改每一台机器的配置, 因而丢掉了 NIS 最重要的优越性: 集中式 管理。
NIS 开发人员为这个问题提供的解决方案, 被称作 netgroups。 它们的作用和语义, 基本上可以等同于 UNIX 文件系统上使用的组。 主要的区别是它们没有数字化的 ID, 以及可以在 netgroup 中同时包含用户和其他 netgroup。
Netgroups 被设计用来处理大的、 复杂的包含数百用户和机器的网络。 一方面, 在您不得不处理这类情形时, 这是一个很有用的东西。 而另一方面, 它的复杂性又使得通过非常简单的例子很难解释 netgroup 到底是什么。 这一节的其余部分的例子将展示这个问题。
假设您在实验室中成功地部署 NIS 引起了上司的兴趣。 您接下来的任务是将 NIS 域扩展, 以覆盖校园中的一些其他的机器。 下面两个表哥中包括了新用户和新机器, 及其简要说明。
| 用户名 | 说明 |
|---|---|
| alpha, beta | IT 部门的普通雇员 |
| charlie, delta | IT 部门的学徒 |
| echo, foxtrott, golf, ... | 普通雇员 |
| able, baker, ... | 目前的实习生 |
| 机器名 | 说明 |
|---|---|
| war, death, famine, pollution | 最重要的服务器。 只有 IT 部门的雇员才允许登录这些机器。 |
| pride, greed, envy, wrath, lust, sloth | 不太重要的服务器, 所有 IT 部门的成员, 都可以登录这些机器。 |
| one, two, three, four, ... | 普通工作站。 只有 真正的 雇员才允许登录这些机器。 |
| trashcan | 一台不包含关键数据的旧机器。 即使是实习生, 也允许登录它。 |
如果您尝试通过一个一个地阻止用户来实现这些限制, 就需要在每一个系统的 passwd 文件中, 为每一个不允许登录该系统的用户添加对应的 -user 行。 如果忘记了任何一个, 就可能会造成问题。 在进行初始配置时, 正确地配置也许不是什么问题, 但随着日复一日地添加新用户, 总有一天 您会忘记为新用户添加某个行。 毕竟, Murphy 是一个乐观的人。
使用 netgroups 来处理这一状况可以带来许多好处。 不需要单独地处理每一个用户; 您可以赋予用户一个或多个 netgroups 身份, 并允许或禁止某一个 netgroup 的所有成员登录。 如果添加了新的机器, 只需要定义 netgroup 的登录限制。 如果增加了新用户, 也只需要将用户加入一个或多个 netgroup。 这些变化是相互独立的: 不再需要 “对每一个用户和机器执行 ……”。 如果您的 NIS 配置经过了谨慎的规划, 就只需要修改一个中央的配置文件, 就能够允许或禁止访问某台机器的权限了。
第一步是初始化 NIS 映射 netgroup。 FreeBSD 的 ypinit(8) 默认情况下并不创建这个映射, 但它的 NIS 实现能够在创建这个映射之后立即对其提供支持。 要创建空映射, 简单地输入
ellington# vi /var/yp/netgroup
并开始增加内容。 在我们的例子中, 至少需要四个 nergruop: IT 雇员, IT 学徒, 普通雇员和实习生。
IT_EMP (,alpha,test-domain) (,beta,test-domain)
IT_APP (,charlie,test-domain) (,delta,test-domain)
USERS (,echo,test-domain) (,foxtrott,test-domain) \
(,golf,test-domain)
INTERNS (,able,test-domain) (,baker,test-domain)
IT_EMP, IT_APP 等等, 是 netgroup 的名字。 每一个括号中的组中, 都有一些用户帐号。 组中的三个字段是:
在哪些机器上能够使用这些项。 如果不指定主机名, 则项在所有机器上都有效。 如果指定了主机, 则很容易造成混淆。
属于这个 netgroup 的帐号。
帐号的 NIS 域。 您可以从其他 NIS 域中把帐号导入到您的 netgroup 中, 如果您管理多个 NIS 域的话。
每一个字段都可以包括通配符。 参见 netgroup(5) 了解更多细节。
Note: Netgroup 的名字一般来说不应超过 8 个字符, 特别是当您的 NIS 域中有机器打算运行其它操作系统的时候。 名字是区分大小写的; 使用大写字母作为 netgroup 的名字, 能够让您更容易地区分用户、 机器和 netgroup 的名字。
某些 NIS 客户程序 (FreeBSD 以外的那些) 可能无法处理含有大量项的 netgroup。 例如, 某些早期版本的 SunOS 会在 netgroup 中包含多于 15 个 项 时出现问题。 要绕过这个问题, 可以创建多个 子netgroup,每一个中包含少于 15 个用户, 以及一个包含所有 子netgroup 的真正的 netgroup:
BIGGRP1 (,joe1,domain) (,joe2,domain) (,joe3,domain) [...] BIGGRP2 (,joe16,domain) (,joe17,domain) [...] BIGGRP3 (,joe31,domain) (,joe32,domain) BIGGROUP BIGGRP1 BIGGRP2 BIGGRP3如果需要超过 225 个用户, 可以继续重复上面的过程。
激活并分发新的 NIS 映射非常简单:
ellington# cd /var/yp ellington# make
这个操作会生成三个 NIS 映射, 即 netgroup、 netgroup.byhost 和 netgroup.byuser。 用 ypcat(1) 可以检查这些 NIS 映射是否可用了:
ellington% ypcat -k netgroup ellington% ypcat -k netgroup.byhost ellington% ypcat -k netgroup.byuser
第一个命令的输出, 应该与 /var/yp/netgroup 的内容相近。 第二个命令, 如果没有指定本机专有的 netgroup, 则应该没有输出。 第三个命令, 则用于显示某个用户对应的 netgroup 列表。
客户机的设置也很简单。 要配置服务器 war, 只需进入 vipw(8) 并把
+:::::::::
改为
+@IT_EMP:::::::::
现在, 只有 netgroup IT_EMP 中定义的用户会被导入到 war 的口令数据库中, 因此只有这些用户能够登录。
不过, 这个限制也会作用于 shell 的 ~, 以及所有在用户名和数字用户 ID 之间实施转换的函数的功能。 换言之, cd ~user 将不会正常工作, 而 ls -l 也将显示数字的 ID 而不是用户名, 并且 find . -user joe -print 将失败, 并给出 “No such user” 的错误信息。 要修正这个问题, 您需要导入所有的用户项, 而 不允许他们登录服务器。
这可以通过在 /etc/master.passwd 加入另一行来完成。 这行的内容是:
+:::::::::/sbin/nologin, 意思是 “导入所有的项, 但导入项的 shell 则替换为 /sbin/nologin”。 通过在 /etc/master.passwd 中增加默认值, 可以替换掉 passwd 中的任意字段。
Warning务必确认 +:::::::::/sbin/nologin 这一行出现在 +@IT_EMP::::::::: 之后。 否则, 所有从 NIS 导入的用户帐号将以 /sbin/nologin 作为登录 shell。
完成上面的修改之后, 在 IT 部门有了新员工时, 只需修改一个 NIS 映射就足够了。 您也可以用类似的方法, 在不太重要的服务器上, 把先前本地版本的 /etc/master.passwd 中的 +::::::::: 改为:
+@IT_EMP::::::::: +@IT_APP::::::::: +:::::::::/sbin/nologin
相关的用于普通工作站的配置则应是:
+@IT_EMP::::::::: +@USERS::::::::: +:::::::::/sbin/nologin
一切平安无事, 直到数周后, 有一天策略发生了变化: IT 部门也开始招收实习生了。 IT 实习生允许使用普通的终端, 以及不太重要的服务器; 而 IT 学徒, 则可以登录主服务器。 您增加了新的 netgroup IT_INTERN, 以及新的 IT IT 实习生到这个 netgroup 并开始修改每一台机器上的配置…… 老话说得好: “牵一发, 动全身”。
NIS 通过 netgroup 来建立 netgroup 的能力, 正可以避免这样的情形。 一种可能的方法是建立基于角色的 netgroup。 例如, 您可以创建称为 BIGSRV 的 netgroup, 用于定义最重要的服务器上的登录限制, 以及另一个成为 SMALLSRV 的 netgroup, 用以定义次重要的服务器, 以及第三个, 用于普通工作站的 netgroup USERBOX。 这三个 netgroup 中的每一个, 都包含了允许登录到这些机器上的所有 netgroup。 您的 NIS 映射中的新项如下所示:
BIGSRV IT_EMP IT_APP SMALLSRV IT_EMP IT_APP ITINTERN USERBOX IT_EMP ITINTERN USERS
这种定义登录限制的方法, 在您能够将机器分组并加以限制的时候可以工作的相当好。 不行的是, 这是种例外, 而非规律。 多数时候, 需要按机器去定义登录限制。
与机器相关的 netgroup 定义, 是处理上述策略改动的另一种可能的方法。 此时, 每台机器的 /etc/master.passwd 中, 都包含两个 “+” 开头的行。 第一个用于添加允许登录的 netgroup 帐号, 而第二个则用于增加其它帐号, 并把 shell 设置为 /sbin/nologin。 使用 “全大写” 的机器名作为 netgroup 名是个好主意。 换言之, 这些行应该类似于:
+@BOXNAME::::::::: +:::::::::/sbin/nologin
一旦在所有机器上都完成了这样的修改, 就再也不需要修改本地的 /etc/master.passwd 了。 所有未来的修改都可以在 NIS 映射中进行。 这里是一个例子, 其中展示了在这一应用情景中所需要的 netgroup 映射, 以及其它一些常用的技巧:
# Define groups of users first IT_EMP (,alpha,test-domain) (,beta,test-domain) IT_APP (,charlie,test-domain) (,delta,test-domain) DEPT1 (,echo,test-domain) (,foxtrott,test-domain) DEPT2 (,golf,test-domain) (,hotel,test-domain) DEPT3 (,india,test-domain) (,juliet,test-domain) ITINTERN (,kilo,test-domain) (,lima,test-domain) D_INTERNS (,able,test-domain) (,baker,test-domain) # # Now, define some groups based on roles USERS DEPT1 DEPT2 DEPT3 BIGSRV IT_EMP IT_APP SMALLSRV IT_EMP IT_APP ITINTERN USERBOX IT_EMP ITINTERN USERS # # And a groups for a special tasks # Allow echo and golf to access our anti-virus-machine SECURITY IT_EMP (,echo,test-domain) (,golf,test-domain) # # machine-based netgroups # Our main servers WAR BIGSRV FAMINE BIGSRV # User india needs access to this server POLLUTION BIGSRV (,india,test-domain) # # This one is really important and needs more access restrictions DEATH IT_EMP # # The anti-virus-machine mentioned above ONE SECURITY # # Restrict a machine to a single user TWO (,hotel,test-domain) # [...more groups to follow]
如果您正使用某种数据库来管理帐号, 应该可以使用您的数据库的报告工具来创建映射的第一部分。 这样, 新用户就自动地可以访问这些机器了。
最后的提醒: 使用基于机器的 netgroup 并不是普适的。 如果正在为学生实验室部署数十台甚至上百台同样的机器, 您应该使用基于角色的 netgroup, 而不是基于机器的 netgroup, 以便把 NIS 映射的尺寸保持在一个合理的范围内。
这里是一些其它在使用 NIS 环境时需要注意的地方。
每次需要在实验室中增加新用户时, 必须 只 在 NIS 服务器上加入用户, 而且 一定要记得重建 NIS 映射。 如果您忘记了这样做, 新用户将无法登录除 NIS 主服务器之外的任何其它机器。 例如, 如果要在实验室增加新用户 jsmith, 我们需要:
# pw useradd jsmith # cd /var/yp # make test-domain
也可以运行 adduser jsmith 而不是 pw useradd jsmith.
将管理用的帐号排除在 NIS 映射之外。 一般来说, 您不希望这些管理帐号和口令被扩散到那些包含不应使用它们的用户的机器上。
确保 NIS 主和从服务器的安全, 并尽可能减少其停机时间。 如果有人攻入或简单地关闭这些机器, 则整个实验室的任也就无法登录了。
这是集中式管理系统中最薄弱的环节。 如果没有保护好 NIS 服务器, 您就有大批愤怒的用户需要对付了!
FreeBSD 的 ypserv 提供了某些为 NIS v1 客户提供服务的支持能力。 FreeBSD 的 NIS 实现, 只使用 NIS v2 协议, 但其它实现可能会包含 v1 协议, 以提供对旧系统的向下兼容能力。 随这些系统提供的 ypbind 服务将首先尝试绑定 NIS v1 服务器, 即使它们并不真的需要它 (有些甚至可能会一直广播搜索请求, 即使已经从某台 v2 服务器得到了回应也是如此)。 注意, 尽管支持一般的客户机调用, 这个版本的 ypserv 并不能处理 v1 的映射传送请求; 因而, 它就不能与较早的支持 v1 协议的 NIS 服务器配合使用, 无论是作为主服务器还是从服务器。 幸运的是, 现今应该已经没有仍然在用的这样的服务器了。
在多服务器域的环境中, 如果服务器同时作为 NIS 客户, 在运行 ypserv 时要特别小心。 一般来说, 强制服务器绑定自己要比允许它们广播绑定请求要好, 因为这种情况下它们可能会相互绑定。 某些怪异的故障, 很可能是由于某一台服务器停机, 而其它服务器都依赖其服务所导致的。 最终, 所有的客户机都会超时并绑定到其它服务器, 但这个延迟可能会相当可观, 而且恢复之后仍然存在再次发生此类问题的隐患。
您可以强制一台机器绑定到特定的服务器, 这是通过 ypbind 的 -S 参数来完成的。 如果不希望每次启动 NIS 服务器时都手工完成这项工作, 可以在 /etc/rc.conf 中加入:
nis_client_enable="YES" # run client stuff as well nis_client_flags="-S NIS domain,server"
参见 ypbind(8) 以了解更多情况。
在实现 NIS 时, 口令格式的兼容性问题是一种最为常见的问题。 假如您的 NIS 服务器使用 DES 加密口令, 则它只能支持使用 DES 的客户机。 例如, 如果您的网络上有 Solaris NIS 客户机, 则几乎肯定需要使用 DES 加密口令。
要检查您的服务器和客户机使用的口令格式, 需要查看 /etc/login.conf。 如果主机被配置为使用 DES 加密的口令, 则 default class 将包含类似这样的项:
default:\
:passwd_format=des:\
:copyright=/etc/COPYRIGHT:\
[Further entries elided]
其他一些可能的 passwd_format 包括 blf 和 md5 (分别对应于 Blowfish 和 MD5 加密口令)。
如果修改了 /etc/login.conf, 就必须重建登录性能数据库, 这是通过以 root 身份运行下面的程序来完成的:
# cap_mkdb /etc/login.conf
Note: 已经在 /etc/master.passwd 中的口令的格式不会被更新, 直到用户在登录性能数据库重建 之后 首次修改口令为止。
接下来, 为了确保所有的口令都按照您选择的格式加密了, 还需要检查 /etc/auth.conf 中 crypt_default 给出的优先选择的口令格式。 要完成此工作, 将您选择的格式放到列表的第一项。 例如, 当使用 DES 加密的口令时, 对应项应为:
crypt_default = des blf md5
在每一台基于 FreeBSD 的 NIS 服务器和客户机上完成上述工作之后, 就可以肯定您的网络上它们都在使用同样的口令格式了。 如果在 NIS 客户机上做身份验证时发生问题, 这也是第一个可能出现问题的地方。 注意: 如果您希望在混合的网络上部署 NIS 服务器, 可能就需要在所有系统上都使用 DES, 因为这是所有系统都能够支持的最低限度的公共标准。
DHCP, 动态主机配置协议, 是一种让系统得以连接到网络上, 并获取所需要的配置参数手段。 FreeBSD 使用的是 ISC (Internet Software Consortium) 的 DHCP 实现, 因此这里所有和具体实现紧密相关的内容, 都是以 ISC 软件包为准的。
这一节描述了 ISC DHCP 系统的客户端和服务器端的组件。 客户端程序, dhclient, 是随 FreeBSD 作为它的一部分提供的; 而服务器部分, 则可以通过 net/isc-dhcp3-server port 得到。 dhclient(8)、 dhcp-options(5)、 以及 dhclient.conf(5) 联机手册, 加上下面所介绍的参考文献, 都是非常有用的资源。
当 DHCP 客户程序, dhclient 在客户机上运行时, 它会开始广播请求配置信息的消息。 默认情况下, 这些请求是在 UDP 端口 68 上。 服务器通过 UDP 67 给出响应, 向客户机提供一个 IP 地址, 以及其他有关的配置参数, 例如子网掩码、 路由器, 以及 DNS 服务器。 所有这些信息都会以 DHCP “lease” 的形式给出, 并且只在一段特定的时间内有效 (这是由 DHCP 服务器的维护者配置的)。 这样, 那些已经断开网络的客户机使用的陈旧的 IP 地址就能被自动地回收了。
DHCP 客户程序可以从服务器端获取大量的信息。 关于能获得的信息的详细列表, 请参考 dhcp-options(5)。
FreeBSD 完全地集成了 ISC DHCP 客户端, dhclient。 DHCP 客户端被安装程序直接支持, 并且是基本系统的一部分。 这使得您不再需要去了解那些已经运行了 DHCP 服务器的网络的具体配置参数。 从 FreeBSD 3.2 开始, 每一个发行版中均包含 dhclient。
sysinstall 能够支持 DHCP。 在 sysinstall 中配置网络接口时, 它询问的第二个问题便是: “Do you want to try DHCP configuration of the interface? (您是否希望在此接口上尝试 DHCP 配置?)”。 如果做肯定的回答, 则将运行 dhclient, 一旦成功, 则将自动地填写网络配置信息。
要在系统启动时使用 DHCP, 您必须做两件事:
您的内核中, 必须包含 bpf 设备。 如果需要这样做, 需要将 device bpf (对于 FreeBSD 4.X 来说, 则应该是 pseudo-device bpf) 添加到内核的编译配置文件中, 并重新编译内核。 要了解关于编译内核的进一步信息, 请参见 第 8 章。
bpf 设备已经是 FreeBSD 发行版中默认的 GENERIC 内核的一部分了,, 因此如果您没有对内核进行定制, 则不用创建一份新的内核配置文件, DHCP 就能工作了。
Note: 对于那些安全意识很强的人来说, 您应该知道 bpf 也是包侦听工具能够正确工作的条件之一 (当然, 它们还需要以 root 身份运行才行)。 bpf 是 使用 DHCP 所必须的, 但如果您对安全非常敏感, 则很可能会有理由不把 bpf 加入到您的内核配置中, 直到您真的需要使用 DHCP 为止。
编辑您的 /etc/rc.conf 并加入下面的设置:
ifconfig_fxp0="DHCP"
Note: 务必将 fxp0 替换为您希望自动配置的网络接口的名字, 您可以在 第 11.8 节 找到更进一步的介绍。
如果您希望使用另一位置的 dhclient, 或者需要给 dhclient 传递其他参数, 还可以添加下面的配置 (根据需要进行修改):
dhcp_program="/sbin/dhclient" dhcp_flags=""
DHCP 服务器, dhcpd, 是作为 net/isc-dhcp3-server port 的一部分提供的。 这个 port 包括了 ISC DHCP 服务器及其文档。
/etc/dhclient.conf
dhclient 需要一个配置文件, /etc/dhclient.conf。 一般说来, 这个文件中只包括注释, 而默认值基本上都是合理的。 这个配置文件在 dhclient.conf(5) 联机手册中进行了进一步的阐述。
/sbin/dhclient
dhclient 是一个静态连编的, 它被安装到 /sbin 中。 dhclient(8) 联机手册给出了关于 dhclient 的进一步细节。
/sbin/dhclient-script
dhclient-script 是一个 FreeBSD 专用的 DHCP 客户端配置脚本。 在 dhclient-script(8) 中对它进行了描述, 但一般来说, 用户不需要对其进行任何修改, 就能够让一切正常运转了。
/var/db/dhclient.leases
DHCP 客户程序会维护一个数据库来保存有效的 lease, 它们被以日志的形式保存到这个文件中。 dhclient.leases(5) 给出了更为细致的介绍。
这一章提供了关于如何在 FreeBSD 系统上使用 ISC (Internet 软件协会) 的 DHCP 实现套件来架设 DHCP 服务器的信息。
DHCP 套件中的服务器部分并没有作为 FreeBSD 的一部分来提供, 因此您需要安装 net/isc-dhcp3-server port 才能提供这个服务。 请参见 第 4 章 以了解关于如何使用 Ports Collection 的进一步详情。
为了在您的 FreeBSD 系统上进行配置以便作为 DHCP 服务器来使用, 需要把 bpf(4) 设备编译进内核。 要完成这项工作, 需要将 device bpf (如果使用 FreeBSD 4.X 的话, 则写作 pseudo-device bpf) 加入到您的内核配置文件中, 并重新联编内核。 要得到关于如何联编内核的进一步信息, 请参见 第 8 章。
bpf 设备是 FreeBSD 所附带的 GENERIC 内核中已经联入的组件, 因此您并不需要为了让 DHCP 正常工作而特地定制内核。
Note: 如果您有较强的安全意识, 应该注意 bpf 同时也是让听包程序能够正确工作的设备 (尽管这类程序仍然需要以特权用户身份运行)。 bpf 是 使用 DHCP 所必需的, 但如果您对安全非常敏感, 您可能会不希望将 bpf 放进内核, 直到您真的认为 DHCP 是必需的为止。
接下来要做的是编辑示范的 dhcpd.conf, 它由 net/isc-dhcp3-server port 安装。 默认情况下, 它的名字应该是 /usr/local/etc/dhcpd.conf.sample, 在开始修改之前, 您需要把它复制为 /usr/local/etc/dhcpd.conf。
dhcpd.conf 包含了一系列关于子网和主机的定义, 下面的例子可以帮助您理解它:
option domain-name "example.com";option domain-name-servers 192.168.4.100;
option subnet-mask 255.255.255.0;
default-lease-time 3600;
max-lease-time 86400;
ddns-update-style none;
subnet 192.168.4.0 netmask 255.255.255.0 { range 192.168.4.129 192.168.4.254;
option routers 192.168.4.1;
} host mailhost { hardware ethernet 02:03:04:05:06:07;
fixed-address mailhost.example.com;
}










一旦您撰写完 dhcpd.conf, 就可以用下面的命令来启动服务:
# /usr/local/etc/rc.d/isc-dhcpd.sh start
如果未来您需要修改服务器的配置, 请务必牢记发送 SIGHUP 信号给 dhcpd 并 不会 导致配置文件的重新加载, 而这在其他服务程序中则是比较普遍的约定。 您需要发送 SIGTERM 信号来停止进程, 然后使用上面的命令来重新启动它。
/usr/local/sbin/dhcpd
dhcpd 是静态连接的, 并安装到 /usr/local/sbin 中。 随 port 安装的 dhcpd(8) 联机手册提供了关于 dhcpd 更为详尽的信息。
/usr/local/etc/dhcpd.conf
dhcpd 需要配置文件, 即 /usr/local/etc/dhcpd.conf 才能够向客户机提供服务。 这个文件需要包括应提供给客户机的所有信息, 以及关于服务器运行的其他信息。 此配置文件的详细描述可以在随 port 安装的 dhcpd.conf(5) 联机手册上找到。
/var/db/dhcpd.leases
DHCP 服务器会维护一个它签发的租用地址数据库, 并保存在这个文件中, 这个文件是以日志的形式保存的。 随 port 安装的 dhcpd.leases(5) 联机手册提供了更详细的描述。
/usr/local/sbin/dhcrelay
dhcrelay 在更为复杂的环境中, 可以用来支持使用 DHCP 服务器转发请求给另一个独立网络上的 DHCP 服务器。 如果您需要这个功能, 需要安装 net/isc-dhcp3-relay port。 dhcrelay(8) 联机手册提供了更为详尽的介绍。
FreeBSD 在默认情况下使用一个版本的 BIND (Berkeley Internet Name Domain), 这是目前最为流行的 DNS 协议实现。 DNS 是一种协议, 可以通过它将域名同 IP 地址相互对应。 例如, 查询 www.FreeBSD.org 将得到 FreeBSD Project 的 web 服务器的 IP 地址, 而查询 ftp.FreeBSD.org 则将得到响应的 FTP 机器的 IP 地址。 类似地, 也可以做相反的事情。 查询 IP 地址可以得到其主机名。 当然, 完成 DNS 查询并不需要在系统中运行域名服务器。
DNS 在 Internet 上通过一组略显复杂的权威根域名服务器来组织, 它的其余部分则由较小规模的域名服务器组成, 这些服务器提供少量的域名解析服务, 并对域名信息进行缓存。
这份文档介绍的是 BIND 8.x, 因为它是 FreeBSD 中使用的稳定版本。 FreeBSD 5.3 以及更高版本则包含了 BIND9 及其配置的说明可以在这一章的后一部分找到。 使用 FreeBSD 5.2 以及更早版本的用户, 可以通过 net/bind9 port 来安装 BIND9。
RFC1034 和 RFC1035 定义了 DNS 协议。
目前, BIND 由 Internet Software Consortium http://www.isc.org/ 维护。
要理解这份文档, 需要首先了解一些相关的 DNS 术语。
| 术语 | 定义 |
|---|---|
| 正向 DNS (Forward DNS) | 将域名映射到 IP 地址 |
| 原点 (Origin) | 表示特定域文件所在的域 |
| named, BIND, 域名服务器(name server) | 在 FreeBSD 中 BIND 域名服务器软件包的常见叫法 |
| 解析器 (Resolver) | 计算机用以向域名服务器查询域名信息的一个系统进程 |
| 反向 DNS (Reverse DNS) | 与正向 DNS 相对; 将 IP 地址映射为主机名 |
| 根域 | Internet 域层次的起点。 所有的域都在根域之下, 类似文件系统中, 文件都在根目录之下那样。 |
| 域 (Zone) | 独立的域, 子域, 或者由同一机构管理的 DNS 的一部分。 |
域的例子:
. 是根域。
org. 是一个根域下的域。
example.org. 是 org. 之下的域。
foo.example.org. 是 example.org. 域的子域。
1.2.3.in-addr.arpa 是用于表达 3.2.1.* IP 地址空间之下所有 IP 地址的域。
如您所见, 域名中最细节的部分在它的左边。 举例来说, example.org. 要比 org. 更小, 就像 org. 要比根域更小一样。 主机名的格局和文件系统类似: /dev 目录在根目录中, 等等。
域名服务器通常会有两种形式: 权威域名服务器, 以及缓存域名服务器。
下列情况需要有权威域名服务器:
想要向全世界提供 DNS 信息, 并对请求给出权威应答。
注册了类似 example.org 的域, 而需要将 IP 指定到其下的主机名上。
某个 IP 地址块需要反向 DNS 项 (IP 到主机名)。
需要备份服务器, 或常说的从 (slave) 服务器, 在主服务器出现问题或无法访问时来应答查询请求。
下列情况需要有缓存域名服务器:
本地的 DNS 服务器能够缓存, 并比直接向外界的域名服务器请求更快地得到应答。
减少所需的总体网络流量 (DNS 流量通常占全部 Internet 流量的 5% 或更多)。
当有人查询 www.FreeBSD.org 时,解析器通常会向上级 ISP 的域名服务器发出请求, 并获得回应。 如果有本地的缓存 DNS 服务器, 查询只有在第一次被缓存 DNS 服务器发到外部世界。 其他的查询不会发向局域网外, 因为它们已经有在本地的缓存了。
在 FreeBSD 中, BIND 服务程序被称为 named, 其原因显而易见。
域文件通常被放在 /etc/namedb 目录中, 它们包含域名服务器所提供的 DNS 域的信息。
由于 BIND 会在默认情况下安装, 因此配置它相对而言很简单。
要确保 named 服务程序在引导时被自动启动, 把下面的行加到 /etc/rc.conf 中:
named_enable="YES"
要手工启动服务 (在完成配置之后):
# ndc start
一定要:
# cd /etc/namedb # sh make-localhost
以便创建正确的本地 DNS 反向解析域文件 /etc/namedb/localhost.rev。
// $FreeBSD$
//
// Refer to the named(8) manual page for details. If you are ever going
// to setup a primary server, make sure you've understood the hairy
// details of how DNS is working. Even with simple mistakes, you can
// break connectivity for affected parties, or cause huge amount of
// useless Internet traffic.
options {
directory "/etc/namedb";
// In addition to the "forwarders" clause, you can force your name
// server to never initiate queries of its own, but always ask its
// forwarders only, by enabling the following line:
//
// forward only;
// If you've got a DNS server around at your upstream provider, enter
// its IP address here, and enable the line below. This will make you
// benefit from its cache, thus reduce overall DNS traffic in the
Internet.
/*
forwarders {
127.0.0.1;
};
*/
如注视所说, 要从上级的缓存中受益, 可以在此处启用 forwarders。 在一般情况下, 域名服务器会逐级地查询 Internet 来找到特定的域名服务器, 直到得到答案为止。 启用这个将让它首先查询上级域名服务器 (或另外提供的域名服务器), 从而从它们的缓存中得到结果。 如果上级域名服务器的负载很重, 在更快的域名服务器上启用它将有助于改善服务品质。
Warning127.0.0.1 不会 正常工作。 一定要把地址改为您上级服务器的 IP 地址。
/*
* If there is a firewall between you and name servers you want
* to talk to, you might need to uncomment the query-source
* directive below. Previous versions of BIND always asked
* questions using port 53, but BIND 8.1 uses an unprivileged
* port by default.
*/
// query-source address * port 53;
/*
* If running in a sandbox, you may have to specify a different
* location for the dumpfile.
*/
// dump-file "s/named_dump.db";
};
// Note: the following will be supported in a future release.
/*
host { any; } {
topology {
127.0.0.0/8;
};
};
*/
// Setting up secondaries is way easier and the rough picture for this
// is explained below.
//
// If you enable a local name server, don't forget to enter 127.0.0.1
// into your /etc/resolv.conf so this server will be queried first.
// Also, make sure to enable it in /etc/rc.conf.
zone "." {
type hint;
file "named.root";
};
zone "0.0.127.IN-ADDR.ARPA" {
type master;
file "localhost.rev";
};
zone
"0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.IP6.INT" {
type master;
file "localhost.rev";
};
// NB: Do not use the IP addresses below, they are faked, and only
// serve demonstration/documentation purposes!
//
// Example secondary config entries. It can be convenient to become
// a secondary at least for the zone where your own domain is in. Ask
// your network administrator for the IP address of the responsible
// primary.
//
// Never forget to include the reverse lookup (IN-ADDR.ARPA) zone!
// (This is the first bytes of the respective IP address, in reverse
// order, with ".IN-ADDR.ARPA" appended.)
//
// Before starting to setup a primary zone, better make sure you fully
// understand how DNS and BIND works, however. There are sometimes
// unobvious pitfalls. Setting up a secondary is comparably simpler.
//
// NB: Don't blindly enable the examples below. :-) Use actual names
// and addresses instead.
//
// NOTE!!! FreeBSD runs BIND in a sandbox (see named_flags in rc.conf).
// The directory containing the secondary zones must be write accessible
// to BIND. The following sequence is suggested:
//
// mkdir /etc/namedb/s
// chown bind:bind /etc/namedb/s
// chmod 750 /etc/namedb/s
For more information on running BIND in a sandbox, see Running named in a sandbox.
/*
zone "example.com" {
type slave;
file "s/example.com.bak";
masters {
192.168.1.1;
};
};
zone "0.168.192.in-addr.arpa" {
type slave;
file "s/0.168.192.in-addr.arpa.bak";
masters {
192.168.1.1;
};
};
*/
在 named.conf 中, 这是一些转发用的从域以及反向域的例子。
对于每一个新域, 域对应的项必须加到 named.conf 中。
例如, 最简单的用于 example.org 域的条目类似下面的样子:
zone "example.org" {
type master;
file "example.org";
};
这是一个主域, 它由 type 语句标识出来, 而信息则在 /etc/namedb/example.org 域文件中, 这是由 file 语句指定的。
zone "example.org" {
type slave;
file "example.org";
};
在从域的例子中, 域的信息从该域的某个主服务器传送过来, 并保存在指定的文件中。 如果主服务器死掉了或不可达, 从域名服务器将使用这些传过来的域信息, 从而完成应答。
以下是一个用于 example.org 域的主域文件 (保存为 /etc/namedb/example.org):
$TTL 3600
example.org. IN SOA ns1.example.org. admin.example.org. (
5 ; Serial
10800 ; Refresh
3600 ; Retry
604800 ; Expire
86400 ) ; Minimum TTL
; DNS Servers
@ IN NS ns1.example.org.
@ IN NS ns2.example.org.
; Machine Names
localhost IN A 127.0.0.1
ns1 IN A 3.2.1.2
ns2 IN A 3.2.1.3
mail IN A 3.2.1.10
@ IN A 3.2.1.30
; Aliases
www IN CNAME @
; MX Record
@ IN MX 10 mail.example.org.
请注意以 “.” 结尾的主机名是全称主机名, 而结尾没有 “.” 的则是相对于原点的主机名。 例如, www 将被转换为 www.原点. 在这个假想的域信息文件中, 我们的原点是 example.org., 因此 www 将被当作 www.example.org.。
域信息文件的格式如下:
记录名 IN 记录类型 值
最常用的 DNS 记录:
域权威开始
权威域名服务器
主机地址
别名对应的正规名称
邮件传递服务器
域名指针 (用于反向 DNS)
example.org. IN SOA ns1.example.org. admin.example.org. (
5 ; Serial
10800 ; Refresh after 3 hours
3600 ; Retry after 1 hour
604800 ; Expire after 1 week
86400 ) ; Minimum TTL of 1 day
域名, 同时也是这个域信息文件的原点。
该域的主/权威域名服务器。
此域的负责人的电子邮件地址, 其中 “@” 被换掉了。 (<admin@example.org> 对应 admin.example.org)
文件的序号。 每次修改域文件时都必须增加这个数字。 现今, 许多管理员会考虑使用 yyyymmddrr 这样的格式来表示序号。 2001041002 通常表示上次修改于 04/10/2001, 而后面的 02 则表示在那天的第几次修改。 序号非常重要, 它用于通知从域服务器更新数据。
@ IN NS ns1.example.org.
这是一个 NS 项。 每个准备提供权威应答的服务器都必须有一个对应项。 这里的 @ 表示 example.org.。 @ 会被理解为原点。
localhost IN A 127.0.0.1 ns1 IN A 3.2.1.2 ns2 IN A 3.2.1.3 mail IN A 3.2.1.10 @ IN A 3.2.1.30
A 记录代表及其名。 如上面看到的, ns1.example.org 将解析为 3.2.1.2。 在此再次使用了原点符, @, 它表示 example.org 应解析为 3.2.1.30。
www IN CNAME @
正规名记录通常用于对某台机器的别名给出对应的正式名字。 在这个例子中, www 是名字为原点, 或者说 example.org (3.2.1.30) 那台机器的别名。 CNAMEs 可以用来提供主机的别名, 或将同一名字在多台机器上作轮询。
@ IN MX 10 mail.example.org.
MX 记录表示哪个邮件服务器负责接收发到这个域的邮件。 mail.example.org 是邮件服务器的主机名, 而 10 则是它的优先级。
可以有多台邮件服务器, 其优先级分别是 3, 2, 1。 向 example.org 进行投递的邮件服务器首先会尝试优先级最高 (数字最小) 的 MX, 然后是较低优先级的, 等等, 直到成功地投递了邮件为止。
对于 in-addr.arpa 域名信息文件 (反向 DNS), 使用了同样的格式, 只是 PTR 项代替了 A 或 CNAME 的位置。
$TTL 3600
1.2.3.in-addr.arpa. IN SOA ns1.example.org. admin.example.org. (
5 ; Serial
10800 ; Refresh
3600 ; Retry
604800 ; Expire
3600 ) ; Minimum
@ IN NS ns1.example.org.
@ IN NS ns2.example.org.
2 IN PTR ns1.example.org.
3 IN PTR ns2.example.org.
10 IN PTR mail.example.org.
30 IN PTR example.org.
这个文件给出了上述假想域中 IP 地址到域名的映射关系。
缓存域名服务器是对任何域都不提供权威解析的域名服务器。 它自己简单地完成查询, 并记住这些查询以备后续使用。 要建立这样的服务器, 只需像平时一样配置一个域名服务器, 而不配置域就可以了。
要更安全地运行 named(8), 应该以非特权用户来运行它, 并配置为 chroot(8) 到一个沙盒目录中。 这使得 named 服务无法访问任何沙盒外面的东西。 假如 named 被攻破, 这将减少它所能带来的破坏。 默认情况下, FreeBSD 提供了名为 bind 的用户和组来完成这样的目的。
Note: 许多人建议不这样做, 而 named 配置为 chroot, 您应该在一个 jail(8) 中运行 named。 这一节并不涵盖这种情形。
由于 named 没有办法访问沙盒外面的任何东西 (例如共享库, 日志 socket 等等), 您需要做许多事情来让 named 正常工作。 下面的清单假定沙盒是 /etc/namedb 而您没有事先改过这个目录中的内容。 以 root 的身份完成下列步骤:
创建 named 需要访问的所有目录:
# cd /etc/namedb # mkdir -p bin dev etc var/tmp var/run master slave # chown bind:bind slave var/*![]()
重新组织基本的域和配置文件:
# cp /etc/localtime etc# mv named.conf etc && ln -sf etc/named.conf # mv named.root master # sh make-localhost && mv localhost.rev localhost-v6.rev master # cat > master/named.localhost $ORIGIN localhost. $TTL 6h @ IN SOA localhost. postmaster.localhost. ( 1 ; serial 3600 ; refresh 1800 ; retry 604800 ; expiration 3600 ) ; minimum IN NS localhost. IN A 127.0.0.1 ^D
如果您在运行 FreeBSD 在 4.9-RELEASE 之前的版本, 需要联编一个静态连接的 named-xfer, 并将其复制到沙盒中:
# cd /usr/src/lib/libisc # make cleandir && make cleandir && make depend && make all # cd /usr/src/lib/libbind # make cleandir && make cleandir && make depend && make all # cd /usr/src/libexec/named-xfer # make cleandir && make cleandir && make depend && make NOSHARED=yes all # cp named-xfer /etc/namedb/bin && chmod 555 /etc/namedb/bin/named-xfer![]()
在把静态连接的 named-xfer 装好之后需要清理一下, 以免将过时的库或程序留在您的源代码副本中:
# cd /usr/src/lib/libisc # make cleandir # cd /usr/src/lib/libbind # make cleandir # cd /usr/src/libexec/named-xfer # make cleandir
如果您运行 FreeBSD 的 4.9-RELEASE 或更新的版本, 则默认情况下 /usr/libexec 中的 named-xfer 副本已经是静态连接的了。 您可以简单地把它用 cp(1) 复制到沙盒中。
做一个 named 能够看到并写入的 dev/null:
# cd /etc/namedb/dev && mknod null c 2 2 # chmod 666 null
将 /var/run/ndc 符号链接到 /etc/namedb/var/run/ndc:
# ln -sf /etc/namedb/var/run/ndc /var/run/ndc
Note: 这个非常简单的措施有效地避免了您每次都必须指定 -c 参数来启动 ndc(8) 的麻烦。 由于 /var/run 中的内容会在启动时被删除, 把上述命令加入到 root 的 crontab(5) 中, 并指定 @reboot 选项会很有用。
配置 syslogd(8) 来创建一个 named 可以写的 log socket。 要完成它, 需要将 -l /etc/namedb/dev/log 加到 /etc/rc.conf 的 syslogd_flags 变量中。
启动 named 并让它自动地把自己 chroot 到沙盒中, 方法是把下面的内容加到 /etc/rc.conf:
named_enable="YES" named_flags="-u bind -g bind -t /etc/namedb /etc/named.conf"
Note: 请注意配置文件 /etc/named.conf 是以 相对于沙盒 的完整路径来指定的, 例如上面那一行, 文件所在的目录实际上是 /etc/namedb/etc/named.conf。
下一步是编辑 /etc/namedb/etc/named.conf 让 named 直到需要加载哪些域, 以及它们在磁盘上的位置。 您可以用注释掉的那个例子 (没有明确地注释掉的哪些和不在沙盒中运行 DNS 服务器时的配置无异):
options {
directory "/";
named-xfer "/bin/named-xfer";
version ""; // Don't reveal BIND version
query-source address * port 53;
};
// ndc control socket
controls {
unix "/var/run/ndc" perm 0600 owner 0 group 0;
};
// Zones follow:
zone "localhost" IN {
type master;
file "master/named.localhost";
allow-transfer { localhost; };
notify no;
};
zone "0.0.127.in-addr.arpa" IN {
type master;
file "master/localhost.rev";
allow-transfer { localhost; };
notify no;
};
zone "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.int" {
type master;
file "master/localhost-v6.rev";
allow-transfer { localhost; };
notify no;
};
zone "." IN {
type hint;
file "master/named.root";
};
zone "private.example.net" in {
type master;
file "master/private.example.net.db";
allow-transfer { 192.168.10.0/24; };
};
zone "10.168.192.in-addr.arpa" in {
type slave;
masters { 192.168.10.2; };
file "slave/192.168.10.db";
};




完成这些配置之后, 您可以重新启动服务器, 或重启 syslogd(8) 服务并启动 named(8), 以确认 syslogd_flags 和 named_flags 的新值生效了。 现在您应该已经在沙盒中运行 named 了!
尽管 BIND 是最为常用的 DNS 实现, 但它总是有一些安全问题。 时常会有人发现一些可能的甚至可以利用的安全漏洞。
经常阅读 CERT 的安全公告并订阅 FreeBSD 安全问题通知邮件列表 会是一个帮助您时刻了解最新 Internet 和 FreeBSD 安全问题的好习惯。
Tip: 如果出现了问题, 将代码升级到最新版本并重新联编 named 不会带来任何麻烦。
随着 FreeBSD 5.3 版本的发布, BIND9 DNS 服务软件正式成为了发行版本的一部分。 新的安全特性,文件布局, 以及自动的 chroot(8) 配置也加入进来。 这一节分成两部分, 第一部分讨论了新增特性以及如何配置它们; 后一部分则讲述了升级过程, 帮助用户迁移到 FreeBSD 5.3。 从现在起, 服务器将被简单地写作 named(8) 或 BIND。 这一节跳过了前一节所介绍的那些术语, 以及一些理论上的讨论; 因此, 建议您在继续阅读之前首先看一看前面的章节。
目前, named 的配置文件存放在 /var/named/etc/namedb/, 在使用之前需要进行一些修改。 这也是进行绝大多数相关配置的地方。
要配置主域, 应首先进入 /var/named/etc/namedb/ 并执行下面的命令:
# sh make-localhost
如果一切正常, 则在 master 目录中将出现两个新文件。 它们的名字应该是用于本地域名解析的 localhost.rev, 以及用于 IPv6 配置的 localhost-v6.rev。 作为默认的配置文件, 关于它们的配置已经在 named.conf 文件中定义了。
可以通过配置从域来提供额外的域或子域的解析。 多数情况下, master/localhost.rev 文件可以直接复制到 slave 目录中并进行修改。 此后, 这些文件应该加入到 named.conf, 类似下面的 example.com 配置:
zone "example.com" {
type slave;
file "slave/example.com";
masters {
10.0.0.1;
};
};
zone "0.168.192.in-addr.arpa" {
type slave;
file "slave/0.168.192.in-addr.arpa";
masters {
10.0.0.1;
};
};
请注意在这个例子中, 主服务器的 IP 地址指明了我们要从哪里把域传过来; 那台服务器本身并不一定要作为对外的 DNS 服务器来用。
为了让 named 服务能够在系统启动时自动加载, 需要把下面的选项加到 rc.conf 文件中:
named_enable="YES"
尽管还有其他的一些可用选项, 这是运行域名服务器所需要的最小配置。 请参考 rc.conf(5) 联机手册了解更多的选项。 如果不需要继续在 rc.conf 文件中进行其他配置了, 就可以通过下面的命令行来启动 named:
# /etc/rc.d/named start
尽管 FreeBSD 会自动地将 named 放到一个 chroot(8) 环境中, 您仍然可以采取一些更为严密的措施来防止潜在的针对 DNS 服务的攻击。
查询访问控制表可以用来限制对于域的查询。 这些配置通过在 acl 语句中列出的 IP 地址来发挥作用。 要允许一个子网查询 example.org 中的主机, 可以做下面的定义:
acl "example.com" {
192.168.0.0/24;
};
zone "example.com" {
type slave;
file "slave/example.com";
masters {
10.0.0.1;
};
allow-query { example.com; };
};
zone "0.168.192.in-addr.arpa" {
type slave;
file "slave/0.168.192.in-addr.arpa";
masters {
10.0.0.1;
};
allow-query { example.com; };
};
允许查询 DNS 服务的版本, 可能会给攻击者敞开方便之门。 心存恶意的用户能够利用这一信息找到存在已知漏洞的服务器, 并利用这些漏洞来实施攻击。
Warning配置伪造的版本号并不能阻止服务器被使用已知的攻击手段进行攻击。 唯一能够确保安全的办法是将服务器升级到没有已知问题的版本。
伪造的版本号可以通过 named.conf 的 options 小节来指定:
options {
directory "/etc/namedb";
pid-file "/var/run/named/pid";
dump-file "/var/dump/named_dump.db";
statistics-file "/var/stats/named.stats";
version "None of your business";
};
FreeBSD 被用于运行许多全球最为繁忙的 web 站点。 大多数 Internet 上的 web 服务器, 都使用 Apache HTTP 服务器。 Apache 软件包可以在您的 FreeBSD 安装盘上找到。 如果没有在首次安装时附带安装 Apache, 则可以通过 www/apache13 或 www/apache2 port 来安装。
一旦成功地安装了 Apache, 就必须对其进行配置。
Note: 这一节介绍了 1.3.X 版本的 Apache HTTP 服务器 的配置, 因为它是随 FreeBSD 一同使用的最多的版本。 Apache 2.X 引入了很多新技术, 但在此并不讨论。 要了解关于 Apache 2.X 的更多资料, 请参见 http://httpd.apache.org/。
主要的 Apache HTTP Server 配置文件, 在 FreeBSD 上会安装为 /usr/local/etc/apache/httpd.conf。 这是一个典型的 UNIX 文本配置文件, 它使用 # 作为注释符。 关于全部配置选项的详尽介绍超出了本书的范围, 这里将只介绍最常被修改的那些。
这指定了 Apache 安装的顶级目录。 执行文件被放到服务器根目录 (server root) 的 bin 和 sbin 子目录中, 而配置文件则位于 etc/apache。
这个地址是在服务器发生问题时应发送电子邮件的地址, 它会出现在服务器生成的页面上, 例如错误页面。
ServerName 允许您配置发送回客户端的主机名, 如果您的服务器被用户以别的名字访问 (例如, 使用 www 而不是主机本身的真实名字)。
DocumentRoot: 这个目录是您的文档所在的目录。 默认情况下, 所有的请求都会从这个位置去获取, 但也可以通过符号连接和别名指定其它的位置。
在修改配置之前备份 Apache 的配置文件永远是一个好习惯。 一旦对初始配置满意了, 就可以开始运行 Apache 了。
与许多其它网络服务不同, Apache 并不依赖 inetd 超级服务器来运行。 一般情况下会把它配置为一个独立的服务器, 以期在客户的 web 浏览器连入 HTTP 请求时, 能够获得更好的性能。 它提供了一个 shell 脚本来使启动、 停止和重新启动服务器变得尽可能地简单。 首次启动 Apache, 只需执行:
# /usr/local/sbin/apachectl start
可以在任何时候使用下面的命令来停止服务:
# /usr/local/sbin/apachectl stop
当由于某种原因修改了配置文件之后, 需要重启服务器:
# /usr/local/sbin/apachectl restart
要在重启 Apache 服务器时不中断当前的连接, 则应运行:
# /usr/local/sbin/apachectl graceful
更多的信息, 可以在 apachectl(8) 联机手册中找到。
要在系统启动时启动 Apache, 则应在 /etc/rc.conf 中加入:
apache_enable="YES"
如果您希望在系统引导时启动 Apache httpd 程序并指定其它一些选项, 则可以把下面的行加到 rc.conf:
apache_flags=""
现在 web 服务器就开始运行了, 您可以使用 web 浏览器打开 http://localhost/。 默认显示的 web 页面是 /usr/local/www/data/index.html。
Apache 支持两种不同类型的虚拟主机。 第一种方法是基于名字的虚拟主机。 基于名字的虚拟主机使用客户机发来的 HTTP/1.1 头来辨别主机名。 这使得不同的域得以共享同一个 IP 地址。
要配置 Apache 来使用基于名字的虚拟主机, 需要把类似下面的项加到您的 httpd.conf 中:
NameVirtualHost *
如果您的 web 服务器的名字是 www.domain.tld, 而您希望建立一个 www.someotherdomain.tld 的虚拟域, 则应在 httpd.conf 中加入:
<VirtualHost *> ServerName www.domain.tld DocumentRoot /www/domain.tld <VirtualHost> <VirtualHost *> ServerName www.someotherdomain.tld DocumentRoot /www/someotherdomain.tld </VirtualHost>
您需要把上面的地址和文档路径改为所使用的那些。
要了解关于虚拟主机的更多信息, 请参考官方的 Apache 文档, 这些文档可以在 http://httpd.apache.org/docs/vhosts/ 找到。
有许多不同的 Apache 模块, 它们可以在基本的服务器基础上提供许多附加的功能。 FreeBSD 的 Ports Collection 为安装 Apache 和常用的附加模块提供了非常方便的方法。
mod_ssl 这个模块使用 OpenSSL 库, 来提供通过 安全套接字层 (SSL v2/v3) 和 传输层安全 (TLS v1) 协议的强加密能力。 这个模块提供了从某一受信的证书签署机构申请签名证书所需的所有工具, 您可以藉此在 FreeBSD 上运行安全的 web 服务器。
如果您未曾安装 Apache, 也可以直接安装一份包含了 mod_ssl 的版本的 Apache 1.3.X, 其方法是通过 www/apache13-modssl port 来进行。 SSL 支持已经作为 Apache 2.X 的一部分提供, 您可以通过 www/apache2 port 来安装后者。
Apache/Perl 集成计划, 将 Perl 程序设计语言的强大功能, 与 Apache HTTP 服务器 紧密地结合到了一起。 通过 mod_perl 模块, 可以完全使用 Perl 来撰写 Apache 模块。 此外, 服务器中嵌入的持久性解释器, 消除了由于启动外部的解释器为 Perl 脚本的启动所造成的性能损失。
如果您还没有安装 Apache, 也可以通过 www/apache13-modperl port 来安装包含了 mod_perl 的 Apache 版本。
在过去的几年中, 更多的企业开始转向 Internet, 以期扩大它们的收入和影响。 这也使得交互式 web 内容的需求日益增长。 尽管某些公司, 例如 Microsoft, 在它们的商业产品中引入了一些解决方案, 但开放源代码团体也给出了自己的答案。 这其中, 使用的最为广泛的就是 PHP。
PHP, 也成为 “Hypertext Preprocessor”, 是一种通用的脚本语言, 并且特别适合于 Web 开发。 它能够很容易地嵌入到 HTML 之中, 其语法接近于 C、 Java、 以及 Perl, 以期让 web 开发人员能够迅速地写出动态生成的 web 页面。
要获得 Apache web 服务器的 PHP5 支持, 可以从安装 www/mod_php5 port 开始。
这样, 将安装并配置用于支持动态 web 应用所需要的模块。 请再次检查, 以确认在 /usr/local/etc/apache/httpd.conf 中添加了下面的配置:
LoadModule php5_module libexec/apache/libphp5.so
AddModule mod_php5.c
<IfModule mod_php5.c>
DirectoryIndex index.php index.html
</IfModule>
<IfModule mod_php5.c>
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
</IfModule>
准备停当, 简单地使用 apachectl 命令完成一次优雅的 (graceful) 服务重启:
# apachectl graceful
在 FreeBSD 中的 PHP 支持是极端模块化的。 如果需要安装某个扩展, 管理员只需安装相应的 port, 并像上面所建议的那样重新启动 Apache 就可以了。
例如, 要将对于 MySQL 数据库服务器的支持加入 PHP5, 只需简单地安装 databases/php5-mysql 并执行下面的命令:
# apachectl graceful
这样, 就启用了 PHP 的 MySQL 支持。
文件传输协议 (FTP) 为用户提供了一个简单的, 与 FTP 服务器交换文件的方法。 FreeBSD 系统中包含了 FTP 服务软件, ftpd。 这使得在 FreeBSD 上建立和管理 FTP 服务器变得非常简单。
最重要的配置步骤是决定允许哪些帐号访问 FTP 服务器。 一般的 FreeBSD 系统包含了一系列系统帐号分别用于执行不同的服务程序, 但未知的用户不应被允许登录并使用这些帐号。 /etc/ftpusers 文件中, 列出了不允许通过 FTP 访问的用户。 默认情况下, 这包含了前述的系统帐号, 但也可以在这里加入其它不应通过 FTP 访问的用户。
您可能会希望限制通过 FTP 登录的某些用户, 而不是完全阻止他们使用 FTP。 这可以通过 /etc/ftpchroot 文件来完成。 这一文件列出了希望对 FTP 访问进行限制的用户和组的表。 而在 ftpchroot(5) 联机手册中, 已经对此进行了详尽的介绍, 故而不再赘述。
如果您想要在服务器上启用匿名的 FTP 访问, 则必须建立一个名为 ftp 的 FreeBSD 用户。 这样, 用户就可以使用 ftp 或 anonymous 和任意的口令 (习惯上, 应该是以那个用户的邮件地址作为口令) 来登录和访问您的 FTP 服务器。 FTP 服务器将在匿名用户登录时调用 chroot(2), 以便将其访问限制在 ftp 用户的主目录中。
有两个文本文件可以用来指定显示在 FTP 客户程序中的欢迎文字。 /etc/ftpwelcome 文件中的内容将在用户连接上之后, 在登录提示之前显示。 在成功的登录之后, 将显示 /etc/ftpmotd 文件中的内容。 请注意后者是相对于登录环境的, 因此对于匿名用户而言, 将显示 ~ftp/etc/ftpmotd。
一旦正确地配置了 FTP 服务器, 就必须在 /etc/inetd.conf 中启用它。 这里需要做的全部工作就是将注释符 “#” 从已有的 ftpd 行之前去掉:
ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l
如 例 23-1 所介绍的那样, 修改这个文件之后, 需要向 inetd 发送 HangUP 信号。
现在可以通过输入下面的命令来登录您的 FTP 服务器了:
% ftp localhost
ftpd 服务程序使用 syslog(3) 来记录消息。 默认情况下, 系统日志将把和 FTP 相关的消息记录到 /var/log/xferlog 文件中。 FTP 日志的位置, 可以通过修改 /etc/syslog.conf 中如下所示的行来修改:
ftp.info /var/log/xferlog
一定要小心对待在匿名 FTP 服务器中可能遇到的潜在问题。 一般而言, 允许匿名用户上传文件应三思。 您可能发现自己的 FTP 站点成为了交易未经授权的商业软件的论坛, 或发生更糟糕的情况。 如果不需要匿名的 FTP 上传, 可以在文件上配置权限, 使得您能够在其它匿名用户能够下载这些文件之前复查它们。
Samba 是一个流行的开远软件包, 它提供了针对 Microsoft Windows 客户机的文件和打印服务。 这类客户机可以连接并使用 FreeBSD 系统上的文件空间, 就如同使用本地的磁盘一样, 或者像使用本地打印机一样使用 FreeBSD 上的打印机。
Samba 软件包可以在您的 FreeBSD 安装盘上找到。 如果您没有在初次安装 FreeBSD 时安装 Samba, 则可以通过 net/samba3 port 或 package 来安装。
默认的 Samba 配置文件会以 /usr/local/etc/smb.conf.default 的名字安装。 这个文件必须复制为 /usr/local/etc/smb.conf 并进行定制, 才能开始使用 Samba。
smb.conf 文件中包含了 Samba 的运行时配置信息, 例如对于打印机的定义, 以及希望共享给 Windows 客户机的 “共享文件系统”。 Samba 软件包包含了一个称为 swat 的 web 管理工具, 后者提供了配置 smb.conf 文件的简单方法。
Samba Web 管理工具 (SWAT) 是一个通过 inetd 运行的服务程序。 因此, 需要把 /etc/inetd.conf 中下面几行的注释去掉, 才能够使用 swat 来配置 Samba:
swat stream tcp nowait/400 root /usr/local/sbin/swat
如同 例 23-1 中介绍的那样, 修改配置文件之后, 需要向 inetd 发送 HangUP 信号。
一旦在 inetd.conf 中启用了 swat, 就可以用浏览器访问 connect to http://localhost:901 了。 您将首先使用系统的 root 帐号登录。
只要成功地登录进了 Samba 配置页面, 就可以浏览系统的文档, 或从 Globals(全局) 选项卡开始配置了。 Globals 小节对应于 [global] 小节中的变量, 前者位于 /usr/local/etc/smb.conf 中。
无论是使用 swat, 还是直接编辑 /usr/local/etc/smb.conf, 通常首先要配置的 Samba 选项都是:
NT 域名或工作组名, 其他计算机将通过这些名字来找到服务器。
这个选项用于设置 Samba 服务器的 NetBIOS 名字。 默认情况下, 这是所在主机的 DNS 名字的第一部分。
这个选项用于设置通过 net view 命令, 以及某些其他网络工具可以查看到的关于服务器的说明性文字。
在 /usr/local/etc/smb.conf 中的两个最重要的配置, 是选定的安全模型, 以及客户机上用户的口令存放后端。 下面的语句控制这些选项:
最常见的选项形式是 security = share 和 security = user。 如果您的客户机使用用户名, 并且这些用户名与您的 FreeBSD 机器一致, 一般应选择用户级 (user) 安全。 这是默认的安全策略, 它要求客户机首先登录, 然后才能访问共享的资源。
如果采用共享级 (share) 安全, 则客户机不需要用有效的用户名和口令登录服务器, 就能够连接共享的资源。 这是较早版本的 Samba 中的默认值。
Samba 提供了若干种不同的验证后端模型。 您可以通过 LDAP、 NIS+、 SQL 数据库, 或经过修改的口令文件, 来完成客户端的身份验证。 默认的验证模式是 smbpasswd, 这也是本章将介绍的全部内容。
假设您使用的是默认的 smbpasswd 后端, 则必须首先创建一个 /usr/local/private/smbpasswd 文件, 来允许 Samba 对客户进行身份验证。 如果您打算让所有的 UNIX 用户帐号都能够从 Windows 客户机上登录, 可以使用下面的命令:
# grep -v "^#" /etc/passwd | make_smbpasswd > /usr/local/private/smbpasswd # chmod 600 /usr/local/private/smbpasswd
请参见 Samba 的文档, 以了解关于配置选项的进一步信息。 按照前面给出的描述, 您应该已经可以启动 Samba 了。
要在系统引导时启动 Samba, 将下面的配置加入 /etc/rc.conf:
samba_enable="YES"
现在可以在任何时候通过下面的命令来启动 Samba 了:
# /usr/local/etc/rc.d/samba.sh start Starting SAMBA: removing stale tdbs : Starting nmbd. Starting smbd.
Samba 事实上包含了三个相互独立的服务程序。 您应该能够看到 nmbd 和 smbd 两个服务程序都是通过 samba.sh 脚本启动的。 如果在 smb.conf 中启用了 winbind 名字解析服务, 则应该可以看到 winbindd 服务被启动起来。
可以在任何时候通过下面的命令来停止运行 Samba:
# /usr/local/etc/rc.d/samba.sh stop
Samba 是一个复杂的软件包, 它提供了用于与 Microsoft Windows 网络进行集成的各式各样的功能。 要了解关于这里所介绍的基本安装以外的其它功能, 请访问 http://www.samba.org。
随着时间的推移, 计算机的时钟会倾向于漂移。 网络时间协议 (NTP) 是一种确保您的时钟保持准确的方法。
许多 Internet 服务依赖于, 或极大地受益于本地计算机时钟的准确性。 例如, web 服务器可能会接收到一个请求, 要求如果文件在某一时刻之后修改过才发送它。 在局域网环境中, 共享文件的计算机之间的时钟是否同步至关重要, 因为这样才能使时间戳保持一致。 类似 cron(8) 这样的程序, 也依赖于正确的系统时钟, 才能够准确地执行操作。
FreeBSD 附带了 ntpd(8) NTP 服务器, 它可以用于查询其它的 NTP 服务器, 并配置本地计算机的时钟, 或者为其它机器提供服务。
为了同步您的系统时钟, 需要首先找到至少一个 NTP 服务器以供使用。 网络管理员, 或 ISP 都可能会提供用于这样目的的 NTP 服务器--请查看他们的文档以了解是否是这样。 另外, 也有一个在线的 公开的 NTP 服务器列表, 您可以从中选一个较近的 NTP 服务器。 请确认您选择的服务器的访问策略, 如果需要的话, 申请一下所需的许可。
选择多个相互不连接的 NTP 服务器是一个好主意, 这样在某个服务器不可达, 或者时钟不可靠时就可以有别的选择。 这是因为, ntpd(8) 会智能地选择它收到的响应--它会更倾向于使用可靠的服务器。
如果只想在系统启动时同步时钟, 则可以使用 ntpdate(8)。 对于经常重新启动, 并且不需要经常同步的桌面系统来说这比较适合, 但绝大多数机器都应该运行 ntpd(8)。
在引导时使用 ntpdate(8) 来配合运行 ntpd(8) 也是一个好主意。 ntpd(8) 渐进地修正时钟, 而 ntpdate(8) 则直接设置时钟, 无论机器的当前时间和正确时间有多大的偏差。
要启用引导时的 ntpdate(8), 需要把 ntpdate_enable="YES" 加到 /etc/rc.conf 中。 此外, 还需要通过 ntpdate_flags 来设置同步的服务器和选项, 它们将传递给 ntpdate(8)。
NTP 是通过 /etc/ntp.conf 文件来进行配置的, 其格式在 ntp.conf(5) 中进行了描述。 下面是一个例子:
server ntplocal.example.com prefer server timeserver.example.org server ntp2a.example.net driftfile /var/db/ntp.drift
这里, server 选项指定了使用哪一个服务器, 每一个服务器都列为移行。 如果某一台服务器上指定了 prefer (偏好) 参数, 如上面的 ntplocal.example.com, 则会优先选择这个服务器。 如果偏好的服务器和其他服务器的响应存在显著的差别, 则丢弃它的响应, 否则将使用来自它的响应, 而不理会其他服务器。 一般来说, prefer 参数应该标注在非常精确的 NTP 时源, 例如那些包含特殊的时间监控硬件的服务器上。
而 driftfile 选项, 则指定了用来保存系统时钟频率偏差的文件。 ntpd(8) 程序使用它来自动地补偿时钟的自然漂移, 从而使时钟即使在切断了外来时源的情况下, 仍能保持相当的准确度。
另外, driftfile 选项也保存上一次响应所使用的 NTP 服务器的信息。 这个文件包含了 NTP 的内部信息, 它不应被任何其他进程修改。
默认情况下, NTP 服务器可以被整个 Internet 上的主机访问。 如果在 /etc/ntp.conf 中指定 restrict 参数, 则可以控制允许哪些机器访问您的服务器。
如果希望拒绝所有的机器访问您的 NTP 服务器, 只需在 /etc/ntp.conf 中加入:
restrict default ignore
如果只希望子网内的机器通过您的服务器同步时钟, 而不允许它们配置为服务器, 或作为同步时钟的节点来时用, 则加入
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
这里, 需要把 192.168.1.0 改为您网络上的 IP 地址, 并把 255.255.255.0 改为您的子网掩码。
/etc/ntp.conf 可能包含多个 restrict 选项。 要了解进一步的细节, 请参见 ntp.conf(5) 的 Access Control Support(访问控制支持) 小节。
要让 NTP 服务器在系统启动时随之开启, 需要把 ntpd_enable="YES" 加入到 /etc/rc.conf 中。 如果希望向 ntpd(8) 传递更多参数, 需要编辑 /etc/rc.conf 中的 ntpd_flags。
要在不重新启动机器的前提下启动服务器, 需要手工运行 ntpd, 并带上 /etc/rc.conf 中的 ntpd_flags 所指定的参数。 例如:
# ntpd -p /var/run/ntpd.pid
Note: 在 FreeBSD 4.X 中, 需要把上述参数中的 ntpd 改为 xntpd。
ntpd(8) 程序的正常工作并不需要永久性的 Internet 连接。 然而, 如果您的临时性连接是配置为按需拨号的, 那么防止 NTP 通讯频繁触发拨号, 或保持连接就有必要了。 如果您使用用户级 PPP, 可以使用 filter 语句, 在 /etc/ppp/ppp.conf 中进行必要的设置。 例如:
set filter dial 0 deny udp src eq 123 # Prevent NTP traffic from initiating dial out set filter dial 1 permit 0 0 set filter alive 0 deny udp src eq 123 # Prevent incoming NTP traffic from keeping the connection open set filter alive 1 deny udp dst eq 123 # Prevent outgoing NTP traffic from keeping the connection open set filter alive 2 permit 0/0 0/0
要了解进一步的信息, 请参考 ppp(8) 的 PACKET FILTERING(包过滤) 小节, 以及 /usr/share/examples/ppp/ 中的例子。
Note: 某些 Internet 访问提供商会阻止低编号的端口, 这会导致 NTP 无法正常工作, 因为响应无法到达您的机器。
防火墙的存在, 使得过滤出入系统的数据流成为可能。 防火墙可以使用一组或多组 “规则 (rules)”, 来检查出入您的网络连接的数据包, 并决定允许或阻止它们通过。 这些规则通常可以检查数据包的某个或某些特征, 这些特征包括, 但不必限于协议类型、 来源或目的主机地址, 以及来源或目的端口。
防火墙可以大幅度地改善主机或网络的安全。 它可以用来完成下面的任务:
保护和隔离应用程序、 服务程序, 以及您内部网络上的机器, 不受那些来自公共的 Internet 网络上您所不希望的数据流量的干扰。
限制或禁止从内部网访问公共的 Internet 上的服务。
支持网络地址转换 (NAT), 它使得您的内部网络能够使用私有的 IP 地址, 并分享一条通往公共的 Internet 的连接 (使用一个 IP 地址, 或者一组公网地址)。
读完这章, 您将了解:
如何正确地定义包过滤规则。
FreeBSD 中内建的集中防火墙之间的差异。
如何使用和配置 OpenBSD 的 PF 防火墙。
如何使用和配置 IPFILTER。
如何使用和配置 IPFW。
阅读这章之前, 您需要:
理解基本的 FreeBSD 和 Internet 概念。
建立防火墙规则集的基本方法有两种: “包容式的” 或 “排斥式的”。 排斥式的防火墙, 允许除了禁止的那些数据之外的所有网络流量通过。 包容式的防火墙正好相反。 后者只允许符合规则的流量通过, 而其他所有的流量都被阻止。
包容式防火墙一般说来要比排斥式防火墙安全, 因为他们显著地降低了由于允许不希望的网络流量通过所带来的风险。
如果使用了 “带状态功能的防火墙 (stateful firewall)”, 则安全机制可以进一步地细化。 带状态功能的防火墙能够记录通过防火墙的连接, 进而只允许与现有连接匹配的连接, 或创建新的连接。 带状态功能的防火墙的缺点, 则是在很短时间内有大量的连接请求时, 它们可能会受到拒绝服务 (DoS) 攻击。 绝大多数防火墙都提供了同时启用两种防火墙的能力, 以便为站点提供更好的保护。
FreeBSD 的基本系统内建了三种不同的防火墙软件包。 它们是 IPFILTER (也被称作 IPF)、 IPFIREWALL (也被称作 IPFW), 以及 OpenBSD 的 PacketFilter (也被称为 PF)。 FreeBSD 也提供了两个内建的、 用于流量整形 (基本上是控制带宽占用) 的软件包: altq(4) 和 dummynet(4)。 Dummynet 在过去一直和 IPFW 紧密集成, 而 ALTQ 则需要配合 IPF/PF 使用。 IPF、 IPFW, 以及 PF 都是用规则来控制是否允许数据包出入您的系统, 虽然它们采取了不同的实现方法和规则语法。
FreeBSD 包含多个内建的防火墙软件包的原因在于, 不同的人会有不同的需求和偏好。 任何一个防火墙软件包都很难说是最好的。
作者倾向于使用 IPFILTER, 因为它提供的状态式规则, 在 NAT 的环境中要简单许多, 而且它内建了 ftp 代理, 这简化了使用外部 FTP 服务时所需的配置。
由于所有的防火墙都基于检查所选定的包控制字段来实现功能, 撰写防火墙规则集时, 就必须了解 TCP/IP 是如何工作的, 以及包的控制字段在正常会话交互中的作用。 您可以在这个网站找到一份很好的解释文档: http://www.ipprimer.com/overview.cfm.
2003 年 7 月, OpenBSD 的防火墙, 也就是常说的 PF 被成功地移植到了 FreeBSD 上, 并可以通过 FreeBSD Ports Collection 来安装了; 第一个将 PF 集成到基本系统中的版本是 2004 年 11 月发行的 FreeBSD 5.3。 PF 是一个完整的提供了大量功能的防火墙软件, 并提供了可选的 ALTQ (交错队列, Alternate Queuing) 功能。 ALTQ 提供了服务品质 (QoS) 带宽整形功能, 这个功能能够以基于过滤规则的方式来保障不同服务的带宽。 OpenBSD Project 在维护 PF 用户指南方面已经做了非常卓越的工作, 因此我们不打算在这本使用手册中进行更进一步的阐述, 以避免不必要的重复劳动。
PF 在各种 FreeBSD 发行版上的可用情况如下所示:
| FreeBSD 版本 | PF 可用情况 |
|---|---|
| 4.X 之前的版本 | PF 在 FreeBSD 4.X 之前的版本分支上不可用。 |
| 所有 4.X 版本分支上的版本 | PF 作为 KAME 的一部分提供。 |
| 5.X 在 5.3-RELEASE 之前的版本 | security/pf port 可以用来在这些 FreeBSD 版本上安装 PF。 这些版本主要是供开发人员, 以及预览早期的 5.X 版本上使用的。 强烈建议升级到 5.3-RELEASE 或更新的 FreeBSD 版本。 |
| 5.3-RELEASE 以及之后的版本 | PF 已经成为了基本系统的一部分。 请 不要 尝试使用 security/pf port 在这些 FreeBSD 版本上安装它, 因为这样做是没有作用的。 请使用基本系统中的 pf(4) 支持。 |
更多的详细信息, 可以在 FreeBSD 版本的 PF 网站上找到: http://pf4freebsd.love2party.net/。
OpenBSD PF 用户指南可以在这里找到:http://www.openbsd.org/faq/pf/。
Warning在 FreeBSD 5.X 上的 PF 相当于 OpenBSD 3.5 版本。 以 port 形式出现在 FreeBSD Ports Collection 的版本相当于 OpenBSD 的 3.4 版。 在阅读用户指南时, 请注意这样的区别。
PF 作为 FreeBSD 5.3 和更高版本基本系统安装的一部分, 作为一个可以动态加载的模块出现。 如果在 rc.conf 中配置了 pf_enable="YES" 则系统会自动加载对应的内核模块。 可加载内核模块在构建时启用了 pflog(4)。
Note: 这个模块假定 options INET 和 device bpf 是存在的。 除非编译时指定了 NOINET6 (例如在 make.conf(5) 中) 则还需要 options INET6。
将下面这些选项加入到 FreeBSD 内核的编译配置文件中并不是启用 PF 的强制性要求。 这里列出它们主要是为了介绍一些背景信息。 将 PF 编译到内核中之后, 就不再需要使用可加载内核模块了。
如何在内核编译配置中加入对于 PF 选项的例子可以在内核源代码中的 /usr/src/sys/conf/NOTES 这个文件中找到。 这里列举如下:
device pf device pflog device pfsync
device pf 用于启用 “Packet Filter” 防火墙的支持。
device pflog 启用可选的 pflog(4) 伪网络设备, 用以通过 bpf(4) 描述符来记录流量。 pflogd(8) 服务可以用来存储信息, 并把它们以日志形式记录到磁盘上。
device pfsync 启用可选的 pfsync(4) 伪网络设备, 用以监视 “状态变更”。 由于这不是那个可加载内核模块的一部分, 因此如果需要使用它, 就必须自行编译定制的内核了。
这些设置只有在您使用它们构建和安装新内核之后才会生效。
您需要在 /etc/rc.conf 中添加如下配置, 以便在启动时激活 PF:
pf_enable="YES" # 启用 PF (如果需要的话, 自动加载内核模块) pf_rules="/etc/pf.conf" # pf 使用的规则定义文件 pf_flags="" # 启动时传递给 pfctl 的其他选项 pflog_enable="YES" # 启动 pflogd(8) pflog_logfile="/var/log/pflog" # pflogd 用于记录日志的文件名 pflog_flags="" # 启动时传递给 pflogd 的其他选项
如果您的防火墙后面有一个 LAN, 而且需要通过它来转发 LAN 上的包, 或进行 NAT, 还必须同时启用下述选项:
gateway_enable="YES" # 启用作为 LAN 网关的功能
ALTQ 只有在作为编译选项加入到 FreeBSD 内核时, 才能使用。 ALTQ 目前还不是所有的可用网卡驱动都能够支持的。 请参见 altq(4) 联机手册了解您正使用的 FreeBSD 版本中的驱动支持情况。 下面这些选项将启用 ALTQ 以及一些附加的功能。
options ALTQ options ALTQ_CBQ # Class Bases Queuing (CBQ) options ALTQ_RED # Random Early Detection (RED) options ALTQ_RIO # RED In/Out options ALTQ_HFSC # Hierarchical Packet Scheduler (HFSC) options ALTQ_PRIQ # Priority Queuing (PRIQ) options ALTQ_NOPCC # Required for SMP build
options ALTQ 将启用 ALTQ 框架的支持。
options ALTQ_CBQ 用于启用基于分类的队列 (CBQ) 支持。 CBQ 允许您将连接分成不同的类别, 或者说, 队列, 以便在规则中为它们指定不同的优先级。
options ALTQ_RED 将启用随机预检测 (RED)。 RED 是一种用于防止网络拥塞的技术。 RED 度量队列的长度, 并将其与队列的最大和最小长度阈值进行比较。 如果队列过长, 则新的包将被丢弃。 如名所示, RED 从不同的连接中随机地丢弃数据包。
options ALTQ_RIO 将启用出入的随机预检测。
options ALTQ_HFSC 启用层次式公平服务平滑包调度器。 要了解关于 HFSC 进一步的信息, 请参见 http://www-2.cs.cmu.edu/~hzhang/HFSC/main.html。
options ALTQ_PRIQ 启用优先队列 (PRIQ)。 PRIQ 首先允许高优先级队列中的包通过。
options ALTQ_NOPCC 启用 ALTQ 的 SMP 支持。 如果是 SMP 系统, 则必须使用它。
Note: 这一节的内容正在撰写中。 其内容可能不总是十分准确。
IPFILTER 的作者是 Darren Reed。 IPFILTER 是独立于操作系统的: 它是一个开放源代码的应用, 并且已经被移植到了 FreeBSD、 NetBSD、 OpenBSD、 SunOS、 HP/UX, 以及 Solaris 操作系统上。 IPFILTER 的支持和维护都相当活跃, 并且有规律地发布更新版本。
IPFILTER 基于内核模式的防火墙和 NAT 机制, 这些机制可以通过用户模式运行的接口程序中进行控制。 防火墙规则可以使用 ipf(8) 工具来动态地设置和删除。 NAT 规则可以通过 ipnat(1) 工具来维护。 ipfstat(8) 工具则可以用来显示 IPFILTER 内核部分的统计数据。 最后, 使用 ipmon(8) 程序可以把 IPFILTER 的动作记录到系统日志文件中。
IPF 最初是使用一组 “以最后匹配的规则为准” 的策略来实现的, 这种方式只能支持无状态的规则。 随着时代的进步, IPF 被逐渐增强, 并加入了 “quick” 选项, 以及支持状态的 “keep state” 选项, 这使得规则处理逻辑变得更富有现代气息。 IPF 的官方文档介绍了传统的规则编写方法和文件处理逻辑。 新增的功能只是作为一些附加的选项出现, 如果能完全理解这些功能, 则对于建立更安全的防火墙就很有好处。
这一节中主要是针对 “quick” 选项, 以及支持状态的 “keep state” 选项的介绍。 这是包容式防火墙规则集最基本的编写要素。
包容式防火墙只允许与规则匹配的包通过。 这样, 您就既能够控制来自防火墙后面的机器请求 Internet 公网上的那些服务, 同时也可以控制来自 Internet 的请求能够访问内部网上的哪些服务。 所有其它的访问请求都会被阻止, 并记录下来。 包容式防火墙一般而言要远比排斥式的要安全, 而且也只需要定义允许哪些访问通过。
要获得关于传统规则处理方式的详细信息, 请参考: http://www.obfuscation.org/ipf/ipf-howto.html#TOC_1 以及 http://coombs.anu.edu.au/~avalon/ip-filter.html。
IPF FAQ 可以在 http://www.phildev.net/ipf/index.html 找到。
IPF 作为 FreeBSD 基本安装的一部分, 以一个独立的内核模块的形式提供。 如果在 rc.conf 中配置了 ipfilter_enable="YES", 系统就会自动地动态加载 IPF 内核模块。 这个内核模块在创建时启用了日志支持, 并加入了 default pass all 选项。 如果只是需要把默认的规则设置为 block all 的话, 并不需要把 IPF 编译到内核中。 可以简单地通过把这条规则加入自己的规则集来达到同样的目的。
下面这些 FreeBSD 内核编译选项并不是启用 IPF 所必需的。 这里只是作为背景知识来加以阐述。 如果将 IPF 编入了内核, 则对应的内核模块将不被使用。
关于 IPF 选项语句的内核编译配置的例子, 可以在内核源代码中的 /usr/src/sys/conf/NOTES 找到 (对于 FreeBSD 4.X 来说, 则是 /usr/src/sys/arch/conf/LINT) 并这里列举如下:
options IPFILTER options IPFILTER_LOG options IPFILTER_DEFAULT_BLOCK
options IPFILTER 用于启用 “IPFILTER” 防火墙的支持。
options IPFILTER_LOG 用于启用 IPF 的日志支持, 所有匹配了包含 log 的规则的包, 都会被记录到 ipl 这个包记录伪--设备中。
options IPFILTER_DEFAULT_BLOCK 将改变防火墙的默认动作, 进而, 所有不匹配防火墙的 pass 规则的包都会被阻止。
这些选项只有在您重新编译并安装内核之后才会生效。
要在启动时激活 IPF, 您需要在 /etc/rc.conf 中增加下面的设置:
ipfilter_enable="YES" # 启动 ipf 防火墙
ipfilter_rules="/etc/ipf.rules" # 将被加载的规则定义, 这是一个文本文件
ipmon_enable="YES" # 启动 IP 监视日志
ipmon_flags="-Ds" # D = 作为服务程序启动
# s = 使用 syslog 记录
# v = 记录 tcp 窗口大小、 ack 和顺序号(seq)
# n = 将 IP 和端口映射为名字
如果您的 LAN 在防火墙后面, 并且使用了保留的私有 IP 地址范围, 那就需要增加下面的一些选项来启用 NAT 功能:
gateway_enable="YES" # 启用作为 LAN 网关的功能 ipnat_enable="YES" # 启动 ipnat 功能 ipnat_rules="/etc/ipnat.rules" # 用于 ipnat 的规则定义文件
ipf 命令可以用来加载您自己的规则文件。 一般情况下, 您可以建立一个包括您自定义的规则的文件, 并使用这个命令来替换掉正在运行的防火墙中的内部规则:
# ipf -Fa -f /etc/ipf.rules
-Fa 表示清除所有的内部规则表。
-f 用于指定将要被读取的规则定义文件。
这个功能使得您能够修改自定义的规则文件, 通过运行上面的 IPF 命令, 可以将正在运行的防火墙刷新为使用全新的规则集, 而不需要重新启动系统。 这对于测试新的规则来说就很方便, 因为您可以任意执行上面的命令。
请参考 ipf(8) 联机手册以了解这个命令提供的其它选项。
ipf(8) 命令假定规则文件是一个标准的文本文件。 它不能处理使用符号代换的脚本。
也确实有办法利用脚本的非常强大的符号替换能力来构建 IPF 规则。 要了解进一步的细节, 请参考 第 24.5.9 节。
默认情况下, ipfstat(8) 会获取并显示所有的累积统计, 这些统计是防火墙启动以来用户定义的规则匹配的出入流量, 您可以通过使用 ipf -Z 命令来将这些计数器清零。
请参见 ipfstat(8) 联机手册以了解进一步的细节。
默认的 ipfstat(8) 命令输出类似于下面的样子:
input packets: blocked 99286 passed 1255609 nomatch 14686 counted 0 output packets: blocked 4200 passed 1284345 nomatch 14687 counted 0 input packets logged: blocked 99286 passed 0 output packets logged: blocked 0 passed 0 packets logged: input 0 output 0 log failures: input 3898 output 0 fragment state(in): kept 0 lost 0 fragment state(out): kept 0 lost 0 packet state(in): kept 169364 lost 0 packet state(out): kept 431395 lost 0 ICMP replies: 0 TCP RSTs sent: 0 Result cache hits(in): 1215208 (out): 1098963 IN Pullups succeeded: 2 failed: 0 OUT Pullups succeeded: 0 failed: 0 Fastroute successes: 0 failures: 0 TCP cksum fails(in): 0 (out): 0 Packet log flags set: (0)
如果使用了 -i (进入流量) 或者 -o (输出流量), 它就只获取并显示内核中所安装的对应过滤器规则的统计数据。
ipfstat -in 以规则号的形式显示进入的内部规则表。
ipfstat -on 以规则号的形式显示流出的内部规则表。
输出和下面的类似:
@1 pass out on xl0 from any to any @2 block out on dc0 from any to any @3 pass out quick on dc0 proto tcp/udp from any to any keep state
ipfstat -ih 显示内部规则表中的进入流量, 每一个匹配规则前面会同时显示匹配的次数。
ipfstat -oh 显示内部规则表中的流出流量, 每一个匹配规则前面会同时显示匹配的次数。
输出和下面的类似:
2451423 pass out on xl0 from any to any 354727 block out on dc0 from any to any 430918 pass out quick on dc0 proto tcp/udp from any to any keep state
ipfstat 命令的一个重要的功能可以通过指定 -t 参数来使用, 它会以类似 top(1) 的显示 FreeBSD 正运行的进程表的方式来显示统计数据。 当您的防火墙正在受到攻击的时候, 这个功能让您得以识别、 试验, 并查看攻击的数据包。 这个选项提还提供了实时选择希望监视的目的或源 IP、 端口或协议的能力。 请参见 ipfstat(8) 联机手册以了解详细信息。
为了使 ipmon 能够正确工作, 必须打开 IPFILTER_LOG 这个内核选项。 这个命令提供了两种不同的使用模式。 内建模式是默认的模式, 如果您不指定 -D 参数, 就会采用这种模式。
服务模式是持续地通过系统日志来记录的工作模式, 这样, 您就可以通过查看日志来了解过去曾经发生过的事情。 这种模式是 FreeBSD 和 IPFILTER 配合工作的模式。 由于在 FreeBSD 中提供了一个内建的系统日志自动轮转功能, 因此, 使用 syslogd 比默认的将日志信息记录到一个普通文件要好。 在默认的 rc.conf 文件中, 您会看到一个 ipmon_flags 语句, 指定了 -Ds 标志:
ipmon_flags="-Ds" # D = 作为服务程序启动
# s = 使用 syslog 记录
# v = 记录 tcp 窗口大小、 ack 和顺序号(seq)
# n = 将 IP 和端口映射为名字
记录日志的好处是很明显的。 它提供了在事后重新审查相关信息, 例如哪些包被丢弃, 以及这些包的来源地址等等。 这将为查找攻击者提供非常有用的第一手资料。
即使启用了日志机制, IPF 仍然不会对其规则进行任何日志记录工作。 防火墙管理员可以决定规则集中的哪些应记录日志, 并在这些规则上加入 log 关键字。 一般来说, 只应记录拒绝性的规则。
作为惯例, 通常会有一条默认的、拒绝所有网络流量的规则, 并指定 log 关键字, 作为您的规则集的最后一条。 这样, 您就能够看到所有没有匹配任何规则的数据包。
Syslogd 使用其自有的方法, 来对日志数据进行分类。 它使用称为 “facility” 的组, 以及 “level” 来区分它们。 以 -Ds 模式运行的 IPMON 会使用 local0 作为 “facility” 名。 所有由 IPMON 记录的数据都会记录到 local0。 如果需要的话, 可以使用下面的 levels 来区分数据:
LOG_INFO - 使用 "log" 关键字指定的通过或阻止动作 LOG_NOTICE - 同时记录通过的那些数据包 LOG_WARNING - 同时记录阻止的数据包 LOG_ERR - 进一步记录含不完整的包头的数据包
要设置 IPFILTER 来将所有的数据记录到 /var/log/ipfilter.log, 需要首先建立这个文件。 下面的命令可以完成这个工作:
# touch /var/log/ipfilter.log
syslog 功能可以通过在 /etc/syslog.conf 文件中的语句来定义。 syslog.conf 提供了相当多的用以控制 syslog 如何处理类似 IPF 这样的用用程序所产生的系统消息的方法。
将下面的语句加入 /etc/syslog.conf:
local0.* /var/log/ipfilter.log
这里, local0.* 表示把所有的相关日志信息写到指定的位置。
要让 /etc/syslog.conf 中的修改立即生效, 您可以重新启动计算机, 或者通过执行 /etc/rc.d/syslogd reload 来让它重新读取 /etc/syslog.conf (在 FreeBSD 4.X 中, 则是 killall -HUP syslogd)。
不要忘了修改 /etc/newsyslog.conf 来让您刚创建的日志进行轮转。
由 ipmon 生成的消息由空格分隔的数据字段组成。 所有的消息都包含的字段是:
接到数据包的日期。
接到数据包的时间。 其格式为 HH:MM:SS.F, 分别是小时、 分钟、 秒, 以及分秒 (这个数字可能有许多位)。
处理数据包的网络接口名字, 例如 dc0。
组和规则的编号, 例如 @0:17。
可以通过 ipfstat -in 来查看这些信息。
动作: p 表示通过, b 表示阻止, S 表示包头不全, n 表示没有匹配任何规则, L 表示 log 规则。 显示这些标志的顺序是: S, p, b, n, L。 大写的 P 或 B 表示记录包的原因是某个全局的日志配置, 而不是某个特定的规则。
地址。 这实际上包括三部分: 源地址和端口 (以逗号分开), 一个 -> 符号, 以及目的地址和端口。 209.53.17.22,80 -> 198.73.220.17,1722.
PR, 后跟协议名称或编号, 例如, PR tcp。
len, 后跟包头的长度, 以及包的总长度, 例如 len 20 40。
对于 TCP 包, 则还会包括一个附加的字段, 由一个连字号开始, 之后是表示所设置的标志的一个字母。 请参见 ipmon(8) 联机手册, 以了解这些字母所对应的标志。
对于 ICMP 包, 则在最后会有两个字段。 前一个总是 “ICMP”, 而后一个则是 ICMP 消息和子消息的类型, 中间以斜线分靠, 例如 ICMP 3/3 表示端口不可达消息。
一些有经验的 IPF 会创建包含规则的文件, 并把它编写成能够与符号替换脚本兼容的方式。 这样做最大的好处是, 它能够让您只修改符号名字所代表的值, 而在脚本执行时直接替换掉所有的名符。 作为脚本, 您可以使用符号替换来把那些经常使用的值直接用于多个规则。 下面我们将给出一个例子。
这个脚本所使用的语法与 sh、 csh, 以及 tcsh 脚本。
符号替换的前缀字段是美元符号: $。
符号字段不使用 $ 前缀。
希望替换符号字段的值, 必须使用双引号 (") 括起来。
您的规则文件的开头类似这样:
############# IPF 规则脚本的开头 ######################## oif="dc0" # 外网接口的名字 odns="192.0.2.11" # ISP 的 DNS 服务器 IP 地址 myip="192.0.2.7" # 来自 ISP 的静态 IP 地址 ks="keep state" fks="flags S keep state" # 可以使用这个脚本来建立 /etc/ipf.rules 文件, # 也可以 "直接地" 运行它。 # # 请删除两个注释号之一。 # # 1) 保留下面一行, 则创建 /etc/ipf.rules: #cat > /etc/ipf.rules << EOF # # 2) 保留下面一行, 则 "直接地" 运行脚本: /sbin/ipf -Fa -f - << EOF # 允许发出到我的 ISP 的域名服务器的访问 pass out quick on $oif proto tcp from any to $odns port = 53 $fks pass out quick on $oif proto udp from any to $odns port = 53 $ks # 允许发出未加密的 www 访问请求 pass out quick on $oif proto tcp from $myip to any port = 80 $fks # 允许发出使用 TLS SSL 加密的 https www 访问请求 pass out quick on $oif proto tcp from $myip to any port = 443 $fks EOF ################## IPF 规则脚本的结束 ########################
这就是所需的全部内容。 这个规则本身并不重要, 它们主要是用于体现如何使用符号代换字段, 以及如何完成值的替换。 如果上面的例子的名字是 /etc/ipf.rules.script, 就可以通过输入下面的命令来重新加载规则:
# sh /etc/ipf.rules.script
在规则文件中嵌入符号有一个问题: IPF 无法识别符号替换, 因此它不能直接地读取这样的脚本。
这个脚本可以使用下面两种方法之一来使用:
去掉 cat 之前的注释, 并注释掉 /sbin/ipf 开头的那一行。 像其他配置一样, 将 ipfilter_enable="YES" 放到 /etc/rc.conf 文件中, 并在此后立刻执行脚本, 以创建或更新 /etc/ipf.rules。
通过把 ipfilter_enable="NO" (这是默认值) 加到 /etc/rc.conf 中, 来禁止系统启动脚本开启 IPFILTER。
在 /usr/local/etc/rc.d/ 启动目录中增加一个类似下面的脚本。 应该给它起一个显而易见的名字, 例如 ipf.loadrules.sh。 请注意, .sh 扩展名是必需的。
#!/bin/sh sh /etc/ipf.rules.script
脚本文件必须设置为属于 root, 并且属主可读、 可写、 可执行。
# chmod 700 /usr/local/etc/rc.d/ipf.loadrules.sh
这样, 在系统启动时, 就会自动加载您的 IPF 规则了。
规则集是指一组编写好的依据包的值决策允许通过或阻止 ipf 规则。 包的双向交换组成了一个会话交互。 防火墙规则集对同一个包会进行两次处理, 第一次是它从公网的 Internet 主机到达的时候, 第二次是它离开并返回初始的 Internet 公网主机的时候。 每一个 TCP/IP 服务 (例如 telnet, www, 邮件等等) 是由协议预先定义的源或目的 IP 地址, 以及源或目的端口。 这是最基本的一些可以为防火墙规则所利用的, 判别是否允许服务通过的标准。
IPF 最初被写成使用一组称作 “以最后匹配的规则为准” 的处理逻辑, 且只能处理无状态的规则。 随着时代的发展, IPF 进行了改进, 并提供了 “quick” 选项, 以及一个有状态的 “keep state” 选项。 后者使处理逻辑迅速地跟上了时代的步伐。
这一节中提供的一些指导, 是基于使用包含 “quick” 选项和有状态的 “keep state” 选项来进行阐述的。 这些是编写包容式防火墙规则集的基本要素。
包容式防火墙只允许与规则匹配的服务通过。 这样, 您就既能够控制来自防火墙后面的机器请求 Internet 公网上的那些服务, 同时也可以控制来自 Internet 的请求能够访问内部网上的哪些服务。 所有其它的访问请求都会被阻止, 并记录下来。 包容式防火墙一般而言要远比排斥式的要安全, 而且也只需要定义允许哪些访问通过。
Warning当对防火墙规则进行操作时, 应该 谨慎行事。 某些配置可能会 将您反锁在 服务器外面。 安全起见, 您可以考虑在第一次进行防火墙配置时在本地控制台上, 而不是远程, 例如通过 ssh 来进行。
这里给出的规则语法已经简化到只处理那些新式的带状态规则, 并且都是 “第一个匹配的规则获胜” 逻辑的。 要了解完整的传统规则语法描述, 请参见 ipf(8) 联机手册。
以 # 字符开头的内容会被认为是注释。 这些注释可以出现在一行规则的末尾, 或者独占一行。 空行会被忽略。
规则由关键字组成。 这些关键字必须以一定的顺序, 从左到右出现在一行上。 接下来的文字中关键字将使用粗体表示。 某些关键字可能提供了子选项, 这些子选项本身可能也是关键字, 而且可能会提供更多的子选项。 下面的文字中, 每种语法都使用粗体的小节标题呈现, 并介绍了其上下文。
ACTION IN-OUT OPTIONS SELECTION STATEFUL PROTO SRC_ADDR,DST_ADDR OBJECT PORT_NUM TCP_FLAG STATEFUL
ACTION = block | pass
IN-OUT = in | out
OPTIONS = log | quick | on 网络接口的名字
SELECTION = proto 协议名称 | 源/目的 IP | port = 端口号 | flags 标志值
PROTO = tcp/udp | udp | tcp | icmp
SRC_ADD,DST_ADDR = all | from 对象 to 对象
OBJECT = IP地址 | any
PORT_NUM = port 端口号
TCP_FLAG = S
STATEFUL = keep state
动作对表示匹配规则的包应采取什么动作。 每一个规则 必须 包含一个动作。 可以使用下面两种动作之一:
block 表示如果规则与包匹配, 则丢弃包。
pass 表示如果规则与包匹配, 则允许包通过防火墙。
每个过滤器规则都必须明确地指定是流入还是流出的规则。 下一个关键字必须要么是 in, 要么是 out, 否则将无法通过语法检查。
in 表示规则应被应用于刚刚从 Internet 公网上收到的数据包。
out 表示规则应被应用于即将发出到 Internet 的数据包。
Note: 这些选项必须按下面指定的顺序出现。
log 表示包头应被写入到 ipl 日志 (如前面 LOGGING 小节所介绍的那样), 如果它与规则匹配的话。
quick 表示如果给出的参数与包匹配, 则以这个规则为准, 这使得能够 "短路" 掉后面的规则。 这个选项对于使用新式的处理逻辑是必需的。
on 表示将网络接口的名称作为筛选参数的一部分。 接口的名字会在 ifconfig(8) 的输出中显示。 使用这个选项, 则规则只会应用到某一个网络接口上的出入数据包上。 要配置新式的处理逻辑, 必须使用这个选项。
当记录包时, 包的头会被写入到 IPL 包日志伪设备中。 紧跟 log 关键字, 可以使用下面几个修饰符 (按照下列顺序):
body 表示应同时记录包的前 128 字节的内容。
first 如果 log 关键字和 “keep state” 选项同时使用, 则这个选项只在第一个包上触发, 这样就不用记录每一个 “keep state” 包信息了。
这一节所介绍的关键字可以用于所检察的包的属性。 有一个关键字主题, 以及一组子选项关键字, 您必须从他们中选择一个。 以下是一些通用的属性, 它们必须按下面的顺序使用:
proto 是一个主题关键字, 它必须与某个相关的子选项关键字配合使用。 这个值的作用是匹配某个特定的协议。 要使用新式的规则处理逻辑, 就必须使用这个选项。
tcp/udp | udp | tcp | icmp 或其他在 /etc/protocols 中定义的协议。 特殊的协议关键字 tcp/udp 可以用于匹配 TCP 或 UDP 包, 引入这个关键字的作用是是避免大量的重复规则的麻烦。
使用 all 关键词, 基本上相当于 “from any to any” 在没有配合其他关键字的情形。
from src to dst: from 和 to 关键字主要是用来匹配 IP 地址。 所有的规则都必须同时给出源和目的两个参数。 any 是一个可以用于匹配任意 IP 地址的特殊关键字。 例如, 您可以使用 “from any to any” 或 “from 0.0.0.0/0 to any” 或 “from any to 0.0.0.0/0” 或 “from 0.0.0.0 to any” 以及 “from any to 0.0.0.0”。
IP 地址可以按句点分隔的 IP 地址/掩码长度 的方式来指定, 也可以只指定一个句点分隔的 IP 地址。
如果无法使用子网掩码来表示 IP 的话, 表达地址就会很麻烦。 请参见下面的网页了解如何撰写掩码长度: http://jodies.de/ipcalc。
如果为源或目的指定了匹配端口, 规则就只能应用于 TCP 和 UDP 包了。 当编写端口比较规则时, 可以指定 /etc/services 中所定义的名字, 也可以直接用端口号来指定。 如果端口号出现在源对象一侧, 则被认为是源端口号; 反之, 则被认为是目的端口号。 要使用新式的规则处理逻辑, 就必须与 to 对象配合使用这个选项。 使用的例子: “from any to any port = 80”。
端口的比较是以数字的形式进行的, 可以使用比较算符来指定, 也可以指定一个范围。
port "=" | "!=" | "<" | ">" | "<=" | ">=" | "eq" | "ne" | "lt" | "gt" | "le" | "ge".
要指定端口范围, 可以使用 "<>" | "><"。
Warning在源和目的匹配参数之后, 需要使用下面两个参数, 才能够使用新式的规则处理逻辑。
有状态过滤将网络流量当作一种双向的包交换来处理。 如果激活它, keep-state 会动态地为每一个相关的包在双向会话交互过程中产生内部规则。 它能够确认发起者和包的目的地之间的会话是有效的双向包交换过程的一部分。 如果包与这些规则不符, 则将自动地拒绝。
状态保持也使得 ICMP 包能够与 TCP 或 UDP 会话相关。 因此, 如果您在浏览网站时收到允许的状态保持规则匹配的 ICMP 类型 3 代码 4 响应, 则这些响应会被自动地允许进入。 所有 IPF 能够处理的包, 都可以作为某种活跃会话的一部分, 即使它是另一种协议的, 也会被允许进入。
所发生的事情是:
将要通过联入公网的网络接口发出的包, 首先会经过动态状态表的检查。 如果包与会话中预期的下一个包匹配, 则防火墙就会允许包通过, 而会话的交互流信息也会在动态状态表中进行更新, 而其他的包, 则将使用发出规则集来检查。
发到联入 Internet 公网的包, 也会首先经过动态规则表的检查。 如果与会话中预期的下一个包匹配, 则防火墙就允许它通过, 并更新动态状态表。 其他包仍会使用进入规则集进行检查。
当会话结束时, 对应的项会在动态状态表中删除。
有状态过滤使得您能够集中于阻止/允许新的会话。 一旦新会话被允许通过, 则所有后续的包就都被自动地允许通过, 而伪造的包则被自动地拒绝。 如果新的会话被阻止, 则后续的包也都不会被允许通过。 有状态过滤从技术角度而言, 在阻止目前攻击者常用的洪水式攻击来说, 具有更好的抗御能力。
下面的规则集是如何编写非常安全的包容式防火墙规则集的一个范例。 包容式防火墙只让允许的服务通过, 而所有其他的访问都会被默认地拒绝。 所有的防火墙都有至少两个接口对应的默认规则, 从而使防火墙能够正常工作。
所有的类 UNIX 系统, 包括 FreeBSD 都使用 lo0 和 IP 地址 127.0.0.1 用于操作系统中内部的通讯。 防火墙规则必须允许这些包无阻碍地通过。
接入 Internet 公网的网络接口, 是放置规则并允许将访问请求发到 Internet 以及接收响应的地方。 这有可能是用户模式的 PPP tun0 接口, 如果您的网卡同 DSL 或电缆调制解调器相联的话。
如果有至少一个网卡与防火墙后的内网 LAN 相联, 这些网络接口就应该有一个规则来允许来自这些 LAN 接口的包无阻碍地通过。
一般说来, 规则应被组织为三个主要的小节: 所有允许自由通过的接口规则, 发到公网接口的规则, 以及进入公网接口的规则。
每一个公网接口规则中, 经常会匹配到的规则应该放置在尽可能靠前的位置。 而最后一个规则应该是阻止包通过, 并记录它们。
下面防火墙规则集中, Outbound 部分是一些使用 'pass' 的规则, 这些规则指定了允许访问的公网 Internet 服务, 并且指定了 'quick'、 'on'、 'proto'、 'port', 以及 'keep state' 这些选项。 'proto tcp' 规则还指定了 'flag' 这个选项, 这样会话的第一个包将出发状态机制。
接下来的 Inbound 一节, 则首先阻止所有不希望的数据包。 这样做有两个原因, 其一是被阻止的包可能会被后面的规则允许, 从而并不妨碍获得授权的服务正常工作; 其二是这避免了那些不常见的包由于匹配到最后一条规则而触发日志, 规则集中的最后一条规则是阻止并记录所有的包, 通过这样的记录, 就比较容易找到攻击系统的人, 并为采取法律措施收集证据。
需要注意的另一件事情是, 如果收到了不希望的数据包, 则这些包会被丢弃, 而不是给出什么响应。 这样做的好处是, 攻击者无法了解包是否已经被您的系统收到。 攻击者所能了解到的信息越少, 攻陷您的系统所需要花费的时间也就越长。 我们在这里记录的连入的 'nmap OS 指纹' 探测企图, 一般来说正是攻击者所做的第一件事。
如果您看到了 'log first' 规则的日志, 就应该用 ipfstat -hio 命令来看看那个规则被匹配的次数, 以便了解系统是否正在或曾被攻击。
如果记录的包的端口号并不是您所知道的, 可以在 /etc/services 或 http://www.securitystats.com/tools/portsearch.php 了解端口号通常的用途。
参考下面的网页, 了解木马使用的端口:http://www.simovits.com/trojans/trojans.html。
下面是我在自己的系统中使用的完整的, 非常安全的 '包容式' 防火墙规则集。 直接使用这个规则集不会给您造成问题, 您所要做的只是注释掉那些您不需要的服务。
如果在日志中发现了希望阻止的记录, 只需在 inbound 小节中增加一条阻止规则集可。
您必须将每一个规则中的 dc0 替换为您系统上接入 Internet 的网络接口名称, 例如, 用户环境下的 PPP 应该是 tun0。
在 /etc/ipf.rules 中加入下面的内容:
################################################################# # No restrictions on Inside LAN Interface for private network # Not needed unless you have LAN ################################################################# #pass out quick on xl0 all #pass in quick on xl0 all ################################################################# # No restrictions on Loopback Interface ################################################################# pass in quick on lo0 all pass out quick on lo0 all ################################################################# # Interface facing Public Internet (Outbound Section) # Interrogate session start requests originating from behind the # firewall on the private network # or from this gateway server destine for the public Internet. ################################################################# # Allow out access to my ISP's Domain name server. # xxx must be the IP address of your ISP's DNS. # Dup these lines if your ISP has more than one DNS server # Get the IP addresses from /etc/resolv.conf file pass out quick on dc0 proto tcp from any to xxx port = 53 flags S keep state pass out quick on dc0 proto udp from any to xxx port = 53 keep state # Allow out access to my ISP's DHCP server for cable or DSL networks. # This rule is not needed for 'user ppp' type connection to the # public Internet, so you can delete this whole group. # Use the following rule and check log for IP address. # Then put IP address in commented out rule & delete first rule pass out log quick on dc0 proto udp from any to any port = 67 keep state #pass out quick on dc0 proto udp from any to z.z.z.z port = 67 keep state # Allow out non-secure standard www function pass out quick on dc0 proto tcp from any to any port = 80 flags S keep state # Allow out secure www function https over TLS SSL pass out quick on dc0 proto tcp from any to any port = 443 flags S keep state # Allow out send & get email function pass out quick on dc0 proto tcp from any to any port = 110 flags S keep state pass out quick on dc0 proto tcp from any to any port = 25 flags S keep state # Allow out Time pass out quick on dc0 proto tcp from any to any port = 37 flags S keep state # Allow out nntp news pass out quick on dc0 proto tcp from any to any port = 119 flags S keep state # Allow out gateway & LAN users non-secure FTP ( both passive & active modes) # This function uses the IPNAT built in FTP proxy function coded in # the nat rules file to make this single rule function correctly. # If you want to use the pkg_add command to install application packages # on your gateway system you need this rule. pass out quick on dc0 proto tcp from any to any port = 21 flags S keep state # Allow out secure FTP, Telnet, and SCP # This function is using SSH (secure shell) pass out quick on dc0 proto tcp from any to any port = 22 flags S keep state # Allow out non-secure Telnet pass out quick on dc0 proto tcp from any to any port = 23 flags S keep state # Allow out FBSD CVSUP function pass out quick on dc0 proto tcp from any to any port = 5999 flags S keep state # Allow out ping to public Internet pass out quick on dc0 proto icmp from any to any icmp-type 8 keep state # Allow out whois for LAN PC to public Internet pass out quick on dc0 proto tcp from any to any port = 43 flags S keep state # Block and log only the first occurrence of everything # else that's trying to get out. # This rule enforces the block all by default logic. block out log first quick on dc0 all ################################################################# # Interface facing Public Internet (Inbound Section) # Interrogate packets originating from the public Internet # destine for this gateway server or the private network. ################################################################# # Block all inbound traffic from non-routable or reserved address spaces block in quick on dc0 from 192.168.0.0/16 to any #RFC 1918 private IP block in quick on dc0 from 172.16.0.0/12 to any #RFC 1918 private IP block in quick on dc0 from 10.0.0.0/8 to any #RFC 1918 private IP block in quick on dc0 from 127.0.0.0/8 to any #loopback block in quick on dc0 from 0.0.0.0/8 to any #loopback block in quick on dc0 from 169.254.0.0/16 to any #DHCP auto-config block in quick on dc0 from 192.0.2.0/24 to any #reserved for docs block in quick on dc0 from 204.152.64.0/23 to any #Sun cluster interconnect block in quick on dc0 from 224.0.0.0/3 to any #Class D & E multicast ##### Block a bunch of different nasty things. ############ # That I do not want to see in the log # Block frags block in quick on dc0 all with frags # Block short tcp packets block in quick on dc0 proto tcp all with short # block source routed packets block in quick on dc0 all with opt lsrr block in quick on dc0 all with opt ssrr # Block nmap OS fingerprint attempts # Log first occurrence of these so I can get their IP address block in log first quick on dc0 proto tcp from any to any flags FUP # Block anything with special options block in quick on dc0 all with ipopts # Block public pings block in quick on dc0 proto icmp all icmp-type 8 # Block ident block in quick on dc0 proto tcp from any to any port = 113 # Block all Netbios service. 137=name, 138=datagram, 139=session # Netbios is MS/Windows sharing services. # Block MS/Windows hosts2 name server requests 81 block in log first quick on dc0 proto tcp/udp from any to any port = 137 block in log first quick on dc0 proto tcp/udp from any to any port = 138 block in log first quick on dc0 proto tcp/udp from any to any port = 139 block in log first quick on dc0 proto tcp/udp from any to any port = 81 # Allow traffic in from ISP's DHCP server. This rule must contain # the IP address of your ISP's DHCP server as it's the only # authorized source to send this packet type. Only necessary for # cable or DSL configurations. This rule is not needed for # 'user ppp' type connection to the public Internet. # This is the same IP address you captured and # used in the outbound section. pass in quick on dc0 proto udp from z.z.z.z to any port = 68 keep state # Allow in standard www function because I have apache server pass in quick on dc0 proto tcp from any to any port = 80 flags S keep state # Allow in non-secure Telnet session from public Internet # labeled non-secure because ID/PW passed over public Internet as clear text. # Delete this sample group if you do not have telnet server enabled. #pass in quick on dc0 proto tcp from any to any port = 23 flags S keep state # Allow in secure FTP, Telnet, and SCP from public Internet # This function is using SSH (secure shell) pass in quick on dc0 proto tcp from any to any port = 22 flags S keep state # Block and log only first occurrence of all remaining traffic # coming into the firewall. The logging of only the first # occurrence stops a .denial of service. attack targeted # at filling up your log file space. # This rule enforces the block all by default logic. block in log first quick on dc0 all ################### End of rules file #####################################
NAT 是 网络地址转换(Network Address Translation) 的缩写。 对于那些熟悉 Linux 的人来说, 这个概念叫做 IP 伪装 (Masquerading); NAT 和 IP 伪装是完全一样的概念。 由 IPF 的 NAT 提供的一项功能是, 将防火墙后的本地局域网 (LAN) 共享一个 ISP 提供的 IP 地址来接入 Internet 公网。
有些人可能会问, 为什么需要这么做。 一般而言, ISP 会为非商业用户提供动态的 IP 地址。 动态地址意味着每次登录到 ISP 都有可能得到不同的 IP 地址, 无论是采用电话拨号登录, 或使用 cable 以及 DSL 调制解调器的方式。 这个 IP 是您与 Internet 公网交互时使用的身份。
现在考虑家中有五台 PC 需要访问 Internet 的情形。 您可能需要向 ISP 为每一台 PC 所使用的独立的 Internet 账号付费, 并且拥有五根电话线。
有了 NAT, 您就只需要一个 ISP 账号, 然后将另外四台 PC 的网卡通过交换机连接起来, 并通过运行 FreeBSD 系统的那台机器作为网关连接出去。 NAT 会自动地将每一台 PC 在内网的 LAN IP 地址, 在离开防火墙时转换为公网的 IP 地址。 此外, 当数据包返回时, 也将进行逆向的转换。
NAT 通常是在没有向 ISP 请求许可, 或事先知会的情况下进行的, 因而如果被发现, 有时可能会成为 ISP 撤销您的账号的一个借口。 商业用户一般来说会购买昂贵得多的 Internet 线路, 通常会获得一组长期有效的静态 IP 地址块。 ISP 一般会希望并同意商业用户在他们的内网中使用 NAT。
在 IP 地址空间中, 有一些特殊的范围是保留供经过 NAT 的内网 LAN IP 地址使用的。 根据 RFC 1918, 您可以使用下面这些 IP 范围用于内网, 它们不会在 Internet 公网上路由:
NAT 规则是通过 ipnat 命令加载的。 默认情况下, NAT 规则会保存在 /etc/ipnat.rules 文件中。 请参见 ipnat(1) 了解更多的详情。
如果在 NAT 已经启动之后想要修改 NAT 规则, 可以修改保存 NAT 规则的那个文件, 然后在执行 ipnat 命令时加上 -CF 参数, 以删除在用的 NAT 内部规则表, 以及所有地址翻译表中已有的项。
要重新加载 NAT 规则, 可以使用类似下面的命令:
# ipnat -CF -f /etc/ipnat.rules
如果想要看看您系统上 NAT 的统计信息, 可以用下面的命令:
# ipnat -s
要列出当前的 NAT 表的映射关系, 使用下面的命令:
# ipnat -l
要显示详细的信息并显示与规则处理和当前的规则/表项:
# ipnat -v
NAT 规则非常的灵活, 能够适应商业用户和家庭用户的各种不同的需求。
这里所介绍的规则语法已经被简化, 以适应非商用环境中的一般情况。 完整的规则语法描述, 请参考 ipnat(5) 联机手册中的介绍。
NAT 规则的写法与下面的例子类似:
map IF LAN_IP_RANGE -> PUBLIC_ADDRESS
关键词 map 出现在规则的最前面。
将 IF 替换为对外的网络接口名。
LAN_IP_RANGE 是内网中的客户机使用的地址范围。 通常情况下, 这应该是类似 192.168.1.0/24 的地址。
PUBLIC_ADDRESS 既可以是外网的 IP 地址, 也可以是 0/32 这个特殊的关键字, 它表示分配到 IF 上的所有地址。
当包从 LAN 到达防火墙, 而目的地址是公网地址时, 它首先会通过 outbound 过滤规则。 接下来, NAT 会得到包, 并按自顶向下的顺序处理规则, 而第一个匹配的规则将生效。 NAT 接下来会根据包对应的接口名字和源 IP 地址检查所有的规则。 如果包和某个 NAT 规则匹配, 则会检查包的 [源 IP 地址, 例如, 内网的 IP 地址] 是否在 NAT 规则中箭头左侧指定的 IP 地址范围匹配。 如果匹配, 则包的原地址将被根据用 0/32 关键字指定的 IP 地址重写。 NAT 将向它的内部 NAT 表发送此地址, 这样, 当包从 Internet 公网中返回时, 就能够把地址映射回原先的内网 IP 地址, 并在随后使用过滤器规则来处理。
要启用 IPNAT, 只需在 /etc/rc.conf 中加入下面一些语句。
使机器能够在不同的网络接口之间进行包的转发, 需要:
gateway_enable="YES"
每次开机时自动启动 IPNAT:
ipnat_enable="YES"
指定 IPNAT 规则集文件:
ipnat_rules="/etc/ipnat.rules"
对于在一个 LAN 中有大量 PC, 以及包含多个 LAN 的情形, 把所有的内网 IP 地址都映射到同一个公网 IP 上会导致资源不够的问题, 因为同一个端口可能在许多做了 NAT 的 LAN PC 上被多次使用, 并导致碰撞。 有两种方法来缓解这个难题。
普通的 NAT 规则类似于:
map dc0 192.168.1.0/24 -> 0/32
上面的规则中, 包的源端口在包通过 IPNAT 时时不会发生变化的。 通过使用 portmap 关键字, 您可以要求 IPNAT 只使用一定范围内的端口地址。 比如说, 下面的规则将让 IPNAT 把源端口改为指定范围内的端口:
map dc0 192.168.1.0/24 -> 0/32 portmap tcp/udp 20000:60000
使用 auto 关键字可以让配置变得更简单一些, 它会要求 IPNAT 自动地检测可用的端口并使用:
map dc0 192.168.1.0/24 -> 0/32 portmap tcp/udp auto
对于很大的 LAN 来说, 总会有一个临界值, 此时 LAN 的地址会多到没办法使用一个公网地址表达的程度。 这时, 类似下面的规则需要进行修改:
map dc0 192.168.1.0/24 -> 204.134.75.1
目前的这个规则, 将所有的链接都通过 204.134.75.1 来映射。 可以把它改为一个范围:
map dc0 192.168.1.0/24 -> 204.134.75.1-10
或者使用 CIDR 记法指定的一组地址:
map dc0 192.168.1.0/24 -> 204.134.75.0/24
非常流行的一种做法是, 将 web 服务器、 邮件服务器、 数据库服务器以及 DNS 分别放到 LAN 上的不同的 PC 上。 这种情况下, 来自这些服务器的网络流量仍然应该被 NAT, 但必须有办法把进入的流量发到对应的局域网的 PC 上。 IPNAT 提供了 NAT 重定向机制来解决这个问题。 考虑下面的情况, 您的 web 服务器的 LAN 地址是 10.0.10.25, 而您的唯一的公网 IP 地址是 20.20.20.5, 则可以编写这样的规则:
map dc0 20.20.20.5/32 port 80 -> 10.0.10.25 port 80
或者:
map dc0 0/32 port 80 -> 10.0.10.25 port 80
另外, 也可以让 LAN 地址 10.0.10.33 上运行的 LAN DNS 服务器来处理公网上的 DNS 请求:
map dc0 20.20.20.5/32 port 53 -> 10.0.10.33 port 53 udp
FTP 是一个在 Internet 如今天这样为人所熟知之前就已经出现的恐龙, 那时, 研究机构和大学是通过租用的线路连到一起的, 而 FTP 则被用于在科研人员之间共享大文件。 那时, 数据的安全性并不是需要考虑的事情。 若干年之后, FTP 协议则被埋进了正在形成中的 Internet 骨干, 而它使用明文来交换用户名和口令的缺点, 并没有随着新出现的一些安全需求而得到改变。 FTP 提供了两种不同的风格, 即主动模式和被动模式。 两者的区别在于数据通道的建立方式。 被动模式相对而言要更加安全, 因为数据通道是由发起 ftp 会话的一方建立的。 关于 FTP 以及它所提供的不同模式, 在 http://www.slacksite.com/other/ftp.html 进行了很好的阐述。
IPNAT 提供了一个内建的 FTP 代理选项, 它可以在 NAT map 规则中指定。 它能够监视所有外发的 FTP 主动或被动模式的会话开始请求, 并动态地创建临时性的过滤器规则, 只打开用于数据通道的端口号。 这样, 就消除了 FTP 一般会给防火墙带来的, 需要大范围地打开高端口所可能带来的安全隐患。
下面的规则可以处理来自内网的 FTP 访问:
map dc0 10.0.10.0/29 -> 0/32 proxy port 21 ftp/tcp
这个规则能够处理来自网关的 FTP 访问:
map dc0 0.0.0.0/0 -> 0/32 proxy port 21 ftp/tcp
这个则处理所有来自内网的非 FTP 网络流量:
map dc0 10.0.10.0/29 -> 0/32
FTP map 规则应该在普通的 map 规则之前出现。 所有的包会从最上面的第一个规则开始进行检查。 匹配的顺序是网卡名称, 内网源 IP 地址, 以及它是否是 FTP 包。 如果所有这些规则都匹配成功, 则 FTP 代理将建立一个临时的过滤规则, 以便让 FTP 会话的数据包能够正常出入, 同时对这些包进行 NAT。 所有的 LAN 数据包, 如果没有匹配第一条规则, 则会继续尝试匹配下面的规则, 并最终被 NAT。
如果使用了 NAT FTP 代理, 则只需要为 FTP 创建一个规则。
如果没有使用 FTP 代理, 则需要下面三个规则:
# Allow out LAN PC client FTP to public Internet # Active and passive modes pass out quick on rl0 proto tcp from any to any port = 21 flags S keep state # Allow out passive mode data channel high order port numbers pass out quick on rl0 proto tcp from any to any port > 1024 flags S keep state # Active mode let data channel in from FTP server pass in quick on rl0 proto tcp from any to any port = 20 flags S keep state
在 FreeBSD 4.9 中提供了 IPFILTER 的 3.4.31 版。 在整个 FTP 会话直到将要结束之前, FTP 代理都会像文档中介绍的那样。 但一旦有一方要求关闭会话, 则来自远程 FTP 服务器 21 端口的一个包会被阻止, 并在日志中记下这一情况。 NAT FTP/代理显然过早地删除了临时规则, 而不是等待远程 FTP 服务器确认它。 有人就这个问题在 IPF 的邮件列表中发表了问题报告。
解决这个问题的方法是, 要么增加一条过滤规则来摆脱不希望的日志消息, 或者什么都不做, 并忽略日志中的 FTP 连入错误信息。 绝大多数人并不经常使用外部的 FTP 服务。
block in quick on rl0 proto tcp from any to any port = 21
Note: 这一节的内容正在撰写中。 其内容可能不总是十分准确。
IPFIREWALL (IPFW) 是一个由 FreeBSD 发起的防火墙应用软件, 它由 FreeBSD 的志愿者成员编写和维护。 它使用了传统的无状态规则, 以及传统的规则编写技巧, 以期达到所谓的简单状态逻辑。
标准的 FreeBSD 安装中, IPFW 所给出的规则集例子 (可以在 /etc/rc.firewall 中找到) 非常简单, 以至于没有办法不加修改地加以使用。 那个例子中没有使用状态过滤, 而这对于许多配置都非常有好处, 因此这一节并不以系统自带的例子作为基础。
IPFW 的无状态规则语法, 是由一种提供复杂的选择能力的技术支持的, 这种技术远远超出了一般的防火墙安装人员的知识水平。 IPFW 是为满足专业用户, 以及掌握先进技术的电脑爱好者们对于高级的包选择需求而设计的。 要完全释放 IPFW 的规则所拥有的强大能力, 需要对不同的协议的细节有深入的了解, 并根据它们独特的包头信息来编写规则。 这一级别的详细阐述超出了这本手册的范围。
IPFW 由其部分组成, 其主要组件是内核的防火墙过滤规则处理器, 及其集成的数据包记帐工具、 日志工具、 用以触发 NAT 工具的 'divert' (转发) 规则、 高级特殊用途工具、 dummynet 流量整形机制, 'fwd rule' 转发工具, 桥接工具, 以及 ipstealth 工具。
IPFW 是基本的 FreeBSD 安装的一部分, 以单独的可加载内核模块的形式提供。 如果在 rc.conf 中加入 firewall_enable="YES" 语句, 就会自动地加载对应的内核模块。 除非您打算使用由它提供的 NAT 功能, 一般情况下并不需要把 IPFW 编进 FreeBSD 的内核。
如果将 firewall_enable="YES" 加入到 rc.conf 中并重新启动系统, 则下列信息将在启动过程中, 以高亮的白色显示出来:
ipfw2 initialized, divert disabled, rule-based forwarding disabled, default to deny, logging disabled
可加载内核模块在编译时加入了记录日志的能力。 要启用日志功能, 并配置详细日志记录的限制, 需要在 /etc/sysctl.conf 中加入一些配置。 这些设置将在重新启动之后生效:
net.inet.ip.fw.verbose=1 net.inet.ip.fw.verbose_limit=5
把下列选项在编译 FreeBSD 内核时就加入, 并不是启用 IPFW 所必需的, 除非您需要使用 NAT 功能。 这里只是将这些选项作为背景知识来介绍。
options IPFIREWALL
这个选项将 IPFW 作为内核的一部分来启用。
options IPFIREWALL_VERBOSE
这个选项将启用记录通过 IPFW 的匹配了包含 'log' 关键字规则的每一个包的功能。
options IPFIREWALL_VERBOSE_LIMIT=5
以每项的方式, 限制通过 syslogd(8) 记录的包的个数。 如果在比较恶劣的环境下记录防火墙的活动可能会需要这个选项。 它能够避免潜在的针对 syslog 的洪水式拒绝服务攻击。
options IPFIREWALL_DEFAULT_TO_ACCEPT
这个选项默认地允许所有的包通过防火墙, 如果您是第一次配置防火墙, 使用这个选项将是一个不错的主意。
options IPV6FIREWALL options IPV6FIREWALL_VERBOSE options IPV6FIREWALL_VERBOSE_LIMIT options IPV6FIREWALL_DEFAULT_TO_ACCEPT
这些选项与 IPv4 的对应选项功能一样, 它们是针对 IPv6 的。 如果不使用 IPv6, 则不带任何规则的 IPV6FIREWALL 将阻止所有的 IPv6 包。
options IPDIVERT
这一选项启用 NAT 功能。
Note: 如果内核选项中没有加入 IPFIREWALL_DEFAULT_TO_ACCEPT, 或将您的防火墙设置配置为允许所有的进入包, 则所有发到本机或发出的包都会被阻止。
如果没有将 IPFW 编入内核, 则您需要在 /etc/rc.conf 中加入下列语句来加载它:
firewall_enable="YES"
用以激活您的防火墙规则的配置脚本:
firewall_script="/etc/ipfw.rules"
启用日志:
firewall_logging="YES"
Warning设置 firewall_logging 的唯一作用是, 系统将把 net.inet.ip.fw.verbose sysctl 变量置为 1 (参见 第 24.6.1 节)。 并没有能够设置日志限制的 rc.conf 变量, 不过这种限制可以通过设置某些 sysctl 变量来完成, 可以手工进行操作, 也可以写到 /etc/sysctl.conf 文件中:
net.inet.ip.fw.verbose_limit=5
ipfw 命令是在防火墙运行时, 用于在其内部规则表中手工逐条添加或删除防火墙规则的标准工具。 这一方法的问题在于, 一旦您的关闭计算机或停机, 则所有增加或删除或修改的规则也就丢掉了。 把所有的规则都写到一个文件中, 并在启动时使用这个文件来加载规则, 或一次大批量地替换防火墙规则, 那么推荐使用这里介绍的方法。
ipfw 的另一个非常实用的功能是将所有正在运行的防火墙规则显示出来。 IPFW 的记账机制会为每一个规则动态地创建计数器, 用以记录与它们匹配的包的数量。 在测试规则的过程中, 列出规则及其计数器是了解它们是否工作正常的重要手段。
按顺序列出所有的规则:
# ipfw list
列出所有的规则, 同时给出最后一次匹配的时间戳:
# ipfw -t list
列出所有的记账信息、 匹配规则的包的数量, 以及规则本身。 第一列是规则的编号, 随后是发出包匹配的数量, 进入包的匹配数量, 最后是规则本身。
# ipfw -a list
列出所有的动态规则和静态规则:
# ipfw -d list
同时显示已过期的动态规则:
# ipfw -d -e list
将计数器清零:
# ipfw zero
只把规则号为 NUM 的计数器清零:
# ipfw zero NUM
规则集是一组根据包中选择的数值使用 allow 或 deny 写出的 ipfw 规则。 在两个主机之前的双向包交换组成了一次会话交互。 防火墙规则集, 会对同一个包处理两次: 第一次是包从公网上到达防火墙时, 而第二次则是包返回 Internet 公网上的主机时。 每一个 TCP/IP 服务 (例如 telnet, www, mail, 等等), 都有事先定义好的协议, 以及一个端口号。 这可以作为建立允许或阻止规则时的基本选择依据。
当有数据包进入防火墙时, 会从规则集里的第一个规则开始进行比较, 并自顶向下地进行匹配。 当包与某个选择规则参数相匹配时, 将会执行规则所定义的动作, 并停止规则集搜索。 这种策略, 通常也被称作 “最先匹配者获胜” 的搜索方法。 如果没有任何与包相匹配的规则, 那么它就会根据强制的 ipfw 默认规则, 也就是 65535 号规则截获。 一般情况下这个规则是阻止包, 而且不给出任何回应。
Note: 如果规则定义的动作是 count、 skipto 或 tee 规则的话, 搜索会继续。
这里所介绍的规则, 都是使用了那些包含状态功能的, 也就是 'keep state'、 'limit'、 'in'/'out'、 或者 'via' 选项的规则。 这是编写包容式防火墙规则集所需的基本框架。
包容式防火墙只允许与规则匹配的包通过。 这样, 您就既能够控制来自防火墙后面的机器请求 Internet 公网上的那些服务, 同时也可以控制来自 Internet 的请求能够访问内部网上的哪些服务。 所有其它的访问请求都会被阻止, 并记录下来。 包容式防火墙一般而言要远比排斥式的要安全, 而且也只需要定义允许哪些访问通过。
Warning在操作防火墙规则时应谨慎行事, 如果操作不当, 有可能将自己反锁在外面。
这里所介绍的规则语法已经经过了简化, 只包括了建立标准的包容式防火墙规则集所必需的那些。 要了解完整的规则语法说明, 请参见 ipfw(8) 联机手册。
规则是由关键字组成的: 这些关键字必须以特定的顺序从左到右书写。 下面的介绍中, 关键字使用粗体表示。 某些关键字还包括了子选项, 这些自选向本身可能也是关键字, 有些还可以包含更多的子选项。
# 用于表示开始一段注释。 它可以出现在一个规则的后面, 也可以独占一行。 空行会被忽略。
CMD RULE_NUMBER ACTION LOGGING SELECTION STATEFUL
每一个规则可以与下列的动作之一相关联, 所指定的动作将在进入的数据包与规则所指定的选择标准相匹配时执行。
allow | accept | pass | permit
这些关键字都表示允许匹配规则的包通过防火墙, 并停止继续搜索规则。
check-state
根据动态规则表检查数据包。 如果匹配, 则执行规则所指定的动作, 亦即生成动态规则; 否则, 转移到下一个规则。 check-state 规则没有选择标准。 如果规则集中没有 check-state 规则, 则会在第一个 keep-state 或 limit 规则处, 对动态规则表实施检查。
deny | drop
这两个关键字都表示丢弃匹配规则的包。 同时, 停止继续搜索规则。
log or logamount
当数据包与带 log 关键字的规则匹配时, 将通过名为 SECURITY 的 facility 来把消息记录到 syslogd。 只有在记录的次数没有超过 logamount 参数所指定的次数时, 才会记录日志。 如果没有指定 logamount, 则会以 sysctl 变量 net.inet.ip.fw.verbose_limit 所指定的限制为准。 如果将这两种限制值之一指定为零, 则表示不作限制。 万一达到了限制数, 可以通过将规则的日志计数或包计数清零来重新启用日志, 请参见 ipfw reset log 命令来了解细节。
Note: 日志是在所有其他匹配条件都验证成功之后, 在针对包实施最终动作 (accept, deny) 之前进行的。 您可以自行决定哪些规则应启用日志。
这一节所介绍的关键字主要用来描述检查包的哪些属性, 用以判断包是否与规则相匹配。 下面是一些通用的用于匹配包特征的属性, 它们必须按顺序使用:
udp | tcp | icmp
也可以指定在 /etc/protocols 中所定义的协议。 这个值定义的是匹配的协议, 在规则中必须指定它。
from src to dst
from 和 to 关键字用于匹配 IP 地址。 规则中必须同时指定源和目的两个参数。 如果需要匹配任意 IP 地址, 可以使用特殊关键字 any。 还有一个特殊关键字, 即 me, 用于匹配您的 FreeBSD 系统上所有网络接口上所配置的 IP 地址, 它可以用于表达网络上的其他计算机到防火墙 (也就是本机), 例如 'from me to any' 或 'from any to me' 或 'from 0.0.0.0/0 to any' 或 'from any to 0.0.0.0/0' 或 'from 0.0.0.0 to any' 或 'from any to 0.0.0.0' 以及 'from me to 0.0.0.0'。 IP 地址可以通过 带点的 IP 地址/掩码长度, 或者一个带点的 IP 地址的形式来指定。 这是编写规则时所必需的。 如果不清楚如何写掩码长度, 请参见 http://jodies.de/ipcalc。
port number
这个参数主要用于那些支持端口号的协议 (例如 TCP 和 UDP)。 如果要通过端口号匹配某个协议, 就必须指定这个参数。 此外, 也可以通过服务的名字 (根据 /etc/services) 来指定服务, 这样会比使用数字指定端口号直观一些。
in | out
相应地, 匹配进入和发出的包。 这里的 in 和 out 都是关键字, 在编写匹配规则时, 必需作为其他条件的一部分来使用。
via IF
根据指定的网络接口的名称精确地匹配进出的包。 这里的 via 关键字将使得接口名称成为匹配过程的一部分。
setup
要匹配 TCP 会话的发起请求, 就必须使用它。
keep-state
这是一个必须使用的关键字。 在发生匹配时, 防火墙将创建一个动态规则, 其默认行为是, 匹配使用同一协议的、从源到目的 IP/端口 的双向网络流量。
limit {src-addr | src-port | dst-addr | dst-port}
防火墙只允许匹配规则时, 与指定的参数相同的 N 个连接。 可以指定至少一个源或目的地址及端口。 'limit' 和 'keep-state' 不能在同一规则中同时使用。 'limit' 提供了与 'keep-state' 相同的功能, 并增加了一些独有的能力。
有状态过滤将网络流量当作一种双向的包交换来处理。 它提供了一种额外的检查能力, 用以检测会话中的包是否来自最初的发送者, 并在遵循双向包交换的规则进行会话。 如果包与这些规则不符, 则将自动地拒绝它们。
'check-state' 用来识别在 IPFW 规则集中的包是否符合动态规则机制的规则。 如果匹配, 则允许包通过, 此时防火墙将创建一个新的动态规则来匹配双向交换中的下一个包。 如果不匹配, 则将继续尝试规则集中的下一个规则。
动态规则机制在 SYN-flood 攻击下是脆弱的, 因为这种情况会产生大量的动态规则, 从而耗尽资源。 为了抵抗这种攻击, 从 FreeBSD 4.5 版开始, 加入了一个叫做 limit 的新选项。 这个选项可以用来限制符合规则的会话允许的并发连接数。 如果动态规则表中的规则数超过限制, 则包将被丢弃。
记录日志的好处是显而易见的: 它提供了在事后检查所发生的状况的方法, 例如哪些包被丢弃了, 这些包的来源和目的地, 从而为您提供找到攻击者所需的证据。
即使启用了日志机制, IPFW 也不会自行生成任何规则的日志。 防火墙管理员需要指定规则集中的哪些规则应该记录日志, 并在这些规则上增加 log 动作。 一般来说, 只有 deny 规则应记录日志, 例如对于进入的 ICMP ping 的 deny 规则。 另外, 复制默认的 ipfw 终极 deny 规则, 并加入 log 动作来作为您的规则集的最后一条规则也是很常见的用法。 这样, 您就能看到没有匹配任何一条规则的那些数据包。
日志是一把双刃剑, 如果不谨慎地加以利用, 则可能会陷入过多的日志数据中, 并导致磁盘被日志塞满。 将磁盘填满是 DoS 攻击最为老套的手法之一。 由于日志除了会写入磁盘之外, 还会输出到 root 的控制台屏幕上, 因此有过多的日志信息是很让人恼火的事情。
IPFIREWALL_VERBOSE_LIMIT=5 内核选项将限制同一个规则发到系统日志程序 syslogd 的连续消息的数量。 当内核启用了这个选项时, 某一特定规则所产生的连续消息的数量将封顶为这个数字。 一般来说, 没有办法从连续 200 条一模一样的日志信息中获取更多有用的信息。 举例来说, 如果同一个规则产生了 5 次消息并被记录到 syslogd, 余下的相同的消息将被计数, 并像下面这样发给 syslogd:
last message repeated 45 times
所有记录的数据包包消息, 默认情况下会最终写到 /var/log/security 文件中, 后者在 /etc/syslog.conf 文件里进行了定义。
绝大多数有经验的 IPFW 用户会创建一个包含规则的文件, 并且, 按能够以脚本形式运行的方式来书写。 这样做最大的一个好处是, 可以大批量地刷新防火墙规则, 而无须重新启动系统就能够激活它们。 这种方法在测试新规则时会非常方便, 因为同一过程在需要时可以多次执行。 作为脚本, 您可以使用符号替换来撰写那些经常需要使用的值, 并用同一个符号在多个规则中反复地表达它。 下面将给出一个例子。
这个脚本使用的语法同 'sh'、 'csh' 以及 'tcsh' 脚本兼容。 符号替换字段使用美元符号 $ 作为前缀。 符号字段本身并不使用 $ 前缀。 符号替换字段的值必须使用 "双引号" 括起来。
可以使用类似下面的规则文件:
############### start of example ipfw rules script ############# # ipfw -q -f flush # Delete all rules # Set defaults oif="tun0" # out interface odns="192.0.2.11" # ISP's DNS server IP address cmd="ipfw -q add " # build rule prefix ks="keep-state" # just too lazy to key this each time $cmd 00500 check-state $cmd 00502 deny all from any to any frag $cmd 00501 deny tcp from any to any established $cmd 00600 allow tcp from any to any 80 out via $oif setup $ks $cmd 00610 allow tcp from any to $odns 53 out via $oif setup $ks $cmd 00611 allow udp from any to $odns 53 out via $oif $ks ################### End of example ipfw rules script ############
这就是所要做的全部事情了。 例子中的规则并不重要, 它们主要是用来表示如何使用符号替换。
如果把上面的例子保存到 /etc/ipfw.rules 文件中, 您就可以通过输入下面的命令来加载它。
# sh /etc/ipfw.rules
/etc/ipfw.rules 这个文件可以放到任何位置, 也可以命名为随便什么别的名字。
也可以手工执行下面的命令来达到类似的目的:
# ipfw -q -f flush # ipfw -q add check-state # ipfw -q add deny all from any to any frag # ipfw -q add deny tcp from any to any established # ipfw -q add allow tcp from any to any 80 out via tun0 setup keep-state # ipfw -q add allow tcp from any to 192.0.2.11 53 out via tun0 setup keep-state # ipfw -q add 00611 allow udp from any to 192.0.2.11 53 out via tun0 keep-state
以下的这组非-NAT 规则集, 是如何编写非常安全的 '包容式' 防火墙的一个例子。 包容式防火墙只允许匹配了 pass 规则的包通过, 而默认阻止所有的其他数据包。 必须有至少两个网络接口, 并且在其上配置了规则才能使防火墙正常工作。
所有类 UNIX 操作系统, 也包括 FreeBSD, 都设计为允许使用网络接口 lo0 和 IP 地址 127.0.0.1 来完成操作系统内部的通讯。 防火墙必须包含一组规则, 使这些数据包能够无障碍地收发。
接入 Internet 公网的那个网络接口上, 应该配置授权和访问控制, 来限制对外的访问, 以及来自 Internet 公网的访问。 这个接口很可能是您的 ppp 接口, 例如 tun0, 或者您接在 DSL 或电缆 modem 上的网卡。
如果有至少一个网卡接入了防火墙后的内网 LAN, 则必须为这些接口配置规则, 以便让这些接口之间的包能够顺畅地通过。
所有的规则应被组织为三个部分, 所有应无阻碍地通过的规则, 公网的发出规则, 以及公网的接收规则。
公网接口相关的规则的顺序, 应该是最经常用到的放在尽可能靠前的位置, 而最后一个规则, 则应该是阻止那个接口在那一方向上的包。
发出部分的规则只包含一些 'allow' 规则, 允许选定的那些唯一区分协议的端口号所指定的协议通过, 以允许访问 Internet 公网上的这些服务。 所有的规则中都指定了 proto, port, in/out, via 以及 keep state 这些选项。 'proto tcp' 规则同时指定 'setup' 选项, 来区分开始协议会话的包, 以触发将包放入 keep state 规则表中的动作。
接收部分则首先阻止所有不希望的包, 在这里有两个目的。 首先是, 这些包被禁止掉之后, 就不会由于匹配了后面的某个规则而被允许。 其次, 明确地禁止这些包, 就不会再在日志中记录它们而形成干扰。 防火墙的最后一条规则是阻止并记录所有包, 这样, 您就可以留下用于起诉攻击您的系统的人的有用记录。
另一件需要注意的事情是, 不希望的数据包一般来说不会有任何响应, 这些数据包会被丢弃并消失。 这样, 攻击者也就无法了解他的数据包是否到达了您的系统。 而攻击者了解的信息越少, 它们攻陷系统所需的时间也就越长。 当记录的包使用的端口号不是您所熟悉的那些时, 可以看一看 /etc/services/ 或到 http://www.securitystats.com/tools/portsearch.php 并查找一下端口号, 以了解其用途。 另外, 您也可以在这个网页上了解常见木马所使用的端口: http://www.simovits.com/trojans/trojans.html。
下面是一个非-NAT 的规则集, 它是一个完整的包容式规则集。 使用它作为您的规则集不会有什么问题。 只需把那些不需要的服务对应的 pass 规则注释掉就可以了。 如果您在日志中看到消息, 而且不想再看到它们, 只需在接收部分增加一个一个 deny 规则。 您可能需要把 'dc0' 改为接入公网的接口的名字。 对于使用用户态 ppp 的用户而言, 应该是 'tun0'。
您可以看出这些规则中的模式。
所有请求 Internet 公网上服务的会话开始包, 都使用了 keep-state。
所有来自 Internet 的授权服务请求, 都采用了 limit 选项来防止洪水式攻击。
所有的规则都使用了 in 或者 out 来说明方向。
所有的规则都使用了 via 接口名来指定应该匹配通过哪一个接口的包。
这些规则都应放到 /etc/ipfw.rules。
################ Start of IPFW rules file ###############################
# Flush out the list before we begin.
ipfw -q -f flush
# Set rules command prefix
cmd="ipfw -q add"
pif="dc0" # public interface name of NIC
# facing the public Internet
#################################################################
# No restrictions on Inside LAN Interface for private network
# Not needed unless you have LAN.
# Change xl0 to your LAN NIC interface name
#################################################################
#$cmd 00005 allow all from any to any via xl0
#################################################################
# No restrictions on Loopback Interface
#################################################################
$cmd 00010 allow all from any to any via lo0
#################################################################
# Allow the packet through if it has previous been added to the
# the "dynamic" rules table by a allow keep-state statement.
#################################################################
$cmd 00015 check-state
#################################################################
# Interface facing Public Internet (Outbound Section)
# Interrogate session start requests originating from behind the
# firewall on the private network or from this gateway server
# destine for the public Internet.
#################################################################
# Allow out access to my ISP's Domain name server.
# x.x.x.x must be the IP address of your ISP.s DNS
# Dup these lines if your ISP has more than one DNS server
# Get the IP addresses from /etc/resolv.conf file
$cmd 00110 allow tcp from any to x.x.x.x 53 out via $pif setup keep-state
$cmd 00111 allow udp from any to x.x.x.x 53 out via $pif keep-state
# Allow out access to my ISP's DHCP server for cable/DSL configurations.
# This rule is not needed for .user ppp. connection to the public Internet.
# so you can delete this whole group.
# Use the following rule and check log for IP address.
# Then put IP address in commented out rule & delete first rule
$cmd 00120 allow log udp from any to any 67 out via $pif keep-state
#$cmd 00120 allow udp from any to x.x.x.x 67 out via $pif keep-state
# Allow out non-secure standard www function
$cmd 00200 allow tcp from any to any 80 out via $pif setup keep-state
# Allow out secure www function https over TLS SSL
$cmd 00220 allow tcp from any to any 443 out via $pif setup keep-state
# Allow out send & get email function
$cmd 00230 allow tcp from any to any 25 out via $pif setup keep-state
$cmd 00231 allow tcp from any to any 110 out via $pif setup keep-state
# Allow out FBSD (make install & CVSUP) functions
# Basically give user root "GOD" privileges.
$cmd 00240 allow tcp from me to any out via $pif setup keep-state uid root
# Allow out ping
$cmd 00250 allow icmp from any to any out via $pif keep-state
# Allow out Time
$cmd 00260 allow tcp from any to any 37 out via $pif setup keep-state
# Allow out nntp news (i.e. news groups)
$cmd 00270 allow tcp from any to any 119 out via $pif setup keep-state
# Allow out secure FTP, Telnet, and SCP
# This function is using SSH (secure shell)
$cmd 00280 allow tcp from any to any 22 out via $pif setup keep-state
# Allow out whois
$cmd 00290 allow tcp from any to any 43 out via $pif setup keep-state
# deny and log everything else that.s trying to get out.
# This rule enforces the block all by default logic.
$cmd 00299 deny log all from any to any out via $pif
#################################################################
# Interface facing Public Internet (Inbound Section)
# Interrogate packets originating from the public Internet
# destine for this gateway server or the private network.
#################################################################
# Deny all inbound traffic from non-routable reserved address spaces
$cmd 00300 deny all from 192.168.0.0/16 to any in via $pif #RFC 1918 private IP
$cmd 00301 deny all from 172.16.0.0/12 to any in via $pif #RFC 1918 private IP
$cmd 00302 deny all from 10.0.0.0/8 to any in via $pif #RFC 1918 private IP
$cmd 00303 deny all from 127.0.0.0/8 to any in via $pif #loopback
$cmd 00304 deny all from 0.0.0.0/8 to any in via $pif #loopback
$cmd 00305 deny all from 169.254.0.0/16 to any in via $pif #DHCP auto-config
$cmd 00306 deny all from 192.0.2.0/24 to any in via $pif #reserved for docs
$cmd 00307 deny all from 204.152.64.0/23 to any in via $pif #Sun cluster interconnect
$cmd 00308 deny all from 224.0.0.0/3 to any in via $pif #Class D & E multicast
# Deny public pings
$cmd 00310 deny icmp from any to any in via $pif
# Deny ident
$cmd 00315 deny tcp from any to any 113 in via $pif
# Deny all Netbios service. 137=name, 138=datagram, 139=session
# Netbios is MS/Windows sharing services.
# Block MS/Windows hosts2 name server requests 81
$cmd 00320 deny tcp from any to any 137 in via $pif
$cmd 00321 deny tcp from any to any 138 in via $pif
$cmd 00322 deny tcp from any to any 139 in via $pif
$cmd 00323 deny tcp from any to any 81 in via $pif
# Deny any late arriving packets
$cmd 00330 deny all from any to any frag in via $pif
# Deny ACK packets that did not match the dynamic rule table
$cmd 00332 deny tcp from any to any established in via $pif
# Allow traffic in from ISP's DHCP server. This rule must contain
# the IP address of your ISP.s DHCP server as it.s the only
# authorized source to send this packet type.
# Only necessary for cable or DSL configurations.
# This rule is not needed for .user ppp. type connection to
# the public Internet. This is the same IP address you captured
# and used in the outbound section.
#$cmd 00360 allow udp from any to x.x.x.x 67 in via $pif keep-state
# Allow in standard www function because I have apache server
$cmd 00400 allow tcp from any to me 80 in via $pif setup limit src-addr 2
# Allow in secure FTP, Telnet, and SCP from public Internet
$cmd 00410 allow tcp from any to me 22 in via $pif setup limit src-addr 2
# Allow in non-secure Telnet session from public Internet
# labeled non-secure because ID & PW are passed over public
# Internet as clear text.
# Delete this sample group if you do not have telnet server enabled.
$cmd 00420 allow tcp from any to me 23 in via $pif setup limit src-addr 2
# Reject & Log all incoming connections from the outside
$cmd 00499 deny log all from any to any in via $pif
# Everything else is denied by default
# deny and log all packets that fell through to see what they are
$cmd 00999 deny log all from any to any
################ End of IPFW rules file ###############################
要使用 IPFW 的 NAT 功能, 还需要进行一些额外的配置。 除了其他 IPFIREWALL 语句之外, 还需要在内核编译配置中加上 'option divert' 语句。
在 /etc/rc.conf 中, 除了普通的 IPFW 配置之外, 还需要加入:
natd_enable="YES" # Enable NATD function natd_interface="rl0" # interface name of public Internet NIC natd_flags="-dynamic -m" # -m = preserve port numbers if possible
将带状态规则与转发 natd 规则 (网络地址转换) 会使规则集的编写变得非常复杂。 check-state 的位置, 以及 'divert natd' 规则将变得非常关键。 这样一来, 就不再有简单的顺序处理逻辑流程了。 提供了一种新的动作类型, 称为 'skipto'。 要使用 skipto 命令, 就必须给每一个规则进行编号, 以确定 skipto 规则号是您希望跳转到的位置。
下面给出了一些未加注释的例子来说明如何编写这样的规则, 用以帮助您理解包处理规则集的处理顺序。
处理流程从规则文件最上边的第一个规则开始处理, 并自顶向下地尝试每一个规则, 直到找到匹配的规则, 且数据包从防火墙中放出为止。 请注意规则号 100 101, 450, 500, 以及 510 的位置非常重要。 这些规则控制发出和接收的包的地址转换过程, 这样它们在 keep-state 动态表中的对应项中就能够与内网的 LAN IP 地址关联。 另一个需要注意的是, 所有的 allow 和 deny 规则都指定了包的方向 (也就是 outbound 或 inbound) 以及网络接口。 最后, 请注意所有发出的会话请求都会请求 skipto rule 500 以完成网络地址转换。
下面以 LAN 用户使用 web 浏览器访问一个 web 页面为例。 Web 页面使用 80 来完成通讯。 当包进入防火墙时, 规则 100 并不匹配, 因为它是发出而不是收到的包。 它能够通过规则 101, 因为这是第一个包, 因而它还没有进入动态状态保持表。 包最终到达规则 125, 并匹配该规则。 最终, 它会通过接入 Internet 公网的网卡发出。 这之前, 包的源地址仍然是内网 IP 地址。 一旦匹配这个规则, 就会触发两个动作。 keep-state 选项会把这个规则发到 keep-state 动态规则表中, 并执行所指定的动作。 动作是发到规则表中的信息的一部分。 在这个例子中, 这个动作是 "skipto rule 500"。 规则 500 NAT 包的 IP 地址, 并将其发出。 请务必牢记, 这一步非常重要。 接下来, 数据包将到达目的地, 之后返回并从规则集的第一条规则开始处理。 这一次, 它将与规则 100 匹配, 其目的 IP 地址将被映射回对应的内网 LAN IP 地址。 其后, 它会被 check-state 规则处理, 进而在暨存会话表中找到对应项, 并发到 LAN。 数据包接下来发到了内网 LAN PC 上, 而后者则会发送从远程服务器请求下一段数据的新数据包。 这个包会再次由 check-state 规则检查, 并找到发出的表项, 并执行其关联的动作, 即 'skipto 500'。 包跳转到规则 500 并被 NAT 后发出。
在接收一侧, 已经存在的会话的数据包, 会被 check-state 规则自动地处理, 并放到转发 natd 规则。 我们需要解决的问题是, 阻止所有的坏数据包, 而只允许授权的服务。 例如在防火墙上运行了 Apache 服务, 而我们希望人们在访问 Internet 公网的同时, 也能够访问本地的 web 站点。 新的接入开始请求包将匹配规则 100, 而 IP 地址则为防火墙所在的服务器而映射到了 LAN IP。 此后, 包会匹配所有我们希望检查的那些令人生厌的东西, 并最终匹配规则 425。 一旦发生匹配, 会发生两件事。 数据包会被发到 keep-state 动态表, 但此时, 所有来自那个源 IP 的会话请求的数量会被限制为 2。 这一做法能够挫败针对指定端口上服务的 DoS 攻击。 动作同时指定了包应被发到 LAN 上。 包返回时, check-state 规则会识别出包属于某一已经存在的会话交互, 并直接把它发到规则 500 做 NAT, 并发到发出接口。
示范规则集 #1:
#!/bin/sh cmd="ipfw -q add" skip="skipto 500" pif=rl0 ks="keep-state" good_tcpo="22,25,37,43,53,80,443,110,119" ipfw -q -f flush $cmd 002 allow all from any to any via xl0 # exclude LAN traffic $cmd 003 allow all from any to any via lo0 # exclude loopback traffic $cmd 100 divert natd ip from any to any in via $pif $cmd 101 check-state # Authorized outbound packets $cmd 120 $skip udp from any to xx.168.240.2 53 out via $pif $ks $cmd 121 $skip udp from any to xx.168.240.5 53 out via $pif $ks $cmd 125 $skip tcp from any to any $good_tcpo out via $pif setup $ks $cmd 130 $skip icmp from any to any out via $pif $ks $cmd 135 $skip udp from any to any 123 out via $pif $ks # Deny all inbound traffic from non-routable reserved address spaces $cmd 300 deny all from 192.168.0.0/16 to any in via $pif #RFC 1918 private IP $cmd 301 deny all from 172.16.0.0/12 to any in via $pif #RFC 1918 private IP $cmd 302 deny all from 10.0.0.0/8 to any in via $pif #RFC 1918 private IP $cmd 303 deny all from 127.0.0.0/8 to any in via $pif #loopback $cmd 304 deny all from 0.0.0.0/8 to any in via $pif #loopback $cmd 305 deny all from 169.254.0.0/16 to any in via $pif #DHCP auto-config $cmd 306 deny all from 192.0.2.0/24 to any in via $pif #reserved for docs $cmd 307 deny all from 204.152.64.0/23 to any in via $pif #Sun cluster $cmd 308 deny all from 224.0.0.0/3 to any in via $pif #Class D & E multicast # Authorized inbound packets $cmd 400 allow udp from xx.70.207.54 to any 68 in $ks $cmd 420 allow tcp from any to me 80 in via $pif setup limit src-addr 1 $cmd 450 deny log ip from any to any # This is skipto location for outbound stateful rules $cmd 500 divert natd ip from any to any out via $pif $cmd 510 allow ip from any to any ######################## end of rules ##################
下面的这个规则集基本上和上面一样, 但使用了易于读懂的编写方式, 并给出了相当多的注解, 以帮助经验较少的 IPFW 规则编写者更好地理解这些规则到底在做什么。
示范规则集 #2:
#!/bin/sh
################ Start of IPFW rules file ###############################
# Flush out the list before we begin.
ipfw -q -f flush
# Set rules command prefix
cmd="ipfw -q add"
skip="skipto 800"
pif="rl0" # public interface name of NIC
# facing the public Internet
#################################################################
# No restrictions on Inside LAN Interface for private network
# Change xl0 to your LAN NIC interface name
#################################################################
$cmd 005 allow all from any to any via xl0
#################################################################
# No restrictions on Loopback Interface
#################################################################
$cmd 010 allow all from any to any via lo0
#################################################################
# check if packet is inbound and nat address if it is
#################################################################
$cmd 014 divert natd ip from any to any in via $pif
#################################################################
# Allow the packet through if it has previous been added to the
# the "dynamic" rules table by a allow keep-state statement.
#################################################################
$cmd 015 check-state
#################################################################
# Interface facing Public Internet (Outbound Section)
# Interrogate session start requests originating from behind the
# firewall on the private network or from this gateway server
# destine for the public Internet.
#################################################################
# Allow out access to my ISP's Domain name server.
# x.x.x.x must be the IP address of your ISP's DNS
# Dup these lines if your ISP has more than one DNS server
# Get the IP addresses from /etc/resolv.conf file
$cmd 020 $skip tcp from any to x.x.x.x 53 out via $pif setup keep-state
# Allow out access to my ISP's DHCP server for cable/DSL configurations.
$cmd 030 $skip udp from any to x.x.x.x 67 out via $pif keep-state
# Allow out non-secure standard www function
$cmd 040 $skip tcp from any to any 80 out via $pif setup keep-state
# Allow out secure www function https over TLS SSL
$cmd 050 $skip tcp from any to any 443 out via $pif setup keep-state
# Allow out send & get email function
$cmd 060 $skip tcp from any to any 25 out via $pif setup keep-state
$cmd 061 $skip tcp from any to any 110 out via $pif setup keep-state
# Allow out FreeBSD (make install & CVSUP) functions
# Basically give user root "GOD" privileges.
$cmd 070 $skip tcp from me to any out via $pif setup keep-state uid root
# Allow out ping
$cmd 080 $skip icmp from any to any out via $pif keep-state
# Allow out Time
$cmd 090 $skip tcp from any to any 37 out via $pif setup keep-state
# Allow out nntp news (i.e. news groups)
$cmd 100 $skip tcp from any to any 119 out via $pif setup keep-state
# Allow out secure FTP, Telnet, and SCP
# This function is using SSH (secure shell)
$cmd 110 $skip tcp from any to any 22 out via $pif setup keep-state
# Allow out whois
$cmd 120 $skip tcp from any to any 43 out via $pif setup keep-state
# Allow ntp time server
$cmd 130 $skip udp from any to any 123 out via $pif keep-state
#################################################################
# Interface facing Public Internet (Inbound Section)
# Interrogate packets originating from the public Internet
# destine for this gateway server or the private network.
#################################################################
# Deny all inbound traffic from non-routable reserved address spaces
$cmd 300 deny all from 192.168.0.0/16 to any in via $pif #RFC 1918 private IP
$cmd 301 deny all from 172.16.0.0/12 to any in via $pif #RFC 1918 private IP
$cmd 302 deny all from 10.0.0.0/8 to any in via $pif #RFC 1918 private IP
$cmd 303 deny all from 127.0.0.0/8 to any in via $pif #loopback
$cmd 304 deny all from 0.0.0.0/8 to any in via $pif #loopback
$cmd 305 deny all from 169.254.0.0/16 to any in via $pif #DHCP auto-config
$cmd 306 deny all from 192.0.2.0/24 to any in via $pif #reserved for docs
$cmd 307 deny all from 204.152.64.0/23 to any in via $pif #Sun cluster
$cmd 308 deny all from 224.0.0.0/3 to any in via $pif #Class D & E multicast
# Deny ident
$cmd 315 deny tcp from any to any 113 in via $pif
# Deny all Netbios service. 137=name, 138=datagram, 139=session
# Netbios is MS/Windows sharing services.
# Block MS/Windows hosts2 name server requests 81
$cmd 320 deny tcp from any to any 137 in via $pif
$cmd 321 deny tcp from any to any 138 in via $pif
$cmd 322 deny tcp from any to any 139 in via $pif
$cmd 323 deny tcp from any to any 81 in via $pif
# Deny any late arriving packets
$cmd 330 deny all from any to any frag in via $pif
# Deny ACK packets that did not match the dynamic rule table
$cmd 332 deny tcp from any to any established in via $pif
# Allow traffic in from ISP's DHCP server. This rule must contain
# the IP address of your ISP's DHCP server as it's the only
# authorized source to send this packet type.
# Only necessary for cable or DSL configurations.
# This rule is not needed for 'user ppp' type connection to
# the public Internet. This is the same IP address you captured
# and used in the outbound section.
$cmd 360 allow udp from x.x.x.x to any 68 in via $pif keep-state
# Allow in standard www function because I have Apache server
$cmd 370 allow tcp from any to me 80 in via $pif setup limit src-addr 2
# Allow in secure FTP, Telnet, and SCP from public Internet
$cmd 380 allow tcp from any to me 22 in via $pif setup limit src-addr 2
# Allow in non-secure Telnet session from public Internet
# labeled non-secure because ID & PW are passed over public
# Internet as clear text.
# Delete this sample group if you do not have telnet server enabled.
$cmd 390 allow tcp from any to me 23 in via $pif setup limit src-addr 2
# Reject & Log all unauthorized incoming connections from the public Internet
$cmd 400 deny log all from any to any in via $pif
# Reject & Log all unauthorized out going connections to the public Internet
$cmd 450 deny log all from any to any out via $pif
# This is skipto location for outbound stateful rules
$cmd 800 divert natd ip from any to any out via $pif
$cmd 801 allow ip from any to any
# Everything else is denied by default
# deny and log all packets that fell through to see what they are
$cmd 999 deny log all from any to any
################ End of IPFW rules file ###############################
本章将介绍许多与高级网络有关的话题。
读完这一章,您将了解:
关于网关和路由的基础知识。
如何安装 IEEE 802.11 和 Bluetooth®(蓝牙)设备。
怎样用 FreeBSD 做"桥接(bridge)"。
如何为无盘机设置网络启动。
如何设置网络地址转换(NAT)。
如何使用 PLIP 连接两台计算机。
如何在 FreeBSD 主机上设置 IPv6。
如何在 FreeBSD5.X 下配置 ATM。
在读这章之前,您应该:
为了让一台主机在网能找到另一台主机, 就必须要有一种机制来描述如何从一台主机连至另一台上。 这一过程就是 路由选择(routing)。 “路由” 是一对预先定义的地址: “目的地(destination)” 和 “网关(gateway)”。 这对地址说明了, 想要到达 目的地(destination), 就需要通过 网关(gateway) 进行通信。 目的地址有三种类型: 单个主机, 子网(subnets) 和 “默认(default)”。 如果没有应用其它路由, 就会使用 “默认路由”。 关于默认路由将在后面进行更多的讨论。 网关也有三种类型: 单个主机, 接口 (也叫“连接(links)”) 和以太网硬件地址(MAC addresses)。
为了说明路由选择的各个部分, 首先来看看下面的例子。 这是 netstat 命令的输出:
% netstat -r Routing tables Destination Gateway Flags Refs Use Netif Expire default outside-gw UGSc 37 418 ppp0 localhost localhost UH 0 181 lo0 test0 0:e0:b5:36:cf:4f UHLW 5 63288 ed0 77 10.20.30.255 link#1 UHLW 1 2421 example.com link#1 UC 0 0 host1 0:e0:a8:37:8:1e UHLW 3 4601 lo0 host2 0:e0:a8:37:8:1e UHLW 0 5 lo0 => host2.example.com link#1 UC 0 0 224 link#1 UC 0 0
头两行指定默认路由 (我们会在 下一节 说明) 和 本机(localhost) 路由。
这张路由表里指定用于 localhost 的接口 (Netif 列) 是 lo0, 也就是大家熟知的 “回环设备”。 它使得所有以此为 “目的地” 的通信留在本机, 而不是通过 LAN 发出, 因为它会在开始的地方就结束并返回。
接着出现的是以 0:e0: 开头的地址。这些是以太网硬件地址,也称为 MAC 地址。 FreeBSD 会自动识别在同一个以太网中的任何主机 (如 test0), 并为其新增一个路由, 并通过那个以太网接口 -- ed0 直接与它通讯 (译者注:那台主机。与这类路由表相关的也有一个超时项 (Expire列),当我们在指定时间内没有收到从那个主机发来的信息, 这项就派上用场了。这种情况下,到这个主机的路由就会被自动删除。 这些主机被使用一种叫做RIP(路由信息协议--Routing Information Protocol)的机制所识别,这种机制利用基于“最短路径选择 (shortest path determination)”的办法计算出到本地主机的路由。
FreeBSD 也会为本地子网添加子网路由(10.20.30.255 是子网 10.20.30 的广播地址,而 example.com 是这个子网相联的域名)。 名称 link#1 代表主机上的第一块以太网卡。 您会发现,对于它们没有指定另外的接口。
这两个组(本地网络主机和本地子网)的路由是由守护进程 routed 自动配置的。如果它没有运行, 那就只有被静态定义 (例如,明确输入的) 的路由才存在了。
host1 行代表我们的主机,它通过以太网地址来识别。 因为我们是发送端,FreeBSD知道使用回还接口 (lo0) 而不是通过以太网接口来进行发送。
两个 host2 是我们使用 ifconfig(8) 别名 (请看关于以太网的那部分就会知道我们为什么这么做) 时产生的一个实例。在 lo0 接口之后的 => 符号表明我们不仅使用了回环 (因为这个地址也涉及了本地主机),而且明确指出它是个别名。 这类路由只有在支持别名的主机上才能显现出来。 所有本地网上的其它的主机对于这类路由只会简单拥有 link#1。
最后一行 (目标子网224) 用于处理多播——它会覆盖到其它的区域。
最后,每个路由的不同属性可以在 Flags 列中看到。下边是个关于这些标志和它们的含义的一个简表:
当本地系统需要与远程主机建立连接时, 它会检查路由表以决定是否有已知的路径存在。 如果远程主机属于一个我们已知如何到达 (克隆的路由) 的子网内,那么系统会检查看沿着那个接口是否能够连接。
如果所有已知路径都失败,系统还有最后一个选择: “默认”路由。这个路由是特殊类型的网关路由 (通常只有一个存在于系统里),并且总是在标志栏使用一个 c来进行标识。对于本地区域网络里的主机, 这个网关被设置到任何与外界有直接连接的机子里 (无论是通过 PPP、DSL、cable modem、T1 或其它的网络接口连接)。
如果您正为某台本身就做为网关连接外界的机子配置默认路由的话, 那么该默认路由应该是您的“互联网服务商 (ISP)”那方的网关机子。
让我们来看一个关于默认路由的例子。这是个很普遍的配置:

主机 Local1 和 Local2 在您那边。Local1 通过 PPP 拨号连接到了 ISP。这个 PPP 服务器通过一个局域网连接到另一台网关机子——它又通过一个外部接口连接到 ISP 提供的互联网上。
您的每一台机子的默认路由应该是:
一个常见的问题是“我们为什么 (或怎样) 能 T1-GW 设置成为 Local1 默认网关,而不是它所连接 ISP 服务器?”
记住,因为 PPP 接口使用的一个地址是在 ISP 的局域网里的,用于您那边的连接,对于 ISP 的局域网里的其它机子,其路由会自动产生。 因此,您就已经知道了如何到达机子 T1-GW, 那么也就没必要中那一步了——发送通信给 ISP 服务器。
通常使用地址 X.X.X.1 做为一个局域网的网关。 因此 (使用相同的例子),如果您本地的 C 类地址空间是 10.20.30,而您的 ISP 使用的是 10.9.9, 那么默认路由表将是:
| Host | Default Route |
|---|---|
| Local2 (10.20.30.2) | Local1 (10.20.30.1) |
| Local1 (10.20.30.1, 10.9.9.30) | T1-GW (10.9.9.1) |
您可以很轻易地通过 /etc/rc.conf 文件设定默认路由。在我们的实例里,在主机 Local2 里,我们在文件 /etc/rc.conf 里增加了下边内容:
defaultrouter="10.20.30.1"
也可以直接在命令行使用 route(8) 命令:
# route add default 10.20.30.1
要了解关于如何手工维护网络路由表的进一步细节, 请参考 route(8) 联机手册。
还有一种其它的类型的配置是我们要提及的, 这就是一个主机处于两个不同的网络。技术上,任何做为网关 (上边的实例中,使用了 PPP 连接) 的机子就算作是重宿主机。 但这个词实际上仅用来指那种处于两个局域网这中的机子。
有一种情形,一台机子有两个网卡, 对于各个子网都有各自的一个地址。另一种情况, 这台机子仅有一张网卡,但使用 ifconfig(8) 做了别名。如果有两个独立的以太网在使用的情形就使用前者, 如果只有一个物理网段,但逻辑上分成了两个独立的子网, 就使用后者。
每种情况都要设置路由表以便两子网都知道这台主机是到其它子网的网关——入站路由 (inbound route)。将一台主机配置成两个子网间的路由器, 这种配置经常在我们需要实现单向或双向的包过滤或防火墙时被用到。
如果想让主机在两个接口间转发数据包,您需要激活 FreBSD 的这项功能。至于怎么做,请看下一部分了解更多。
网络路由器只是一个将数据包从一个接口转发到另一个接口的系统。 互联网标准和良好的工程实践阻止了 FreeBSD 计划在 FreeBSD 中把它置成默认地。您在可以在 rc.conf(5) 中改变下列变量的值为 YES,使用这个功能生效:
gateway_enable=YES # Set to YES if this host will be a gateway
这个选项会把sysctl(8) 变量——net.inet.ip.forwarding 设置成 1。如果您要临时地停止路由, 您可以把它重为 0。
新的路由器需要有路由才知道将数据传向何处。 如果网络够简单,您可以使用静态路由。FreeBSD 也自带一个标准的BSD路由选择守护进程 routed(8), 称之为 RIP ( version 1和 version 2) 和 IRDP。对 BGP v4,OSPF v2 和其它复杂路由选择协议的支持可以从 net/zebra 包中得到。 像 GateD 一样的商业产品也提供了更复杂的网络路由解决方案。
假设如下这样一个网络:

在这里,RouterA 是我们的 FreeBSD 机子,它充当连接到互联网其它部分的路由器的角色。 默认路由设置为10.0.0.1, 它就允许与外界连接。我们假定已经正确配置了 RouterB,并且知道如何连接到想去的任何地方。 (在这个图里很简单。只须在 RouterB 上增加默认路由,使用 192.168.1.1 做为网关。)
如果我们查看一下RouterA的路由表, 我们就会看到如下一些内容:
% netstat -nr Routing tables Internet: Destination Gateway Flags Refs Use Netif Expire default 10.0.0.1 UGS 0 49378 xl0 127.0.0.1 127.0.0.1 UH 0 6 lo0 10.0.0/24 link#1 UC 0 0 xl0 192.168.1/24 link#2 UC 0 0 xl1
使用当前的路由表,RouterA 是不能到达我们的内网——Internal Net 2 的。它没有到 192.168.2.0/24 的路由。 一种可以接受的方法是手工增加这条路由。以下的命令会把 Internal Net 2 网络加入到 RouterA 的路由表中,使用192.168.1.2 做为下一个跳跃:
# route add -net 192.168.2.0/24 192.168.1.2
现在 RouterA 就可以到达 192.168.2.0/24 网络上的任何主机了。
上面的实例对于运行着的系统来说配置静态路由是相当不错了。 只是,有一个问题——如果您重启您的 FreeBSD 机子,路由信息就会消失。 处理附加的静态路由的方法是把它放到您的 /etc/rc.conf 文件里去。
# Add Internal Net 2 as a static route static_routes="internalnet2" route_internalnet2="-net 192.168.2.0/24 192.168.1.2"
配置变量 static_routes 是一串以空格格开的字符串。每一串表示一个路由名字。 在上面的例子中我们中有一个串在 static_routes 里。这个字符串中 internalnet2。 然后我们新增一个配置变量 route_internalnet2, 这里我们把所有传给 route(8)命令的参数拿了过来。 在上面的实例中的我使用的命令是:
# route add -net 192.168.2.0/24 192.168.1.2
因此,我们需要的是 "-net 192.168.2.0/24 192.168.1.2"。
前边已经提到, 可以把多个静态路由的名称, 放到 static_routes 里边。 接着我们就来建立多个静态路由。 下面几行所展示的, 是在一个假想的路由器上增加 192.168.0.0/24 和 192.168.1.0/24 之间静态路由的例子:
static_routes="net1 net2" route_net1="-net 192.168.0.0/24 192.168.0.1" route_net2="-net 192.168.1.0/24 192.168.1.1"
我们已经讨论了如何定义通向外界的路由, 但未谈及外界是如何找到我们的。
我们已经知道可以设置路由表, 这样任何指向特定地址空间 (在我们的例子中是一个 C 类子网) 的数据都会被送往网络上特定的主机, 然后由这台主机向地址空间内部转发数据。
当您得到一个分配给您的网络的地址空间时, ISP(网络服务商)会设置它们的路由表, 这样指向您子网的数据就会通过 PPP 连接下传到您的网络。 但是其它跨越国界的网络是如何知道将数据传给您的 ISP 的呢?
有一个系统(很像分布式 DNS 信息系统), 它一直跟踪被分配的地址空间, 并说明它们连接到互联网骨干(Internet backbone)的点。 “骨干(Backbone)” 指的是负责全世界和跨国的传输的主要干线。 每一台骨干主机(backbone machine)有一份主要表集的拷贝, 它将发送给特定网络的数据导向相应的骨干载体上(backbone carrier), 从结点往下遍历服务提供商链,直到数据到达您的网络。
服务提供商的任务是向骨干网络广播他们就是到到达您的网点的连接结点 (以及进入的路径)。这就是路由传播。
有时候,路由传播会有一个问题,一些网络无法与您连接。 或许能帮您找出路由是在哪里中断的最有用的命令就是 traceroute(8)了。当您无法与远程主机连接时, 这个命令一样有用(例如 ping(8) 失败)。
traceroute(8) 命令将以您想连接的主机的名字作为参数执行。 不管是到达了目标,还是因为没有连接而终止, 它都会显示所经过的所有网关主机。
想了解更多的信息,查看 traceroute(8) 的手册。
FreeBSD 一开始就支持多播应用软件和多播路由选择。 多播程序并不要求FreeBSD的任何特殊的配置, 就可以工作得很好。多播路由需要支持被编译入内核:
options MROUTING
另外,多播路由守护进程——mrouted(8) 必须通过 /etc/mrouted.conf 配置来开启通道和 DVMRP。 更多关于多播路由配置的信息可以在 mrouted(8) 的手册里找到。
802.11无线设备有两种不同的配置方式:BSS 和 IBSS.
BSS 模式是常用的模式。 它也被叫做“底层结构(infrastructure)”模式。 在此种模式里,一些无线接入点连接到有线网络。 每个无线网络有个名字。这个名字被称为网络的 SSID。
无线客户端连接到这些无线接入点上。 IEEE 802.11 标准定义了用于无线网络连接的协议。 在设定了 SSID 后,一个无线客户端可以连接到一个指定的网络。 若不明确指定 SSID,一个无线客户端可以被连接到任何的网络。
IBSS 模式,也叫专属(ad-hoc)模式, 是设计来进行点对点的接连的。实际上有两种类型的专属模式。 一种是 IBSS 模式,也叫"ad-hoc" 或"IEEE ad-hoc"模式。 这个模式由 IEEE 802.11 标准定义。 第二个叫做演示专属 (demo ad-hoc) 模式或朗讯专属 (Lucent ad-hoc) 模式 (而有时与专属模式是混淆的)。 这个是早先的,准 802.11 专属模式,并且应该只用于过渡性的安装里。 对于两类专属模式我不再做进一步介绍了。
接入点是一种无线网络设备, 它允许一个或更多的无线客户端使用此设备作为中心集线器 (hub)。 使用接入点时, 所有的客户端通过接入点通信。 常用多个接入点来覆盖一个完整的区域,比如一所住房、 一片商业区,或一座公园。
接入点一般具有多个网络连接:无线网卡、 一块或多块用于连接其它网络有线的以太网适配器。
可以购买预建的接入点, 您也可以使用 FreeBSD 及其兼容的无线网卡自己建立接入点。 一些产商制造了带有不同功能的无线接入点和无线网卡。
为了在 FreeBSD 上建立接入点,您要有一块兼容的无线网卡。 至今为止,FreeBSD 只支持带有 Prism 芯片组的网卡。 您还需要被 FreeBSD 支持的有线网卡 (这个不难找到,FreeBSD 支持很多不同的设备)。在这里,我们假定您要桥接 (bridge(4)) 有线网卡连接的网络与无线设备之间的所有传输。
FreeBSD 用来实现接入点的"hostap"功能与一定版本的 firmware (固件) 工作得很好。Prism 2 网卡应该使用 firmware1.3.4或更新的版本。Prism 2.5 和 Prism 3 网卡应使用firmware1.4.9。老版本的firmware 可能无法正常工作。这时候,升级网卡的唯一方式是使用厂商提供的 Windows firmware 升级工具。
首先,确保您的系统能识别无线网卡:
# ifconfig -a
wi0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
inet6 fe80::202:2dff:fe2d:c938%wi0 prefixlen 64 scopeid 0x7
inet 0.0.0.0 netmask 0xff000000 broadcast 255.255.255.255
ether 00:09:2d:2d:c9:50
media: IEEE 802.11 Wireless Ethernet autoselect (DS/2Mbps)
status: no carrier
ssid ""
stationname "FreeBSD Wireless node"
channel 10 authmode OPEN powersavemode OFF powersavesleep 100
wepmode OFF weptxkey 1
现在不用考虑细节部分,只要确认有信息表明您已安装了无线网卡。 如果您无法找到无线接口,您可能使用的是 PC 卡,需要查看 pccardc(8) 和 pccardd(8) 联机手册以获取更多信息。
下一步,您需要加载一个模块使 FreeBSD 的桥接部分为接入点作好准备。 加载桥接 bridge(4) 模块,只需运行以下命令:
# kldload bridge
加载模块应该不会产生任何错误。如果发生了错误, 您就需要将桥接 bridge(4) 代码编译入内核。手册的桥接(Bridging) 部分应该能帮您完成这个任务。
现在已经完成了桥接的组件, 接着我们需要告诉内核将哪些接口桥接在一起。 我们使用 sysctl(8) 来完成:
# sysctl net.link.ether.bridge.enable=1 # sysctl net.link.ether.bridge.config="wi0,xl0" # sysctl net.inet.ip.forwarding=1
在 FreeBSD 5.2 之前的版本中, 则必须使用下面的选项:
# sysctl net.link.ether.bridge=1 # sysctl net.link.ether.bridge_cfg="wi0,xl0" # sysctl net.inet.ip.forwarding=1
现在来设置并启动无线网卡。以下的命令将网卡设置为接入点状态:
# ifconfig wi0 ssid my_net channel 11 media DS/11Mbps mediaopt hostap up stationname "FreeBSD AP"
ifconfig(8) 行用于启动 wi0 接口, 并把它的 SSID 设置为 my_net, 还有把工作站名设置为 FreeBSD AP。 media DS/11Mbps 是把卡设置成 11Mbps 模式, 它是任何mediaopt产生作用所必需的。 mediaopt hostap 选项把接口设置成接入点模式。 channel 11 选项设置为要使用的 802.11b channel(频道)。 wicontrol(8) 手册包含一些有效的channel选项。
现在应该启动并运行着一个完全功能的接入点。 推荐阅读 wicontrol(8),ifconfig(8) 和 wi(4) 以求更深入的了解。
同样建议您阅读接着关于加密那一节。
一旦接入点配置完成且可操作, 操作者都会希望查看连入接入点的客户。 在任何时候,都可以键入:
# wicontrol -l 1 station: 00:09:b7:7b:9d:16 asid=04c0, flags=3<ASSOC,AUTH>, caps=1<ESS>, rates=f<1M,2M,5.5M,11M>, sig=38/15
显示连接了一个站点,接着的是各种参数。 显示的信号通常只作为强度的相对指示。到 dBm 或其它单元的转换因 firmware 版本的不同而有所差异。
一个无线客户端是一个连入接入点或直接连接另一个客户端的系统。
一般地,无线客户端只有一个网络设备,也就是无线网卡。
配置无线客户端的方法有好几种。基于不同的无线模式,一般有 BSS (infrastructure 模式,它需要有一个接入点) 和 IBSS 模式 (ad-hoc,或点对点模式)。在我们的例子中我们使用了最流行的BSS模式, 讨论接入点。
在开始之前,您需要了解有关要连入的无线网络的一些信息。 在本例中,我们将连入一个名为 my_net 的无线网络,且关闭了加密功能。
Note: 在本例中,我们不使用加密,这是非常危险的。 在下一节中,您将会学到如何开启加密和这样做的重要性的原因, 以及为什么一些加密技术仍不能完全地保护您。
确保您的网卡能被 FreeBSD 识别:
# ifconfig -a
wi0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
inet6 fe80::202:2dff:fe2d:c938%wi0 prefixlen 64 scopeid 0x7
inet 0.0.0.0 netmask 0xff000000 broadcast 255.255.255.255
ether 00:09:2d:2d:c9:50
media: IEEE 802.11 Wireless Ethernet autoselect (DS/2Mbps)
status: no carrier
ssid ""
stationname "FreeBSD Wireless node"
channel 10 authmode OPEN powersavemode OFF powersavesleep 100
wepmode OFF weptxkey 1
现在,我们要正确地设置网卡:
# ifconfig wi0 inet 192.168.0.20 netmask 255.255.255.0 ssid my_net
将 192.168.0.20 和 255.255.255.0 替换为有线网络上合法的 IP 地址和网络掩码。记住, 接入点桥连了无线网络和有线网络之间的数据, 所以对于网络上的其它设备来说,您就如同在有线网络上。
完成了这些,您应该能 ping 通有线网络上的主机, 就像是通过有线网络连接的一样。
如果您遇到了问题,确认您是否连上了接入点:
# ifconfig wi0
此命令会返回一些信息,您应该能看到:
status: associated
如果显示没有连接上 (associated), 那您可能在接入点的范围以外,需要关闭加密或者可能有配置问题。
无线网络的加密非常重要因为您无法让网络处于一个被良好保护的区域。 您的无线数据会向整个社区广播,任何人都可以读到它。 这就需要加密。通过加密向电波发送的数据, 使得任何有兴趣的组织从电波中提取数据变得更难。
加密客户端与接入点之间数据的最常用的方法有两种:WEP和ipsec(4)。
WEP 是 Wired Equivalency Protocol(有线等效协议) 的缩写。 WEP试图使无线网络变得如有线网络一样安全与可靠。 不幸的是它已经被攻破,是非常容易被破解的。 这也意味着它不适用于加密敏感数据。
但有总比没有好,使用以下命令 FreeBSD 接入点上打开 WEP:
# ifconfig wi0 inet up ssid my_net wepmode on wepkey 0x1234567890 media DS/11Mbps mediaopt hostap
您可以使用以下这个命令在客户端上打开 WEP:
# ifconfig wi0 inet 192.168.0.20 netmask 255.255.255.0 ssid my_net wepmode on wepkey 0x1234567890
注意您应该将 0x1234567890 替换为更独特的密钥。
ipsec(4) 是一个更加强大的网络数据加密工具。 它无疑是加密无线网络数据的首选。在手册的 IPsec 部分,您将能更多了解 ipsec(4) 的安全性及其实现。
有少量用于诊断和设置无线网络的工具,这里我们将介绍几个这样的工具。
bsd-airtools 包是一套完整的工具集,包括了用于破解 WEP 密匙的无线审核工具,接入点检测等等。
bsd-airtools 工具集可以从net/bsd-airtools port 里安装。关于安装 ports 的信息可以在手册的 第 4 章 里找到。
dstumbler 是一个用于接入点发现和显示音噪比 (noise ratio) 图表的工具。在您启动运行接入点有困难时, dstumbler 可能会帮您大忙。
为了测试无线网络的安全性,您可以选用 “dweputils” (dwepcrack, dwepdump 和 dwepkeygen) 来帮您测定 WEP 是否是您的无线网络安全需要的正确解决方案。
这些工具用于控制无线网卡在无线网络上行为。 在以上的例子中,我们选择了 wicontrol(8), 因为我们的无线网卡是 wi0 接口。 如果您有 Cisco (思科) 的无线设备,出现的将是 an0,于是您可以使用 ancontrol(8)。
ifconfig(8) 命令可以用来处理大量与 wicontrol(8) 相同的设置,但它还是少了几个选项。 查看 ifconfig(8) 可以了解到命令行参数和选项。
现在唯一被支持用于 BSS (作为接入点) 模式的卡都是基于 Prism 2、2.5,或 3 芯片组的。要完整的列表, 查看 wi(4)。
现在几乎所有的 802.11b 无线网卡都能被 FreeBSD 支持。大多数基于 Prism、Spectrum24、Hermes、Aironet 和 Raylink 的网卡能在 IBSS (ad-hoc, peer-to-peer, 和 BSS)模式下工作。
ath(4) 设备驱动能够支持 802.11a 和 802.11g。 如果您的网卡采用的是 Atheros 芯片组, 就可以使用这个驱动。
不幸的是, 由于认为设计许多敏感的商业机密, 许多厂商至今仍不愿意将把驱动程序作为开放源代码形式发布列入时间表。 因此, FreeBSD 以及其它操作系统的开发人员只剩下了两种选择: 要么经历长时间的痛苦过程来对驱动进行逆向工程, 要么使用现存的为 Microsoft Windows 平台编译好的驱动程序。 许多开发人员, 包括参与 FreeBSD 的那些, 选择了后者。
得益于 Bill Paul (wpaul) 的工作, 从 FreeBSD 5.3-RELEASE 开始, 已经可以 “直接” 支持网络驱动接口规范 (NDIS)。 FreeBSD NDISulator (也被称为 Project Evil) 可以支持二进制形式的 Windows 驱动程序, 并让它相信正在运行的是 Windows。 这是一个相对较新的功能, 但许多测试证明, 它确实相当有效。
要使用 NDISulator, 您需要三件东西:
内核源代码
二进制形式的 Windows XP 驱动程序 (扩展名是 .SYS)
Windows XP 驱动程序配置文件 (扩展名是 .INF)
您可能需要编译 ndis(4) 袖珍端口驱动封装模块。 这一操作需要以 root 身份来完成:
# cd /usr/src/sys/modules/ndis # make && make install
找到您的卡所需的文件。 一般来说, 您应该能在随卡的 CD 或者制造商的网站上找到。 下面的例子中, 我们将使用 W32DRIVER.SYS 和 W32DRIVER.INF 这两个名字。
接下来的步骤是将二进制形式的驱动程序组装成内核模块。 要完成这一任务, 需要以 root 身份进入 if_ndis 模块的目录, 并将 Windows 驱动程序复制到这里:
# cd /usr/src/sys/modules/if_ndis # cp /path/to/driver/W32DRIVER.SYS ./ # cp /path/to/driver/W32DRIVER.INF ./
接下来我们将使用 ndiscvt 工具来创建驱动定义的头文件 ndis_driver_data.h, 用以构建驱动程序:
# ndiscvt -i W32DRIVER.INF -s W32DRIVER.SYS -o ndis_driver_data.h
选项 -i 和 -s 分别用于指定配置和二进制形式的驱动程序。 我们使用 -o ndis_driver_data.h 参数, 因为 Makefile 在构建内核模块时会查找它。
Note: 某些 Windows 驱动程序需要一些额外的文件才能正常工作。 您可以把它们放到 ndiscvt 命令的 -f 参数后面。 请参考 ndiscvt(8) 联机手册了解更多详情。
最后, 就可以构建并安装内核模块了:
# make && make install
要使用驱动程序, 您需要加在适当的内核模块:
# kldload ndis # kldload if_ndis
第一个命令会加载 NDIS 袖珍端口驱动封装模块, 第二个则加载实际的网卡。 请查看 dmesg(8) 的输出以了解是否在加载过程中存在错误。 如果一切正常, 您应该能看到类似下面的输出:
ndis0: <Wireless-G PCI Adapter> mem 0xf4100000-0xf4101fff irq 3 at device 8.0 on pci1 ndis0: NDIS API version: 5.0 ndis0: Ethernet address: 0a:b1:2c:d3:4e:f5 ndis0: 11b rates: 1Mbps 2Mbps 5.5Mbps 11Mbps ndis0: 11g rates: 6Mbps 9Mbps 12Mbps 18Mbps 36Mbps 48Mbps 54Mbps
这里您可以像使用其它任何无线设备 (例如 wi0) 那样使用 ndis0 设备。 具体细节可以参考线面章节的讨论。
Bluetooth (蓝牙) 是一项无线技术, 用于建立带宽为 2.4GHZ,波长为 10 米的私有网络。 网络一般是由便携式设备,比加手机 (cellular phone), 掌上电脑 (handhelds) 和膝上电脑 (laptops)) 以 ad-hoc 形式组成。不象其它流行的无线技术——Wi-Fi,Bluetooth 提供了更高级的服务层面,像类 FTP 的文件服务、文件推送 (file pushing)、语音传送、串行线模拟等等。
在 FreeBSD 里,蓝牙栈 (Bluetooth stack) 通过使用 Netgraph 框架 (请看 netgraph(4)) 来的实现。 大量的"Bluetooth USB dongle"由 ng_ubt(4) 驱动程序支持。 基于 Broadcom BCM2033 芯片组的 Bluetooth 设备可以通过 ubtbcmfw(4) 和 ng_ubt(4) 驱动程序支持。 3Com Bluetooth PC 卡 3CRWB60-A 由 ng_bt3c(4) 驱动程序支持。 基于 Serial 和 UART 的蓝牙设备由 sio(4)、ng_h4(4) 和 hcseriald(8)。本节介绍 USB Bluetooth dongle 的使用。在 FreeBSD 5.0 及更新的系统里,都可以支持 Bluetooth。
默认的 Bluetooth 设备驱动程序已存在于内核模块里。 接入设备前,您需要将驱动程序加载入内核:
# kldload ng_ubt
如果系统启动时 Bluetooth 设备已经存在于系统里, 那么从 /boot/loader.conf 里加载这个模块:
ng_ubt_load="YES"
插入USB dongle。控制台(console)(或syslog中)会出现类似如下的信息:
ubt0: vendor 0x0a12 product 0x0001, rev 1.10/5.25, addr 2
ubt0: Interface 0 endpoints: interrupt=0x81, bulk-in=0x82, bulk-out=0x2
ubt0: Interface 1 (alt.config 5) endpoints: isoc-in=0x83, isoc-out=0x3,
wMaxPacketSize=49, nframes=6, buffer size=294
复制 /usr/share/examples/netgraph/bluetooth/rc.bluetooth 到一个合适的地方,如 /etc/rc.bluetooth。 这个脚本用于启动和停止 Bluetooth stack (蓝牙栈)。 最好在拔出设备前停止 stack(stack),当然也不是非做不可。 启动 stack (栈) 时,会得到如下的输出:
# /etc/rc.bluetooth start ubt0 BD_ADDR: 00:02:72:00:d4:1a Features: 0xff 0xff 0xf 00 00 00 00 00 <3-Slot> <5-Slot> <Encryption> <Slot offset> <Timing accuracy> <Switch> <Hold mode> <Sniff mode> <Park mode> <RSSI> <Channel quality> <SCO link> <HV2 packets> <HV3 packets> <u-law log> <A-law log> <CVSD> <Paging scheme> <Power control> <Transparent SCO data> Max. ACL packet size: 192 bytes Number of ACL packets: 8 Max. SCO packet size: 64 bytes Number of SCO packets: 8
主控制器接口 (HCI) 提供了通向基带控制器和连接管理器的命令接口及访问硬件状态字和控制寄存器的通道。 这个接口提供了访问蓝牙基带 (Bluetooth baseband) 功能的统一方式。 主机上的 HCI 层与蓝牙硬件上的 HCI 固件交换数据和命令。 主控制器的传输层 (如物理总线) 驱动程序提供两个 HCI 层交换信息的能力。
为每个蓝牙 (Bluetooth) 设备创建一个 hci 类型的 Netgraph 结点。 HCI 结点一般连接蓝牙设备的驱动结点 (下行流) 和 L2CAP 结点 (上行流)。 所有的HCI操作必须在 HCI 结点上进行而不是设备驱动结点。HCI 结点的默认名是 “devicehci”。更多细节请参考 ng_hci(4) 的联机手册。
最常见的任务是发现在 RF proximity 中的蓝牙 (Bluetooth) 设备。这个就叫做 质询(inquiry)。质询及 HCI 相关的操作可以由 hccontrol(8) 工具来完成。 以下的例子展示如何找出范围内的蓝牙设备。 在几秒钟内您应该得到一张设备列表。 注意远程主机只有被置于 discoverable(可发现) 模式才能答应质询。
% hccontrol -n ubt0hci inquiry
Inquiry result, num_responses=1
Inquiry result #0
BD_ADDR: 00:80:37:29:19:a4
Page Scan Rep. Mode: 0x1
Page Scan Period Mode: 00
Page Scan Mode: 00
Class: 52:02:04
Clock offset: 0x78ef
Inquiry complete. Status: No error [00]
BD_ADDR 是蓝牙设备的特定地址, 类似于网卡的 MAC 地址。需要用此地址与某个设备进一步地通信。 可以为 BD_ADDR 分配由人可读的名字 (human readable name)。 文件 /etc/bluetooth/hosts 包含已知蓝牙主机的信息。 下面的例子展示如何获得分配给远程设备的可读名。
% hccontrol -n ubt0hci remote_name_request 00:80:37:29:19:a4 BD_ADDR: 00:80:37:29:19:a4 Name: Pav's T39
如果在远程蓝牙上运行质询,您会发现您的计算机是 “your.host.name (ubt0)”。 分配给本地设备的名字可随时改变。
蓝牙系统提供点对点连接 (只有两个蓝牙设备参与) 和点对多点连接。在点对多点连接中,连接由多个蓝牙设备共享。 以下的例子展示如何取得本地设备的活动基带 (baseband) 连接列表。
% hccontrol -n ubt0hci read_connection_list Remote BD_ADDR Handle Type Mode Role Encrypt Pending Queue State 00:80:37:29:19:a4 41 ACL 0 MAST NONE 0 0 OPEN
connection handle(连接柄) 在需要终止基带连接时有用。注意:一般不需要手动完成。 栈 (stack) 会自动终止不活动的基带连接。
# hccontrol -n ubt0hci disconnect 41 Connection handle: 41 Reason: Connection terminated by local host [0x16]
参考 hccontrol help 获取完整的 HCI 命令列表。大部分 HCI 命令不需要超级用户权限。
逻辑连接控制和适配协议 (L2CAP) 为上层协议提供面向连接和无连接的数据服务, 并提供多协议功能和分割重组操作。L2CAP 充许上层协议和应用软件传输和接收最大长度为 64K 的 L2CAP 数据包。
L2CAP 基于 通道(channel) 的概念。 通道 (Channel) 是位于基带 (baseband) 连接之上的逻辑连接。 每个通道以多对一的方式绑定一个单一协议 (single protocol)。 多个通道可以绑定同一个协议,但一个通道不可以绑定多个协议。 每个在通道里接收到的 L2CAP 数据包被传到相应的上层协议。 多个通道可共享同一个基带连接。
为每个蓝牙 (Bluetooth) 设备创建一个 l2cap 类型的 Netgraph 结点。 L2CAP 结点一般连接 HCI 结点(下行流)和蓝牙设备的驱动结点(上行流)。 L2CAP 结点的默认名是 “devicel2cap”。 更多细节请参考 ng_l2cap(4) 的联机手册。
一个有用的命令是 l2ping(8), 它可以用来 ping 其它设备。 一些蓝牙实现可能不会返回所有发送给它们的数据, 所以下例中的 0 bytes 是正常的。
# l2ping -a 00:80:37:29:19:a4 0 bytes from 0:80:37:29:19:a4 seq_no=0 time=48.633 ms result=0 0 bytes from 0:80:37:29:19:a4 seq_no=1 time=37.551 ms result=0 0 bytes from 0:80:37:29:19:a4 seq_no=2 time=28.324 ms result=0 0 bytes from 0:80:37:29:19:a4 seq_no=3 time=46.150 ms result=0
l2control(8) 工具用于在 L2CAP 上进行多种操作。 以下这个例子展示如何取得本地设备的逻辑连接 (通道) 和基带连接的列表:
% l2control -a 00:02:72:00:d4:1a read_channel_list L2CAP channels: Remote BD_ADDR SCID/ DCID PSM IMTU/ OMTU State 00:07:e0:00:0b:ca 66/ 64 3 132/ 672 OPEN % l2control -a 00:02:72:00:d4:1a read_connection_list L2CAP connections: Remote BD_ADDR Handle Flags Pending State 00:07:e0:00:0b:ca 41 O 0 OPEN
另一个诊断工具是 btsockstat(1)。 它完成与 netstat(1) 类似的操作, 只是用了蓝牙网络相关的数据结构。 以下这个例子显示与 l2control(8) 相同的逻辑连接。
% btsockstat Active L2CAP sockets PCB Recv-Q Send-Q Local address/PSM Foreign address CID State c2afe900 0 0 00:02:72:00:d4:1a/3 00:07:e0:00:0b:ca 66 OPEN Active RFCOMM sessions L2PCB PCB Flag MTU Out-Q DLCs State c2afe900 c2b53380 1 127 0 Yes OPEN Active RFCOMM sockets PCB Recv-Q Send-Q Local address Foreign address Chan DLCI State c2e8bc80 0 250 00:02:72:00:d4:1a 00:07:e0:00:0b:ca 3 6 OPEN
RFCOMM 协议提供基于 L2CAP 协议的串行端口模拟。 该协议基于 ETSI TS 07.10 标准。RFCOMM 是一个简单的传输协议, 附加了摸拟 9 针 RS-232(EIATIA-232-E) 串行端口的定义。 RFCOMM 协议最多支持 60 个并发连接 (RFCOMM通道)。
为了实现 RFCOMM, 运行于不同设备上的应用程序建立起一条关于它们之间通信段的通信路径。 RFCOMM实际上适用于使用串行端口的应用软件。 通信段是一个设备到另一个设备的蓝牙连接 (直接连接)。
RFCOMM 关心的只是直接连接设备之间的连接, 或在网络里一个设备与 modem 之间的连接。RFCOMM 能支持其它的配置, 比如在一端通过蓝牙无线技术通讯而在另一端使用有线接口。
在FreeBSD,RFCOMM 协议在蓝牙套接字层 (Bluetooth sockets layer) 实现。
默认情况下,蓝牙通信是不需要验证的, 任何设备可与其它任何设备对话。一个蓝牙设备 (比如手机) 可以选择通过验证以提供某种特殊服务 (比如拨号服务)。 蓝牙验证一般使用 PIN码(PIN codes)。 一个 PIN 码是最长为 16 个字符的 ASCII 字符串。 用户需要在两个设备中输入相同的PIN码。用户输入了 PIN 码后, 两个设备会生成一个 连接密匙(link key)。 接着连接密钥可以存储在设备或存储器中。 连接时两个设备会使用先前生成的连接密钥。 以上介绍的过程被称为 结对(pairing)。 注意如果任何一方丢失了连接密钥,必须重新进行结对。
守护进程 hcsecd(8) 负责处理所有蓝牙验证请求。 默认的配置文件是 /etc/bluetooth/hcsecd.conf。 下面的例子显示一个手机的 PIN 码被预设为“1234”:
device {
bdaddr 00:80:37:29:19:a4;
name "Pav's T39";
key nokey;
pin "1234";
}
PIN 码没有限制(除了长度)。有些设备 (例如蓝牙耳机) 会有一个预置的 PIN 码。-d 开关强制 hcsecd(8) 守护进程处于前台,因此很容易看清发生了什么。 设置远端设备准备接收结对 (pairing),然后启动蓝牙连接到远端设备。 远端设备应该回应接收了结对并请求PIN码。输入与 hcsecd.conf 中一样的 PIN 码。 现在您的个人计算机已经与远程设备结对了。 另外您也可以在远程设备上初始结点。以下是简单的 hcsecd 服务输出样本:
hcsecd[16484]: Got Link_Key_Request event from 'ubt0hci', remote bdaddr 0:80:37:29:19:a4 hcsecd[16484]: Found matching entry, remote bdaddr 0:80:37:29:19:a4, name 'Pav's T39', link key doesn't exist hcsecd[16484]: Sending Link_Key_Negative_Reply to 'ubt0hci' for remote bdaddr 0:80:37:29:19:a4 hcsecd[16484]: Got PIN_Code_Request event from 'ubt0hci', remote bdaddr 0:80:37:29:19:a4 hcsecd[16484]: Found matching entry, remote bdaddr 0:80:37:29:19:a4, name 'Pav's T39', PIN code exists hcsecd[16484]: Sending PIN_Code_Reply to 'ubt0hci' for remote bdaddr 0:80:37:29:19:a4
服务发现协议 (SDP) 提供给客户端软件一种方法, 它能发现由服务器软件提供的服务及属性。 服务的属性包括所提供服务的类型或类别, 使用该服务所需要的机制或协议。
SDP 包括 SDP 服务器和 SDP 客户端之间的通信。 服务器维护一张服务记录列表,它介绍服务器上服务的特性。 每个服务记录包含关于单个服务的信息。通过发出 SDP 请求, 客户端会得到服务记录列表的信息。如果客户端 (或者客户端上的应用软件) 决定使用一个服务,为了使用这个服务它必须与服务提供都建立一个独立的连接。 SDP 提供了发现服务及其属性的机制,但它并不提供使用这些服务的机制。
一般地,SDP客户端按照服务的某种期望特征来搜索服务。 但是,即使没有任何关于由 SDP 服务端提供的服务的预设信息, 有时也能令人满意地发现它的服务记录里所描述的是哪种服务类型。 这种发现所提供服务的过程称为 浏览(browsing)。
蓝牙 SDP 服务端 sdpd(8) 和命令行客户端 sdpcontrol(8) 都包括在了标准的 FreeBSD 安装里。 下面的例子展示如何进行 SDP 浏览查询。
% sdpcontrol -a 00:01:03:fc:6e:ec browse
Record Handle: 00000000
Service Class ID List:
Service Discovery Server (0x1000)
Protocol Descriptor List:
L2CAP (0x0100)
Protocol specific parameter #1: u/int/uuid16 1
Protocol specific parameter #2: u/int/uuid16 1
Record Handle: 0x00000001
Service Class ID List:
Browse Group Descriptor (0x1001)
Record Handle: 0x00000002
Service Class ID List:
LAN Access Using PPP (0x1102)
Protocol Descriptor List:
L2CAP (0x0100)
RFCOMM (0x0003)
Protocol specific parameter #1: u/int8/bool 1
Bluetooth Profile Descriptor List:
LAN Access Using PPP (0x1102) ver. 1.0
...等等。注意每个服务有一个属性 (比如 RFCOMM 通道)列表。 根据服务您可能需要为一些属性做个注释。 有些“蓝牙实现 (Bluetooth implementation)”不支持服务浏览, 可能会返回一个空列表。这种情况,可以搜索指定的服务。 下面的例子展示如何搜索 OBEX Object Push (OPUSH) 服务:
% sdpcontrol -a 00:01:03:fc:6e:ec search OPUSH
要在 FreeBSD 里为蓝牙客户端提供服务,可以使用 sdpd(8) 服务:
# sdpd
需要为远端提供蓝牙服务的本地的服务程序会使用本地 SDP 进程注册服务。像这样的程序就有 rfcomm_pppd(8)。 一旦启动它,就会使用本地 SDP 进程注册蓝牙 LAN 服务。
使用本地 SDP 进程注册的服务列表,可以通过本地控制通道发出 SDP 浏览查询获得:
# sdpcontrol -l browse
拨号网络 (DUN) 配置通常与 modem 和手机一起使用。 如下是这一配置所涉及的内容:
计算机使用手机或 modem 作为无线 modem 来连接拨号因特网连入服务器, 或者使用其它的拨号服务;
计算机使用手机或 modem 接收数据请求。
使用 PPP(LAN) 层面的网络接入常使用在如下情形:
单个蓝牙设备的局域网连入;
多个蓝牙设备的局域网接入;
PC 到 PC (使用基于串行线模拟的 PPP 网络)。
在 FreeBSD 中,两个层面使用 ppp(8) 和 rfcomm_pppd(8) (一种封装器,可以将 RFCOMM 蓝牙连接转换为 PPP 可操作的东西) 来实现。 在使用任何层面之前,一个新的 PPP 标识必须在 /etc/ppp/ppp.conf 中建立。 想要实例请参考 rfcomm_pppd(8)。
在下面的例子中,rfcomm_pppd(8) 用来在 NUN RFCOMM 通道上打开一个到 BD_ADDR 为 00:80:37:29:19:a4 的设备的 RFCOMM 连接。具体的 RFCOMM 通道号要通过 SDP 从远端设备获得。也可以手动指定通 RFCOMM,这种情况下 rfcomm_pppd(8) 将不能执行 SDP 查询。使用 sdpcontrol(8) 来查找远端设备上的 RFCOMM 通道。
# rfcomm_pppd -a 00:80:37:29:19:a4 -c -C dun -l rfcomm-dialup
为了提供 PPP(LAN) 网络接入服务,必须运行 sdpd(8) 服务。一个新的 LAN 客户端条目必须在 /etc/ppp/ppp.conf 文件中建立。 想要实例请参考 rfcomm_pppd(8)。 最后,在有效地通道号上开始 RFCOMM PPP 服务。 RFCOMM PPP 服务会使用本地 SDP 进程自动注册蓝牙 LAN 服务。下面的例子展示如何启动 RFCOMM PPP 服务。
# rfcomm_pppd -s -C 7 -l rfcomm-server
OBEX协议被广泛地用于移动设备之间简单的文件传输。 它的主要用处是在红外线通信领域, 被用于笔记本或手持设备之间的一般文件传输。
OBEX 服务器和客户端由第三方软件包 obexapp实现,它可以从 comms/obexapp port 安装。
OBEX 客户端用于向 OBEX 服务器推入或接出对象。 一个对像可以是(举个例子)商业卡片或约会。 OBEX 客户能通过 SDP 从远程设备取得 RFCOMM 通道号。这可以通过指定服务名代替 RFCOMM 通道号来完成。支持的服务名是有:IrMC、FTRN 和 OPUSH。 也可以用数字来指定 RFCOMM 通道号。下面是一个 OBEX 会话的例子,一个设备信息对像从手机中被拉出, 一个新的对像被推入手机的目录。
% obexapp -a 00:80:37:29:19:a4 -C IrMC obex> get telecom/devinfo.txt devinfo-t39.txt Success, response: OK, Success (0x20) obex> put new.vcf Success, response: OK, Success (0x20) obex> di Success, response: OK, Success (0x20)
为了提供 OBEX 推入服务,sdpd(8) 必须处于运行状态。必须创建一个根目录用于存放所有进入的对象。 根文件夹的默认路径是 /var/spool/obex。 最后,在有效的 RFCOMM 通道号上开始 OBEX 服务。OBEX 服务会使用 SDP 进程自动注册 OBEX 对象推送 (OBEX Object Push) 服务。 下面的例子展示如何启动 OBEX 服务。
# obexapp -s -C 10
串口(SP)层面允许蓝牙设备完成 RS232 (或类似) 串口线的仿真。 这个层面所涉及到情形是, 通过虚拟串口使用蓝牙代替线缆来处理以前的程序。
工具 rfcomm_sppd(1) 来实现串口层。 “Pseudo tty” 用来作为虚拟的串口。 下面的例子展示如何连接远程设备的串口服务。 注意您不必指定 RFCOMM 通道——rfcomm_sppd(1) 能够通过 SDP 从远端设备那里获得。 如果您想代替它的话,可以在命令行里指定 RFCOMM 通道来实现:
# rfcomm_sppd -a 00:07:E0:00:0B:CA -t /dev/ttyp6 rfcomm_sppd[94692]: Starting on /dev/ttyp6...
一旦连接上,“pseudo tty”就可以充当串口了:
# cu -l ttyp6
一些较老的蓝牙设备并不支持角色转换 (role switching)。默认情况下,FreeBSD 接受一个新的连接时, 它会尝试进行角色转换并成为主控端 (master)。 不支持角色转换的设备将无法连接。 注意角色转换是在新连接建立时运行的, 因此如果远程设备不支持角色转换,就不可能向它发出请求。 一个 HCI 选项用来在本地端禁用角色转换。
# hccontrol -n ubt0hci write_node_role_switch 0
可以。 需要借助第三方软件包 hcidump, 它可以通过 comms/hcidump port 来安装。 hcidump 工具和 tcpdump(1) 非常相像。 它可以用来显示蓝牙数据包的内容, 并将其记录到文件中。
有时候需要将一个物理网络分成两个独立的网段, 而无需创建新的 IP 子网和连接两个网段的路由器。 以这种方式连接两个网络的设备称为“网桥 (bridge)”。 有两个网络接口的 FreeBSD 系统可以作为网桥。
网桥通过学习每个网络接口上的 MAC 层地址 (以太网地址) 工作。 只当数据包的源地址和目标地址处于不同网络时网桥才进行转发。
在很多方面,网桥就像一个带有很少端口的以太网交换机。
目前,有两种常见的情况下使用网桥。
一种情况是您的物理网段流量过载, 但是您不希望划分子网以路由器连接两个子网。
让我们考虑一个关于报社的例子, 它的编辑部和产品部处于同一子网中。 所有的编辑用户都使用服务器 A 的文件服务,而产品部使用服务器 B。 一个以太网将所有的用户连接在一起, 高的流量负载使得网络速度变慢。
如果编辑部的用户能被分隔到一个网段中, 产品部用户被分隔到另一个网段中那么这两个网段可以通过网桥连接起来。 只当数据包目标为网桥“其它”端接口时, 它才会被传到其它的网络上——这样就减少了各个网络的拥塞。
第二种常见的情况是需要防火墙的地方没有进行网络地址转换(NAT)。
一个例子是一个小公司,它通过 DSL 或 ISDN 连接到 ISP。 它拥有 13 个 ISP 分配的全局 IP 地址和 10 台 PC。 在这种情况下,由于划分子网的问题, 使用基于路由的防火墙存在一定难度。
一个基于网桥的防火墙可以成接在 DSL/ISDN 路由器的后面而免去了所有的 IP 号问题。
一个网桥至少需要两块网卡才能运行。 不幸的是,并不是所有的网卡都能被 FreeBSD 4.0 支持用于桥接。阅读 bridge(4) 了解所支持网卡的细节。
在继续之前要先安装并测试这两块网卡。
如果您打算把网桥作为防火墙来使用, 则还需要加入 IPFIREWALL 的设置。 请参考 第 24 章 以了解关于将网桥配置为防火墙的其它信息。
如果允许非IP(non-IP)数据包 (比如 ARP) 穿过网桥, 必须设置一个防火墙 (firewall) 选项。这个选项是 IPFIREWALL_DEFAULT_TO_ACCEPT。 注意:这个选项改变了默认的规则使得防火墙接受任何的数据包。 在您设置这些规则前,请确认这些规则可能会产生什么后果。
增加下行:
net.link.ether.bridge.enable=1
到 /etc/sysctl.conf 里, 以便在运行时激活网桥,然后加下行:
net.link.ether.bridge.config=if1,if2
以便在指定的接口上激活网桥 (使用您的两个网络接口的名字替换 if1 和 if2 )。如果您希望用 ipfw(8) 来过滤桥接的数据包,您还应该加入:
net.link.ether.bridge.ipfw=1
这样一行。
对于 FreeBSD 5.2-RELEASE 和更早的版本, 则应使用下面的配置:
net.link.ether.bridge=1 net.link.ether.bridge_cfg=if1,if2 net.link.ether.bridge_ipfw=1
如果您希望可以从网络上 ssh(1) 进入网桥, 给一个网卡分配 IP 地址就可以了。 原则上给两张卡分配一个地址是很不好的。
如果网络中有多个网桥, 任何两个工作站之间的路径不能多于一条。 技术上说,它的意思是不支持生成连接树管理。
网桥会增加 ping(8) 的延迟时间, 尤其是不同网段之间的传输。
FreeBSD 主机可以从网络启动而无需本地磁盘就可操作, 使用的是从 NFS 服务器装载的文件系统。 除了标准的配置文件,无需任何的系统修改。 很容易设置这样的系统因为所有必要的元素都很容易得到:
至少有两种可能的方法从网络加载内核:
PXE:Intel 的先启动执行环境 (Preboot Xecution Environment) 系统是一种灵活的引导 ROM 模式,这个 ROM 内建在一些网卡或主板的中。查看 pxeboot(8) 以获取更多细节。
Etherboot port (net/etherboot) 产生通过网络加载内核的可 ROM 代码。这些代码可以烧入网卡上的 PROM 上,或从本地软盘 (或硬盘) 驱动器加载,或从运行着的 MS-DOS 系统加载。它支持多种网卡。
一个样板脚本 (/usr/share/examples/diskless/clone_root) 简化了对服务器上的工作站根文件系统的创建和维护。 这个脚本需要少量的自定义,但您能很快的熟悉它。
/etc 存在标准的系统启动文件用于侦测和支持无盘的系统启动。
可以向 NFS 文件或本地磁盘进行交换(如果需要的话)。
设置无盘工作站有许多方法。 有很多相关的元素大部分可以自定义以适合本地情况。 以下将介绍一个完整系统的安装,强调的是简单性和与标准 FreeBSD 启动脚本的兼容。介绍的系统有以下特性:
无盘工作站使用一个共享的只读 / 文件系统和一个共享的只读/usr。
root 文件系统是一份标准的 FreeBSD 根文件系统 (一般是服务器的),只是一些配置文件被特定于无盘操作的配置文件覆盖。
root 文件系统必须可写的部分被 mfs(8) (FreeBSD 4.X) 或 md(4) (FreeBSD 5.X) 文件系统覆盖。 任何的改写在重启后都会丢失。
内核由 etherboot 或 PXE 传送和加载, 有些情况可能会指定使用其中之一。
Caution如上所述,这个系统是不安全的。 它应该处于网络的受保护区域并不被其它主机信任。
这部分所有的信息都已使用 FreeBSDreleases 4.9-RELEASE 和 5.2.1-RELEASE 测试过。文本主是使用 4.X 格式组织的。为适应 5.X 的改变,都有注释被加入。
设置无盘工作站相对要简单而又易出错。 有时分析一些原因是很难的。例如:
编译时选项在运行时可能产生不同的行为。
出错信息经常是加密了的或根本就没有。
在这里, 涉及到的一些背景知识对于可能出现的问题的解决是很有帮助的。
要成功地引导系统还有些操作需要做。
机子需要获取初始的参数,如它的 IP 地址、执行文件、服务器名、根路径。这个可以使用 或 BOOTP 协议来完成。 DHCP 是 BOOTP 的兼容扩展, 并使用相同的端口和基本包格式。
只使用 BOOTP 来配置系统也是可行的。 bootpd(8) 服务程序被包含在基本的 FreeBSD 系统里。
不过,DHCP 相比 BOOTP 有几个好处 (更好的配置文件,使用 PXE 的可能性,以及许多其它并不直接相关的无盘操作), 接着我们会要描述一个 DHCP 配置, 可能的话会利用与使用 bootpd(8) 相同的例子。这个样板配置会使用ISC DHCP 软件包 (3.0.1.r12 发行版安装在测试服务器上)。
机子需要传送一个或多个程序到本地内存。 TFTP 或 NFS 会被使用。选择TFTP 还是 NFS 需要在几个地方的“编译时间”选项里设置。 通常的错误源是为文件名指定了错误的协议:TFTP 通常从服务器里的一个单一目录传送所有文件,并需要相对这个目录的文件名。 NFS 需要的是绝对文件路径。
介于启动程序和内核之间的可能的部分需要被初始化并执行。 在这部分有几个重要的变量:
PXE 会装入 pxeboot(8)——它是 FreeBSD 第三阶段装载器的修改版。 loader(8) 会获得许多参数用于系统启动, 并在传送控制之前把它们留在内核环境里。 在这种情况下,使用 GENERIC 内核就可能了。
Etherboot 会做很少的准备直接装载内核。 您要使用指定的选项建立 (build) 内核。
PXE 和 Etherboot 在 4.X 系统里工作得一样的好。因为 5.X 内核通常让 loader(8) 做了更多的事情,PXE 比较适合 5.X 系统。
如果您的 BIOS 和网卡支持 PXE,您应该使用它。当然, 使用 Etherboot 依然可以启动 5.X 系统。
最后,机子需要访问它的文件系统。 NFS 使用在所有的情况下。
查看 diskless(8) 手册页。
ISC DHCP 服务器可以回应 BOOTP 和 DHCP 的请求。
对于4.9的发行版,ISC DHCP 3.0 并不属于基本系统。首先您需要安装 net/isc-dhcp3-server port 或相应的“包”。
一旦安装了 ISC DHCP, 还需要一个配置文件才能运行 (通常名叫 /usr/local/etc/dhcpd.conf)。 这里有个注释过的例子,里边主机 margaux 使用 Etherboot, 而主机corbieres 使用 PXE:
default-lease-time 600;
max-lease-time 7200;
authoritative;
option domain-name "example.com";
option domain-name-servers 192.168.4.1;
option routers 192.168.4.1;
subnet 192.168.4.0 netmask 255.255.255.0 {
use-host-decl-names on;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.4.255;
host margaux {
hardware ethernet 01:23:45:67:89:ab;
fixed-address margaux.example.com;
next-server 192.168.4.4;
filename "/data/misc/kernel.diskless";
option root-path "192.168.4.4:/data/misc/diskless";
}
host corbieres {
hardware ethernet 00:02:b3:27:62:df;
fixed-address corbieres.example.com;
next-server 192.168.4.4;
filename "pxeboot";
option root-path "192.168.4.4:/data/misc/diskless";
}
}




这里紧跟的是一个等效的 bootpd 配置 (减少到一个客户端)。这个可以在 /etc/bootptab 里找到。
请注意:为了使用BOOTP,etherboot 必须使用非默认选项 NO_DHCP_SUPPORT 来进行编译,而且 PXE 需要 DHCP。bootpd 的唯一可见的好处是它存在于基本系统中。
.def100:\ :hn:ht=1:sa=192.168.4.4:vm=rfc1048:\ :sm=255.255.255.0:\ :ds=192.168.4.1:\ :gw=192.168.4.1:\ :hd="/tftpboot":\ :bf="/kernel.diskless":\ :rp="192.168.4.4:/data/misc/diskless": margaux:ha=0123456789ab:tc=.def100
Etherboot 的网站 包含有更多的文档 ——主要瞄准的是 Linux 系统,但无疑包含有有用的信息。 如下列出的是关于在 FreeBSD 系统里使用 Etherboot。
首先您必须安装net/etherboot 包或 port。
您可以改变 Etherboot 的配置 (如使用 TFTP 来代替 NFS), 方法是修改 Config 文件——在 Etherboot 源目录里。
对于我们的设置,我们要使用一张启动软盘。 对于其它的方法(PROM,或 MS-DOS程序), 请参考 Etherboot 文档。
想要使用启动软盘,先插入一张软盘到安装有 Etherboot 的机器的驱动器里, 然后把当前路径改到 src 目录——在 Etherboot 树下, 接着输入:
# gmake bin32/devicetype.fd0
devicetype 依赖于无盘工作站上的以太网卡的类型。 参考在同一个目录下的 NIC 文件确认正确的 devicetype。
默认地,pxeboot(8) 装载器通过 NFS 装载内核。它可以编译来使用 TFTP——通过在文件 /etc/make.conf 里指定 LOADER_TFTP_SUPPORT 选项来代替。查看 /etc/defaults/make.conf 里的注释 (或5.X系统的 /usr/share/examples/etc/make.conf) 可以获得指导。
其它有两个未说明的 make.conf 选项——它可能对于设置一系列控制台无盘机器会有用: BOOT_PXELDR_PROBE_KEYBOARD和 BOOT_PXELDR_ALWAYS_SERIAL (后者只存在于 FreeBSD 5.X 里)。
当机器启动里,要使用 PXE, 通常需要选择 Boot from network 选项——在 BIOS 设置里, 或者在 PC 初始化的时候输入一个功能键 (function key)。
如果您正在使用 PXE 或 Etherboot——配置使用了 TFTP,那么您需要在文件服务器上启用 tftpd:
建立一个目录——从那里 tftpd 可以提供文件服务,如 /tftpboot。
把这一行加入到 /etc/inetd.conf里:
tftp dgram udp wait root /usr/libexec/tftpd tftpd -l -s /tftpboot
Note: 好像有一些版本的 PXE 需要 TCP 版本的 TFTP。 在这种情况下,加入第二行,使用 stream tcp 来代替 dgram udp。
让 inetd 重读它的配置文件:
# kill -HUP `cat /var/run/inetd.pid`
您可把 tftpboot 目录放到服务器上的什何地方。 确定这个位置设置在 inetd.conf 和 dhcpd.conf 里。
在所有的情况下,您都需要启用 NFS, 并且 NFS 服务器上导出相应的文件系统。
把这一行加入到/etc/rc.conf里:
nfs_server_enable="YES"
通过往 /etc/exports 里加入下面几行(调整“载入点”列, 并且使用无盘工作站的名字替换 margaux corbieres), 导出文件系统——无盘根目录存在于此:
/data/misc -alldirs -ro margaux corbieres
让 mountd 重读它的配置文件。如果您真的需要启用第一步的 /etc/rc.conf 里 NFS, 您可能就要重启系统了。
# kill -HUP `cat /var/run/mountd.pid`
如果您在使用 Etherboot, 您需要为无盘客户端建立内核配置文件, 使用如下选项(除了常使用的外):
options BOOTP # Use BOOTP to obtain IP address/hostname options BOOTP_NFSROOT # NFS mount root filesystem using BOOTP info
您可能也想使用 BOOTP_NFSV3, BOOT_COMPAT 和 BOOTP_WIRED_TO (参考 4.X 里的 LINT 或5.X里的 NOTES)。
这些名字具有历史性,并且有些有些误导, 因为它们实际上启用了内核里 (它可能强制限制 BOOTP 或 DHCP 的使用),与 DHCP 和 BOOTP 的无关的应用。
编译内核(参考第 8 章), 然后将它复制到 dhcpd.conf 里指定的地方。
Note: 当使用 PXE 里, 使用以上选项建立内核并不做严格要求(尽管建议这样做)。 启用它们会在内核启动时引起更多的 DHCP 提及过的请求,带来的小小的风险是在有些特殊情况下新值和由 pxeboot(8) 取回的值之间的不一致性。 使用它们的好处是主机名会被附带设置。否则, 您就需要使用其它的方法来设置主机名,如在客户端指定的 rc.conf 文件里。
Note: 为了使带有 Etherboot 的 5.X 内核可引导,就需要把设备提示 (device hint) 编译进去。通常要在配置文件(查看 NOTES 配置注释文件) 里设置下列选项:
hints "GENERIC.hints"
您需要为无盘工作站建立根文件系统,位置列在 dhcpd.conf 里的 root-path 里边。下面部分描述了要这样做的两种方法:
这是建立根文件系统最快的方法,只是目前只在 FreeBSD4.X 里支持。这个 shell 脚本位于 /usr/share/examples/diskless/clone_root 并且需要定制,至少需要调整将会被建立文件系统的地方 (DEST 可变)。
参考用于指导的脚本的最前边的注释。 它们说明了如何建立一个基本文件系统, 并且如果根据特定版本的无盘工作站、子网或个人工作站选择性地忽略。 它们也为无盘的 /etc/fstab 的 /etc/rc.conf 文件给出了例子。
在 /usr/share/examples/diskless 里的 README 文件包含了许多有趣的背景信息, 但是,他们同 diskless 目录里的其它例子一起, 实际上说明了一种配置方法——与被 clone_root 和 /etc 里的系统启动脚本使用的完全不同,这个有点迷惑人。 使用它们只用做参考, 除非您使用它们所描述的方法——这种情况下您需要定制 rc 脚本。
这种方法可以应用到 FreeBSD 4.X 或 5.X, 而且会安装一个彻底干净的系统(不仅仅是根文件系统)到 DESTDIR。您需要做的就是简单地执行下面的脚本:
#!/bin/sh
export DESTDIR=/data/misc/diskless
mkdir -p ${DESTDIR}
cd /usr/src; make world && make kernel
cd /usr/src/etc; make distribution
一旦完成,您可能需要定制 /etc/rc.conf 和 /etc/fstab——根据您的需要放到 DESTDIR里。
如果需要,位于服务器上的交换文件可以通过 NFS 来访问。完成它的一种普遍使用的方法在 5.X 的发行版里已不再继续(使用)。
交换文件的位置和大小可以使用BOOTP/DHCP 来指定,FreeBSD 指定的选项是 128 和 129。用于 ISC DHCP 3.0 或 bootpd的配置文件例子如下:
把下边几行加到 dhcpd.conf 里:
# Global section
option swap-path code 128 = string;
option swap-size code 129 = integer 32;
host margaux {
... # Standard lines, see above
option swap-path "192.168.4.4:/netswapvolume/netswap";
option swap-size 64000;
}
swap-path 指的是存放交换文件存的路径。 每个文件会命名为 swap.client-ip。
旧版的 dhcpd 使用的风格是 option option-128 "...,这个已不在支持。
/etc/bootptab 会使用下面的格式代替:
T128="192.168.4.4:/netswapvolume/netswap":T129=0000fa00
Note: 在 /etc/bootptab 里, 交换大小必须以十六进制表示。
在 NFS 交换文件服务器上,建立交换文件:
# mkdir /netswapvolume/netswap
# cd /netswapvolume/netswap
# dd if=/dev/zero bs=1024 count=64000 of=swap.192.168.4.6
# chmod 0600 swap.192.168.4.6
192.168.4.6 是无盘客户端的 IP 地址。
在 NFS 交换文件服务器上, 增加下面几行到 /etc/exports:
/netswapvolume -maproot=0:10 -alldirs margaux corbieres
然后让 mountd 重读 exports文件,同上。
这个内核在启动时并不支持启用 NFS。 Swap 必须在启动脚本里启用,方法是装入一个可写的文件系统, 然后建立和启用交换文件。要建立一个适当大小的交换文件, 您可以这样做:
# dd if=/dev/zero of=/path/to/swapfile bs=1k count=1 oseek=100000
要启用它,您须要把下面几行加到 rc.conf里:
swapfile=/path/to/swapfile
如果无盘工作站是配置来支持 X, 那么您就必须调整 XDM 配置文件,因为它默认把错误信息写到 /usr。
当用作根文件系统的服务器运行的是不 FreeBSD,您须要在 FreeBSD 机器上建立根文件系统, 然后把它复制到它的目的地,使用的命令可以是 tar 或 cpio。
在这种情况下,有时对于 /dev 里的一些特殊的文件会有问题,原因就是不同的 “最大/最小”整数大小。 一种解决的方法就是从非 FreeBSD 服务里导出一个目录, 并把它载入 FreeBSD 到机子上,然后在 FreeBSD 机子上执行 MAKEDEV 来建立正确的设备条目 (FreeBSD 5.0及新版使用 devfs(5) 来为用户透明地分派设备节点,在这些版本上执行 MAKEDEV 是毫无意义的)。
关于 ISDN 技术和硬件的一个好的资源是Dan Kegel 的 ISDN 主页。
一个快速简单的到 ISDN 的路线图如下:
如果您住在欧洲,您可能要查看一下 ISDN 卡部分。
如果您正计划首要地使用 ISDN 基于拨号非专用线路连接到带有提供商的互联网, 您可能要了解一下终端适配器。如果您更改提供商的话, 这会给您带来最大的灵活性、最小的麻烦。
如果您连接了两个局域网 (LAN),或使用了专用的 ISDN 连线连接到互联网,您可能要考虑选择单独的路由器/网桥。
在决定选择哪一种方案的时候,价格是个很关键的因素。 下面列有从不算贵到最贵的选择:
FreeBSD 的 ISDN 工具通过被动卡 (passive card) 仅支持 DSS1/Q.931(或 Euro-ISDN) 标准。启动 FreeBSD 4.4,有些主动卡 (active card) 也被支持, 这时它也支持其它发信协议;包括有最先支持的 “Primary Rate (PRI) ISDN”卡。
isdn4bsd 软件允许连接到其它 ISDN 路由器,使用的是原始的 HDLC 上的 IP 或利用同步 PPP:使用带有 isppp (一个修改过的 sppp(4) 驱动程序)的 PPP 内核,或使用用户区 (userland) ppp(8)。通过使用 userland ppp(8),两个或更多 ISDN 的 B 通道联结变得可能。 除了许多如 300 波特 (Baud) 的软 modem 一样的工具外, 还可以实现电话应答机应用。
在 FreeBSD 里,正有更多的 PC ISDN 卡被支持; 报告显示在整个欧洲及世界的其它许多地区可以成功使用。
被支持的主动型 ISDN 卡主要是带有 Infineon (以前的 Siemens) ISAC/HSCX/IPAC ISDN 芯片组,另外还有带有 Cologne (只有 ISA 总线) 芯片的 ISDN 卡、带有 Winbond W6692 芯片的 PCI 卡、一部分带有 Tiger300/320/ISAC 芯片组的卡以及带有一些商家专有的芯片组的卡 (如 AVM Fritz!Card PCI V.1.0 和 the AVM Fritz!Card PnP)。
当前积极的支持的 ISDN 卡有 AVM B1 (ISA 和 PCI) BRI 卡和 AVM T1 PCI PRI 卡。
关于 isdn4bsd 的文档,请查看 FreeBSD 系统里的 /usr/share/examples/isdn/ 目录或查看 isdn4bsd的主页, 那里也有提示、勘误表以及更多的文档 (如 isdn4bsd手册)。
要是您有兴趣增加对不同 ISDN 协议的支持,对当前还不支持的 ISDN PC 卡的支持或想增强 isdn4bsd 的性能,请联系 Hellmuth Michaelis <hm@FreeBSD.org>。
对于安装、配置以及 isdn4bsd 故障排除的问题,可以利用 freebsd-isdn 邮件列表。
终端适配器 (TA) 对于 ISDN 就好比 modem 对于常规电话线。
许多 TA 使用标准的 Hayes modem AT 命令集,并且可以降级来代替 modem。
TA 基本的运作同 modem 一样,不同之处是连接和整个速度更比老 modem 更快。同 modem 的安装一样,您也需要配置 PPP。确认您的串口速度已足够高。
使用 TA 连接互联网提供商的主要好处是您可以做动态的 PPP。 由于 IP 地址空间变得越来越紧张,许多提供商都不愿再提供静态 IP。许多的独立的路由器是不支持动态 IP 分配的。
TA 完全依赖于您在运行的 PPP 进程, 以完成它们的功能和稳定的连接。这可以让您在 FreeBSD 机子里轻易地从使用 modem 升级到 ISDN,要是您已经安装了 PPP 的话。只是,在您使用 PPP 程序时所体验到任何问题同时也存在。
如果您想要最大的稳定性,请使用 PPP 内核选项,而不要使用 userland PPP。
下面的 TA 就可以同 FreeBSD 一起工作:
Motorola BitSurfer 和 Bitsurfer Pro
Adtran
大部分其它的 TA 也可能工作,TA 提供商试图让他们的产品可以接受大部分的标准 modem AT 命令集。
对于外置 TA 的实际问题是:象 modem 要一样,您机子需要有一个好的串行卡。
想要更深入地理解串行设备以及异步和同步串口这间的不同点, 您就要读读 FreeBSD 串行硬件教程了。
TA 将标准的 PC 串口 (同步的) 限制到了 115.2 Kbs,即使您有 128 Kbs 的连接。 想要完全利用 ISDN 有能力达到的 128 Kbs,您就需要把 TA 移到同步串行卡上。
当心被骗去买一个内置的 TA 以及自认为可以避免同步/异步问题。内置的 TA 只是简单地将一张标准 PC 串口芯片内建在里边。 所做的这些只是让您省去买另一根串行线以及省去寻找另一个空的插孔。
带有 TA 的同步卡至少和一个独立的路由器同一样快地, 而且仅使用一个简单的 386 FreeBSD 盒驱动它。
选择同步卡/TA 还是独立的路由器,是个要高度谨慎的问题。 在邮件列表里有些相关的讨论。我们建议您去搜索一下关于完整讨论的记录。
ISDN 桥或路由器根本就没有指定要 FreeBSD 或其它任何的操作系统。更多完整的关于路由和桥接技术的描述, 请参考网络指南的书籍。
这部分的内容里,路由器和桥接这两个词汇将会交替地使用。
随着 ISDN 路由器/桥的价格下滑,对它们的选择也会变得越来越流行。 ISDN 路由器是一个小盒子,可以直接地接入您的本地以太网, 并且自我管理到其它桥/路由器的连接。它有个内建的软件用于与通信——通过 PPP 和其它流行的协议。
路由器有比标准 TA 更快的吞吐量,因为它会使用完全同步的 ISDN 连接。
使用 ISDN 路由器和桥的主要问题是两个生产商之间的协同性仍存在问题。 如果您计划连接到互联网提供商,您应该跟他们进行交涉。
如果您计划连接两个局域网网段,如您的家庭网和办公网, 这将是最简单最低维护的解决方案。因为您买的设备是用于连接两边的, 可以保证这种连接一定会成功。
例如连接到家里的计算机,或者是办公网里的一个分支连接到办公主网, 那么下面的设置就可能用到:
Example 25-1. 办公室局部或家庭网
网络使用基于总线拓扑的 10 base 2 以太网 (“瘦网(thinnet)”)。如果有必要,用网线连接路由器和 AUI/10BT 收发器。

如果您的家里或办公室支部里只有一台计算机, 您可以使用一根交叉的双绞线直接连接那台独立路由器。
大部分路由器/网桥有一大好处就是,它们允许您在 同一 时间,有两个 分开独立的 PPP 连接到两个分开的点上。这点在许多的 TA 上是不支持的, 除非带有两个串口的特定模式(通常都很贵)。请不要把它与通道连接、MPP 等相混淆。
这是个非常有用的功能,例如,如果在您的办公室里您有个专有的 ISDN 连接,而且您想接入到里边,但休想让另一根 ISDN 线也能工作。 办公室里的路由器能够管理专有的B通道连接到互联网 (64 Kbps) 以及使用另一个通道 B 来完成单独的数据连接。 第二个 B 通道可以用于拨进、拨出或动态与第一个B通道进行连接 (MPP等),以获取更大宽带。
以太网桥也允许您传输的不仅仅是 IP 通信。您也可以发送 IPX/SPX 或其它任何您所使用的协议。
FreeBSD 的网络地址转换服务, 通常也被叫做 natd(8), 是一个能够接收连入的未处理 IP 包, 将源地址修改为本级地址然后重新将这些包注入到发出 IP 包流中。 natd(8) 同时修改源地址和端口, 当接收到响应数据时,它作逆向转换以便把数据发回原先的请求者。
NAT 最常见的用途是为人们所熟知的 Internet 连接共享。
随着 IPv4 的 IP 地址空间的日益枯竭, 以及使用如 DSL 和电缆等高速连接的用户的逐渐增多, 越来越多的人开始需要 Internet 连接共享这样的解决方案。 由于能够将许多计算机通过一个对外的 IP 地址进行接入, natd(8) 成为了一个理想的选择。
更为常见的情况, 一个用户通过电缆或者 DSL 线路 接入,并拥有一个 IP 地址,同时,希望通过这台接入 Internet 的计算机来为 LAN 上更多的计算机提供接入服务。
为了完成这一任务, 接入 Internet 的 FreeBSD 机器必须扮演网关的角色。 这台网关必须有两块网卡 -- 一块用于连接 Internet 路由器, 另一块用来连接 LAN。 所有 LAN 上的机器通过 Hub 或交换机进行连接。

上述配置被广泛地用于共享 Internet 连接。 LAN 中的一台机器连接到 Internet 中。 其余的计算机则通过那台 “网关” 机来连接 Internet。
下面这些选项必须放到内核配置文件中:
options IPFIREWALL options IPDIVERT
此外,下列是一些可选的选项:
options IPFIREWALL_DEFAULT_TO_ACCEPT options IPFIREWALL_VERBOSE
这些配置必须放到 /etc/rc.conf 中:
gateway_enable="YES"firewall_enable="YES"
firewall_type="OPEN"
natd_enable="YES" natd_interface="fxp0"
natd_flags=""
![]()
在 /etc/rc.conf 中加入上述选项将在系统启动时运行 natd -interface fxp0。 这一工作也可以手工完成。
Note: 当有太多选项要传递时,也可以使用一个 natd(8) 的配置文件来完成。这种情况下,这个配置文件必须通过在 /etc/rc.conf 里增加下面内容来定义:
natd_flags="-f /etc/natd.conf"/etc/natd.conf 文件会包含一个配置选项列表, 每行一个。在紧跟部分的例子里将使用下面的文件:
redirect_port tcp 192.168.0.2:6667 6667 redirect_port tcp 192.168.0.3:80 80关于配置文件的更多信息,参考 natd(8) 手册页中关于 -f 选项那一部分。
在LAN后面的每一台机子和接口应该被分配私有地址空间(由RFC 1918定义) 里的 IP 地址,并且默认网关设成 natd 机子的内连 IP 地址。
例如:客户端 A 和 B 在 LAN 后面,IP 地址是 192.168.0.2 和 192.168.0.3,同时 natd 机子的 LAN 接口上的 IP 地址是 192.168.0.1。客户端 A 和 B 的默认网关必须要设成 natd 机子的 IP——192.168.0.1。natd 机子外连,或互联网接口不需要为了 natd(8) 而做任何特别的修改就可工作。
使用 natd(8) 的缺点就是 LAN 客户不能从互联网访问。LAN 上的客户可以进行到外面的连接,而不能接收进来的连接。如果想在 LAN 的客户端机子上运行互联网服务,这就会有问题。 对此的一种简单方法是在 natd 机子上重定向选定的互联网端口到 LAN 客户端。
例如:在客户端 A 上运行 IRC 服务,而在客户端 B 上运行 web 服务。 想要正确的工作,在端口 6667 (IRC) 和 80 (web) 上接收到的连接就必须重定向到相应的机子上。
-redirect_port 需要使用适当的选项传送给 natd(8)。语法如下:
-redirect_port proto targetIP:targetPORT[-targetPORT]
[aliasIP:]aliasPORT[-aliasPORT]
[remoteIP[:remotePORT[-remotePORT]]]
在上面的例子中,参数应该是:
-redirect_port tcp 192.168.0.2:6667 6667
-redirect_port tcp 192.168.0.3:80 80
这就会重定向适当的 tcp 端口到 LAN 上的客户端机子。
-redirect_port 参数可以用来指出端口范围来代替单个端口。例如, tcp 192.168.0.2:2000-3000 2000-3000 就会把所有在端口 2000 到 3000 上接收到的连接重定向到主机 A 上的端口 2000 到 3000。
当直接运行 natd(8) 时,就可以使用这些选项, 把它们放到 /etc/rc.conf 里的 natd_flags="" 选项上, 或通过一个配置文件进行传送。
想要更多配置选项,请参考 natd(8)。
如果有几个 IP 地址提供,那么地址重定向就会很有用, 然而他们必须在一个机子上。使用它,natd(8) 就可以分配给每一个 LAN 客户端它们自己的外部 IP 地址。natd(8) 然后会使用适当的处部 IP 地址重写从 LAN 客户端外出的数据包, 以及重定向所有进来的数据包——一定的 IP 地址回到特定的 LAN 客户端。这也叫做静态 NAT。例如,IP 地址 128.1.1.1、 128.1.1.2 和 128.1.1.3 属于 natd 网关机子。 128.1.1.1 可以用来作 natd 网关机子的外连 IP 地址,而 128.1.1.2 和 128.1.1.3 用来转发回 LAN 客户端 A 和 B。
-redirect_address 语法如下:
-redirect_address localIP publicIP
在这个例子里,参数是:
-redirect_address 192.168.0.2 128.1.1.2 -redirect_address 192.168.0.3 128.1.1.3
象 -redirect_port 一样,这些参数也是放在 /etc/rc.conf 里的 natd_flags="" 选项上, 或通过一个配置文件传送给它。使用地址重定向, 就没有必要用端口重定向了,因为所有在某个 IP 地址上收到的数据都被重定向了。
在 natd 机子上的外部 IP 地址必须激活并且别名到 (aliased) 外连接口。要这做就看看 rc.conf(5)。
PLIP 允许我们在两个平行的端口间运行 TCP/IP。 这会在没有网卡的机子里有用,或安装在膝上电脑上。 这部分,我们将讨论:
制作并口的 (laplink) 线缆。
使用 PLIP 连接两台机子。
首先,您需要一根 laplink 线。然后, 确认两台计算机的内核都有对 lpt(4) 驱动程序的支持:
# grep lp /var/run/dmesg.boot lpt0: <Printer> on ppbus0 lpt0: Interrupt-driven port
平行端口必须是一个中断驱动的端口,在 FreeBSD 4.X 里,您的内核配置文件应该有一行和下面的差不多:
device ppc0 at isa? irq 7
在 FreeBSD 5.X 里,文件 /boot/device.hints 应该包括下面几行:
hint.ppc.0.at="isa" hint.ppc.0.irq="7"
然后,检查看内核配置文件里是否有 device plip 行或是否装载了 plip.ko 内核模块。两种情况下, 在您直接使用 ifconfig(8) 命令时,应该有平行的网络接口显示。在 FreeBSD 4.X 里,就象这样:
# ifconfig lp0 lp0: flags=8810<POINTOPOINT,SIMPLEX,MULTICAST> mtu 1500
而对于 FreeBSD 5.X: 应该是:
# ifconfig plip0 plip0: flags=8810<POINTOPOINT,SIMPLEX,MULTICAST> mtu 1500
Note: 用于平行接口的设备名在 FreeBSD 4.X (lpX) 和 FreeBSD 5.X (plipX) 是不相同的。
插入 laplink 线到两台计算机的平行接口里。
在两边以 root 身份配置网络接口参数。 例如,如果您想让运行着 FreeBSD 4.X 的主机 host1 连接到运行着 FreeBSD 5.X 的主机 host2:
host1 <-----> host2
IP Address 10.0.0.1 10.0.0.2
配置 host1 上的网络接口,照此做:
# ifconfig lp0 10.0.0.1 10.0.0.2
配置 host2 上的网络接口,照此做:
# ifconfig plip0 10.0.0.2 10.0.0.1
您现在应该有个工作的连接了。想要更详细的信息, 请阅读 lp(4) 和 lpt(4) 手册页。
您还应该增加两个主机到 /etc/hosts:
127.0.0.1 localhost.my.domain localhost 10.0.0.1 host1.my.domain host1 10.0.0.2 host2.my.domain
要确认连接是否工作,可以到每一台机子上,然后 ping 另外一台。例如,在 host1 上:
# ifconfig lp0
lp0: flags=8851<UP,POINTOPOINT,RUNNING,SIMPLEX,MULTICAST> mtu 1500
inet 10.0.0.1 --> 10.0.0.2 netmask 0xff000000
# netstat -r
Routing tables
Internet:
Destination Gateway Flags Refs Use Netif Expire
host2 host1 UH 0 0 lp0
# ping -c 4 host2
PING host2 (10.0.0.2): 56 data bytes
64 bytes from 10.0.0.2: icmp_seq=0 ttl=255 time=2.774 ms
64 bytes from 10.0.0.2: icmp_seq=1 ttl=255 time=2.530 ms
64 bytes from 10.0.0.2: icmp_seq=2 ttl=255 time=2.556 ms
64 bytes from 10.0.0.2: icmp_seq=3 ttl=255 time=2.714 ms
--- host2 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max/stddev = 2.530/2.643/2.774/0.103 ms
IPv6 (也被称作 IPng “下一代 IP”) 是中所周知的 IP 协议 (也被叫做 IPv4) 的新版本。 和其他现代的 *BSD 系统一样, FreeBSD 包含了 KAME 的 IPv6 参考实现。 因此, 您的 FreeBSD 系统包含了尝试 IPv6 所需要的所有工具。 这一节主要集中讨论如何配置和使用 IPv6。
在 1990 年代早期, 人们开始担心可用的 IPv4 地址空间在不断地缩小。 随着 Internet 的爆炸式发展, 主要的两个担心是:
所有的 IP 地址用光。今天不再那么当心了, 因为有私有地址空间 (10.0.0.0/8、 192.168.0.0/24 等等) 和网络地址转换 (NAT) 可以利用。
路由表条目变得太大。这点今天仍然是焦点。
IPv6 解决这些和其它许多的问题:
128 位地址空间。换句话,理论上有 340,282,366,920,938,463,463,374,607,431,768,211,456 个地址可以使用。这意味着在我们的星球上每平方米大约有 6.67 * 10^27 个 IPv6 地址。
路由器仅在它们的路由表里存放网络地址集, 这就减少路由表的平均空间到 8192 个条目。
IPv6 还有其它许多有用的功能,如:
地址自动配置 (RFC2462)
Anycast (任意播) 地址(“一对多”)
强制的多播地址
IPsec (IP 安全)
简单的头结构
移动的 (Mobile) IP
IPv6 到 IPv4 的转换机制
要更多信息,请查看:
IPv6 概观,在 playground.sun.com
有几种不同类型的 IPv6 地址:Unicast,Anycast 和 Multicast。
Unicast 地址是为人们所熟知的地址。一个被发送到 unicast 地址的包实际上会到达属于这个地址的接口。
Anycast 地址语义上与 unicast 地址没有差别, 只是它们强调一组接口。指定为 anycast 地址的包会到达最近的 (以路由为单位) 接口。Anycast 地址可能只被路由器使用。
Multicast 地址标识一组接口。指定为 multicast 地址的包会到达属于 multicast 组的所有的接口。
Note: IPv4 广播地址 (通常为 xxx.xxx.xxx.255) 由 IPv6 的 multicast 地址来表示。
Table 25-2. 保留的 IPv6 地址
| IPv6 地址 | 预定长度 (bits) | 描述 | 备注 |
|---|---|---|---|
| :: | 128 bits | 未指定 | 类似 IPv4 中的 0.0.0.0 |
| ::1 | 128 bits | 环回地址 | 类似 IPv4 中的 127.0.0.1 |
| ::00:xx:xx:xx:xx | 96 bits | 嵌入的 IPv4 | 低 32 bits 是 IPv4 地址。这也称作 “IPv4 兼容 IPv6 地址” |
| ::ff:xx:xx:xx:xx | 96 bits | IPv4 影射的 IPv6 地址 | 低的 32 bits 是 IPv4 地址。 用于那些不支持 IPv6 的主机。 |
| fe80:: - feb:: | 10 bits | 链路环回 | 类似 IPv4 的环回地址。 |
| fec0:: - fef:: | 10 bits | 站点环回 | |
| ff:: | 8 bits | 多播 | |
| 001 (base 2) | 3 bits | 全球多播 | 所有的全球多播地址都指定到这个地址池中。前三个二进制位是 “001”。 |
规范形式被描述为:x:x:x:x:x:x:x:x, 每一个“x”就是一个 16 位的 16 进制值。当然, 每个十六进制块以三个“0”开始头的也可以省略。如 FEBC:A574:382B:23C1:AA49:4592:4EFE:9982
通常一个地址会有很长的子串全部为零, 因此每个地址的这种子串常被简写为“::”。 例如:fe80::1 对应的规范形式是 fe80:0000:0000:0000:0000:0000:0000:0001。
第三种形式是以众所周知的用点“.”作为分隔符的十进制 IPv4 形式,写出最后 32 Bit 的部分。例如 2002::10.0.0.1 对应的十进制正规表达方式是 2002:0000:0000:0000:0000:0000:0a00:0001 它也相当于写成 2002::a00:1.
到现在,读者应该能理解下面的内容了:
# ifconfig
rl0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
inet 10.0.0.10 netmask 0xffffff00 broadcast 10.0.0.255
inet6 fe80::200:21ff:fe03:8e1%rl0 prefixlen 64 scopeid 0x1
ether 00:00:21:03:08:e1
media: Ethernet autoselect (100baseTX )
status: active
fe80::200:21ff:fe03:8e1%rl0 是一个自动配置的链路环回地址。它作为自动配置的一部分由 MAC 生成。
关于 IPv6 地址的结构的更多信息,请参看 RFC3513。
目前,有四种方式可以连接到其它 IPv6 主机和网络:
加入试验性的 6bone(骨干)
从您的上一级提供商那里获得 IPv6 网络。与您的互联网提供商讨论以求指导。
使用 6-to-4 通道 (RFC3068)
如果您是括号连接 (dial-up connection),请使用 net/freenet6 port。
这里我们就讨论如何连接到 6bone,因为它目前看来是最流行的一种方式。
首先看一下 6bone 网站,并找出离您最近的 6bone 连接。给某位值得信赖的人写信过去, 如果运气好,您就会得到关于如何设置您的连接的指导。通常这包括了设置 GRE (gif) 通道。
这里有一个典型的关于设置 gif(4) 通道的例子。
# ifconfig gif0 create # ifconfig gif0 gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280 # ifconfig gif0 tunnel MY_IPv4_ADDR HIS_IPv4_ADDR # ifconfig gif0 inet6 alias MY_ASSIGNED_IPv6_TUNNEL_ENDPOINT_ADDR
把大写字母换成您从上一级 6bone 节点收到的信息。
这样就建立了通道。通过 ping6(8) ff02::1%gif0, 检查通道是否工作。您应该会收到两个 ping 回应。
Note: 或许您会对地址 ff02:1%gif0 感兴趣,它是一个 multicast 地址。%gif0 表明在网络接口 gif0 上的 multicast 地址已经用上了。因为我们 ping 一个 multicast 地址的时候, 通道的另一端也应该会回应。
到现在,设置一个到 6bone 上级连接的路由应该是相当简单了。
# route add -inet6 default -interface gif0 # ping6 -n MY_UPLINK
# traceroute6 www.jp.FreeBSD.org
(3ffe:505:2008:1:2a0:24ff:fe57:e561) from 3ffe:8060:100::40:2, 30 hops max, 12 byte packets
1 atnet-meta6 14.147 ms 15.499 ms 24.319 ms
2 6bone-gw2-ATNET-NT.ipv6.tilab.com 103.408 ms 95.072 ms *
3 3ffe:1831:0:ffff::4 138.645 ms 134.437 ms 144.257 ms
4 3ffe:1810:0:6:290:27ff:fe79:7677 282.975 ms 278.666 ms 292.811 ms
5 3ffe:1800:0:ff00::4 400.131 ms 396.324 ms 394.769 ms
6 3ffe:1800:0:3:290:27ff:fe14:cdee 394.712 ms 397.19 ms 394.102 ms
这个输出可能随机器而不同。到现在,您应该可以到达 IPv6 站点www.kame.net, 并看到那只正跳舞的乌龟 -- 如果您有一个支持 IPv6 的浏览器,如 www/mozilla、 Konqueror (x11/kdebase3的一部分) 或 www/epiphany。
对于 IPv6 有两种类型的 DNS 记录:IETF 已经宣布 A6 是过时标准;现行的标准是 AAAA 记录。
使用AAAA记录是很简单的。通过增加下面内容, 给您的主机分配置您刚才接收到的新的 IPv6 地址:
MYHOSTNAME AAAA MYIPv6ADDR
到您的主域 DNS 文件里,就可以完成。要是您自已没有 DNS 域服务,您可以询问您的 DNS 提供商。目前的 bind 版本 (version 8.3 与 9) 和 dns/djbdns(含IPv6补丁) 支持 AAAA 记录。
这些设置将帮助您把一台您 LAN 上的机器配置为一台客户机, 而不是路由器。 要让 rtsol(8) 在启动时自动配置您的网卡, 只需添加:
ipv6_enable="YES"
要自动地静态指定 IP 地址, 例如 2001:471:1f11:251:290:27ff:fee0:2093, 到 fxp0 上, 则写上:
ipv6_ifconfig_fxp0="2001:471:1f11:251:290:27ff:fee0:2093"
要指定 2001:471:1f11:251::1 作为默认路由, 需要在 /etc/rc.conf 中加入:
ipv6_defaultrouter="2001:471:1f11:251::1"
这将帮助您从隧道提供商, 例如 6bone 那里取得必要的资料, 并将这些资料转化为在重启时能够保持住的设置。 要在启动时恢复您的隧道, 需要在 /etc/rc.conf 中增加:
列出要配置的通用隧道接口, 例如 gif0:
gif_interfaces="gif0"
配置该接口使用本地端地址 MY_IPv4_ADDR 和远程端地址 REMOTE_IPv4_ADDR:
gifconfig_gif0="MY_IPv4_ADDR REMOTE_IPv4_ADDR"
应用分配给您用于 IPv6 隧道远端的 IPv6 地址, 需要增加:
ipv6_ifconfig_gif0="MY_ASSIGNED_IPv6_TUNNEL_ENDPOINT_ADDR"
此后十设置 IPv6 的默认路由。 这是 IPv6 隧道的另一端:
ipv6_defaultrouter="MY_IPv6_REMOTE_TUNNEL_ENDPOINT_ADDR"
如果服务器将您的网络通过 IPv6 路由到世界的其他角落, 您需要在 /etc/rc.conf 中添加下面的配置:
ipv6_gateway_enable="YES"
这节将帮助您配置 rtadvd(8) 来宣示默认的 IPv6 路由。
要启用 rtadvd(8) 您需要在 /etc/rc.conf 中添加:
rtadvd_enable="YES"
指定由哪个网络接口来完成 IPv6 路由请求非常重要。 举例来说, 让 rtadvd(8) 使用 fxp0:
rtadvd_interfaces="fxp0"
接下来我们需要创建配置文件, /etc/rtadvd.conf。 示例如下:
fxp0:\
:addrs#1:addr="2001:471:1f11:246::":prefixlen#64:tc=ether:
将 fxp0 改为您打算使用的接口名。
接下来, 将 2001:471:1f11:246:: 改为分配给您的地址前缀。
如果您拥有专用的 /64 子网, 则不需要修改其他设置。 反之, 您需要把 prefixlen# 改为正确的值。
Classical IP over ATM (CLIP) 是一种最简单的使用带 IP 的 ATM 的方法。 这种方法可以用在交换式连接 (SVC) 和永久连接 (PVC) 上。这部分描述的就是配置基于 PVC 的网络。
第一种使用PVC来设置 CLIP 的方式就是通过专用的 PVC 让网络里的每一台机子都互连在一起。 尽管这样配置起来很简单,但对于数量更多一点的机子来说就有些不切实际了。 例如我们有四台机子在网络里,每一台都使用一张 ATM 适配器卡连接到 ATM 网络。第一步就是规划 IP 地址和机子间的 ATM 连接。我们使用下面的:
为了建造完全交错的网络,我们需要在第一对机子间有一个 ATM 连接:
| 机器 | VPI.VCI 对 |
|---|---|
| hostA - hostB | 0.100 |
| hostA - hostC | 0.101 |
| hostA - hostD | 0.102 |
| hostB - hostC | 0.103 |
| hostB - hostD | 0.104 |
| hostC - hostD | 0.105 |
在每一个连接端 VPI 和 VCI 的值都可能会不同, 只是为了简单起见,我们假定它们是一样的。 下一步我们需要配置每一个主机上的 ATM 接口:
hostA# ifconfig hatm0 192.168.173.1 up hostB# ifconfig hatm0 192.168.173.2 up hostC# ifconfig hatm0 192.168.173.3 up hostD# ifconfig hatm0 192.168.173.4 up
假定所有主机上的 ATM 接口都是 hatm0。 现在 PVC 需要配置到 hostA 上 (我们假定它们都已经配置在了 ATM 交换机上,至于怎么做的, 您就需要参考一下该交换机的手册了)。
hostA# atmconfig natm add 192.168.173.2 hatm0 0 100 llc/snap ubr hostA# atmconfig natm add 192.168.173.3 hatm0 0 101 llc/snap ubr hostA# atmconfig natm add 192.168.173.4 hatm0 0 102 llc/snap ubr hostB# atmconfig natm add 192.168.173.1 hatm0 0 100 llc/snap ubr hostB# atmconfig natm add 192.168.173.3 hatm0 0 103 llc/snap ubr hostB# atmconfig natm add 192.168.173.4 hatm0 0 104 llc/snap ubr hostC# atmconfig natm add 192.168.173.1 hatm0 0 101 llc/snap ubr hostC# atmconfig natm add 192.168.173.2 hatm0 0 103 llc/snap ubr hostC# atmconfig natm add 192.168.173.4 hatm0 0 105 llc/snap ubr hostD# atmconfig natm add 192.168.173.1 hatm0 0 102 llc/snap ubr hostD# atmconfig natm add 192.168.173.2 hatm0 0 104 llc/snap ubr hostD# atmconfig natm add 192.168.173.3 hatm0 0 105 llc/snap ubr
当然,除 UBR 外其它的通信协定也可让 ATM 适配器支持这些。 此种情况下,通信协定的名字要跟人通信参数后边。工具 atmconfig(8) 的帮助可以这样得到:
# atmconfig help natm add
或者在 atmconfig(8) 手册页里得到。
相同的配置也可以通过 /etc/rc.conf 来完成。对于 hostA,看起来就象这样:
network_interfaces="lo0 hatm0" ifconfig_hatm0="inet 192.168.173.1 up" natm_static_routes="hostB hostC hostD" route_hostB="192.168.173.2 hatm0 0 100 llc/snap ubr" route_hostC="192.168.173.3 hatm0 0 101 llc/snap ubr" route_hostD="192.168.173.4 hatm0 0 102 llc/snap ubr"
所有 CLIP 路由的当前状态可以使用如下命令获得:
hostA# atmconfig natm show
可以从下面几个零售商那里买到 FreeBSD 的盒装产品(FreeBSD CD, 附加软件,印刷文档):
CompUSA
WWW: http://www.compusa.com/
Frys
Electronics
WWW: http://www.frys.com/
FreeBSD CD 和 DVD 光盘可以从许多在线零售商那里买到:
BSD Mall by Daemon
News
PO Box 161
Nauvoo, IL 62354
USA
Phone: +1 866 273-6255
Fax: +1 217 453-9956
Email: <sales@bsdmall.com>
WWW: http://www.bsdmall.com/freebsd1.html
BSD-Systems
Email: <info@bsd-systems.co.uk>
WWW: http://www.bsd-systems.co.uk
fastdiscs.com
6 Eltham Close
Leeds, LS6
2TY
United Kingdom
Phone: +44 870 1995 171
Email: <sales@fastdiscs.com>
WWW: http://fastdiscs.com/freebsd/
FreeBSD Mall, Inc.
3623 Sanford Street
Concord, CA 94520-1405
USA
Phone: +1 925 674-0783
Fax: +1 925 674-0821
Email: <info@freebsdmall.com>
WWW: http://www.freebsdmall.com/
FreeBSD Services Ltd
11 Lapwing Close
Bicester
OX26 6XR
United Kingdom
WWW: http://www.freebsd-services.com/
Hinner EDV
St. Augustinus-Str. 10
D-81825 München
Germany
Phone: (089) 428 419
WWW: http://www.hinner.de/linux/freebsd.html
Ikarios
22-24 rue Voltaire
92000 Nanterre
France
WWW: http://ikarios.com/form/#freebsd
JMC Software
Ireland
Phone: 353 1 6291282
WWW: http://www.thelinuxmall.com
The Linux Emporium
Hilliard House, Lester Way
Wallingford
OX10 9TA
United Kingdom
Phone: +44 1491 837010
Fax: +44 1491 837016
WWW: http://www.linuxemporium.co.uk/products/freebsd/
Linux+ DVD Magazine
Lewartowskiego 6
Warsaw
00-190
Poland
Phone: +48 22 860 18 18
Email: <editors@lpmagazine.org>
WWW: http://www.lpmagazine.org/
Linux System Labs
Australia
21 Ray Drive
Balwyn North
VIC - 3104
Australia
Phone: +61 3 9857 5918
Fax: +61 3 9857 8974
WWW: http://www.lsl.com.au
LinuxCenter.Ru
Galernaya Street, 55
Saint-Petersburg
190000
Russia
Phone: +7-812-3125208
Email: <info@linuxcenter.ru>
WWW: http://linuxcenter.ru/freebsd
UNIXDVD.COM LTD
57 Primrose Avenue
Sheffield
S5 6FS
United Kingdom
WWW: http://www.unixdvd.com/
如果您是销售商并且想销售 FreeBSD CDROM 产品, 请和发行人联系:
Cylogistics
809B Cuesta Dr., #2149
Mountain View, CA 94040
USA
Phone: +1 650 694-4949
Fax: +1 650 694-4953
Email: <sales@cylogistics.com>
WWW: http://www.cylogistics.com/
FreeBSD Services
Ltd
11 Lapwing Close
Bicester
OX26 6XR
United Kingdom
WWW: http://www.freebsd-services.com/
Ingram
Micro
1600 E. St. Andrew Place
Santa Ana, CA 92705-4926
USA
Phone: 1 (800) 456-8000
WWW: http://www.ingrammicro.com/
Kudzu,
LLC
7375 Washington Ave. S.
Edina, MN 55439
USA
Phone: +1 952 947-0822
Fax: +1 952 947-0876
Email: <sales@kudzuenterprises.com>
LinuxCenter.Ru
Galernaya Street, 55
Saint-Petersburg
190000
Russia
Phone: +7-812-3125208
Email: <info@linuxcenter.ru>
WWW: http://linuxcenter.ru/freebsd
Navarre
Corp
7400 49th Ave South
New Hope, MN 55428
USA
Phone: +1 763 535-8333
Fax: +1 763 535-0341
WWW: http://www.navarre.com/
官方的 FreeBSD 源代码可以从遍布全球的镜像站点 通过匿名 FTP 下载。 站点 ftp://ftp.FreeBSD.org/pub/FreeBSD/ 有着良好的网络连接并且允许大量的并发连接, 但是 您或许更想找一个 “更近的” 镜像站点 (特别是当您想进行某种形式的镜像的时候)。
FreeBSD 镜像 站点数据库要比使用手册中的镜像列表更加精确, 因为它从 DNS 中获取信息而不依赖于静态的主机列表。
FreeBSD 可以从下面这些镜像站点通过匿名 FTP 下载。如果您选择了通过匿名 FTP 获取 FreeBSD, 请尽量使用离您比较近的站点。被列为 “主镜像站点” 的镜像站点一般都有完整的 FreeBSD 文件 (针对每种体系结构的所有当前可用的版本), 您或许从您所在的国家或地区的站点下载会得到更快的下载速度。 每个站点提供了最流行的体系结构的最近的版本而有可能不提供完整的 FreeBSD 存档。所有的站点都提供匿名 FTP 访问而有些站点也提供其他的访问方式。对每个站点可用的访问方式 在其主机名后有所说明。
中央服务器, 主要镜像站点, 阿根廷, 爱尔兰, 爱沙尼亚, 奥地利, 澳大利亚, 巴西, 冰岛, 波兰, 丹麦, 德国, 俄罗斯, 法国, 芬兰, 韩国, 荷兰, 加拿大, 捷克共和国, 克罗地亚, 立陶宛, 罗马尼亚, 美国, 南非, 挪威, 葡萄牙, 日本, 瑞典, 瑞士, 沙特阿拉伯, 斯洛伐克共和国, 斯洛文尼亚, 土耳其, 乌克兰, 西班牙, 希腊, 新加坡, 新西兰, 匈牙利, 意大利, 印度尼西亚, 英国, 中国大陆, 中国台湾, 中国香港.
(2005/05/08 12:09:50 UTC 更新)
如有问题,请和负责相关子域服务器的管理员 <mirror-admin@FreeBSD.org>联系。
如有问题,请和负责相关子域服务器的管理员 <hostmaster@ar.FreeBSD.org>联系。
如有问题,请和负责相关子域服务器的管理员 <hostmaster@ie.FreeBSD.org>联系。
ftp://ftp2.ie.FreeBSD.org/pub/FreeBSD/ (ftp / http / rsync)
ftp://ftp3.ie.FreeBSD.org/pub/FreeBSD/ (ftp / http / rsync)
如有问题,请和负责相关子域服务器的管理员 <hostmaster@ee.FreeBSD.org>联系。
如有问题,请和负责相关子域服务器的管理员 <hostmaster@at.FreeBSD.org>联系。
ftp://ftp2.at.FreeBSD.org/pub/FreeBSD/ (ftp / http / rsync)
如有问题,请和负责相关子域服务器的管理员 <hostmaster@au.FreeBSD.org>联系。
如有问题,请和负责相关子域服务器的管理员 <hostmaster@br.FreeBSD.org>联系。
ftp://ftp3.br.FreeBSD.org/pub/FreeBSD/ (ftp / rsync)
如有问题,请和负责相关子域服务器的管理员 <hostmaster@is.FreeBSD.org>联系。
ftp://ftp.is.FreeBSD.org/pub/FreeBSD/ (ftp / rsync)
如有问题,请和负责相关子域服务器的管理员 <hostmaster@pl.FreeBSD.org>联系。
如有问题,请和负责相关子域服务器的管理员 <hostmaster@dk.FreeBSD.org>联系。
ftp://ftp.dk.FreeBSD.org/pub/FreeBSD/ (ftp / ftpv6 / http)
如有问题,请和负责相关子域服务器的管理员 <de-bsd-hubs@de.FreeBSD.org
>联系。
ftp://ftp2.de.FreeBSD.org/pub/FreeBSD/ (ftp / http / rsync)
ftp://ftp4.de.FreeBSD.org/pub/FreeBSD/ (ftp / http / rsync)
如有问题,请和负责相关子域服务器的管理员 <hostmaster@ru.FreeBSD.org>联系。
ftp://ftp2.ru.FreeBSD.org/pub/FreeBSD/ (ftp / http / rsync)
ftp://ftp5.ru.FreeBSD.org/pub/FreeBSD/ (ftp / http / rsync)
如有问题,请和负责相关子域服务器的管理员 <hostmaster@fr.FreeBSD.org>联系。
如有问题,请和负责相关子域服务器的管理员 <hostmaster@fi.FreeBSD.org>联系。
如有问题,请和负责相关子域服务器的管理员 <hostmaster@kr.FreeBSD.org>联系。
ftp://ftp.kr.FreeBSD.org/pub/FreeBSD/ (ftp / rsync)
如有问题,请和负责相关子域服务器的管理员 <hostmaster@nl.FreeBSD.org>联系。
ftp://ftp.nl.FreeBSD.org/pub/FreeBSD/ (ftp / http / rsync)
如有问题,请和负责相关子域服务器的管理员 <hostmaster@ca.FreeBSD.org>联系。
如有问题,请和负责相关子域服务器的管理员 <hostmaster@cz.FreeBSD.org>联系。
ftp://ftp.cz.FreeBSD.org/pub/FreeBSD/ (ftp / http / rsync)
如有问题,请和负责相关子域服务器的管理员 <hostmaster@hr.FreeBSD.org>联系。
如有问题,请和负责相关子域服务器的管理员 <hostmaster@lt.FreeBSD.org>联系。
如有问题,请和负责相关子域服务器的管理员 <hostmaster@ro.FreeBSD.org>联系。
ftp://ftp1.ro.FreeBSD.org/pub/FreeBSD/ (ftp / ftpv6)
如有问题,请和负责相关子域服务器的管理员 <hostmaster@us.FreeBSD.org>联系。
ftp://ftp4.us.FreeBSD.org/pub/FreeBSD/ (ftp / ftpv6)
ftp://ftp5.us.FreeBSD.org/pub/FreeBSD/ (ftp / rsync)
ftp://ftp7.us.FreeBSD.org/pub/FreeBSD/ (ftp / http / rsync)
ftp://ftp12.us.FreeBSD.org/pub/FreeBSD/ (ftp / rsync)
ftp://ftp13.us.FreeBSD.org/pub/FreeBSD/ (ftp / http / rsync)
如有问题,请和负责相关子域服务器的管理员 <hostmaster@za.FreeBSD.org>联系。
如有问题,请和负责相关子域服务器的管理员 <hostmaster@no.FreeBSD.org>联系。
ftp://ftp.no.FreeBSD.org/pub/FreeBSD/ (ftp / rsync)
如有问题,请和负责相关子域服务器的管理员 <hostmaster@pt.FreeBSD.org>联系。
如有问题,请和负责相关子域服务器的管理员 <hostmaster@jp.FreeBSD.org>联系。
如有问题,请和负责相关子域服务器的管理员 <hostmaster@se.FreeBSD.org>联系。
如有问题,请和负责相关子域服务器的管理员 <hostmaster@ch.FreeBSD.org>联系。
如有问题,请和负责相关子域服务器的管理员 <ftpadmin@isu.net.sa>联系。
如有问题,请和负责相关子域服务器的管理员 <hostmaster@sk.FreeBSD.org>联系。
如有问题,请和负责相关子域服务器的管理员 <hostmaster@si.FreeBSD.org>联系。
如有问题,请和负责相关子域服务器的管理员 <hostmaster@es.FreeBSD.org>联系。
如有问题,请和负责相关子域服务器的管理员 <hostmaster@gr.FreeBSD.org>联系。
如有问题,请和负责相关子域服务器的管理员 <hostmaster@sg.FreeBSD.org>联系。
ftp://ftp.sg.FreeBSD.org/pub/FreeBSD/ (ftp / http / rsync)
如有问题,请和负责相关子域服务器的管理员 <mohacsi@ik.bme.hu>联系。
ftp://ftp.hu.FreeBSD.org/pub/FreeBSD/ (ftp / http / rsync)
如有问题,请和负责相关子域服务器的管理员 <hostmaster@it.FreeBSD.org>联系。
如有问题,请和负责相关子域服务器的管理员 <hostmaster@id.FreeBSD.org>联系。
ftp://ftp.id.FreeBSD.org/FreeBSD/ (ftp / http / rsync)
如有问题,请和负责相关子域服务器的管理员 <hostmaster@uk.FreeBSD.org>联系。
如有问题,请和负责相关子域服务器的管理员 <phj@cn.FreeBSD.org>联系。
如有问题,请和负责相关子域服务器的管理员 <hostmaster@tw.FreeBSD.org>联系。
ftp://ftp2.tw.FreeBSD.org/pub/FreeBSD/ (ftp / http / rsync)
匿名 CVS(或人们常说的 anoncvs)是由和 FreeBSD 附带的 CVS 实用工具提供的用于和远程的 CVS 代码库同步的一种特性。 尤其是, 它允许 FreeBSD 用户不需要特殊的权限对任何一台 FreeBSD 项目的官方 anoncvs 服务器执行只读的 CVS 操作。 要使用它,简单的设置 CVSROOT 环境变量指向适当的 anoncvs 服务器, 输入 cvs login 命令 并提供广为人知的密码“anoncvs”,然后使用 cvs(1) 命令像访问任何本地仓库一样来访问它。
Note: cvs login 命令把用来登录 CVS 服务器的密码储存在您的 HOME 目录中一个叫 .cvspass 的文件里。 如果这个文件不存在, 第一次使用 cvs login 的时候可能会出错。 请创建一个空的 .cvspass 文件,然后试试重新登录。
也可以这么说 CVSup 和 anoncvs 服务本质上提供了同样的功能,但是有各种各样 不同的场合可以影响用户对同步方式的选择。简单来说, CVSup 在网络资源利用方面 更加有效,而且是到目前为止在两者之中技术上更成熟的 除了成本方面。要使用 CVSup,在下载任何东西之前 必须首先安装配置特定的客户端, 而且只能用于下载相当大块的 CVSup 称作 collections。
相比之下,anoncvs 可以通过 CVS 模块名来从单个文件里检出任何东西并赋给特定的程序 (比如 ls 或者 grep)。 当然,anoncvs 也只适用于对 CVS 仓库的只读操作,所以如果您是想用和 FreeBSD 项目共享的仓库提供本地开发的话, CVSup 几乎是您唯一的选择。
配置 cvs(1) 使用匿名 CVS 仓库可以简单的设定 CVSROOT 环境变量指向 FreeBSD 项目的 anoncvs 服务器之一。到此书写作为止, 下面的服务器都是可用的:
奥地利: :pserver:anoncvs@anoncvs.at.FreeBSD.org:/home/ncvs (使用 cvs login 然后在提示输入口令时输入任意口令。)
法国: :pserver:anoncvs@anoncvs.fr.FreeBSD.org:/home/ncvs (pserver (口令是 “anoncvs”), ssh (没有口令))
德国: :pserver:anoncvs@anoncvs.de.FreeBSD.org:/home/ncvs (Use cvs login and enter the password “anoncvs” when prompted.)
德国: :pserver:anoncvs@anoncvs2.de.FreeBSD.org:/home/ncvs (rsh, pserver, ssh, ssh/2022)
日本: :pserver:anoncvs@anoncvs.jp.FreeBSD.org:/home/ncvs (Use cvs login and enter the password “anoncvs” when prompted.)
瑞典: freebsdanoncvs@anoncvs.se.FreeBSD.org:/home/ncvs (仅 ssh - 无口令)
SSH HostKey: 1024 a7:34:15:ee:0e:c6:65:cf:40:78:2d:f3:cd:87:bd:a6 root@apelsin.fruitsalad.org SSH2 HostKey: 1024 21:df:04:03:c7:26:3e:e8:36:1a:50:2d:c7:ae:b8:5f ssh_host_dsa_key.pub
美国: freebsdanoncvs@anoncvs.FreeBSD.org:/home/ncvs (仅 ssh - 无口令)
SSH HostKey: 1024 a1:e7:46:de:fb:56:ef:05:bc:73:aa:91:09:da:f7:f4 root@sanmateo.ecn.purdue.edu SSH2 HostKey: 1024 52:02:38:1a:2f:a8:71:d3:f5:83:93:8d:aa:00:6f:65 /etc/ssh/ssh_host_dsa_key.pub
USA: anoncvs@anoncvs1.FreeBSD.org:/home/ncvs (仅 ssh - 无口令)
SSH HostKey: 1024 f1:6a:9c:6d:e3:f3:ae:f8:b5:68:ac:30:cb:11:32:9b root@ender.liquidneon.com SSH2 HostKey: 1024 9a:d6:e1:e2:4f:58:36:77:e5:5b:60:ee:94:1b:c1:c0 ssh_host_dsa_key.pub
因为 CVS 实际上允许 “检出” 曾经存在的 (或者,某种情况下将会存在) FreeBSD 源代码的任意版本, 您需要熟悉 cvs(1) 的版本 (-r) 参数, 以及在 FreeBSD 代码库中可用的值。
有两种标签,修订标签和分支标签。 修订标签特指一个特定的修订版本。含义始终是不变的。 分支标签,另一方面, 指代给定时间给定开发分支的最新修订, 因为分支标签不涉及特定的修订版本, 它明天所代表的含义就可能和今天的不同。
第 A.6 节 包括了用户可能感兴趣的 修订标签。 另外,这里面没有一个可以用于 Ports Collection, 因为它没有多个修订版本。
当您指定一个分支标签,您通常会得到那个开发分支的文件的最新版本。 如果您希望得到一些旧的版本,您可以用 -D date 标记制定一个日期。 察看 cvs(1) 手册页了解更多细节。
在这之前强烈建议您通读 cvs(1) 的手册页, 这里有一些简单的例子来展示如何使用匿名 CVS:
Example A-1. 从 -CURRENT 检出些东西(ls(1)) 然后再删除:
% setenv CVSROOT :pserver:anoncvs@anoncvs.FreeBSD.org:/home/ncvs
% cvs login
在提示符处,输入密码 “anoncvs”.
% cvs co ls
% cvs release -d ls
% cvs logout
Example A-2. 通过 SSH 检出整个 src/ 代码树:
% cvs -d freebsdanoncvs@anoncvs.FreeBSD.org:/home/ncvs co src The authenticity of host 'anoncvs.freebsd.org (128.46.156.46)' can't be established. DSA key fingerprint is 52:02:38:1a:2f:a8:71:d3:f5:83:93:8d:aa:00:6f:65. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'anoncvs.freebsd.org' (DSA) to the list of known hosts.
Example A-3. 检出 ls(1) 在 3.X-STABLE 分支中的版本:
% setenv CVSROOT :pserver:anoncvs@anoncvs.FreeBSD.org:/home/ncvs
% cvs login
在提示符处,输入密码 “anoncvs”.
% cvs co -rRELENG_3 ls
% cvs release -d ls
% cvs logout
CTM 是保持远程目录树和中央服务器目录树同步的一种方法。 它被开发用于 FreeBSD 的源代码树,虽然其他人随着时间推移会发现它可以用于其他目的。 当前几乎没有,也或者只有很少的文档讲述创建 deltas 的步骤, 所以如果您希望使用 CTM 去做其它事情, 请联系 ctm-users 邮件列表了解更多信息。
CTM 会给您一份 FreeBSD 源代码树的本地拷贝。代码树有很多的 “flavors” 可用。不管您是希望跟踪完整的 CVS 树还是只是一个分支, CTM 都会给您提供信息。 如果您是 FreeBSD 上的一个活跃的开发者,但是缺乏或者不存在 TCP/IP 连接,或者只是希望把变化自动发送给您, CTM 就是适合您的。对于最积极的分支 您将会每天获得三个以上的 deltas。 然而,您应该考虑通过邮件来自动发送。 升级的大小总是保证尽可能的小。 通常小于 5K,也偶然(十分之一可能)会有 10-50K,也不时地有个大的 100K+ 甚至更大的。
您也需要让自己了解直接和开发代码而不是预发行版本打交道的各种警告。这种情况会很显著, 如果您选择了 “current” 代码的话。强烈建议您阅读和 FreeBSD 保持同步。
您需要两样东西:CTM 程序,还有初始的 deltas 来 feed it(达到 “current” 级别)。
CTM 程序从版本 2.0 发布以来 已经是 FreeBSD 的一部分了,如果您有一份源代码拷贝的话它位于 /usr/src/usr.sbin/ctm。
如果您再运行一个比 2.0 版本早的 FreeBSD 系统, 可以直接从下面下载最新的 CTM 源代码:
http://www.FreeBSD.org/cgi/cvsweb.cgi/src/usr.sbin/ctm/
您喂给 CTM 的 “deltas” 可以有两种方式,FTP 或者 email。 如果您有普通的访问 Internet 的 FTP 权限, 那么下面的 FTP 站点支持访问 CTM:
ftp://ftp.FreeBSD.org/pub/FreeBSD/CTM/
或者看看这一小节镜像。
FTP 访问相关的目录并取得 README 文件,从那里开始。
如果您希望通过 email 得到您的 deltas:
订阅一个 CTM 分发列表。 ctm-cvs-cur 支持完整的 CVS 树。 ctm-src-cur 支持最新的开发分支。 ctm-src-4 支持 4.X 发行分支, 等等。。(如果您不知道如何订阅邮件列表, 点击上面的列表名或者到 http://lists.FreeBSD.org/mailman/listinfo 点击您希望订阅的列表。 列表页包含了所有必要的订阅指导。)
当您开始接收到您邮件中的 CTM 升级时,您可以使用 ctm_rmail 程序来解压并应用它们。 事实上如果您想要让进程以全自动的形式运行的话,您可以通过在 /etc/aliases 中设置直接使用 ctm_rmail 程序。 查看 ctm_rmail 手册页了解更多细节。
Note: 不管您使用什么方法得到 CTM deltas,您都应该订阅 ctm-announce 邮件列表。 以后会有单独的地方提交有关 CTM 系统的操作的公告。 点击上面的邮件列表名并按照指示订阅邮件列表。
在您开始使用 CTM delta 之前,您需要获得一个起始点。
首先您应该确定您已经有了什么。每个人都可以从一个“空”目录开始。 您必须用一个初始的 “空的” delta 来开始您的 CTM 支持树。曾经为了您的便利这些 “起始” deltas 被有意的通过 CD 来发行, 然而现在已经不这样做了。
因为代码树有数十兆字节,您应该更喜欢从手头上已经有的东西开始。如果您有一张 -RELEASE CD 光盘,您可以从里面拷贝或者解压缩一份初始代码出来。 这会节省非常多的数据传输量。
您会发现这些“初始的” deltas 名字的数字后面都有个 X (比如 src-cur.3210XEmpty.gz)。 后面加一个 X 的设计符合您的初始 “seed” 的由来。 Empty 是一个空目录。通常一个基本的从 Empty 开始的转换由 100 个 deltas 构成。顺便说一下,他们都很大!70 到 80 兆字节的 gzip 压缩的数据对于 XEmpty deltas 是很平常的。
一旦您已经选定了一个基本的 delta 开始,您就需要比这个数高的所有的 delta。
要应用 deltas,简单的键入:
# cd /where/ever/you/want/the/stuff # ctm -v -v /where/you/store/your/deltas/src-xxx.*
CTM 能够理解被 gzip 压缩的 deltas,所以您不需要先 gunzip 他们,这可以节省磁盘空间。
除非觉得整个过程非常可靠, CTM 不会涉及到您的代码树的。您也可以使用 -c 标记来校验 delta, 这样 CTM 就不会涉及代码树; 它会只校验 delta 的完整性看看是否可以安全的用于您的当前代码树。
CTM 还有其他的一些参数, 查看手册页或者源代码了解更多信息。
这真的就是全部的事情了。每次得到一个新的 delta,就通过 CTM 运行它来保证您的代码是最新的。
如果这些 deltas 很难重新下载的话不要删除它们。 有些东西坏掉的时候您会想到保留它们的。 即使您只有软盘,也请考虑使用 fdwrite 来做一份拷贝。
作为一名开发者喜欢实验,改动代码树中的文件。 CTM 用一种受限的方式支持本地修改:再检查文件 foo 存在之前,首先查找 foo.ctm。如果这个文件存在, CTM 会对它操作而不是 foo。
这种行为给我们提供了一种简单的方式来维持本地的改动: 只要复制您计划修改的文件并用 .ctm 的后缀重新命名。 然后就可以自由的修改代码了,CTM 会更新 .ctm 文件到最新版本。
您可以确定变动列表, CTM 可以做到,在您的代码库上使用 CTM 的 -l 选项。
这很有用如果您想要保存改动的日志, pre- 或者 post- 用各种风格处理修改的文件的纪录, 或者仅仅是想感受一下孩子般的疯狂。
有时您可能想备份将要被 CTM 升级所改动的所有文件。
指定 -B backup-file 选项会导致 CTM 备份将要被给定的 CTM delta 改动的所有文件到 backup-file。
有时您可能对限定一个给定的 CTM 升级的范围感兴趣,也有可能想知道怎样从一列 deltas 中解压缩一部分文件。
您可以通过使用 -e 和 -x 选项指定过滤规则表达式来控制 CTM 即将对之操作的文件列表。
例如,要从您保存的CTM deltas 集里解压缩出一个最新的 lib/libc/Makefile 文件,运行这个命令:
# cd /where/ever/you/want/to/extract/it/ # ctm -e '^lib/libc/Makefile' ~ctm/src-xxx.*
对于每一个在 CTM delta 中指定的文件,-e 和 -x 选项按照命令行给定的顺序应用。 文件只有在所有的 -e 和 -x 被应用之后标记为合格之后 才能被 CTM 操作。
CTM/FreeBSD 可以在下面的镜像站点通过匿名 FTP 下载。如果您选择通过匿名 FTP 获取 CTM, 请试着使用一个离您较近的站点。
如果有问题,请联系 ctm-users 邮件列表。
如果您在您附近找不到镜像或者镜像不完整, 试着使用搜索引擎比如 alltheweb.
CVSup 是一个用于从远程服务器主机上的主 CVS 仓库发布和升级源代码树的软件包。 FreeBSD 的源代码维护在加利福尼亚州一台主开发服务器的 CVS 仓库里。 有了 CVSup,FreeBSD 用户可以很容易的保持他们自己的源代码树更新。
CVSup 使用所谓的升级 pull 模式。在 pull 模式下,客户端在需要的时候向服务器端请求更新。 服务器被动的等待客户端的升级请求。 因此所有的升级都是客户端发起的。 服务器决不会发送未请求的升级。用户必须手动运行 CVSup 客户端获取更新, 或者设置一个 cron 作业来让它以固定的规律自动运行。
术语 CVSup用大写字母写正是表示, 代表了完整的软件包。 它的主要组件是运行在每个用户机器上的客户端 cvsup, 和运行在每个 FreeBSD 镜像站点上的服务器端 cvsupd。
当您阅读 FreeBSD 文档和邮件列表时,您可能会看见 sup。 Sup 是 CVSup 的前身,有着相似的目的。 CVSup 使用很多和 sup 相同的方式, 而且, 它还是用使用和 sup 的兼容的配置文件。 Sup 已经不再被 FreeBSD 项目使用了, 因为 CVSup 既快又有更好的灵活性。
安装 CVSup 最简单的方式就是使用 FreeBSD packages collection 中预编译的 net/cvsup 包。 如果您想从源代码构建 CVSup, 您可以使用 net/cvsup port。但是预先警告一下: net/cvsup port 依赖于 Modula-3 系统,会花费相当的时间和磁盘空间来下载编译。
Note: 如果想在没有安装 XFree86 或 Xorg 的计算机, 例如服务器上使用 CVSup, 则只能使用不包含 CVSup GUI 的 net/cvsup-without-gui。
CVSup 的操作被一个叫做 supfile 的配置文件所控制。 在目录 /usr/share/examples/cvsup/ 下面有一些示例的 supfiles。
supfile 中的信息解答了 CVSup 下面的几个问题:
在下面的章节里,我们通过依次回答这些问题来创建一个典型的 supfile 文件。首先,我们描述一下 supfile 的整体构成。
supfile 是个文本文件。注释用 # 开头,至行尾有效。 空行和只包含注释的行会被忽略。
每个保留行描述一批用户希望接收的文件。 每行以 “collection”, 由服务器端定义的合理的文件分组,的名字开头。 collection 的名字告诉服务器您想要的文件。 collection 名字结束或者有更多的字段,用空格分隔。 这些字段回答了上面列出的问题。 字段类型有两种:标记字段和值字段。 标记字段由独立的关键字组成,比如, delete 或者 compress。值字段也用关键字开头, 关键字后面跟 = 和第二个词而没有空格。 例如,release=cvs 是一个值字段。
一个典型的 supfile 往往接收多于一个的 collection。创建 supfile 的一种方式是明确的为每一个 collection 指定相关的字段。然而,这样使得 supfile 的行变得特别长,很不方便, 因为 supfile 中的所有 collection 的大部分 字段都是相同的。 CVSup 提供了一个默认机制来避免 这些问题。用特定的伪 collection 名 *default 开头的行可以被用来设置标记和值为 supfile 中随后的 collection 中的默认值。 默认值可以通过为这个 collection 自身指定不同的值来对单个的 collection 覆盖设置, 也可以在 mid-supfile 中通过附加的 *default 行改变或扩充。
知道了这些,我们现在就可以开始创建一个 用于接收和升级 FreeBSD-CURRENT 主源代码树的 supfile 文件了。
通过 CVSup 可用的文件组织成叫做 “collections” 的名称组。 这些可用的 collection 在 随后的章节 中描述。 在这个例子里, 我们希望接收 FreeBSD 系统的完整的主代码树。 有一个单独的大的 collection src-all 让我们完成这个。 创建我们的 supfile 的第一步, 我们简单的列出这些 collection,每个一行(在这个例子里, 只有一行):
src-all
通过 CVSup,您实际上可以接收 曾经存在的源代码的任何版本。 这是有可能的,因为 cvsupd 服务器直接通过 CVS 仓库工作,那包含了所有的版本。您可以 用 tag= 和 date= 值字段 指定一个您想要的版本。
Warning仔细的正确指定任何 tag= 字段。有一些 tag 只对特定的 collection 文件合法。 如果您指定了一个不正确的或者 拼写错误的 tag,CVSup 会删除您可能不想删除的文件。 特别地,对 ports-* collection 只使用 tag=.。
tag= 字段在仓库中表示为一个符号标签。 有两种标签,修订标签和分支标签。 修订标签代表一个特定的修订版本。 它的含义是一成不变的。 分支标签,另一方面,代表给定开发线上给定时间的最新修订。 因为分支标签不代表一个特定的修订版本, 它明天的含义就可能和今天的有所不同。
第 A.6 节 包含了用户可能感兴趣的分支标签。 当在 CVSup 的配置文件中指定标签的时候,必须用 tag= 开头 (RELENG_4 会变成 tag=RELENG_4)。 记住只有 tag=. 可以用于 Ports Collection。
Warning注意像看到的那样正确的输入标签名。 CVSup 不能辨别合法和不合法标签。 如果您拼写错了标签名, CVSup 会像您指定了一个没有任何文件的合法标签一样工作, 那会删除您已经存在的代码。
当您指定一个分支标签的时候,您通常会收到开发线上文件的最新版本。 如果您希望接收一些过时的版本,您可以通过用 date= 值字段指定一个日期来做到。 cvsup(1) 手册页解释了如何来做。
对于我们的示例来说,我们希望接收 FreeBSD-CURRENT。 我们在我们的 supfile 的开头添加这行:
*default tag=.
有一个重要的特例, 如果您既没指定 tag= 字段也没指定 date= 字段的情况。这种情况下, 您会收到直接来自于服务器 CVS 仓库的真实的 RCS 文件, 而不是某一特定版本。 开发人员一般喜欢这种操作模式。 通过在他们的系统上维护一份仓库自身的副本, 他们可以浏览修订历史以及检查文件过去的版本。 然而,这个好处是以大量的磁盘空间为代价的。
我们使用 host= 字段来告诉 cvsup 从哪里获取更新。 任何一个 CVSup 镜像站点都可以, 虽然您应该选择一个离您比较近的站点。 在这个例子里我们将使用一个虚拟的 FreeBSD 发布站点, cvsup99.FreeBSD.org:
*default host=cvsup99.FreeBSD.org
您需要在运行 CVSup 之前把这个改成一个实际存在的站点。 在任何 cvsup 运行的特定时刻, 您都可以在命令行上使用 -h hostname 选项来覆盖主机设置。
prefix= 字段告诉 cvsup 把接收的文件放在哪里。 在这个例子里,我们把源代码文件直接放进我们的主源代码树, /usr/src。 src 目录已经隐含在我们选择接收的 collection 里了, 所以正确的写法是:
*default prefix=/usr
CVSup 客户端在被叫做 “base” 的目录里维护了几个状态文件。 这些文件帮助 CVSup 更有效的工作, 通过跟踪您已经接收到哪些更新的方式。 我们将使用标准的 base 目录, /var/db:
*default base=/var/db
如果您的 base 目录还不存在,现在最好创建它。 如果 base 目录不存在,cvsup 客户端会拒绝工作。
其他的 supfile 设置:
在 supfile 中有一些其他选项需要介绍一下:
*default release=cvs delete use-rel-suffix compress
release=cvs 显示服务器应该从 FreeBSD 的主 CVS 仓库中获取信息。 事实上总是这样的,但是也有可能会超出这个讨论的范围。
delete 给 CVSup 权限删除文件。 您应该总是指定这个,这样 CVSup 可以保证您的源代码树完全更新。CVSup 很小心的只删除那些不再依赖的文件。 您拥有的任何额外的文件会被严格的保留。
use-rel-suffix 是 ... 不可思议的。 如果您真的想了解它,查看 cvsup(1) 手册页。 否则,就指定而不用担心这个。
compress 启用 gzip 风格的信道压缩。 如果您的网络连接是 T1 或者更快, 您可能不想使用压缩。 否则,它非常有帮助。
把它们放在一起:
这是我们的示例的完整 supfile 文件:
*default tag=. *default host=cvsup99.FreeBSD.org *default prefix=/usr *default base=/var/db *default release=cvs delete use-rel-suffix compress src-all
像上面提到的,CVSup 使用一种 pull 方法。基本上,这意味着您要连接到 CVSup 服务器,服务器说, “这有些您能下载的东西 ...”,然后您的客户端反应“好,我要这个, 这个,这个,还有这个。”在默认的配置中, CVSup 客户端会取回您在配置文件中选定的 collection 和标签的每个文件。 然而,并不总是您想要的, 尤其是您在同步 doc,ports,或者 www 树 -- 大部分人都不能阅读四种或者五种 语言,因此他们不需要下载特定语言的文件。 如果您在 CVSup Ports Collection,您 可以通过单独指定每个 collection 来避免这个 (比如,ports-astrology, ports-biology,等等取代简单的说明 ports-all)。然而,因为 doc 和 www 树没有特定语言的 collection,您必须 使用 CVSup 许多极好的特性之一: refuse 文件。
refuse 文件本质上是告诉 CVSup 它不应该从 collection 中取得某些文件;换句话说,它告诉客户端 拒绝 来自服务器的特定的文件。 refuse 文件可以在 base/sup/ 中找到(或者,如果您没有,应该创建一个)。 base 在您的 supfile 中定义; 默认情况下,base 就是 /var/db, 这意味着默认的 refuse 文件就是 /var/db/sup/refuse。
refuse 文件的格式很简单; 它仅仅包含您不希望下载的文件和目录名。 例如,如果您除了英语和德语之外不会讲其他语言, 而且也不打算阅读德文的文档翻译版本, 则可以把下面这些放在您的 refuse 文件里:
doc/bn_* doc/da_* doc/de_* doc/el_* doc/es_* doc/fr_* doc/it_* doc/ja_* doc/nl_* doc/no_* doc/pl_* doc/pt_* doc/ru_* doc/sr_* doc/tr_* doc/zh_*
等等其他语言(您可以通过浏览 FreeBSD CVS 仓库找到完整的列表)。
有这个非常有用的特性,那些慢速连接或者要为他们的 Internet 连接按时付费的用户就可以节省宝贵的时间因为他们不再需要 下载那些从来不用的文件。要了解 refuse 文件的更多信息以及其它 CVSup 的优雅的特性,请浏览它的 手册页。
您现在准备尝试升级了。命令很简单:
# cvsup supfile
supfile 的位置当然就是您刚刚创建的 supfile 文件名啦。 如果您在 X11 下面运行,cvsup 会显示一个有一些可以做平常事情的按钮的 GUI 窗口。 按 go 按钮,然后看着它运行。
在这个例子里您将要升级您目前的 /usr/src 树,您将需要 用 root 来运行程序,这样 cvsup 有需要的权限来更新您的文件。 刚刚创建了您的配置文件,又从来没有使用过这个程序, 紧张不安是可以理解的。有一个简单的方法不改变您当前的文件 来做一次试验性的运行。只要在方便的地方创建一个 空目录,并在命令行上作为一个额外的参数说明:
# mkdir /var/tmp/dest # cvsup supfile /var/tmp/dest
您指定的目录会作为所有文件更新的目的路径。 CVSup 会检查您在 /usr/src 中的文件,但是不会修改或 删除。任何文件更新都会被放到 /var/tmp/dest/usr/src 里了。 在这种方式下运行 CVSup 也会把它的 base 目录状态文件保持原样。这些文件的新版本 会被写到指定的目录。 因为您有 /usr/src 目录的读权限,所以执行这种试验性的运行 甚至不需要使用 root 用户。
如果您没有运行 X11 或者不喜欢 GUI, 当您运行 cvsup 的时候需要在命令行添加 两个选项:
# cvsup -g -L 2 supfile
-g 告诉 CVSup 不要使用 GUI。如果您 没在运行 X11 这个是自动的,否则您必须指定它。
-L 2 告诉 CVSup 输出所有正在升级的文件的细节。 有三个等级可以选择,从 -L 0 到 -L 2。默认是 0,意味着除了错误消息 什么都不输出。
还有许多其它的选项可用。想要一个简短的列表, 输入 cvsup -H。要查看更详细的描述, 请查看手册页。
一旦您对升级工作的方式满意了,您就 可以使用 cron(8) 来安排规则的运行 CVSup。 很显然的,您不应该让 CVSup 通过 cron(8) 运行的时候使用它的 GUI。
CVSup 可用的文件 collection 是分级组织的。 有几个大的 collection,然后它们有分成更小的子 collection。接收一个大的 collection 等同于 接收它的每一个子 collection。 collection 的等级关系在下面列表中通过缩进的使用 反映出来。
最常用的 collection 是 src-all,和 ports-all。其它的 collection 只被有着特定 目的的小部分人使用, 有些站点可能不全部支持。
FreeBSD 主 CVS 仓库,包含 密码系统的代码。
FreeBSD 发行版本和镜像相关的 文件。
FreeBSD 使用手册和其它文档的源代码。 其中不包含 FreeBSD web 站点的文件。
FreeBSD Ports Collection。
Important: 如果您不想升级全部的 ports-all(整个 ports 树), 而只是使用下面列出的一个子集, 请确保您总是升级了 ports-base 子 collection! 无论何时在 ports 构建下层构造有所改变的时候都会通过 ports-base 表现出来,事实上某些 改变会很快的被“实际的” ports 使用,因此,如果您只升级了 “实际的” ports 而他们使用了一些新的特性, 就有极大的可能编译会因一些神秘的错误信息而失败。 这种情况下非常快速的要做的事情 就是确保您的 ports-base 子 collection 更新到 最新。
Important: 要自行构建 ports/INDEX, 您 必须 接受 ports-all (完整的 ports tree)。 在部分 ports tree 上构建 ports/INDEX 是不被支持的。 请参见 FAQ。
用以帮助残疾用户的软件。
阿拉伯语支持。
存档工具。
天文相关的 ports。
声音支持。
Ports Collection 构建下部构造 - 位于 /usr/ports 的 Mk/ 和 Tools/ 子目录的 各种各样的文件。
Note: 请查看 重要警告:您应该 总是更新这个 子 collection,无论您更新 FreeBSD Ports Collection 的任何部分的时候!
基准。
生物学。
计算机辅助设计工具。
中文语言支持。
通信软件。
字符编码转换。
数据库
计算机发明前常出现在桌面上的东西。
开发工具。
DNS 相关软件。
编辑器
其它操作系统的模拟器
货币,金融相关应用程序。
FTP 客户端和服务器端工具。
游戏
德语支持。
图形图像工具。
希伯来语支持。
匈牙利语言支持。
Internet 多线交谈(IRC)工具。
日语支持。
Java 工具。
韩国语言支持。
编程语言。
邮件软件。
数值计算软件。
MBone 应用程序。
杂样工具。
多媒体软件。
网络软件。
网管软件。
USENET 新闻软件。
Palm™ 系列软件支持。
波兰语支持。
葡萄牙语支持。
打印软件。
俄语支持。
科学计算。
安全工具。
命令行 shell。
系统实用工具。
文本处理工具(不 包含桌面出版)。
乌克兰语支持。
越南语支持。
万维网(WWW)相关软件。
支持 X window 系统的 ports。
X11 时钟。
X11 文件管理器。
X11 字体和字体工具。
X11 工具包。
X11 服务器。
X11 主题。
X11 窗口管理器。
FreeBSD 主代码,包含密码系统的代码。
/usr/src 顶层的各式各样的文件。
但用户模式下可能用到的用户工具 (/usr/src/bin)。
FreeBSD 项目之外的工具和库,通常在 FreeBSD 中不作修改 (/usr/src/contrib)。
FreeBSD 项目之外的 密码系统工具和库,通常在 FreeBSD 中不作修改 (/usr/src/crypto)。
Kerberos 和 DES (/usr/src/eBones)。 没有在当前的 FreeBSD 发行中使用。
系统配置文件 (/usr/src/etc)。
游戏 (/usr/src/games)。
GNU 公共许可协议的工具 (/usr/src/gnu)。
头文件 (/usr/src/include)。
Kerberos5 安全包 (/usr/src/kerberos5)。
KerberosIV 安全包 (/usr/src/kerberosIV)。
库 (/usr/src/lib)。
通常被其它程序调用的系统程序 (/usr/src/libexec)。
生成 FreeBSD 版本必需的文件 (/usr/src/release)。
但用户模式的系统工具 (/usr/src/sbin)。
密码相关库和命令 (/usr/src/secure)。
跨多个平台的共享的文件 (/usr/src/share)。
内核 (/usr/src/sys)。
内核密码系统代码 (/usr/src/sys/crypto)。
维护 FreeBSD 的各种各样的工具 (/usr/src/tools)。
用户工具 (/usr/src/usr.bin)。
系统工具 (/usr/src/usr.sbin)。
FreeBSD WWW 站点的源代码。
CVSup 服务器的 配置文件。用于 CVSup 镜像站点。
GNATS bug 跟踪数据库。
FreeBSD 邮件列表存档。
预处理过的 FreeBSD WWW 站点文件(不是源文件)。 用于 WWW 镜像站点。
CVSup FAQ 和关于 CVSup 的其它信息,请查看 CVSup 主页。
大多数 CVSup 的和 FreeBSD 相关的讨论都在 FreeBSD 技术讨论邮件列表。软件的新版本在那发布, 还有 FreeBSD 公告邮件列表。
问题和 bug 报告应该发给 程序作者 <cvsup-bugs@polstra.com>。
FreeBSD 的 CVSup 服务器运行于 下列站点:
中央服务器, 主要镜像站点, 阿根廷, 爱尔兰, 爱沙尼亚, 奥地利, 澳大利亚, 巴西, 冰岛, 波兰, 丹麦, 德国, 俄罗斯, 法国, 菲律宾, 芬兰, 哥斯达黎加, 韩国, 荷兰, 吉尔吉斯斯坦, 加拿大, 捷克共和国, 科威特, 拉脱维亚, 立陶宛, 罗马尼亚, 美国, 南非, 挪威, 葡萄牙, 日本, 瑞典, 瑞士, 圣马力诺, 斯洛伐克共和国, 斯洛文尼亚, 泰国, 土耳其, 乌克兰, 西班牙, 希腊, 新加坡, 新西兰, 匈牙利, 意大利, 印度尼西亚, 英国, 中国大陆, 中国台湾.
(2005/05/08 12:09:50 UTC 更新)
cvsup.FreeBSD.org
cvsup1.FreeBSD.org
cvsup2.FreeBSD.org
cvsup3.FreeBSD.org
cvsup4.FreeBSD.org
cvsup5.FreeBSD.org
cvsup6.FreeBSD.org
cvsup7.FreeBSD.org
cvsup8.FreeBSD.org
cvsup9.FreeBSD.org
cvsup10.FreeBSD.org
cvsup11.FreeBSD.org
cvsup12.FreeBSD.org
cvsup13.FreeBSD.org
cvsup14.FreeBSD.org
cvsup15.FreeBSD.org
cvsup16.FreeBSD.org
cvsup18.FreeBSD.org
cvsup.ar.FreeBSD.org
cvsup.ie.FreeBSD.org
cvsup.ee.FreeBSD.org
cvsup.at.FreeBSD.org
cvsup2.at.FreeBSD.org
cvsup.au.FreeBSD.org
cvsup2.au.FreeBSD.org
cvsup3.au.FreeBSD.org
cvsup4.au.FreeBSD.org
cvsup5.au.FreeBSD.org
cvsup6.au.FreeBSD.org
cvsup7.au.FreeBSD.org
cvsup.br.FreeBSD.org
cvsup2.br.FreeBSD.org
cvsup3.br.FreeBSD.org
cvsup4.br.FreeBSD.org
cvsup5.br.FreeBSD.org
cvsup.is.FreeBSD.org
cvsup.pl.FreeBSD.org
cvsup2.pl.FreeBSD.org
cvsup3.pl.FreeBSD.org
cvsup.dk.FreeBSD.org
cvsup2.dk.FreeBSD.org
cvsup3.dk.FreeBSD.org
cvsup.de.FreeBSD.org
cvsup2.de.FreeBSD.org
cvsup3.de.FreeBSD.org
cvsup4.de.FreeBSD.org
cvsup5.de.FreeBSD.org
cvsup6.de.FreeBSD.org
cvsup7.de.FreeBSD.org
cvsup8.de.FreeBSD.org
cvsup.ru.FreeBSD.org
cvsup2.ru.FreeBSD.org
cvsup3.ru.FreeBSD.org
cvsup4.ru.FreeBSD.org
cvsup5.ru.FreeBSD.org
cvsup6.ru.FreeBSD.org
cvsup.fr.FreeBSD.org
cvsup2.fr.FreeBSD.org
cvsup3.fr.FreeBSD.org
cvsup4.fr.FreeBSD.org
cvsup5.fr.FreeBSD.org
cvsup8.fr.FreeBSD.org
cvsup1.ph.FreeBSD.org
cvsup.fi.FreeBSD.org
cvsup2.fi.FreeBSD.org
cvsup1.cr.FreeBSD.org
cvsup.kr.FreeBSD.org
cvsup2.kr.FreeBSD.org
cvsup3.kr.FreeBSD.org
cvsup.nl.FreeBSD.org
cvsup2.nl.FreeBSD.org
cvsup3.nl.FreeBSD.org
cvsup5.nl.FreeBSD.org
cvsup.kg.FreeBSD.org
cvsup1.ca.FreeBSD.org
cvsup.cz.FreeBSD.org
cvsup1.kw.FreeBSD.org
cvsup.lv.FreeBSD.org
cvsup.lt.FreeBSD.org
cvsup2.lt.FreeBSD.org
cvsup3.lt.FreeBSD.org
cvsup.ro.FreeBSD.org
cvsup1.ro.FreeBSD.org
cvsup2.ro.FreeBSD.org
cvsup3.ro.FreeBSD.org
cvsup1.us.FreeBSD.org
cvsup2.us.FreeBSD.org
cvsup3.us.FreeBSD.org
cvsup4.us.FreeBSD.org
cvsup5.us.FreeBSD.org
cvsup6.us.FreeBSD.org
cvsup7.us.FreeBSD.org
cvsup8.us.FreeBSD.org
cvsup9.us.FreeBSD.org
cvsup10.us.FreeBSD.org
cvsup11.us.FreeBSD.org
cvsup12.us.FreeBSD.org
cvsup13.us.FreeBSD.org
cvsup14.us.FreeBSD.org
cvsup15.us.FreeBSD.org
cvsup16.us.FreeBSD.org
cvsup18.us.FreeBSD.org
cvsup.za.FreeBSD.org
cvsup2.za.FreeBSD.org
cvsup.no.FreeBSD.org
cvsup.pt.FreeBSD.org
cvsup2.pt.FreeBSD.org
cvsup3.pt.FreeBSD.org
cvsup.jp.FreeBSD.org
cvsup2.jp.FreeBSD.org
cvsup3.jp.FreeBSD.org
cvsup4.jp.FreeBSD.org
cvsup5.jp.FreeBSD.org
cvsup6.jp.FreeBSD.org
cvsup.se.FreeBSD.org
cvsup3.se.FreeBSD.org
cvsup.ch.FreeBSD.org
cvsup.sm.FreeBSD.org
cvsup.sk.FreeBSD.org
cvsup2.sk.FreeBSD.org
cvsup.si.FreeBSD.org
cvsup2.si.FreeBSD.org
cvsup.th.FreeBSD.org
cvsup.tr.FreeBSD.org
cvsup2.ua.FreeBSD.org
cvsup3.ua.FreeBSD.org
cvsup4.ua.FreeBSD.org
cvsup5.ua.FreeBSD.org
cvsup6.ua.FreeBSD.org
cvsup7.ua.FreeBSD.org
cvsup.es.FreeBSD.org
cvsup2.es.FreeBSD.org
cvsup3.es.FreeBSD.org
cvsup.gr.FreeBSD.org
cvsup2.gr.FreeBSD.org
cvsup.sg.FreeBSD.org
cvsup.nz.FreeBSD.org
cvsup.hu.FreeBSD.org
cvsup.it.FreeBSD.org
cvsup.id.FreeBSD.org
cvsup.uk.FreeBSD.org
cvsup2.uk.FreeBSD.org
cvsup3.uk.FreeBSD.org
cvsup4.uk.FreeBSD.org
cvsup.cn.FreeBSD.org
cvsup2.cn.FreeBSD.org
cvsup3.cn.FreeBSD.org
cvsup4.cn.FreeBSD.org
cvsup5.cn.FreeBSD.org
cvsup.tw.FreeBSD.org
cvsup3.tw.FreeBSD.org
cvsup4.tw.FreeBSD.org
cvsup5.tw.FreeBSD.org
cvsup6.tw.FreeBSD.org
cvsup7.tw.FreeBSD.org
cvsup8.tw.FreeBSD.org
cvsup9.tw.FreeBSD.org
cvsup10.tw.FreeBSD.org
cvsup11.tw.FreeBSD.org
cvsup12.tw.FreeBSD.org
cvsup13.tw.FreeBSD.org
当使用 cvs 或者 CVSup 获取和升级源代码的时候,必须指定一个修订标签。 修订标签代表 FreeBSD 开发的一个特定分支, 或者一个特定的时间点。第一种叫做 “分支标签”,第二种叫做 “版本标签”。
所有这些,除了 HEAD (这个总是 合法标签)以外,只适用于 src/ 树。ports/,doc/,和 www/ 树没有分支。
主线的符号名,或者说 FreeBSD-CURRENT。 当没有指定修订版本的时候也是默认的。
在 CVSup 里,这个标签通过 一个 . 来反映出来(不是标点,而是一个 . 字符)。
Note: 在 CVS 里,当没有修订标签指定时这是默认的。 在一台 STABLE 机器上检出或者升级到 CURRENT 源代码 通常不是 一个好主意,除非这是您的本意。
这是 FreeBSD-5.X 的开发分支, 也被称作 FreeBSD 5-STABLE。
FreeBSD-5.3 安全分支。 只被安全公告和其它重要更新使用。
针对 FreeBSD-5.2 和 FreeBSD-5.2.1 的发行版本分支,只做 安全咨询和其它紧急的修正。
针对 FreeBSD-5.1 的发行版本分支,只做 安全咨询和其它紧急的修正。
针对 FreeBSD-5.0 的发行版本分支,只做 安全咨询和其它紧急的修正。
FreeBSD-4.X 开发线,也被叫做 FreeBSD-STABLE。
FreeBSD-4.11 发行版, 只被安全公告和其它重要更新使用。
针对 FreeBSD-4.10 的发行版本分支,只做 安全咨询和其它紧急的修正。
针对 FreeBSD-4.9 的发行版本分支,只做 安全咨询和其它紧急的修正。
针对 FreeBSD-4.8 的发行版本分支,只做 安全咨询和其它紧急的修正。
针对 FreeBSD-4.7 的发行版本分支,只做 安全咨询和其它紧急的修正。
针对 FreeBSD-4.6 和 FreeBSD-4.6.2 的发行版本分支,只做 安全咨询和其它紧急的修正。
针对 FreeBSD-4.5 的发行版本分支,只做 安全咨询和其它紧急的修正。
针对 FreeBSD-4.4 的发行版本分支,只做 安全咨询和其它紧急的修正。
针对 FreeBSD-4.3 的发行版本分支,只做 安全咨询和其它紧急的修正。
FreeBSD-3.X 的开发线,也被叫做 3.X-STABLE。
FreeBSD-2.2.X 的开发线,也被叫做 2.2-STABLE。这个分支过于陈旧了。
当一个特定的 FreeBSD 版本发行时, 这些标签代表了一个指定的时间点。发布工程进程在 Release Engineering Information 和 Release Process 文档中被详细描述。 src 树使用以 RELENG_ 开头的标签。 ports 和 doc 树使用以 RELEASE 开头的标签。 最后, www 树上不会有任何特定发行版的标签。
FreeBSD 4.11
FreeBSD 5.3
FreeBSD 4.10
FreeBSD 5.2.1
FreeBSD 5.2
FreeBSD 4.9
FreeBSD 5.1
FreeBSD 4.8
FreeBSD 5.0
FreeBSD 4.7
FreeBSD 4.6.2
FreeBSD 4.6.1
FreeBSD 4.6
FreeBSD 4.5
FreeBSD 4.4
FreeBSD 4.3
FreeBSD 4.2
FreeBSD 4.1.1
FreeBSD 4.1
FreeBSD 4.0
FreeBSD-3.5
FreeBSD-3.4
FreeBSD-3.3
FreeBSD-3.2
FreeBSD-3.1
FreeBSD-3.0
FreeBSD-2.2.8
FreeBSD-2.2.7
FreeBSD-2.2.6
FreeBSD-2.2.5
FreeBSD-2.2.2
FreeBSD-2.2.1
FreeBSD-2.2.0
FreeBSD 的 AFS 服务器运行于下面的站点:
文件的路径是: /afs/stacken.kth.se/ftp/pub/FreeBSD/
stacken.kth.se # Stacken Computer Club, KTH, Sweden 130.237.234.43 #hot.stacken.kth.se 130.237.237.230 #fishburger.stacken.kth.se 130.237.234.3 #milko.stacken.kth.se
维护者 <ftp@stacken.kth.se>
下面的站点让 FreeBSD 可以通过 rsync 协议下载。 rsync 实用程序和 rcp(1) 的工作方式很相像, 但是有更多的选项,使用 rsync 远程更新协议只传输 两份文件的不同之处, 因此能够大幅度的提高网络同步速率。 如果您是 FreeBSD FTP 服务器或者 CVS 仓库的镜像站点, 这一点非常有用。 rsync 套件可以工作在许多种 操作系统上,在 FreeBSD 上,查看 net/rsync port 或者使用 package。
rsync://ftp.cz.FreeBSD.org/
可用的 collection:
ftp:FreeBSD FTP 服务器的 部分镜像。
FreeBSD:FreeBSD FTP 服务器的 完整镜像。
rsync://grappa.unix-ag.uni-kl.de/
可用的 collection:
freebsd-cvs:完整的 FreeBSD CVS 仓库。
这台服务器也镜像 NetBSD 和 OpenBSD 项目, 还有其他的一些项目的 CVS 仓库。
rsync://ftp.nl.FreeBSD.org/
可用的 collection:
vol/4/freebsd-core: 对于 FreeBSD FTP 服务器的完整镜像。
rsync://rsync.mirror.ac.uk/
可用的 collection:
ftp.FreeBSD.org: FreeBSD FTP 服务器 的完整镜像。
rsync://ftp-master.FreeBSD.org/
服务器只供 FreeBSD 主镜像站点使用。
可用的 collection:
FreeBSD:FreeBSD FTP 服务器的主要存档。
acl:FreeBSD 主 ACL 列表。
rsync://ftp13.FreeBSD.org/
可用的 collection:
FreeBSD:FreeBSD FTP 服务器的完整 镜像。
尽管手册页能够提供对于 FreeBSD 操作系统最为权威的参考资料,它们有时却不能告诉我们如何让整个系统很好地运转起来。 因此,一本关于 UNIX 系统管理的好书,以及一份好的用户手册是不可或缺的。
非英文的书籍和杂志:
FreeBSD 入门与应用 (繁体中文)。
FreeBSD 技术内幕(中译本), 机械工业出版社。ISBN 7-111-10201-0。
FreeBSD 使用大全 第一版, 机械工业出版社。ISBN 7-111-07482-3。
FreeBSD 使用大全 第二版, 机械工业出版社。ISBN 7-111-10286-X。
FreeBSD Handbook (第二版中译本), 人民邮电出版社。ISBN 7-115-10541-3。
FreeBSD 3.x Internet 高级服务器的架设与管理 清华大学出版社。ISBN 7-900625-66-6。
FreeBSD & Windows 集成组网实务,中国铁道出版社。ISBN 7-113-03845-X。
FreeBSD 网站架设实务,中国铁道出版社。ISBN 7-113-03423-3。
FreeBSD for PC 98'ers (日文, 出版商:SHUWA System Co, LTD. ISBN 4-87966-468-5 C3055 P2900E。
FreeBSD (日文, 出版商:CUTT. ISBN 4-906391-22-2 C3055 P2400E.
Complete Introduction to FreeBSD (日文, 出版商:Shoeisha Co., Ltd. ISBN 4-88135-473-6 P3600E.
Personal UNIX Starter Kit FreeBSD (日文, 出版商:ASCII. ISBN 4-7561-1733-3 P3000E.
FreeBSD Handbook (日文译本, 出版商:ASCII. ISBN 4-7561-1580-2 P3800E.
FreeBSD mit Methode (德文, 出版商:Computer und Literatur Verlag/Vertrieb Hanser, 1998. ISBN 3-932311-31-0.
FreeBSD 4 - Installieren, Konfigurieren, Administrieren (德文, 出版商:Computer und Literatur Verlag, 2001. ISBN 3-932311-88-4.
FreeBSD 5 - Installieren, Konfigurieren, Administrieren (德文), 出版商: Computer und Literatur Verlag, 2003. ISBN 3-936546-06-1.
FreeBSD de Luxe (德文), 出版商: Verlag Modere Industrie, 2003. ISBN 3-8266-1343-0.
FreeBSD Install and Utilization Manual (日文), 出版商: Mainichi Communications Inc..
Onno W Purbo, Dodi Maryanto, Syahrial Hubbany, Widjil Widodo Building Internet Server with FreeBSD (印尼文), 出版商: Elex Media Komputindo.
英文版的书籍和杂志:
Absolute BSD: The Ultimate Guide to FreeBSD, 出版商: No Starch Press, 2002. ISBN: 1886411743
The Complete FreeBSD, 出版商: O'Reilly, 2003. ISBN: 0596005164
The FreeBSD Corporate Networker's Guide, 出版商: Addison-Wesley, 2000. ISBN: 0201704811
FreeBSD: An Open-Source Operating System for Your Personal Computer, 出版商: The Bit Tree Press, 2001. ISBN: 0971204500
Teach Yourself FreeBSD in 24 Hours, 出版商: Sams, 2002. ISBN: 0672324245
FreeBSD unleashed, 出版商: Sams, 2002. ISBN: 0672324563
FreeBSD: The Complete Reference, 出版商: McGrawHill, 2003. ISBN: 0072224096
Computer Systems Research Group, UC Berkeley. 4.4BSD User's Reference Manual. O'Reilly & Associates, Inc., 1994. ISBN 1-56592-075-9
Computer Systems Research Group, UC Berkeley. 4.4BSD User's Supplementary Documents. O'Reilly & Associates, Inc., 1994. ISBN 1-56592-076-7
UNIX in a Nutshell. O'Reilly & Associates, Inc., 1990. ISBN 093717520X
Mui, Linda. What You Need To Know When You Can't Find Your UNIX System Administrator. O'Reilly & Associates, Inc., 1995. ISBN 1-56592-104-6
Ohio State University 编写了一份 UNIX 介绍性课程 ,并提供在线的 HTML 和 PostScript 版本。
这份文档的意大利文 翻译 是 FreeBSD Italian Documentation Project 的一部分。
Jpman Project, Japan FreeBSD Users Group. FreeBSD User's Reference Manual (日文译本). Mainichi Communications Inc., 1998. ISBN4-8399-0088-4 P3800E.
Edinburgh University has written an Online Guide for newcomers to the UNIX environment.
Albitz, Paul and Liu, Cricket. DNS and BIND, 4th Ed. O'Reilly & Associates, Inc., 2001. ISBN 1-59600-158-4
Computer Systems Research Group, UC Berkeley. 4.4BSD System Manager's Manual. O'Reilly & Associates, Inc., 1994. ISBN 1-56592-080-5
Costales, Brian, et al. Sendmail, 2nd Ed. O'Reilly & Associates, Inc., 1997. ISBN 1-56592-222-0
Frisch, Æleen. Essential System Administration, 2nd Ed. O'Reilly & Associates, Inc., 1995. ISBN 1-56592-127-5
Hunt, Craig. TCP/IP Network Administration, 2nd Ed. O'Reilly & Associates, Inc., 1997. ISBN 1-56592-322-7
Nemeth, Evi. UNIX System Administration Handbook. 3rd Ed. Prentice Hall, 2000. ISBN 0-13-020601-6
Stern, Hal Managing NFS and NIS O'Reilly & Associates, Inc., 1991. ISBN 0-937175-75-7
Jpman Project, Japan FreeBSD Users Group. FreeBSD System Administrator's Manual (日文译本). Mainichi Communications Inc., 1998. ISBN4-8399-0109-0 P3300E.
Dreyfus, Emmanuel. Cahiers de l'Admin: BSD 2nd Ed. (in French), Eyrolles, 2004. ISBN 2-212-11463-X
Asente, Paul, Converse, Diana, and Swick, Ralph. X Window System Toolkit. Digital Press, 1998. ISBN 1-55558-178-1
Computer Systems Research Group, UC Berkeley. 4.4BSD Programmer's Reference Manual. O'Reilly & Associates, Inc., 1994. ISBN 1-56592-078-3
Computer Systems Research Group, UC Berkeley. 4.4BSD Programmer's Supplementary Documents. O'Reilly & Associates, Inc., 1994. ISBN 1-56592-079-1
Harbison, Samuel P. and Steele, Guy L. Jr. C: A Reference Manual. 4th ed. Prentice Hall, 1995. ISBN 0-13-326224-3
Kernighan, Brian and Dennis M. Ritchie. The C Programming Language. 2nd Ed. PTR Prentice Hall, 1988. ISBN 0-13-110362-8
Lehey, Greg. Porting UNIX Software. O'Reilly & Associates, Inc., 1995. ISBN 1-56592-126-7
Plauger, P. J. The Standard C Library. Prentice Hall, 1992. ISBN 0-13-131509-9
Spinellis, Diomidis. Code Reading: The Open Source Perspective. Addison-Wesley, 2003. ISBN 0-201-79940-5
Stevens, W. Richard. Advanced Programming in the UNIX Environment. Reading, Mass. : Addison-Wesley, 1992. ISBN 0-201-56317-7
Stevens, W. Richard. UNIX Network Programming. 2nd Ed, PTR Prentice Hall, 1998. ISBN 0-13-490012-X
Wells, Bill. “Writing Serial Drivers for UNIX”. Dr. Dobb's Journal. 19(15), December 1994. pp68-71, 97-99.
Andleigh, Prabhat K. UNIX System Architecture. Prentice-Hall, Inc., 1990. ISBN 0-13-949843-5
Jolitz, William. “Porting UNIX to the 386”. Dr. Dobb's Journal. 1991年1月 - 1992年6月
Leffler, Samuel J., Marshall Kirk McKusick, Michael J Karels and John Quarterman The Design and Implementation of the 4.3BSD UNIX Operating System. Reading, Mass. : Addison-Wesley, 1989. ISBN 0-201-06196-1
Leffler, Samuel J., Marshall Kirk McKusick, The Design and Implementation of the 4.3BSD UNIX Operating System: Answer Book. Reading, Mass. : Addison-Wesley, 1991. ISBN 0-201-54629-9
McKusick, Marshall Kirk, Keith Bostic, Michael J Karels, and John Quarterman. The Design and Implementation of the 4.4BSD Operating System. Reading, Mass. : Addison-Wesley, 1996. ISBN 0-201-54979-4
(这本书的第二章的 在线版本 是 FreeBSD Documentation Project 的一部分, 另外, 第九章可以在 这里 找到。)
Marshall Kirk McKusick, George V. Neville-Neil The Design and Implementation of the FreeBSD Operating System. Boston, Mass. : Addison-Wesley, 2004. ISBN 0-201-70245-2
Stevens, W. Richard. TCP/IP Illustrated, Volume 1: The Protocols. Reading, Mass. : Addison-Wesley, 1996. ISBN 0-201-63346-9
Schimmel, Curt. Unix Systems for Modern Architectures. Reading, Mass. : Addison-Wesley, 1994. ISBN 0-201-63338-8
Stevens, W. Richard. TCP/IP Illustrated, Volume 3: TCP for Transactions, HTTP, NNTP and the UNIX Domain Protocols. Reading, Mass. : Addison-Wesley, 1996. ISBN 0-201-63495-3
Vahalia, Uresh. UNIX Internals -- The New Frontiers. Prentice Hall, 1996. ISBN 0-13-101908-2
Wright, Gary R. and W. Richard Stevens. TCP/IP Illustrated, Volume 2: The Implementation. Reading, Mass. : Addison-Wesley, 1995. ISBN 0-201-63354-X
Cheswick, William R. and Steven M. Bellovin. Firewalls and Internet Security: Repelling the Wily Hacker. Reading, Mass. : Addison-Wesley, 1995. ISBN 0-201-63357-4
Garfinkel, Simson and Gene Spafford. Practical UNIX & Internet Security. 2nd Ed. O'Reilly & Associates, Inc., 1996. ISBN 1-56592-148-8
Garfinkel, Simson. PGP Pretty Good Privacy O'Reilly & Associates, Inc., 1995. ISBN 1-56592-098-8
Anderson, Don and Tom Shanley. Pentium Processor System Architecture. 2nd Ed. Reading, Mass. : Addison-Wesley, 1995. ISBN 0-201-40992-5
Ferraro, Richard F. Programmer's Guide to the EGA, VGA, and Super VGA Cards. 3rd ed. Reading, Mass. : Addison-Wesley, 1995. ISBN 0-201-62490-7
Intel 公司在他们的 开发人员网站上, 提供了关于他们的 CPU,芯片组,以及标准的文档。多数是PDF文件.
Shanley, Tom. 80486 System Architecture. 3rd ed. Reading, Mass. : Addison-Wesley, 1995. ISBN 0-201-40994-1
Shanley, Tom. ISA System Architecture. 3rd ed. Reading, Mass. : Addison-Wesley, 1995. ISBN 0-201-40996-8
Shanley, Tom. PCI System Architecture. 4th ed. Reading, Mass. : Addison-Wesley, 1999. ISBN 0-201-30974-2
Van Gilluwe, Frank. The Undocumented PC, 2nd Ed. Reading, Mass: Addison-Wesley Pub. Co., 1996. ISBN 0-201-47950-8
Messmer, Hans-Peter. The Indispensable PC Hardware Book, 4th Ed. Reading, Mass: Addison-Wesley Pub. Co., 2002. ISBN 0-201-59616-4
Lion, John Lion's Commentary on UNIX, 6th Ed. With Source Code. ITP Media Group, 1996. ISBN 1573980137
Raymond, Eric S. The New Hacker's Dictionary, 3rd edition. MIT Press, 1996. ISBN 0-262-68092-0. 它也被称作 Jargon File
Salus, Peter H. A quarter century of UNIX. Addison-Wesley Publishing Company, Inc., 1994. ISBN 0-201-54777-5
Simon Garfinkel, Daniel Weise, Steven Strassmann. The UNIX-HATERS Handbook. IDG Books Worldwide, Inc., 1994. ISBN 1-56884-203-1. Out of print, but available online.
Don Libes, Sandy Ressler Life with UNIX -- special edition. Prentice-Hall, Inc., 1989. ISBN 0-13-536657-7
BSD 族谱. http://www.FreeBSD.org/cgi/cvsweb.cgi/src/share/misc/bsd-family-tree 或在 FreeBSD 机器上的 /usr/share/misc/bsd-family-tree 。
The BSD Release Announcements collection. 1997. http://www.de.FreeBSD.org/de/ftp/releases/
Networked Computer Science Technical Reports Library. http://www.ncstrl.org/
Old BSD releases from the Computer Systems Research group (CSRG). http://www.mckusick.com/csrg/: The 4CD set covers all BSD versions from 1BSD to 4.4BSD and 4.4BSD-Lite2 (but not 2.11BSD, unfortunately). The last disk also holds the final sources plus the SCCS files.
The C/C++ Users Journal. R&D Publications Inc. ISSN 1075-2838
Sys Admin -- The Journal for UNIX System Administrators Miller Freeman, Inc., ISSN 1061-2688
freeX -- Das Magazin für Linux - BSD - UNIX (德文) Computer- und Literaturverlag GmbH, ISSN 1436-7033
发展迅猛的FreeBSD使得现有的印刷、平面媒体跟不上它的发展进度! 而电子版的也许是最好的,通常是唯一一个可以跟上最新发展方向的。FreeBSD来自于志愿者的成果, 用户社区通常也扮演着是“技术支持部门”的角色。通过电子邮件和USENET新闻组可以很快的找到他们。
以下列出了尽量多的联系FreeBSD用户社区的方式。如果您发现有其他的资源没有被包括在这儿, 请告诉FreeBSD 文档计划邮件列表,以便将它们加入到这里。
虽然大部分的FreeBSD开发人员都会阅读USENET, 如果您只将问题发表在 comp.unix.bsd.freebsd.* 其中之一的讨论组上, 我们也不能保证我们永远可以及时了解您的问题。如果您将问题发到适当的邮件列表上, 您不但可以同时让FreeBSD研发人员和其他的读者看到, 通常也可以得到一个较好的(至少会比较快)的回应。
本文的最后给出了各个不同的邮件列表的使用规则。 在订阅其中任何一个列表之前,请先阅读使用条文。 现在订阅这些邮件列表的人每天都会收到上百封关于FreeBSD的信件。 设立列表的使用条文有助于维护讨论质量。否则这些讨论计划的列表将失去其意义。
如果不知道哪个邮件列表适合于发送您的问题, 请参见 如何从 FreeBSD-questions 邮件列表中更快地得到答案。
在列表中发送任何问题之前, 请首先学习使用邮件列表的最佳方式, 例如如何通过阅读 邮件列表常见问题回答集 (FAQ) 文档, 来避免经常重复的讨论。
全部的邮件列表记录都可以在FreeBSD World Wide Web服务器上找到。此服务器提供了很棒的关键词搜寻功能,可让您找到FAQ的解答。 而在邮件列表上提问之前,请先搜寻是否已有答案。
一般性的列表: 以下的列表都是一般性的, 而且可以自由地加入,鼓励大家加入他们:
| 目录 | 用途 |
|---|---|
| cvs-all | FreeBSD源代码的变动 |
| freebsd-advocacy | FreeBSD鼓吹者 |
| freebsd-announce | 重要的事件和里程碑 |
| freebsd-arch | 架构和设计的讨论 |
| freebsd-bugbusters | 与FreeBSD问题报告数据库和有关工具维护相关的讨论 |
| freebsd-bugs | 报告FreeBSD的Bug |
| freebsd-chat | 和技术无关的FreeBSD讨论区 |
| freebsd-current | 讨论使用 FreeBSD-CURRENT 有关的一些问题 |
| freebsd-isp | ISP使用FreeBSD的讨论 |
| freebsd-jobs | 与FreeBSD有关的工作机会 |
| freebsd-newbies | FreeBSD新手在这里活跃和讨论 |
| freebsd-policy | FreeBSD核心团队方针讨论。低流量并且只读的 |
| freebsd-questions | 用户问题和技术支持 |
| freebsd-security-notifications | 安全通知 |
| freebsd-stable | 讨论使用 FreeBSD-STABLE 有关的一些问题 |
| freebsd-test | 在真正发送一个邮件到邮件列表之前可以先发送到这里测试 |
技术性的邮件列表: 以下的邮件列表是用来讨论技术性问题的。 在加入订阅及讨论之前请务必认真阅读每个列表主题,因为他们讨论的内容都是严格地被限制着的。
| 目录 | 用途 |
|---|---|
| freebsd-acpi | ACPI 和电源管理的开发 |
| freebsd-afs | 将 AFS 移植到 FreeBSD |
| freebsd-aic7xxx | 为 Adaptec AIC 7xxx 开发驱动 |
| freebsd-alpha | 将 FreeBSD 移植到 Alpha 工作站 |
| freebsd-amd64 | 将 FreeBSD 移植到 AMD64 系统 |
| freebsd-apache | 关于与 Apache 有关的 ports 的讨论 |
| freebsd-arm | 将 FreeBSD 移植到 ARM® 处理器 |
| freebsd-atm | 在 FreeBSD 上使用 ATM 网络 |
| freebsd-audit | 源代码审核 |
| freebsd-binup | 二进制更新系统的设计和开发 |
| freebsd-bluetooth | 在 FreeBSD 上使用 Bluetooth 技术 |
| freebsd-cluster | 在集群环境中使用 FreeBSD |
| freebsd-cvsweb | CVSweb 维护 |
| freebsd-database | 讨论 FreeBSD 下开发和使用数据库 |
| freebsd-doc | 创建 FreeBSD 相关文档 |
| freebsd-emulation | 在 FreeBSD 上模拟其它系统, 如 Linux/MS-DOS/Windows |
| freebsd-firewire | FreeBSD 的 FireWire® (iLink, IEEE 1394) 技术讨论 |
| freebsd-fs | 文件系统 |
| freebsd-geom | 针对 GEOM 的讨论和实现 |
| freebsd-gnome | 移植 GNOME 和 GNOME应用程序 |
| freebsd-hackers | 一般性的技术讨论 |
| freebsd-hardware | 一般性的支持 FreeBSD 的硬件的讨论 |
| freebsd-i18n | FreeBSD 的国际化 |
| freebsd-ia32 | 在 IA-32 (Intel x86) 平台上运行 FreeBSD |
| freebsd-ia64 | 将 FreeBSD 移植到 Intel 即将推出的 IA64 系统 |
| freebsd-ipfw | 关于 IP 防火墙代码再设计的技术性讨论 |
| freebsd-isdn | ISDN开发人员 |
| freebsd-java | Java 开发人员以及移植 JDKs 到 FreeBSD 的人们 |
| freebsd-kde | 移植 KDE 和 KDE 应用程序 |
| freebsd-lfs | 移植 LFS 到FreeBSD上 |
| freebsd-libh | 第二代的安装和 package 系统 |
| freebsd-mips | 移植 FreeBSD 到 MIPS® |
| freebsd-mobile | 关于便携式计算机的讨论 |
| freebsd-mozilla | 移植 Mozilla 到 FreeBSD 上 |
| freebsd-multimedia | 多媒体应用程序 |
| freebsd-new-bus | 技术讨论关于总线架构 |
| freebsd-net | 网络子系统和 TCP/IP 源代码的讨论 |
| freebsd-openoffice | 移植 OpenOffice.org 和 StarOffice 到 FreeBSD 上 |
| freebsd-performance | 高性能、负载下安装后的性能调整问题 |
| freebsd-perl | 许多与 perl 相关的 ports 的维护 |
| freebsd-pf | 关于 packet filter 防火墙系统的讨论 |
| freebsd-platforms | 关于向非 Intel 架构的平台上移植的讨论 |
| freebsd-ports | 关于 Ports Collection 的讨论 |
| freebsd-ports-bugs | ports bugs/PRs讨论 |
| freebsd-ppc | 移植 FreeBSD 到 PowerPC® |
| freebsd-python | FreeBSD 专属的 Python 问题 |
| freebsd-qa | 质量保证(QA)讨论, 通常在未发布之前 |
| freebsd-realtime | FreeBSD 实时扩展的开发 |
| freebsd-scsi | SCSI 子系统 |
| freebsd-security | 系统安全 |
| freebsd-small | 在嵌入式系统上使用 FreeBSD |
| freebsd-smp | 有关对称多处理器的设计讨论 |
| freebsd-sparc64 | 移植 FreeBSD 到 Sparc® 系统 |
| freebsd-standards | 让 FreeBSD 顺应 C99 以及 POSIX 标准 |
| freebsd-threads | 线程 |
| freebsd-testing | FreeBSD 性能和稳定性测试 |
| freebsd-tokenring | 在 FreeBSD 中支持 Token Ring |
| freebsd-usb | 关于 FreeBSD 的 USB 支持的讨论 |
| freebsd-vuxml | 关于 VuXML 的问题讨论 |
| freebsd-x11 | 维护和支持在 FreeBSD 上运行的 X11 |
限制订阅的列表: 以下的列表是针对某些特定的读者而设的, 而且并不适合被当成是一般公开讨论区。您最好在某一技术讨论区参与讨论后再选择订阅这些 限制订阅的邮件列表,因为这样您可以了解到在这些讨论区发言所需要的礼仪。
| 目录 | 用途 |
|---|---|
| freebsd-hubs | 运行镜象站点的成员(支持基本服务) |
| freebsd-user-groups | 用户组调整 |
| freebsd-vendors | 商家在发布之前的调整 |
| freebsd-www | www.FreeBSD.org的维护 |
分类列表: 所有以上的列表在一个分类格式里面是可利用的。 一旦订阅了一个列表,您可以在您的账号选项里面设置您的分类选项。
CVS列表: 以下的邮件是给对FreeBSD源代码的变更记录有兴趣的人看的, 而且它们是只读的邮件列表,您不能发Email给他们。
| 列表 | 源位置 | 描述 |
|---|---|---|
| cvs-all | /usr/(CVSROOT|doc|ports|projects|src) | 所有对源代码的改变纪录 (其他 CVS commit 列表的超集) |
| cvs-doc | /usr/(doc|www) | 所有对 doc 和 www 源代码的改变记录 |
| cvs-ports | /usr/ports | 所有对 ports 源代码的改变记录 |
| cvs-projects | /usr/projects | 所有对 projects 源代码的改变记录 |
| cvs-src | /usr/src | 所有对 src 源代码的改变记录 |
订阅一个列表,点击上面的列表名字或到 http://lists.FreeBSD.org/mailman/listinfo 并点击进入您感兴趣的列表,这个列表的页面包含了所必需的订阅操作指南。
其实您只需发送邮件到 <listname@FreeBSD.org>。
它将被再次转发到全世界的这个邮件列表的成员。
点击上面的 URL,在列表的底部可以从订阅的列表中退出。 也可以发送一个电子邮件到 <listname-unsubscribe@FreeBSD.org> 来退订。
此外,我们要求您必须保持在技术性的邮件列表中只是讨论技术。 如果您只是对一些重要的公告感兴趣,建议您加入 FreeBSD 公告邮件列表, 它的通信量比较低。
所有 FreeBSD
的邮件列表都有同样的基本规则, 所有人必须按照规则来做。 违反这些规则时, FreeBSD
Postmaster <postmaster@FreeBSD.org>
会在前两次发送警告, 如果第三次违反, FreeBSD Postmaster 将从所有 FreeBSD
的邮件列表中删除这样的人, 并过滤来自发信人之后的所有邮件。
我们很遗憾必须要遵守这样的规则, 但今天的互联网是一个很混乱的环境,
它上面的很多约束机制, 都相当脆弱。
具体规则:
任何发表的主题都应当附合基本的列表概况。例如,如果列表是有关技术问题的,
那您发表的文章包含技术讨论。不要把不相关的讨论放在一起。
对于没有主题的自由形式的讨论,可以使用 FreeBSD-chat <freebsd-chat@FreeBSD.org>。
不要将同一个问题发送到超过两个的邮件列表上,当有一个清晰和明显的必须要 发表到两个列表的要求时,也只能是两个。对于大多数的列表,已经有相当多的订户了, 除了一些比较深奥的问题(如“-stable & -scsi”) ,没有必要同时将一个问题发到多个列表上。 如果一个信息以这种方式(多个邮件列表在Cc行出现)被发送给您, 那Cc行在把它再发送出去之前也将被整理。 无论谁是最初发表者,都会导致您自己的交叉发送。
不容许进行人身攻击和亵渎(在前后的争论中),包括用户和开发人员。 应当遵守最起码的网络礼节,象需要征得同意才可以引用或张贴私人邮件等。 然而,也有非常少的情况下,这样的内容会符合列表规章, 因此,它会在最初给予警告(或禁止)。
严格的禁止非FreeBSD相关产品或服务的广告,一旦发现将马上取缔。
单独的列表规章:
ACPI和电源管理开发
Andrew文件系统
这个列表是用来讨论porting和从CMU/Transarc使用AFS。
重要事件/里程碑
这是一个发布FreeBSD重大事件的邮件列表。这包括有关snapshots和其他版本的公告, 新的FreeBSD的性能的公告,还可以用于指派志愿者等等。这个列表比较小。
架构和设计讨论
这个列表是讨论FreeBSD的架构。本质上应保证内容的纯技术性。例如主题是:
如何重新创建系统使其同时有几个自己构造的系统运行。
需要什么才能修复VFS来使Heidemann层工作。
我们怎么改变设备驱动程序接口以便能够在多种总线和体系结构上使用同样的驱动程序。
如何写一个网络驱动。
源代码审核计划
这个是针对FreeBSD源代码审核计划的邮件列表, 虽然这最初是针对安全方面代码修正的讨论,现在它已经扩展到任何代码修正的讨论。
这个列表涉及补丁方面的问题比较多,可能普通的FreeBSD用户对此不感兴趣。 不与一个特定的代码修正相关的安全讨论将放在freebsd-security中。相反的, 所有的开发人员都被鼓励把他们的补丁发到这儿来, 特别是如果他们发现有一个错误可能会影响系统的完整性时。
FreeBSD二进制升级计划
这个列表主要是讨论二进制升级binup系统。 设计问题,执行细节,补丁,错误报告,状态报告,特性要求, 提交日志,和所有其他与 binup相关的东西都可以。
FreeBSD 上的 Bluetooth
这是一个 FreeBSD 的 Bluetooth 用户聚集的讨论区。 这里欢迎关于设计问题、 实现细节、 补丁、 问题报告、 开发进度报告, 功能需求以及其他与 Bluetooth 相关的讨论。
同等问题报告处理结果
这个列表的目的是作为一个调整和讨论论坛来服务于Bug列表的成员,Bugbuster列表成员 和其他任何的对PR数据库真正的有兴趣的成员。这个列表不是为了讨论关于Bug细节,补丁或PRs。
Bug报告
这是一个报告FreeBSD的Bug的邮件列表。可以随时通过 send-pr(1) 命令或WEB页面来提交Bug。
与FreeBSD社区相关的非技术性项目
这个列表超出了其他有关非技术、社会信息的内容。 包括谈论Jordan看起来是否像一个机敏的侦探,是否句首的字母要大写, 谁喝了很多咖啡, 哪儿的啤酒酿造的最好,谁在他们的地下室里酿造了啤酒等等。对于偶然宣布重大的事件 (例如:将要举行的聚会,婚礼,生日,新工作等等)也能使用这种技术列表,除上述列举之外 任何事情都可以发布在-chat列表上。
FreeBSD核心团队
这是一个只供核心成员内部使用的邮件列表,只有当一个与FreeBSD相关的严重的事情需要裁决或严格审核时, 才能发送消息到这个邮件列表。
关于使用FreeBSD-CURRENT版的讨论
这是一个针对FreeBSD-CURRENT用户的邮件列表。 它包括一些可能影响用户的新特性的警告,使用FreeBSD-current的一些指导。 任何运行“CURRENT”的人必须同意这个列表,这是一个纯技术的邮件列表。
FreeBSD CVSweb计划
关于FreeBSD-CVSweb的使用,开发和维护的技术性讨论。
文档计划
这个邮件列表是与FreeBSD创建的文档的出版和计划的讨论。 这个邮件列表的成员都会提交到“The FreeBSD Documentation Project”。 它是一个开放的列表,可以自由地加入和做贡献!
FireWire (iLink, IEEE 1394)
这个邮件列表是关于FreeBSD子系统FireWire (aka IEEE 1394 aka iLink)的设计和执行。相关特定的主题包括标准,总线设计和他们的协议, 适配器板/卡/芯片设置,及他们的正确的代码的结构和实施。
文件系统
关于FreeBSD文件系统的讨论。这是一个纯技术的邮件列表。
GEOM
针对GEOM和相关执行的讨论。这是一个纯技术的邮件列表。
GNOME
讨论关于在FreeBSD系统上的GNOME桌面环境 这是一个纯技术的邮件列表。
IP防火墙
这是关于在FreeBSD里重新设计IP防火墙代码的技术讨论论坛。
移植FreeBSD到IA64
这是一个有关将FreeBSD移植到Intel IA64架构上的技术讨论列表, 讨论一些相关的问题与解决方案。也欢迎对这些问题感兴趣的个别讨论者。
ISDN通信
这是一个FreeBSD支持的ISDN系统开发的邮件列表。
Java开发
这是一个讨论Java 应用开发和 JDKs的porting与维护的邮件列表。
工作的提供和寻找
这个论坛是针对与 FreeBSD 相关的雇佣信息和个人简历, 比如: 如果您想找一个与 FreeBSD 相关的工作或有一个工作需要 FreeBSD 这是一个让您来广告的好地方。 这 不 是对一般性雇佣问题的邮件列表, 对这个问题已经有了足够多的论坛。
注意这个列表,像其他的 FreeBSD.org 邮件列表一样是会分发给全世界的订阅者的。 因此,您需要明白关于位置和地域问题,确定之间是容易联系和可合作的。
Email最好应该使用 --纯文本格式,不过基本的PDF,HTML和 很少其他的能被更多读者接受的格式也是可以的。Microsoft Word (.doc) 格式是被邮件列表服务器拒绝的。
KDE
讨论关于在FreeBSD系统上使用KDE。 这是一个纯技术的邮件列表。
技术讨论
这是一个与FreeBSD相关的技术讨论论坛,是一个主要的技术性邮件列表。 他是针对个别的工作在FreeBSD上的人来提出问题或讨论相关的解决方案, 也欢迎对这些问题感兴趣的个别的讨论者。这是一个纯技术的邮件列表。
FreeBSD硬件的普通讨论
有关FreeBSD运行的硬件类型的普通讨论,包括是否该买的一些问题和建议。
镜象站点
人们运行FreeBSD的镜象站点的公告和讨论。
ISP供应商问题
这是一个讨论使用FreeBSD的ISP供应商的邮件列表。这是一个纯技术的邮件列表。
新手的讨论区
我们掌握了新手的任何行为,在这里包括:独立地学习和解决问题,寻找和使用资源,寻求帮助, 如何使用邮件列表和使用哪个邮件列表,普通的交谈,犯错误,成就 共享主意,故事,精神支持和加入FreeBSD社区。我们带着我们的难题和 支持问题到freebsd-questions,freebsd-newbies给新手来使用。 我们处理自己的问题和支持freebsd-questions的同时,这里对新手来说, freebsd-newbies的使用能使新手之间相互交流。
OpenOffice.org
关于OpenOffice.org和StarOffice. 的移植和维护。
讨论关于调整及高速运行FreeBSD
这个邮件列表提供了一个为黑客,管理员和有关的团体去讨论与FreeBSD性能相关的主题的空间。 可以在这里进行讨论的包括在任意高负载下,体验版下或者是有限制的条件下安装FreeBSD。 非常鼓励自愿地为了改进FreeBSD性能的相关团体去订阅这个列表。 这是个高技术含量的列表理论上说适合有丰富经验的FreeBSD用户,黑客,或对FreeBSD的速度、性能 、升级感兴趣的管理员。这不是一个问答式的列表,关于这些应该去读相关文档,但他是 一个可以投稿的地方,或者了解关于待解决的与性能相关的主题。
关于 packet filter 防火墙系统的问题和讨论
关于 FreeBSD 环境下 packet filter (pf) 防火墙系统的讨论。 这里欢迎技术讨论, 以及一般的应用问题。 此外, 这里也是讨论 ALTQ QoS 框架的合适场所。
移植到非 Intel 平台上
跨平台的 FreeBSD 问题, 关于非 Intel FreeBSD 移植版本的讨论和提议。 这是一个纯技术性的邮件列表, 其讨论内容严格限制为技术。
核心团队策略的决定
这是一个很小的只读的有关核心团队策略决定的邮件列表。
“ports”的讨论
关于FreeBSD的“ports collection” (/usr/ports)的讨论, ports的基础构造和调整过的ports结构。这是一个纯技术的邮件列表。
“ports” bugs的讨论
讨论关于FreeBSD的“ports collection” (/usr/ports),问题报告 ports建议,或者ports的修正。这是一个纯技术的邮件列表。
FreeBSD 上的 Python
这是一个讨论关于如何在 FreeBSD 上改善 Python 支持的邮件列表。 这是一个纯技术的邮件列表。 它是为那些移植 Python、 其第三方模块, 以及 Zope 相关软件到 FreeBSD 上的人准备的。 这里也欢迎参与技术讨论的人。
用户问题
这是一个有关FreeBSD问题的邮件列表。您不应当发送“how to” 问题给技术列表,除非您认为这个问题是非常可爱的技术问题。
SCSI子系统
这是一个讨论FreeBSD的SCSI子系统的邮件列表。这是一个纯技术的列表。
安全问题
FreeBSD的计算机安全问题(DES,Kerberos,已知的安全漏洞和修复等)。 这是一个纯技术的邮件列表。注意:这不是一个问和答的列表,但是同时给出 问题和答案到FAQ是欢迎的。
安全通知
FreeBSD安全问题和修复的通知。这不是一个讨论列表,讨论的列表应当是FreeBSD-security
在嵌入式应用程序中使用FreeBSD
这个列表讨论了与极小的和嵌入的FreeBSD安装的讨论主题。这是一个纯技术的列表。
讨论关于FreeBSD-STABLE版的使用
这是一个FreeBSD-STABLE用户的邮件列表。它包括-STABLE的新特性可能会影响用户的警告。 任何运行“STABLE”的人应当经常关注这个列表。这是一个纯技术的列表。
C99 & POSIX一致
这是关于FreeBSD顺应C99和POSIX标准的技术讨论论坛。
讨论 FreeBSD 的 USB 支持
这个邮件列表是关于 FreeBSD 上的 USB 支持的技术性讨论。
用户组调整列表
这个邮件列表为协调从各地的使用群体到彼此相互讨论问题和 从核心团队中指定个人。这个邮件列表应被限制到大纲和协调用户组 计划的范围之内。
商家
讨论FreeBSD计划和FreeBSD软硬件商家的协调。
FreeBSD邮件列表是使用了多种过滤方法去消除垃圾邮件、病毒和其他没用的电子邮件。 这部分所描述的并不包括所有常用的保护邮件列表的消除方法。
邮件列表只包含一些允许的附件类型。所有在列表中有MIME类型的附件的电子邮件在 邮件列表中被转发之前将被过滤掉。
application/octet-stream
application/pdf
application/pgp-signature
application/x-pkcs7-signature
message/rfc822
multipart/alternative
multipart/related
multipart/signed
text/html
text/plain
text/x-diff
text/x-patch
Note: 一些邮件列表可以允许附件为其他MIME类型,但是以上列出的 应该被多数的邮件列表所采用。
如果一个电子邮件包含HTML和纯文本形式,HTML的形式将被删除。 如果一个电子邮件内容只是HTML形式,他将被转换为纯文本格式。
除了FreeBSD两个特殊的新闻组,还有很多讨论FreeBSD或与FreeBSD用户相关的其他讨论组。
一些新闻组的关键词搜索档案是可以使用的, 有什么问题可以与Warren Toomey <wkt@cs.adfa.edu.au>联系。
中央服务器, 阿根廷, 爱尔兰, 爱沙尼亚, 奥地利, 澳大利亚, 巴西, 比利时, 冰岛, 波兰, 丹麦, 德国, 俄罗斯, 法国, 菲律宾, 芬兰, 哥斯达黎加, 韩国, 荷兰, 吉尔吉斯斯坦, 加拿大, 捷克共和国, 科威特, 拉脱维亚, 立陶宛, 罗马尼亚, 美国, 南非, 挪威, 葡萄牙, 日本, 瑞典, 瑞士, 圣马力诺, 斯洛伐克共和国, 斯洛文尼亚, 泰国, 土耳其, 乌克兰, 西班牙, 希腊, 新加坡, 新西兰, 匈牙利, 意大利, 印度尼西亚, 英国, 中国大陆, 中国台湾, 中国香港.
(2005/05/08 12:09:50 UTC 更新)
下面的用户组提供了与FreeBSD相关的邮件地址。如果他被滥用的话, 这个列表的管理员有收回的权利。
| 域 | 工具 | 用户组 | 管理员 |
|---|---|---|---|
| ukug.uk.FreeBSD.org | Forwarding only | <freebsd-users@uk.FreeBSD.org> |
Lee Johnston <lee@uk.FreeBSD.org> |
下面的用户组为积极支持FreeBSD的人们提供了shell账号。如果他被滥用的话, 这个列表的管理员有撤销的权利。
| 主机 | 访问 | 工具 | 管理员 |
|---|---|---|---|
| dogma.freebsd-uk.eu.org | Telnet/FTP/SSH | Email, Web space, Anonymous FTP | Lee Johnston <lee@uk.FreeBSD.org> |
有些时候,您可能需要校验签名或者发送加密的邮件给官员或者开发者, 这里为了方便您而提供了一些密钥。完整的 FreeBSD.org 用户密钥可以在 http://www.FreeBSD.org/doc/pgpkeyring.txt 下载。
<security-officer@FreeBSD.org>
pub 1024D/CA6CDFB2 2002-08-27 FreeBSD Security Officer <security-officer@FreeBSD.org>
Key fingerprint = C374 0FC5 69A6 FBB1 4AED B131 15D6 8804 CA6C DFB2
sub 2048g/A3071809 2002-08-27
-----BEGIN PGP PUBLIC KEY BLOCK----- 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 KRrlaWusbYfqZn4BQsSpYw90evo= =BvhO -----END PGP PUBLIC KEY BLOCK-----
<core-secretary@FreeBSD.org>
pub 1024R/FF8AE305 2002-01-08 core-secretary@FreeBSD.org
Key fingerprint = CE EF 8A 48 70 00 B5 A9 55 69 DE 87 E3 9A E1 CD
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.6 (FreeBSD) Comment: For info see http://www.gnupg.org mQCNAzw7fN4AAAEEALL1ENfbFYcAEmS6Hrb7CV7sWrbG+HlIwYvUUuqvr8+D3axd XuRJGFaWk8zNrTrwWROnlMMlctG3iXNsKzQNxAE6N64rbrUbKI5PzihfEsJW5/io XGXrRGdXvwob/Qdnd6mIlm3IJduChV7Nf3K2WbimUNkFeXrrh/ymwUj/iuMFAAUR tBpjb3JlLXNlY3JldGFyeUBGcmVlQlNELm9yZ4kAlQMFEDw7fN78psFI/4rjBQEB U4ID/1N6haUd+k+tzwNpX6pKnlCuTCJvJ619Lp83T8pRDGZom/uSLrfMrzvmKPeE abXGnreM41JRLAbGOclsONVBCLvwc/v+VVXTm24J1rdS1qY/SD+LE87pxPL6Ncyt Ug2sxPSo8fDVKu+MdcGK5zwP5ekNHDl+DB1mMsYDkZHTp9FMiQCVAwUQPDt+RafG T4fq3uQJAQFKvAQAl6+XaXQ1GzfqJoGqaTVW2O1OaodyBJjLxgRsVv7ps5Z4M4nl uYoe5ih+Lk3BVD9Y18QKUrnAPlbXDr1Ld0arq8uFkFsVzNDb2asg6tgcQe7mQ9lA QZPgVOU+siTmEuolSvxwsjxn/szBYBPv5EnU6lSmGf/RDJnbFXC9Z/LgPFU= =tMn4 -----END PGP PUBLIC KEY BLOCK-----
<jhb@FreeBSD.org>
pub 1024R/C10A874D 1999-01-13 John Baldwin <jbaldwin@weather.com>
Key fingerprint = 43 33 1D 37 72 B1 EF 5B 9B 5F 39 F8 BD C1 7C B5
uid John Baldwin <john@baldwin.cx>
uid John Baldwin <jhb@FreeBSD.org>
uid John Baldwin <jobaldwi@vt.edu>
-----BEGIN PGP PUBLIC KEY BLOCK----- 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 =BVS/ -----END PGP PUBLIC KEY BLOCK-----
<kuriyama@FreeBSD.org>
pub 1024D/FE3B59CD 1998-11-23 Jun Kuriyama <kuriyama@imgsrc.co.jp>
Key fingerprint = 5219 55CE AC84 C296 3A3B B076 EE3C 4DBB FE3B 59CD
uid Jun Kuriyama <kuriyama@FreeBSD.org>
uid Jun Kuriyama <kuriyama@jp.FreeBSD.org>
sub 2048g/1CF20D27 1998-11-23
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.6 (FreeBSD) Comment: For info see http://www.gnupg.org mQGiBDZZXiQRBACWc1PcCjIpTl6aCyOMVfz4jlRSKblwib2s07TBwbgR1zMhbPie O2K4ZJqTcG4EnbMLEyYMbYwvNdOfUIjMW3VI1PJhRwWthTcbUjubzTu8Zxw+sKME ansth0xZW7Ax29UWQcTPxs4SRsCPFO8t+aWwZOm6z0fb5l1vMmKNJuw1+wCg3ZZB qK93hQPaOObwglnAIrgNpScD/j0VCEeC8fTMk+ZIo+z0+bUGPGU5cq+4XVXABYLn wMfR6Wr5Ys/3VCx4Oyzzgp/HBzcE5HxJukJ2ur3m9IE+uFfY4+HEFiwL++Ke4TWU 7rn4rKjJYhGJ6iqGFwuxwmHdjcBh/38X0kmrCxyPYpt6xO+sJBP+QOABw3PFlMkF PUY5A/9RGU4mm6K7cteNdbHDI8yFNorQs8W8fRb8yP8bw1T8qB5+/rQ5jxAfA5sr FCuZsKNFdph9z/I3eFYVW4P8+9gmI2FAAAocWheSyKttAFHx63JRyBqXq9xmHKST kuaoQVXeFycSULAPkV67j0/zDL2mis6bRpPopINGgjkia16u6LQjSnVuIEt1cml5 YW1hIDxrdXJpeWFtYUBGcmVlQlNELm9yZz6IVwQTEQIAFwUCOmRRlgULBwoDBAMV AwIDFgIBAheAAAoJEO48Tbv+O1nN4+YAoKeQztEcbPBbbX7DZAHOsGZLrZ2NAJ9a WEoFGMT3keQDjtjUI9c8IMh/l7QmSnVuIEt1cml5YW1hIDxrdXJpeWFtYUBqcC5G cmVlQlNELm9yZz6IVwQTEQIAFwUCPE3sswULBwoDBAMVAwIDFgIBAheAAAoJEO48 Tbv+O1nNMp4An22RFzdv9zdNLlcY9GLPFyUrniqiAJ9F9Rhic6qBaXynksNw51Do +cLWkbQkSnVuIEt1cml5YW1hIDxrdXJpeWFtYUBpbWdzcmMuY28uanA+iFcEExEC ABcFAjxN7RoFCwcKAwQDFQMCAxYCAQIXgAAKCRDuPE27/jtZzYFdAJ9BFckSo4/r SMe9UqbRMPK+8FUumwCfYH1pt4t6jFlulLk+9wYA9wISL3e5Ag0ENllesBAIAMSU hrKdEdKzQXHzkoE4Nzl3hb6dtDmjgYr+3X95wBkUvtrk2CeYG3RC1PNwd1sEFEWp IiSzOaQDzxZmtBGpMkQ1It+CW4sC5Cs2TQ59VHLFw7HWSYMNj+RchWuWkhwipnX5 8wu6To12Mu2MnyLszX2QIUxrQme7UpKkJgCct60C1DZLoQuZmfEZEyXmSfJsizeq eeJuusZwOWDH0ixuFVK/5A2RwaWFMftdhh/Vw0EkxdQnMJ+7zJ/hbY64VR7uz8oI 5smfjVe0yqXMACREUzXmqn+Dc6Pz6ESVTv2XwIy0UxqxiYk1J98Cf3ffi5+e/q1d rej2PzArpfzaygu88uMAAwUIAI/IiiQJupz9BaCws/K6j4Qs5iWRiSB7vaZfgCr9 c6vx+mIXX1Pblity5TOn9qXMv7vUM/dgmWSBbkkrvfD++H4ybJjpcOZN+peeGd0G /UfiQFMarsj9MozAmhzI5L00JqLOf4u/XBv0rh5HOX6t+M9MfZYL3C7bn/LxmDif prT8jxoA2SC+lPGSzI+M+ay/mz8kDmGD7fCS+uAFo5T1kjU+ed2dhXnl16gRR8NO 6yAdURIC+xs6P+7L8uOiZfuk0gzn5RC6CYrEKiGZf9VqTRA2vcirPNEZR44jYXS3 nL7x9pIsHyCyxEvojut7iGWO6qbaW/c+MRjcA8jgp9OuFROIRgQYEQIABgUCNlle sAAKCRDuPE27/jtZzZksAKDbznARmDIIxZjHfAry2UJFBPQbvgCgl/ERQfF++Uvw hLaVfesP/NCIt5Y= =AoU9 -----END PGP PUBLIC KEY BLOCK-----
<scottl@FreeBSD.org>
pub 1024D/017C5EBF 2003-01-18 Scott A. Long (This is my official FreeBSD key) <scottl@freebsd.org>
Key fingerprint = 34EA BD06 44F7 F8C3 22BC B52C 1D3A F6D1 017C 5EBF
sub 1024g/F61C8F91 2003-01-18
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.2.1 (FreeBSD) mQGiBD4p5ccRBAC+tbiJm4bc9dO8oaRhVGqWmNhYfi2GnX4AM2h+L7bcIU/7jWVn uWGe/PFHDcuOpEov/XRw1gmgoNh2DopTxf363DVMevmGW3R1842YMmLvCYZ7C0Rd 0GdbHW1xXeRSygs6peLcPGQ/7ISK0BHMudFim5FrpD0tq3qrqRmuGgls2wCgyF37 u+ZoP3xiP0wANhoWJtyBWQEEAIeYSHvIPKFIo9FG/+wckx9Fc+hLXPKwoETBPof7 Wft9zXiYyowuGj6/ydb6v229nI3lJwVPR8X6Ptjf6rO1vjf7uUED9dNBLr10vdW6 jYClBT8lqJAq3DzEpDk2kOlhYwtrykyld9Ys/7vgliuBB0XRUxGVNieqDck7PZWL ewz5A/947m/ZrlZbn6+jsshGk30/pEXZUhcDnUBwW26GuFk0TGlXBha3N0NFwqz3 a7qnJcvSTKfeZJY5NCwqzCo/rLpmaNd9JCUrgwSd1MI9Txrbj3lDRy5dj4FZBQ2N BVgni7SRKaiPw1KeEprSOR8yiM9ZjbV1g5zPeZ2bZhSMCP7mdbREU2NvdHQgQS4g TG9uZyAoVGhpcyBpcyBteSBvZmZpY2lhbCBGcmVlQlNEIGtleSkgPHNjb3R0bEBm cmVlYnNkLm9yZz6IWQQTEQIAGQUCPinlxwQLBwMCAxUCAwMWAgECHgECF4AACgkQ HTr20QF8Xr9fvgCfUMy+qlN9qQtwMFAKWViSllk0xYgAnApLMv95d6Ecrj7+U9Et liAwNQXWiEYEEhECAAYFAj4p8nkACgkQtNcQog5FH332EQCghR98TNpvYGdrsg6Q S3BngO5n3VgAn1zo89iPy8VMP/kXq2jlzs/74+i2iEYEExECAAYFAj4p9igACgkQ 2MoxcVugUsOwsQCfY34hwJIc8MapwIy8fWmCeLs4T0IAn0aVpewWF99H6SapelNP hvDzTYLIiQCVAwUQPioA7mVgqaw0+fnVAQEUHgP9EJXxzQlkaN8VsfRJo/UFmC4z wGkwu2yatUjMSZR58VpS9rF6CH1rzmNFtZZmIh6ItQ/mPaUDW2yObWBRL2r9vkVx e+DPcpcZAebM3ibjsOg05cftcphv41rLak0C2Nec3MXnxT15O7fcO6aO+d4oJ2Yi oL7YJX6RHrqNCTQn6/65AQ0EPinlyxAEAIGtuZXdf7K51Gb9jijgdV1NMPKwujoq K9f1PZocpDve0vwXN6AvzJ1L/LTrZPvBZ0UCAJR/zVtz4H2bnSqalbd8j8bmxfYx 0SA3QNAKJhgBGNlnK4HvAGJCs8oXYp+6Ph9WWlTcPzkfscPFc42VcUEdfL/5kyLr OvGAUW6D7iCnAAMFA/9CWXarz2QMrkduiasc8bhSmv2lVOfUVcIdz9imc72Z5GUk FBiQJ2kuqJrxMUqAgoccnJ9R0QVZwCaQyRNakEQEcENBKq9Haa5LLo7nD3CAiqIi URqloJORSzXoQCrw8OelbBp9RaEqVdCecbNqAbA8Ru4NIwcyZCgvnX/bUTKq54hG BBgRAgAGBQI+KeXLAAoJEB069tEBfF6/XBkAoJtQ4ECj3ntS2xlODgB8N+cKIsdb AJ9Lwk2EEIZhvzhwvhpwIKAhWhHcmQ== =C3Jv -----END PGP PUBLIC KEY BLOCK-----
<imp@FreeBSD.org>
pub 1024R/F6A8F561 1996-01-10 M. Warner Losh <imp@village.org>
Key fingerprint = D4 31 FD B9 F7 90 17 E8 37 C5 E7 7F CF A6 C1 B9
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.6 (FreeBSD) Comment: For info see http://www.gnupg.org mQCNAzDzTiAAAAEEAK8D7KWEbVFUrmlqhUEnAvphNIqHEbqqT8s+c5f5c2uHtlcH V4mV2TlUaDSVBN4+/D70oHmZc4IgiQwMPCWRrSezg9z/MaKlWhaslc8YT6Xc1q+o EP/fAdKUrq49H0QQbkQk6Ks5wKW6v9AOvdmsS6ZJEcet6d9G4dxynu/2qPVhAAUR tCBNLiBXYXJuZXIgTG9zaCA8aW1wQHZpbGxhZ2Uub3JnPokAlQMFEDM/SK1VLh4u c9KIpQEBFPsD/1n0YuuUPvD4CismZ9bx9M84y5sxLolgFEfP9Ux196ZSeaPpkA0g C9YX/IyIy5VHh3372SDWN5iVSDYPwtCmZziwIV2YxzPtZw0nUu82P/Fn8ynlCSWB 5povLZmgrWijTJdnUWI0ApVBUTQoiW5MyrNN51H3HLWXGoXMgQFZXKWYiQCVAwUQ MzmhkfUVW/uOVC1dAQG3+AP/T1HL/5EYF0ij0yQmNTzt1cLt0b1e3N3zN/wPFFWs BfrQ+nsv1zw7cEgxLtktk73wBGM9jUIdJu8phgLtl5a0m9UjBq5oxrJaNJr6UTxN a+sFkapTLT1g84UFUO/+8qRB12v+hZr2WeXMYjHAFUT18mp3xwjW9DUV+2fW1Wag YDKJAJUDBRAzOYK1s1pi61mfMj0BARBbA/930CHswOF0HIr+4YYUs1ejDnZ2J3zn icTZhl9uAfEQq++Xor1x476j67Z9fESxyHltUxCmwxsJ1uOJRwzjyEoMlyFrIN4C dE0C8g8BF+sRTt7VLURLERvlBvFrVZueXSnXvmMoWFnqpSpt3EmN6TNaLe8Cm87a k6EvQy0dpnkPKokAlQMFEDD9Lorccp7v9qj1YQEBrRUD/3N4cCMWjzsIFp2Vh9y+ RzUrblyF84tJyA7Rr1p+A7dxf7je3Zx5QMEXosWL1WGnS5vC9YH2WZwv6sCU61gU rSy9z8KHlBEHh+Z6fdRMrjd9byPf+n3cktT0NhS23oXB1ZhNZcB2KKhVPlNctMqO 3gTYx+Nlo6xqjR+J2NnBYU8p =7fQV -----END PGP PUBLIC KEY BLOCK-----
<wes@FreeBSD.org>
pub 1024D/AD10C6C4 2000-10-19 Wes Peters <wes@freebsd.org>
Key fingerprint = 76C4 753C 83FF D982 C57D 3A2A 7387 E292 AD10 C6C4
uid Wes Peters <wes@softweyr.com>
sub 1024g/237A5EF9 2000-10-19
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.6 (FreeBSD) Comment: For info see http://www.gnupg.org mQGiBDnubLMRBACzBJP6rUq+ruNhVttH8vMFy3IQIWgoMNbzGsa6O26y3wFXV6xr gLGYo0Yb621CWKpO5/bfRbfPobcgVbInsx0cVJITNeLwLbvZP8Yd9GkUy5B8DomW ptrKd61NRG4NjGoXNG3Z1KaPYEmbQG7hOeilq2cIcNlSDhILrpRlzbboSwCg+cbC zRXEcCiGUKUgwD9E/58vKFkD+wdbVXdjRlAZ0uzs9+B1zTuR4CqFe7mOE2ZwEz+0 eI1X639jr5CFNlruWXbT4ZzcqPdAe4Z5G1SqucG8a+hOqfzybi4D04fsnM99f6IK P4M4ejwmKQnrsUXuoyEOGhxtziXbuX7AfftDd9CcmFJi9ix4MT8JNVCmf2AnG3oU +/WPA/9RmCW9XrnKGFzuJPrj5f+FlF0yyOfnGBtCluDg0bGWlncOoVdaHajdpTzk 2es8vDDn17vX4KDGJhai4/lgvdoIIu6VZ9gbDvjkhBPRZID2PBtRA3PqJrHAe8OK PkP78wceHncrjH7PGOvB6K7zgkolBhbigBQxxqyJpiwlLsJYmrQdV2VzIFBldGVy cyA8d2VzQHNvZnR3ZXlyLmNvbT6IVgQTEQIAFgUCOe5sswQLCgQDAxUDAgMWAgEC F4AACgkQc4fikq0QxsRqSgCg5U4czx4fZBpgKXkSUwqN12NUTDgAoN6nLEpYOwax 3CZSxOHKIM0OaQaCiEYEEBECAAYFAjnuga8ACgkQXVIcjOaxUBbcsQCfU7yEZGRh fd27HoAoCaoesLs3DDAAoNFYihZhlddiaAsSRFEdl5YLRXMKtBxXZXMgUGV0ZXJz IDx3ZXNAZnJlZWJzZC5vcmc+iFcEExECABcFAj2QxXYFCwcKAwQDFQMCAxYCAQIX gAAKCRBzh+KSrRDGxPC2AKDE+pC6kiHzVt/N+O+J887lxRi+MACggx0g0bc+XakU F9uTA/Mem/EGc9S5AQ0EOe5svRAEAK6sihIm3ua+pbbXwHBq/3KP1mnR5TumcuqY VMJH0h+Snaps/seA5332YrlYlzGZot7u/yK+oNj9HAt1b3bqRjxVpcQkkVqO5beN vtJ2l0VDVtdynNL/p6pIj/w/tQlbMYjwDtEbner76IG0RZvwrREz5Dr5FUEcSJuN l4sOaJ3nAAMFBACCbceKau0sxw7mymEgXlCQmj/uF4e8DaPmgPJxncccbv78GEeV NQbLYsKKxts43vmhHKNQI0SUSN3kpqIGAP/Z1FwaxsL2UAZvGzL+o2Eb0mhfe9iI N8MPaxLWFZevSE/e9EWsb5o3d6xZJqhuaLzMGi0yqR18ZUAUMhAeIK1hAYhGBBgR AgAGBQI57my9AAoJEHOH4pKtEMbEIHkAn2jVNUFiT5HelooOTkOL36zXxALOAJ9K ni2QSv6GouiphI2WO/b+d0STFg== =oTDt -----END PGP PUBLIC KEY BLOCK-----
<murray@FreeBSD.org>
pub 1024D/0E451F7D 2001-02-12 Murray Stokely <murray@freebsd.org>
Key fingerprint = E2CA 411D DD44 53FD BB4B 3CB5 B4D7 10A2 0E45 1F7D
sub 1024g/965A770C 2001-02-12
-----BEGIN PGP PUBLIC KEY BLOCK----- Comment: For info see http://www.gnupg.org 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 qN+IdvKuAKC6p9c3lJBbYHFlhxPDhBvgBaSOKw== =WyeV -----END PGP PUBLIC KEY BLOCK-----
<peter@FreeBSD.org>
pub 1024D/7277717F 2003-12-14 Peter Wemm <peter@wemm.org>
Key fingerprint = 622B 2282 E92B 3BAB 57D1 A417 1512 AE52 7277 717F
uid Peter Wemm <peter@FreeBSD.ORG>
sub 1024g/8B40D9D1 2003-12-14
pub 1024R/D89CE319 1995-04-02 Peter Wemm <peter@netplex.com.au>
Key fingerprint = 47 05 04 CA 4C EE F8 93 F6 DB 02 92 6D F5 58 8A
uid Peter Wemm <peter@perth.dialix.oz.au>
uid Peter Wemm <peter@haywire.dialix.com>
-----BEGIN PGP PUBLIC KEY BLOCK----- mQCNAy9/FJwAAAEEALxs9dE9tFd0Ru1TXdq301KfEoe5uYKKuldHRBOacG2Wny6/ W3Ill57hOi2+xmq5X/mHkapywxvy4cyLdt31i4GEKDvxpDvEzAYcy2n9dIup/eg2 kEhRBX9G5k/LKM4NQsRIieaIEGGgCZRm0lINqw495aZYrPpO4EqGN2HYnOMZAAUT tCFQZXRlciBXZW1tIDxwZXRlckBuZXRwbGV4LmNvbS5hdT6JAJUDBRA0OJBeSoY3 Ydic4xkBAREgBACBqWM1pZHF5MqOpsxyCeNdxsp8VXUSoReSmaZPeSY5caIV0NgN cUw4AdSKPOu2jDeRSQNzkUk7+/PyK6k9dunZJS4Dnze5QqvTUgi+rHYnEs+DFBRT CcMERiSftaP3gDqK3XyWgXDvLXxAkhiWp9yd/QsnZ1+ahz/qACVi+JxdB7QlUGV0 ZXIgV2VtbSA8cGV0ZXJAcGVydGguZGlhbGl4Lm96LmF1PokAlQMFEDGxFCFKhjdh 2JzjGQEB6XkD/2HOwfuFrnQUtdwFPUkgtEqNeSr64jQ3Maz8xgEtbaw/ym1PbhbC k311UWQq4+izZE2xktHTFClJfaMnxVIfboPyuiSF99KHiWnf/Gspet0S7m/+RXIw Zi1qSqvAanxMiA7kKgFSCmchzas8TQcyyXHtn/gl9v0khJkb/fv3R20biEYEExEC AAYFAj/dD9YACgkQFRKuUnJ3cX9ejgCfbm0bT5x6nuCY4BD2scsMVKV8Pb8An1lj aVb0KRqDjPRrd6FUZoMGWT/3iQCVAwUQNA+txx9/qQgDWPy9AQGHRAP7Bzyo2Hvu 049m44kNFgH7Kkg60SetOcYWzGKVe1nEEvBKWCMgICCfh5nHY1q/xv7pQjCBLQS4 tfl8gFBK9s9kyCS3qSNRposFeHRAIPOweGBJxXFSWhdxkAklSoa2x9xPbcOTGUSd gHyAyIl4DiXmplB3/cOpDSH2hmPwp92+Erm0HlBldGVyIFdlbW0gPHBldGVyQEZy ZWVCU0Qub3JnPoiNBDARAgBNBQI/4zjgRh0gUGxlYXNlIGRvIG5vdCB1c2UgdGhp cyBrZXkgZm9yIEZyZWVCU0QgZW1haWwuICBTZWUga2V5IElEICM3Mjc3NzE3Ri4A CgkQFRKuUnJ3cX999QCgmUQdMERtr8TqSg0FRMmOilnHEcIAoJtnsVDKUAKfdtep mV92lCYIxEtCiQCVAwUwP+M43UqGN2HYnOMZAQE6PAQAnTVrljiWVWjKinJS3yXJ 5aRuymGUww1KyrBuuR6rK585tPhSDun7ADXhv2irpvV0mJvByXAZGccvkasxazi3 GsgvDHQ+Xa7OB3LV2tBuVc+3gc8wSmLV1bjp2L6/F5j9udR2ThGxLAM22XTNlcdV gbg29tovg/44SOIRyo5Xqx6JAJUDBRAxsRJdSoY3Ydic4xkBAZJUA/4i/NWHz5LI H/R4IF/3V3LleFyMFr5EPFY0/4mcv2v+ju9gbrOEM/xd4LlPrx1XqPeZ74JQ6K9m HR64RhKR7ZJJ9A+12yr5dVqihe911KyLKab94qZUHYi36WQu2VtLGnw/t8Jg44fQ SzbBF5q9iTzcfNOYhRkSD3BdDrC3llywO4hGBBMRAgAGBQI/3Q/ZAAoJEBUSrlJy d3F/lX4An0WzfBUeF0RTqfr3BuK5BOZd2zEdAJsEfC2B8HKf7u+izDDf9DuwOKAv hLQlUGV0ZXIgV2VtbSA8cGV0ZXJAaGF5d2lyZS5kaWFsaXguY29tPokAlQMFEDGx E+pKhjdh2JzjGQEBtYsD/2rUV2eeTi6ekZCwbfVBu2vgDNpAPmb8kcjiBGZKZuPq W4kyA0bd+k7ToZ39nu7HIIkHylOy3ZrwL+WM5hnFZP7m5LORBd4yLlxhwjWxltSm Qe2ao9brbeGvU8HdksDVMhxNtBb43MmzFDU9zpcb18aRP1ZdBbdeF60A/6O5VMCE iQCVAwUQMwWTcXW7bjh2o/exAQEFkQP+LIx5zKlYp1uR24xGApMFNrNtjh+iDIWn xxb2M2Kb6x4G9z6OmbUCoDTGrX9SSL2Usm2RD0BZfyv9D9QRWC2TSOPkPRqQgIyc c11vgbLolJJNeixqsxlFeKLGEx9eRQCCbo3dQIUjc2yaOe484QamhsK1nL5xpoNW I1P9zIOpDiGIRgQTEQIABgUCP90P2QAKCRAVEq5Scndxf/DlAJ42mhP1IL7KSLcu XzLycYhfZMF3GACeMpnznDS81f6WxFoZMk0NX8WJzdm0JVBldGVyIFdlbW0gPHBl dGVyQHNwaW5uZXIuZGlhbGl4LmNvbT6IdwQwEQIANwUCP+M4HDAdIEFkZHJlc3Mg bm8gbG9uZ2VyIHZhbGlkLiBTZWUga2V5IElEICM3Mjc3NzE3Ri4ACgkQFRKuUnJ3 cX8vqQCeMnLOym0UOXg67aQWRLKRdmk+ez4AnihpiTT3k/FSD1D3ufrIU8b6jEfF iQCVAwUwP+M4FkqGN2HYnOMZAQEryQP/SViHEK6K9A9kQrFvTxXdPEWSKPLOz1ML y4pqGJ5lqKgrk30b5DyqdOITaHKy6JUbqXa8yYHYIcGxavpghMaNqf19O4zakL03 j+EIpgkM3m0kkfOfgSeQDpNS4QecP0ZUtqvZAPdMH7252gsIWhXufYuoXR6Rz8Yu +Ueb4KSZa5CJAJUDBRAxsRItSoY3Ydic4xkBAXQOBACpjRZY/ERfR0LKCN1Gm572 KgFjecAsBAeLvmX/M6ujh4nNt086CtUj5ZknQRNXV10Bkumog5C0/sTnXnsDbO53 1CHB/wwY0rpJQDicypYlz0FuxJLijcMuHquW5fo9xwdu4vlgV4Z+jmjTUGOu+Cxm keNRBquOFqOQE3CInIoP84hGBBMRAgAGBQI/3Q/ZAAoJEBUSrlJyd3F/2noAnAsB UsEvLVczD6f4yWR0Hr7aW7RFAKCCv30Zh8Xz29ZiePY5rBfRNs5p4rQgUGV0ZXIg V2VtbSA8cGV0ZXJAZGlhbGl4LmNvbS5hdT6JAJUDBTA/4zgjSoY3Ydic4xkBAWEI A/9M3nKAv2c5QVVed5uhiElOPt5P93R2JigQJxHps/eMDcI9ZMqbyi2XsSQa6MjE RUyqaa7MVtoODWamaLxRx/86YaFJ58eVMvlmhPE9zBSliwnRflP43ilwsGOTdBOi NWil5QpxgDeWVsjpxcE9QgN3oUSWp10IABzdZRgQUeHwN4kAlQMFEDQRBydKhjdh 2JzjGQEBJkUD/RF80uSrMZdUWgCkWZxpZbLxeI7JHyDdb/yt1dZwj6a2UdR4zYZb uJUiqBVAP1/T9Sp5JiuZYapuOu4xcMVfz7k2u42FUWlYsQp1/iH6mceABdXYjUuh 2NQvH25i1OjQv1awOVp75bSOKUMF+4fDRDb9EV5UkutJG1XkguvC74XktChQZXRl ciBXZW1tIDxwZXRlckBoYXl3aXJlLmRpYWxpeC5jb20uYXU+iQCVAwUwP+M4J0qG N2HYnOMZAQEB1wP+LA9S3CJngcL/shPRsero2O2U0XgIdOTSZMoJmTyQZzOUy4ez o7ZltMYw38WpPBhbC7emTuuBLD5LOW4/G2RHP1ifB2gZrXq7LG89ZZITPGLyIynM iF+IYHx+E1gLCz0fVBO3EVT3nChxXYndj/utPKTw/7v78/k58liosWLg6UmJAJUD BRA0Dvq3SoY3Ydic4xkBARsWA/9HWzohwzoCupAVpdlalGOAaz1og07bWcGHiD54 5ziuY0qRU44F0W5P6b+TlclgRxeLlnmWHvugfSx78uthRgRXVVQdLjjq9jHZ0sCV fR1Xq/KtBiHYrhcEvj0O8facILlZwrpYdVNGzP2jlef0iRimVDJ9IJrqmItZMTC0 nB20gbQoUGV0ZXIgV2VtbSA8cGV0ZXJAc3Bpbm5lci5kaWFsaXguY29tLmF1PokA lQMFMD/jOCpKhjdh2JzjGQEB8PMD/j3//QRFuCrF6bZ+Y2DbuW7Niss9aZ+EC1Fp ZVgZcW+cMLXXWG0U2x6bt81f5CzDmvAtdgAWAqtBusZ5CRIij4E7mRdqTTpxuncp bno5tlEiHtWPrJJh17wAPDQhSj+PhaZJAuSege6Pk6fmlJFd7t4X9US4Ao+c7xoF PU+Bf/kqiQCVAwUQNBEFTkqGN2HYnOMZAQEbxAQAuQ3kMgykHW5VdLu+QIE4tlhs Zrqz0c5AWtKcmp3p917qusaENeOciuZucVeDPQrvEoaIeRbbGAZSrlvoZmw8gDyY 5qakVvd2bqee4QxpIVGGldpwSxas/xKN02ZqMYLLyyO4z8Zj7oLaFGtLnooiKXFd NHQZKPZ7NTkNF6scjOWZAaIEP9wv6REEAPJ+eB/ATOWQ9xhudn+Q4RCP7JNN8yXL tUIpP+TrISKWVwyxbA2Nia4cm7BLoMXuNvcePtQfePKgQ9VjKly+wcTdi2DMtGom MqbKxfPeR56aX8GtjAL2OuGcUViHDdqj72nHtxuW0b90NXI2kmdQ602BJc2tdB68 wosuvd2FQXlbAKCj+CZr//uspel6cVTMj5/OYDcSYQP6AvUVKqB48ClSUHeAn4xv SVYdwRx0XOveoovjzO76FAGSqZyjmS3u346epqchopUDIZyP+gQPgnSgIE+a7GJw aKCWVDDG7A29rZ9yxfGbChN4JhQwR029jIiXbC7+/g7a2hMs+JRa8kt1upRyQnS7 xN9M8vkNxNCy1DcI2s9GrUwD/0QGxLawN03i4FzxWXNVbkoHDnjoy9y6OMHcyCc+ 9fpVo2/dLkP6mmM6jDtzPmhRB6sQiiwt8nmPEQNyJ0t2XaCKV7H/0EnzP/gvGkPk jVanTs2TKVmJ6HKEz71VtlNe47YjexFWjDYC75oL3qAliIVZBnBdFcOwOVXnnFkO kPdKtBtQZXRlciBXZW1tIDxwZXRlckB3ZW1tLm9yZz6IYQQTEQIAIQIbAwYLCQgH AwIDFQIDAxYCAQIeAQIXgAUCP+M5sAIZAQAKCRAVEq5Scndxf9QyAKCINvg2tANg tPj9gjP3yds3IjLDqQCaA+t0nyL1p+YFkA7M+kOuGIIvhyyInAQTAQIABgUCP+H/ 6wAKCRBKhjdh2JzjGUPCBAC4/X+gbycm5wlXEllp2zLg3GQX2MpQ09hbf+uvzhdv 7kSliLEkDlwe/i3kJGDrELhPwQiMlSHHTpRi8qSjB1fiJssOCT0bPc4ZgK8seMGq kifu8OAjZNU9aGa2NxS5h7UrVWhwEt8G5LtMYIQM63h9DqsnE+o6FcbeR5AgMvr5 PbQeUGV0ZXIgV2VtbSA8cGV0ZXJARnJlZUJTRC5PUkc+iF4EExECAB8FAj/jOY8C GwMHCwkIBwMCAQMVAgMDFgIBAh4BAheAAAoJEBUSrlJyd3F/qcMAn3QcesapMg30 ZHO66AkrCJXU5RODAJY+rXGUUuZvkGBlLvoY/RRVNZ0PuQENBD/cL+sQBAC8XvjG 8k6ZmwcTbymtfdUo3HO4I8vPXyAl2yca1srl0Hg743hI9YTkyrVaS5F2jtQLzOkr 8ivhiRCy4jFGMUPKMCnAWNCT82UW14xPvBrvpNwQw9o91IkuaB0OCu+UWdqgdD6S jy/3govRbKzkwFt8p7prjPYiAaCAa/2Xj+nDnwAEDQQAk0EKWZQ3Ehzi4/xDCiGi daIGuebke9JQdKIT6qVHFw7IgljTlhOe771JyxNVq3NUF9XsWBirbELQ3/Yn0Ts4 Dfk/i/8fT7OMv2h4/btQGKF6cawrdFLqB8bJicv+use//gWE95+wiXX2XM216MGd 3C8f932CcSTYXYQYYEwnkgGISQQYEQIACQUCP9wv6wIbDAAKCRAVEq5Scndxf6Xa AJ92UAmSdqxsLia2QHbHRcLfifePfACeO0dqdCjrEkyPGGahXeDcVrvpO8g= =7AWH -----END PGP PUBLIC KEY BLOCK-----
<will@FreeBSD.org>
pub 1024D/F81672C5 2000-05-22 Will Andrews (Key for official matters) <will@FreeBSD.org>
Key fingerprint = 661F BBF7 9F5D 3D02 C862 5F6C 178E E274 F816 72C5
uid Will Andrews <will@physics.purdue.edu>
uid Will Andrews <will@puck.firepipe.net>
uid Will Andrews <will@c-60.org>
uid Will Andrews <will@csociety.org>
uid Will Andrews <will@csociety.ecn.purdue.edu>
uid Will Andrews <will@telperion.openpackages.org>
sub 1024g/55472804 2000-05-22
-----BEGIN PGP PUBLIC KEY BLOCK----- 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 =inzo -----END PGP PUBLIC KEY BLOCK-----
<mat@FreeBSD.org>
pub 1024D/FE6D850F 2005-04-25
Key fingerprint = 2771 11F4 0A7E 73F9 ADDD A542 26A4 7C6A FE6D 850F
uid Mathieu Arnold <mat@FreeBSD.org>
uid Mathieu Arnold <m@absolight.fr>
uid Mathieu Arnold <m@absolight.net>
uid Mathieu Arnold <mat@mat.cc>
uid Mathieu Arnold <arn_mat@club-internet.fr>
uid Mathieu Arnold <mat@cpan.org>
uid Mathieu Arnold <mathieu.arnold@t-online.fr>
uid Mathieu Arnold <arn-mat@micronet.fr>
sub 2048g/EAD18BD9 2005-04-25
-----BEGIN PGP PUBLIC KEY BLOCK----- mQGiBEJs9i0RBADoZqZbz9Vl/0QuM9+PCmS1nEA2k89ZRqPA8C+b2peJb0j0I616 Qa+SOJIyRIBWGIk+zxhDRxZ/GN2mMW2Q5QksDxPl2dGYbN33LiCWKXxNdVhbsAFG 0DzGwkjMRagiUitaJD6yopBkpyCGmpEUMiYyjK5HShg82XTMIfpsGKL/vwCg+WhB 13MxjhKRKBpV9l2qSufcpCsEALPFvpDP2sc63v30ljbH8vEGHFyaq27E50H+V1FR eYJarsudpG0LvwcrqJsFEe6afz5urMCnFeHN23Sd6WQY0Mf6GPWd4EBqgl8NdM18 kREA60gAPpP23vYSFTyZs4CgMC7VbzAQlIeb/gRMRIqsR8lIuJr9x+DIBRdm0UMp DmTzA/9+bhe3AK0dYblCod/brugDfUFzu5KNFpdnXmfphJFdUgFtyGoqSmN/M27r gV1eA7PKWR/mKCD8JilQ09k52yHK/W0IFNVQ2q39gpGXhCW5oHgW2iKATd3XR0lr AWbfrOsL4usfgddQARJKsQgIqwsL6LeALf4G6F4hC2PeSG3fN7QgTWF0aGlldSBB cm5vbGQgPG1hdEBGcmVlQlNELm9yZz6IYgQTEQIAIgIbAwcLCQgHAwIBAxUCAwMW AgECHgECF4AFAkJs+fYCGQEACgkQJqR8av5thQ9IJgCgm8SiQlyHfTLXW1o0KPvM zjN5b6AAnRLV3Zsj8mhwfmslRt2KjtYkKMztiEYEEBECAAYFAkJs+aQACgkQqYYp zGz/vmfAWwCfSPxMmpBdgTiDumZ0CdYRKhTCoA8AoJOJAYh5M5q4U5j/q4HDcWnP 80YTiHMEEBECADMFAkJtAA4FgwHhM4AmGmh0dHA6Ly93d3cuY2FjZXJ0Lm9yZy9p bmRleC5waHA/aWQ9MTAACgkQ0rsNAWXQ/VjVUACgnUimWsV1n2hmqNJ7F/WFvEvN oz0An1NewfpyuOoXH5P/YgIwK0m0agRVtB9NYXRoaWV1IEFybm9sZCA8bUBhYnNv bGlnaHQuZnI+iF8EExECAB8FAkJs93wCGwMHCwkIBwMCAQMVAgMDFgIBAh4BAheA AAoJECakfGr+bYUPWUgAoJ+bfzVQE4GTv4zERx5oUv5U42XHAJsEDChyaKIuCKnp EdF41zC3NIsCBYhGBBARAgAGBQJCbPmiAAoJEKmGKcxs/75nZ4QAn0R7l8BNi5ig OxFg/TJAjEl+snqXAJ4rf0W8DFLlbYmYoKNjvFkZlqiQdYhzBBARAgAzBQJCbQAO BYMB4TOAJhpodHRwOi8vd3d3LmNhY2VydC5vcmcvaW5kZXgucGhwP2lkPTEwAAoJ ENK7DQFl0P1YFz8AmwR0Xs87uTTptm2mnE5VY4ku4IigAJ9YxuJUl190fJTDuRUs 2aEw0vgrlbQgTWF0aGlldSBBcm5vbGQgPG1AYWJzb2xpZ2h0Lm5ldD6IXwQTEQIA HwUCQmz3EAIbAwcLCQgHAwIBAxUCAwMWAgECHgECF4AACgkQJqR8av5thQ97awCg 68Y9wA0K9MlXfEOMQSjPvi6JVBoAoJ7etnPIVdOJb9XSpHOCnaB32xv5iEYEEBEC AAYFAkJs+aQACgkQqYYpzGz/vmf7XQCeJHjP6NyAbrXDisGNDcBJSipBI3oAn1Co 1zkO5NUKBT4u7taXoeKai5YfiHMEEBECADMFAkJtAA4FgwHhM4AmGmh0dHA6Ly93 d3cuY2FjZXJ0Lm9yZy9pbmRleC5waHA/aWQ9MTAACgkQ0rsNAWXQ/Vi9CwCeMngv 2djrLTWBYLopHC49d4kcxIEAn3BGDvpTUcTNlY7LXZGGAXL1tLrhtBtNYXRoaWV1 IEFybm9sZCA8bWF0QG1hdC5jYz6IXwQTEQIAHwUCQmz3MQIbAwcLCQgHAwIBAxUC AwMWAgECHgECF4AACgkQJqR8av5thQ8O3gCgsnEMPOJfLoRHjVbnSDN4QtOs4HIA nj0Yx/Q3SyOG0fjekX5qlakznAgXiEYEEBECAAYFAkJs+aQACgkQqYYpzGz/vmcs agCfRpkfsAUYiunRHNzGwdQe6qDtQqcAmgMhkTaj41+UYBUJghkOqmvHGJ8niHME EBECADMFAkJtAA4FgwHhM4AmGmh0dHA6Ly93d3cuY2FjZXJ0Lm9yZy9pbmRleC5w aHA/aWQ9MTAACgkQ0rsNAWXQ/VhA/ACeMKTr4mC41AMe+q7AYPUxDnQunz8AoJfD DJ817ApLd+2UnfrHTpn0JuiatClNYXRoaWV1IEFybm9sZCA8YXJuX21hdEBjbHVi LWludGVybmV0LmZyPohfBBMRAgAfBQJCbPdFAhsDBwsJCAcDAgEDFQIDAxYCAQIe AQIXgAAKCRAmpHxq/m2FD/gRAKC+z4vclxbUBtadk3nVEZmWkthG6gCgmvLc5nIj aMWpQSYythSaAcBbLKiIRgQQEQIABgUCQmz5pAAKCRCphinMbP++Z5HCAJ9qY5tZ hao8cJ50UCuK3UUPqhUmFQCfa37pemBs4kGyYC8qDT1tKaraoyWIcwQQEQIAMwUC Qm0ADgWDAeEzgCYaaHR0cDovL3d3dy5jYWNlcnQub3JnL2luZGV4LnBocD9pZD0x MAAKCRDSuw0BZdD9WJi7AJ0aQqClPgeROgqq62AnUuqh67VIkwCfd8LrDAtnYBsj +BsTHvCnRKrcyhi0HU1hdGhpZXUgQXJub2xkIDxtYXRAY3Bhbi5vcmc+iF8EExEC AB8FAkJs91gCGwMHCwkIBwMCAQMVAgMDFgIBAh4BAheAAAoJECakfGr+bYUP7zwA oJiwmbe34+3d+EXHiD+y2vE/CkE+AJ9yYNwJ0Y9BAw75KHKrevdN0aoFsohGBBAR AgAGBQJCbPmkAAoJEKmGKcxs/75n/icAnjcduPL5nAA+/+8hEGll5bEZ3psaAJ9u 9SIBUmZj9S+m/EG+o/HYwVOw3ohzBBARAgAzBQJCbQAOBYMB4TOAJhpodHRwOi8v d3d3LmNhY2VydC5vcmcvaW5kZXgucGhwP2lkPTEwAAoJENK7DQFl0P1YQngAoINC m+oxmXsarbYjguyzIBbWh0jiAJ40EflhPd7O3hOLsRN4TCO5z10UGrQrTWF0aGll dSBBcm5vbGQgPG1hdGhpZXUuYXJub2xkQHQtb25saW5lLmZyPohfBBMRAgAfBQJC bPdsAhsDBwsJCAcDAgEDFQIDAxYCAQIeAQIXgAAKCRAmpHxq/m2FD2+fAJ0YdikW 0J3GniJU9Iv+gKxuTvKvJACfVq0VYAvQRq/2tTIz+MkJEaHUZqOIRgQQEQIABgUC Qmz5pAAKCRCphinMbP++Z5veAJ0bDx5CNtIXGkKfo8lA3vs+0Y3YEgCgm9xO/dnT YHc6lbAZA1fhbZ8ep46IcwQQEQIAMwUCQm0ADgWDAeEzgCYaaHR0cDovL3d3dy5j YWNlcnQub3JnL2luZGV4LnBocD9pZD0xMAAKCRDSuw0BZdD9WDrNAJ40GxNF0gXo JCwuTTcBkqxoXeRLiACfWU6RsznjavSBxrdGJ5VxsTVvl5q0JE1hdGhpZXUgQXJu b2xkIDxhcm4tbWF0QG1pY3JvbmV0LmZyPohfBBMRAgAfBQJCbPciAhsDBwsJCAcD AgEDFQIDAxYCAQIeAQIXgAAKCRAmpHxq/m2FD+zAAJ9G8J19v3EAEgaXMxJcULZ1 6eLNiACgjBDLzujeyqq4O9xoT6Xs4h9K+xKIRgQQEQIABgUCQmz5pAAKCRCphinM bP++Z7rZAJ41dgsiDWLC0cfn/Ja7aRX3quP0pgCffxSZw44MX8bt0CAgW8vTSRMa dIC5Ag0EQmz2URAIAMd0clI1gYopRRg1DlUYfHDActVaDNo0kY7p1LrgIb7P/HRc Q5vR2BC/DIfqBWrbzOJGG5jXFXcka+1ZRs2vbv778jHcixXSXaP28ej+XxH3bERq JvWulRrFKYM8mEkG3SVNIMAfZeeUGlUX+Msyx6EVoJ9z8sVPa/p6ts9UvVeBhYq9 FAnW3szvuGENHUUqS96nA4php5QPwfsnMknMQd9rNjZsIbANzW6wLmIRJw9chZmE awYCi78umAEpTK7cVHaLfolaJHi2BR3gYvUcszEmF3CFi6DZtMr0s1btGH0frLXn rmgpq8zVvgF5TRrLjNC0CKe8Yn1C5pvTDXVXHbMAAwUIALQpboqByzh1lEUNx6Q9 OaVbfRtzv52YWqBJp0tdSBGAEGEL1sgurd//BiqERzLhnGptxSnHKdsP3ZtOY9K3 YmdRCWhyVZtt1nPEzomkOn/t2UBtIbrVcM6geVS+dsfwTgiiXReSuu2kuot4Nk04 KHSetDtxfm15933jJaHroQZeQKhYimlR1EuPzciPus40PzlSIHBsNoFKz6qvgz3P uf3nnmafOdskh4aV7ogTIjvlnBYra7wuLcIpSLC7BQXuc69JVqP+5cG33hmj5Ool 4Mfh5AIYb0Lj9D0yyJqo1UyCqbPeWo1lzj5xaspclMiCzoE77Hqd4LI054VOXzsX VYKISQQYEQIACQUCQmz2UQIbDAAKCRAmpHxq/m2FDy8qAKDsXVlB5MDtydMjrsBH +qwhoiGI8wCfdTd4ZU99kETGpnFIfO7mDHd1VEE= =hNIo -----END PGP PUBLIC KEY BLOCK-----
<asami@FreeBSD.org>
pub 1024R/1E08D889 1997-07-23 Satoshi Asami <asami@cs.berkeley.edu>
Key fingerprint = EB 3C 68 9E FB 6C EB 3F DB 2E 0F 10 8F CE 79 CA
uid Satoshi Asami <asami@FreeBSD.ORG>
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.6 (FreeBSD) Comment: For info see http://www.gnupg.org mQCNAzPVyoQAAAEEAL7W+kipxB171Z4SVyyL9skaA7hG3eRsSOWk7lfvfUBLtPog f3OKwrApoc/jwLf4+Qpdzv5DLEt/6Hd/clskhJ+q1gMNHyZ5ABmUxrTRRNvJMTrb 3fPU3oZj7sL/MyiFaT1zF8EaMP/iS2ZtcFsbYOqGeA8E/58uk4NA0SoeCNiJAAUR tCVTYXRvc2hpIEFzYW1pIDxhc2FtaUBjcy5iZXJrZWxleS5lZHU+iQCVAwUQM/AT +EqGN2HYnOMZAQF11QP/eSXb2FuTb1yX5yoo1Im8YnIk1SEgCGbyEbOMMBznVNDy 5g2TAD0ofLxPxy5Vodjg8rf+lfMVtO5amUH6aNcORXRncE83T10JmeM6JEp0T6jw zOHKz8jRzygYLBayGsNIJ4BGxa4LeaGxJpO1ZEvRlNkPH/YEXK5oQmq9/DlrtYOJ AEUDBRAz42JT8ng6GBbVvu0BAU8nAYCsJ8PiJpRUGlrz6rxjX8hqM1v3vqFHLcG+ G52nVMBSy+RZBgzsYIPwI5EZtWAKb22JAJUDBRAz4QBWdbtuOHaj97EBAaQPA/46 +NLUp+Wubl90JoonoXocwAg88tvAUVSzsxPXj0lvypAiSI2AJKsmn+5PuQ+/IoQy lywRsxiQ5GD7C72SZ1yw2WI9DWFeAi+qa4b8n9fcLYrnHpyCY+zxEpu4pam8FJ7H JocEUZz5HRoKKOLHErzXDiuTkkm72b1glmCqAQvnB4kAlQMFEDPZ3gyDQNEqHgjY iQEBFfUEALu2C0uo+1Z7C5+xshWRYY5xNCzK20O6bANVJ+CO2fih96KhwsMof3lw fDso5HJSwgFd8WT/sR+Wwzz6BAE5UtgsQq5GcsdYQuGI1yIlCYUpDp5sgswNm+OA bX5a+r4F/ZJqrqT1J56Mer0VVsNfe5nIRsjd/rnFAFVfjcQtaQmjiQCVAwUQM9uV mcdm8Q+/vPRJAQELHgP9GqNiMpLQlZig17fDnCJ73P0e5t/hRLFehZDlmEI2TK7j Yeqbw078nZgyyuljZ7YsbstRIsWVCxobX5eH1kX+hIxuUqCAkCsWUY4abG89kHJr XGQn6X1CX7xbZ+b6b9jLK+bJKFcLSfyqR3M2eCyscSiZYkWKQ5l3FYvbUzkeb6K0 IVNhdG9zaGkgQXNhbWkgPGFzYW1pQEZyZWVCU0QuT1JHPg== =39SC -----END PGP PUBLIC KEY BLOCK-----
<barner@FreeBSD.org>
pub 1024D/EBADA82A 2000-11-10
Key fingerprint = 67D1 3562 9A2F 3177 E46A 35ED 0A49 FEFD EBAD A82A
uid Simon Barner <barner@FreeBSD.org>
uid Simon Barner <barner@in.tum.de>
uid Simon Barner <barner@informatik.tu-muenchen.de>
uid Simon Barner <barner@gmx.de>
sub 2048g/F63052DE 2000-11-10
-----BEGIN PGP PUBLIC KEY BLOCK----- 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 8o9/o+UAoI65F9bRERosGt0m0f0q1WwwdGcz =HMUk -----END PGP PUBLIC KEY BLOCK-----
<DougB@FreeBSD.org>
pub 1024D/D5B2F0FB 2003-01-16 Doug Barton <DougB@DougBarton.net>
Key fingerprint = 9DD1 E44C 8660 ADA6 580F 83B6 C886 A42B D5B2 F0FB
uid Doug Barton <DougB@FreeBSD.org>
sub 4096g/2DBB3F89 2003-01-16
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.2.1 (FreeBSD)
Comment: Public key for DougB@{DougBarton.net|FreeBSD.org}
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
3aTBA//4QnkllJNaP4YZYp0=
=79FQ
-----END PGP PUBLIC KEY BLOCK-----
<tobez@FreeBSD.org>
pub 1024D/7A7BA3C0 2000-05-25 Anton Berezin <tobez@catpipe.net>
Key fingerprint = CDD8 560C 174B D8E5 0323 83CE 22CA 584C 7A7B A3C0
uid Anton Berezin <tobez@tobez.org>
uid Anton Berezin <tobez@FreeBSD.org>
sub 1024g/ADC71E87 2000-05-25
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.6 (FreeBSD) Comment: For info see http://www.gnupg.org mQGiBDks22ERBACsqOob/YoPnaI/xubQKn/CCUFsaEMqL14TZ+FSlCphq3uZ7Y0W Qg2eqaTp97lG2NTVNEzF7K0yr/C3ofEQmTINQTd7DmEj04DDlR+t8BMFe6Xz2sBI WlEPD54ZfJVqhEX5P6T0xe9hiqjXKwQHHl1skKniKeO07o3K/4bCDDMfKwCg5DY1 /2j/Gid0YmxsJCIlg9kzRGMD/1lkSkQ0KrPH3RVPMrkRWE3rvvMES/F7jYNfKDQj X5lJDKoIQyWh1JwAmW/O10V+24Vl6JEFNQ4QJ7ix9hlkI59YS4TERxCUGGDpl3jr Lae6FFxYc1D5H8LLpiTSApmZcLxUE8CFoZJLySHgjp8qzvA60wMOjkfkWMgw3BpE N8DVA/9UF+5ue4bLHsPn7Jv5NzOkzaTgC/9O3UZUj/jYOp/vkI+0wPnP0U5f304P iLpYl1tlCEpciWF88MS5k3+8zsk8trqorss/XQfFzhHVtvRtgVxj87V0Z01E2ZZr YlqrnzHKQZOAKM2X9FiRZOAkndkkpeB+7SSeXDP62I56B+690LQfQW50b24gQmVy ZXppbiA8dG9iZXpAdG9iZXoub3JnPohWBBMRAgAWBQI5LNthBAsKBAMDFQMCAxYC AQIXgAAKCRAiylhMenujwBepAKCCtVcVRS40E9SY4Su8GTOBVoH4UwCgu3gK3zMy /QhZnnhmTKaguG6XopqIRgQQEQIABgUCOSz5ngAKCRCBvdPEDh+beRnEAJ9xU+6P TJrLGk8PKtO+UY8Zt7MTxgCdHYzFsXZ81j9HY0Z4EaHkQBXv1JmITAQQEQIADAUC OS6PpwUDCWdTAAAKCRDXjLzlZqdLMXMaAJwOE+6Jh5PnfHc09x3JKN4/a0v63wCg 6GdysmObSBQXATzYBuhy/0eFCCC0IUFudG9uIEJlcmV6aW4gPHRvYmV6QEZyZWVC U0Qub3JnPohXBBMRAgAXBQI7JNTmBQsHCgMEAxUDAgMWAgECF4AACgkQIspYTHp7 o8CQ3wCeI+P8VsHzHpfmUMa5kCzjBeqj3zcAoKYmyZUSxhV9TBQPo2WQ7zF3zcoB tCFBbnRvbiBCZXJlemluIDx0b2JlekBjYXRwaXBlLm5ldD6IVwQTEQIAFwUCOyTV DwULBwoDBAMVAwIDFgIBAheAAAoJECLKWEx6e6PATIsAn3clXqExEiP/Q/IDQb7e /yolgMrRAKDPw+6ZxTOJFba2HWEto0PwQ/COE7kBDQQ5LNt+EAQAjHltp9g75EOw pEDSUvK/B0aRUsjoIyAokRuW9Tg8S0xIhtV8ogcklvcXjQbjiEsAiO13hX7zmdmb yH7xLiSjea/m/whmNr9K094BS1K5i7mmUqNEFOyPB7VkPbRs5gF0dCkHT5uVgqFJ HSbss3zPyGYEBi8uDokIfOt4o5CEMYsAAwUD/269N/UwZkO4+NYivNX0ZpcUouqV YDPQ8YLwSrkwWpG7UNvNHd1HS43OWwAOy585SkLpZkjlW58NqyXJuWVC0xJtdTrI MKTZ3IJNXMK2wdK+nBuTL4IvJwkf04pwFel80F2NtgUjR3ZgIlRNvFtvtCkNPg0j t7J8pPvL2vU5hz7HiEYEGBECAAYFAjks234ACgkQIspYTHp7o8Bj7wCfSZsld8vv iM02pWobJy/VvsBJKU8An2auT0HLmVLClDph/fQa+k1R2qsR =ISZ3 -----END PGP PUBLIC KEY BLOCK-----
<damien@FreeBSD.org>
pub 2048R/D129F093 2005-03-02
Key fingerprint = D3AB 28C3 1A4A E219 3145 54FE 220A 7486 D129 F093
uid Damien Bergamini <damien.bergamini@free.fr>
uid Damien Bergamini <damien@FreeBSD.org>
sub 2048R/9FBA73A4 2005-03-02
-----BEGIN PGP PUBLIC KEY BLOCK----- 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 =uQuq -----END PGP PUBLIC KEY BLOCK-----
<mbr@FreeBSD.org>
pub 1024D/D300551E 2001-12-20 Martin Blapp <mb@imp.ch>
Key fingerprint = B434 53FC C87C FE7B 0A18 B84C 8686 EF22 D300 551E
sub 1024g/998281C8 2001-12-20
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.6 (FreeBSD) Comment: For info see http://www.gnupg.org mQGiBDwhwB0RBACelK3FYxd6cT5ukbiSdVLHPLfzgH3F34JfS6Q4FMXgEAPtx7iy U4Lc8A4Z2gCq1ZHBZTzKc61U+nzHe+eUWtAj0h3qDP4DOd7JCZbh4SW6dMIC7MAM /9J5br6e2fIIn3rzbROXSW7CJPox2D/zZcT1b727Wgy5NHUob3qej/zhwwCgrZ0o KBapUXgnKhesQzKlH2wWCJkD/3njAzJsFS7nDdTssMtd7ip9W97uNOFLuJ1/Sg5S 332BUby73hNzSXlS4rhtQB6NVBRLfGASuEYBJQIEz6aao/lDprIxTusCTrO/EGqa Dy5y4XE1ClIyZ0yVw05UJiTOZ7Mu/kUTBBzQ2i15lxjzXBt9pNifvtcKBhcDmdzQ zepQA/9Jio4IBFmjPDsl3kpvA8KqP7VXKFMMBVT9SztYVIeiFgbvff/YCqzkE5RD 0PWUFPF3o8rzsCovlpySfUNLUlfqxEZ+5+/5ky7AbJ6Vmyn7Tl+mBSZs4mTV7ktN 526ngUaW2j+aO2SdWao/di+sRutrgRjJqyvgGn1YGnrSoKbMJ7QYTWFydGluIEJs YXBwIDxtYkBpbXAuY2g+iFcEExECABcFAjwhwB0FCwcKAwQDFQMCAxYCAQIXgAAK CRCGhu8i0wBVHh3IAKCDMueq8RCcRO+3Lc+uQyXqDKCf3QCgpVWa7oS6lTiNxwSP enZ7+4g+TkK5AQ0EPCHAIhAEAI3iAhZEDBjyJvPS74CXq1ypWvXfQUCYADCc/Cuv 3xrr1p4ff3oYc+IIVdeOQktKWRP1dK7v1JLmqFsNQQIs+NtgHyO+azyX5vJGVRTg aCIuMMTnrDBC7VbAnWXtTHF5VKmmd891Y+nk68p5YVnRPc/fReXEY6dA9lqW0bN2 f2jLAAMGA/9rMbPpnRy+uvaAQChkHvOV1RnDAhN2R+U9u3d0uNnv7sWa/TJrcdig KNUsUvXqIXVkqEMrYHTbCVC4mLMd51MLARiIKOaHeynRZYkEmdi5X7EiBLS9dCUe 7+vMz4jV6MRIGyr8TBy3CEFIdAnpY6EIVd326PzYIgx8UZw3oEvjGIhGBBgRAgAG BQI8IcAiAAoJEIaG7yLTAFUetM4AoJg56qwlr8E1iEs0F33G6POGCWnCAJ4mW9E3 25TD51pcom8Plwy1BkuBSw== =oE+K -----END PGP PUBLIC KEY BLOCK-----
<harti@FreeBSD.org>
pub 1024D/5920099F 2003-01-29 Hartmut Brandt <brandt@fokus.fraunhofer.de>
Key fingerprint = F60D 09A0 76B7 31EE 794B BB91 082F 291D 5920 099F
uid Hartmut Brandt <harti@freebsd.org>
sub 1024g/21D30205 2003-01-29
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.2.1 (FreeBSD) mQGiBD43wzYRBACpuUuayKjLpf+tMndpkOwxmpaPkLFxiA/dI1iWjY8I9ItDLZyM LqgYXemOOga6vbTvIUq7Bjzl3oR72kjNX3J1EljsMj7dxksoY5lflEMdxAyzdVoI +/cu+cWiP0Z9unKpYmTk8S13sUTtZc0+ixioaUvHzSJ0nxQMpIW7dqCDewCgmSVR 6i2aK4oImAa9+ZbCxg7fCxcD/2xgAAwJSmaiaV/0As3A6IO0eSkbkzFSkMF+ms7C OtrHr1zmdM7h8MaGg/jw0Z6eZalYD7AclLvXDW0rxCMFwh06SC2axUTk+aE+vcys fuSk/HJtnktHUxZDgb28jf4X6zfcdTKE5dt5a9w3XHHPgdTXjGn7+sQNR4CWDcvq 1qNQBACOqNxJdCC9tDLycRoupNSwzldMKVBZ2/JdQjfCIq6d8HPMNVLU8PGlDjoy RN4QkMZLbwV9Gaigk2DR6vvi8meARADt53x4OjS4W3O/Pc/Aj8rsUcF2mRU/wiJC 8VkQsnaci5GuaYAssgKroOTZQzxHkOjbk4FeQ70C+wxovRsTh7QrSGFydG11dCBC cmFuZHQgPGJyYW5kdEBmb2t1cy5mcmF1bmhvZmVyLmRlPohfBBMRAgAfAhsDBAsH AwIDFQIDAxYCAQIeAQIXgAIZAQUCPjlTfwAKCRAILykdWSAJnxpyAJ9eHCdgiEt/ +Z5Ms8Qe3ekWTYTy1gCfdVWLF2MrZNL/MYOgBhhex70gKzu0IkhhcnRtdXQgQnJh bmR0IDxoYXJ0aUBmcmVlYnNkLm9yZz6IXAQTEQIAHAUCPjlT2QIbAwQLBwMCAxUC AwMWAgECHgECF4AACgkQCC8pHVkgCZ+BBQCeMpgFMMm4siEtrzqdisrRaxJJvosA nA7UDwOVoHDZaAkFD0HNcUsTkO3KuQENBD43wzcQBADsEH8o/9tD01ScNfhoMbK4 N7GsIJNFwQf0+MQuplpXQx4eBpI9ST1ZoAUXeM1j4jk5PIAMJzt8w6BAGgcU4iUG Un0R/QMTTXVkfovdSe9FW7/QtUjRtTQz3QOfZTkekYauFIiW+lSmH3BDwRXhpKgM e19eQZYOPRfLCnLLwqdr9wADBQQA5tIdzlDS80CNZxxoFDKlvOghtrIzPG/wIwGV at2clZMLhXESxDxDkpwT7XP1GRLyN/Plh/4k2vwxni7nOJ8BIch7rRh3E48TJat1 iZ99SFc9iibED5hY/HrKlc/kphFnUuEr/kk82UCv9p4/d2V1+8v1N+Cy2jCGvrip IQ6v2fOIRgQYEQIABgUCPjfDNwAKCRAILykdWSAJn0J4AJwMsjovUA6jCJRMEzOS kIakJgqJvgCeNLKyNEkyJZh0wZUcEg1zYLRYp/w= =+h/9 -----END PGP PUBLIC KEY BLOCK-----
<obraun@FreeBSD.org>
pub 1024D/EF25B1BA 2001-05-06 Oliver Braun <obraun@unsane.org>
Key fingerprint = 6A3B 042A 732E 17E4 B6E7 3EAF C0B1 6B7D EF25 B1BA
uid Oliver Braun <obraun@obraun.net>
uid Oliver Braun <obraun@freebsd.org>
uid Oliver Braun <obraun@haskell.org>
sub 1024g/09D28582 2001-05-06
-----BEGIN PGP PUBLIC KEY BLOCK----- mQGiBDr1p9kRBADrTCmhk/+XY9Jc34z36wp8zy1rbxGBy80enJM+aFPHks/iYPxR WA1tB8BEdGPJliUMYcNGeo+ZX3As1+xxo7NJCc7Zd7Gfs1+fMOXPwKGt02mr+Nje +nF9XMfdGPP0IcK9lzkVeEdH2JP41pS2SmrMwsTE/eGv9pFEnnmRxeuFcwCg1RYc f8freOk8v68+J99mCUUAGl8EANePcxWbRYgH5KulTzE5nYIt9WBn247T7goE3yn1 R2VddSXXGhs0byRxXpNAcrysyGshIQY0nnZSB5AUt27tZJucoT1p/BtBFQ6hLCQe kaIRL0sdXrVJZn3/Q1G7vJWD6wwS35dro5PsYYPDI+qL1tISlWHZNQ2Y6jGdqhc4 Len0A/4nV78yB7cLvHksxwvbdtVVn8eVo1B2U+/b4cXhevHAl8AmNN+usmEodxxe 8FYWV8jY323xiYSMrCpYT9FuD3r2qORMOGWpg0zth6BkhdgH1z2i7koKkGIfc4mV 6oea3ep5uaU82r1sGe7/cVzMGUwzZq9xizwODfbmSW6E+vdAjLQgT2xpdmVyIEJy YXVuIDxvYnJhdW5AdW5zYW5lLm9yZz6IXwQTEQIAHwIbAwQLBwMCAxUCAwMWAgEC HgECF4ACGQEFAj4YDoEACgkQwLFrfe8lsbr7rgCg1K0Zl8CPgrQG7BEaZqzSiIM6 IZAAnjz5ifN2xHJSOJiLYloidZsikNFQtCBPbGl2ZXIgQnJhdW4gPG9icmF1bkBv YnJhdW4ubmV0PohcBBMRAgAcBQI9Y1sqAhsDBAsHAwIDFQIDAxYCAQIeAQIXgAAK CRDAsWt97yWxuv0CAJ9lUDzKKdaCp/8mJjlXLjlSZaaJTgCfXIqQr58p5MSFkVdL hLbK1P1l8FK0IU9saXZlciBCcmF1biA8b2JyYXVuQGZyZWVic2Qub3JnPohcBBMR AgAcBQI9Y1tFAhsDBAsHAwIDFQIDAxYCAQIeAQIXgAAKCRDAsWt97yWxukHLAJ9u oP9cIdBXldt7XfQ/5xK2fUsHPgCdFIR7cK0l0spO2xjzbzhoPPVShbq0IU9saXZl ciBCcmF1biA8b2JyYXVuQGhhc2tlbGwub3JnPoheBBMRAgAeBQJAViQBAhsDBgsJ CAcDAgMVAgMDFgIBAh4BAheAAAoJEMCxa33vJbG6MhIAoJ3dqHVStQdGzLPTGbtP Zq8wG0jmAKCzMo+si/LFBZAnOqYN3g2yVOOc6rkBDQQ69afaEAQAlaNzX3ql+XfL obAAIWW/TdY9Yh6r0fFFoK2Mdt6vungWhzSWb63DprREXyW1k6QbPQxL+pAfeCYZ oXQuNBmsUpO1Xn6ViEGRd53D07sNJfBrE/5w3hwL+c9lWSJlt0vHKzFtPAmqenBd fA0fs9afiew2sHhk/jz/FAwWcnF4aC8AAwUD/0upFaHEZsf8sVmSEew5tAtZ6i3x zaBjhaDv3sYobza57S8mXYhscK+nNHx3bP036wJ0z8ypqb5oCqGzWUkj9OpYZs0u Tbpla/MoCI9N1Ch8LfQkWPuvYjHF6LSY3wpZKaNWfeZPCmMT5XPqjuxDB1pCmnAU OizLyimZU2Y8tfQWiEYEGBECAAYFAjr1p9oACgkQwLFrfe8lsbqmfgCffgEhvau1 1EUoZmkdnzUg2rbKYnQAn1fVK9TjWnJWQ/YDOn9hmMZWYjib =wrrS -----END PGP PUBLIC KEY BLOCK-----
<jmb@FreeBSD.org>
pub 1024R/97E638DD 1996-06-05 Jonathan M. Bresler <jmb@Bresler.org>
Key fingerprint = 31 57 41 56 06 C1 40 13 C5 1C E3 E5 DC 62 0E FB
uid Jonathan M. Bresler <jmb@FreeBSD.ORG>
uid Jonathan M. Bresler
uid Jonathan M. Bresler <Jonathan.Bresler@USi.net>
uid Jonathan M. Bresler <jmb@Frb.GOV>
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.6 (FreeBSD) Comment: For info see http://www.gnupg.org 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 pX25BMHqkEMHAxahVagzguPetlTIHxHGRSH3lg== =ttzj -----END PGP PUBLIC KEY BLOCK-----
<brueffer@FreeBSD.org>
pub 1024D/A0ED982D 2002-10-14 Christian Brueffer <chris@unixpages.org>
Key fingerprint = A5C8 2099 19FF AACA F41B B29B 6C76 178C A0ED 982D
uid Christian Brueffer <brueffer@hitnet.rwth-aachen.de>
uid Christian Brueffer <brueffer@FreeBSD.org>
sub 4096g/1DCC100F 2002-10-14
-----BEGIN PGP PUBLIC KEY BLOCK----- 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 B7mWxE+O/VwCRKNHOACfYuq+wytbP9pFJkZQwX1rW0lWgvuIRgQTEQIABgUCPxVe hQAKCRDwI/gLJoQdW+9AAJ9VvvZW5R7ppcZfYrJ1SZChveCnvQCfR2sWHPSbzGrp sii0DbkB3x4GE6GIRgQTEQIABgUCPxWL9AAKCRBTtrgdwTzuB+GUAJ4yxAtvBEqG tDKsySqR2Ywv7xcRzwCfRQBmGdzar/OeLVHUziwduAoeShWIRgQTEQIABgUCPxPz IQAKCRBL7yYkIt9Ah2GWAJ4kpQG83TGrnIR0p6Web4T1QZjBsACgiBqEfjSGxngU cTRrQxx/bs8TX6iIRgQTEQIABgUCPxPzKAAKCRCVZB9rJT5Y45ftAJ9fNjIStddg GjgMs3jcGo6oak8QjQCgq4Q7ivzJ2HJUawLk0hOM1p8BT3eIRgQTEQIABgUCPxXW bwAKCRBBufToW3E98CEaAKCAodx0EjodNg5VE5AF3oPAVPlZSgCgrIh3fheMXgTy 32bqzny8BV5yjhSJAdcEEwECAMEFAj8V9CqGFIAAAAAAGgBjc2lnbmF0dXJlLW5v dGVzQHBlbmd1aW4uZGUiaHR0cDovL3d3dy5wZW5ndWluLmRlL35iYi9jb250YWN0 L3BncC9zaWduaW5ncy9ub3Rlcy5BNUM4MjA5OTE5RkZBQUNBRjQxQkIyOUI2Qzc2 MTc4Q0EwRUQ5ODJELmFzYyIzGmh0dHA6Ly93d3cucGVuZ3Vpbi5kZS9+YmIvY29u dGFjdC9wZ3AvcG9saWN5L3YxLjEvAAoJEBmiaAmIOP2URR0IANjcbSgJNDnmGxUg lEcaoUk6QEeo9iNa11OJP4+Uv1XXEEbHiyWpvALvzQ6v7Vwhofo2KGLVCTEhZHz7 MVIl+0c/zbCd7v99iOPySRRN3DhJvqPnD22Kc2KTM7WknZSW2WOKd1fU29vENFr7 7Z59UPqiB55zbXIobObbJOwu3x/vRNC/5bE4t2H7zLNRxmeNKt3S/ch6odJdCM/B lYy0Df2REc2s2EVLcOYsL+RXwWQp33BFt4/YqmGJQUus2nxz6GraY4J925p2S4Y7 3RcTDcWZTAeexwpxHSw4VmJ5Vupa9Jll/vAdurLUVCDd4Dd1pGJAnsHsLqD5/zdX YIxNST2JAQEEExECAMEFAj8V9DuGFIAAAAAAGgBjc2lnbmF0dXJlLW5vdGVzQHBl bmd1aW4uZGUiaHR0cDovL3d3dy5wZW5ndWluLmRlL35iYi9jb250YWN0L3BncC9z aWduaW5ncy9ub3Rlcy5BNUM4MjA5OTE5RkZBQUNBRjQxQkIyOUI2Qzc2MTc4Q0Ew RUQ5ODJELmFzYyIzGmh0dHA6Ly93d3cucGVuZ3Vpbi5kZS9+YmIvY29udGFjdC9w Z3AvcG9saWN5L3YxLjEvAAoJEKseS2BGdWse/3oAn297V8QlgeWSsvqfNYPKpqWp OGRhAKCIuuT96Pn38WtlGOBa7zZrECTNvohGBBMRAgAGBQI/E7DoAAoJEOfJ26/j Vu/ApXcAn0Czyiw503iLkF53c2qHJ2HUelW7AKDDiDT1zAGHdsdcaH9svMxWOa0l dIhGBBMRAgAGBQI/Ft47AAoJEDu/z3e9iwUNnssAoK6lcUf4GkqjwYYqH08P1J+r HaJHAJ9c9pAx86VmCaV6wQ26cKLBKUNdgohGBBARAgAGBQI/EaO3AAoJENAZ9e+Q J6uIx6UAn11HUO9dUXyAcUXqx8lyaEa20cW7AJ9kMTvSqDHkvci2MhcUkGzjpUv6 xYhGBBIRAgAGBQI/ERsxAAoJEPS0sMx5fr+r/m0AmwT/dtstpPJs7wEOejhbgGqm vc/PAJ9Ynh+eN+noydvRINXMXigzuuoX1YhGBBMRAgAGBQI/F9G0AAoJEJEfSuaG oRjmlD0Anj1mLd5E3VlkwvE2/tjgs6fQ7Zy4AJ0Z7vIFQjFnMIGJwhFqYsLbKsy4 +ohGBBMRAgAGBQI/GE0WAAoJEBp0fkUw4LnYvPgAoIUWj1ZA98QOQqcjUoC2XYom fJl+AJ9O71OiZXEgbccf2oQeY0B9mD00IIhGBBMRAgAGBQI/GX6nAAoJEGZmcXrb g1Z57xIAoNUVFg9YL70dNJk6t9ktEEjzb2QrAJoCbcLt/dEXOcWXWbY6hDrpkKro oohGBBMRAgAGBQI/GX7LAAoJEA2WS2ZXDm3qO3MAniLwLC8Yy9QYRDWNfPNgkOhO L9lVAJ9AL3wmTAeNsmupBo6rUaw+gFw4sohGBBMRAgAGBQI/GX74AAoJEE4CrK4d 1rOArlMAn31ZFiAi9SPYMbK4MUgJjmVvF0znAKCPp7dwDl1Xi4hTigwPlgC+aqvF o4hGBBMRAgAGBQI/GNSkAAoJEM6KedeYAW3H84gAnAu3PMqTcX+JptdB37ZOmijC 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 azal4I/N1CX9sOu/2R/ABgCeMyo5M0vG06uLFkVKidTP0t838QOIRgQTEQIABgUC PxVehQAKCRDwI/gLJoQdWzvhAJ90ieEwIPKGXlPEmCnLlaCfGAhpCgCg9H/SGzS4 V+jAaEqmSIvltHTf/c+IRgQTEQIABgUCPxWL+QAKCRBTtrgdwTzuByH/AJ9S0n5U egb5DNIUMt05ImWfQ+uWEQCfTRu3SC9Yn/YGW18W65mSeoGEkqmIRgQTEQIABgUC PxPzIgAKCRBL7yYkIt9Ah08pAJwMs9tctTxNv/QGhPmlonaQ6ugxcACfcTmKFWST 9tpWQGJYMdPIymVW3+SIRgQTEQIABgUCPxPzKQAKCRCVZB9rJT5Y4xYwAJsEa4Zi Ib+DJ3f1K3KX7ofvADBQ7ACgkAR1nIokfD6rFzMhfWGCIfmgXU2IRgQTEQIABgUC PxXWdAAKCRBBufToW3E98CnFAKCH+yj3Fo+mwbSpXoHJmDk9pd+BfQCfXgANpSPQ qib0Wtteoo2PPtgiMi2JAdcEEwECAMEFAj8V9DCGFIAAAAAAGgBjc2lnbmF0dXJl LW5vdGVzQHBlbmd1aW4uZGUiaHR0cDovL3d3dy5wZW5ndWluLmRlL35iYi9jb250 YWN0L3BncC9zaWduaW5ncy9ub3Rlcy5BNUM4MjA5OTE5RkZBQUNBRjQxQkIyOUI2 Qzc2MTc4Q0EwRUQ5ODJELmFzYyIzGmh0dHA6Ly93d3cucGVuZ3Vpbi5kZS9+YmIv Y29udGFjdC9wZ3AvcG9saWN5L3YxLjEvAAoJEBmiaAmIOP2UEw0H/RVZqajm10VQ cFpumvPC/qvWRIxZdQASPdMGKAASqPnrNQmfqHo/3rnU3BoquWWlZikwn22BGkuR aytvAI+AAyrrkA3R5HgwlIgtCQpTzljJPVEOA261BDlXLvttZipW6DvjZ8+s7QWW fKZYwbRCm5mcri1JQAmxtjZkK3E1K7yfDL7onLrHDx6H1d0njgN1j5K/82m3e6eF YOoi0Qpq17yH1HggGXx04rGgn9yaBOTmP0fJPsfnzWo4+GIfmQjfG0rrJhdakRgW a1JO4aI+goaxu6KSTFhpOnd2Rw34bkQICL6jZC6G4MtVSao0IsVtNiP1YcBbv2Bs 0ueQduyvaJiJAQEEExECAMEFAj8V9D2GFIAAAAAAGgBjc2lnbmF0dXJlLW5vdGVz QHBlbmd1aW4uZGUiaHR0cDovL3d3dy5wZW5ndWluLmRlL35iYi9jb250YWN0L3Bn cC9zaWduaW5ncy9ub3Rlcy5BNUM4MjA5OTE5RkZBQUNBRjQxQkIyOUI2Qzc2MTc4 Q0EwRUQ5ODJELmFzYyIzGmh0dHA6Ly93d3cucGVuZ3Vpbi5kZS9+YmIvY29udGFj dC9wZ3AvcG9saWN5L3YxLjEvAAoJEKseS2BGdWseZeQAoIz9KlFMtajFGHN2dxGK sG6mO3oCAJ0X8Z4DETXm/K8ILQ1Z/pP4RodIP4hGBBMRAgAGBQI/E7DrAAoJEOfJ 26/jVu/Aw+4AoO4wBXNHbVE/rPsMbKPufe7Ec31YAJ4/1ioDRk5fR5TEb+vvXSW8 nofiqohGBBMRAgAGBQI/Ft48AAoJEDu/z3e9iwUNDfQAn2WxsohG5n9Aq43Ct95k koqBFturAJ9+96R3ERPGKh9swWnJ9rBlkUFGZ4hGBBARAgAGBQI/EaO6AAoJENAZ 9e+QJ6uI8fYAn2tnCEZv5HogN3Abkr0XrmYL+7KPAJ9H4zrNiI2xha68apWA5qlV LqyHPohGBBIRAgAGBQI/ERszAAoJEPS0sMx5fr+r7kYAnRw1oK6hqhlDWUHxmPRW VbnYP5NxAJ9GDLHgyWasYFj4rFsBHleIAmu+yYhGBBMRAgAGBQI/GE0WAAoJEBp0 fkUw4LnYihIAoMSxOoAUqwrOSZZfAT1PN5tnh7X6AJ4pe0/QNg+zIB9/mvZAJbvg bSHfsIhGBBMRAgAGBQI/GX6qAAoJEGZmcXrbg1Z5GsoAoNPTcGZB/zlLarfBlJdN cyTkaTN+AKDAj9c7kZqVwQRvfgO19viKFqOuEIhGBBMRAgAGBQI/GX7NAAoJEA2W S2ZXDm3qNhcAn16xPNxTE4U9eqCCT26dCf7VqAyzAJ9RT4KTUEUGKseS8f13FzTo T1ueoIhGBBMRAgAGBQI/GX76AAoJEE4CrK4d1rOA1O0An1WBdZaCJRIthN1/ymMm Q6HnRPotAJ955kGEkWDp8s5SL6NDI0zBBkGvVohGBBMRAgAGBQI/GNSpAAoJEM6K edeYAW3H1z4AnjSEKHleKRyOb/kG37ko+eIB9FD2AJ9GQ/q0P754ZtxqaFUiqHAJ NHkKI4hGBBMRAgAGBQI/GvN9AAoJECyYPlrSilXWwDYAoKUwfgKjZAsl0coktJZv 14OHy3tRAJ9VAy9BEUSWIFSaKPsC8WCrs4eXjohGBBMRAgAGBQI/HE8FAAoJEHFe 1qB+e4rJ2f8AnjihYtaFRbsEwGtuE9C+5wjKZYkEAKCGJ8lgK5447GtFvs9sc0Kk OcJyxIhGBBARAgAGBQI/FbTZAAoJECole3fGNyjSTqQAnjzG6RQUZB2fHuOOv97X PEUxf6VyAKCAu1JdTxOl7uvOSgzX/l5hhZ9SHYhGBBIRAgAGBQI/HGcoAAoJEMgP dFmtwp7NENYAn1wYpBppW2AV2J+LS+4UqyzwUgx+AJ4rmKBgfE8OkM1QHOiYqpy0 MTkL0YhGBBARAgAGBQI/HanwAAoJEIsCZlm2jV9/1N4AoI19E9A4I1vz5at3XRlR EbRDIA+dAKC8ih/vVhLc8dZ49H56mvqPO4ZIjYhGBBMRAgAGBQI/HasHAAoJEN56 r26UwJx/dQsAnAisenAR0GJXx2M1KEZqOEVN81+IAKDi4FQbYnuBNYkp3mmut5CX SSpeKYhGBBARAgAGBQI/HagwAAoJECjdsP0Zyba6/0AAn0j5wJOnIcQfDKStVSoi QcKv3qxEAJ47GNt06E1oPDpBFSyHaX0EicKupIiOBBMRAgBOBQI/FzFmRxpodHRw Oi8vd3d3Lm1hdGhlbWF0aWsudW5pLWJpZWxlZmVsZC5kZS9+bW11dHovc2lnbi1w b2xpY3ktMjAwMy0wNy5odG1sAAoJEN6Fg/i9v+g48LIAoJ9sjzxj49V+IkmTST5q N1rn2aueAKDSswvpJjjC4WCe0fCZk8NvnCOLP4hGBBMRAgAGBQI/HsRyAAoJEPhZ kLAkiutzRcgAni/Tdya62QESUwbPY192zUnpZCUZAJ4p0eMJaTtAFgfUz6k1s9nx B9hHEohGBBARAgAGBQI/HoSRAAoJEG8ji8JP2loMP8UAnRgUejZZNVhjDeuOy3cH M8UQ2fNgAKCbpsSxJs6JFR+yS/N9jx8xcWKvyIhGBBMRAgAGBQI/HuFWAAoJEJSb JewHRHJS5fIAoIvtsVi2+q1/HNomoog68sSbV3/8AJ9lafbGsCje3wLB59bdpLx6 bfvcCYhGBBIRAgAGBQI/Hw1dAAoJEOdNKbgr4W0B8hkAoILgUU+r59s3zs7CL83+ W27m+AxgAJ9gnOZb4OFx0xRKGXWI26XyL6cQFIhGBBIRAgAGBQI/I5jUAAoJEBig zI1XBqS0N0wAnA1VvaIzKG9Sx1YRKvtT6Y7kGhjTAKDbqwjDwn0D3Fzf7NYSs2LV icJVAIhGBBMRAgAGBQI/JXRuAAoJEPK1Kl0KX7aHFCgAn09gsKJwPCNoEwVSnGy5 UDc/sVfSAJ9cc/IJ1M0xWIddrgpzP2O5+V+4W4hGBBMRAgAGBQI/JuGsAAoJEIkh tdzNFaiDmcQAnRQnqsobCou74MLykzwtmFlZUZbhAJ0dmMVtHYC74K2zt+lJvz49 /G1YfIhGBBMRAgAGBQI/JuG3AAoJEAcXdOAA2M0WDRAAoILMsRMzn0aCdR/d7TVe 39qvyzLMAKCpgKEyrjeLLn85zYQt/mEHlJBF+oiNBBMRAgBNBQI/J8ifRhpodHRw Oi8vd3d3LnRyYXNoLm5ldC9+dGhvbWFzYi9jcnlwdG8va2V5c2lnbmluZy9rZXlz aWduaW5nLnZlcjEuMC50eHQACgkQpHnNxFq0YGrGIQCgpqtvf2JAIBFJj2ZEAjar xQHUk8sAnR1PKOzaTtbULulLAfboR5j38Jg+iQFjBBMBAgBNBQI/J8iqRhpodHRw Oi8vd3d3LnRyYXNoLm5ldC9+dGhvbWFzYi9jcnlwdG8va2V5c2lnbmluZy9rZXlz aWduaW5nLnZlcjEuMC50eHQACgkQ+Xz54zpLf11CkQf+L6ndlBkMOsXAHSRpruI8 FEip58dRE3PEWCR5Cs3Zj/TrV9mF0pCnbU+5wlfCBz2Ieuj2ddNwI+9kWicCF4Xs 9avqRAasSO5sUSgpq405nKmNu7KdJEQG33expmPz/AX+agHOwTKpniohjlEa67Qd TG2ewcKvmLEQW0LjY0Rq2gRJ4cGFYkSmynOBp6agg6bITiwXPNQZKQ5VafjOQVUR tXtQTjInZ8gJGVdkrGD46D5a8yznX/KQU4ZEgRmDb6vl9POybhOihDvszahBfwzs c5QBZPHEXCdeCNA3rdCYbaqkxohS+y5PjcYchfO12YOaOB0Gg8SWOnow/M0FFmFc FYiNBBMRAgBNBQI/J8i1RhpodHRwOi8vd3d3LnRyYXNoLm5ldC9+dGhvbWFzYi9j cnlwdG8va2V5c2lnbmluZy9rZXlzaWduaW5nLnZlcjEuMC50eHQACgkQeQV2j3WE 9dg9VACfcYe3EhS4Nh/EaOlsxtBPfa8k5jUAniNbDyUG3T3TZv9p6fCzIMIoG569 iEYEExECAAYFAj8nyMUACgkQ+dAU8DjJhY3c5gCfTaZQqM+jRp21JyZUdMM+9lii SVIAnA58fijG8f9ytFnVu2v+60w/0cEqiEYEExECAAYFAj8nyM4ACgkQXQ9/SeDk nzTt+wCfdlDeiOXOMP5OlGd9mobCgiIbzfcAoOSkTiIY5k/iyi0W1ajOo89HcoaE iJwEEwECAAYFAj8nyNgACgkQG7CLvyqSMiV/bAP/TXflvf1U6ypKOg90Kd4++x0s 0jm0gC+pMsFOedx2G4V7mFdCU5O86MVc+M4J5ztBFR+phYaHTtIfREkgggFCFovP lykzZxTDc4FD/qQmLmMvHVjwb0pVYI9zPEcL2U7ZcvZEQog94lRxwcoIhEWFOdvK nyjM9KEAsk3yqmAa2fmIRgQTEQIABgUCPyfKwAAKCRApvl0iaP1Un0XaAJ0eKoSA oyzjyNbxkxPLqhyptAq0WwCfXd4vilC3Rv2Jy6bITLFqiWLNUAyIRgQSEQIABgUC PyfhNQAKCRCfzyzNPz5kJs5vAKCBDTvRUTDkXEedWjYkkRLcyRGY9QCfViuaISw/ 9ypRk755ZGohUNkzqamIRgQSEQIABgUCPyheSQAKCRCWJIPhVmLHNEPbAJ0ea8Dp Xtr3VBTWI57Ph1y9S9sXaACeJKs/hNYnEIkOrh4Vv+dSMBhFom2IRgQTEQIABgUC PykSSAAKCRAC1u0h4yxPS93SAJkBXNMPqDHBuSJCdvunTRZ6dfHrqwCgnJuM/d4I Kque1PwGKAgVr7K/VMSIRgQTEQIABgUCPy5KqwAKCRA5Ig1uDBr/u0+wAKCuQ2qK LXzGsqgrONq1Nc/Q4eRJcQCgkrxWXt0TsjDNRZCXZ7phpuQ7mSeIRgQTEQIABgUC Py6PmgAKCRDKDhacKPo4iuhHAJ9pftPW+2A+h0pIORtiS1hm6wzYCwCg6gUZjYQz N+aMeImP3AJl20vOPnWJARwEEAECAAYFAj8wMXwACgkQC3gy83PWLUEMIgf/avZz 1HowES/LgWuGufamC94UJckVdAw0DN2O5rxGmgqA5TfqwL0g02rfllJRjIYBPT4M uwr50BdVALJ9XLmyGq5Rm6grB4F2HYI04EiU+e38Kr8B5W/rbV2rpEzWYS1bmMbC iEDDydGTfaDIgG4Qgghk9JyTIhoCXIwZ+glPaa1HSAhTIcNhJq2LfulcqPVvt+C+ Zj6A7DgB0OWqccz2+vxMCVYLq7aEVpwcgdPvegYLA1CJ+RiDWKTNkJCWalN9GIzB 21H8XP1fnIqRlnwhpu9qou374BVO+b5l2aRDRz7WNXDFWK/MsZSpiPicIkmykZBY mOC3dMNwgmJrl8Ijg4kBHAQQAQIABgUCPzAxiQAKCRAZq6/sHbI0q+O2B/9k95vb VU+jRLlZOW19HGWGOaIFlZ0lS49SPc3GJN5HutFyj0QLQOyR5ttDWgJ9oCdbQZun /AoTcaVn1KPV65cmXi0AmUfawDNMsHRA+onlVSUttF6Z9FVRJEr37/r2U1uThIQD h6Xv3U+3OFZeCspo0mVWS+lQ+i0c+n3yc6+X+5SIMUOwqe332qTeP/smiGsoN1Gp V6TVJlWHDtTPrAPu89C4/b3rokhVATNVoBm5zk/5aotT5hqf2v7t1nKUlWu06iUO 7VUeeWxyV0+wDnzo9uwDlDCU1PtOu4bSNwCTB2WrUqQLzbD3EIz+9km4ysNWNARb Ub8CcRIm8OUq2oCfiEYEEBECAAYFAj8wMZcACgkQeF8wZf69S9wgFwCgh6pV0QC6 nGUvV5gh6kpq2m86WosAoK9BWccENWzlZPN5FrKAZhsy0phJiQIcBBABAgAGBQI/ MDGlAAoJEHw5el/KZtCx0PUP/jrWCrxFkGmigxc/+hLB9XwwM/Mx01OopeE+vpx/ +GUyrGpSsuhYP2Pvhq7VTFsGqOzIWs6pBpm51/zEZ+43RExafIICRTQ5a4J2dRMC rgLH2Smlkz766klepK1pNFamixWsWopmtsWZ2YX/91G6U6IPASvLLcV+lFuQEZxC kL0GlLk89iOm/Fzyu7r7xG0DOzI4sFdo7W6LQAGhwxTWEqfIpRqTIPH/IYqLeXxE gROe6gCGkpSsk7+S2kG8oKmFPd+AWI8LFhHpBL/NksLTW/Vad2lCHejWe4us1nKD O0lrIdNgjs0W4+p2y/TFH/pUFiOUbBdEqRvzPPMQaUp5kDAbZbG7Eydg+CKImPMd 90xMGWRHs7e60m6aMDwmx43eIdTjFsnBuCuGfic3+ydJ9QeL7IGjhT7wWUGQjpas hbumPKEjhhphIUJtaJFDC6NOLp7o1DgdlQ806OgU3KzmDM5i6QO3noeRA4en6XHc ds/D93quTOXsw9Ex6S6m9AdT1XmPkYN1SUNQr3S0BxYzXiZuuZkdQ4sFigwmYljq u19A7d97XfIe9cRcuOuV3eSJInljG8XP5zx5rAgQNqAU5RoKLl9kik0qmLVkk8Re 8UCAvFVkklZicYR2kLe/YmXTsckT9od6Je5LOpVe++y4+la48vtCKXuP3JL+Rqqa ZxZZiEYEEBECAAYFAj8wMbUACgkQlYRRoq3PfpQZUgCeJbkFjCtAGLhiePn1uRM9 SuRi7sQAn3QdlR7RiyDXyO8GoAT0/ODhdcAliJwEEAECAAYFAj8wMcUACgkQ/Uo4 3Ch2DT3PxAP+L98q7LvobV7AtOIZY13z/wKHCLzrHUeiOOd+I3l8hit6fIzsqmTH sCcSu/wVt7oFaTwt4+TN2epunVFV74J0nB82Bew7J2CXD19ZsQy9qTqeNvLvmJD8 FmWC6LYIqkN3IwVVB330sZQYVcNSNl4hCy4wntNLGWPY37XmG7nOi9uIRgQTEQIA BgUCPzal+QAKCRC7xxTRnGfNlhX6AJ9zfXvNPU17VpgdCyF9L4tw7Gvz5wCdG0dT 1Wfl599fDBZ07pZYdU3fGj2IRgQTEQIABgUCPzflcgAKCRCAdScAZahB7bOWAKCB UB7pH58orpwn4kam34h0S4U1fQCgvh/QHkfYznXxW4PLZjHFzg47eiGIRgQTEQIA BgUCPzf4KQAKCRBFwCFHaavdVI8lAJ90ZPmZVgVr13U6xu8J/QJF0Ah5QgCdGXhO FWEyuY+1IMswfRS9DXffJd6IRgQTEQIABgUCP0konwAKCRCPubcPpM/JbmcVAJ4v xU32w0zWpHtxvY1M9bKwjay5dwCg2PFIpqfUrd3Tt5sfIizXsfwhIyWIRgQQEQIA BgUCPzVMUwAKCRBp0qYd4mP81Kv5AJ42Yx1ASL78rhDVdaBNU2/Y1dKOqACeJdCJ UqJ1H5ToCAJTRTHOeEqG4SaIRgQTEQIABgUCP42/PQAKCRB54pxgsAY/5/CIAKCo l3I4e61OU01kWV8xKx4LkYDIaQCfRKFeoCAMtEaCxpsg1pBHnCisJa+IRgQTEQIA BgUCP42/nAAKCRDGBDxWcgdxN4ZxAJ9eDJmhY+uLrkHbceesEom/jLccMgCeJC64 Yq58dSgFA6YUEdKnDReMw8KIRgQQEQIABgUCP45vGwAKCRAKYuU0N6eRSdCvAJwP 4vLFAOUAcCd1BQR6AQZ0O/SkDQCfRrqr0qbUI+JwPCsgyT7I3tTTSQ+JARwEEgEC AAYFAj+OYU8ACgkQFTlqeTPrBZrRwgf/ZKubbJqGC3UX4ed1XV3gbWMgnp2P76x6 AdRKzMXyo2OisVNQEe0HeW3xKnJa56FMF0qDziybKY6+KxAbURbw5gtNGs/N4/Hw WWwd5G33ZoFFXOQm2N3GUg+98hqmmqipcgtNDWBXh/WQ7oKNcJGu4pcd7I8zHHD1 wzjUrFaETAQhPH9e2IZHnpkF18L5GJUIazwbc0oD8Mq7mkZVUecTXnt7wnwAp/Df 7Ix5jeCQkeQB8hNchslF3vUvDm89dU8XLHwTWPquBIXt0/wDFeDgjfyRw82OjyjQ R3niJ6WHAECnVTkmkR/nBkrQMj/BGFopvcEUg87BXHaR1b0LgfUieIhGBBIRAgAG BQI/j8N2AAoJEMVYWQiVq/UMPDIAn0q90rhCABcqV87OrVSUKLNlpNOjAJ4nyVwh GBSNxYmncdRy0pRlqteeg4hGBBMRAgAGBQI/kCDdAAoJEF7HvjcDzgGeXXgAn33N /7nmO6dooe3A3IwL+KqHe+8+AJ43UeYDXw2wPwMSJ2VY1WFXC8oS6ohGBBMRAgAG BQI/kRkjAAoJEOOmjcqmmNqZsd0AoK0wBPCZWa5I2rXl78GnC7PR+KHVAKCYNcZV c40GH/6Za+v6Tumh2gHOFohGBBIRAgAGBQI/lDUOAAoJEJ0IqAztkI1qlGMAniIs K64nE6FCAoDOW2RtzVihd/S8AJ96MLTd83xZobZy2Or6WUqSPX19W4hGBBMRAgAG BQI/lEHrAAoJEIMpe+qmIxHWoiYAn0OP5sE1dShF4C/yK/xdRmYMTt/cAJ0fv3lX KPA7/qKsZGTdrp9rq6Np24hGBBERAgAGBQI/lW0HAAoJEJUsViNsp2z0ufYAnjxk +57rxIA3qkkxmd7JtusUFZlDAKCYo1y4XzEXUAoF9+mH+Jz+PqAss4hGBBMRAgAG BQI/nDG1AAoJEDYCVlOr4LEGgCUAn2nV6DTZm+Kf9zniWY4ZuI2jUazXAKDeQys6 EhMQp9SWwduoajYatT6OxIhGBBMRAgAGBQI+NyJoAAoJEG2U2yGkQUVxohoAn2VY P1vR6UKqe+eVtiKvLvppkdx5AJ4mTUyRiMQB/zTosBIg+XNK0UETIoiQBDARAgBQ BQI/ncHiSR0ATXlzdGVyeSBzaWduaW5nLS0tbm90IHN1cmUgaG93IHRoaXMgaGFw cGVuZWQgKGl0IHdhc24ndCBkb25lIG1hbnVhbGx5KS4ACgkQbZTbIaRBRXH+1ACf XWYn1p2HoizDLdw+iwRVO84lTYoAnit4RRnVZSGea/WVhblSOX6goQxsiEYEEBEC AAYFAj/MHtEACgkQoL6dujuIbn22AwCfdjB/V9Sdi5wdaW7CS7VIbS9RwLQAni56 8dJQar1j0wNmXbE5Xfj8XwR6iEYEExECAAYFAj+iix4ACgkQ8vvXZt12fkoj6ACf Zgas1+pCwq0vTrlLSsJ/2FezbAgAoO9ow3Rf8prgbXkGZHtw2W++GYcziEYEEBEC AAYFAj/TW9sACgkQkdi6ijTVyg2RdACggXb0RV8mxMqjMEuE1gPMBZQkIUAAniu7 Ef0yG2oxmX9P0HbPJMWbfiKriEYEExECAAYFAj/Tjh8ACgkQrxRSXsoHIeaAHgCe MlxY0DqFe6If827ellDd7AuYz8sAoNBF4vsAZVj3+Sq5JvtztYYhaHW/iEYEEBEC AAYFAj/TwGAACgkQYb5H+9Ze2NckCACZAYI/Sua+imgs+lBloApb63SqvQMAnjlz PgbRW0g33NwZyCRJ6UBQlA8qiEYEExECAAYFAj/UFwcACgkQzfT3onTsQykjTgCg s6m4JzgSm/sRtThBSrucGrJFv7wAn1R7Ag7wl5gRWMO3f3f5ChyHevhxiEkEExEC AAkFAj/UxMwCBwAACgkQBy76KTKckK4HfQCfesYSGD9uNXV8JaPNCBHe1MHsdhIA mwZ69GW/iauucCuNSUaLIQgFUlz8iEYEEBECAAYFAj/XiH0ACgkQNQqtfCuFneNb GACfbZIcctfTfOj1c073/2IjdILsZFsAnAqKONkeyL3Wcu9GV0KFD3gz108diEYE EBECAAYFAj/Xcq4ACgkQ9aLWrfOU0PiEQwCeNLY95/5hUOocoFpxY6oXvXkjkvEA n29v0j5n6QQnndXCTIMUeIJMAk4AiEYEEBECAAYFAj/XpgUACgkQ/aHb+2190pHu dACfdUqf8Wj0F1ie233+IBIikobs/qsAn2L3StgUl6Y8jB52DSp7aVgJy2jtiEYE ExECAAYFAj/Xv+AACgkQcC9qbtgxVkOFMQCfbOu1HBGGNWFBFFk9cXHPrthzoo4A n2bfdbDLYStoUgCwRjBS1CJZZWTuiEYEEBECAAYFAj/XoWkACgkQzCIUKbtGVYLS 4gCdFzJwV7QofoXGXogHRfYPdzzQ2DMAniIEHofyr/VP4uuI35cj6EKUTv5WiEYE EBECAAYFAj/YpB4ACgkQDq3Sz9XRqj4fHQCgl2bz+XiGHWLW92k0SAQyu2+v6nMA oIV2DUC/8BGXcLASPlkYuItOMFM6iEYEExECAAYFAj/Y38QACgkQJPQmYjmxi4ET xgCgjzeFT9+TpPcD1URii38arKnRtSoAnAnHMqiOy0VYg/M10gv2e4Cvqy3giEYE ExECAAYFAj/XuFAACgkQ+KSYvZS8wB93xQCeIIV54ff2TtO3EbThvSVrbfHudioA n2KzEeLl2WpbK2EqXTU17SVy5jERiEYEExECAAYFAj/XvtcACgkQAeqShO1JBbuQ QgCglcqvpwWZ26QnW7Y3trjj9J7/wXIAn233CK2a8fDM0mlPOFdWeiix6f+tiEYE EBECAAYFAj/XnWwACgkQh11XSMrLwHSWNQCcDPZp+80dOy7KMJXhM53O2gdotcQA n2WtX8MPq8JIir/FVxBOGRIoTQMgiEwEEBECAAwFAj/XiA0FAwHihQAACgkQdROi NhMQLPUpbQCbB8hbodxjMNo4dcLjfIbY4J5iGg4An1EAIv00YOE31DXaG48PLDBq B0wgiEYEEBECAAYFAj/cWVUACgkQelwNae19I7gNPACfRWOyKnHacjD7rWBdNy2i 6ayslEgAoMKdZ3FpbeLtwZY37bWI/eSIXQE+iEYEEBECAAYFAj/d5nsACgkQj73e iy+kMR4XOgCeIzGhKxsVEvBUUHNoWOPmeXpKz1cAmwV6zprqvfkjHkHzaaHIZ0k9 vXa3iEYEEhECAAYFAj/e/GEACgkQLgAJRlBWnRhiygCfeU2+IkLEVetQjjgv6xlz UY/jz14AnAokmecPv9MD/fXocBCeNBNmHsbziEYEEhECAAYFAj/fLOcACgkQgzvw J1ryljCf5wCfUZPMFsuj6M1pgH7eTWShAfa6IgAAnjWgtE+Wtt2huIEFLU3Ue4xr 2vByiEYEExECAAYFAj/Y7VgACgkQZzP420x1p2tUBgCg0Ne6b338FI2iYZMOfpW4 QJoMJp4An0vtWvlXx6I2yYz4uvdHdNf74dWciEYEEhECAAYFAj/vPLwACgkQ3zaE 8GN48xvAPQCfeXQFRykZwoDnJxZRrbsMuNdX/pIAnjDKK44pLTm1tXubPLOwoW6j tPgSiEYEEhECAAYFAj/vayIACgkQyQMBxhAreU1pOwCfRk/rb5Tj65Fu6rLAnG7c x7ugGtEAoI+Oj6yNuPAuUFtvNq3UXicXUpYDiEYEExECAAYFAj/wRzYACgkQiwjD DlS8cmN30wCfV0oT4G7ZzHahe30z6BQnSrWCKMUAmwTXnFPMc6xKukz3tT0G23eS rPh4iEYEExECAAYFAj/xNU4ACgkQSUvu2wE5EjvT+ACglXXJjkV9Q+FLfL8c300X PTaF72oAnA7OPAHN0hY20vTev/d11D8ERRabiEYEEBECAAYFAj/x6dUACgkQvBVi c1oTsEiqfwCePNZqs2jGRorP1rNwarv6TEwIDx4AnjIS8RzUVBN+xdQwkbrGzGnN PCS9iEYEEhECAAYFAj/x+gUACgkQCY7iyqpOgLa2rgCbByTLSpUPjYdJHWafbvAh jfVpumgAnjqFyycwkXiVxqBwbOunkwDDWwswiEYEEhECAAYFAj/yEZUACgkQ0+Zx vPFTY6EXQQCgiKnhP7W32TAfrXEcMY57kIxdc7YAnjOFG/fZkEb+suBcQjM35jU6 yTyCiEYEEhECAAYFAj/x/nUACgkQifW7lGXJEoUxoQCfX/Uzi+Z/MEIuKtugYWsz 29DtpEgAniQkFUIKcazMsjHYMhu0P53Yxb2DiEYEExECAAYFAj/zKT4ACgkQEfTE HrP7rjPClACgiU7qn0gyQGbgcPEDIoV7/iElsoEAoIwdiCCo8/fDYwKZJzH0ic6Z QYX9iEYEExECAAYFAj/0V/sACgkQ9PcicYLJuinfUACfbfARX3S434I4di1KmQDJ Cho67j0AoI55EvMrfZqOYvX89Pqxfvn4kH2DiEYEExECAAYFAj/09ZEACgkQ4Wmz +z2IPqCAwgCfenqkn+38y4Rl31FB34ADe7s0slAAn1yhVL+2PX5Bnof4iMi2JdKB kSVbiEYEExECAAYFAj/1JicACgkQLst0AlVuMNeJjACfWzqMUDu3J+Vm6voXol9n jTqqXWsAn0Skh066ZAL/JD8Jz3gWRu3yY+dCiEYEEhECAAYFAj/1sW4ACgkQnNo+ exDKny0nYwCeMl0Nd/wd+qxe9fQiK6gBLpOcmZ0AoJjAuyyLG09ohUXVjBSPulgv iRnNiEYEEhECAAYFAj/2GVoACgkQKLKVw/Rurbs4nACfRgNCI6+2XU7vQ0TuUxrc yUC6W54An0BjKyxPtz04iwkBr1+4QWGfaBvLiEYEExECAAYFAj/5oxEACgkQRusm gsjeDU0uIACgxMoHD6V9c1JK9sJf+nUU3MTslrQAn0MBbVlBXhgzOEwuHCLXfyjx WmXWiEYEExECAAYFAj/8GhUACgkQjO6yWbPCgfQ/AgCeP2AmiYnXpXrEPFc34vfm vIE2LHAAn2+3opBvEMpbJZHi61TbkdiwskoCiEYEExECAAYFAkAFryQACgkQuQ3X ye1hlT26fgCg2R4UWJu3NcLjP1yM/ME8RGTrTg4An3AfYTAqWT11safSh8P3Bp+b DBX4iEYEExECAAYFAkAGEqsACgkQRCBj41UDsd/mQwCfQxivxS3uk5qPUms1rlaZ ortwF9oAoInKBAxQe8ArmnxreB14YDowUK7BiEYEEhECAAYFAkBCeEoACgkQmHaJ YZ7RAb9aGwCePCImHjDatX93iZNuD42ke3oSYIsAoJfssZTjjRRntJgqY/KUmyoE uaPuiEYEExECAAYFAkBMc2wACgkQr2QksT29OyDJbgCgibgPVr6fRXvDYUDct3DS l/L9tjQAnAunmZTq5rfaK4gGEaFpvM/fhN8DiEYEExECAAYFAkBiIT0ACgkQKljO qlJpjp93EQCg0IXwhDrFGg0+pSHtYWkrbK76dAYAn3w4uI5HPkR/EPUCelCIoota HAkziEYEEBECAAYFAkEM6sIACgkQXeJJllsDWKJB2QCgu5C5Z/xi8kxD9Y3HIHZ2 i65aD7QAniZxuCBSEsTUrUFQa14JXjpOigS/iEYEExECAAYFAkGE4iEACgkQqy9a WxUlaZDrDACgie5dsv4FtXyqaGQx1KeIg5MgsysAn2wD6sUUho8L+aLUtch0mCDa sLptiEYEEhECAAYFAkFA71QACgkQBylq0S4Azzw5LwCeKPCrHyToXmAhIAFapS3W XFtENAwAnj8NbIq//frXLu+MFFgNuVWs1yo4iEYEExECAAYFAkGEzjUACgkQP6De CKDTkWjBXACgi4VgWJC+6SHQKT763qnhT42o/Z8AmgNnndmcd+6COISqKDC0t6cu yRgliEYEExECAAYFAkGalesACgkQXY6L6fI4GtT0xgCfRBpt301zvBQPNtR5KWrV TYKd4BIAn1C1Hj35ZmPGY1ErpJ7/OlvRaEkYiEYEExECAAYFAkHlLtcACgkQ/H2E k1xrBMnCdwCfSTfAeH71fmicdpo0WyQtDJGbLKcAoJQvIh/dJCcTRzehMoikepB4 0VVJiEYEEBECAAYFAkInm+YACgkQX4f0Vv2/Nxw4UwCfcyR6UVmqk6V1MpMcnwqk EUIFt34AoJ02pIwEObvB1gyVQtpP6Jof8CYziEYEExECAAYFAkJZlc8ACgkQcBdD 8e7nfkUQkgCgvVSUG/qMQSzRM8eZoC+cMv8jAV8An2iWuvuyK9WpYkZkN5dYTqmK XIE+iJwEEAECAAYFAkIcKQcACgkQ5RUoJTMc2l32ZQP+I/nbPkxTJDqhjh+SPB+P 9ansJYa7ZkXaPd8I7P1nENYQ7WEDS9Wc4b8AnOdtd4EI3OQK5UmswjMGJyipsa5h NblzAbdnI053tY7RDpfs352TvoBm47aipuMoRJctSIkWfRlex/HytYlygV/6gwyI +C9zkG9I02U1OpDzENTR4yC0KUNocmlzdGlhbiBCcnVlZmZlciA8YnJ1ZWZmZXJA RnJlZUJTRC5vcmc+iFwEExECABwFAj4irWgCGwMECwcDAgMVAgMDFgIBAh4BAheA AAoJEGx2F4yg7ZgtTl8AoIozE3IKJSq8armihwVbsb423M18AJ9u80NA9CxL7GkS rCvatNOzJjNf7YhGBBMRAgAGBQI+JLCgAAoJENSNEHJ4+KjUHPsAnjsf26YTRwAQ Lsj9ep/LkNuiyoJGAKC8XX4asaznd7jeU0qeJQ3Xohcj04hGBBMRAgAGBQI+LG6/ AAoJED4s35lZGelG8uoAoKOXTvFfJ3RkByeKGVvKu+o7XPdaAJ4/2bXepNLqNEDg Usl7hkak7FRZ0ohGBBARAgAGBQI+QCnWAAoJEJWnRNJ6Hmtf0MUAnA37LFsdr2rC AcQM1bxrTb41Ap++AKCTtJ/NK3bVL3hbxM7q9r8JNfntEYhGBBMRAgAGBQI+QCWn AAoJEGxG8ZwW/bKYPGwAn1CbytJ94xED5anIuEUuV807YSD/AJ0VjiIKBDWZN/+x rEd4WaHVDKuDJIkBHAQSAQEABgUCPkA0XQAKCRC1rDlKuf8qEaljCACsCiPSrFAx yz1saPmjan+RBm2i2HxUJe9XP+wODZ+EtMbqedUkCg0NMTXByyh6bcuBUgKn1pG4 PTOZvJMxEHLfsCDvzwp/NxHXIDN+yiGBr0e9WeqiV9zDLFQWPmiSc9AOyoiUavNK mYzgzmLvCKZnSLmP/GA+BfLIoUJuZwt8BsLXgqyaSs3LNT9GooZi8aVByq8Cgytt RZVGOB5EQDlmBYHoy+ifTCWkRfhSIx7Oa0uP9ybPR0/RwjVxp6nk1DUMySFb25A5 gVfhiQ+IvgOBwXWQ8O5ykoWdBccJYkGRI/4rLYY2nQQ+Z+MoxiStKzNvrJtshxj+ ESVTaS8TcZh0iEYEExECAAYFAj5ASuEACgkQlI/WoOEPUC47WwCePdtefQKkwfQo f0vmDb8Qc2Kxq4gAoMwKA9A0fXTG8Pp24ikc1c3+5UB7iEYEEBECAAYFAj5ARsgA CgkQHI0nZIQ34x81cwCdEYnjuBXMswEj+iBabubPYYuRrKUAoOntf4ZBIMkaPyw2 jE5wQ3IVnLtUiEYEEBECAAYFAj5AVSkACgkQgGcShyMVr6NFQQCeIM3GKLD+VPMK T/BTEvHJU4pSuAIAnA5XMGZaiudfhDLmrlqVpqTpb/tEiJwEEwECAAYFAj5AWbgA CgkQhqAIGyKylR3pZgQAkGSMVHpz3PiArTQNZ+rMF6CsSBpsp+Rs0CyLlG5Nsqrl he0qW0QZkC/7OvgfGn+WHzO2O44vbPjpgsE/Ex0VOZeuBYpTJZQQz8MbiNjixwyp iHBWXBp3e0CbHSq26z6/fAqhVQeDqCQZETAfrROeyNIp3vzzfvqdUkmof8c/34SI RgQTEQIABgUCPkCsngAKCRBiSEuPG0iN6s71AJ4g22uWyjB8uU9gSzu8Vfdgolyi PQCeP7+bfvgRhTVagTOc7sjGOEp5bB6IRgQTEQIABgUCPkCqFAAKCRCuUcxBI0Z6 8fToAKCa/NyunXgzy2O3hJbgASRFYkkF2QCdHAK1a99O4O3+zQjJWh/q9fXC2kmI RgQTEQIABgUCPkDJGwAKCRDVVqZgiOPvVyT3AJ9idyqUM1cUQoTx9vy7G4ITEnVn 5ACbBqQ0Ndq/Cp6PDPESlT6gXbEl0BOIRgQTEQIABgUCPkDglwAKCRA5o8lM/cSo /Y97AJ4hsp9zg6qM3M3Yu97Q4oBTDdZ7HACcDtBISlliQarPWwt4mHRctma26+2I RgQTEQIABgUCPkFU0wAKCRC0deIHurWCKSPRAKC51dPMqkgVeoeC2hMvgmQlLHHt NgCeKy8boiFAHHezYS7maFRCMsrlNLKITAQQEQIADAUCPkFeMwUDAeEzgAAKCRBP g4y3JqCoFvJSAKDBbykzsluQJ0mV9s0jQFMBtPsfqACgvr4s+/MxbUJjSpDqEQ1Z NxI8Yt6IRgQTEQIABgUCPkGUwgAKCRDwJO+CNVGeqNE1AJsEfE/svURDc6ClzGTB b2XKekuxuwCfVwuku5/SDcB0IvRijwXTxA4t51WIRgQTEQIABgUCPkEW2AAKCRDc NnQ35arLNNiKAKCyu+jjTP2kF2zsFRZJ4OLiptzuGwCg2E8G0lPX9hMzRFN0nYYe vRlUfWaIRgQTEQIABgUCPkFcTwAKCRAHJZTVR7A163zjAKCeyLsZqYxPLe/XomuC gCQOd8u2bwCfYt4iCLPcx0yMt7Nb48QOVGOdxn+IRgQTEQIABgUCPkFcYwAKCRA/ V8xvnmt23y0HAKC90+rYGPDvyXXmAx+Kj3QEV2fl/gCeLQH2EXuHRfJyJKzxt4jy vp9CwXOIRgQTEQIABgUCPkF10AAKCRBBGPb8lSbpxfNUAKCHY5RVSETfgloHO2bA iahBDgFPSgCdGfQaKBrD92CKSYdeMNNOjNxhKnqIRgQTEQIABgUCPkFzRQAKCRDQ 5Ee9ESjyX1ObAKCWaptXNj4ISu67NT4hEEDGIfUSXQCfVznMDC/hyeOL2BwfRTGr sY35frWIRgQTEQIABgUCPkFzXQAKCRBrphakwVE7DNXiAJwLv7OBvfZYVGh1aCRw qXrGB7X8gQCeI6szoysJKsw8oQUxuZS7ME9kPLiIRgQTEQIABgUCPkEMZgAKCRDH ON/LNYa6cYhBAKCaX9Ofy/81DQWMQfRIiGPoSf/PHACdHErqKXUCB5SBl7ylZhse rKncHa+IRgQQEQIABgUCPkF7fwAKCRBueUUCoBl5wKwUAJ4sz30UjqeOnDRBjd6m 3VDHk173EQCeLoMTVar27qYR1TdMt8LBZqU0LbSIRgQQEQIABgUCPkF7igAKCRCj GM7Esm5quXMTAKCjxNkNzck8JF9O8jsRlT8vgh98dgCgjN+sxGrCkMktXiHZOa9T VbdMfSWITAQQEQIADAUCPkDKfgUDAeEzgAAKCRB1E6I2ExAs9UbFAJ9Ed8MZ6F7n J+wQ8eUAKbVarTKDwwCfSF4ed0z7231cWJ9ODYuIIfiFwcmIRgQTEQIABgUCPkKm EAAKCRBADB62okjOY4nVAJ4kHn7Lcj762BaXyMH4zYFNLeh8WgCfU5ZdUpFTjB6o zFGXDPz6grIlrqGIRgQTEQIABgUCPkQyqwAKCRCwxLn3mg2CqabxAJ9DetdwesQd SCga1zBvSZ95ZpfxTwCggFwmSkqD8Kvh7ap7P2yTYetXAyaInAQTAQIABgUCPkRP KgAKCRAS6T6JP9G2tUOGBACm8D9SO0e9TBUQfXrq1XfW1EV+GqdPCN17J/YAVp1N QCqlLHYF3+/VIsaT42ioM5QQcy263L+aFVx2Yi4R3zEeolbGfFBTgvn28odrreZp uAFgjO76PX0eSFv7vvWntHLPgZ0M9rHplKuGs6kb5GlJxr/VHiHWFKvQnYZsvT/t g4hGBBARAgAGBQI+RYMeAAoJEFv8diRAZaHa+a0An2tACMMhZoxiOeQxm2v/587Z 68EVAJ0SIMqmBEUP8pu4idR4Wq/2zGWWyYhGBBMRAgAGBQI+QY9hAAoJEC9KXfQQ 64+oUaMAnR4qJpGEXFPEIkj16B0DmNOaPeh6AJ9NSY/3VohzNVc6CSQKZtvAtKh2 H4hGBBARAgAGBQI+RsZ1AAoJEJ71dopqzj+sFVEAn1ZE05x0HC+y1mk4U8Z9cxzs aZxaAKCCVWIs8JTIrKIkMfJLZlAMZHLpfYhGBBMRAgAGBQI+RsY3AAoJEOpKzVz2 XGjNpz0AnRNN1YcShhvf77WeO041Gmb6eyu9AKC/eibZjNysFFd/aJFigvZ3trLN lIicBBMBAgAGBQI+Rs/1AAoJEEC/HpEdDdC5rSoEANMcRBg9Y2PKFTtgS72hP1j1 Wse6+MOIRw8W8rt5sFMH21hwIhcDa0nBFDXuNJgNfXYp44AexcRB5BK9EYQWt2pU g+R335AEVTa39sXl6BSU3K3xnBqBMyNFz6acjZ++cjKAXYfIp3jAS+CoIZ4RN7rk d/gmKSivEYp4rTiTbrK2iEYEEBECAAYFAj5Hr40ACgkQagIyDYKgMl4cFQCeNw45 uJggp0nNoq9STTZv4sEQurkAnAjxHHZtm1X7SeUL0Xj/cSOk/DC0iEYEEBECAAYF Aj5H0HgACgkQEMun3/wGpS0wXACdHsxbYdzNvBZiKZjmshdpfSCK/2AAoM+6H8QQ uFoB/L26N+Xw5SiZ1Z30iEYEExECAAYFAj5IZ7wACgkQmpTNb38U76Q0fgCgiwEH FgMDHri4LJPoy7nHRlrDGDUAniBp2UFcQwZa2Llw9YsFLMCk6DeLiEYEExECAAYF Aj5IaTEACgkQv7s1Bo4lI/0/aACgifSFyPzrEtJlX4orbUUwUVXdebsAnRty6E9O kRzBB2Ka+xl2gXLMVySUiEYEExECAAYFAj5JZJ4ACgkQ3uEZ6Jp2yaNZUQCdFpZG J83wRl9/ndVyDYvefxq7q5QAmwfd6brtJlAuDkesUDkJBZN5NbgwiEYEExECAAYF Aj5PlXUACgkQcieKIj7SkS5bUgCeMYJadtePbjOFfoKeERLaFgm9COwAn2w8t4Uz ywpeSNF6BFaCU0NNlWSAiEkEExECAAkFAj7wz8YCBwAACgkQDbEkl9DbWra3VQCf ZB5blsydcC31ITmvk+Nvb1lO8fsAnRbkIRgOWfPYQ4jZ1gEivjYV7PJEiEYEEhEC AAYFAj8L5ygACgkQnIUccvEtoGW3lwCfWZsK3sNJ7YvcszKxAMMKuzwAuIAAoLm5 wgjvmtLqcq6bFMljnWchBQ5KiEYEEBECAAYFAj8QVQkACgkQ1vr63ZUvP/8vcgCf TI3DqqaXacjWQNGUE4Gnu3VL2fEAn2s4632/qa6krXU5wCWrV47P41uXiQEcBBMB AQAGBQI/EH+ZAAoJEEAGFQ5ACert3KgIAKnjwK5NIpuqBE9K6PlNG5hi+B8O4q6m Zw1pm305lmdUWJwGXzr9JHzaOyJPYXMq92LfUA6v3kwkKZq192hONxdKc0OJo6gJ I4tc5dpcLHW+iA/YwBADPvKZArwoQYCYH5aiYthCT4+MCqkm6ZBMTmdFrUuvw0t2 /5zlGR6JHaPhs1wDE4j0WFe/F704EgqrOa1EWu68ailpDmBWeoPiEVjeBTw117RV gKI1GhBjoGN2pde+qtO3+lAz48eC5CtH5omwTVhjpk4VPdoln8eKWv2ap3FIy7Ei K22TWwLeNWmE+5oxEUQt0gCnIfQJbbd95ljxNtSthJ61ZkZg7jWHxPmIRgQTEQIA BgUCPw2/zwAKCRB8IsOfgHrFOhxwAJ9U6Yb7IGqCjCI77N+zq8411u06jACgj3Ls Qf9OhNKc33AGUfc0sHtN5QaIRgQTEQIABgUCPw6kqgAKCRBN/6N0Q4ZdAQ77AKDD AXNgH7xMSn91PWMiV6ym7Rye4gCg2PRVP3qsB7lJF40Xcg7y6juwijOIRQQTEQIA BgUCPxAeSAAKCRDhhSLXfHEry5ZlAJ9ADR0K82x34rlDUegL6GGOyLti4QCRATLo x+QxRJzusucNkQLUeVszn4hGBBMRAgAGBQI/ECi1AAoJELM00wiWL9LekvEAoO/z MbtjaJqlcSNXD91aCn6Lk93pAKDAeVhyrUz1hbjbavCbrdy4DLL+yohGBBMRAgAG BQI/EPssAAoJEMXAxcchjRjXqEoAoIN9qyLfnNPIdmPEp+5K8i9wdYMxAJ0fjRmQ oDjRpXggm+lxM0iBHHozHohGBBMRAgAGBQI/EUksAAoJEOohmUEkd8r4n+4AoJ7a 9dbf+AY38ytohtsRezz5YJjGAKChRm9oi4NEvkRrKzpNVleolqeMb4hGBBMRAgAG BQI/EVy4AAoJEBn+2DzivqNBHeYAoNh3Qz3P0MDqDZq/2enn4PI+nHbQAKDSGflE K2t2/ytDfTnYQnD/lw0mO4kBHAQQAQIABgUCPxFBZQAKCRAJ6fkKinJORQvPB/9t lEMYInNoVIK6zLBr9N6NrzoykHSaknZWMwzJOuWm2Cg7pT8smDpyURnA0i0mTGC5 +dLf59SGxCwpvRReAhiZViNKnX9x/GWCqICV5CMbbELzS2RO7XR3PWR+3F0QWBHe 0p/HbbhE6CIUTwOUlLS+ZlthI4YEx54EGLZRWWqs0RE8N4V7hoPm9NWoB9mW+ORs YmOqsrWU0LEfexyRgeYWQYQwNIoOQGjEwFGm2SxG3I4mExCY6szHkHeK5dGaVsuV bPji+ayO5u9xoSc5qhwchM7VzadpL9kcp2Vgo4Vv36nL1pS4i0SzZOTkt7+oPKG7 h72yvsWwPW7o1CHxexEKiEYEEBECAAYFAj8RJxAACgkQ9Wsmo6Y5nnMjRQCgreH+ 6SoH9RQ0c/X1lZGa9p1mbVEAoLZ7x9Pba7Su84vTeBNvQMhWxalSiEYEExECAAYF Aj8SXx8ACgkQoJD705cZn8NJyACghdLLiRgMdfUt8tHzGaW5TECGr2IAnionmDmO S3Aoc4Tbu5iogQ93WxskiEYEExECAAYFAj8SjswACgkQVm02LO4Jd+hzaQCeLky+ oyXD5dSQJIOLkn4/agg87EkAniv1iwRLJxXOCRNAREm9tEnKVxK/iEYEExECAAYF Aj8SlEYACgkQj7mZcU7rMfGTkACghx4WqwAb0nJnqVDLK1/hyCAltpUAn2oqc67Q 8beMOiWqSEGMfCKHfamAiEYEEBECAAYFAj8Su2AACgkQRsxcY/MYpWoiVACgq1NL o1I7oTsD7cRFAAi9G7EkaU8AnjEAGb6BvnLdiOKiGY+80sTGU2ykiEYEEBECAAYF Aj8SjUUACgkQ1DyzBZX+yjTLEQCeLajUmemRkgmpsquVkEUkn4tCHRYAoKzJ5/8w f+5hS6fUhz9rHQBnTTJ3iEYEEhECAAYFAj8S+ugACgkQv0FZW3NyoqXKkgCdGtpv 7qnPjtW9VewBQ+Me3zQY1ycAoJLK2WQbPL57M06GEuqsxCIolst4iEYEExECAAYF Aj8TEQsACgkQuYLL1cDjHx2StACdGDHjGgoQMPakN+pxWCe6CjJhDb8AniZ2P3p2 61uAGe2SvR/O7JiY4VhBiJwEEwECAAYFAj8TKqwACgkQtGuSO22KvnEGKAQAicKN rwvinh0b4AmDFx6rfxdBRcF6oETbnW0Czhz9Ub9m3FEKzRmER/4JidpMJENJs0s7 OdGQjkZRTxHoYp8jGNO8pnj0UVQGghGzp94ugdahOQUWZm7YVg3+ykXQ2MBnuOeu fmuMK9k0IIgXIucz8Qe2ReGuPMctcD3VQbUiXaWIRgQSEQIABgUCPxMtoQAKCRA1 9mF8UTrv2SK9AJwNYzbE5aP0s426BCj9PclRi43vEwCdF3X0LWoFc3WWrtU2BQDu myowwGiIRgQTEQIABgUCPxLnxAAKCRCSVb2f5oRNuQRJAJ9vcjKc8FJkgrjizELr PPzYtL7xWgCdG4PioIfrU26tG95qO3Z3RbldRjeIRgQQEQIABgUCPxNDbAAKCRCt 7CzRGpU358JLAKCdFud7Fadntmb8gbSugCAlayKu+ACeOdXIHn9KTKRsFf+lay/M FJkuv5SInAQQAQIABgUCPxNdhQAKCRDvbYJB8IEZXdpHBACzum/QB8hUm73zvfbt g8kryWZupfhnr8eyg5iW4NKteLWTcYYGc1uoQIWxdBAvtRn3hxE1IRM/0HsuByha nO6dqWditfHyFzYCWB9BdvVCj3244qAbfPr8ZrM0Qen4PXMgUwSKhEvhjDe5y1Cd Oumn292TTVrKGmYYPMqm/xhpUohGBBMRAgAGBQI/EaLFAAoJECjG9WuBfDVoSFEA oOyMY2PmIBHy1xsS+19UwvGALJXaAJ4wMEwOUoAvULyJRHe2lHKAxP70HIhGBBMR AgAGBQI/FCMPAAoJEFGs9q11voCXV5kAoJRknzUcLVG05Yr/+uPie1eCzd2hAJ9x KrzXTXH0UYBDRtDxtrePXR3xGIhGBBMRAgAGBQI/FFmhAAoJEIQs23pEd54Y6DIA n3bIXtmTPR77OSN7xWiCRHi/C24xAJ4++/3c+oMrFS15+vXcUdtVvCFks4hGBBMR AgAGBQI/FFIZAAoJEFgpV1AFAIOL5uEAmgNuz24Nklg8Z0YZZuJJ4KZ6MAtsAJ4x nx+0TqHlKV6QpVY5LK/EUuIF34hGBBARAgAGBQI/FGCcAAoJEHf4FTO7DujHYg4A nRqJi+N5xvmJLFBtc/Fwg/4tZrk1AJ4z1G2F+8xdFOW4HAEMvpM4DIhp9YhGBBIR AgAGBQI/FQ6bAAoJENVOrkvJmHCxEJEAniyqkEscT5Pb1U4/YsBjlOKT3BFnAKDe gRTwyuQZ5Fv4nVjQ4PqZX3GoGIhGBBARAgAGBQI/FSq/AAoJEInNSyFgdVnmFvIA n1ZPAm4K+PVEiQO61qCfMn+ChxtOAKCS/X79h4HhU1u4nrdXZHIhAbmzNYhGBBMR AgAGBQI/FSr5AAoJENNbvJm8fQIKhgsAnjccO2D3BzBrHQC0PkG2IonxKDVCAKCZ tyTDYdhtFUwDmt+Uc4uxRnfAJIhGBBMRAgAGBQI/FV6DAAoJEJ7QeO9LOhNcdRsA niNNCWCT3t/EosNju1EPYDaK9t/eAJ4kdChYqxvVu2svHHxQnP42VC1zf4hGBBMR AgAGBQI/FV6FAAoJEPAj+AsmhB1b6/UAmwU7MIhoLC7bmh7l36761YwzQksxAKDO WIJW/wXBbulL8Gw6XXMJvtRrCohGBBMRAgAGBQI/FYv5AAoJEFO2uB3BPO4Hw5kA oMGOp6M8HsCoWqOer0DSsNwxViHRAJ9s55WWSjqlWBoz2l23y6643Bz3AohGBBMR AgAGBQI/E/MiAAoJEEvvJiQi30CHnt8An3HUfqUqQriyiTZN2WMHIk9hRDe5AJ9a dB5xQdh4wBZnNSSSo9nlL62/T4hGBBMRAgAGBQI/E/MpAAoJEJVkH2slPljj6BIA niMNct9yBdxXiOMCVJl0HjACq6lPAKDGNnzpHdoqODj83NcmyXJVWETt6IhGBBMR AgAGBQI/FdZ0AAoJEEG59OhbcT3wPJAAoLuaK8k/Ql+BzeTWzCrvnV/WsuM1AJ9B E8/KPWvRl/CZanwDgSAZ+3Ha3okB1wQTAQIAwQUCPxX0L4YUgAAAAAAaAGNzaWdu YXR1cmUtbm90ZXNAcGVuZ3Vpbi5kZSJodHRwOi8vd3d3LnBlbmd1aW4uZGUvfmJi L2NvbnRhY3QvcGdwL3NpZ25pbmdzL25vdGVzLkE1QzgyMDk5MTlGRkFBQ0FGNDFC QjI5QjZDNzYxNzhDQTBFRDk4MkQuYXNjIjMaaHR0cDovL3d3dy5wZW5ndWluLmRl L35iYi9jb250YWN0L3BncC9wb2xpY3kvdjEuMS8ACgkQGaJoCYg4/ZT6JAgAvfif YdKHBnC3Ezv483f2fsdF/jbUNa+1iz77iFI1dRa+SRWKRVbglKeznpT8GYbw6+82 gxWZ7Xotbn3s5yGLXNYP0vBhek1YG0zYig498ROlIc8OPwNgCEVUHj962FFfQSwF 2CQ+2e7h5PRll2PRpZNQCzm+c5Xj9p/tslSBWQ23/1p1U7eI3bvfMLVRx9tC/nyP sQo/V/yhIYPi4Ys1anBCl0Gin9g+eg4ghhWl7ksOZqG/Oc6c6viQsgVME4eKVHpl jdOj9WCpWIYar2Jsf16ITOMlYnGB4a3SJ1kxfXVR4lhZCaZ7PhVAaEH/GZC1ElPz jbKLNdvCTfe3GMNTBokBAQQTEQIAwQUCPxX0PYYUgAAAAAAaAGNzaWduYXR1cmUt bm90ZXNAcGVuZ3Vpbi5kZSJodHRwOi8vd3d3LnBlbmd1aW4uZGUvfmJiL2NvbnRh Y3QvcGdwL3NpZ25pbmdzL25vdGVzLkE1QzgyMDk5MTlGRkFBQ0FGNDFCQjI5QjZD NzYxNzhDQTBFRDk4MkQuYXNjIjMaaHR0cDovL3d3dy5wZW5ndWluLmRlL35iYi9j b250YWN0L3BncC9wb2xpY3kvdjEuMS8ACgkQqx5LYEZ1ax7SjwCgmoUN3NUQ0fQw bmHqkVnBCc/jL8YAmweyJNMQNKsDC0frsHFyejRnNGumiEYEExECAAYFAj8TsOsA CgkQ58nbr+NW78AkMACfWs9ycteAylXk2RTrD5RHIYXgrVQAn0VpM3W6vemovNt5 zQWuHwUHKMELiEYEExECAAYFAj8W3jwACgkQO7/Pd72LBQ2EJgCgqRYVlay6OEUR eBS4I1Rj2wKtZrcAnidL9ET5crzLbhC9Gx6/tHWhhPPriEYEEBECAAYFAj8Ro7oA CgkQ0Bn175Anq4jOzACeLP5omUoyFcsNXRdWv/IYPBW3jLIAn1Vg4cqudANdKnKB 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 otqKGK6X6iceCg== =yns3 -----END PGP PUBLIC KEY BLOCK-----
<markus@FreeBSD.org>
pub 1024D/78F8A8D4 2002-10-21 Markus Brueffer <brueffer@phoenix-systems.de>
Key fingerprint = 3F9B EBE8 F290 E5CC 1447 8760 D48D 1072 78F8 A8D4
uid Markus Brueffer <buff@hitnet.rwth-aachen.de>
uid Markus Brueffer <mbrueffer@mi.rwth-aachen.de>
uid Markus Brueffer <markus@FreeBSD.org>
uid Markus Brueffer <markus@brueffer.de>
sub 4096g/B7E5C7B6 2002-10-21
-----BEGIN PGP PUBLIC KEY BLOCK----- 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 1XEllA== =+q7n -----END PGP PUBLIC KEY BLOCK-----
<wilko@FreeBSD.org>pub 1024D/B5F2C0E5 2005-01-26 uid Wilko Bulte <wilko@FreeBSD.org> uid Wilko Bulte <wkb@xs4all.nl> sub 1024D/CEE36724 2005-01-26
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.4.0 (FreeBSD) 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 Eg== =55M1 -----END PGP PUBLIC KEY BLOCK-----
<jcamou@FreeBSD.org>
pub 1024D/C2161947 2005-03-01
Key fingerprint = 274C B265 48EC 42AE A2CA 47D9 7D98 588A C216 1947
uid Jesus R. Camou <jcamou@FreeBSD.org>
sub 2048g/F8D2A8DF 2005-03-01
-----BEGIN PGP PUBLIC KEY BLOCK----- mQGiBEIkZzcRBACrskMO6BYlK30ghgpDYTou1UEgp0Y4QdghWeEP5kppuDy7kf87 CoKVvE/u+pVd7aFoTMa7ikqxKH4Kh7wnDEbFnzeZGtsf0Fzw5oHgoaQQlZHGRtr1 49UuyFnRWVKyI8IXS25Ie5p6ZlbAVFINOdJuP81gku8SffsoifnKIiWrTwCgzhTU uS1rg+TpKkiRnkXXtpVF9k0D/3/OADlTo77GAWMXl6HBTaB3BXB53Q4PozvGDter lWGKbx6uYvLq3ZPX1XBUapzJ3eoEfCsA++FeSzK+tue/ulbLiXmFhXSQWtXoRo5D I75uOoXlrc45uLc9XkOpeZ5dF4a1iJOGHe/hD4mmyrWIM+E6cy1lL4EetM35ZiEM lHqDBACehJoEdCAVMOcfQLs33/iTBRBE7Z6fN9DCH3kTvoYcgpZsFAX2WQFz085/ zHJ3NVFSH8LCi/6ck5ZeXCasAS3L99Q/io4WwmlqDj/b4PBdfoefInLJkroijcQ5 B2I2cH2Ss5kkwqj9PovanMWNY6Irv2szIViIeThB+l6hiuzaK7QjSmVzdXMgUi4g Q2Ftb3UgPGpjYW1vdUBGcmVlQlNELm9yZz6IXgQTEQIAHgUCQiRnNwIbAwYLCQgH AwIDFQIDAxYCAQIeAQIXgAAKCRB9mFiKwhYZR31UAJ91fYdpk0PNNr14jtURyeeS upTEEACdH7tOg9LmYNxAi0iKWVInoA/TNmW5Ag0EQiRnPBAIAIKVE+F4De4BWuab 6LREy3VmvNQgHSF8lHJm4TWKYGEkNhG+sIRFdJExqKG+N+El9QY4QGgezdogQIYk RBSg7nWzVrs7DiHJqC4PB/f23bzJl24Cg05jtxvZBz7t4lNXwY9G4kTmDb815FXd 1p8gwa1KCNsTlKVRJxbaku9gHsO2JZigLMzzF1Zt1vGtaSHX5SyjhOdMOFtjuLed NAgl9vgAoMpXLf2Saom38Lgv/jnWz9OfST0P+OA/JmqN5DqeRTlyVZdQ8i8bduYX xmtbBPOGHWxwUDxiXMULkdjkLLrY1UaizR6/ULI6+cPrPLZFdnr+5GK6ZoTXyJ2n EUUxpGMAAwUH/iPguYUdGVnwKiwqojHq9DzDb09qvPg+UIEjwZA9mPExfMPLo/1b 2NLgOF7pqeluXfiN84i58sipi4/ntlsNSzCYKCH2t2Wmfjdfpa3N4JaVptLR650x Lzj3egnWJKpHVSO+v1U7BSYBnaVPGfOMQVlSO5ra41SiVyZq6laX30PXXIFP6Ocx VWECVLmTR+L1g/5Nvq/L6NPv3ziuSLbSpvkLhTxLosaQwYFwPE7mLKgERUKDNc1u EXqyf8No4LKyO9V6VLckMgG4qbjQZhm9ozCmEYoKFZLafsq8czdNIKi4JV/8aUjU CsR5Dc8XAdwzPq6DBcikn1UBnvotbHtAFNiISQQYEQIACQUCQiRnPAIbDAAKCRB9 mFiKwhYZRw2hAJ4mmNxtlCe9yUHRCzxsUxl36gQYtwCfQZ3f8K4dxPU2ClJ46fTf FqQS584= =KYGd -----END PGP PUBLIC KEY BLOCK-----
<perky@FreeBSD.org>
pub 1024D/CFDB4BA4 1999-04-23 Hye-Shik Chang <perky@FreeBSD.org>
Key fingerprint = 09D9 57D6 58BA 44DD CAEC 71CD 0D65 2C59 CFDB 4BA4
uid Hye-Shik Chang <hyeshik@gmail.com>
sub 1024g/A94A8ED1 1999-04-23
-----BEGIN PGP PUBLIC KEY BLOCK----- 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 b7AAzA== =dqQP -----END PGP PUBLIC KEY BLOCK-----
<jon@FreeBSD.org>
pub 1024D/2539468B 1999-10-11 Jonathan Chen <jon@spock.org>
Key fingerprint = EE31 CDA1 A105 C8C9 5365 3DB5 C2FC 86AA 2539 468B
uid Jonathan Chen <jon@freebsd.org>
uid Jonathan Chen <chenj@rpi.edu>
uid Jonathan Chen <spock@acm.rpi.edu>
uid Jonathan Chen <jon@cs.rpi.edu>
sub 3072g/B81EF1DB 1999-10-11
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.6 (FreeBSD) Comment: For info see http://www.gnupg.org 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 =cJgh -----END PGP PUBLIC KEY BLOCK-----
<luoqi@FreeBSD.org>
pub 1024D/2926F3BE 2002-02-22 Luoqi Chen <luoqi@FreeBSD.org>
Key fingerprint = B470 A815 5917 D9F4 37F3 CE2A 4D75 3BD1 2926 F3BE
uid Luoqi Chen <luoqi@bricore.com>
uid Luoqi Chen <lchen@onetta.com>
sub 1024g/5446EB72 2002-02-22
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.6 (FreeBSD) Comment: For info see http://www.gnupg.org mQGiBDx2qBMRBADYSjvWKVcUxUb1aR1VjHTlFo6zc6PHMK8W3CRin7lY3NgsYsmZ n0IvGQIDEHhTpOEWLS0S6A/bseaGUir52X6spZ8i5hfd7Ps9RmeS0oHx0XDS9JTJ HXFE5RjExHbLnw4DbsaqR4Fl1V7NJU2U/nkiJILJd/PGPZsdstKYv5QvnwCgmwr7 QZlkTV/m61MmbMAEpEFWaecD/Rp5Qb9S5NGVplNeNqub4fC+Ydarkorr8qBJN9Va xu1Qgj3sOAoxmuOnZ99YAgXhs9Bqe4QsrQfs1cMUVzZsl3FIffh92HkrLmdJlsjX 8lrRT694cIP7+ELNGKJ/zaXI3j2cnQPVqUO1icVfijqatqDg8bgQS8C8CGQX6e6h ADKGA/9cIY450gMvrtbR3/bqH+IgvBCUog5RXv0y8c80sJnzeqawx2BuziFvv6mZ Kv0PJ2vnWok0NHcyuBHkkEt+ujYlMQXHZ6wRykYxIUzM8tl+9129tSNEK+GdcCOZ rfbwm8scs+VmzrHXP+saOPcHPBr0e/KPPixNN1I5HB3yI0ILSLQeTHVvcWkgQ2hl biA8bHVvcWlAYnJpY29yZS5jb20+iFcEExECABcFAjx2qnEFCwcKAwQDFQMCAxYC AQIXgAAKCRBNdTvRKSbzvmmrAJ9FVK0lT4Qym+qzj0EA6TP3V42cwACfQl+ClPzJ zngykscMJW07MBXkQ9i0HUx1b3FpIENoZW4gPGxjaGVuQG9uZXR0YS5jb20+iFcE ExECABcFAjx2qpkFCwcKAwQDFQMCAxYCAQIXgAAKCRBNdTvRKSbzvkEwAKCRteUw 2X3XbPsVDCBZarrkf113YgCeIHmhkDHbauw4UlUO1tYNVObn5dO0Hkx1b3FpIENo ZW4gPGx1b3FpQEZyZWVCU0Qub3JnPohXBBMRAgAXBQI8dq6XBQsHCgMEAxUDAgMW AgECF4AACgkQTXU70Skm876CUQCggJuwNIJy6f05Ka17RYn+j8hEQhwAnicDXnsy 5SEYN6amlHdqN/HwXCsbuQENBDx2qBUQBACifA9hUBBYNqCcXTs8Jk1MCcToMFob vRt/SK2EcwjZ9aF9sIX3tJFrOHEe/bIcDMX19e480T4+BBs9MyHdnKgPR6vP8ZEe FvT8+44Wd6psLB1LwsE8UpJ3CbLjkgafTpJIlh4NP5iM2p+2ugUIRM2ZaAG7MOMK Ec47KOEb6yI9ywADBgP9F+p+zQ1Z/qVekBooIKU4xKBryGb/XIPJi/Pgapgr3oE9 kKH4iObbvMBSV3kd4a0+FSEXSZyRnMD1AG+dWhAHgb9rbjtICp3hZOKCMfdZxFVg QStZO8vP5EhQYYtIXiNmOvkkBPqb+to5RgFFez8oIdPlMUq2Hf9MBIY6XDoNJl+I RgQYEQIABgUCPHaoFQAKCRBNdTvRKSbzvh9GAJ9K3KifYIBOHlsmRLF75mgKQk/c 0wCeIOeVykZkImOxs0pEQMR/4g47Wjs= =RNuY -----END PGP PUBLIC KEY BLOCK-----
<ache@FreeBSD.org>
pub 1024R/D99D08EB 1992-08-20 Andrey A. Chernov <ache@FreeBSD.org>
Key fingerprint = 33 03 9F 48 33 7B 4A 15 63 48 88 0A C4 97 FD 49
uid Andrey A. Chernov <ache@nagual.pp.ru>
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.2.4 (FreeBSD) mQCNAiqUMGQAAAEEAPGhcD6A2Buey5LYz0sphDLpVgOZc/bb9UHAbaGKUAGXmafs Dcb2HnsuYGgX/zrQXuCi/wIGtXcZWB97APtKOhFsZnPinDR5n/dde/mw9FnuhwqD m+rKSL1HlN0z/Msa5y7g16760wHhSR6NoBSEG5wQAHIMMq7Q0uJgpPLZnQjrAAUT tCVBbmRyZXkgQS4gQ2hlcm5vdiA8YWNoZUBuYWd1YWwucHAucnU+iD8DBRAzy/q4 PAK5NSZ7LAYRArfiAJkBLMporxZ0VHeao7g0UBJIC/8YNQCgutO6edcPP5UXoorH OuVB2CONEkaJAJUDBRA8Xspm4mCk8tmdCOsBAd30BAC5kHBMtn978yvCd0dKsB8V Sv3rIVBeFaGlNnioer33vXXY2bKkjDP3+m+lfK4I5ZQwDLWjvmqWUmpQi7H1fDa3 x9dd5CmuQ0pFucgxeJy4NBqkTZslFrW2+gj5XLfYAycyRpo2wHhVlHldKRZKDV1H aFnT+LG6bsYXD3aElS1UwrQiQW5kcmV5IEEuIENoZXJub3YgPGFjaGVAbmFndWFs LnJ1PokAlQMFMECLIjHiYKTy2Z0I6wEBx14EALWZUI/faXw9XlhUI+CCj/F7c0Ov YBqCZm41f5D8cLpGZMZ2NEk+JOBnZZJUfOQGCfRTqnOEvK/VwtMUMMp3jdsAze1e FSsNnaPjBdq+EWqWRPn9ethGQa/gvBKmQRxcSeW5szlHWBqVBaNX6LDOOgyPL4qe Xvu3MfsdIRW1+nIOiQCVAwUwPF7TmeJgpPLZnQjrAQEpaAQAhI3LUxepSre5eMqb UzzC/RBN2ZX8Ywi/PJ6u0ki9vRp8HwvYxhZKMqNoMFtZdf1dQqalgtRwrblzYqB0 CsqgB9Nacc8OMjz5pFCjT5DgZBKqbnZALe0fPJzzpgP8KHBfVdXDWgIRahP1rtmP XPTy0kGgHlsFakcsjKBey1sQ+oqIRgQQEQIABgUCOLH//AAKCRBCSM592EIbFzxk AKCTl2+nbOuqXMSNu1pRvtUzIMcT9ACfTRDcGpwWEl37k0DlCamhSOcqrp+JAJUD BRAxybkd4mCk8tmdCOsBAfC9A/0Z2YB/WB1y5rIcSA2RzXWZpw8fXVzBaNiPMDZi h5wUwZXuKoorxBiuvUyNsZd/wMAbxRt+bRBsjwuPyIbc2Coiu7RzvZS4cZKf8A98 YYbQC09flQr+TsGAjQJramjo0DmetKny0Ox0TP/iDJ5rzhFeXamu1N/kmPTuF+Vt Gy0ZcrQkQW5kcmV5IEEuIENoZXJub3YgPGFjaGVARnJlZUJTRC5vcmc+iEYEEBEC AAYFAjp0u9EACgkQXVIcjOaxUBaKmQCgzdkrt90of1rE9H6oMr0Zv+mNs0UAn3X4 CuVbfCq2hZ+3ik6kh1TkgGe/iD8DBRA0n+w1jmGml5JeBcIRAoC5AKCGhH+RRIi/ 77orCnVtqqAYXNRw3wCePM3rpaGKxA8wXbFknw9QlEVFhf2JAJUDBRA0eblW4mCk 8tmdCOsBAS4BA/9pp/ocOP96Xi8dEm/Szcf/zXwgpFXn0n9hvUMIcenb8G1+4ZhX Gve4ewUDeBrm1NWeRX7Ok3mpkga6LQWBpjgsLyekvVooBfWB0CENweCxI7JALaXI 1OfN8uNszNdZJLxLkFNhnXutXWiMpScjsbIKY0lqZMaudH4GNpCzH4Jf37QmQW5k cmV5IEEuIENoZXJub3YgPGFjaGVAbmlldHpzY2hlLm5ldD6JAJUDBTBAiyJE4mCk 8tmdCOsBAdIHA/wNT/hJ/6TZMtZLJABWqHKbjUdqB+38i7XdPHfxnIQSWKWyIKG4 QqKs68PwHM0fP98PjUX48mYJTqr1Ej8gUDZewyKDeGyLJVuLbAKzBV3A9CYSsMLf DxkU80kPLOTaJI0epKIRxPHIOCadQSMR5Z04ahZpEUPM6/H69CZR/RcmYIkAlQMF MECLIfziYKTy2Z0I6wEB5s4D/0n56YyE0jsVrBKPxLtEGyhAF0mIdzYv73NMJL/t 1OiI132F+TPRTBr5Tu0Ii5x9d+2a8FBQuObOF35jFpzTIs5V3GL54pO5V38147uS m9fQCCPk0MnpSkhzhQt4QP1qkEyk1bhEST63lTnuGFipWyHBrGUfFffQ+utaLVTL 548aiQCVAwUwPF7TnuJgpPLZnQjrAQGV7AQAt+Ff8z3/a2Iq9B0agty7ubP4GRNa Df/OXXysUiCNfHB/zq2jdM98i0acaWObZ2DrMgeFQGR3P5O0gc+cwWg863M/Ytt5 fMG8cWBqMzQ1gZBy4m94AxXiYSFpGN9uuEaBFT06r5/2QieyuQAxKer+yprXJGWA aQQaJX0SoDZ74m+JAJUDBRA0ebLw4mCk8tmdCOsBATk0A/9DkwgFyI7mpN+t5oxE b80pFbDbSB/YQNZdMOmfefoh9Hx61sVyk9LwWRNMtBJvkt3KLSy9GzJlRNxdw9xs sYQVZoM48sdDWDaIkI2HYvuoPz1d9Ap+LzjuoQQaUsiOr2OqhjanLGsLkbRzbyv+ dzKTnysEpSAhAWEIpnGYZHIvhLQyQW5kcmV3IEEuIENoZXJub3YsIEJsYWNrIE1h Z2UgPGFjaGVAYXN0cmFsLm1zay5zdT6JAJUDBTBAiyJK4mCk8tmdCOsBAW5SBACp 6tKXds0fzgvvrylVy+lok/4UBdq7zSPBNXHgcWqVhNJ8uEvpbXHVX6m9WAAm08ed BP5HDnXkszGw83j1mU9vDyuCKlwgOQn8B2Cy5vN7aH4XIwKzbpoYXe/EG4G9S1PJ PrS91cjr0X/RDzGi8qTCoQuoFPYJiDC2/duKDCuisIkAlQMFMDxe1BTiYKTy2Z0I 6wEB00MD/ippFkMCkJW6Xv3O0hKnWFW77zEuSY3sU+SwzAt1GzNykZAC+dwziqMP dNNLvjM93T5+6IA2RsFqbBZ5fnRNHJuX5q+RtjN+kFnmCBX2sOAxEcaZQiRYWhan okbOafYAtEpOGgMxtDTu1QbtdqbpqqH2IENKFVnLtVAjcmlLlFX9iQBVAgUQLD8O 2g8yeT/msSltAQHS/gH/WnbYHTw0SIt5nfZiLs7MZJTH9UGwpvQzdx3i8c6rU2kn 02ma6aHrczBJcgyKdImDl/SQ5TyQ+80M3hEBDzbaA4kAVQIFECqVMXe+2Uj8ehM2 9QEBsqAB/3QZzvBAP6ec99rlxFvKAjCEGwpEc9Ny4D5DhzD2nEPLHms/edfb/1Ys K3aaMJZT7xrMvYQ/JyPbKPwT0Bwg0MSJAFUCBRAq1mwmwFmslFe2Oc0BAfn8Af9+ 1Ih1CxPRN9E6gPeg1cqUHQFE0uT2f+WjGB2CjwTol1NKPC/rLoNtZY4jHeM54d51 t2P+MX6nCrv/+18+O/FuiQBVAgUQLBzId80/z5mA+zkvAQHiIAIAld/5rULqVZPd Z6T4nq3nqbdkpv0nJObRaWEuv0jhTtPfE6j6As30sbbsDWZ3LdU2lXguR/ecLG8K E7+5IoS+54kAlQIFEC3/XNzVPvSpBWDLYQEB1P0EAJ7afiUfAMrS45J7mwd6ra4k 2bufo0zYNN0Ke88cjhISG/rv1ogsi9DM0KqjXm1baV5k0Bkr4dfpN9DlIZi8P4jM aOeY2IEpuJx9y54yL7cGY8huqL7SV1c0+QBD08aF4PKIyQtZ0Gl9FhaMbJ0m1p6X nMRFRjPrKk4JQf6i6MhpiQCVAgUQLe/4LuJgpPLZnQjrAQG5OwQAh33Uhz7ABs5X N+peJAY5LcsmmNWqjggmiPY0yxttkf/SBbjlYEGR15rMvsVaBCQ/z99ONPgpZFRx JuF3XBnjYjwwT3zgJxSP3+YCh8Cfiw3GIirB7wHOqtBWiNgEAhMtneNEeoBjYLEc IQ3yNH3i8LIFGJDTLm9MyaPZUFlwWWmJAFUCBRAsP7xh5IEQ8cPijy8BAQCIAf9U aroTX5kA0Jvk1m9bNwv0/BuHBmz04virX/ZaoFHo1QMKddGPqms/RS62HRowl7bg kvoHZVcZdoW34Gq/xSLFiQCVAwUQL19YMe0wyddnOMrhAQFzBAP8D+cLH8NGBr9X JLAeTw0D9aOGrA278/iZCjVNTmrXB91EAkq6RsQknNVEHJMXDOyOVUD/DelDNZID A+IfZpAK0KMdNPjjB7H/xuKKi9LBWaNdEetabuFcA3Ml4+N6OuBWcoMctr0IEmen Z6/yS1OQ3wv1vApp2umhZCDfnJNx9TCJAJUCBRAq8IWn9MoAgY3nItkBAccYBACZ h53IG/Tp94ux3yopGQs3lAjd5NVwC0f1iT6FQUfokctpGuVLL2vlHDJ/30xrym1y WOIeJOjn8mvZOD7yLc8oKoM/idVKtdxmtAeEx1eDVXWjh7PSHl6S/upredEb8aZ0 5vNmUp4NpSRHHVkAqyqhOtix0IlFcm7y+fyGNpoZLIhGBBARAgAGBQI+Yp0KAAoJ EOGpmw+ppg/jP10AoMbSwV+z2fYfaHIWyR36MvTvLd5gAJ0XV5tUKpZnroerrNME LKlbsz3pu7QyQW5kcmV5IEEuIENoZXJub3YsIEJsYWNrIE1hZ2UgPGFjaGVAYXN0 cmFsLm1zay5zdT6JAJUDBTBAiyJU4mCk8tmdCOsBAae+A/sHxI1N2mdzX13grx9M xvgwju0k6agfKW5SOQai0BLU2aLFDWWEwhmbzqxfAxVb9vLGoE3Lb4t8O3mY+7ZY WuS/hFbOKOUifLWhRRuuR1oYQBEOtYhqptHCQkJuG5JTXmv6csf5oc1+owE+RPOJ 9EHUVCqdCR4BlT06QIMBjn2RiokAlQMFMD+GpFviYKTy2Z0I6wEB0GIEAML5gtO0 x5B2aclhLBAB/bINn4xZCCM0ceRNF8Z3I8uYnYM6F4hU6Bw5F0WxXlmTbCN66jlY QmOWg70GLMTrZUBhSop6GfiZR+G474/boHIeLauojMS2lr1WNjOnjM4u3YFr6x6C LEdkv7E1Ho5bJGz1yrPKYQSOKPsgKRO5DJT3iQCVAwUQMBHMmyJRltlmbQBRAQFQ kwP/YC3ahs3ZMMoriOlt3ZxGNUUPTF7rIER3j+c7mqGG46dEnDB5sUrkzacpoLX5 sj1tGR3bvz9a4vmk1Av3KFNNvrZZ3/BZFGpq3mCTiAC9zsyNYQ8L0AfGIUO5goCI jqwOTNQIAOpNsJ5S+nMAkQB4YmmNlI6GTb3D18zfhPZ6uciJAJUDBRAwKvwoa1pn jYGyp3kBARihBACoXr3qfG65hFCyKJISmjOvaoGranxUIkeDS0yQdTHzhQ+dwB1O hhK15E0Nwr0MKajLMm90n6+Zdb5y/FIjpPriu8dIrlHrWZlewa88eEDM+Q/NxT1i Yg+HaKDAE171jmLpSpCL0MiJtO0i36L3ekVD7Hv8vffOZHPSHirIzJOZTYkAlQMF EDAM6oB3HZKuiXLHwQEBk8cEALYHixYtq4UjnZZaQ11MM/kkumxIxU1oEbFhTMvU JznKq8sOy8rhZlnop+I2rI2NN9ybDg31kD4j1TQN1BJ11YPfp/ALzTDzvCZEbwp9 XjYNFWicvSd+vLgK4qPd2oHdmH/0ea/kBLj4yLLFZPIXXMv5bhIUol1n+myzFRxA NCfjiQCVAwUQMCsAo5/rGryoL8h3AQHq1QQAidyNFqA9hvrmMcjpY7csJVFlGvj5 74Wj4GPao3pZeuQaMBmsWqaXLYnWU/Aldb6kTz6+nRcQX50zFH0THSPfApwEW7yy bSTI5apJmWT3qhKN2vmLNg2yNzhqLTzHLD1lH3i1pfQq8WevrNfjLUco5S/VuekT ma/osnzCCw7fQzCJAJUDBRAwDs+qsfyMh3t65eEBASL2A/4yK/F6qP9iOYJ3IIUn hUdNZ9LxCxSL2heHB6Hxs8swaWLHwPuqYBSNSDPi1Bd5G1JAGP9rkn/VORAnGjAk 1gsFYCVTvqBtO+UhxDOG7oa87rWYjNXU8k2nqWj6U8kTFFMfWTDGCbO7G6iyHdXg 8KycVD4awTb3/8NltrGB0mPHHYkAlQMFEDAau6zFLUdtDb+QbQEBQX8D/AxwkYeF aYxZYMFODHIvSk23hAsjCmUA2Uil1FeWAusb+o8xRfPDc7TnosrIifJqbF5+fcHC G5VSTGlhBhd18YWUeabf/h9O2BsQX55yWRuB2x3diJ1xI/VVdG+rxlMCmE4ZR1Tl 9x+Mtun9KqKVpB39VlkCBYQ3hlgNt/TJUY4riQCVAwUQMA1IvuJgpPLZnQjrAQGr QQQAhwfqrVvPNLHkQg2S45f209W9eOaaOtFO7umtzxAZGNDQO9rVg0LkTxfwp/9P lXRTcUFLIJK28GiVjqItCkLL5Tpt0a7MSm5/brxCi8RMcih96cae+pL8/5RFsBHi rwSvvOD29Zc6Rt1u7tlw34t1UD04t+UmTAB3OgtArf5ozZWJAJUCBRAwD0sl4uW7 4fteFRkBAWsAA/9NYqBRBKbmltQDpyK4+jBAYjkXBJmARFXKJYTlnTgOHMpZqoVy W96xnaa5MzxEiu7ZWm5oL10QDIp1krkBP2KcmvfSMMHb5aGCCQc2/P8NlfXAuHtN GzYiI0UAIwi8ih/S1liVfvnqF9uV3d3koE7VsQ9OA4Qo0ZL2ggW+/gEaYIkAlQMF EDAMrPD7wj+NsTMUOQEBJckD/ik4WsZzm2qOx9FwerGq7Zwchc+Jq1YeN5PxpzqS f4AG7+7dFIn+oe6X2FcIzgbYY+IfmgJIHEVjDHH5+uAXyb6l4iKc89eQawO3t88p fHLJWbTzmnvgz2cMrxt94HRvgkHfvcpGEgbyldq6EB33OunazFcfZFRIcXk1sfyL DvYEiQEVAwUQOhI+xr/KZR473RuHAQE6GQf9GKcB6yYBUHR952Ja27SL+wZQO7Yw V/8X/TsvVbxH6zo8yTGXA7tEVeEhs50RxrCP2a3qLagx0HCe3gRWT2AbeCMdtpKv Cid8a62OJ8iPHb+MXXnH2qPFYK7gqWUxyvroKPYZ99uB92QUTcZwMb+hgnUYPRpJ 9dBEPLhRWgcgxxMgP1372M40krClGlMiEKNajU31opR7SOLLcXnKpBqTODKvGNdj NdzOpXw8u2p3iGTj9va86JiGg2W5tw9f9hcK4wUw+1dpwRU68cj2s6GJuAhYjfSm +oIQChkYZqx2wK9bic7bz/fvp5Vz3nbEMFBo2gV7pRPVr+mDW0KMR8xTZIhGBBAR AgAGBQI6Ej75AAoJEAeaBS+juDVJD/IAoP5bh+ishc1erd7IEsXnFP7dTswcAJ0R t999udQQSRFanVNi9FPglw4tOg== =afm/ -----END PGP PUBLIC KEY BLOCK-----
<seanc@FreeBSD.org>
pub 1024D/EE278A28 2004-02-08 Sean Chittenden <sean@chittenden.org>
Key fingerprint = E41F F441 7E91 6CBA 1844 65CF B939 3C78 EE27 8A28
sub 2048g/55321853 2004-02-08
-----BEGIN PGP PUBLIC KEY BLOCK----- mQGiBEAlrEIRBACQ1ZZIej0e8esRdDxmuSv96bv1NTDBaEx7P649JM8a3afUvnQl JkA/ryZsKAnw1OeIK907Cs5HdaG1lD9ttpQolG5ZN23K01CuHUvq6yY+evwDV31D rKwYfALKfdhtAaymxM7RRsNNV8OkXLg0SEtBit4lbdY79vqiVC3PeWYvIwCgyOlb 7dw3f2mNtm280LybDSjn5KcD/2gWssJVtQgssnCi0Jto8csULw4OKyJHvXX06Qkf lnXKcCJTBMgXZf0cZpYhuyqMUZfsVJaF0lMJ85J8zD+Of3G/KwuCqW7jqpom0zw9 mgsmhZ1rZCbf4cG1orpGSSfmsi5IFoe+mWEJgHwIKlLYd/XDfT1q81swa2AlcjbE Pod+A/0cNSOWz4rj1ZjcxYsxg0sZES5eFEHfIJ+5g3yMbNPcvbQhlSClgDD1Z46p 6bEZA4+vL2kJH+29E1Q0M6H4OB2rY/Co5TypocuazZR1kwkJY+bQtFqPrcCm67Er GYl3qcbtV8Wgn153k6DnMUc7by2iTrJiRjWw4LNVhRZn3/dj8LQlU2VhbiBDaGl0 dGVuZGVuIDxzZWFuQGNoaXR0ZW5kZW4ub3JnPoheBBMRAgAeBQJAJaxCAhsDBgsJ CAcDAgMVAgMDFgIBAh4BAheAAAoJELk5PHjuJ4ooG+EAoJP+RzGsCHKYGaLhok0/ B0hBnIKtAJ0YTlDINuquFtqFTeZgwTUg4jeHFbkCDQRAJaxTEAgAqKA+B8+oo31g N7Q6uw1rR5F6M2fFBwPrYU9w6bM7qX6e/oy3epL8BgtzdlHyzcux/hLGDHGP6mku lwH5wGSjqfbk3guI1ogl+e0EjblIeUEAA1R/k2o8xt/HINhXiCjQhY6AJL9cljGz NQY/ecR9d4HEvjc+Ticgyt4h6WSGMTpjjY+Y0bWrxsXi5ZAsCNYEuRgdaRM52aXR gGkSqMBOKSKAPGc35Jh4nzvPSKjXmkXutCnPNcO+qPoro5j2Dx53ZkfB7Raj6CiY C8VQ8PDEpjELTq8fuOqqrl911RDYAOECWEqyim78qROuhgq5750w1CJj3K8o2FDE Qap5jNPiUwADBQf/bk9Es1QDyDTPLC7Look1OS50vhotrHce7P+uab++khm03ajq XmNuTYifQY0kgzzEBaELw4+isBf1NV1vvPK9P6k6FCx+1mcNYzItRLBo15MtcXlB IqkD3v/BnhVgT0PqJT6jO8glKCmhEq+GurXqydIfEzWCbz0+snVK769Q9rJHHUf8 icDKfUI1m7javdnXVrpA1kKZM8Omis+BfO17XDBLYZuVW5rAJDzG42YM8H1mrqBa GL806X/3i55d2RfgrljiZvXBpdOZRnM21w6hxNuj3OaVxqrQn9hOgzBcVdSZWc9b vxpmZ2j1vx7i4xNq5dzcBqxMKDcAcwomLWgjHohJBBgRAgAJBQJAJaxTAhsMAAoJ ELk5PHjuJ4oob8sAoI0szWtufl86pHsG0AwxjsykDS38AJ0SAW5Nr1N1HlZlrtlG 0ev24JoBxQ== =yGes -----END PGP PUBLIC KEY BLOCK-----
<cjh@FreeBSD.org>
pub 1024D/E60260F5 2002-10-14 CHOI Junho (Work) <cjh@wdb.co.kr>
Key fingerprint = 1369 7374 A45F F41A F3C0 07E3 4A01 C020 E602 60F5
uid CHOI Junho (Personal) <cjh@kr.FreeBSD.org>
uid CHOI Junho (FreeBSD) <cjh@FreeBSD.org>
sub 1024g/04A4FDD8 2002-10-14
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.2.0 (FreeBSD) mQGiBD2qLwkRBADbZ6Rsv7guMTzGT9lj4eIE29vj0ZZNWFepFEqEmWK0jMLAATX0 koXkP/qWsuGBhVHcSyZtVG+MYTwAzo5nBszx12CNL/GkEokQ/9FXi+cA3W5TJZTE ssMq0PPwqCB7+s/4DBmc3uI22TCOI7J26XkftuwkdihCMG/gk+cgKkzZ7wCggaBp 02a96DwV/78wUZy9C8B6uMMD/j5jAO2HOubn5CRZrOpko3za+qVsk6yTCmq12z+t r9veYORoVohxVTIY+xpeHQVlOe5URTiKO0Uvu34Tl34x0BbSLBWrGU8UTMA4+hpl QTUK1GI1DheFPGGGxbt9w40nslRVw2Or7GA/XHexCDwx5KZpJNtO8c/MqdlzAae5 CuYQA/9bb5T8xhamrsOFTmdLY3wPM2efnp5d3luwA2Fe3SdC5Rkoa2fDye5w7fy1 9YX638Nw0YU6P/xmygdBjqxKs28/6evo79KAWONL0dl20pEYoj3yVz58C3YGLEFe p9ggrBf41MjnnMg+D7NdBOHtISfOrU3TtB/1DiGE3+QpMwuOHrQqQ0hPSSBKdW5o byAoUGVyc29uYWwpIDxjamhAa3IuRnJlZUJTRC5vcmc+iFkEExECABkFAj2qLwkE CwcDAgMVAgMDFgIBAh4BAheAAAoJEEoBwCDmAmD1SyYAn3JBBPs/6lAQ55HLjew2 suN8XP8RAJ9OBFQhUphqmQ/shjrwbNRBsgDbc7QmQ0hPSSBKdW5obyAoRnJlZUJT RCkgPGNqaEBGcmVlQlNELm9yZz6IXAQTEQIAHAUCPa7Z7gIbAwQLBwMCAxUCAwMW AgECHgECF4AACgkQSgHAIOYCYPW9MgCeOYgOUTCIsagnCymketJwQoGBEpsAnik+ bL1lPnomVghlMMUgU8wxB9sQtCFDSE9JIEp1bmhvIChXb3JrKSA8Y2poQHdkYi5j by5rcj6IXAQTEQIAHAUCPa7aJwIbAwQLBwMCAxUCAwMWAgECHgECF4AACgkQSgHA IOYCYPVI0gCbBZEg/a9K4BAY5HQ7wFOp6u/G+nYAnRgb4zUmf2M57dxEx2hm93pI aKP/uQENBD2qLxAQBADMGxA9f5QYLFnR/XZ+Hqa/YCeqFMZ3hC4KnjWBDDXfI0Cv HMLBIW5027NPIDeN95998T5YJPDm1TY5Cort72CTDS3eIfoG0iGwIzzLfXrZB7Zc 1BukNV5NMFeKPO7pX6k4R0aQr0SQUmcdYD7t6V/M4xswVOwcECk/W9BuGA/9NwAD BwQAy8LmYyssQdjImAASQABcpdOua5orv0ojYMu+edGmjd0WqhXToUHcDfQgL6YA kO/4g37ysvGwlpj8U7cZwabMO/zwnryyOEeGEA+5aCsji4VRZHOkdflcuBOXj0nR 9yHmPFfwWTxLtV9ajLCP4vXqKPrKciS8SbuLYzvx+lnUiCqIRgQYEQIABgUCPaov EAAKCRBKAcAg5gJg9eZZAJ90E4gu6VACob81uH3MxWmgjpG2iwCfeNTe1Wz7EO3K z54TjDmC4biJg2M= =g8A3 -----END PGP PUBLIC KEY BLOCK-----
<cjc@FreeBSD.org>
pub 1024D/FE886AD3 2002-01-25 Crist J. Clark <cjclark@jhu.edu>
Key fingerprint = F04E CCD7 3834 72C2 707F 0A8F 259F 8F4B FE88 6AD3
uid Crist J. Clark <cjclark@alum.mit.edu>
uid Crist J. Clark <cjc@freebsd.org>
sub 1024g/9B6BAB99 2002-01-25
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.6 (FreeBSD) Comment: For info see http://www.gnupg.org mQGiBDxRQfMRBACvHk6znTM5boH4k+2+anGxRuPxPPIJgo6Ny385v60FtJjwLwDh 9LwvZZjpjXi7MM/0FRfUE4bqzrdBtUm6XXGC8v/FTH72TemXR54yr2zuCTcX3jML e7wjrO0SO1cttASSeb8OsVQEqiMT4VRm94AYdQvS8bNxbqlog9PYmhh6lwCgwDYl Br/IhYSKQTugPEb8nSyP3e0D/izp3mt4NXcULIp0PZFpvnGZAMLq8moZ3cYa+8nM kRCWd/1/94lCd1YM8f3lQsaEvRuWaw7rT1ENknSb5TZnEMsTvV03CM4DMzH63Zde wgl8Xne5lF/WyiSsjUeSkmvCExFA83fz/Cv8/fk6K2O2Ajo0b33Rb7WLH/gb4U4s 9ZkEA/48XB6/s0vGFVnELRSXbc6wCHbnhG0/58ewSbJ2XjyIFFFmeqIF2bpLhuRT YTBz3styfrjeAqsi9t4gtcEK3vyvF83ql5b23u5/V/+O/ZLwk3kceYmjM0mbETil FajrLZjaWXpTRQauL/tsqxItBI4BNuTvnh9bizQY8V7xzAgMwLQlQ3Jpc3QgSi4g Q2xhcmsgPGNqY2xhcmtAYWx1bS5taXQuZWR1PohXBBMRAgAXBQI8UUHzBQsHCgME AxUDAgMWAgECF4AACgkQJZ+PS/6IatMaGgCgqdklRK39OoUma5sl44pEl7R3GhAA n1680hBnTGdIR4wxFY39uX9zK708tCBDcmlzdCBKLiBDbGFyayA8Y2pjQGZyZWVi c2Qub3JnPohXBBMRAgAXBQI8UUKgBQsHCgMEAxUDAgMWAgECF4AACgkQJZ+PS/6I atPX0wCghHE+X/oyrMbMrCsdwubBf1WudnAAn2WHoVNZpzgMck2MhFdwa/1rAJI1 tCBDcmlzdCBKLiBDbGFyayA8Y2pjbGFya0BqaHUuZWR1PohXBBMRAgAXBQI8UULc BQsHCgMEAxUDAgMWAgECF4AACgkQJZ+PS/6IatOKKACgsnfy7ZCxEWmdnY+c9KLm x0V1Zy0An34Ky4kzHxDYDTIoO6XRS48+/aljuQENBDxRQfoQBADouiAUldDORJkG K7fN81SWvocuySMOL/dEv6UQnBgR4lmjmaLog3QMbGIsJqiPRLDDS3PMkYf1dgDy 6hPmMkWF/xd13Vpk4S5sIjrqTBGoE9f0SPbcDPIjRj+htXFcI+qvhvdceYi24Zvs xGX90jb+fimZdrJNtobfEqJaYOkrDwADBQQAsCwtAczuP/aM624+UYBrNMCmHpRS ZAOAnp7Hz83GafkWynaNRDYan2KsBrZJmbZ3MJ6kyUj6k37Keh1c7pR5DsY202on 9haB3lTZv+j2QooPyj9Ityd985eqiRwAMBuOrpaCpot7zYlwiG/Lx/0P00RZ+Jdz hyidSKrsudGAp0OIRgQYEQIABgUCPFFB+gAKCRAln49L/ohq06htAKC7SFr0uQmS 9fjEOFsF9oPMMxgFwQCgjvMA6reNmNAm0i6ycFh3QVYEUic= =C4zW -----END PGP PUBLIC KEY BLOCK-----
<marcus@FreeBSD.org>
pub 1024D/FE14CF87 2002-03-04 Joe Marcus Clarke (FreeBSD committer address) <marcus@FreeBSD.org>
Key fingerprint = CC89 6407 73CC 0286 28E4 AFB9 6F68 8F8A FE14 CF87
uid Joe Marcus Clarke <marcus@marcuscom.com>
sub 1024g/B9ACE4D2 2002-03-04
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.6 (FreeBSD) Comment: For info see http://www.gnupg.org mQGiBDyDmj4RBADa/Icz5Xl+cJUGNxC/tWgXWqcA9VA8GN+PeqKhXS0BnVHntdsQ xbpFUUKK4ld0Zex/Rec1jgC/ikExJHHIee8ZVcHqP+tsWexi83/ZvEdzI95diBp2 Is5fYp8P8hdIBNQSOoc1jVYrTJUaZgJK2uBzbkh/WbipwsQbueRzXqPORwCgsPNr StLzqOpjrA7FdUz/JVQf5+8D/1SiKAOFiW4TxY+fS09lqiLs3mbXjvw23iQwLxje 4vBd4+b9iAUWOsSretSKv6OE9ZlD4FYea8HmMgEkuKfXGc8GvTq4J1uHZ0gcVbrB GmxAUBPPaAENYEJfJf7dcysKVAl14ZQVIvzAGJAZHGuegD7uekGKnOEA61R3ze4a M2zNA/96I77l0qiMc6J7gXmiD5uxC7FsSCFj5sqTYMgBqzIYEZjU/tTUbth84xcR i4X0WNkaILqq1mOcBfmzQMvzG1n1CydmJU6iF1ewle6cIui9TQYg5CESrJF7xid4 vVXRz+xi6hc1+0bSaoJa3sfpNrSSr0lKGdWHZozWdQjOvTMCXbQoSm9lIE1hcmN1 cyBDbGFya2UgPG1hcmN1c0BtYXJjdXNjb20uY29tPohXBBMRAgAXBQI8g5o+BQsH CgMEAxUDAgMWAgECF4AACgkQb2iPiv4Uz4c6rgCgg7XXmcYqcIlJdDl0aGU8r0Dl kfYAn3W4oHUReFhATFkj2d+7zu+Rsu2MtEJKb2UgTWFyY3VzIENsYXJrZSAoRnJl ZUJTRCBjb21taXR0ZXIgYWRkcmVzcykgPG1hcmN1c0BGcmVlQlNELm9yZz6IVwQT EQIAFwUCPK4tTQULBwoDBAMVAwIDFgIBAheAAAoJEG9oj4r+FM+H7U0AoICIVoBe 9B8bo1lrvHh+UF7GY/WaAJ9C2mCThFrmqxCr2bCtR12UoPCPqrkBDQQ8g5pAEAQA qk1J4LBDLeWs6ZOkPDYYcKCSAu0qlzEf5YP/TcSeZcjJyXILgesFXcayoy1v7ILP QSXj4p5uzRyn0fuGqiTvajjxMZz1aSkvgGyS+gc+PDmi4SJ2N/tX2isrul8MK+NG eUsLuZaM1JKhgKpq9yuu3D3ELG7ESga7xsOs1V/sSd8AAwUD/20XByIlsUUC/65K G/DQ1WfX2gNuy5If9tSPQ6h1Lno5Hv3ow3ktybIoQSxbcBo28nA/Gzg5NFGVkkqf OkH2xtS6V0K/WjzsrloBHCPFiKp2yHpXfKubxl8yefQPTMj8hLwlBKrNiN1fz5/6 29TIkEwDwrUwHxQreE7FAzPMqHORiEYEGBECAAYFAjyDmkAACgkQb2iPiv4Uz4cn uQCfX1zNrahRTWz/HRpF7ms8qZqzdOIAn1uuu6Jst43pDzanBHUOBzUP6ymA =Bu/6 -----END PGP PUBLIC KEY BLOCK-----
<nik@FreeBSD.org>
pub 1024D/2C37E375 2000-11-09 Nik Clayton <nik@freebsd.org>
Key fingerprint = 15B8 3FFC DDB4 34B0 AA5F 94B7 93A8 0764 2C37 E375
uid Nik Clayton <nik@slashdot.org>
uid Nik Clayton <nik@crf-consulting.co.uk>
uid Nik Clayton <nik@ngo.org.uk>
uid Nik Clayton <nik@bsdi.com>
sub 1024g/769E298A 2000-11-09
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.6 (FreeBSD) Comment: For info see http://www.gnupg.org mQGiBDoKphMRBACXqpAlgcW54cNw4RBJvlbX5GZ4+VGpV8AyFnkkrKelwH+qgViL L96W7iXCEQqciAAQ2Jw6AMskSdVbb24Y70foITKGo1VEXBKJci3sdKvuPWkHNlJq zGKIrikVHLrD5Yixt1b6SVntWiRJaddiUaI21Zcuechaap3isOAdYrNR8wCgluEV qGB0ng92wVENiIaooHiib28EAIzfn+czzPm19gtAM03W/otZJqsHsIGWuuoIC+Wn Gr9aGVFGB9NcYXHz+jdwSe3o8oE84ohWBI/JVX4K+xCt1gXBqRax4F1QdDse3np3 o49bV79VFbaec8htk88NTp6Xwd8b1GaUFXFbtqAN7DbZEz8oB+57E+2q+ajFQTx1 X6NgA/99QvNMD+SWc73a5SbicKPw0DDktkhHlE4re255nfvgnqjpmxWYyT80Ra+2 rqABKUrgGgegv1I8/w5zbGBd8h3lO9opMQ1qtt4oAKv/incBh0OouMGyQRINQIMQ YQHcUmOu1ds5ijS9B5QCfn89TO4aCoJiS17FRxpJmoNrx30/LrQeTmlrIENsYXl0 b24gPG5pa0BzbGFzaGRvdC5vcmc+iFcEExECABcFAjq7HT0FCwcKAwQDFQMCAxYC AQIXgAAKCRCTqAdkLDfjdSENAJ0b+qcfohYNvN4EcyltP+bcyW2QLACghCW8T6Mk uTs7EkA83E654PfgJSOIRgQQEQIABgUCOm67jAAKCRBdUhyM5rFQFmTqAKCZAG/9 xzh3ZhbTk/vD1RFDFhEjtACfY5oFGV5jon4sJHsZRQ/+fv5F+JCIRgQQEQIABgUC OzoIGgAKCRAgFTHVhF3+3Q8sAJ9UXDBTCKXbbpGrYIVmh8+AbFlpLQCeLdXz4Rvq ht35oJdscZIBXlEqs/mJAJUDBRA7OgjCTVYoIXkFDBEBAUYHA/4sxrvsZe5bZqPc tFoB1KhhLDhVIWMhOrMLN5MPQAV/OHUebDZaOUYn0Rojybh0kQnFhkySvCy5z6vu IXiNQF9kwdL4l5mCAuY6zoLQ05ychnUQDSjAR1vRW8AuY/9zLqsk5IscIWoUpIvL FscLp5FzPmRIe++UteR5s8lQdrexg4kAlQMFEDs6CTwO7bznZmp0IQEBlysD/RMM m8HEnqlCQ/psnaenXQFcKEkNPFWu6fmA2XDYUsauvFYWriILCu7SmGZVPfGpfUGq m1nvvrkRim3+5kpIEZQnFkW6o7DsDhFQakcIt/+tvam4sRUxzJ/Dxl/lmaMfJ9G9 0KidfQ+Peh6Sn0z8j8A/9rFCk0nf+EaUfOhtk10IiEYEEBECAAYFAjs6ESgACgkQ gb3TxA4fm3lJWQCgih0UnLvUcL/miI7K6A+1tuPG21oAn05R3obifoeLIsYBGe0b rf2GCVQxiEYEEBECAAYFAjs7PmIACgkQtNcQog5FH31wDgCgkMLrbEAc3q3wqVfQ UB+Mw7SvsMgAoL1ffYtAmbQKknRfgv3SNAeMfST5tB1OaWsgQ2xheXRvbiA8bmlr QGZyZWVic2Qub3JnPohXBBMRAgAXBQI6ux1ABQsHCgMEAxUDAgMWAgECF4AACgkQ k6gHZCw343XQqACffoEs3DQRVH/U+3Hcp0P3+p+39rwAn3DZHvQDAoPGTHvcfwJv JiNyzU02iEYEEBECAAYFAjpuu5EACgkQXVIcjOaxUBbbcACgxf69HGBrCBjoCJm0 8uMzStTFdk4AoIwTRhmZKdF16GKxcCavvw9aHRz1iEYEEBECAAYFAjs6CB0ACgkQ IBUx1YRd/t1GwwCdHVLbDTjY3/8ti7uMv2y7gOfVDJwAoI1hS0OT2XHvp5vsK7Vp aAOf2HYziQCVAwUQOzoJFE1WKCF5BQwRAQFqlwQAriB57Dl/IZX1CcrxKXGsZJUi Pqh1Pnzg0hhwDEmzlo8GqS61IFFchDQLXKRA8jHHy9DmKNQUVTjFkiasj6gp0xDE +S4jLt5+CVCSG/3/rCk1m4d8pE4lfB46gUzKxD3TPR+fpzElaUaZJ9bAYuXpCGKt 7q3Cljp/Ri1/dBfhq5WJAJUDBRA7OglBDu2852ZqdCEBAZezA/4yUw6AZEleESFo HGwHKyoqeqRKm5V9FgfJ2QDfiqp27HSQo4sLht/83yl5mkYs3dB+JJNWQkgC/62r xyInPK2zNPnlUoHL27NI/onXpVFgPwLiUGF1S4s8VSliiL/mcaEKYSr+F1IZPeEy /Rwx54eQ4qOvh+JTJkwpuJ8e8+yanohGBBARAgAGBQI7OhEqAAoJEIG908QOH5t5 8FEAmgNqpoJJax89oWyAUBF+iZR2hRIdAJ9kp8cVFj3NNWZ7QNfKfIB/xbHEwohG BBARAgAGBQI7Oz5mAAoJELTXEKIORR99g8sAoL/YU7ZZi/21I5xcsIa5iQ7yEVq2 AKCn7/iYCoo/aCxEuzQRL3VJ50A12rQmTmlrIENsYXl0b24gPG5pa0BjcmYtY29u c3VsdGluZy5jby51az6IVwQTEQIAFwUCOrsdQAULBwoDBAMVAwIDFgIBAheAAAoJ EJOoB2QsN+N11V4AoIFS6k+sbT58GASOpQXyDQleuS7GAJsHiHyt1woHN7mOxpo2 KiqoT3d/CohGBBARAgAGBQI6bruRAAoJEF1SHIzmsVAWDrEAn0AIgsTVcu0FFhv1 0syvJpwVqqm7AKDBJ2MZAt1EeT7WR8JKfB47g60StohGBBARAgAGBQI7OggdAAoJ ECAVMdWEXf7dV5AAoIIbg5nm3XE1Qk9Nv66nVZZbqm+eAKCCBQ3YptghBWkPwLUb /7BO94GvX4kAlQMFEDs6CSNNVigheQUMEQEB/h4D/3gjPGl2VBCgKeq7wxccGXqD G/1tkgkSaujnC5ORad5AkNg6ZrgmH/h3b4CUymVm4ddoLwzgaq83Uo7nvA8v4vRU 9oKhczr8+jfqhSUF2wWUuNBDZreeFWuVJr7CJyEEPfv+wYTbNLNrPRTT9NLweq94 V3FGu3c0T7z2VCiDnS9piQCVAwUQOzoJQQ7tvOdmanQhAQGm/AP+L1f1FWsBHaaf gVLxN8D8jNR0htpU/xrW9vTp/YvLrNkx8ihGH3y16lyAZlXON/ZiLIVIdKXBkuE+ zxfzY87s+ZJBEQJgj87khRsetL4qoUZIObgE4AIv0szu1bwXiK+RcPo7jPnpg2Q4 cYc/jFpMM+lkelmHp7lV/Kz6MhN+dd2IRgQQEQIABgUCOzoRKgAKCRCBvdPEDh+b eRZqAJ9Fp7+mNG54DqPDV1J7qP4HctZkXQCghjz28SPd+DBkzT0nLNsbJKQ8db2I RgQQEQIABgUCOzs+ZgAKCRC01xCiDkUffQVFAKCanD9OqYtytjpgJPwS4QoRc2j8 lgCghRujIjNIsb1jAC8mchBbENHfDM60HE5payBDbGF5dG9uIDxuaWtAbmdvLm9y Zy51az6IVwQTEQIAFwUCOrsdQAULBwoDBAMVAwIDFgIBAheAAAoJEJOoB2QsN+N1 uCgAoIwsEXnbbmB+PLB3TPW6gU/BhKp0AJsEJIq5VF3qH+mjqiKxgtq+vNQ5jIhG BBARAgAGBQI6bruRAAoJEF1SHIzmsVAWpPkAnRq+OwehLht3RdZ0eEMaBovxgre6 AKDU2u+ORxySutpVAXqt1nbxg2wJoYhGBBARAgAGBQI7OggdAAoJECAVMdWEXf7d jmAAn2tmOwfDfggEKVuIOl6BnqdPZYLKAJwK/sBvu+n1hoFldXi52uR0FVgQc4kA lQMFEDs6CNRNVigheQUMEQEBzqQD/1ZjUFZkyCJIjHhITiaFskyFodgk3fngLihn vt52cTHZGk8F4aoLTAIhWmmvBkk9rNWVm4yAJZZRAHbz+vtyKGYAzBF8oWgski8X QxLp/rU05BcwOQvVGh5OY/VyJY9un+DJ2cT+7TvL4VjbCqURSuA7fBBu9SYE1H2N 2Ef3jnrEiQCVAwUQOzoJQQ7tvOdmanQhAQFXNAP/YbFNaL7oKn3TecpmCHnAooT6 VnTecdTfEgbrPUnaucDMgmC+uGxLOtxVhx/X7KxMIX2WEit+bnJHH3mOCzEOnqWe 7XvW02jAYnPuie5BL6a0CP9Hi2/TXtz33obFVQH7KyGlN8CHfuGhMBuILZ5qN1pz KTlU2V/7D8cM/YO5dK6IRgQQEQIABgUCOzoRKgAKCRCBvdPEDh+beZI0AJ0SJ6bM 9HKt05Hs7VSf4jzRVpt9+ACeJLZbuklMTIYc60RYx3MQeIJ/AOmIRgQQEQIABgUC Ozs+ZgAKCRC01xCiDkUffW5GAJ98fM3fg05lK3Qkt+/qrfJ1vR3WNQCdGD441Gm1 Y9y6PYGN6ix+3raAV6O0Gk5payBDbGF5dG9uIDxuaWtAYnNkaS5jb20+iEYEEBEC AAYFAjpuu5EACgkQXVIcjOaxUBaMkACg6uMcI7/L4Dhdm687gDIuGAhcBHsAn387 0y82CP64+tNmsYIJyK4xbXoBiFcEExECABcFAjq7HUAFCwcKAwQDFQMCAxYCAQIX gAAKCRCTqAdkLDfjda79AJ9reEvg1IeU+fK7dvwNG17p8izWSwCfQitEiQEgZejn 712syoykKXBg0pOJAJUDBRA7OglBDu2852ZqdCEBAeH0A/9anrxTdxUye7niuosZ sHtaklLA8sVgcZjGrW7Kw+islIT0qHhIajL/KPfIlKrzdoJT8MJGchvZdBLh53Qi DVMJ8U8sJN9Fnmre5QkNXtwR1fyG3okU0gmw5pQELRtBfdKs1Vn3XbgYwEAlXmOQ VS947nLloaHtOVlDL4xqtj2fGYhGBBARAgAGBQI7OhEqAAoJEIG908QOH5t58WQA n3kDIa6CF99xuovvh/p9cmSWVwdjAJ9fabaZj3FFr2ZBgLhKdvnlBl35dohGBBAR AgAGBQI7Oz5mAAoJELTXEKIORR9944oAn2lz4goNkImYgfUFquPOgclQ1kxFAJ4s ER2eLyl2lWQoRsOds+SX2ikb+LkBDQQ6CqYXEAQAkEkfRicoO8I42BfA1Tgaut/H eUdWWLO/nGx6hL2FNkQ/vBhjinsvi3vd6+4eUE/O/3deTSGi9GtgXplCGxaDuF/n r9JjAobOQ0f5TFLiILdy8OL2SZE6VHO6VfCoGy1N7Eg3jvzJ8pFNxTdVww8HIlAr nNn8Kqww57uustQYISsAAwYEAIFghSt+tj3C5koFh7IXPLNHrux5XsDMaCUcDTsX jpEQ7WywzHUVgL2QHxeTbZ6ZMp6BkPklsgPdNpFEOCCaUFzJ/z/1/dTGXPMuWgGI nuy0bFA5mHdiisjLYP+tvRY170mVSjB+qVRErM/fzrO9eQtKkaYLozWXPTZCN5XK k4sGiEYEGBECAAYFAjq7HZsACgkQk6gHZCw343UoNwCfXnf91HKKcZe7yb7h9rJA PbUkrewAn0exWATudMNC4IQf18YvII1t4Cn8 =9wNg -----END PGP PUBLIC KEY BLOCK-----
<ceri@FreeBSD.org>
pub 1024D/34B7245F 2002-03-08 Ceri Davies <ceri@submonkey.net>
Key fingerprint = 9C88 EB05 A908 1058 A4AE 9959 A1C7 DCC1 34B7 245F
uid Ceri Davies <setantae@submonkey.net>
uid Ceri Davies <ceri@FreeBSD.org>
sub 1024g/0C482CBC 2002-03-08
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.7 (FreeBSD) mQGiBDyI9msRBAD3ChWTrd6eyVBO/p8CKWvVwR2nHBlwNzjUwLhXK12wNXpzIOkD ZoRm+eh23B06dTISQhfCJEdC6nhb2Tu/q7ZdTVZ8xsuEQh0AYgxDfaKbDkOQ5UXb CbymX6LEarS7yt/WNTZYZ42wKfaaznW7k9/pf6BiqkSOeXyYAhqgHty7KwCgyqN8 2In5R/b/DDAN51vGrFWcD5UEAJwcZ6zCpwZKKRNbWziKGC+avf2AAkc94uwU+qzn 3oea4Fp/NCSwoLghisKtMM9PDWk8Kkt0HUcv5n88sD3HfXzYQDFbx8VxLXqdaIyA NYtY9JJ6ErX9FlUaUM0qwbxI5fahKzmENFPn/1322Tq7UpuVcLOdqsHZG3xMAv4s ynzmBADBf1z7t9xBlbbLOZ90KxH9+TAbfap62fryCmr+a0cQVsynfPMfM2vdgUi1 UP26yE5IqpIliNTdxtXCei5sWsWkA/N4sEMREXzsNjiN/IAerU9aw7MIW/On9oC7 vNGBiVZ0sX0mMnG+m39wPP/WFsWogHehM2ZDDLQCgkcxqJHpqLQkQ2VyaSBEYXZp ZXMgPHNldGFudGFlQHN1Ym1vbmtleS5uZXQ+iFcEExECABcFAjyI9msFCwcKAwQD FQMCAxYCAQIXgAAKCRChx9zBNLckX0oMAKCpxcvH6Wy26NQgnnt9h9fsOlpOVgCg mvkKmB419Urr02VlIvDS2zPF3re0HkNlcmkgRGF2aWVzIDxjZXJpQEZyZWVCU0Qu b3JnPohXBBMRAgAXBQI8lfbDBQsHCgMEAxUDAgMWAgECF4AACgkQocfcwTS3JF8l QACcDIWbwFoiyzwstCX9yLofxXoX8OgAn0+C1dAVU+SLHk8a3eXSiqqfZaLJtCBD ZXJpIERhdmllcyA8Y2VyaUBzdWJtb25rZXkubmV0PohXBBMRAgAXBQI8lfbaBQsH CgMEAxUDAgMWAgECF4AACgkQocfcwTS3JF8B+QCglZ+/NH9oWiL7+EyJ04KUFF6N btEAoLWBDEfP8E0EX/KdcO/0elAnMbRauQENBDyI9nMQBACCsXTESbCbETBauHz5 lsLGPcIu3Wxxm6q03eu4ssivMNN7eYhkxoHK4bE0iIMl8iFUjeIzvGXBrdPIbhhr mFJ6gIfQ0lwVexTZkpFDQyn84CY+TbzWXNOdkAZsq+hQugw1yVKn4FO6cGxKdB4q NSaee/7TTBWXluiOblwU3B3fSwADBgP/RwKczbedj+27cYLvuk2jpDs7hmhL2BLh a9HmnTyPFYDhW97s7gHjHn3nYjikWssTYuVGllsn2DXRUVOeYJMzC9KaFHwRM+iL gPOKTNopEmvvDCVi8ZeUvyquowH0l3sigHyF+vPaQph3ZxHvO5bI6eaqtffLMagt l0rlSKD4kheIRgQYEQIABgUCPIj2cwAKCRChx9zBNLckXx4mAJ9kE53878kMY2jH iJ8ElEzEWbJOsQCfStKMIHgOPO05CJbsJXq7OYX9wSM= =aCeK -----END PGP PUBLIC KEY BLOCK-----
<brooks@FreeBSD.org>
pub 1024D/F2381AD4 2001-02-10 Brooks Davis (The Aerospace Corporation) <brooks@aero.org>
Key fingerprint = 655D 519C 26A7 82E7 2529 9BF0 5D8E 8BE9 F238 1AD4
uid Brooks Davis <brooks@one-eyed-alien.net>
uid Brooks Davis <brooks@FreeBSD.org>
uid Brooks Davis <brooks@aero.org>
sub 2048g/CFDACA7A 2003-01-25 [expires: 2008-01-24]
sub 1024g/42921194 2001-02-10 [expires: 2009-02-08]
-----BEGIN PGP PUBLIC KEY BLOCK----- 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 =k1pm -----END PGP PUBLIC KEY BLOCK-----
<gnn@FreeBSD.org>
pub 1024D/440A33D2 2002-09-17 George V. Neville-Neil <gnn@neville-neil.com>
Key fingerprint = AF66 410F CC8D 1FC9 17DB 6225 61D8 76C1 440A 33D2
sub 2048g/95A74F6E 2002-09-17
-----BEGIN PGP PUBLIC KEY BLOCK----- mQGiBD2Gwe4RBACw78PVfE2fA9U0mISJrV1ohjdkzVTly0WQ/YwMgyB/J/Z/M35G zIc8yKi8YR/6QYGqgEzeKAhrUIDyBfudhaJ527gyR3Xi+QHgWMQDvd41NlqM5DBn yIVKj10DmDYjcHm29M1OHAkXKZT6tHCqp1dKFD7EXtY1bOakvN7TIKld7wCg6AS/ iPmIvGE7wpFlcFkYIjjL4ksD/iKpKneEwB7dEksyDQX8l18v58x0lH334WDgRO5a X3Wlc4He8b3kWzBWK0z81XE8Z7ip0Io13LHhamLp1P1eDX4sWKQpJmdRtHziC9R6 4GwW9P7aCUCCf91XxaYEU2j755u1Zby3gF1tbookwO1iXQERYuo3ZHezH1bkdRk2 HNecA/9+HCfVESjRFPfOEVqljx+Lm5atTx5VX/D/6iprDUARn0YgW5xrwM8doeNI UxkBOUszEUPDpXPnMI5RWB+0siQhZl3yX+lUPtASrEj84rpOSXZtNPAkHit/iwva pW75gZjt9yN7IhVQVw8O2OMTRGNoWsshzKzznqxNP3p1JYYq/rQtR2VvcmdlIFYu IE5ldmlsbGUtTmVpbCA8Z25uQG5ldmlsbGUtbmVpbC5jb20+iFkEExECABkFAj2G we4ECwcDAgMVAgMDFgIBAh4BAheAAAoJEGHYdsFECjPS6hUAni/U8Zbrr+TFHLt3 cLg0VWnWxCI/AKCNqxRmA/HlZLPRzhVCQODgfbOG4LkCDQQ9hsIFEAgAryX6Ain0 aN8tSZGorCy7UlbKgnhdZpcHwRsrw9C7tFZwxrsvWhxMWnzRG1GlvjkHtGF7WXl+ 9AlDxZ4swXAxLBxI9aQvR6GQkqGF7ajkQWt2SFMM/oyW4xyRK7O1zPxLIYQKJZQt eK1yrSu/lFQsOSZApompReywMloKngYpcLSlAaSGl6rn9P6sLPrjopHGW91LbWpk BVFtGJeCihz9uHLwjl0pcfCpfZdq0M33nY0D1yPfM5HEd0hI2dO3A7PpkDk2sdjo FUtxdpw1BKi0JgIn7RxVkNId0QaRGCxkzXd4F18ST8WXUe2CAZ8bye0WTOahoGX0 3NCZuGjObPgLNwADBQf9HVQeNBb5O+FOpsByzMBJMx4maFVWTwVDLLqm9xZYGazG JsGt6gDzYT4VkjvaS0JTyffZxRY9ZUVFOzjv6IobHSixH09gk+bamunwFqIkkCCg QW5K5m0HnXlz1rbyXs0tBWNe6znyvNuNi56vnY0vIoQcUiqQlW8FjtQz5LbuoRs1 kM/sdgfdY2zHzPf59NMRJGeGdh9HUmTWNliqivjJKgImH+riQbOwWVd/dVlkNX2o Aj/03xzzNIA58BX6kiZsScz5t7qU5mIKEkaq4uzR91nnOaWNeW+uyRRzKTBW4Grh LIg0oggpOGMR34HuEjHup6DyAgIzejwpCDA5XcYvmYhGBBgRAgAGBQI9hsIFAAoJ EGHYdsFECjPSiYAAoMM3xZlAeHYsubE8y1SxN0wqsJyWAJ9/QckJ7/xXixkmP25W K1bECmgqQg== =VOMx -----END PGP PUBLIC KEY BLOCK-----
<pjd@FreeBSD.org>
pub 1024D/B1293F34 2004-02-02 Pawel Jakub Dawidek <Pawel@Dawidek.net>
Key fingerprint = A3A3 5B4D 9CF9 2312 0783 1B1D 168A EF5D B129 3F34
uid Pawel Jakub Dawidek <pjd@FreeBSD.org>
uid Pawel Jakub Dawidek <pjd@FreeBSD.pl>
sub 2048g/3EEC50A7 2004-02-02 [expires: 2006-02-01]
-----BEGIN PGP PUBLIC KEY BLOCK----- mQGiBEAeUYARBAD2RoYfLkSt38R06MpFesDgXVvgSb7q2GGTiMLZE7iJ8iKQU7Rx DkpW7EkpJ/YGPXro0KumkIGoPCsMF1eLENUhGhyMosN5Yb9Y7DXsOv3QcCKIfBlM P3Y+Y7By0GvSYPvYK9GZI2ZvSXyTraxB1eO/7c+aqS7wdwx3bCsVKnyzBwCg+nXQ izSD3wmwDYxffxN4dawiD2sD/00L95dq5XhM9nISjWJOjGsPJqyzoZZH2pemOgcq SeNimi0yWOWeZh/bxbjUYI5RXdBXGdwQxW6DKFU9o9NFe4se1jZcbPjuRtkbBXqz Mkh4kv2pvZ+rHu41kqzOZ0z+rbZld2U28R76xtx3RI4OXvJ8z01RHzAEwJ1G6s3D wI6iBADy+KSjJmfgP1rAcNPuwW7T7L2H9fLNTp3mmWZZDj6n4fykcwM9Jtz/K4QE i3GHNB2AnmR8yiPE2m87ObsKV7d8UK4WP0OLfbr7d7TZ0jDscBhlyfYgKYDFHaJH 8O+L7df2oQU31wYEvYOP/mSTPO7F5TJZm3/Pygp/JkKnPDCnY7QlUGF3ZWwgSmFr dWIgRGF3aWRlayA8cGpkQEZyZWVCU0Qub3JnPohkBBMRAgAkBQJAHlGAAhsDBQkD wmcABgsJCAcDAgMVAgMDFgIBAh4BAheAAAoJEBaK712xKT80dOwAoNjy2Xrebr+p AQroKNQnIzaR2QysAKCXRA9XldUcwxSOzRJNhDktAKQbZbQkUGF3ZWwgSmFrdWIg RGF3aWRlayA8cGpkQEZyZWVCU0QucGw+iGQEExECACQFAkAeUbQCGwMFCQPCZwAG CwkIBwMCAxUCAwMWAgECHgECF4AACgkQForvXbEpPzQudACbB3QlE/GfSY+umOHI y+3UjdMKuGMAn2JC4vrcEPwg8XMF5iEIaEZ0tNmVtCdQYXdlbCBKYWt1YiBEYXdp ZGVrIDxQYXdlbEBEYXdpZGVrLm5ldD6IZAQTEQIAJAUCQB5R1AIbAwUJA8JnAAYL CQgHAwIDFQIDAxYCAQIeAQIXgAAKCRAWiu9dsSk/NByVAJ91gG7VGmIK1H1LyHnW ZPI8T7WRBwCeP644asOCGfje3+NjA0F9OHoL2z+5Ag0EQB5RhhAIALfZ2Kq/Yd1j X4+kdVgCQqHP9tEHjYLwGICL3Y1i+whLqUx/X+MZmt4vNZLaoaqRXhMD8A5c9tN4 06ODB6afzS0feQE/s3j0bKRviTvUedg+CLvt9anqf092gRt1MnKAAWsw+WNqfCNI xsONpWWS5LL11PLyEOhxqsEvcx2IpswjG398MINFwHo7dUielCDpAPgu8tCVLpWb GqUBiWdqzq9jxvIS7obYUmr0VBqElP16LrcvoUs8W+AGvkfTZW3iX6yPhfpnycKy OnStwtO28Ud2BlRrp1YLJWv8oZcYDP5p0GyhbmCbj6qG+BrA8XbIgASFZHK65CWr ++Zc5tztIBMAAwUIAJVrsEErdqxbj7qdJXVebkQZLe/hr5fFOGdOwMmvNbsI2nHj 0B/L8Gfw1v2N6K5ST68mSH5gPpDDkLqDfqY6OcN2LBhVvOdEGJv7kp8x0XK/vsbj jARiO6l7ZrtH4E78oiHzYK1yGFNMi6c5zpO6BXRUAVmKptL/BRu0UPRMfScyIbnP gT0dcOiTazJ5U9Ol+Mjk4S/YLqe/05JQvmzKzSht6E8BbgiZxwsrWB+CLpLwglbg f4NX+BAjApvoesbhkLOY03bSgP6CsRbL7izgVmfAHbOJk5eIYjSEIOcqIMyg3cp0 kZI7omon6uhjl36Ad1uEwjkW7jPgCz9a62bLr3eITwQYEQIADwUCQB5RhgIbDAUJ A8JnAAAKCRAWiu9dsSk/NOa+AKC/grZ0DrDsO9LtCEQKwTcP7EQYBQCgsk9ZmVug 9caBiftOC/+/0ej5qqg= =/cMH -----END PGP PUBLIC KEY BLOCK-----
<bsd@FreeBSD.org>
pub 1024D/723BDEE9 2002-01-23 Brian S. Dean <bsd@FreeBSD.org>
Key fingerprint = EF49 7ABE 47ED 91B3 FC3D 7EA5 4D90 2FF7 723B DEE9
sub 1024g/4B02F876 2002-01-23
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.6 (FreeBSD) Comment: For info see http://www.gnupg.org mQGiBDxOCiIRBACyyyoMk5OyGdOkR0a4fj8zPJ2AOielQ1BYv7JlIWdNeMHdQ0gj liTgXwDimeBnElw7sNrmdfocfwKbmX33exFPa3AkJgLflBcuH9+xE3ozgzMl6t76 QL90PPIc24Er670NnhF7Smvubus4IdckvM24kuUTINmiuFzVwuwWdXdwvwCght6R HPpuFeiMZHRJAiHmu9AkKrkEAJRLmRGgdqTQ6RRIQobqGS+1grl6AsXHzKfvjx8I //12yrFiUcXE+167I529OW2i4ilmVjBmnwwe3750ZKBIp8OUBkMkfMuTSyCCFD22 CX4N7D68d8eCJiCqv0jMZGnoWoMulmWzdyplcg/FhdLzUfpXLWX7/9gzy9k8hKBT Ou2UBACRLG7zwgKcYx4yjHhsCxuqGOeKtcfF49ghCp1s+wPsnXy8b6ZAY3wFeHC5 LFyUsQFarizV0aeqJoOXEB296xZYPpgW6C+rajd1WVi7zhPxsfYedldX8HtGDMKm FRN88P75OGjMdFOYrpXTqUAJnoTUN4UynLV6WbfM7Cne0syg9rQfQnJpYW4gUy4g RGVhbiA8YnNkQEZyZWVCU0Qub3JnPohXBBMRAgAXBQI8TgoiBQsHCgMEAxUDAgMW AgECF4AACgkQTZAv93I73un4TwCfWqT0UeeEn9qstLTycDZF6oiKUusAn2dZRiNX 06KUv2qJk2g88nUsBXgDuQENBDxOCiQQBADXY+I+CYMmiant5TBMzh5JfqhW2FXa aZDgi5XTVAStL6AaygeLIaVSSUUuOxiD4JB7vxHYB7pyVg71/lg5moud8NP2HNKW YR2mZjCQ9bHRQRqqPBTMrSHJpq10cZ6grxvVmte/oC4cI35wL8HEe2WwChZgk0tS YrA5PRt/UGWLLwAECwP/SxokqxcRa3lZqkpdwLgLWpyx1KNBg7wIJYLmALI0UxpS ezweD7OukikqZ1BYlaaWZ7N++r4sNDR9WTIv0ySNovxJnnlyo6FzD9RD7ijQbAvp nhpikigC+GvdnvmreMXYztc9WvFeJT/S8LGDkDHcm0ECmBDo3EA8W0+sOQsZxk2I RgQYEQIABgUCPE4KJAAKCRBNkC/3cjve6eroAKCCMN4s5AqvTy38BWmspFvSu90I IwCfTGutfs+PGUY9JJoabnnfJhfIgNA= =MFJO -----END PGP PUBLIC KEY BLOCK-----
<danfe@FreeBSD.org>
pub 1024D/3C060B44 2004-08-23 Alexey Dokuchaev <danfe@FreeBSD.org>
Key fingerprint = D970 08A4 922C 8D63 0C19 8D27 F421 76EE 3C06 0B44
sub 1024g/70BAE967 2004-08-23
-----BEGIN PGP PUBLIC KEY BLOCK----- mQGiBEEpzAURBACu7RDb0dP0oorBa7j0Do1auzG1N2wQgTMIHoo7DhspaGjvN0RJ /dozO04jqyWopb/cA7iWMqn/7gX9ckHrKa1ugQRb8P7AhIZNmfc0B5AOCqeGo8gi o9y/XBhFRS3Osxxe0j2bIoL3pk0EBjHaa477yiZyWNjq5j8rPf/h7DudtwCgx14M iEwmKZ4hWMzeaKYcOFTIn1UEAJtUMrBbxMxchDnIuAn3Oz3ESpGpxSDVcTHUxoIl 3A+mizXetzWX8lmEP8GM2oM1/dRCiF+l2v5tcnBO52PT1cFst28W6Ytyf1PamIFC GNL2CZUz/ZVRBPEZb7CfXJYupYd1AiYNCoSyh9bOv4Fin3Uhm+Ds1n6x3yulCFyo PJ9pA/wOMpGwCNSpNLcfz3gG5dh7PR2rhh0D0w7jZbO/l8D/81inThfBRb7B4KIP v1Cl/ynm+M4XS7Fy3xjfPHbUvHY/DNr9rqI0qsGU9qTubuBO+I647tjLFem8gaue yESeoU4okXMPblPXh8r93JIfbmi/rMcuddblJ5kw6U/IYYGGS7QkQWxleGV5IERv a3VjaGFldiA8ZGFuZmVARnJlZUJTRC5vcmc+iF4EExECAB4FAkEpzAUCGwMGCwkI BwMCAxUCAwMWAgECHgECF4AACgkQ9CF27jwGC0QXdwCgwTxjqqG9DppWUVvfQklR 7O7d/QoAnj9qF7prbDCAq43MQJIJ1AP6x/4UuQENBEEpzAYQBACsVmYX94l7jndx byPUZl5SlKLJFSTIymPGLebcdNg8rF86aq/9d8nRrkrqUWtpQtWeAZw2GZn0n/vz kRbmaqMaHkmdg9g9xT2qstOL0rZhCyvLWVeNYUjgkNWi7Be3yjb11RLPOanpug5z Rfu6I/7qjOcVEoa3cjlahdK//xleWwADBQP9EWsXY1iKSQ1k1B3N3+EEWbzuOzaH upo7fLwamIVuX7K95YIqOawMlhERBD8MUxfrzJkOIbVI/81g802Iq1D2Xv46hvCP J8oszCeFjqixsOkg3HmdUyvTHnODBHsQMoy/37r5voAElx/LXc4Dm9DSR0rSTpXh mUdHtM0Y6XYEcoCISQQYEQIACQUCQSnMBgIbDAAKCRD0IXbuPAYLRD9GAJ91NEgg OHfLL9Taov5GEDVjEaD8MACfeTqtFRD4Piuxg64CGOdNBCJ5+p4= =abIH -----END PGP PUBLIC KEY BLOCK-----
<dd@FreeBSD.org>
pub 1024D/69FAE582 2001-09-04 Dima Dorfman <dima@trit.org>
Key fingerprint = B340 8338 7DA3 4D61 7632 098E 0730 055B 69FA E582
uid Dima Dorfman <dima@unixfreak.org>
uid Dima Dorfman <dd@freebsd.org>
sub 1024g/A51DD1C0 2001-09-04 [expires: 2003-09-04]
sub 2048g/65AF3B89 2003-08-19 [expires: 2005-08-18]
-----BEGIN PGP PUBLIC KEY BLOCK----- mQGiBDuVKxQRBACAKP3+q7GJT2OMujrs3EgY2hdrTtLatgzpYGHsyewpckAhMPv0 RGyVpcmXdArWQFMfBdO76TO3r6/CKRTEAAW7UieQwCqflr/qRWfaiMkqIDxll6wU ZdayDmuLPlp76xN7Cvy4p34lq91VNdrZ3FesMXH1xTPrnaJX4zhFEd1/QwCgnmvP UrU63yhExZOs0Cpo9ruLa8ED/0t2nNIoOM2cUghN6Lnh45cY1O+jnjJ4QMOi7bEs XwS4sIZLzZ6F07RCTTbcyRkrrh+WqX89z35ppi6PM2GZS3Zgz+W+gtzvrhhBcIHm 0INVgsJJE8Afa2EzA2HIXsKl462Rojo8hmFXO34lCnQTe5khzLZVlUSxVpdoucvE ew/OA/0Sdos8xBWc5cFz7iycKpDCNjEuvMroPaFH0I9wPAX3ZBQeyHVLsUYDZKFb xDYlfLPfRikkxolxF+kuzqejgPMJe8aBZfPK8fIhn3IJw/5mOETGnaAPSQDCuN81 jIQ20Dancod59Axoj53VB5bvUW49Z5lapV6rGLb78YuYxxQcUbQhRGltYSBEb3Jm bWFuIDxkaW1hQHVuaXhmcmVhay5vcmc+iFcEExECABcFAjuVKxQFCwcKAwQDFQMC AxYCAQIXgAAKCRAHMAVbafrlglNVAJ43xNHxghUNhyrjQQ/rNThSTBHVhgCdGwDV 4Mx4tZO05bUNjVqN6hZjk3a0HURpbWEgRG9yZm1hbiA8ZGRAZnJlZWJzZC5vcmc+ iFcEExECABcFAjucoLMFCwcKAwQDFQMCAxYCAQIXgAAKCRAHMAVbafrlgs7GAJ9B v4NyZ+COALrl5xH8kZUeiiI6WgCfbi+7Bd6bmjnkaGK7wg5ea5w7iMy0HERpbWEg RG9yZm1hbiA8ZGltYUB0cml0Lm9yZz6IWgQTEQIAGgULBwoDBAMVAwIDFgIBAheA AhkBBQI73BG/AAoJEAcwBVtp+uWCaLQAn0IMsunHDSTPvqIK+FCNECLU7Ej5AKCG Jf8Vk4YFqGxiDrwkM1NgFfjVILkBDQQ7lSsYEAQA8oZk40A/XTiPzOF/bBfjb7eu 60LwLt49xtLLauz7vI7RHW0Ws9+YsxcX8J2Pv0Ryuz1wlaAB83ucn2buqsTMSmXf 5nMvtQuN2FkPAtDP6V4P2F90JtPMU6lJuxvAsegEvP9bPeTGkrnO9RO23zFeSOo2 uvgI3DMg9oSYrvIHsDsAAwYEAJeWBqvaaqQ6hmKRgxbnNC8Mrv75hDEuOhHrG2At giRssj6Y7Hkcf8orSXtJc1EQPeioG+qsM+zk82Ts8hP0G/nzS8IdzDsIEm7rKnh8 kSAtMOhJSa4pMicKZpxnTz1NwsHq6dKEx6ahkRDY23GDmmhxNolpNMK8NPOvYqR5 zkEXiEwEGBECAAwFAjuVK9gFCQPCZ8AACgkQBzAFW2n65YKwngCeJwxTVG5YVQva zQczjGiiQMKjNJQAnRmUusNtgAq3dJx0HJfLt+KhnMvuuQINBD9B9sQQCAChqn2N 6z0bXjUriXPtAyavkZaeXkuYCFyOS2e91q0q207rtIMfmU5vW8/FpwDfJTNA8idy ZCX8tBTgUVS4dCv5LENTTcCqlq8eGUuHCldizLQGXuSDrC8b2Li1eHDzqwnjWZLu NnoVVfp+DhUeVI8Zly1t9ZmHW6Nk3jbQAVAoqbMwrzqSfdy9RcgaQBQArgczBDtQ zjL7Yo187QyRw7ziEhUC4rzpz5/RvfUzzSa+CEGrOxz5AjqraPGeZJfgG8sGCFqm ASUxD6fX+FS8BHoBBl2V0bHZSET2r8GsNYuKQ09RihGCq/OLsPzBJvizMzYgSliH tT4xlFpl0/qjAum3AAMFCACbCWgTzzxWztiYbqeK5LddXmubKZwAp7XtxS1lN0Ed xpvvRG6h7gYZBdRYTHBTSMyTMWwUgjwsQOrYG8NwtH65egba2jWQ1tBU4WHFfsbp 3ZGWTeM0HAlpPAEvgNZnrR8u0hZXUaPAKQQvI1rFH3VMOe0MyiL+pSaCYVFeduqW HDMDpIfNuO2iMAA/QKvkIzBQcbyLEEitkqaGoNPz1EovYEORrNRnqhx0NWfd8/sZ +cv37rpjlq29ev+29ZVmFe+3TlNxqkoEdwJQaolPs1/iewxFLNcNB7IRsGSjhWBD 90V6p+3j4bEkE9nh4couZG99Ao3GoeXpimoJ1MPpHFJ0iEwEGBECAAwFAj9B9sQF CQPCZwAACgkQBzAFW2n65YLBFwCcD9JTpoKRDv2uufBrmTwxVgxf+VkAoInIyMMh EoQZKxCl9C8Iuwj3RgM9 =6nju -----END PGP PUBLIC KEY BLOCK-----
<ale@FreeBSD.org>
pub 1024D/CE5F554D 1999-06-27 Alex Dupre <sysadmin@alexdupre.com>
Key fingerprint = DE23 02EA 5927 D5A9 D793 2BA2 8115 E9D8 CE5F 554D
uid Alex Dupre <ale@FreeBSD.org>
uid [jpeg image of size 5544]
uid Alex Dupre <ICQ:5431856>
sub 2048g/FD5E2D21 1999-06-27
-----BEGIN PGP PUBLIC KEY BLOCK----- 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 hQVIUSh0Um5WsNHU+9T5ARAAAQEAAAAAAAAAAAAAAAD/2P/gABBKRklGAAEBAQCQ AJAAAP/bAEMABQMEBAQDBQQEBAUFBQYHDAgHBwcHDwsLCQwRDxISEQ8RERMWHBcT FBoVEREYIRgaHR0fHx8TFyIkIh4kHB4fHv/bAEMBBQUFBwYHDggIDh4UERQeHh4e Hh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHv/A ABEIAJAAeAMBIgACEQEDEQH/xAAfAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJ Cgv/xAC1EAACAQMDAgQDBQUEBAAAAX0BAgMABBEFEiExQQYTUWEHInEUMoGRoQgj QrHBFVLR8CQzYnKCCQoWFxgZGiUmJygpKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFla Y2RlZmdoaWpzdHV2d3h5eoOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3 uLm6wsPExcbHyMnK0tPU1dbX2Nna4eLj5OXm5+jp6vHy8/T19vf4+fr/xAAfAQAD AQEBAQEBAQEBAAAAAAAAAQIDBAUGBwgJCgv/xAC1EQACAQIEBAMEBwUEBAABAncA AQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYn KCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeI iYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri 4+Tl5ufo6ery8/T19vf4+fr/2gAMAwEAAhEDEQA/AOJFx4keL/hHrOVYLJmS2eNd qGJVbK5IAyo78n1Oal8U+GtMdhDout2etXkUgjuIixxIwQMxXbwcYbIzngnnBrmr qO0gLXl8s9sl1GGE7XJ3HoPl5yWwMcc9Saz5bLUdPvRqMAnhtY5VXz7iMxg4B2qx K4dyCQD1xnNedC7OmrHkkrGddqNP8QajaPF5UUu2VU27cKRnjPbk1Y8OXMMOv3mo XSpKpOY2mG4hhjkVX8RTzvrFtesx3RxGMyKXbcuTt5ct1yR6cdKwLq/dZWAZV7cd MVvGnzb9UVKUqbsz06+1+zu52mTZHO/LSqBlvw9f8aqQXLI6lJo0jCgAMACBnpx9 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 =CMdE -----END PGP PUBLIC KEY BLOCK-----
<peadar@FreeBSD.org>
pub 1024D/D80B4B3F 2004-03-01 Peter Edwards <peadar@FreeBSD.org>
Key fingerprint = 7A8A 9756 903E BEF2 4D9E 3C94 EE52 52F7 D80B 4B3F
uid Peter Edwards <pmedwards@eircom.net>
-----BEGIN PGP PUBLIC KEY BLOCK----- mQGiBEBDlWwRBACjdnvu/rCOVEjpYmlmQmmmYZ0hbUdustNozm8dtKpg2w+zED3z 9kHcoXEY2i1jxmJrHd4PPcvMutJB5AuYU4NiBmdMgBgfZvW7yaD+tHfvgozNyEKa 3Gcddamy/ENCFKoSTEuCDxH77zf6DXh/B/Ekjav0sZnGHPqFhUdKzwh21wCg57uM Z3aL0+sIhiNYEJK93yjXt0sD/2F6+T7dj7wjdCPsb3mh5YSTjGeSXjnXHfeFQmmA /dPyOkWOAuTo2uR3AeVRrJ6rslKLqyl773HX+eM5b52gIsFZ+CzSEiHSrHEqOR/o 3jzzGWhZb3Q/dbeWsPrtw32XUOdiijH5h2PyfKQ6reu+lpH8oKTbvOoycguHnsiN 8zt/BACCRoxdjw3f5L4RMfbdxN8/9GLcDzjv27s4Jn17snXuOyNzWxky+hNW5InM wG92m9/a4XtZX6viK4sY8kfFLvAx95vaRiPJOPdUIx6Hk34HHsXdQ6XbUaadlBuG Mxr+aT2o01qzxi+dS8+SWXjCBwT5mRVdOZq7RFYd73I+FrzltLQkUGV0ZXIgRWR3 YXJkcyA8cG1lZHdhcmRzQGVpcmNvbS5uZXQ+iF4EExECAB4FAkBEXVYCGwMGCwkI BwMCAxUCAwMWAgECHgECF4AACgkQ7lJS99gLSz9lewCgtKJX8EySD4x42LoZ8imS gYzQ2AMAnjAlfeFF6q4Lqiv6ikUW7uSGu2WitCJQZXRlciBFZHdhcmRzIDxwZWFk YXJARnJlZUJTRC5vcmc+iGEEExECACECGwMGCwkIBwMCAxUCAwMWAgECHgECF4AF AkBEXiQCGQEACgkQ7lJS99gLSz/1ugCgwj+RyWcUk2WtWZlox7rmTG9ymDsAoJ+r ckrEYUJfPdH0GKonpipJQwL6 =73v6 -----END PGP PUBLIC KEY BLOCK-----
<josef@FreeBSD.org>
pub 2048R/A79DB53C 2004-01-04 Josef El-Rayes <josef@FreeBSD.org>
Key fingerprint = 58EB F5B7 2AB9 37FE 33C8 716B 59C5 22D9 A79D B53C
uid Josef El-Rayes <josef@daemon.li>
-----BEGIN PGP PUBLIC KEY BLOCK----- mQELBD/4Zd0BCADEH+EDDjEX2ztufB5dele5Bt4XBg3cYncvlTsVEDLR89xtwmFs 3no9Hs0ImTQwplsDgbixBL3DXWi46dwVK0MGYIUycJxLfsgFdlWngcXYkpWF3O8g v4YhytcVi9uSBy8oNB7huiY8IXh4XPgiOKztgCVJZbIgi8ahoif04eHTT9YGOL5x Qu+n7D74zAcgzK0XO+O+WXB8EoO/saJxzcCIeEGzfCjq4VyL6JB+1c9CgWlrpI7K LOpFqrN2qHygIMxCicp/163AdxD9I1hUtlF/sZYY9BpkbweLLqxKf4qtDYAMZLuS xFGfIG8f0imfFeTXt85FgYGxqLMlmdjFefIpAAYptCBKb3NlZiBFbC1SYXllcyA8 am9zZWZAZGFlbW9uLmxpPokBOgQTAQIAJAUCP/hl3QIbAwUJAeEzgAYLCQgHAwID FQIDAxYCAQIeAQIXgAAKCRBZxSLZp521PM0PB/91jWBC7yI2obxE+VGsItduiPhC 0x+Z33suGP8f7ewGBlztKC8y5N9jCGCfG9auwkJ9Xo27zCpMIkba4CfbRqyLxWoh ZluHQg5uge7AGefmsdfDsfZq5mPNtUkB8uVn3tXGwVVsxknw8PGtw25wbDCOXTCi t6L70v1gJfK8UxFhu0VCdOxbRAuQoIkE+bSO6g8bJrt6JFzhVpuHdgxwJbziWYSp nEJUN4Eou4UfCteVQrkh2O7ArHMmAEb89s5xbfNrQ4NdVBXHfsrzEDhWOqgiQ/4m o2DAs8iy2aCbWRaKG6G57g+uwhbqEN3gkeDfjhcpBMLqQy8drqx+erNGVYnKtCJK b3NlZiBFbC1SYXllcyA8am9zZWZARnJlZUJTRC5vcmc+iQE6BBMBAgAkBQJABsPr AhsDBQkB4TOABgsJCAcDAgMVAgMDFgIBAh4BAheAAAoJEFnFItmnnbU8miAIALbu Y15l3+9kNlv4Arv26aYrRcIYEUcCLIGZnD93NPnyEza4WwsUbCvYgNpKb/wojAA3 xUdzHtRUfDp++eQU72S7DcRkkTt5vrnwKnH9kMsr2/hCIaO3ESiOVoPeJy91fHEF I9K1qP5noJQjfjr1w4ib86spyVb5LH3QPEnyvDX/UTBYiYu8UUYonitLZ3iHk1Ku x9SQoPszvkxdM1+d25pbG1uSV8JQRym6TsPQp3RwpbCy5hnwMbDLaWl6fbRwtAxZ i6A0cppdbgi+DDrOFoFKuU25YKKOKl76Vy+cpjYPBPRH3mOTYd/i2xliEP56dTJU 4QqDJPpnJdmvXiCFt5k= =UfKm -----END PGP PUBLIC KEY BLOCK-----
<ue@FreeBSD.org>
pub 1024R/E74FA871 1994-07-19 Udo Erdelhoff <uer@de.uu.net>
Key fingerprint = 8C B1 80 CA 2C 52 73 81 FB A7 B4 03 C5 32 C8 67
uid Udo Erdelhoff <ue@nathan.ruhr.de>
uid Udo Erdelhoff <ue@freebsd.org>
uid Udo Erdelhoff <uerdelho@eu.uu.net>
uid Udo Erdelhoff <uerdelho@uu.net>
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.6 (FreeBSD) Comment: For info see http://www.gnupg.org mQCNAi4rWsAAAAEEAM1u8Y60omElX7Wtrh75P8K0L2Gp6omV6iDuwl9kXYhN94jF DE1F4xpkRDWvQxsWbYeIk2F3VYGuN12BhbRNcNqoyniQt2XMmbdEmp6ltumH5WbG jR5Xg0LkJ5AJmxvjJXXA9q+/eTfmyTfPjnCL70cTMWHdUl+EBUPoh1XnT6hxAAUR tCFVZG8gRXJkZWxob2ZmIDx1ZUBuYXRoYW4ucnVoci5kZT6JAJUDBRA0K3Q0Q+iH VedPqHEBAe9vBAC+el5mJpqPkC/+om/SSE7mxyuUqHAx1tNUymL8gTuV3mFB0goM xkxhUOMMYe9z2zyi+RXrECfLT2OqqUA60EZpl6Mgymj8SVZSv4ZwXdU8cgynYNfX T1pC57mN9mxL10vTTJEix7QsrVz0W479/IkBrhW9nTidQtORW1Si5T5IA7QeVWRv IEVyZGVsaG9mZiA8dWVAZnJlZWJzZC5vcmc+iQCVAwUTOwzFWUPoh1XnT6hxAQGl eQP/bLMp1qSdkt2/BKchpx+lhOemCmT3LHQ1sNzelb7dBwnsvE3Z9lOycH2pm1ro j6x3vmcDAqZ1yh2eFEVNK5abfhuI3QH+9QdgvMcSIQgF3VIMer7JXxNtFFX8JRKm +YfLfDifcK+B2HRkpMt9ETY8b3/cYz+gbdKNe4nVde5KPT20IlVkbyBFcmRlbGhv ZmYgPHVlcmRlbGhvQGV1LnV1Lm5ldD6JAJUDBRM7DMX9Q+iHVedPqHEBAYHUA/4l j98KC7y8cjapO4Hi0r/eO7gUwDujvrBMYbWuhmNCO6xlPfwRNm76tnNiTFdqVLat XSrQwEUys9Mq9xe2F2RuqSfYWjmHKX3/gNW3gRJbnBqO1QN6CDqo39a7LgllqFf4 yFj9V6i1c0WSBiOeWy75DHpsfXHupMxZWPPRWh0TnbQfVWRvIEVyZGVsaG9mZiA8 dWVyZGVsaG9AdXUubmV0PokAlQMFEzsMxhFD6IdV50+ocQEBzqsD/0nX9rV5cAcd jFTayQvoAjb/nIN+TJVHumuC/Glp9fKHlfTjMnsUawma+iQESjUB8XgyeJ0WvR8M vQGEMowYr1YTtFiYfFOvrzXZmhB6NfhFV3s34ZLDeBnncUqkas79Pi9G9AP2Y/Mc c//i2owj58xTfocYNT5IxVVYjB72Py+3tB1VZG8gRXJkZWxob2ZmIDx1ZXJAZGUu dXUubmV0PokAlQMFEzsMxiND6IdV50+ocQEBBJsD/1SVP70fNa3ShAn18+yEXOIL TlFYCUmGaBIeAsd7r8tXFYbf5STAOEOiqBB9Y7V1tV4IriACru+9wo5wBQoCLBT1 RNj4NhwVvkGReTDsA+Zz/vUULrbklVKO724DktO0+WRbn/w99trttuUTGvTHRER3 BjuOfJ/QoLlnLAsDBMov =TCJD -----END PGP PUBLIC KEY BLOCK-----
<ru@FreeBSD.org>
pub 1024D/996E145E 2004-06-02 Ruslan Ermilov (FreeBSD) <ru@FreeBSD.org>
Key fingerprint = 274E D201 71ED 11F6 9CCB 0194 A917 E9CC 996E 145E
uid Ruslan Ermilov (FreeBSD Ukraine) <ru@FreeBSD.org.ua>
uid Ruslan Ermilov (IPNet) <ru@ip.net.ua>
sub 1024g/557E3390 2004-06-02 [expires: 2007-06-02]
-----BEGIN PGP PUBLIC KEY BLOCK----- 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 xfUIyIEOONF8sN1I =tea/ -----END PGP PUBLIC KEY BLOCK-----
<le@FreeBSD.org>
pub 1024D/F10D06CB 2000-11-23 Lukas Ertl <le@FreeBSD.org>
Key fingerprint = 20CD C5B3 3A1D 974E 065A B524 5588 79A9 F10D 06CB
uid Lukas Ertl <a9404849@unet.univie.ac.at>
uid Lukas Ertl <l.ertl@univie.ac.at>
uid Lukas Ertl <le@univie.ac.at>
sub 1024g/5960CE8E 2000-11-23
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.2.5 (FreeBSD) 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 Fv2s0kptGIN2izILm1myaA== =qAVp -----END PGP PUBLIC KEY BLOCK-----
<stefanf@FreeBSD.org>
pub 1024D/8BEFD15F 2004-03-14 Stefan Farfeleder <stefan@fafoe.narf.at>
Key fingerprint = 4220 FE60 A4A1 A490 5213 27A6 319F 8B28 8BEF D15F
uid Stefan Farfeleder <stefanf@complang.tuwien.ac.at>
uid Stefan Farfeleder <stefanf@FreeBSD.org>
uid Stefan Farfeleder <stefanf@ten15.org>
sub 2048g/418753E9 2004-03-14 [expires: 2007-03-14]
-----BEGIN PGP PUBLIC KEY BLOCK----- mQGiBEBUhZkRBACOyBTXaf9n0gkvq52yhACaPjUpAY4c+Z+xDM5jZZNpcaEyuU5N ipJdvlKIIkfB+Jka5TxiUBskSo6cegPW7k3G9/as+39SeOexEw5aH1WROcrqD1Wq iBTJ/Ey8eVleGTP/3vpbUoT3gcNZuus00J75OmJV06xyTA9M0tSy1/aIxwCgrbCJ Xr3wLOPYiGXf5WbWfy08DmUEAI2xYIycYgZ7ogcqFcu6gShO/uTcXkZL0xOIC8el rAC/HciJagmvYPjQimQeKhqyX+uvnhguiS+XZYx9yqegOG1dSOVWw6FJTYgzKeT7 6tHmaplB4JQLkUSBn8p2fsyXAaIA4M+2c9fYf59El5+OyfOhGfAEJNJv1oGLYWic Bbt0A/98H+rPmPwtv4ntIvCq5xkvjENzmG6WerNF5dXHsoG6Lnhe++4jUquHseEI +u4ou+v1it5vBTnPI2Wz02WP1Oyz7JC0cPAbrTGz+eaaNV+M1wD7yqj1poW74buk 4hJ+myIqC1dRrliAyrr75xHl3pr212+8Cty8RTiNF9xgICtH3bQoU3RlZmFuIEZh cmZlbGVkZXIgPHN0ZWZhbkBmYWZvZS5uYXJmLmF0PohnBBMRAgAnAhsDBQkFo5qA BgsJCAcDAgMVAgMDFgIBAh4BAheABQJAmCd/AhkBAAoJEDGfiyiL79FfqEoAn0cP NQJYvSLWsU4gD/cffKUtLEKiAJ47lf0I7dFdAJSqqxSCOrw7iuWhTrQxU3RlZmFu IEZhcmZlbGVkZXIgPHN0ZWZhbmZAY29tcGxhbmcudHV3aWVuLmFjLmF0PohkBBMR AgAkBQJAVIenAhsDBQkFo5qABgsJCAcDAgMVAgMDFgIBAh4BAheAAAoJEDGfiyiL 79FfeOMAnR6XllE6b+BKnoRjBOC06PXfoK0jAJ4yDtL0vkYkW9LRmoFkWpxJYilU ALQnU3RlZmFuIEZhcmZlbGVkZXIgPHN0ZWZhbmZARnJlZUJTRC5vcmc+iGUEExEC ACUFAkCYJIMCGwMFCQWjmoAHCwkIBwMCAQMVAgMDFgIBAh4BAheAAAoJEDGfiyiL 79FfwykAoIes15zWxNJ7iQr1n4rP+x1LidM5AKCDakRpNHAdMiaJJRNrHt9I1kOu FbQlU3RlZmFuIEZhcmZlbGVkZXIgPHN0ZWZhbmZAdGVuMTUub3JnPohlBBMRAgAl BQJAmC7cAhsDBQkFo5qABwsJCAcDAgEDFQIDAxYCAQIeAQIXgAAKCRAxn4soi+/R X//IAKCmPHdkW+JyvXq8Ph/4AcoSYGltQgCeOyA+WXLvjD8s36h1ITQXleLr0Ju5 Ag0EQFSFrBAIANrcNEggDb7bS/TkhZg5CEw0HP0bFOogCowNgGZ/9EzZA1SvABYb vun0RyK0Ceh51Vr0Lb01i6cIDTH/cBVMqXX75YPusncMzsEuMdBCzMqKRPCpimUD jFmMIBrkbtu8OTwaL+Xy1j7/SyfYv8fV6q6ibGWgN4pcyDmItTWYRNnR1G4EdIvl a2CgQr7AgzWPGeeZLrUqUuLjYKwZ5JUqch3ooU4e+eFkYjovMyiC5E23UxZWyDZQ DA1aOizxH7519R5l1YDsrqjZdVz3Ks7iCPYZ+T2QMGM7oUDjbt0xAhQCt15yj2K7 f0m6KtmHWzwgf5Dagcph00anBMldDQ1RqscAAwUIAMReNMLnk1jhYUYoitYNDJTO Pp1X5bk66+b5yHW2Ul9DDboe9tp37AoSJf1hEI7eyB1qkKO3bt9nePKOuAe64ft9 jMYEm70IS3tmo3hHyTbLuOpxF3f7ZHmai2gXPdDmIczDqkE1PneX9gJQadQTqvky 4PVHKVUGTBScI0S830ZBbIsvoYimjGCPMuz4UT0vKR3XLay4RjwCYC6waqRuJoBq rfm/vmx6/GNfb/jwZgN3QYPgTptx65eAdEAy2C3Y7RbMrbx9qqvx5TxaS2yVFy6X 6gIrSmFSFE8rplPDActw1V4YMyuwnyVvGe93pYwYfxzM/BxN09V9QBQUhIa7TMiI TwQYEQIADwUCQFSFrAIbDAUJBaOagAAKCRAxn4soi+/RXy2fAJ99u5jBvCIXuEPa rLB9utH3lU/ymgCcD/fpfY9v7wyOrivOy6Wz3ZWjdnQ= =9khA -----END PGP PUBLIC KEY BLOCK-----
<jedgar@FreeBSD.org>
pub 1024D/FE817A50 2000-12-20 Chris D. Faulhaber <jedgar@FreeBSD.org>
Key fingerprint = A47D A838 9216 F921 A456 54FF 39B6 86E0 FE81 7A50
uid Chris D. Faulhaber <jedgar@fxp.org>
sub 2048g/93452698 2000-12-20
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.6 (FreeBSD) Comment: For info see http://www.gnupg.org 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 6r7mPk8= =R6MH -----END PGP PUBLIC KEY BLOCK-----
<green@FreeBSD.org>
pub 1024D/41C13DE3 2000-01-11 Brian Fundakowski Feldman <green@FreeBSD.org>
Key fingerprint = 6A32 733A 1BF6 E07B 5B8D AE14 CC9D DCA2 41C1 3DE3
sub 1024g/A98B9FCC 2000-01-11 [expires: 2001-01-10]
pub 1024D/773905D6 2000-09-02 Brian Fundakowski Feldman <green@FreeBSD.org>
Key fingerprint = FE23 7481 91EA 5E58 45EA 6A01 B552 B043 7739 05D6
sub 2048g/D2009B98 2000-09-02
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.6 (FreeBSD) Comment: For info see http://www.gnupg.org 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 uPPUsA== =oR1w -----END PGP PUBLIC KEY BLOCK-----
<lioux@FreeBSD.org>
pub 1024D/52F3190C 2005-01-07 [expires: 2006-01-07]
Key fingerprint = 024B CE1A C25F B7A0 6DA1 0073 AF11 2268 52F3 190C
uid Mario Sergio Fujikawa Ferreira (lioux) <lioux@FreeBSD.org>
sub 4096g/205244BC 2005-01-07 [expires: 2006-01-07]
-----BEGIN PGP PUBLIC KEY BLOCK----- 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 Dbxv =ZjzM -----END PGP PUBLIC KEY BLOCK-----
<fanf@FreeBSD.org>
pub 1024D/84C71B6E 2002-05-03 Tony Finch <dot@dotat.at>
Key fingerprint = 199C F25B 2679 6D04 63C5 2159 FFC0 F14C 84C7 1B6E
uid Tony Finch <fanf@FreeBSD.org>
uid Tony Finch <fanf@apache.org>
uid Tony Finch <fanf2@cam.ac.uk>
sub 2048g/FD101E8B 2002-05-03
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.7 (FreeBSD) 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 KnkOqXNQ7FzYXOIPK74= =7TEa -----END PGP PUBLIC KEY BLOCK-----
<blackend@FreeBSD.org>
pub 1024D/4F8E74E8 2004-12-25 Marc Fonvieille <blackend@FreeBSD.org>
Key fingerprint = 55D3 4883 4A04 828A A139 A5CF CD0F 51C0 4F8E 74E8
uid Marc Fonvieille <marc@blackend.org>
uid Marc Fonvieille <marc@freebsd-fr.org>
sub 1024g/37AD4E7D 2004-12-25
-----BEGIN PGP PUBLIC KEY BLOCK----- mQGiBEHNnEURBADK+anixdFH+aSxIGLw1soiwMXSiVPD56dmoA/VAFqrE3XVo/y6 bPqpSNwvvhL8Um2v9G/7EDMorqekYErS3sgUOtrA05NSJlOUJk/97ZFzAlGZ4/u3 CwtpFBdiATaCvAdMocWhxVkyIFvo6AqVNz6RkTldJUuwVzGelXWk9IfI1wCg586A r7CU9HIsVJD7/vIbIIsKDncEAKYh6XKEBHWI1pF3Ony+rPhlXCV9W3yraiBb/YXS XaPr2Wy3XC86ufHZs8ewug40DqcSfRobj7qV5II1CMoVrwhUuJ9Y087ETjt7xC9d xI4jrkVZlaRt0m/LUKLLfz6L9KaLWRkBfFhOjJH6TAv779q0n/KfaiU48Xuue6ff KNDtA/96/oTg9+NWjm47zCdQeyZGzEE27btvzbrLZuG6TcP7gAV0F6udGbImgw1f mKrQZn4ZtVKCKS8IzTn/UM/P26Pn9JOzDKd2voPE9Ee8D0L8ywg3mxmBdm+TY9vs r2OEV89Nc2sJZm5CeiqEvfACI8KwbExqWy5TW7Qz+zLi3zk+ErQjTWFyYyBGb252 aWVpbGxlIDxtYXJjQGJsYWNrZW5kLm9yZz6IXgQTEQIAHgIbAwYLCQgHAwIDFQID AxYCAQIeAQIXgAUCQhzb7QAKCRDND1HAT4506BdRAKCaBqu+lvdAp3fhgIJxL0XY YG6vhgCeIyaLMYFzQfii5s20wePEhG3rfMq0JU1hcmMgRm9udmllaWxsZSA8bWFy Y0BmcmVlYnNkLWZyLm9yZz6IXgQTEQIAHgUCQc2dRAIbAwYLCQgHAwIDFQIDAxYC AQIeAQIXgAAKCRDND1HAT4506PmiAKDanV0mSeUSRJuDmfA13o4ELsQ38gCfaEgn LyzKfRawEhJdqsGPWW/fnte0Jk1hcmMgRm9udmllaWxsZSA8YmxhY2tlbmRARnJl ZUJTRC5vcmc+iGEEExECACECGwMGCwkIBwMCAxUCAwMWAgECHgECF4AFAkIc2/AC GQEACgkQzQ9RwE+OdOisEwCfY8xxYIhN0w9CSUbsN1/EoYp0D+gAoLedf7wiwvmQ O0XpcJaXgtlO4x6fuQENBEHNnEgQBADPHKv6eOKxk2HPrm180rVAM6/d3LQkBEGL Ma4QuSXXbTDXpzfrt6YOLi+ILe/hu5DNnGbQyvkBB1lLdmqW03lat1ape9wytNoA kHOX2C4kom2WA3FvtAoxojmylEn8S0koH7RUuhhTM29rVBap0W+UpwpnxmtbGXEO NciLWy5CzwADBQP8CSp5Hh4+7uXIRpp+RQ8PKJ2vQVnf7c+QTPDN5MLXEv1UK9gK vtb4sms2yr2IuBMP1FSAFN6DpedjoZSKimxqCyMNbyy0io2pMrNDCpqCadKOyLWN gJhJTxE+3kYeZqzZExvf8q+faQqXp91bbS4XZ4JzgAkT3B0mvQ1OHlVlAauISQQY EQIACQUCQc2cSAIbDAAKCRDND1HAT4506PAVAKCWlLnQdfJsRZtt0Q880glcLzc8 SwCg47K+qs1q5klc1cCIaCj+/TtsLCk= =rg/z -----END PGP PUBLIC KEY BLOCK-----
<petef@FreeBSD.org>
pub 1024D/74B91CFD 2001-01-30 Pete Fritchman <petef@FreeBSD.org>
Key fingerprint = 9A9F 8A13 DB0D 7777 8D8E 1CB2 C5C9 A08F 74B9 1CFD
uid Pete Fritchman <petef@databits.net>
uid Pete Fritchman <petef@csh.rit.edu>
sub 1024g/0C02AF0C 2001-01-30
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.6 (FreeBSD) Comment: For info see http://www.gnupg.org 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 oIDNzwMAwpXoLZkEkk/dMUDTsFCy =ZbG1 -----END PGP PUBLIC KEY BLOCK-----
<billf@FreeBSD.org>
pub 1024D/7F868268 2000-12-07 Bill Fumerola (FreeBSD Developer) <billf@FreeBSD.org>
Key fingerprint = 5B2D 908E 4C2B F253 DAEB FC01 8436 B70B 7F86 8268
uid Bill Fumerola (Security Yahoo) <fumerola@yahoo-inc.com>
sub 1024g/43980DA9 2000-12-07
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.6 (FreeBSD) Comment: For info see http://www.gnupg.org mQGhBDov9skRBADzrOg1JwL+kHv1dTePFR2lNrErbMe+WVeP1sdGuKcYTP15VQyJ WV/6ZoUGsihAmFGcGyJuhcUJbvlvqRf4ZlwD80a1y33SNxxsqe8n5dm4Wy9FElL5 bjs4L0kGJlSL8KnYYUTQKEDBcTch3+GTjgS4NQBZWy4h0W6EWqgxr7CZYwCgpeB3 tnDcY3ELA5EP6Bx8wZN97zUEAJo972g6HplZyuyjqqTjdztXNgD+DlsyNpNkEfqs AnZcr4aqEeyMNtGl8gPIc9JwPPSlX5OfmjCm3zWtEjwrHway6YPggXqX8efuY3lo LxVfjRt6NLI0TuV0FhojgHuJYB9RsXQFZxbYH8A/j6jQHbiN3wTyYHtaAJJ/iELg 82oWA/dTeR0kjvjgrfB1MiFCH4AL77bZWuxSv1CvV09DlYtSxfLpyBm4OHvDZmOv V6zT9COM2+f2/EMI15cNllYXB3WnwfYit9tZtEFBl1+OshqYBbcNkser1pBd5jP7 fDAkpDYGx5OgpqAS8hz4XLPZdS/HXSegodYKinU0p0Rzza6KtDdCaWxsIEZ1bWVy b2xhIChTZWN1cml0eSBZYWhvbykgPGZ1bWVyb2xhQHlhaG9vLWluYy5jb20+iFcE ExECABcFAjov9skFCwcKAwQDFQMCAxYCAQIXgAAKCRCENrcLf4aCaPIbAJ41RzBA OuxYwZFUSbMbU5PHENe6ngCfcnVzDC5+lkssh628m3GTG0EjINS0NUJpbGwgRnVt ZXJvbGEgKEZyZWVCU0QgRGV2ZWxvcGVyKSA8YmlsbGZARnJlZUJTRC5vcmc+iFcE ExECABcFAjvw0YEFCwcKAwQDFQMCAxYCAQIXgAAKCRCENrcLf4aCaMcVAJ9brBw2 LPC2RcZpsm5S//dETM/qFwCgiuPpVVwBP7ibzn5xQVNAdB12xOa5AQ0EOi/2yxAE AL/FYZQw0b7NrD04j6dxrp7wBjgd19ux4zQocXgXPlzpBZxQ4A4/icGOLnIU+vDu ltbpf7aMTd/mJokJwx9pE82pOgxk6i42c5qKkwkmjhO2/4FFk8HXco2DJ9roRi0n eBJztXskUY4cVavKdXNeJY2JUeBYvmrnREWG1W2/0ZMzAAMFA/4ytkv46phPokQe s7yy67bEeHiydjvf3uM+v1z3xWoLw5ZU+8hLdFkESpZ7u+qA1mj3i7LNBZhfA5Bt Cgl10v9DWX9cda2HlMjyyI9p3dfPlOcAh69PMwexJ1VYPtizK4ZkC8dNk0rTVPOf SYftSsFGdDbUAq3ZokhjLkVRFY1LxYhGBBgRAgAGBQI6L/bLAAoJEIQ2twt/hoJo ewUAnRRikiShfD9wCuyMazVJ9+FZLWiiAJ0YFgos24sNEFq5rA4I8UZU0LZ5Iw== =y5FR -----END PGP PUBLIC KEY BLOCK-----
<patrick@FreeBSD.org>
pub 1024R/527BC62B 1997-06-23 Patrick Gardella <patrick@windministries.org>
Key fingerprint = 54 7C D6 81 B1 63 D2 5E BD DD 58 4D A4 0E E4 E1
uid Patrick Gardella <patrick@freebsd.org>
uid patrick@freebsd.org
uid Patrick Gardella <patrick@intothewind.cx>
pub 1024D/C6AF4835 2000-01-19 Patrick Gardella <patrick@freebsd.org>
Key fingerprint = 4B2D 3CFA 963B E310 847E 7D6C C072 B447 C6AF 4835
uid Patrick Gardella <patrick@windministries.org>
uid Patrick Gardella <patrick@intothewind.cx>
sub 2048g/DB3B83E7 2000-01-19
pub 1024R/EE2D47A9 1996-08-17 Patrick Gardella <patrick@freebsd.org>
Key fingerprint = A6 DE 3C C0 33 CF 36 E6 D1 F5 BB E8 3C C4 67 50
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.6 (FreeBSD) Comment: For info see http://www.gnupg.org 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 Kt2KhXZ5jxlBX4l9Ea1ZxbUMxuJ3p9Tj =iJ7F -----END PGP PUBLIC KEY BLOCK-----
<gioria@FreeBSD.org>
pub 1024D/7C8DA4F4 2002-02-09 Sebastien Gioria <eagle@freebsd-fr.org>
Key fingerprint = 41F4 4885 7C23 6ED3 CC24 97AA 6DDD B426 7C8D A4F4
uid Sebastien Gioria <gioria@FreeBSD.ORG>
uid Sebastien Gioria <gioria@Francenet.fr>
uid Sebastien Gioria <gioria@fluxus.net>
sub 4096g/F147E4D3 2002-02-09
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.6 (FreeBSD) Comment: For info see http://www.gnupg.org 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 =U7Mx -----END PGP PUBLIC KEY BLOCK-----
<jmg@FreeBSD.org>
pub 1024R/3F9951F5 1997-02-11 John-Mark Gurney <johnmark@gladstone.uoregon.edu>
Key fingerprint = B7 EC EF F8 AE ED A7 31 96 7A 22 B3 D8 56 36 F4
uid John-Mark Gurney <gurney_j@efn.org>
uid John-Mark Gurney <jmg@cs.uoregon.edu>
uid John-Mark Gurney <gurney_j@resnet.uoregon.edu>
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.6 (FreeBSD) Comment: For info see http://www.gnupg.org mQCNAzL/8IwAAAEEANuX7fcIa0S5fVATYQCGwgBJo9DxRr0m/QjrP4dJh/JEIjmv h37FMs9qsMPtyAZWlRSnbVFyQiz5ptFuL1irClW2UHzlLvd5s+pKMfIkJWDTnrvp 0jFebYQt0chZeLcKT9s5sSo9ua+fUumOfaWyubUZPIqmDYqy98Em7wI/mVH1AAUR tCNKb2huLU1hcmsgR3VybmV5IDxndXJuZXlfakBlZm4ub3JnPokAlQMFEDMBDfTB Ju8CP5lR9QEBmnsEALAS5dZyQXxsDAROz+yHizsbgV1Ok9vFwE5en7QnOGcSkQX9 pE7MzzlbpP63toF9zWLF75dbXE5X0yYLoB0pvNi1NXhXqA0YbDeAi1Ed6uBXbomW MDdm0s+O0Y1NfuS0uKiFiJUDOjdBrgEbnmPZM/77dhr5UbmAtQUHFftaQfY6tDFK b2huLU1hcmsgR3VybmV5IDxqb2hubWFya0BnbGFkc3RvbmUudW9yZWdvbi5lZHU+ iQCVAwUQMwF753W7bjh2o/exAQGjjwP+MKiFH9EfOGS7yr5NQ4+vWXuHe1N6fi9N jJsFfzT/RCM/wo/dNG/xhTgdCoCWRt0gKkv3SLEPYGDPDtC3Nf7HV/66wOiYYnxD 3cmjgpLn5u/Ju0oS5xxNb5Ly8EZnfz967lIHjp/qhbZ9o7kO7Nkb7bUgozNqBaRy 9Yo81fVAtrOJAJUDBRAzARCXwSbvAj+ZUfUBAeUyBACKoIXfYBpsKqmmnTg944Tw 5t8lAFZ8qJz42Fjw+hswC6c+7b87imwaH3AjPnFmsA6f1ES7xDHG8RQleDtKsyik gHc9Yos/neVqwfrr4zSV1PdNPPpG5uNT/jI1k1M3pH8kwYdKiwaIHQb5+sGUQsO1 ZoxCdzT7HJq4jJtBGVIRULQlSm9obi1NYXJrIEd1cm5leSA8am1nQGNzLnVvcmVn b24uZWR1PokAlQMFEDMBEHfBJu8CP5lR9QEBak8D/2V+1pP6zA1dvhRLcO2pGldn Q/dcVAAtZIZ7AUUap1pKXZF/Tt4gWKMtAHj01xUbwU1fmI6DF1p4AVjDqOxJDnoZ RD9gv0RiZXdUesXL2UBNHc/7f+amAJgmXNrP/m70ejgzPluniR5hQm76fKYjkxV1 opRhhchTjhrFndoQ9nvQtC5Kb2huLU1hcmsgR3VybmV5IDxndXJuZXlfakByZXNu ZXQudW9yZWdvbi5lZHU+iQCVAwUQMwEQWsEm7wI/mVH1AQHxMgP8D7VM+qUo0qGM uFUKqxoQcDPVKt2W1X6wWTHdj9cxo3oW1tlLEZ24Y2v5v1pzonvseaTjsse134dP a9qjcwXjs/zxXzHoQs3B9BZB2qXaR4T3YeuCjq2qIXGwsrrY5fkoch4OLg0/FOui dmNbFjVQkIma2rIRPa8GhXZJtGl+UEk= =bUtb -----END PGP PUBLIC KEY BLOCK-----
<dannyboy@FreeBSD.org>
pub 1024D/84D0D7E7 2001-01-15 Daniel Harris <dannyboy@worksforfood.com>
Key fingerprint = 3C61 B8A1 3F09 D194 3259 7173 6C63 DA04 84D0 D7E7
uid Daniel Harris <dannyboy@freebsd.org>
uid Daniel Harris <dh@askdh.com>
uid Daniel Harris <dh@wordassault.com>
sub 1024g/9DF0231A 2001-01-15
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.7 (FreeBSD) mQGiBDpjbB4RBADW+4fkXvVjAZ0A1X4wgXJQ4Eyes1LH7sTexP/Zm7sg1D/R9zV5 w2kBwOhICRX/hxVL76YZv2MTNL/d3pV3ZW2yV3Z6H7Pq7s4oVn2q35owUwLQZfSI SBTnBiVN7NqMZ/kzCCdWBwg/4G2FVNFwc7RyuOFQL3ly1PBtgbANbpCyfwCg3QXB K6AtFaEP2MA+SWWHQD2dNxcEAI11cbOHbYU8asIxbqYYyPOMgPsaLlPiTh6JQOO0 2OiGxoQlmZvkhlWf8B9ahCeYoKgA1zPqdHA2C9YMvOV2LvN+/Qi0n3hpqkfM7lLC QMJgm1KxIzccWY9Iz09GRlIFm2JPaCVLsKh1QPW50c3yO9TMSa6lXwiRgvxPz76C JHniBACa25NHH3x8zx5KA0FgMM15Wc481777CFVsKazNay00G0HogSICZ5lHffdi 1O5u+qQHchVKL0Lbe1zhdbVHdSAbEqnKTqseVMQ6I1TVu4gO89B72aY1RxAnAYjh PAb5W/RhZBSR5NDVZyANnqaGE7U7KMqn4/E0lC7w1TzoIZvDMrQkRGFuaWVsIEhh cnJpcyA8ZGFubnlib3lAZnJlZWJzZC5vcmc+iFcEExECABcFAjpjbB4FCwcKAwQD FQMCAxYCAQIXgAAKCRBsY9oEhNDX55peAJ9NKai2qEcFLxzC14qDz80zBGwP0ACf YhsW5qhTw/Rck1Id2W1alUEXMre0KURhbmllbCBIYXJyaXMgPGRhbm55Ym95QHdv cmtzZm9yZm9vZC5jb20+iFoEExECABoFCwcKAwQDFQMCAxYCAQIXgAIZAQUCOmOL hgAKCRBsY9oEhNDX5wXyAKC6VLe3svRc+FgmmjPS/EWvi83sDACeOpmPRbViajOw 4MUhKA7hxnRlBeG0HERhbmllbCBIYXJyaXMgPGRoQGFza2RoLmNvbT6IXAQTEQIA HAUCPSJfQAIbAwQLBwMCAxUCAwMWAgECHgECF4AACgkQbGPaBITQ1+dSxQCgsBwM uDviakYEKswiv6zMHfYBBCEAnjMyu+oxjKOWOo+of2qmtQH2LNg9tCJEYW5pZWwg SGFycmlzIDxkaEB3b3JkYXNzYXVsdC5jb20+iFwEExECABwFAj0iX2ACGwMECwcD AgMVAgMDFgIBAh4BAheAAAoJEGxj2gSE0Nfn6bIAoJlPaQlqk4wbNGoscjigAp0R B9ooAJ41JxSh9w2S16mFTGNKvVpjXw15BbQyRGFuaWVsIEhhcnJpcyA8ZGFubnli b3lAZGFubnlib3kud29ya3Nmb3Jmb29kLmNvbT6ISQQwEQIACQUCPSJiFAIdIAAK CRBsY9oEhNDX558OAJ9iOqCDUX4cdNMSZ1KBQg1gfTn1yACfZNL6BY+mYC+XV83L 7DXacstXHlSIVwQTEQIAFwUCOmOLtgULBwoDBAMVAwIDFgIBAheAAAoJEGxj2gSE 0NfnaM4An1YVu3iDtrG314UIuZoTw3zd9ucxAJ4yg3vWB6ceg06KuyaGTJSdZ1Oa p7kBDQQ6Y2wkEAQA0RSR8vkmX33oyYl+LwlOmemSKbSQFZNImw5TDcRYX83fa1Z1 4oIgJSk1h5l2jx/+29chVR1nTNqPYlRQEDMxVby9rMq2RAnjorM6oDdtIQIBNJ63 vmUcUiORGnKhC0waajpmZibcxoUFk1KcLyfxOT0JTOLgsJfqdqUENIc6NqsAAwUE ALaLYnBOoIr5Wm/KC7wRtS4gHeeOeskZyyoa3+AeBorDl0VvpgYwlNdAaP4xJrx+ CH6UYnxrMgCXG1l4dupkGXOCRPlAcM2ouEyDIGHRTVqHy40khZnWzN7xfZhKNcVd FxeHqOG61ZrhcMboxZrdJC7hK+sYrbngeKRiDs4VRoOuiEYEGBECAAYFAjpjbCQA CgkQbGPaBITQ1+foeACgme+2LKdFkytbn/JUhBqPYVAD8KQAnjP+IDVQ3PDEKRkv AFGJ6i5SrWJ6 =j+GD -----END PGP PUBLIC KEY BLOCK-----
<dhartmei@FreeBSD.org>
pub 1024R/6A3A7409 1994-08-15 Daniel Hartmeier <dhartmei@freebsd.org>
Key fingerprint = 13 7E 9A F3 36 82 09 FE FD 57 B8 5C 2B 81 7E 1F
-----BEGIN PGP PUBLIC KEY BLOCK----- mQCNAi5P5owAAAEEAMIKNuDnLGiTOzk3kGMmz1ii9FbYEM6fKdf0jSi0YSTxSWAn 7EZbBehJ3yTAYuCaGSEGXEWismycc98LnH2Fb0uI2EsJ0CVLJqxsOL3DK8XE0YOk HjSKUpmJkh/BKrMAmUnqhbD6YIBiKnZh3ABt9+a7A+SakJQxvtQ9cYxqOnQJAAUR tFVEYW5pZWwgSGFydG1laWVyIChMYW5nYWNrZXJzdHJhc3NlIDE2LCA2MzMwIENo YW0sIFN3aXR6ZXJsYW5kKSA8ZGFuaWVsQGJlbnplZHJpbmUuY3g+iQCVAwUQQGso RdQ9cYxqOnQJAQFBSwP+IIm2bFprpayabQ/VgXp10OD3sgIEtH8c99sU91LyotNT ySif8DS+ujliDk5wVnaOlzqrV4sga8d2ybM81hdW0nxI9dNxLIp+ti90OecZMF6M 4PlsdkYGnqZDzXlFg4o70GSAWKjL9RTG5JvNnYWS453mCjYc3O4dm+1zzADfgcy0 J0RhbmllbCBIYXJ0bWVpZXIgPGRoYXJ0bWVpQG9wZW5ic2Qub3JnPokAlQIFE0Br JFTUPXGMajp0CQEBkqMD/0D1K1hTJc8u5K3gpsk9LrnOVYpP3zHbSe94oLO5tHv/ b/Y1626xqcMKYfAIk435asuPnGRkMjgpsxPUKksfWMlUqW4aIiX7di6aMuWkgSBI BXguu1Dk/qRImOZkNzWc3V+/CQ+PIauy2rZubfW2+oVkW1iEmmO7I/nPqDxDBNBI tCdEYW5pZWwgSGFydG1laWVyIDxkaGFydG1laUBmcmVlYnNkLm9yZz6JAJUDBRBA cX8u1D1xjGo6dAkBATkoA/9aDk7yNvh6urP9EWcPv5mjJt0yYIIjGpV7VH2P+mTa dK14ah24HSaTjh4psJg/uFw4egAs2XxDKXrf1SHCaaVajC3VQGvKq6V2Ytmgw6qe Rtt+NtrXVJn5EUnMY3+G8YCXugulym6bUWaC1x6PC0Y2IEzRkM3H5Et78gd2zujB o7QqRGFuaWVsIEhhcnRtZWllciA8ZGhhcnRtZWlAanVuaXNwaGVyZS5uZXQ+iQCV AgUTQGsk+NQ9cYxqOnQJAQEV6QP/ZFHefmwjiex7zEU9uhzjEdZhDlM0szKULUoo TB4x3yiXiYlzK2aqppXbV+vl+t2VLhd3McH+SKSiKwoBVWrdqsXguruIjUYGMAJI aE+Zh3OGUs8sZhtQqn3nE4+VngpyXwPwXPrDhQiwwJRxj+01lupNwS0Z6cAPmD4A W1L0aSc= =HsTV -----END PGP PUBLIC KEY BLOCK-----
<jhay@FreeBSD.org>
pub 2048R/A9275B93 2000-05-10 John Hay <jhay@icomtek.csir.co.za>
Key fingerprint = E7 95 F4 B9 D4 A7 49 6A 83 B9 77 49 28 9E 37 70
uid John Hay <jhay@mikom.csir.co.za>
uid Thawte Freemail Member <jhay@mikom.csir.co.za>
uid John Hay <jhay@csir.co.za>
uid John Hay <jhay@FreeBSD.ORG>
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.6 (FreeBSD) Comment: For info see http://www.gnupg.org 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 =l5Xu -----END PGP PUBLIC KEY BLOCK-----
<sheldonh@FreeBSD.org>
pub 1024D/74A06ACD 2002-06-20 Sheldon Hearn <sheldonh@starjuice.net>
Key fingerprint = 01A3 EF91 9C5A 3633 4E01 8085 A462 57F1 74A0 6ACD
sub 1536g/C42F8AC8 2002-06-20
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.6 (FreeBSD) Comment: For info see http://www.gnupg.org mQGiBD0R0hQRBACPEDZc2XKdvIq9F4ofeq/EUB8ISFQ6kaVPcb5ingy5ND+0MUbz K9U+q6Ik8d67KfHHvqGn7XTOXxGu2WS6rIa4ElFHtG/9lpgYtOFRZJxM8nv5+zCn elu18skUNup1y3uIwvhNUY3OPSzVkHC+tUPWfW/8DqdJzud/l8sDFDRtBwCgtixB FHJ2jRXInApVzwLcjpgVJq8D/ixzt0O/Zg2p62/qyAHac7M1sEc2QarCAGwRbuNw jHRtglxQw/GT2NACWqy7lVHKd37ciCrXg9QrTjotJtMcoJbCitYvbQo2RHfEeIyN yw7rffTQ4CpB51KxNhUWHcUfe6Jhx2hgHzehJg7hYnbtSv5hJcn2DXMSHHyHwBri hpldBACI7iJxl2MtFUHBo3XW27WYDzTNTh2LUaMcIaowMW/+vIDds6EI71dCAjuU Ai8DcNacMtE0xRdtNzDMS8vgYWBVLkHv2ENVdLfpxhM72iu4tmPKGF5AXK191dvJ qPge41Z2/57191Xt+keYtuSQDtXwZfSu1uLOHBa0BBvmppBOtrQmU2hlbGRvbiBI ZWFybiA8c2hlbGRvbmhAc3Rhcmp1aWNlLm5ldD6IVwQTEQIAFwUCPRHSFAULBwoD BAMVAwIDFgIBAheAAAoJEKRiV/F0oGrNMRsAnAlWdC5LkmEF3hZjNAIA8gMxkfnZ AJ4k6LXdmHMSSPbd48MbDYq67yzOG7kBjQQ9EdIrEAYAib54xuFqjHpvLxXmqFRl qAgAD5XpavuJisxGjfm7aTVWIpR/OOVFYkW59YInHM7dDHL0Y7tQETeEKf9pj6kF TMyWFoBjtdazqSmq2YXOvI00N27IKT9eqxJ/qR8QgIqBMNkraP9QKi60ASDIRUtl OZSfokSbAKkZMTyS086CgWw0bCPXRCvQLHDjga3KCbht0AjrZFkGmi6r4+rXFnT6 D3JrNSQ0Hj2qFEixHtZvXTsqgsEkOEtoe5taMFSygM0jAAMFBf97Ip2a/kPkXNt0 p+2xmWIFEDim7J9Cwl5viTb1t8fOKx69hFDQ2BwPNDZd1HvlrYTpuJ23uTrDOZsw IT/wVc/IQ9nn4+mkxOmq9iTHCBS99OXz4IsODT3W1sgzUfl+mdqJP8xfEnsyqy6G ivOoR3QdZg7rxvOU98HhDQ1iJX3rCtLNFGisrovDF33oHMEE4oHvSMXeg65JXWiU EpEpioINjrA3P+TL+fMv1tb4+wSUPqTWX34Gx4UfDKnMedxl6j2IRgQYEQIABgUC PRHSKwAKCRCkYlfxdKBqzVtaAJ42mqzwmJCpk8fdsfkHUt5uGTN8sgCfdmDni1OD NWQi1mhQOXZX9oGgyso= =PTeT -----END PGP PUBLIC KEY BLOCK-----
<mikeh@FreeBSD.org>
pub 1024D/CDECBF99 2001-02-02 Michael Heffner <mheffner@novacoxmail.com>
Key fingerprint = AFAB CCEB 68C7 573F 5110 9285 1689 1942 CDEC BF99
uid Michael Heffner <mheffner@vt.edu>
uid Michael Heffner <mikeh@FreeBSD.org>
uid Michael Heffner <spock@techfour.net>
uid Michael Heffner (ACM sysadmin) <mheffner@acm.vt.edu>
sub 1024g/3FE83FB5 2001-02-02
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.6 (FreeBSD) Comment: For info see http://www.gnupg.org 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 2Q8= =/joR -----END PGP PUBLIC KEY BLOCK-----
<mheinen@FreeBSD.org>
pub 1024D/116C5C85 2002-06-17 Martin Heinen <mheinen@freebsd.org>
Key fingerprint = C898 3FCD EEA0 17ED BEA9 564D E5A6 AFF2 116C 5C85
uid Martin Heinen <martin@sumuk.de>
sub 1024g/EA67506B 2002-06-17
-----BEGIN PGP PUBLIC KEY BLOCK----- mQGiBD0NjbIRBACZTF4rK66+y43uXsV8CHSefx5lRHaLPFMNga+sUBRIFcwu9WbS KSP/r60Gf/mNK4EUX3/+3gVljrgpAbQL9X9MV/SO50aZM8JMrUkUwjuzzzFKplT7 bdB2zWhexWemFsE0F1G5NpxkqMg/E0aiZb5P9MVJyGLlF1hCwhWsNG0OewCgzQ/b yAEMk03PPk3DOaM4d/Vdf38D/j4O+TJPSjMf58wRGkrT+BmLCvFvg1OsUOMgyQPC Y07yO6WmSiZV5ynqb4bS5m3jfQmG1I2wK+dIf8SHyaVgqZiUpfqrsFV2qwfZXcod C8a8b/kmEbdMk1j+jZ8qxSScrKCHKqdEs1UihCt/F1kVVd8gqYbWouICxF4GoU4Z ANmHA/4xVNIInKVghFk9lMaK9lDgQs02laaTWLWzcSfe28ADds3Jdur0Ox06tgeU zdktWQvRYpIjqiQCCFLN18l6Lc5qyTg6fnx2yWpWJMb/xumUz7A79X0TBN8WG71n zfJLHtn7fCjsi5009s7Ahu//Q7pGN8FvkrZHZ3xNw+3pAaoawrQfTWFydGluIEhl aW5lbiA8bWFydGluQHN1bXVrLmRlPohZBBMRAgAZBQI9DY2yBAsHAwIDFQIDAxYC AQIeAQIXgAAKCRDlpq/yEWxchZjRAJ4s0v1VXJmkm7kj3kMM0Z8xMNoJaACgkcMu T1ID/2v+A1X7+suOzrWMr5aIRgQTEQIABgUCPZGohAAKCRCteU9X9uLnUzW3AJ9T 0Hzs6ZZq3HAYuSVkLReaZEhyGQCfb7goCt5RLbxx+3AMyyX5uh1boQmIRgQTEQIA BgUCPZGlrAAKCRD5Ay7lt7i0eYdWAKDEeKMbkRTSZKsKelQwiD+T3me3tQCfVMLi 9mkjolOAXpAOVX3Igy5QHUS0I01hcnRpbiBIZWluZW4gPG1oZWluZW5AZnJlZWJz ZC5vcmc+iFwEExECABwFAj/Q6/UCGwMECwcDAgMVAgMDFgIBAh4BAheAAAoJEOWm r/IRbFyFjSMAniK+uu6ts+tLchT7+npgPJ0wmyCXAKCmCmXrSUTnPG5DwiVD66h6 aL2GHbkBDQQ9DY20EAQAh4G77oKy6pQB1+dhbbLsfb3UeRWv7i/w21Y1tSriZ5gm HhofJRuczvrhI9V23wRVOKs417TGJzytDIfp/huycYMigAQXikmFBJSqIC2ktJEi 0DGhhne4XBdJENiHV8rb3/mk+Ffes/88DmoU45fpAwY1YN1jH8WO5mEq2aKCjHcA AwUD/jBsaAoUeNO00hwuZuWYNM4nvX57nptObVzP54/TfKs4GmdWzcfI2JB+5eFp rjtNCK+tosTQd73VzMWKk0fwiIew+GsB+g/ibK/WJW0lS6fktW2nPG2mGRblLtf4 8W4ZmtZUqFTBSbmZOcsxQ/LahRosX82NbQyFPwuFMEBqYho5iEYEGBECAAYFAj0N jbQACgkQ5aav8hFsXIU0ogCeLnzxBftyPv5iS52Ear+q/mPZL7oAniB0B6mFArQV gtLJNL6KejWqSh3V =Z84i -----END PGP PUBLIC KEY BLOCK-----
<niels@FreeBSD.org>
pub 1024D/5FE39B80 2004-12-06 Niels Heinen <niels.heinen@ubizen.com>
Key fingerprint = 75D8 4100 CF5B 3280 543F 930C 613E 71AA 5FE3 9B80
uid Niels Heinen <niels@defaced.be>
uid Niels Heinen <niels@heinen.ws>
uid Niels Heinen <niels@FreeBSD.org>
sub 2048g/057F4DA7 2004-12-06
-----BEGIN PGP PUBLIC KEY BLOCK----- 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 9RkYrA9581ilMd2RCkU= =x4MH -----END PGP PUBLIC KEY BLOCK-----
<ghelmer@FreeBSD.org>
pub 1024R/35F4ED2D 1997-01-26 Guy G. Helmer <ghelmer@freebsd.org>
Key fingerprint = A2 59 4B 92 02 5B 9E B1 B9 4E 2E 03 29 D5 DC 3A
uid Guy G. Helmer <ghelmer@cs.iastate.edu>
uid Guy G. Helmer <ghelmer@palisadesys.com>
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.6 (FreeBSD) Comment: For info see http://www.gnupg.org mQCNAzLrzf0AAAEEALuGJUgTVleE9HeqPAi+AqBDMMfa76kC63xx98Hqv1N9TlT3 jlWVShX7Da/9h9WgK98wkb7613Ur7dPl2qVcSns5w7MCustbtt4YEaQwXZ2jOEZf snKt82+DYxZRyfUlY4h/8WA79R8BwTGd/l6g3kDoQuD/446BT8c0Yd819O0tAAUR tCZHdXkgRy4gSGVsbWVyIDxnaGVsbWVyQGNzLmlhc3RhdGUuZWR1PokAlQMFEDLr znbHNGHfNfTtLQEBxIUD/2Lk7Ds8Rt5ZPVNB2Xv2kzEByndv+r1FUDSDcWUn7MaG HdgIqfkNespNzv8K7ORW+qrgIAtCRGXhc0Z1q1/Mb3kzC0g4UW5BuleZEur8Ys7t lc13ZV94Wb/rVEnY5wh2s3mCmMeXVA9CAiNBzzI9O1RKVZrLLYJk62ysSoq1os+A tCdHdXkgRy4gSGVsbWVyIDxnaGVsbWVyQHBhbGlzYWRlc3lzLmNvbT6JAJUDBRA7 8tH9xzRh3zX07S0BAdUDA/4poipXJFYG6r7+Hk32P5unYZt6dJZ4qSwsnc4+DVuk krv5L1jC8Wg/Ojerk2hYTyArM7xQkw0tELOADL2KBUlHp+Ipz7UuO55n/9aOHnWr YJLjT3+9eliYkPqJ4t7sHqlCeuyKc7HkoaaN1ErJTmLLy/Jfcx8BsyVsgihI9V1s VLQjR3V5IEcuIEhlbG1lciA8Z2hlbG1lckBmcmVlYnNkLm9yZz6JAJUDBRA78tIj xzRh3zX07S0BAXQ6A/4zKB/ROfSAUmVQGm0tH1IC4lZX1qV/PZ4z2KUWQPmXP3jr jzYFdlAPaUNIwVqW8Mwj+p9njnL/Ltd3NzAjTP2I7bSzBtg4NcEBRNclOOnbCamX B4mSGt07WgfT1QGCY8HyKXNhUBbqvPShfeH1OM7iyooLWU79V/1v8utB/mHxYw== =nrvZ -----END PGP PUBLIC KEY BLOCK-----
<mux@FreeBSD.org>
pub 1024D/881D4806 2003-01-09 Maxime Henrion <mux@FreeBSD.org>
Key fingerprint = 81F1 BE2D 12F1 184A 77E4 ACD0 5563 7614 881D 4806
sub 2048g/D0B510C0 2003-01-09
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.2.1 (FreeBSD) mQGiBD4dlrYRBADhXves+DDbhv8dD1LyC7e+RIASp8rEN0mJDVarhEy45KxRZcD2 hE9dLXZU/5hcdK7yfatneg5xGFiedFJ+u/HcsMkxeb60+RUcF6Ec5L8PJmCwIQl3 3xP7UmC203YufvyidQSayOk4LDyg5WVGEXiN5KuShJC+feAwvtAao5eHnwCg5CmE y6rO8Bh/K2MQxP8CXCoLG80EAINd8twMsRIIqAxtVWeG0yudtgYdvhpbGrNKoq2b cxmfunLAQmHim1jL5run1St3ZACyuP4brckPiBAOxVoRcIMOGPk04Lw3blKQ7u02 6aOKKlGvW2pF5/Wh6v/q7gzAucn1HJYcGK7Xc8IvfdIZJl/tTeCo0/smxND4EWhU C94zA/0bvNhgntEwLF8x6UJnZXfQ8/LGl/NkSTyTMA1QqRrrik1oN4mYOAHE05Y4 Oija6MSgD8YDRcrxxr8Dwh4pqS/+FlEsV5y4A4OoYbPW5L6FAbEpKO86jbE3FK20 lX9Li5+woBWaTuLRcU2Tk69WLeOTdOrs+f50S1xWB4DJKBjmu7QgTWF4aW1lIEhl bnJpb24gPG11eEBGcmVlQlNELm9yZz6IWQQTEQIAGQUCPh2WtgQLBwMCAxUCAwMW AgECHgECF4AACgkQVWN2FIgdSAaZtQCcDxSj1KNFQXWXPl+U27Sl2/IbKEgAoNDq Yn86zUh4NPJZJb3P174CFRK0uQINBD4dlxYQCADaMWMhYNWemjrdioJoZU3vYkup IcQg422OZoxWYcUz6zKVHZuPdXSAFO+Edrt8QwvYrjhSiOSF9NNnFgNGMBGmqOg9 Kfk5rIKnENNQP8H8CZtzlDjJXVoMAeTfaeV9+ztHwWKk6XagjLApl9Fx42Quu4Po JdvJNHhq5Bf299jecRsWmSo7DtpNnzGC2HFWRkGdkkNmpK7hFe9m3YsFuP3nCFps RXCFMx9t2Bneh1eM+NqogjON+vyZzOUB32WY+x9Kz6Xf29auU1PSNYz+1LC7JAYk f4CrFA6wexQHKe/nXwlik3/JeFSPAsp/VsmvaHOenZTOfmtBT4ruOwqn8DGzAAMF B/4tHAo7/sAMgvkz0qHAxV1DjOjB5AQSs4phksYWYN1uaJq2//oD/jjifmmkhAq0 JLEeKDquvuNot9dtJ/75DF/XNa0Upt4Hq509Wm4o5NBN/CxRzMn6oU+K86S6RF1x JidNNI+CsTfdkNnCn0x6OjRsG0j+CUbwRrs4CJ/7ZWkuMCclLBKoI+rAwd5YM4eI noSrSZ4/2Uct7CyVm2aGIh5ofR75L7k92qZ/D5hN0wwKrL42bO8gJqPGPgsCtr9m OcT2DtOxkS9ir2QRyD7SelKM4pmSbxvk8S/IzrNS7dvKiO0xQXsvf+sG9rZOJ2vF i3in0uB9SeXAzsqNCqtEkSbeiEYEGBECAAYFAj4dlxYACgkQVWN2FIgdSAadQACg z3dGbsy32PBhRn/t1lXp1120VrAAn04hxsFX0HEKt6sqAcpIuzdTVrEM =8gWX -----END PGP PUBLIC KEY BLOCK-----
<mich@FreeBSD.org>
pub 1024D/0F55F6BE 2001-08-07 Michael L. Hostbaek <mich@freebsdcluster.org>
Key fingerprint = 4D62 9396 B19F 38D3 5C99 1663 7B0A 5212 0F55 F6BE
uid Michael L. Hostbaek <mich@freebsdcluster.dk>
uid Michael L. Hostbaek <mich@icommerce-france.com>
uid Micahel L. Hostbaek <mich@freebsd.dk>
uid Michael L. Hostbaek <mich@the-lab.org>
uid Michael L. Hostbaek <mich@freebsd.org>
sub 1024g/8BE4E30F 2001-08-07
-----BEGIN PGP PUBLIC KEY BLOCK----- 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 nQO5zgCfXsb8wtA8I0ngWwOQxrnRRE7+Smw= =j3Mm -----END PGP PUBLIC KEY BLOCK-----
<foxfair@FreeBSD.org>
pub 1024D/4E9BCA59 2003-09-01 Foxfair Hu <foxfair@FreeBSD.org>
Key fingerprint = 280C A846 CA1B CAC9 DDCF F4CB D553 4BD5 4E9B CA59
uid Foxfair Hu <foxfair@drago.fomokka.net>
uid Howard Hu <howardhu@yahoo-inc.com>
sub 1024g/3356D8C1 2003-09-01
-----BEGIN PGP PUBLIC KEY BLOCK----- mQGiBD9TDBwRBACs0PcLGuginQVidy1QScHuKS9G7gd8smYI2FcSsk/AkBhqIkWv hieu+iXlpxyZYCDDPKPhieDLkTHc9hYOGG7oTJhBMXUrUqBIk+sqeeUAl/eh0grX wUU2khj8EkYC1f6p9AKu25zoyXHxjnKulMhrZRIItg7jVJLaFQn2A9KCkwCgyVeF jCegTvZWikBuoXmDI/K3OuUD/19Za3DHV+H0dmfAG7JdVwTW7mJ3nCWJFvlpTSSU 9Di4VCVj8kUGmo/kRgpZ6gwlCaPmwh/wWiT/vHVQqdd+EH/k/ITs+zWrPOnWCxLY zV0BEKtW4kdaP5H9ttNh3Wj1GRpyxh/FrMP7zJfdgze2WoRY57j+H9Kuw2s/42RU zYDAA/9wIriNXAj6pFB+J2sCqYXIMNDNDQh6lYFNFgTS/WPYJoA8PWY62oFc0V6n ES8GOXjyEya428vedVy/G9kj7cB/IiTTy8Hj7JjhUk/rSIPXMMtNyvM6vQ++f1IV 1qSzR9sijpmpk/M2RusUQwBP131PnCzSCmAZB8gvcNSlbA9gnrQmRm94ZmFpciBI dSA8Zm94ZmFpckBkcmFnby5mb21va2thLm5ldD6IXgQTEQIAHgIbAwYLCQgHAwID FQIDAxYCAQIeAQIXgAUCQh1SIQAKCRDVU0vVTpvKWcmhAJ996hkp7RKzCsO1R4wh 81QBqxZ87QCdH2JXwcclPFAF/XKpS5kbQbKdW8a0IEZveGZhaXIgSHUgPGZveGZh aXJARnJlZUJTRC5vcmc+iGEEExECACECGwMGCwkIBwMCAxUCAwMWAgECHgECF4AF AkIdUuwCGQEACgkQ1VNL1U6bylmL+gCgle9BEVLP/FKDTEsz6pYH/hdVMzgAn2kg KyplWAdJKjQ4AHlKOzi1DKj0tCJIb3dhcmQgSHUgPGhvd2FyZGh1QHlhaG9vLWlu Yy5jb20+iF4EExECAB4CGwMGCwkIBwMCAxUCAwMWAgECHgECF4AFAkIdUiUACgkQ 1VNL1U6bylmacACglEvdvs5wMSB3EEP4qp46uKdXlt8Anivwqzf9dhjw07omH35k Ll7D5wGouQENBD9TDB8QBAD+sEewy1REDPQWycqdZVWzxmiS1X+TzSAgfcc7/QKv AZEsGADvhHcvaACTBuYRVr8DyzUxFUxeNByWSkLe7N5Hmaqauw681zsI+2osfXbW Jkp3JUybeFSIN5pacLNP5+DEAOzzphCF8ALv9H/MB8J9dRhZwDkY7SKt/cSNh4Cz xwADBQP/aD4exhzoF1iXR4879xEAAsRy3CCaoiPNeE4Aj9mWmjqEMzWYOjDeZ2zF W8Jrn2i+tOVGFpg2FKwtuqU8JRs/lqbedYUlM3UQl2pqGSV2tAziuLKKkzPnKWo6 79hIhrjQCEPk1MqipoL6l8qZb8vbBpoCee5NF772jR85ai0ZdGmISQQYEQIACQIb DAUCP3rhagAKCRDVU0vVTpvKWU/OAKCE4tEk79yRFtmSNNa+ddafxcuyagCeI9MA byQOCAi708pPSIquH3oiM8o= =P50z -----END PGP PUBLIC KEY BLOCK-----
<jkh@FreeBSD.org>
pub 1024R/8E542D5D 1996-04-04 Jordan K. Hubbard <jkh@FreeBSD.org>
Key fingerprint = 3C F2 27 7E 4A 6C 09 0A 4B C9 47 CD 4F 4D 0B 20
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.6 (FreeBSD) Comment: For info see http://www.gnupg.org mQCNAzFjX0IAAAEEAML+nm9/kDNPp43ZUZGjYkm2QLtoC1Wxr8JulZXqk7qmhYcQ jvX+fyoriJ6/7ZlnLe2oG5j9tZOnRLPvMaz0g9CpW6Dz3nkXrNPkmOFV9B8D94Mk tyFeRJFqnkCuqBj6D+H8FtBwEeeTecSh2tJ0bZZTXnAMhxeOdvUVW/uOVC1dAAUR tCNKb3JkYW4gSy4gSHViYmFyZCA8amtoQEZyZWVCU0Qub3JnPog/AwUQND7kZgis sbaj1yqUEQIhvACeJ58983s/0jjThuj6WeTP6hLZNHgAn0o2KINvhw+Oc8uQk5m2 aTiVgVQxiQEVAwUQNcJNdAyPjrKngh89AQHA7wgAg3QnT0BcF/zp0VRMUZwAysRC o4Xkgv4oaisCPO5jERGEp8NlXuMD6wJCrGRZ9xVwTbSRXJVirNkiSKj1rnNc/pPA DbjsmQ+3nhLU+YwNgc2VEhiVpeU2iOL7ircc/YN8epdFPbzn2timb98b+/qlaSiz m+g8pxnY4USn1b4CnzyirD7mvHhV61k0mrUSmaKzgg2Ppeo2qPzn4w44hgT5/jjm iEMzoH8zFrN3pwcUYYhH5rNWNnqUIMwuPOEHn4Wp+sMti4yOqQxNHnP0Mv6mxS8+ UKRhtDXU0Ra0SaIhaNRw0k0YLEbO/lteTRc+7cAPBs+QUTa6xbVxIzsBAWLC7IkA lQMFEDF8ldoff6kIA1j8vQEBDH4D/0Zm0oNlpXrAE1EOFrmp43HURHbij8n0Gra1 w9sbfo4PV+/HU8ojTdWLy6r0+prH7NODCkgtIQNpqLuqM8PF2pPtUJj9HwTmSqfa T/LMztfPA6PQcsyT7xxdXl0+4xTDl1avGSJfYsI8XCAy85cTs+PQwuyzugE/iykJ O1Bnj/paiD8DBRA0FhC0XatM0mFMec0RAgaSAJ4kHkYXQO/74W5m/7ZvQa3CPR8E /QCgpHafK/S6PWQsSOChmVjwrZDVP8qJAJUDBRAxe+Q9a1pnjYGyp3kBAV7XA/oC SL/Cc2USpQ2ckwkGpyvIkYBPszIcabSNJAzm2hsU9Qa6WOPxD8olDddBuJNiW/gz nPC4NsQ0N8Zr4IqRX/TTDVf04WhLmd8AN9SOrVv2q0BKgU6fLuk979tJutrewH6P R2qBOjAaR0FJNk4pcYAHeT+e7KaKy96YFvWKIyDvc4hGBBARAgAGBQI1f/BdAAoJ ELwCvAMsr1lwqUEAnjOz1VWwJeI2QZMNEHO8RLURWHSYAKDqG+S3NzCeiKM3RRzc FubwdsfYLIhGBBARAgAGBQI5ZAxAAAoJEMN1Z4b84RmYUt4AoOtidEj2yIZubvvT kB+moQ1+ZscyAJ9dhz4GLNev7zNNfdAKi8JqoqfMlokAlQMFEDF75Qb1FVv7jlQt XQEBdn0D/0X2Auka6RU2R46NqrFB0kZNL5rGH8BuTRz+cqEATLGkCXknJDeJ9iTo EeE++VOL0utmhcYDyyT95Th5FNlXO8YQLgb7Gxq+UT/HOS7zznlBMs+mQK6dSlB6 7XDNoitRQTpmOHTmKYVsljJA4GBMWm6pawKuxSmX7aavwgYjEbmsiEYEEBECAAYF AjmtSQAACgkQLKRaTx+AVKjiTQCg9FfHlNeMts2GcXWplPQya7GEQtMAn0nrzupn fRNx6+Gi0Km+WSlUQkMF =ZyVN -----END PGP PUBLIC KEY BLOCK-----
<ahze@FreeBSD.org>
pub 1024D/3C046FD6 2004-10-29 Michael Johnson (FreeBSD key) <ahze@FreeBSD.org>
Key fingerprint = 363C 6ABA ED24 C23B 5F0C 3AB4 9F8B AA7D 3C04 6FD6
uid Michael Johnson (pgp key) <ahze@ahze.net>
sub 2048g/FA334AE3 2004-10-29
-----BEGIN PGP PUBLIC KEY BLOCK----- mQGiBEGCy1ARBAD/K2SbL6XiTJ3Rn/weuN/L78ROUltIoRGOkZE4971fLcAbtIsf nANWDrpDqbhLgEbZLeCn/EIWOPqrYyKpCGu/IoZ6kx7UPtUH4eooJBarrrQPJVV1 mfW5ktDry3AoiaUH+jL47AxFCb/bh7Rc11vrhLKdnc74wI+nu2cyk2llkwCgwX78 nlN2qTrbXxOEAPpJjMontfsEAL+4sS9DOay7NkZq2B2p9AZnSsXQg6/r8Epqznqj yPQBm489UcIZy2FiBwaUR7w0fMh5xNX0FE3xFiTd4VUTgUJUSqpYtdfI7IHvJXml P/VK14CtgRY2B24wpDPMae32hGBFUwSE9Frb5NiKlxMC4+fR71wZS7MtxTnwJ1v/ MoVaA/9FyoKCAw3Dqnf5W89dj5W5x35jLKSLobEhhUB2S2LPiwBa5A79euMvgtk0 gKeh6IslXKOmCO148ws7HSaErBIBVBDpfOsqcQJTcd5lvEbslp+z2oCKeQK3pgQ5 aEHp8IJ3YgQEHz+YityOF0jCMGNJTFAz18U4RzVxSe55iyT/17QpTWljaGFlbCBK b2huc29uIChwZ3Aga2V5KSA8YWh6ZUBhaHplLm5ldD6IWwQTEQIAGwUCQYLLUAYL CQgHAwIDFQIDAxYCAQIeAQIXgAAKCRCfi6p9PARv1oW2AKC0xjNgjhL1EHPtFOXH kGz24lF4QQCfQxkoJBq0CkLQrYvdA3MLP+IJ6ba0ME1pY2hhZWwgSm9obnNvbiAo RnJlZUJTRCBrZXkpIDxhaHplQEZyZWVCU0Qub3JnPoheBBMRAgAeBQJBgtexAhsD BgsJCAcDAgMVAgMDFgIBAh4BAheAAAoJEJ+Lqn08BG/W4JwAoJaU6MbisTlg4EMF jfE+wNptwO4kAJ46A0W6SiLWbK09gu7YlgfLgdYAmbkCDQRBgstcEAgAvD4PzCsh muLtNkPVKSlk2eZbqlIuyapbuIo6rHk8fo7fkfqVOOrnGOrAT5/sflmnG3H0BLvF 4pkk7tyRtg3hz8qGACCA4SRf48TxRERpIUoW5R2cVBsMBTnpspRaFu8OdBL0dwXs LmH797gxDXCGXzSU5xKBSQN4LfoEuLr1qQmPbuPW+Rdi3hrdk1eGsJ03rU5RExzQ ck+J7a5VWsyghNCSj1Rzuw+0OVGBijJW51FD9QU+Eqb3seL7E19mWC3FMU34RFwn 5lbxolY43iPV0jc0MFcV4POHUSZ8ot9xbQpcAClTyXZh21QEIFzYjJe9ZeVWKOqH UZS1naB4k98G6wADBggAnRlPolzcjJvqvv5Hfv7oDeDARNxqeKTj+fPXIHR0Gh34 8HMfmxsFzS6nsrrVc43Q6Iaso5hbdP4UvE0/HzhPALzCTeZGpZF54pffg9Pqb84U p+D59I+b88RDBvvfwF0OBg6du08Rdkv9JfG3R+QZembK+IhUa5yxhtfbQmI6Y01r phtx4FAKZw4Xp2eb7IBoZWktfcOE99UJcl9hUmBHJXRznQoCHz5OwAKA6a/0b7j7 B3bPxj+tLlQksdmRbEJKVBa3LQm09PkxfZj8iahvQbp23p5VSJDKzNDrgmsqaCpV CFNgMvYLvtxC2xA0uNtaRpdZRLS/11NUj3oJIULv8IhGBBgRAgAGBQJBgstcAAoJ EJ+Lqn08BG/WFK0AnjdWWBxG7slwI8u1W+7uRsuh6NXMAJ9r+6Br6mlEtsoWrMel IlhG1mVq6A== =I7wA -----END PGP PUBLIC KEY BLOCK-----
<trevor@FreeBSD.org>
pub 1024D/3A3EA137 2000-04-20 Trevor Johnson <trevor@jpj.net>
Key fingerprint = 7ED1 5A92 76C1 FFCB E5E3 A998 F037 5A0B 3A3E A137
sub 1024g/46C24F1E 2000-04-20
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.6 (FreeBSD) Comment: For info see http://www.gnupg.org mQGiBDj+agARBAC1AfvgGQEVdLwS0dirwaN+pDDWWiaSWBNRNo4T4KKG2vyhhnUi f2PcjPx8rYLvbokJFltoTWos3lS8hD8PZGBDlImOPzffdm/GYEmr1mE8fQvzjdKD iOTqQi5IYYhLZIMmUpBTK7XN2zrM8VrkgCpb5TYtBrQUPheWs/SZ31EvLwCglUPA T54Joolfvk0Y8I6dSGYctpUD/3teZiYwem99CE3b1tsqavQ1MUfjwSPZQq8wjVe8 GZUtwaeExugAxNjXIJeXiaCij7S6JSTS0ytyxZ5/O1QFmBhuD/7zjNFD8yB8nu8x slma7mVhMuhqkwU06hTkp6MNNJ7kRItoVETtLqR5mW+0UUSZyePQFIH9U7TKPG3W vYMIA/9btsMQD/7QA9p/m5OP4sfdVdNCZ32tJ534bMjDYyf/P8k7QzvDWU8f7lbk 3vX5pSmHplws0PwSZITmRarMdEH9ucP+24m06MQ7YmDYyLlUCestT2gAxnB5/X1h fJnmdCLi/Vt19WrVM79ebddbCqCaoz0xv+1qOQmPue/vKXIH87QfVHJldm9yIEpv aG5zb24gPHRyZXZvckBqcGoubmV0PohWBBMRAgAWBQI4/moABAsKBAMDFQMCAxYC AQIXgAAKCRDwN1oLOj6hN4YuAJwOTOURcLpgAx4HT43jNxDYCsT7DACdFdGCwsi4 w5ZiCeoizmoBMFvYTa65AQ0EOP5qIhAEAMAerdyvcs7DOxpsli24gkKJxCwHSq9U 23k283XpZHOp/0eS6WEJMHMyQ7BRrx3X6mkSgBEnHdO6MetBQjOHdjSb8ycotrJa H9eMkZ/Iky6dbiWpPLI4ytS4Q8Z4oEGjUTm7pJiE/pgmaCX/kv0WMs/35En+42sY VoVU9bDI+X+3AAMFA/435RbM6ywO/kL8D3lhwINGEIqmxWpJDlXPPJf2pLiWZZVK MLGkHOTe2kUdd+E6WcoRZdGblOKxLACrlKpJa91aw1ftQT6rt0k8GDCGLT/33FWx 2IRSf5sHmz8IOm6L8TcZU31hdWqpDLmiIj+IjUCx8+eAUjZcVRoj6BYnWc1Z64hG BBgRAgAGBQI4/moiAAoJEPA3Wgs6PqE3PKYAnikfYo//UA7/jrDuTXzqPmi/Un5f AKCFsfcXDbLGfWaAqe2YzeDR2Z55/A== =N4HT -----END PGP PUBLIC KEY BLOCK-----
<phk@FreeBSD.org>
pub 1024R/0358FCBD 1995-08-01 Poul-Henning Kamp <phk@FreeBSD.org>
Key fingerprint = A3 F3 88 28 2F 9B 99 A2 49 F4 E2 FA 5A 78 8B 3E
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.6 (FreeBSD) Comment: For info see http://www.gnupg.org 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 =GwRf -----END PGP PUBLIC KEY BLOCK-----
<joe@FreeBSD.org>
pub 1024D/E6B15016 2000-10-19 Josef Karthauser <joe@FreeBSD.org>
Key fingerprint = 7266 8EAF 82C2 D439 5642 AC26 5D52 1C8C E6B1 5016
uid Josef Karthauser <joe@tao.org.uk>
uid Josef Karthauser <joe@uk.FreeBSD.org>
uid [revoked] Josef Karthauser <josef@bsdi.com>
uid [revoked] Josef Karthauser <joe@pavilion.net>
sub 2048g/1178B692 2000-10-19
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.6 (FreeBSD) Comment: For info see http://www.gnupg.org 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 p5J1gj4xWykgTuA= =U6zf -----END PGP PUBLIC KEY BLOCK-----
<vkashyap@FreeBSD.org>
pub 1024R/04FCCDD3 2004-02-19 Vinod Kashyap (gnupg key) <vkashyap@freebsd.org>
Key fingerprint = 9B83 0B55 604F E491 B7D2 759D DF92 DAA0 04FC CDD3
-----BEGIN PGP PUBLIC KEY BLOCK----- mIsEQDQwdAEEANxnThVC8GNO9VXTjWFhJh7XgMLHf9jDd0B1804WUqc3c76r8y/k AXZ8e3kNH1rpa+VJ0rYQnurQg5BeFQny8TzU6PC9QSdqNKSCvhai6B+w3t15sKJK nGZ7DwyoyuShMFNMVF250KS7dEZnYy8yrtopCIWJAWzuzuQQtmUYk4B5AAYptDBW aW5vZCBLYXNoeWFwIChnbnVwZyBrZXkpIDx2a2FzaHlhcEBmcmVlYnNkLm9yZz6I tAQTAQIAHgUCQDQwdAIbAwYLCQgHAwIDFQIDAxYCAQIeAQIXgAAKCRDfktqgBPzN 031cA/9ZuwCRbYhTHWzOhQuT8dm7Bby0wEq+KzkULXd/ExgxCu/54t9M7csD378X /Fg2erLP2J8cYIcVXmdtIJO8AwZRw5GgmVP+h1sEY+KT8jiJNlX2hB/9qCmng3FY ItLBY2t7XVmTPMw8BLANE7PJ1LKT/OoUHEk0OjK53KKGNU2oUA== =VzLE -----END PGP PUBLIC KEY BLOCK-----
<kris@FreeBSD.org>
pub 1024D/68E840A5 2000-01-14 Kris Kennaway <kris@citusc.usc.edu>
Key fingerprint = E65D 0E7D 7E16 B212 1BD6 39EE 5ABC B405 68E8 40A5
uid Kris Kennaway <kris@FreeBSD.org>
uid Kris Kennaway <kris@obsecurity.org>
sub 2048g/03A41C45 2000-01-14 [expires: 2006-01-14]
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.6 (FreeBSD) Comment: For info see http://www.gnupg.org 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 =nTL1 -----END PGP PUBLIC KEY BLOCK-----
<keramida@FreeBSD.org>
pub 1024D/318603B6 2001-09-21 Giorgos Keramidas <keramida@FreeBSD.org>
Key fingerprint = C1EB 0653 DB8B A557 3829 00F9 D60F 941A 3186 03B6
uid Giorgos Keramidas <charon@labs.gr>
uid Giorgos Keramidas <keramida@ceid.upatras.gr>
uid Giorgos Keramidas <keramida@hellug.gr>
uid Giorgos Keramidas <keramida@linux.gr>
sub 1024g/50FDBAD1 2001-09-21
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.2.1 (FreeBSD) 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 =AAq1 -----END PGP PUBLIC KEY BLOCK-----
<fjoe@FreeBSD.org>
pub 1024D/414420F4 2003-04-29 Max Khon <fjoe@freebsd.org>
Key fingerprint = CE1F 29CA A6BF 2F26 13E8 1B61 62AE 6B8F 4144 20F4
uid Max Khon <fjoe@iclub.nsu.ru>
sub 1024g/6585039B 2003-04-29
-----BEGIN PGP PUBLIC KEY BLOCK----- mQGiBD6urdgRBADQpkTC4vQZ0QvJaenfB5vMGNzpxq3shsQD5C/ExNtZ2PTrPe8A GAcsNUmZD2O2d0r7VSDmPWQ2zDB8bE+gak1pEmooOZ+lb9t+1UwtkzDWK5MEgbRj 8dlNEagiWZ70jwbm+q8P09LMmjB2ez3OFpDzROjvA0/rU7FMWlo893aqxwCg+0P1 d6tf6xfiE0Dgz0h7aoOBNhUEAIds+i+l14zzp5Dg8nVcrp8GhsDhGUERkpmnu4Ks iXRAbgnhv7XD1qD4EKagITMXmHQ1A6IXVqGjKuEPW3otOEhOMkfOrvI9TCcp4s7s 6d4eHt0wgjptmWF4pV8KCjj6hAkakFuli/ZjVMNiGAb3cXVocw/Q847Df6jNI5vp OfPtA/9kGOoNIssPPa1Ni0k5MPAXB6jm658pmQShlHv1GCG+tbbzqawvimwcal31 m20DwVc/ocRQFf0/2Rqx0h9GfU/QtB+uq2qk6HTEvDfzGv7SRpPwx43fscF3Sn8N K9VXs4Xtbrs5OYGJAMFOWg5SHd9jddTnViNtJQPGD6Bd12BB1bQcTWF4IEtob24g PGZqb2VAaWNsdWIubnN1LnJ1PohXBBMRAgAXBQI+rq3YBQsHCgMEAxUDAgMWAgEC F4AACgkQYq5rj0FEIPTqigCg2Qe8X9Qw88N7mk9llaZqs+3A+FkAn0Hy5JfEudVm /3rXsNKkDf95Z9cmtBtNYXggS2hvbiA8ZmpvZUBmcmVlYnNkLm9yZz6IVwQTEQIA FwUCPq6uzAULBwoDBAMVAwIDFgIBAheAAAoJEGKua49BRCD02zMAmgLFdtcfQwJ3 ctRFpJf8dHyClNQZAKDzqyItbtqEsWQGgN3QsG9+dpsbmrkBDQQ+rq4AEAQAyLyK nyVL7VVb7oJh3n8H6CMXcBy/5OV4bATxxCJLQIP/eJkOWv8H+feYnv8Z1LpMI6CT qhtVpobIpejR1CA/jo0NStQ5phhejvg08K+wgLMPFEOCCI/RUdHjNGHW4CXmhy6G Pm1PPwBiIJGG2AvZie+7NdYjnyd7Q77lE/bFQV8ABRcD/2B36PEMQJu2HpivP/hU 15sVnYim3phBpGeYTV4e8PLhx1TFDgxnplBkCrEB24hqIFge5zjDVvJyE6t4Zlkz IilsEanYbzBUkO/3qYCnwrUefxLxmzMx3tkNVK9W7Z22j3H6Dtvcxb17kMuJNHoV KIufCJXylZFXAp7t03T3uo2miEYEGBECAAYFAj6urgAACgkQYq5rj0FEIPSc0QCg 3Jjbq8a/pI2C+MXDMrW1sC/PhkQAn3vNQqLa/nntV0b3V4lWRI3wk3k+ =AcmI -----END PGP PUBLIC KEY BLOCK-----
<andreas@FreeBSD.org>
pub 1024D/6C6F6CBA 2001-01-06 Andreas Klemm <andreas.klemm@eu.didata.com>
Key fingerprint = F028 D51A 0D42 DD67 4109 19A3 777A 3E94 6C6F 6CBA
uid Andreas Klemm <andreas@klemm.gtn.com>
uid Andreas Klemm <andreas@FreeBSD.org>
uid Andreas Klemm <andreas@apsfilter.org>
sub 2048g/FE23F866 2001-01-06
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.6 (FreeBSD) Comment: For info see http://www.gnupg.org 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 7A== =E/l3 -----END PGP PUBLIC KEY BLOCK-----
<jkois@FreeBSD.org>
pub 1024D/DD61C2D8 2004-06-27 Johann Kois <J.Kois@web.de>
Key fingerprint = 8B70 03DB 3C45 E71D 0ED4 4825 FEB0 EBEF DD61 C2D8
uid Johann Kois <jkois@freebsd.org>
sub 1024g/568307CB 2004-06-27
-----BEGIN PGP PUBLIC KEY BLOCK----- mQGiBEDetekRBAD7mBgP351FCNnqp360OUy+ZKCr2IxUU/Tyffqyrrgiol16kTEO bpImo5cgZcw+y3wTSgGxwbb+UmUcJhLDO0olDNOCOYdBzzKfTyZwLzgVaC/XZ2dE LQa+3FnIp0btyU9vermk7GqWJqvVUTnMSjinqWS0MfgrcuEXjXTQ1b3b6wCgutKz BhEasg38JthFvIownezYwHcEALNJsxEnsfEMm+DQXPUvWTiScu2QR2v0BVVzfg1w DMaEnSjw44NF+cyyKXfqx3hYkboRw66GMvcbfl7AYh7ThfDjof5MHfBbe6aeJwd+ pyVS9BRiXMDbwnuPm31K1zsyCr6XeQquM204Jb1fdMiFEi22A2VxQxAY4cjenvgx 2UIFBACBHtPfsK8QyAXlNtTQqvMEQe01pXm3u90pL8DBoWsWR9vDIlnJLaMgi2jG xBNQp9UP9ZxS+BiAoEkUficsoPvoMkzQBSnfcDJfnyCXranBuuhsF4mzvEO8uLJw 4NwT+7jij0udeWe3Ymd4ppWHEADhx7PLdYdq4Kczuu0XcGqHarQbSm9oYW5uIEtv aXMgPEouS29pc0B3ZWIuZGU+iGEEExECACECGwMGCwkIBwMCAxUCAwMWAgECHgEC F4AFAkGV02gCGQEACgkQ/rDr791hwtgJbwCfeBGfFaR0IIUhvfVy7GYFQUjHuYQA nR0Vl/9xS9SbGpk9nqDCHooXgrCPtB9Kb2hhbm4gS29pcyA8amtvaXNAZnJlZWJz ZC5vcmc+iF4EExECAB4FAkGTw+cCGwMGCwkIBwMCAxUCAwMWAgECHgECF4AACgkQ /rDr791hwtg4zgCeNkjhClKqeDjTWvoSuh805WDuXnUAoKFid8813Hg7HATB4UwD 3KvmHBIFuQENBEDetekQBADtrxEvnshp47wNGP33Vwas4RtDVp40lC51yVFj9Ior zXhq9SD20gz8qPCwG3a4Srhbh3rgjPvzzqcjSE/axk5+LwJ2KHySlpfwu4wTtddf o6JzlJYWtQE+bcp65vnd6L5DGJsm1KmRTOZOL6wWxTXft4lgxfg1MEbzOKcL5YnU BwADBQP9FCPfDZYwAsZya5h3aAd9yg6dvDsObs1D1MMIiygr54/cmGUiPcI6zaga hTfDiDGanlBk1idFVKh0A6ZEza55NA45lJ02W9amWvrjG+PB8wTX4IWRAmDN4ql4 QuahtHsciUVzw4BtHhPtM1+DpT+C6aPwclpmxX2Az8tHDjHKdq+ISQQYEQIACQUC QN616QIbDAAKCRD+sOvv3WHC2ICsAJ0fvZ0rq70bwTIWfgYq3N3fSZfR6wCfdrgZ /8nwcdMpTA2LAo1YbndxFW8= =VCND -----END PGP PUBLIC KEY BLOCK-----
<sergei@FreeBSD.org>
pub 1024D/3BA53401 2003-10-10 Sergei Kolobov <sergei@FreeBSD.org>
Key fingerprint = A2F4 5F34 0586 CC9C 493A 347C 14EC 6E69 3BA5 3401
uid Sergei Kolobov <sergei@kolobov.com>
sub 2048g/F8243671 2003-10-10
-----BEGIN PGP PUBLIC KEY BLOCK----- mQGiBD+GP80RBACjmIRFKqJ337zOjW51eExucWRny0pu5fuGaxuJmGSbKaJRAORU 1jx9i/Cxcw7iwrnbR5xeyjWLDb7FIAemPltBItt0tE9H4pQXgP8d8VL3eehguMda o0yfP7WUm3U9uriJEJ8141Yql5IR0e8isQa+YsYbkd2RmDdCMDdC3W0Q9wCgsquv jc1gvAh7ypvhk8VLhflAeZcD/jQclE6S2zLZ1DSP2Q5mmuMS2ouRV6Z+fbWKF9XF TSxdLevWcXmPqvsXFT75cz8pcBIw4c/wVd8OsPU2fd+1LZCFdms1PqLjhUfXgVbP Q1Pl8zCAyriSnR2+BDwUMGzEgidkTjmjlbwhGzPsSJ8rv4i18xYs/JbmkeAV/ZBA e6jrA/wMU3ho5aIJ69KxZb3bmPVHYrqL8Q3n51uYausLxdHDMxVvjL06VAGWbF/h TdiFJ1ngMKfcfzI5/awpKwb9FPbERuNvmT10MDKumFW3xSAJMRzxh7O61u8N7dmc xLdirICQMRN2jPo3v8T2ANsdydVTn89nqdpg4Bo9Rsz/Fdnrm7QjU2VyZ2VpIEtv bG9ib3YgPHNlcmdlaUBrb2xvYm92LmNvbT6IXgQTEQIAHgUCP4Y/zQIbAwYLCQgH AwIDFQIDAxYCAQIeAQIXgAAKCRAU7G5pO6U0ASlRAJ4mnVHx0rA5dhw0scFGOddP cH/w9wCdG6HPWlDpXFB5nkpQalMnGzLAkka0I1NlcmdlaSBLb2xvYm92IDxzZXJn ZWlARnJlZUJTRC5vcmc+iF4EExECAB4FAj+VJGgCGwMGCwkIBwMCAxUCAwMWAgEC HgECF4AACgkQFOxuaTulNAHJ7wCfbcMzZiTmwuTD7wLTxvzC35OQE1YAn3et7KAt aLZuVXYIDROr33RIlfcUuQINBD+GQA4QCACIrLJbs3SkUJpuvYC1N/iykFYGHKPM L+XCCK3A4HL6f+GyCpvajz62cjUfuXv/pkLjcYANnqKKPJu6Bj2rFmOG785R/RPD o2dl+zlZ0fggQAv8zZqIP2KyQRSVa44Pxc/G1V5odcg/QOcKU+FZrkRXoz8SqfDU OEfarQP687+DU+Th0Nwn5M20+0ml7yw0/y9DtggWXzlWyIdYfhU+8HckvzgXnUFA tPdfDUzUxEjvVBUwZ5iHtUlId6sHiiTCS/fbnRzwJA1Pu1E52B2AfsLxFrwV5cRC ASfi7IGhZazGCctqZi4hbWQCB/+ipEVGct+bD9BpW9yS/JiMAxcwE0ubAAMFB/9F k6mZUzBbxQkSbXP4w1VSxf2m/lIV9v9M0LCMwjmcsJzsdLUG/i3Zo+hAjT+GznMU DVzPHq55LiNs2MKC8WKHXgXFCB2uoZvlGu88I2JjucoeibtC7zbKmVOntuY55zTk uiGkGRawIIKC6oqVFV0EGXxrcJ6v3/0vgBQSva08reETZaUFe3ivt0rU0NSbhVJ0 1WiPXk9wFY0ccemUVmdcX4hhC0yyBB0px4qbEBY3+mtHpFVh/r24GXvWXkbLowGd nmKeigX/tlRyYgPHLM2goUHUYe0erbKp2fyeQhockLOWY0DBFcFRK2kSx9HYdtcI N45tvtkBza2O8C7uCtwgiEkEGBECAAkFAj+GQA4CGwwACgkQFOxuaTulNAGwbwCe P3RXUuqmNGYCM0IXPlop9XLZIcQAn1B9zRfHFJm7tgMI0A6Avybs7V8i =EDjf -----END PGP PUBLIC KEY BLOCK-----
<maxim@FreeBSD.org>
pub 1024D/2C172083 2002-05-21 Maxim Konovalov <maxim@FreeBSD.org>
Key fingerprint = 6550 6C02 EFC2 50F1 B7A3 D694 ECF0 E90B 2C17 2083
uid Maxim Konovalov <maxim@macomnet.ru>
sub 1024g/F305DDCA 2002-05-21
-----BEGIN PGP PUBLIC KEY BLOCK----- mQGiBDzqHSERBACUPYN18/fnXdsI3CsH/UgX7CL1yLSgTCTbEA7p/jPA78svM0Kt aHdZG+mhZH9u//SaPuKPoF6OST7pb5ee48bppzL8v1+zYIAUWib/ImR/ZEGi5SzM mYtNCrK3YTblaHoeKKSrVwYvFi4HYQZWG3hcXaozhZRVQTnGnDdQYriSVwCg24Pl UzXu1n8lw+4zDlW3eGIkxEMD/RpnH5n8maXO5MYRvuBpGGTF7x3iV0somnLhQ1Th 1WD/7OhRRzfRpXarG8ObyxyPx52et6tGV9IjSdO+uuVgtTUFRKsr6QYk/y49blnt pGtd4kTHMy99Zt/GP/CBBWn7dQtMGABDobA0ZU5ILkSlZ+DHtZLEkIXljhxIyhbw sIQzBACKTwIrcF0trhi2dibKMOWqy8RYP5iKe1vXy5SCdcU7HxicHGzI0oRdlCHT jh0pik8YWI24d18UdHDhvWHxbF/QCBbW+RAyiNASzzdsiIswo9Zvras/NZbnagHB tP80kBhLVC4udmO7GKYxKjpgsuqihaFJdcpoxx8J6mv2sTxK1rQjTWF4aW0gS29u b3ZhbG92IDxtYXhpbUBtYWNvbW5ldC5ydT6IWQQTEQIAGQUCPOodIQQLBwMCAxUC AwMWAgECHgECF4AACgkQ7PDpCywXIIOv9ACfdAHOpcAmtGrNB7f73DIYjZSRt+8A njYiaKCJ2lZpj9b4JEa7C2uIoFVJiJwEEwEBAAYFAjzqOncACgkQIkYMagPC+y3J ngP+OjIKj3GrGZD8LXE7mK++WiAqlVyC79x5g28q12EUkZYzLGIkGuz4/NA3wcel d5G6dvV+7JEzEf3sAT7/iUcIgYhIepEWFEUhngvNhi+qf/FqVuT9bYz4UkHEL2Z2 Soxgk/W+N914SgLWiSKE+hClD4NjsN/h1rT/kA3kEMKRkw6IRgQTEQIABgUCPOo6 HwAKCRD31D6TzwF+V9VbAJ0alq+w7D5p6jk69ApdFv6qWHZ8pQCglKhTRm9d/78N gZZxXPyTY3qYAs2IRgQSEQIABgUCPXS68QAKCRDc/7Ca5SeztQNbAJ9XzTZBQ6wY X0UKVtj8E5X8CVTMmQCaA/iZu8kibLfaFPPSeTjocghSdzeIRgQREQIABgUCPPI3 LQAKCRDkwbNJgRZkuSIXAJ0REQ1xY6OFvWLLY7vtPhSkEbsXJgCeJXaVc7+6A/l/ P7RGJoVA2aqqSryIRgQSEQIABgUCPjwGgAAKCRAL8GQSYLofR8p1AJ9NLtBZCdpd p8oG67sSD9EGk3+hWQCg/KkUjHGmVSGmQU2A+CX8MN80lSKIRgQTEQIABgUCPmtE jAAKCRBOOAZa8Q9p19UWAJ42kJIpDGF+/PoSnZ2kKXev6Pwd0wCffoPGbdkFDn4U 1QkH1LfBS1fzZ9u0I01heGltIEtvbm92YWxvdiA8bWF4aW1ARnJlZUJTRC5vcmc+ iFwEExECABwFAjzqNHkCGwMECwcDAgMVAgMDFgIBAh4BAheAAAoJEOzw6QssFyCD NvgAniuAmAatY9m/JXsO8Pf4Gaqn8sdDAJ9w9iEjbVIrHicNoGig+JZ2MzoXaIic BBMBAQAGBQI86jp6AAoJECJGDGoDwvstnBYEAIbMNUUVHnlBJyylGD9ILRi+6hM4 3OVjUMtSi3+wWxSX8iLnC8wfSUClEcbhEsgLo88IH9KARIMRP5GVZd4IdfQ944AC O64TgKe+Gywk5LW5BwVJOMpXLlrZ13nEM48hoiLipn5c4sx7fKBTJKQkz1KOrNfh IvL1t+wZ4XMUCDiWiEYEExECAAYFAjzqOiIACgkQ99Q+k88BflctgACgnBG5BoSe NBw4L8ZU1sgm+ioMzboAoIprTOjAbKoE7JP1Lp4sw7yQ3s6hiEYEEhECAAYFAj10 uvgACgkQ3P+wmuUns7XTmACgghrnoPXCydTbuzTMvihKf+YFMv0AoIwLXMMrcZfV E7VisZO7LHKPNAsZiEYEERECAAYFAjzyNzAACgkQ5MGzSYEWZLn4mACgtfoD3CAL hinoyXOMFMbGrZhBXVAAn0iSmTDzGG/ez7IhxVfxDgronhLQiEYEEhECAAYFAj48 BogACgkQC/BkEmC6H0f6WACgj0hsYBO/cd8yReuHn7G2Uy8ITXEAn1gPWD0th/V5 Z+3evG91zU45tYOoiEYEExECAAYFAj5rRI8ACgkQTjgGWvEPadefrACfa6HcGH4h P7H1OYrFtAspVdWKYmIAnjKIN8ukxtmZUxBo6XH+Aomk7bDOuQENBDzqHSQQBACC eenGIATI8xuuYEWX4Q+6RD68CY8exYlHgBKug4rkjNFu+S7FjhCzklyCJ4txdLfE HI8rqTvH56nQT/SRAs4oeTyGJoRxH+OvOK0SMJGuSduegNEPR6wShdgJcsEmeeqb GuZjWxa9p79biD9reWXCEhFrGjwAZDLMDJvoWAu+awADBgP+OsRhHT1r+PeD2tWA /x2wAMgfePG2fEI2QQg0BZtyEK+NBA5uWFZZTQUqO2MPGOxqfAKPlmBBE+tJBAbQ E16+IzXJZ+DUv1JhlV+/b2vJDD3OcwEJaIk+/IQpDkGRwteevdRxDTfqaRI11XbD YwM4u2aJPTjxyXHxXiV9P69wrmSIRgQYEQIABgUCPOodJAAKCRDs8OkLLBcgg0I2 AKDEBTYIFJjK1nTwXRYfHEx4ietiLQCfbMUkZi0uCFW71DQ/w6Sq7ZuUwgI= =WWB9 -----END PGP PUBLIC KEY BLOCK-----
<jkoshy@FreeBSD.org>
pub 1024D/D93798B6 2001-12-21 Joseph Koshy (FreeBSD) <jkoshy@freebsd.org>
Key fingerprint = 0DE3 62F3 EF24 939F 62AA 2E3D ABB8 6ED3 D937 98B6
sub 1024g/43FD68E9 2001-12-21
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.6 (FreeBSD) Comment: For info see http://www.gnupg.org mQGiBDwi3FcRBADkiWSSJSOX38CIPgbUnnDQ8S79eZ0zQYnYn5aeRMi7w0B4SnQP 1DcFZ/EHNtQWJTCaQBWQZZWvL1ZjdK284YrpSKs7gfoV5BufcFqKatewWZUfsUad FEKTXLXlZa55151UtFy9erkA22VWHmqkauDFYl4DiOtaUWCX1Gg8xCvB3wCg0sbC /VtANEu2XbxUp5pGmReNn50EAM4vLWfZk3T2woHN0VBOwEk0BM216zfJQGLFUFqT nLKezO/QqoCCcVpH7rwV0V6NI1w6YOSx14CU+s83iyyO0KlRypoptWKBoA+cjs/y 3Iy05K147YfWUhgkKcyw/Qwx8wCDaetG+qZCX4nY0EByezFe504uDkcxk5BrqBX8 E6kzA/9vSG+J4aejKRw9z7Ku5cLV9ygXCksu325uY2t+J6b+48cT8eFMOpgUHyNV m5ypOL31KYRPkOzK+iiDoTPODh4Zg8YZLsgWdTrC0ZQW2nWPNd3Zv+tLAmiwVjIV x4XqtFXh4nhI2eM/PXhdN37R48OKB0DmrvdH819/2+9upNvO/bQrSm9zZXBoIEtv c2h5IChGcmVlQlNEKSA8amtvc2h5QGZyZWVic2Qub3JnPohXBBMRAgAXBQI8IuKv BQsHCgMEAxUDAgMWAgECF4AACgkQq7hu09k3mLaWwQCbBEeFWt8z4HlnAys0FYB8 /U63eqkAnjKz2Lxj14N8QYtbtFThZRB5fq5cuQENBDwi3GIQBAC79Y5tcPi18bZd REXZmDOnLc0gHD9y6PHgR92BUCWQuafcxfQqqY2ESF/JQ0dFfBEkCAmYU2YkPZA5 A7skmv9zHun/bXAP02hrvMU1Gt0ZHIzDV0EaO+uxY8eSKg4JuxZzpgzWCIxI/6uh ZhOuEF/uql7IDKMQcOfsvVrF8cZfNwAECwP/UvxNG/RUOlOHdRo3hY3H5l7zmaCi AwUU6Z+LxDn+fwERX7wL5rasafi1r7/9VvGADfelpxKR0kZM1eKYPtri1zS6Zm5a CC+QVyyoTcb+x0mWForq6FxLDf7+l/O0TuEG7VOH4RgLaT2N33yoScEvxdB/Qo4w KnT39F7lYjbzBvGIRgQYEQIABgUCPCLcYgAKCRCruG7T2TeYth30AKCzp2KXBqsa N6wOyM+tHQ4DKNMasgCglJCipoxpnnvCsGiZJv9AgNQFDGM= =a9D2 -----END PGP PUBLIC KEY BLOCK-----
<rik@FreeBSD.org>
pub 1024R/79512C58 2003-12-09 Roman Kurakin <rik@cronyx.ru>
Key fingerprint = 8CB8 1060 6EA8 DDEC 2D49 1E07 7061 C8A6 7951 2C58
-----BEGIN PGP PUBLIC KEY BLOCK----- mIsEP9YV6wEEAOYOYvzwN0AREXa4xfA/W1BQjixAC+0Dkli3f3KIV3t/zkPD5Udx tfkZaWeRBthvdkgUPmw2J69ISeaHLVid0+2JvgA0bXUPk53LTqzmFPioilyXpaGT KaSk9836FZnRr+EdRp1nsNx4+YFApy/1oXoNU+UB+klfdDfPHZJ6FGY1AAYptB1S b21hbiBLdXJha2luIDxyaWtAY3Jvbnl4LnJ1Poi0BBMBAgAeBQI/1hXrAhsDBgsJ CAcDAgMVAgMDFgIBAh4BAheAAAoJEHBhyKZ5USxYwQEEAMIjQOn0sLxXWao5NSLD b3BsZ1sOH1cphJJwkp8uf8X61YVn9k/pXh5Kxkrxn4iRidHvKIifDjn/Ftx49Y28 ZUxMyvw+Sj2c0HJgpHm8pxXqt+GHnoAni6KdjYH8Ob422MofadihmfIaJGM66HgB ez/h7xenenrNSuByRH+khqS5 =O5od -----END PGP PUBLIC KEY BLOCK-----
<rushani@FreeBSD.org>
pub 1024D/439ADC57 2002-03-22 Hideyuki KURASHINA <rushani@bl.mmtr.or.jp>
Key fingerprint = A052 6F98 6146 6FE3 91E2 DA6B F2FA 2088 439A DC57
uid Hideyuki KURASHINA <rushani@FreeBSD.org>
uid Hideyuki KURASHINA <rushani@jp.FreeBSD.org>
sub 1024g/64764D16 2002-03-22
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.2.1 (FreeBSD) mQGiBDybt48RBAC/KCE5CLVZsYvpmgrbum7JHgIgnX39EPMQmL9Y3LmYy6Iwh+OF iIjIqW6cDeCcxHoJBwbSUerC5ueriwZCh46gSnLVjnmBLlGFXyxYbSfFGetMVVSR 6OpiQuITp4ZhVw/UoCGloNsIFKg6l4JMwqZmsrZPdl+zUU79RV9Zb4XhFwCgsRIo 1mf9I3rNZ8f1Jv69nUR/lJkEAJB6fY1rtUNUwq+JXOnFGD0KnC8isQNyOeQ7Y1il HQ9mGVKuUC3Zh0FzvdsU7Ks2ss9ynxfbFXnyyAOqXwTzU9pMuW5oLOUmjqwEfAhV 4S0xcnPcfGGJ671NNeqa8X4LQv6ECWai6O4CbA4aluRqhHNxT9dgEai8RN434LQE tGxcA/4mIlvVoM2c2DRjD4+/Oj+i80ZMpOgE1RkuQmXoZ/DwLD3EHbIBX4cNffOd FzxYrKCrXD50MehIw/IhFfHN/GdEN7NT87M3j/ydSYFluoiLv8FXO00mr8cDi3wF q+LGbniEhVcW6wpUz9zVFmdLAp3HQi1uRAHqYmdSs6gqjl/+pLQqSGlkZXl1a2kg S1VSQVNISU5BIDxydXNoYW5pQGJsLm1tdHIub3IuanA+iF8EExECAB8CGwMECwcD AgMVAgMDFgIBAh4BAheAAhkBBQI+L/K/AAoJEPL6IIhDmtxXgj8An1YuXcp0iurB ZYHiaYMzAb+lYhALAJsEAKTyeqO0plIvHBV49L5CErZo87QoSGlkZXl1a2kgS1VS QVNISU5BIDxydXNoYW5pQEZyZWVCU0Qub3JnPohcBBMRAgAcBQI+OM7uAhsDBAsH AwIDFQIDAxYCAQIeAQIXgAAKCRDy+iCIQ5rcVwyNAJ9Y5N6lIMXVy4sYCdgQvqDR xkUN0gCgrsbQwfTOBcy8Mw/UmGOE4/fwrNa0K0hpZGV5dWtpIEtVUkFTSElOQSA8 cnVzaGFuaUBqcC5GcmVlQlNELm9yZz6IXAQTEQIAHAUCPjjO/wIbAwQLBwMCAxUC AwMWAgECHgECF4AACgkQ8vogiEOa3FerLwCfRPWW7lC/pAVdD2Jo+8rcWTKQ1xEA oIQ/on62k7YBO+buO+K472a/cW2MuQENBDybt6UQBAD/ZGmvwhzt9YWhF9q7mLOT iEMzL2AzBryLzzUphejgDlJN/TIoDtaJfMyNkO16FbUq/WLQbKYFKfDunqx+eVSi PsneeYw9nAdlcXVgHRjoL3vj5O7PIg4qqps2mnLKEOXLAH2PNTYY6+8T0NQicdht YIraowzLoKRdINuDQrCpEwADBgP9H4CwbNJtQAHwS9ATmfL6F2Bg9LWe1godSWkM N+nBxKvMqrajJWfxV09f9gzn0qmMZT9u2DwcADzRQLC3jkzgOD1f8UiAuCuDEE1a vg1iCuyiI6m+MMWCkOCj/69wIu1ilmWqkn8SeoEwN+hwqHa20ue7vBhXreQanJim sq38ZdCIRgQYEQIABgUCPJu3pQAKCRDy+iCIQ5rcVzT/AKCgYOyEMpIxXYVI5gYM CwQ3hkJ28gCePnTu3Ke6lPoQsMAo3TzKkUO9Wj0= =cXJQ -----END PGP PUBLIC KEY BLOCK-----
<clement@FreeBSD.org>
pub 1024D/0723BA1D 2003-12-13 Clement Laforet (FreeBSD committer address) <clement@FreeBSD.org>
Key fingerprint = 3638 4B14 8463 A67B DC7E 641C B118 5F8F 0723 BA1D
uid Clement Laforet <sheepkiller@cultdeadsheep.org>
uid Clement Laforet <clement.laforet@cotds.org>
sub 2048g/23D57658 2003-12-13
-----BEGIN PGP PUBLIC KEY BLOCK----- mQGiBD/bH3wRBADoVem06r8ivhxQhCOEH06GAg5J6iqqlKIo5BmOiQ8IHo8JzA9z TwFNbhUCMWzUusH56nNHKOTuFV7wHiR8nvK0y2yU5qTK3MHbfSeMVy4rFAKgyZae Wf1lxRHU+W/EksFaC31ljkF01TGHVMtpKPzDSttgrrMtgstT7QKWTKcggwCg8bVn g7MH9udGaSNY5hO3l9wIcusEAMD+erpSZgVfwojT/pliCwnvKRwNByhIWqz2y3Ly M2+VR/IjFlpOvT4Ytrn2VC4V1duahdowNQh5x0vUPagRRYKx67OEbIcisKsGQTnT m4FSRUfULKZ3M016uSsYNbuopctjrxHE1YJfskHmLnIHjnXhJjfmouQqOX8nQSh0 ryjCBADTi6z4ZvH3CF/C1egPsmYzJ14H2t51JUSHwEWWaj3LkILEGvHsywCIT7Xd R34B0hPIn/ihsJF4XBEiqJlZmFhfFUmSR3/No4TYKOtMAzfo6GtMv8q19U/LQaVY 1wYY0rWCqfzwcH9vSLlpHL9afqNBnVK3XiBGMCmXZw+4klu+f7QvQ2xlbWVudCBM YWZvcmV0IDxzaGVlcGtpbGxlckBjdWx0ZGVhZHNoZWVwLm9yZz6IXgQTEQIAHgIb AwIeAQIXgAUCP9sirQYLCQgHAwIDFQIDAxYCAQAKCRCxGF+PByO6HcPlAJ9gLehC AhRMepAZrGdPsPFoMB283gCbB6y04aeQlXaa9+xAm6C0ciAiXj+0K0NsZW1lbnQg TGFmb3JldCA8Y2xlbWVudC5sYWZvcmV0QGNvdGRzLm9yZz6IXgQTEQIAHgIbAwIe AQIXgAUCP9siqgYLCQgHAwIDFQIDAxYCAQAKCRCxGF+PByO6HT+eAKCBj8MXtxmq l0PuLGLnR04gnauqPACg8Rtgb2XwCrgcZFcjS1Fl7/SmTE20QUNsZW1lbnQgTGFm b3JldCAoRnJlZUJTRCBjb21taXR0ZXIgYWRkcmVzcykgPGNsZW1lbnRARnJlZUJT RC5vcmc+iF4EExECAB4FAj/gQ+4CGwMGCwkIBwMCAxUCAwMWAgECHgECF4AACgkQ sRhfjwcjuh2wLwCfZ0Sqh6DY5U2ZDj+JrdqX1qzEaGMAn30UALtH14r1jMPPq6xn UuMfFjyLuQINBD/bH4QQCACbO8LantesOQKcxZS6WPSLhIoZerdMJ/b4DCd22GGu IM4eoWiYPX73cTMbN9cTEObaA0hvXEdn8vWl9/RBV6aL/fYhAqTVGWhXu6MBJiAv 0zFeliJl2+7MqzZjjr8GSFkhM3tXEzFr+7r7/Bqnp8hdzMFUS2dLcL+ZTXJuq9s+ xUNnwt0+Qy13VQU9whTZNZy3PHHa3XRc5IbZ5FnqMM3D7twlt0sS6j253b3CXw31 qEREoLutw25X8pbQeYJW8st0xIEY9z0MikBOJvKPAUani5+eWjuJC0FlXYM4qSnz zhBpDbQBuhQu5JgPPiXlBq+ta/prm6FyJjcK+EyJsMGnAAMFB/9DIGugG/5F+4XC dTvFluD8zbP6zwqWRuHX9JmA+oso6ruDHiZ+Ckdz0xBfD8yoyENIRnLmBxx11uZN upAlM2itsvAwHMm6zKGLwlN+74vhoCTzvDFtnyTSgC8as4kk4XCax2QMAueFpW+2 8/SSLqIK2UWT8/5SkP0QaN5qSFgRwhGxYgyVP8pflrjL32u+fEwo8EjNnOUHX4WY uzdzq1t+0K2AnZH5TiUCPy9iLP8o3rBm89Qdh45wzqN9DOGePoc0v4opQK9+3TRa vYAx6izrRajiGgUHLcYeL2nQxyi3LBkKvbp4Bw/dpxGTdmPhtyU8jYqdP5SQbrFJ 4DwXqs4biEkEGBECAAkFAj/bH4QCGwwACgkQsRhfjwcjuh3mfgCguHMdGD3Orm8e pAU+aCOCPVkkx7AAn2yhe79FYbHDx5Dx2LAfRRRyfxjR =lVoL -----END PGP PUBLIC KEY BLOCK-----
<mlaier@FreeBSD.org>
pub 1024D/3EB6046D 2004-02-09 Max Laier <mlaier@freebsd.org>
Key fingerprint = 917E 7F25 E90F 77A4 F746 2E8D 5F2C 84A1 3EB6 046D
uid Max Laier <max@love2party.net>
-----BEGIN PGP PUBLIC KEY BLOCK----- mQGiBEAnrX4RBADpu3Q03zK8ehNRHgNzTPCEVK/sWWr3hR39/hfFmdYcovwyMTis OhW87G6uOA5C84cewrEP866l3xmkS43dkgYhcaLxPYFB94OWzSk95AEgFACohnw3 l7WgcmHyZbdfCbqtuew4RY6Vqf/UzMVzOlvrAOsla5c4ImpaFmxBAFANIwCggiRI o0P2iw3gBY2y1aG+mTWKidcD/3O4LPoZItTzx3vWq2wQ5mwoF0n01wIhQk66UtJj LvZV53LzEEuS6JL6LKkl/AlxKaUoS9OUf9D7nyJu/dDYHDKCj+m1UBo3AkKUcutn FLgGFwHU4Apcy3CCblMm8j0w62EFnXjIjUoPBqgDUUrePvVfIgJbkFjl8e0LcnTT m+KaA/98+/pHRh9EvGKpHWIUc2qHNF1BfFFmq2wzmzu9MCk67IstOWq4GiRChyCL V9SYGJ5upRRPMvxAQD3DAclfuyMKk2a43rXM4DRbePPeqH7ZGi/yyzPOGvqLgLDF VboM4bNJPa+Z0PX0QU6o70fyWPXQk+23suxDUgYvFrPEufATO7QeTWF4IExhaWVy IDxtYXhAbG92ZTJwYXJ0eS5uZXQ+iF4EExECAB4FAkAnrX4CGwMGCwkIBwMCAxUC AwMWAgECHgECF4AACgkQXyyEoT62BG3B2ACeNB9/bj99lBOz5ypsecytminp0v8A mwS+iY7mpRAz74sGNjFoqjuRCx0StB5NYXggTGFpZXIgPG1sYWllckBmcmVlYnNk Lm9yZz6IXgQTEQIAHgUCQCinywIbAwYLCQgHAwIDFQIDAxYCAQIeAQIXgAAKCRBf LIShPrYEbbDFAJ4hE8LZ3kh0o3LLkIex1NnhHgVG+gCdFZYoWg13QjgieDug561Q frAP8Ec= =XiZZ -----END PGP PUBLIC KEY BLOCK-----
<alex@FreeBSD.org>
pub 1024D/8E2523FD 2003-01-28 Alexander Langer <alex@FreeBSD.org>
Key fingerprint = B757 5ABF 691F 4011 F565 3765 BFBB 3506 8E25 23FD
sub 1024g/16C3B12D 2003-01-28
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.2.1 (FreeBSD) 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 =4rxH -----END PGP PUBLIC KEY BLOCK-----
<erwin@FreeBSD.org>
pub 1024D/15256990 1998-07-03 Erwin Lansing <erwin@lansing.dk>
Key fingerprint = FB58 9797 299A F18E 2D3E 73D6 AB2F 5A5B 1525 6990
uid Erwin Lansing <erwin@FreeBSD.org>
uid Erwin Lansing <erwin@droso.dk>
uid Erwin Lansing <erwin@droso.org>
sub 2048g/7C64013D 1998-07-03
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.4.1 (FreeBSD) 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 egnhIj7EVPxlrc6xyHIB781osg== =DGMU -----END PGP PUBLIC KEY BLOCK-----
<leeym@FreeBSD.org>
pub 1024R/5EB52E51 1999-03-03 Yen-Ming Lee <leeym@FreeBSD.org>
Key fingerprint = FE 7E 04 56 FC D7 24 21 B9 3B 53 06 E8 93 B5 81
uid Yen-Ming Lee <leeym@civil.ncku.edu.tw>
uid Yen-Ming Lee <leeym@cae.ce.ntu.edu.tw>
uid Yen-Ming Lee <leeym@leeym.com>
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.2.1 (FreeBSD) mQCNAzbdCccAAAEEANydbxi0PCKpAl+7A5I07015Sm4R8YzqQF2LXvneC4FplHvy Qq3ZmibDQEDHEOArFDnox3iY04Svl3KejPkmOAyZWzqZYINLGOaIW/hwkjB+U2ZA cLMUaHDdXgG9U3P5nanksJ2dBpVgehZ7p7PKnqsyMW17Kq+M8snMx0NetS5RAAUR tCZZZW4tTWluZyBMZWUgPGxlZXltQGNpdmlsLm5ja3UuZWR1LnR3PokAlQMFEDbd CcfJzMdDXrUuUQEBG64D/iZgQNzZaNM1AigEwVYIzqvyWcOJsk19VGrQI9fJK92s fwJxJXKVGvU+8R8px2HsNqiu/jYovud52NjqVheFGrRdQNS08/HslbEUZ5UH+ID4 Jg3WqMrHJScaau25N4o8FXIdqBz89KfpCFOwdMx699Qa6P8D7GLsxY5Mc7ikZjec tCZZZW4tTWluZyBMZWUgPGxlZXltQGNhZS5jZS5udHUuZWR1LnR3PokAlQMFEDpT X7LJzMdDXrUuUQEBx98EANyLMVVMIQxDOE6xUNeXwUw+ZAETEUcAVKztz/jxLI07 BoNbCquSoZzja2R54IUXwSDcQ71aV5KG/KVI4HT3XBroKYRvJzzf+ePNZtOSokeq 5ybdtvrMAO7oEIkJqOpN/H6lIXhApLtXRi8yhIaoIVQ4k8WG2yQiIFu69qWFM6DD tB5ZZW4tTWluZyBMZWUgPGxlZXltQGxlZXltLmNvbT6JAJUDBRA6euJ8yczHQ161 LlEBAa2FBAClvm2syJMdCfVlUJpdr2f9SH8qwi9uxf88lVfJb3+46IArDBCLHHdp kDvy+H3NPVCUPeYndcfl/P9fLLunqosTuVksdNKFFhx6+hmyI3+tmGXavgc2wq/z oJ6vnHYW2sOMiQYD46cUsepf9aroH8BvNgoe2VfldDqwW43nVXNwVLQgWWVuLU1p bmcgTGVlIDxsZWV5bUBGcmVlQlNELm9yZz6JAJUDBRA9Wn+pyczHQ161LlEBAW5+ A/9NaKX20d+ixhO5C1/ShUXUVt9IIIX46Arj1HGeWR5xs5Ibt1QXGH+F92v56Sm4 yakclijxU0nSmFxeQQNiTndACMrpkCUz+G3SzTzYzu9N+2eJ4FP/KYb2os2QJ2u8 IztGZ+3GmEdfQM6brT6MhAH5DK3RurYg+wQcSFR5A6msng== =B37X -----END PGP PUBLIC KEY BLOCK-----
<sam@FreeBSD.org>
pub 1024D/BD147743 2005-03-28
Key fingerprint = F618 F2FC 176B D201 D91C 67C6 2E33 A957 BD14 7743
uid Samuel J. Leffler <sam@freebsd.org>
sub 2048g/8BA91D05 2005-03-28
-----BEGIN PGP PUBLIC KEY BLOCK----- mQGiBEJHnP8RBACRTtM4Fb2oRITEwfTLIKSa5Mk0m1A7Pitd1qkjtAyFCi5V6uF/ 2FXPP3Ux3M8xzrvkQNnWkYvGh5MSgkkJ0nszUvh63m5Lp1Yr/EMQr03v1HfqGKF2 SALv7eVJ3XHEEGsYq6KOcJ+2n3FkL6bwGXkXSya85a+EwQ+/aBhpEOEKwwCgl4N4 oTMEgh2Z06ZkMJrqbf4/P38EAIAN93nvAN14v41zw25b4USFzqH/JFTG3utAVxiB NgTEkD+OkktxJFoTrZxfxoU6Od4tl+yIyhKJgj/QlH5pA/mpMeaXh+TQ0/EQAzml d/sw7vXV3WJ+zXIZeh51yuHBY817e7izcnfmY33UrOdf4DtcplmUrfQd1eVMSo45 K2b3A/9a0tg7NhdfkL06b97oyKb0L8F92Q1sO6J5sgsEjNrUVrFnNU0DIDgbi/0t oBpnqIDa09hhBJ1XYcxU4KMxBLpuIeuk2cDCUCVeeEDmx98GIss3hKO8YWzB40y6 7vtdh5lveaNV4+CA2xL/cDXscl+poRQA5tR0efR16jckEaEcVrQjU2FtdWVsIEou IExlZmZsZXIgPHNhbUBmcmVlYnNkLm9yZz6IXgQTEQIAHgUCQkec/wIbAwYLCQgH AwIDFQIDAxYCAQIeAQIXgAAKCRAuM6lXvRR3Q7whAJ9e9jjfVscKVirvWN5IM2j0 60Q50QCglAppekJH6jWStTwoq1EroBFPKUy5Ag0EQkedCBAIAKmxNvJW/W+PrE+T JjKw6dbqUqAUNIGWnr6xgL7KYBpx5eo0XH3RCVzvRSfboA1+nXauTn/FhOtWMw0J dkHrMQhxKSDhWOxeftKuiRiVLPXxF7PX0JMOadxOuqNSt1VWcuTxxBB2wva2Rb48 JscdFbT2u7+PHNarDgUnEobobdvbzh4F1ACaesUq4s2y8jH+YJTaBqJJuZLjLwti C2zv7skf40I5ldud4/7ARGuumpjTrqZFQeQwPKX975X+jw5SBUJXA1ckKcgTp0s5 Yk+O5+yUkt6yzDO+CAYEaZ/xfpOhwmqSIXtdo+ilm2q3y5l+nyEVidYncRWRWYyO iaXOJdcAAwUH/0Ixl92WezOXBqMrKVaA+abCN6t6n9zxSnwfVo92Vlfqj8Huz3Hk 55e1in3P01xXdNKnapYNkCg70WbtNQtCh0nJdGGDEWVqJsjiqDDMYa7QLahV7HPB RyOtoAXnTWPpyk0d5WEXPLJ3vPjxqv5wKTmav3JcvVahSVWi2wmWAgfQJXYRvCU3 EEQ5KqtCBrQNdBsSRnzgDsMY2kAh02VuGTbkVlQz/rI7HAYEOL8SoR489O/MTE+b 5HtUT70rk57/3jR3QtiH/3Q7OqnPh/ATjO+pnPuhfqHiQWLWRDigJNheH/B+1Hmn sHiSWrUmlaI0bzyIVW4Xft3nu/wH3QVSSWOISQQYEQIACQUCQkedCAIbDAAKCRAu M6lXvRR3Q1SUAJ45iX7Ka9rb5pwAmY+fyfpuO4qgJwCfW4VAl3+NLCCP4A0Y8wlb UtEtg3M= =kR9a -----END PGP PUBLIC KEY BLOCK-----
<netchild@FreeBSD.org>
pub 1024D/B0063FE7 1999-11-11
Key fingerprint = C518 BC70 E67F 143F BE91 3365 79E2 9C60 B006 3FE7
uid Alexander Leidinger (Privat) <Alexander@Leidinger.net>
sub 1024g/263CAC76 1999-11-11
pub 1024D/72077137 2002-01-31
Key fingerprint = AA3A 8F69 B214 6BBD 5E73 C9A0 C604 3C56 7207 7137
uid Alexander Leidinger <netchild@FreeBSD.org>
sub 2048g/8C9828D3 2002-01-31
-----BEGIN PGP PUBLIC KEY BLOCK----- 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 LHm89j+hw4yMRwHT30PsH8g= =ssad -----END PGP PUBLIC KEY BLOCK-----
<lesi@FreeBSD.org>
pub 1024D/96C5221F 2004-08-18 Dejan Lesjak <lesi@FreeBSD.org>
Key fingerprint = 2C5C 02EA 1060 1D6D 9982 38C0 1DA7 DBC4 96C5 221F
uid Dejan Lesjak <dejan.lesjak@ijs.si>
sub 1024g/E0A69278 2004-08-18
-----BEGIN PGP PUBLIC KEY BLOCK----- mQGiBEEj2LwRBACdxv/Z/TqPsaxTmKrXZSOPnQca8L9UksW+71kI7YouAkbnnTyB maf7zCs0BDcUU6t2mO5ijJlxXe7Y4yMx/3mwGX9iWfWh5U9xobG0STcU8ET3ZQmZ /AM1vSL/weLK42YHxyqSrudt/oWxH4iDZFz5I/HI1DRwZMFhft3ja+pdYwCggAu5 GwYrQlQJHJcCFbxnYUGJX/sEAJXyzea8rzP7dTUsaOYcLitIpy/eDI3vkB0aW7Uh JSicWASPW2erv99f1p2gkVQ0b0lrpMwPrysotfN6wLLYR0fowCWHm7hnASgohFpq VwB7aj0HDEHne7EIr6geSpnO8Y4QUtbFVWo9cq7HGzrB8NhwpLXQ5g9RgB+H9SS7 SzVXA/4qPOAoJ8Fp+ZSznd46yd+dgFmVpSJuTs3g+hFolSioEkbi66fHwPMWeifS i02AkU8m/qiGMAXRwBm7s5jeLwQyJX38S4PnupPg8pOjZtLVYoTWaM19yuMGS5S/ ryF5MaCGtuB72Wnsp67aZIkaHjfS4QAKo0WVH8yucnyOS+BFsrQiRGVqYW4gTGVz amFrIDxkZWphbi5sZXNqYWtAaWpzLnNpPoheBBMRAgAeBQJBI9i8AhsDBgsJCAcD AgMVAgMDFgIBAh4BAheAAAoJEB2n28SWxSIfMJkAnjxPSokKlZtVhYhAcgX9as76 sadXAJ4yo003F9ilZw6avaThCBltR/MqWbQfRGVqYW4gTGVzamFrIDxsZXNpQEZy ZWVCU0Qub3JnPoheBBMRAgAeBQJBJQwqAhsDBgsJCAcDAgMVAgMDFgIBAh4BAheA AAoJEB2n28SWxSIfOHYAnA9quQ97rU3eJHb1LzOTpwZVMSDxAJwJnLzSFQHfJu1f seG9fTyt5UpBAbkBDQRBI9jCEAQAza9XDZevfbu9BYjDESbKo38SRgyTd5/lIgzH IlF+9zGr2e9PH1WOIPr0m9m3LYQzkL3YiUm23UoJO7uhvWvCpxfChwVx3VFwM7Yz WqWBV+W27aZNROEmh5KheJACE/m6j0R6UECiRHZS/EsHP8FNG8roWro23ApNR0Vh zZ6iVNcABAsD/3glWDyCWMA/eX/YGPw3xN3hkENgruwtWKkK6TW6kYv94k4iD/b5 bRsmIvGd31AM5/Qv/IQd7epXb2ovDaKvMl6+jAJb1NMCSzOkCnoqcQoKB0ed33d0 JOVWuA34WCMZ2zHLFEtwuQkHZqmyNQcxRLGLkODo4WWsYNU7KeGHvAJDiEkEGBEC AAkFAkEj2MICGwwACgkQHafbxJbFIh9+8ACeNr7M+KLI/eWu6Nig8877cjrEP3QA n1Kfo14Pijwx26kysheLFV1jutrq =IfeN -----END PGP PUBLIC KEY BLOCK-----
<glewis@FreeBSD.org>
pub 1024D/1BB6D9E0 2002-03-05 Greg Lewis (FreeBSD) <glewis@FreeBSD.org>
Key fingerprint = 2410 DA6D 5A3C D801 65FE C8DB DEEA 9923 1BB6 D9E0
uid Greg Lewis <glewis@eyesbeyond.com>
sub 2048g/45E67D60 2002-03-05
-----BEGIN PGP PUBLIC KEY BLOCK----- mQGiBDyFNecRBACKn+4b36n2/e55yTfpLXS9a57gQNgx0WXBfbK9LMLf2D8otD+0 z1DW2eclAOwJVtPftjvYP0HKFVC8Pes9Wvp6Z0sIEPpdkL2NPlUuxXUyh1b92u7n Bpt7Uwsom88fnn+BOPrvvPL8Arg3JBen+Jd8o9yRoABCYku8vQF6CEUDcwCgmHJd 9hZ/kRb1rLdSLssB4VMQ3zED/0/SVm+6XV+2ObXn9FKQpCC6sMSq+PCoR9NzAVRI njTtkpyR0fjJZr69IN2E2MWPonv38Xg1tWJnR3fKUOnNqwiVHBQKKrKa9lGWsZQp TrR+ihtJ9hC626dCq9JDb1Ls7TXn9ha+d0WNuqiwugto/myHm/GVlCANhGzUuDNU Mo27A/46YEAMuhSQWOxgSZ/Z5g0ybgpswVePrxvD4sX2/AVfKClOYpPiNJe+S7YT JmfIPkpP2P7v+87BaN/uWgaFmxlhpUOIuat44w52EwwGB+K24cGgq52XncZsYTYH SrLitkRtt35tVdnn1v3gmDi83M8W/YunflpeJAgJC0QzxKuar7QiR3JlZyBMZXdp cyA8Z2xld2lzQGV5ZXNiZXlvbmQuY29tPohXBBMRAgAXBQI8hTXnBQsHCgMEAxUD AgMWAgECF4AACgkQ3uqZIxu22eCkCACfUuNYpGGlFboDl5FZeXlor/k/hogAnjyq /Vw8amjEN34PGuqBPQpMnFrwtClHcmVnIExld2lzIChGcmVlQlNEKSA8Z2xld2lz QEZyZWVCU0Qub3JnPoheBBMRAgAeBQJA/XNpAhsDBgsJCAcDAgMVAgMDFgIBAh4B AheAAAoJEN7qmSMbttnguMYAn14cqGfabS626P1D4GMcSkSagzaZAJ9LyH+vMrfn OI2x9+VLyaTSAvm4zbkCDQQ8hTajEAgAmuQukPFaefkzE7DTIgSDIc5vRmUHDs01 bGp36R7f5GEmXwNtCZ+Mf+H54QSzuNh1QaJ6Nq/iYd35LA03/I7AgUFwSX1cEc/n fNjxqS27CAab6nIt9Syb9WAAKUKDMwZCjHBNv49CAPyVVb1aTUCJyUcv1gGSMNHX r2bkWpa4nIN4+rqD3hifHCX1j/2XMkmYY8NCVTY52zqO4sCbh+ohAMfYtW2yV2Iz z4ngppp0fUbmlGV6DVvTC1Mi61UCDkhO+TZFlE3qXeGlP5GR0SbpdQmPiI0Jpinq Zs43gcd2xtiUBM7HAMoQDpyFirDuyDKUgMWJrtJtAwWa4cf4Luh/fwAFEQf/dqpH bl48tu+REAPrjk9NWaGVqi1vv0r4LJXo8db9aGxwwAzKXDhwqHo69E6l4/Rd+hsa sIJE7vGNbGK+uerTg/W3jot90MqraplXHuS54TjOMyzWSSG7S6ypmDf5YnK3xQE4 NfTYvC2GxphotkE+QmBzmeft/Mo3opVYlv3OOBqiQoCYB348rXczxEUPam3bFBw1 wp5XjA0kqYRcUbxNE5AK9c+g6R2c/jT96EnDZDpMRCNZiAKHFLEjtHy66BiVHKvg tijWD0kxtlWV8KAKN6OhUpSSsCv53jsCIntNARAVENOKOV0RQVDfJgykeK+3eeNr UdIjAWFAWcVOEw5TQohGBBgRAgAGBQI8hTajAAoJEN7qmSMbttngHb4An37mZU8r E3SGCAlTJCLV1JxRDXVyAJsFBVshxisn1GycdT3UCwcJVAHJ5Q== =bx2+ -----END PGP PUBLIC KEY BLOCK-----
<delphij@FreeBSD.org>
pub 1024D/CAEEB8C0 2004-01-28 Xin LI <delphij@FreeBSD.org>
Key fingerprint = 43B8 B703 B8DD 0231 B333 DC28 39FB 93A0 CAEE B8C0
uid Xin LI <delphij@frontfree.net>
sub 2048g/A44AC9F9 2004-01-28 [expires: 2005-01-01]
sub 2048g/073737FC 2004-09-16 [expires: 2006-01-01]
sub 1024D/1159888A 2004-09-16 [expires: 2006-01-01]
-----BEGIN PGP PUBLIC KEY BLOCK----- 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 =9KFd -----END PGP PUBLIC KEY BLOCK-----
<avatar@FreeBSD.org>
pub 1024R/F4013AB1 1998-05-13 Tai-hwa Liang <avatar@FreeBSD.org>
Key fingerprint = 5B 05 1D 37 7F 35 31 4E 5D 38 BD 07 10 32 B9 D0
uid Tai-hwa Liang <avatar@mmlab.cse.yzu.edu.tw>
-----BEGIN PGP PUBLIC KEY BLOCK----- mQCNAzVZoYQAAAEEANP5N0PqWEDO1ml4yfxXCQ+hEhaXyaGyNboh6uLX7uNPXQTI 9veETXNd20Fu+8yuzVFJk+KmmGerUzduHLXm6q+szHBvEQoJ2ZGk9AL9jj2JjFRj rCRsf6mk8SWuL0xDBTu04bZZ2ttNDxNiymNTqdBVZmX6Mdg/T2i3mv/0ATqxAAUR tCtUYWktaHdhIExpYW5nIDxhdmF0YXJAbW1sYWIuY3NlLnl6dS5lZHUudHc+iQCV AwUTNz0HC2i3mv/0ATqxAQGQ2QQAww0WfeHFmupfTBWWdmNSX9eCDIfN7Wsuiu54 DgCi7T7ixQa6reIsMAKx1KHNX/GSBr+t3nyHT7N12Ee09qKXywQAw9W2nrdMGE1V nENHEFgJtvnoN76U1goANEfZGnLLhyuDoMyZGCZmVG6FiV6EoKrWxfwq+jV0Y9K0 3AI/Cny0IlRhaS1od2EgTGlhbmcgPGF2YXRhckBGcmVlQlNELm9yZz6JAJUDBRNC H/ubaLea//QBOrEBASTEA/9H+78uZl6JvHwGKOXyZkrRCLTUgifJcR3thVfynGrM AImheJwqgVP7FQojDk8xBCBQ1b3tpwpeRPwE0V/Dr5MkFLfiaVgCIfMibqcc9zuH i4RYcRqKswiO3pFeDMyHiSxylURcHfx73CYijIDyG+HPiCQ4OGd95VJywUzOVddn +g== =jIT8 -----END PGP PUBLIC KEY BLOCK-----
<ijliao@FreeBSD.org>
pub 1024D/11C02382 2001-01-09 Ying-Chieh Liao <ijliao@CCCA.NCTU.edu.tw>
Key fingerprint = 4E98 55CC 2866 7A90 EFD7 9DA5 ACC6 0165 11C0 2382
uid Ying-Chieh Liao <ijliao@FreeBSD.org>
uid Ying-Chieh Liao <ijliao@csie.nctu.edu.tw>
uid Ying-Chieh Liao <ijliao@dragon2.net>
uid Ying-Chieh Liao <ijliao@tw.FreeBSD.org>
sub 4096g/C1E16E89 2001-01-09
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.6 (FreeBSD) Comment: For info see http://www.gnupg.org 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 gJ4OtCdZaW5nLUNoaWVoIExpYW8gPGlqbGlhb0B0dy5GcmVlQlNELm9yZz6ISwQQ EQIACwUCOuXFUQQLAwECAAoJEKzGAWURwCOCLMgAoJGhtnPbzYhZWHm5S9Dkgmvj QsgvAKDq9LzJ14Sojrtpxka5F5iViLoqEYhGBBARAgAGBQI7J4TCAAoJEGvZyNJ3 mDKxzzAAoJFFuWMLf6HHO0TiPdafPjuruVpuAKCC0eE7oh9t4xMlTb2SYWMpZS9p hokBFQMFEDsyHL7DfcPfQ7mVNQEB9KQH/iLaexNwzgB9efMXg6RH+TtaWzxBdeEc 7CD9oxjG/1tsfd8S10UScnr+JHTDNn3eh5KdQDjPmKkedPngAIjKHvb/Jux7jcxO OLmRnVeFD1kMyNlv5ggtJcHJ4QXe4rBko68qyU5ON9pvA/h7Xe/ulGw71dOCx0T6 jBlpmLF8AZlHW7z8OS+DYa7fJFI65cDbtd6c9hM+O4WNj8PK7p6MPgilIaWsnJq1 lS5fkaQK+dqaIaVEE4WqTt8v8xC805X58HZXRFma5D39yGFNd3LRCpu48mM5LDLT Q7tfs9jn1Ru7iUHyjI1Jel0hvRGblL8iW/zvwmS/XTXPsh3H0U/WfWG0KVlpbmct Q2hpZWggTGlhbyA8aWpsaWFvQENDQ0EuTkNUVS5lZHUudHc+iFcEExECABcFAjrt DlEFCwcKAwQDFQMCAxYCAQIXgAAKCRCsxgFlEcAjgknjAJ47s3GGw/KsEHKDjjRi D/kcOgiNZACgxKgabQRGmvwKMl8fTtNxiTbAyDOIRgQQEQIABgUCOyeEwgAKCRBr 2cjSd5gysSzKAJwOKSwO0ZIm9II4sjcxWPeNUHAl5ACfXShCxB2mVs6kRDsD1o7f aWeuChCJARUDBRA7MhzCw33D30O5lTUBAaMTB/0S70cAqqqAqrJBZosRZhmXWixk Ah1gMH8SkNVygA3BE3k4A9LC3LNyvlnbCGPFH8PYvN8ymcn3sSPu9nyHVZ31VDU0 mp7JvKeW49tWxBeoFWpNJeNxTv2aNpFCLahpiwcDt/HW8/1NC5dJirDrIrVTrhWG 85UUYeGmMX/5qC7bFh+Y5FC6HxnFTCWlxpZQDtWw4Dbf8r4dMrw/2I9Uubj6brEx LeOG2gB5UAuSS5Brp/9eiAlJs6jRgLU883IzpIhYanz37nJcLV5MVHhbGiR1Yyhr IQlO4pQ2f3VhaEpkUu63x6lxfyVVJsZZ+vZU6EvtJSFACWR1nK2SbszGt/FRuQQN BDpaoxcQEAD5GKB+WgZhekOQldwFbIeG7GHszUUfDtjgo3nGydx6C6zkP+NGlLYw SlPXfAIWSIC1FeUpmamfB3TT/+OhxZYgTphluNgN7hBdq7YXHFHYUMoiV0MpvpXo Vis4eFwL2/hMTdXjqkbM+84X6CqdFGHjhKlP0YOEqHm274+nQ0YIxswdd1ckOEri xPDojhNnl06SE2H22+slDhf99pj3yHx5sHIdOHX79sFzxIMRJitDYMPj6NYK/aEo Jguuqa6zZQ+iAFMBoHzWq6MSHvoPKs4fdIRPyvMX86RA6dfSd7ZCLQI2wSbLaF6d fJgJCo1+Le3kXXn11JJPmxiO/CqnS3wy9kJXtwh/CBdyorrWqULzBej5UxE5T7bx brlLOCDaAadWoxTpj0BV89AHxstDqZSt90xkhkn4DIO9ZekX1KHTUPj1WV/cdlJP PT2N286Z4VeSWc39uK50T8X8dryDxUcwYc58yWb/Ffm7/ZFexwGq01uejaClcjrU GvC/RgBYK+X0iP1YTknbzSC0neSRBzZrM2w4DUUdD3yIsxx8Wy2O9vPJI8BD8KVb GI2Ou1WMuF040zT9fBdXQ6MdGGzeMyEstSr/POGxKUAYEY18hKcKctaGxAMZyAcp esqVDNmWn6vQClCbAkbTCD1mpF1Bn5x8vYlLIhkmuquiXsNV6z3WFwACAhAA4vXK JfvHChbHRCc0z99UHVCluHwRUDopIFNfuBmiAOA7Ozz19dmYBKDgudZpDNZtbE4w 0S2eW3xVTkPUWdrhr0jDcibkhpdFI+Cp3x2zOhL16Yug1xFSqWDSOo3QX4eBVxMH 0sCHiZMlcx/QGl1bwZ9PpO10PttjloI2SqWGUNK9FGDjVfJoX8YMy5DG4rLcaS8+ m2IOb9BiYoRs2Dot9KZjWtL7+CDrFmLH4q8P6OHiE0RJy+7YoTvsHr0JU6suasHK NPfzrXlWZ8C5sKX0XuZTJNkfKojMVucM6olzpaE04NAtKjDffHr7Rr0md/6Zy7ru gJIOwClDyfMmVud0J9Sx/pLKlldakJl25Xfctcz/DXZJNGpvfeMm5+pzR/zulQc1 zDopdrSq261hJKE/5N6tPflXz9UreUdRm1mZV7SEgCKODMxSxexRfw51O0fk3vZ3 rfSjSgeIz9Fs3ypJHCd2q5C4LDa5XgX8vNSYxLKIevu62BnQXJVTKCyuvzUGOrvs nhKzR4GjrMm2575e+pxojQPVXcytFqzn4CS3QTWHvm+J1EzFwhdpR2kXAmaarpye JbUjuCDHDhJPegXY0oRa51lLhvcij1U6smqutADIQSck5JmyQKuC+x7Y8iLk/HSO 3uni8G44oFCf9KJG69f5Va0RHgjBUOZgKMAlKA2IPwMFGDpaoxesxgFlEcAjghEC 3KEAoK+jSxWG0hQa1aK0vkQ+IvD+Ag7EAKDahnKlbMifGmPSpYjK0zcUeojzyw== =NLH6 -----END PGP PUBLIC KEY BLOCK-----
<clive@FreeBSD.org>
pub 1024D/A008C03E 2001-07-30 Clive Lin <clive@tongi.org>
Key fingerprint = FA3F 20B6 A77A 6CEC 1856 09B0 7455 2805 A008 C03E
uid Clive Lin <clive@CirX.ORG>
uid Clive Lin <clive@FreeBSD.org>
sub 1024g/03C2DC87 2001-07-30 [expires: 2005-08-25]
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: PGP Key Server 0.9.6 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 =Qpsc -----END PGP PUBLIC KEY BLOCK-----
<clsung@FreeBSD.org>
pub 1024D/956E8BC1 2003-09-12 Cheng-Lung Sung <clsung@FreeBSD.org>
Key fingerprint = E0BC 57F9 F44B 46C6 DB53 8462 F807 89F3 956E 8BC1
uid Cheng-Lung Sung (Software Engineer) <clsung@dragon2.net>
uid Cheng-Lung Sung (Alumnus of CSIE, NCTU, Taiwan) <clsung@sungsung.csie.nctu.edu.tw>
uid Cheng-Lung Sung (AlanSung) <clsung@tiger2.net>
uid Cheng-Lung Sung (FreeBSD@Taiwan) <clsung@freebsd.csie.nctu.edu.tw>
uid Cheng-Lung Sung (Ph.D. Student of NTU.EECS) <d92921016@ntu.edu.tw>
uid Cheng-Lung Sung (FreeBSD Freshman) <clsung@tw.freebsd.org>
uid Cheng-Lung Sung (ports committer) <clsung@FreeBSD.org>
sub 1024g/1FB800C2 2003-09-12
-----BEGIN PGP PUBLIC KEY BLOCK----- mQGiBD9iAJ0RBACJHmAyofYftDx6hFkYRkCrM999YrKxfYGybHI+MoN2fFPXMvSh idYzBGhij1a8E7DGuZ2fGwSxdUZXcUA9PlDPuTmxs/xI/ZgX/qnG4yPgeT7KfZ5g UqRpm0/gz/7g5UsvNBw0iUzSbI7tTXprErflhUXX6cC1bPHTeEQbHe+nSwCglpMT cpcV93CQpMX+GC16UvwC8MUD/2TzigXSQ9rJNoTLuhsibSK9fh0vzq6rhCrzy2Ma G4M9kLvApu7+8YEk9ydVk9EE0PxHTTXGAxnpZzTW/bCCcLubhBqv8eXs2GOOxzHG YXb9Oyo+FDe0EAEZ5Swmf/V2eAHV4bYDmXzW9okxIUK6skXtFxQ70DxqcmtAxlxa QLgbA/9plT+d5g2s1c11Z0p5CQbxa8sJu4nLFT36DzhR2BmhTEM/X2wSARGe7PKu LdWI1WfU4Avoj9sWehSF531tMekMSZ4lp0gb0rYOyzGTqTWjq32mkqep8MDP9cT9 6H1UaSU96yyc1sprUdU7XDf7TA4jZp2LSLlOEB2UCOa0mBL9QLQ4Q2hlbmctTHVu ZyBTdW5nIChTb2Z0d2FyZSBFbmdpbmVlcikgPGNsc3VuZ0BkcmFnb24yLm5ldD6I YQQTEQIAIQIbAwYLCQgHAwIDFQIDAxYCAQIeAQIXgAUCP4IzGQIZAQAKCRD4B4nz lW6Lwc3gAJ91P1UQoV68L7emHnjqlf3nK6qzmwCgiVtWyaqQJq4fayifeKfFmT2U 0EyIRgQTEQIABgUCP2SPxwAKCRDm4NvoVAvGHGhiAJ90wTMq0zYb41tG8M+RoMyv oVsgtwCdGko61SUEB+884zRD2bHhwFMg+OiIXgQTEQIAHgUCP2IAnQIbAwYLCQgH AwIDFQIDAxYCAQIeAQIXgAAKCRD4B4nzlW6LweOrAKCRWdRCC8hQYwWCa4/upt6N hc+SRgCfVybP7alAFua8F010HJiSfXdNtFuIXgQTEQIAHgIbAwYLCQgHAwIDFQID AxYCAQIeAQIXgAUCQSQbpgAKCRD4B4nzlW6LwVB9AJ42/CQFoYKDRYz+XmCqBou9 Y+Nm/QCfZv19FBbMSOfvRW6R7nJTSkf3Uj+IYQQTEQIAIQIbAwYLCQgHAwIDFQID AxYCAQIeAQIXgAUCP+GGogIZAQAKCRD4B4nzlW6LwUZ8AJ9q3BbkGIsEuhnp6rWX uSkcXYkWWACeNSCb9l9g/650wnXPEHcHsRpzBLK0UkNoZW5nLUx1bmcgU3VuZyAo QWx1bW51cyBvZiBDU0lFLCBOQ1RVLCBUYWl3YW4pIDxjbHN1bmdAc3VuZ3N1bmcu Y3NpZS5uY3R1LmVkdS50dz6IXgQTEQIAHgUCP2SMCwIbAwYLCQgHAwIDFQIDAxYC AQIeAQIXgAAKCRD4B4nzlW6Lwb3bAJ9mJttWnct/3ej1XlvmnAxRq6ZkOACfdZDT sLSo8DN73ZKDbiP73KqDPdmIRgQTEQIABgUCP2SPxQAKCRDm4NvoVAvGHONyAJ9t QrXQSZDkm71qAw+6HiERQ+qsEgCfWuA857Lrda9ZR8X7IJJ3XLO2HPi0LkNoZW5n LUx1bmcgU3VuZyAoQWxhblN1bmcpIDxjbHN1bmdAdGlnZXIyLm5ldD6IXgQTEQIA HgUCP4IyxQIbAwYLCQgHAwIDFQIDAxYCAQIeAQIXgAAKCRD4B4nzlW6LwecsAJ9F HNrKHPsCJ6ZesY1gJI5HOVijvwCfb5G6dT2YW8TH8GNRFe7rWPXO1E60QkNoZW5n LUx1bmcgU3VuZyAoRnJlZUJTREBUYWl3YW4pIDxjbHN1bmdAZnJlZWJzZC5jc2ll Lm5jdHUuZWR1LnR3PoheBBMRAgAeBQI/gjLeAhsDBgsJCAcDAgMVAgMDFgIBAh4B AheAAAoJEPgHifOVbovBz+wAoIJhcDpcOVIACy+wboHG4nGOQfiWAJ45qvE09ckd IX+MDl7xez7OMqDU/rRCQ2hlbmctTHVuZyBTdW5nIChQaC5ELiBTdHVkZW50IG9m IE5UVS5FRUNTKSA8ZDkyOTIxMDE2QG50dS5lZHUudHc+iF4EExECAB4FAkAoN7AC GwMGCwkIBwMCAxUCAwMWAgECHgECF4AACgkQ+AeJ85Vui8HhdACeNn9owhjpYr2y cYCkOFDv+q3xIF0AnAijfOOUq2oT0d0+B9sALIz0HHrEtDpDaGVuZy1MdW5nIFN1 bmcgKEZyZWVCU0QgRnJlc2htYW4pIDxjbHN1bmdAdHcuZnJlZWJzZC5vcmc+iF4E ExECAB4FAkESZaACGwMGCwkIBwMCAxUCAwMWAgECHgECF4AACgkQ+AeJ85Vui8Em ywCdEDYOgC1/YxPHqyvEXGs+JTFFqfkAnjfkTpRPM492elqZkBlQimFGLeWutCRD aGVuZy1MdW5nIFN1bmcgPGNsc3VuZ0BGcmVlQlNELm9yZz6IXgQTEQIAHgUCQSQc 2QIbAwYLCQgHAwIDFQIDAxYCAQIeAQIXgAAKCRD4B4nzlW6LwZ4TAJ9hByDD2ep6 ixTnazmBJSg3epv9tQCeOM4JaWNwvbOrF528n8PQcgpe/3W0NkNoZW5nLUx1bmcg U3VuZyAocG9ydHMgY29tbWl0dGVyKSA8Y2xzdW5nQEZyZWVCU0Qub3JnPoheBBMR AgAeBQJBJBoPAhsDBgsJCAcDAgMVAgMDFgIBAh4BAheAAAoJEPgHifOVbovB564A mQGePiZdxv8qVwvtdyf6m9SvosGoAJwPuv0oR/D4PIDKFYtlTqfYN35I47kBDQQ/ YgCgEAQAwHkhKy54M/yuuJgb4Gcit2+fDnlRZ8yRJkGe8OSl7qx9Gaz0+kwe1Gir V+DQFGC/W3gJqjEN12jh11ZUabE3Seeofec94rDZz/YBkf5ofMT1+tN1kwr+ju7C lQdZCwNewaS2p6C5PsXCUQQ8ZHfgs8YB7Ze/TY6GvpOoDKqYHO8AAwUD/1ZvVV9P e36FE4RkHg3P1YLkMNs5fxleXD1l6LZ8ElQy1V0RVg8sD2W22xh0wP2W9RplsDYj UwFKuRtxxoEsdXvDNLaUyG4hXmNUVBz3b3tmZSvENiuj5EchJWO85T+AFT0g7ap5 wWlxOqmvHC5NZRiAP1fpKpwoSvYTLP418YSsiEkEGBECAAkFAj9iAKACGwwACgkQ +AeJ85Vui8E94gCdEqq8xPwuUc/LJQyc1ziacZJ/FmQAnA41/zThbZg2nf994Wre OT332jJ8 =EtCd -----END PGP PUBLIC KEY BLOCK-----
<arved@FreeBSD.org>
pub 1024D/807AC53A 2002-06-03 Tilman Linneweh <e0025974@student.tuwien.ac.at>
Key fingerprint = A92F 344F 31A8 B8DE DDFA 7FB4 7C22 C39F 807A C53A
uid Tilman Linneweh <arved@arved.at>
uid Tilman Linneweh <arved@FreeBSD.org>
uid Tilman Linneweh <linneweh@zid.tuwien.ac.at>
sub 1024g/FA351986 2002-06-03 [expires: 2006-07-19]
-----BEGIN PGP PUBLIC KEY BLOCK----- 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 n0IfuQVSroK+x/aQ5sdSxI2piHT4AJ9W/r1njeG2mr61pSq6IEpK9CC8GohMBBMR AgAMBQI/dYOQBYMBSLsBAAoJEGEkmiEwk5yl7bQAnjXpJCPWfdybAge1iOpvrwSk JEi+AKCsMdv288xAANZdsO11BaSgSJ9CH4hMBBMRAgAMBQI/dt5VBYMBR2A8AAoJ EBfCLtczeVosGecAnjEuTLe8jS6bgpABfU7w9o52OYuzAJ4v1BO1EMgIlzqxCKNW wy75uuFTnYhMBBMRAgAMBQI/jxJ2BYMBLywbAAoJEBnKfwIxvJ3WxukAnA7vc/P+ vq6asieLK/QcnO6rFCpaAJsGn1o2bT53xJ1VorIZPjmIp/wBIYhiBBMRAgAiAhsD BAsHAwIDFQIDAxYCAQIeAQIXgAUCQAvaEQUJBtJpfQAKCRB8IsOfgHrFOhKiAJ9W ATOU9sRVwilgeqJDb/CM4A6OXwCfUt/joKNCRo5t2MQSyduYbUUUV5WIYgQTEQIA IgUCPPvZ3gIbAwUJA8JnAAQLBwMCAxUCAwMWAgECHgECF4AACgkQfCLDn4B6xTot vgCcCTpLzPaI6PcaY6bQs0sU+vx/y2EAniX01//zLLCf32/SFgoz+sKCCVdViGsE MBECACsFAkAL2agkHSBQbGVhc2UgdXNlIHRpbG1hbkBhcnZlZC5hdCBpbnN0ZWFk AAoJEHwiw5+AesU6XeAAoIAsTf+iRoJ2Ssz3I0NVCDq5C7sdAJwPk0jhHcp+Smx7 JUf0EjiZIhlqDYhtBBERAgAtBQI985fUBYMCyqa9IBpodHRwOi8vd3d3LnRvZWhv bGQuY29tL3JvYm90Y2EvAAoJEBBYFoXFIQl+sLkAnAhFTAtrsVGOk1PhWYdYGCUB 3rKNAJ0b6UcNJBcuDLsMWrhmr342rubgQYiMBBMRAgBMBQI9BRkQBYMDuSWBPxpo dHRwOi8vd3d3Lm1hdGhlbWF0aWsudW5pLWJpZWxlZmVsZC5kZS9+bW11dHovc2ln bi1wb2xpY3kuaHRtbAAKCRDehYP4vb/oOAp6AJ9sbAZYVOAK9KJnrXG6M4HyFIn7 zQCgx7YZ3lauFFTDeQtC6f8O/YqL6ZSIkwQTEQIAUwUCPyFXhAWDAZznDUYaaHR0 cDovL3d3dy50cmFzaC5uZXQvfnRob21hc2IvY3J5cHRvL2tleXNpZ25pbmcva2V5 c2lnbmluZy52ZXIxLjAudHh0AAoJEKR5zcRatGBqDhAAn07IqzEqiDQAq9ZuHVA9 q/Se0BhLAKCDNey4KgYxDLmHlccdugDvlo4RT4iTBBMRAgBTBQI/IWPJBYMBnNrI RhpodHRwOi8vd3d3LnRyYXNoLm5ldC9+dGhvbWFzYi9jcnlwdG8va2V5c2lnbmlu Zy9rZXlzaWduaW5nLnZlcjEuMC50eHQACgkQeQV2j3WE9djt4gCfZmdTVNllaafX bvEDqU76dY3QKHQAn1P8Dr+OhFqTx8i8xse1R4dDKAa1iQCVAgUQPSHiMMRGkei8 OaXNAQEPrwP9E5Zt9bK6y9VYcIsbBFDvAYLhjhvT9IKOfQrHIzsnNgIfec6R0B8L RXGaOlUf6jMTP1p06OvuyRNGHHusWDui1nVPcN+t/uXB7QT16UefXv11czXqmzCK tDaEDQHCqAJMWAFGjL96IESNMTFGGSx87nMUgDmL5HJVaw+WLG5kcVqJAJUDBRA9 Is6DvUCm6Q/OhUkBAbbpBACdcJbmmeUz2kxRjtB2dBr3l0mVGpIMdVMC/NaKqHqk 5gxRm98cOnq2we9PSBI7H5xBmJSqX+ZJHRVUSDzoGaJ73A/yPFi8t7Q9MRMb/Xep w/bEx7jsvV7Lg+tXRedxG/gMQ5E8KS6CXRtQIprLUGQJ/rOA/wxylXPIUMGNaiEb moiiBBMBAQAMBQI9I3u8BYMDmsLVAAoJEMRGkei8OaXNks0D+QH0rq8qJNlZQIKr jHRPX8BfgN2401rOk1cRZF3SJ3zC+FK/uOM9NKfZI5E+SCaxHmzGamB7J8jYsdqM JIAMnXTjaPpXRgMs01GMBFmOiGNJJtZ/e0589n+kkjmDah1SedId48bHJQ+bBwYh /tTnQwgh8ss1f4C+ustiU2y2YWziiKIEEwECAAwFAj3aoBwFgwLjnnUACgkQ5RUo JTMc2l1svgQAk1Ep1LH00RT/M7baFu//UnQ2gal6jtTcKQlkpt+5LHqcHQRc0eri tnByi5UhHRlz8qkotdmUpbk4Qe6pi2py3PXyDcqIXiNj7WqVmrMiDVhuabjG6rz7 TjTBvCkb/cOwKA/E+Wq9EYd47CDFYhaeCaJibtaaJAgpACjLwdOBtJiIogQTAQIA DAUCPyFkiwWDAZzaBgAKCRAbsIu/KpIyJbiKA/9tGaHm/H1E8+nZbVNLycF4XHys p3AIfThFycrtF76BDzUBhMJP1wqIFoTOVpNEZyfcaRdxenBuFdfevylp0S4HKt5N junck+KFYhwHE313f4Khx5tfVji4PCtdDqDTKaDnC8+bkMBlz2aN702bQT3JYVMd ++yMkUuDQFdFQ1dBFYiiBBMBAgAMBQI/SiLRBYMBdBvAAAoJEJugaRW/hasxf3kD /20udTH6KqiBG6O25k3furoU220pjInNW4MLl9gWwx5pffmx0ht50NdP3W6Zi9Bc mdto0IbRluIiuBKMIgkaN6GJfy+BDs+Q4sPfvFYbt29Gbq9S0+5GbTRx91cAlcx5 nffuCQL+QDle2tQQWz9buIDppqkcz5Ec0SK1U7Dtk+DbiQEHBBMRAgDHBQI/FpZT BYMBp6g+hhSAAAAAABoAY3NpZ25hdHVyZS1ub3Rlc0BwZW5ndWluLmRlImh0dHA6 Ly93d3cucGVuZ3Vpbi5kZS9+YmIvY29udGFjdC9wZ3Avc2lnbmluZ3Mvbm90ZXMu QTkyRjM0NEYzMUE4QjhERURERkE3RkI0N0MyMkMzOUY4MDdBQzUzQS5hc2MiMxpo dHRwOi8vd3d3LnBlbmd1aW4uZGUvfmJiL2NvbnRhY3QvcGdwL3BvbGljeS92MS4x LwAKCRCrHktgRnVrHmr/AJ40BMVSZ0DdOYNUzMjA9DinC6rJGACaAvMqo1iyaHhy jSetEUGybb/xM5mJARIDBRA9A+0UlWBhpt2TQTkBAS1UB+ICtY+/MOSiz1j5xqhC 7STAxOPPQD18HmO3AHZywXr3G8iOh7iyJU3EphQID6B43Tvu8VjaX2mvJur0rppM lHqGDJSvk1J8diwkuhb5jwmKBBTOoPdh6QEhi8GanAizKd/rnppwAfzeP0CmiKjz QQJUiAK/P4KLhd0ObpjtfBu2D3azTLinMURTI8vYmlyK8kVgDG5fsnnL0/ksnsKw 990znbxz7unlnGCL+MSyt43CCdoaIjiaK82pt7vTVf6K5yIXbRAfphsyG4KG3ZO1 pvsFygD0sRs+NSx8Oij/zXQUhELw0/zCTF63zNDIe0w5JRcUOXdK9a8Q2j3HVJ6o iQESAwUQPQPtFJVgYabdk0E5AQEtVAfiArWPvzDkos9Y+caoQu0kwMTjz0A9fB5j twB2csF69xvIjoe4siVNxKYUCA+geN077vFY2l9prybq9K6aTJR6hgyUr5NSfHYs JLoW+Y8JigQUzqD3YekBIYvBmpwIsynf656acAH83j9Apoio80ECVIgCvz+Ci4X/ //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// /////////////////////////////////////////////////4kBFQMFED0D7Q8B VbrioJTaJQEB1xwH/RyMspXEKjRWrceEwuCwfFb7jGo8twuLcbFOSIJKQkJZMb+z gS1GsU7c4tFGk7sy9aIDTq7g+Q8/7FOVtbxQQzdP52/xYIrwj5UGVPMF9/di8GSf gbMlXmDUjg03iiwMWHom1z2Bq1wV/oPe/4LbFYodnQBX4JQebnbgkBvf/5+JGR49 p6gqv+jGJsib+Y2ic9C6nsoE5+kGygdJ4Rpj/sqiAqKeJXZ0LOHm4uffNCfD8wcq QmsWNweNkXPOOYNoL22KRdRxjYaxCD5Knhe/V+mO6NP0Eogor5qi2wb9Vnocu+ZR oVjdbh1D0+rmMWcQ3hXOJ+G0opSi7wFPiNokxmGJARwEEAECAAYFAj0nlkYACgkQ jPZsgRPdOVBIHggAptNnfiAYXEBl0t3++ByJm/lBe8WwvrEtCYCIWvW1243G7pOY a1QN3Raz5YeNNyRwlM4/lHHrY49BhU6fJsKKMGXYI20KAKYYsSdIQsnjy1ZcUJiH suZEphzutNUnh4i4x5OJfKxNbvtquk0IGNW2rCTMNLtac6iMlyDiGRwycKJo3et4 OvjTviWzwzGvg97q+4SZFnCmja0VUT0yXplg+zwCSz5jMsqtwF2RQtJySmm/EtgF LssXQi0sJC8QkB1yKryJqHKZ4p8unqv9odlrfS2dBtgYbwRFwPWESUJxMIQ6n9Rh SaI7W3RsSpm0OlZedWS4E/aojxW8ISwxs4/UvIkBHAQQAQIABgUCPSeWfAAKCRD8 uuIMohH17WYeCACJwvBuFlEe3xd6bi6L58poGqJ7nbJvdbyxPB9unygFDI/ouC57 NxQqylCoLCKhOspCe3IphaudKjuxFQDhBwNtC+5rgk97srlFYiXsuKQ4licZ/YEZ JWMG+wD9We9LIP7wmaVqR4m35s4dzVfoqrQP4gt/pr9DOPoPesZanM/+IdcEeDRr mcFYjuYhW4Ja7dl3ArtDIr4vR4SD8DVdDA8QFEF8qBmtDC0q3gAYc5R9oAnqKZRV YGrkjeRYiv1NbyZpFjb7gUFpa2/ZlMRNWC4wmyZ1Wvqq7nGYAZgG1sYcWaRDOLqP VvwlcmLPgK9654fcd5WrCznyM2os4JW/8XpyiQEiBBABAQAMBQI9BMOsBYMDuXrl AAoJEAnp+QqKck5FrksH/j37K8wcFO78HG/GO2SjKlOG8mgq2zEQNctEodT0DegJ uXW6OtKaEcLrgrNYWogBFJ3DLBc1A6esFjYqYanqv9ckYVR2dFZqPS1SbpJpdd8k x6MX0CX3gfSsH7/DwxCm3+6C7OXoOTlfLYaw3mR/wAziExU0WeEa8b6zNCe8nJly qLOm8UwOarwaYt5LAeFVrxuMw2lmkQr8VWGByXg2JTq7Ey8nKiWPR3kUny2E732B h7SkEuvQJpS3eBGzQ24enFHvTZ4ti+Ty6Tom8WQeZP9u60+pJY5vmUZjbNBl06yW 1Cl0D+60zDv+w4YBh7+MEbRzdrqObF99lKaByk4WlViJASIEEwEBAAwFAj8RDoAF gwGtMBEACgkQQAYVDkAJ6u1hUQf/YtTZirwiRKNadHBL8pbFJ+N4eWdhtZE0DRi+ gPZXHPr7vD+uQU+Bewnv49jyzhTfeKPD+02XNjwUtkWtmazbmRenPDdXw6Wzf3zB /jCYY1E8wCHYnFXp5TdAlhmitmJ5LN45EKsQ40whhI0GkbASO4/usAapNtHKZp/D FZODGO5U8bRv1BJSwoLpsH4l4vDSi3GKAelrzEpHRyE5x4OR9xOtYIlrOAgSdlKf nILoqWoqs0BR2nzpGH4nbLmWeIumvXFdspZecMIS2rCW5fVvk9dcELnakKfCv4IQ +QdEEEroTw3qtQKFg+S9U7AMAu5nLPHEVxUHMgUhS0tvm3rjCokBIgQTAQIADAUC P09yDwWDAW7MggAKCRCloGDCbsJmbfnRCACAW+HHNo7IJ0we1csKVQNDeBanMY/t 4jN7VQySWIsHXF/Wr87OwsKbwrza3RpwfRbnunFDrcKj2/DriD7hTD7CRj7M48yj DQMnTMTLbJ1sY8B+CmsHdq17DSMUiP3AIOXgFzKPEf0QhdCwRJ5YUxVAYtmptY1t 1IbLYW+HH0vUwftyFcRZV8DHdyeBlRGR59A/3fWdOQFfcExO5qbONYnfoGjX5sRR Y5zjQQn5j5vV52i3DUMSaweKCaHSCjdeftnnUh6bVB6XXt8pfXu/IychY7KYdzr3 PEA6P+6FRY0+wCckbLY8pmcVPlmUc5WytW4BRaScodVhtyo/ew9gc2wyiQFpBBMB AgBTBQI/IWOfBYMBnNryRhpodHRwOi8vd3d3LnRyYXNoLm5ldC9+dGhvbWFzYi9j cnlwdG8va2V5c2lnbmluZy9rZXlzaWduaW5nLnZlcjEuMC50eHQACgkQ+Xz54zpL f11dfQgArPGTSsMP8QxQpksXYDm8hCEkvW6e0pXnZtaF1vt8sumTnK6Ac5Yz0J7w aBD7+kNbnirrzFuoxXUqIQ3p91p2lp5kfSsAFMlg2z40Yqz9KmLqXh717qyWfO7h gb/J/Jlj2z7pZQsEJPAmyd9AF7g+qtKg008TiwAOxgD5DuOZ3a/3n7Bl2r0YRncw fpwjT+smLbodlLB/NJ9jLzsAaD4uM1b+InozBnqc6K08IckKQ6+i9G1KDDfLOa3V c45PHdNRLNmwXfFHQ2BY+gIAAN3HtkJ6z3E1akrY0o/zQafiJ01ruYgsCUzh/n98 cB21TZVLbAhj/K/uFB1MfShas4juFIkB3QQTAQIAxwUCPxaWBwWDAaeoioYUgAAA AAAaAGNzaWduYXR1cmUtbm90ZXNAcGVuZ3Vpbi5kZSJodHRwOi8vd3d3LnBlbmd1 aW4uZGUvfmJiL2NvbnRhY3QvcGdwL3NpZ25pbmdzL25vdGVzLkE5MkYzNDRGMzFB OEI4REVEREZBN0ZCNDdDMjJDMzlGODA3QUM1M0EuYXNjIjMaaHR0cDovL3d3dy5w ZW5ndWluLmRlL35iYi9jb250YWN0L3BncC9wb2xpY3kvdjEuMS8ACgkQGaJoCYg4 /ZQ2Wgf/ZA+qzqf1y3r9j+jgf8M/BrI3aXSgtL8ZDfek+rYdVcPMRKLMfnBuqV1m hOa1vPsEsnUW4Q7LWKZOcCrcQcS+eGXi8QyjHED0Tu5t5jF6laq1qy52kVav08oc +0dDuwaesIxMKvFW/qO4kM2lL3CPK0uEBkrcKMN8sasjr/Cb/O34q0v4/TtdPgz6 e6OIAAskfEi785Ld0JWykmH70IYAGKmNKqboimuax3NlZrh3BInH8VWWjubIKji/ AhPAu8zf4NMC006t9BJ+BRFeNlS7Xkit5fLDyZ7JaR4LWkrsEdBmIVG2Dm42WKKR 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 aLxP2k5qLw2ia81yCpiRcw6ITAQTEQIADAUCP3beVQWDAUdgPAAKCRAXwi7XM3la LF1CAKCTljFgyEpaGm1yxjxVtwJlhO61OQCeMoOIsDf/LGRD+UeNfrP34G3RmjSI TAQTEQIADAUCP4Mg6gWDATsdpwAKCRBNoCCKE+KQpD5zAJ0fbYjfWpiMWXrROAPt GcvKCPgCGgCeJ7U/YeWWJ9ZB+z99tDd3c4KIzkCITAQTEQIADAUCP48SdgWDAS8s GwAKCRAZyn8CMbyd1qr0AJ44zhJOMRGOHT5ff+NvfV39MHoxFACffU/M83+Kvu4g 9y6nz+5f91h1LA+IXwQTEQIAHwQLBwMCAxUCAwMWAgECHgECF4AFAkAL2hEFCQbS aX0ACgkQfCLDn4B6xTq67gCffqgqlDCuYUFLzAu8tSqwdH7nslEAnjeMkSNEh4kr suVQsc8fmLeEti0oiF8EExECAB8FAjz715EFCQPCZwAECwcDAgMVAgMDFgIBAh4B AheAAAoJEHwiw5+AesU6eD4AniXg8BZgz+FOOJBnYlOD2e57f/ngAJ9dnQSgf4FR ljyNDjN6VzBpowkGRYhrBDARAgArBQJAC9mlJB0gUGxlYXNlIHVzZSB0aWxtYW5A YXJ2ZWQuYXQgaW5zdGVhZAAKCRB8IsOfgHrFOslUAJ91ZD1UvplEZjoex4ZLAiNH RuLR8gCeLqYTaUelXjL+4qr86BiuSHnxavCIbQQREQIALQUCPfOX7AWDAsqmpSAa aHR0cDovL3d3dy50b2Vob2xkLmNvbS9yb2JvdGNhLwAKCRAQWBaFxSEJfs7aAKCm KM4Hx30WcwzBgka77dKmrawX8wCeNqMZAlB0vc3VU9VVlnx7dh/cqbWIjAQTEQIA TAUCPQUZEAWDA7klgT8aaHR0cDovL3d3dy5tYXRoZW1hdGlrLnVuaS1iaWVsZWZl bGQuZGUvfm1tdXR6L3NpZ24tcG9saWN5Lmh0bWwACgkQ3oWD+L2/6DjilgCdEkk7 NvpsXr46p2p9eADs8ORpkmcAnjZcBlDIj2c0O1pPEXOKs5BJSfQpiJMEExECAFMF Aj8hV4QFgwGc5w1GGmh0dHA6Ly93d3cudHJhc2gubmV0L350aG9tYXNiL2NyeXB0 by9rZXlzaWduaW5nL2tleXNpZ25pbmcudmVyMS4wLnR4dAAKCRCkec3EWrRgalC3 AJ9178SpmCYvZ5VbpNH64LUegUTgRgCgtllyIHMjemzT5g7r3i6qwR2uRTqIkwQT EQIAUwUCPyFjyQWDAZzayEYaaHR0cDovL3d3dy50cmFzaC5uZXQvfnRob21hc2Iv Y3J5cHRvL2tleXNpZ25pbmcva2V5c2lnbmluZy52ZXIxLjAudHh0AAoJEHkFdo91 hPXYu6gAn1a3sukcIHGqXltKgB3x9ktToAF+AKCXZGKayZGwC5Ir0Njxhsx3zwKo m4kAlQIFED0h4ivERpHovDmlzQEBFtcD/1qUujCOYiJQVN3SzyXzR6fvnHqcpc6+ J55uN7+LXQVBdW7tjc7vOcClBzKI3V1Y6a2V6VQSNX1yxGBaB+ftoCog0OyqanYg cNR+3iIvMJ4Z26V28Mptyc9Ub8cd60pADHKcWM0r4f5/5UNugnwCNg/EvjdkHg2M LqKpA2Jjw4YqiQCVAwUQPSLOeb1ApukPzoVJAQE8lQQAiCSul7FIad4Pder4RTB8 ow2nE52U4W0G0mjD78CBaETZOHGJuO8llrqnx/rYDS7rsAL8Rj/v5YrsYOBbPY/6 s94W6Jy6iWijwccQJRw91CtGueCTab9EsQE6WQnp1kxDyJC3FMytBchVE+gLmcn/ 7MhPnWj05xA4wLS5N0maYEaIogQTAQEADAUCPSN7vAWDA5rC1QAKCRDERpHovDml zaE3A/99qZ1tpSrkk3Mp/Hkbwdn/cbKpYtkMfm4yQyjaeRL52CrOtVVK68DobMTa Rz+KYTOhI9QMhkwSn3sxFpA7YmJ5NcQbw9lp4UU+42+KNj5szfEM/C+tDOyMHjBw 4sgBXvsyY5w05SLXMN9KU48OChg8TWKyLCaGZybsl0FG3D5zC4iiBBMBAgAMBQI9 2qAcBYMC4551AAoJEOUVKCUzHNpdoJgD/iTuEAKeayuvv9jrK+8dpFt44/Tk/094 H6xVIYui06ywdD+S5+fTNohceNNAwexSIeS81sc9TsJr+hSAKoH/K9eTLrVM1Esg PR3yVwjP1NglCJbqZ4NcYV+51Dn/049qQL3ekeSLNeXJs/AmYOIxLhcB8Qa734PB OBpSfs60wRMdiKIEEwECAAwFAj8TM04FgwGrC0MACgkQtGuSO22KvnEuPAQAh8oE B8HrrihRnt0ydhBQRDRPj4rtAEJ9Ft7G1D6cY32LsGlQgBRRy5IH/YmI9Ktwpi6l tX7qULUUvjPeLTxbBiKEcZgI9j8a+oon6L61T6P001uD65DHw0W/Hg8D6vzKDZyI 0OTqAi/0MTir6otSNWB/TDhbUWX9NfABiBJ4rA2IogQTAQIADAUCPyFkiwWDAZza BgAKCRAbsIu/KpIyJe5QA/kBgBlYScZSjhj9g/v9o+8vl/PuBu0LceqONiJ8kKu0 4CId1E3SbJx8hiQqWuvYaSJMZz+WmcYM4r8n8T1yQ9QLE7c2jIbU86irykBXKixX +af1vDo84B4moPZpvTs8jHBJDTWsBuGlWxxd6GHgOP7L/u1K4ZE2PC796zuSlegR NIiiBBMBAgAMBQI/SiLRBYMBdBvAAAoJEJugaRW/hasxDu4D/0DGiGqNXNF/cSeo Akt0hywxHKqEjzjGb1DTtJ4kLD1x7hC98LE4AaOAocDoK4FekUPbVgiyy0PtD3mN oJORWz28leSxNXowWz3cPIrkn/Y5wrmw7Xy9ZJXJNv0h8tcxRJgUgLVN3BFrS4sx 3sSjFMLbUH8znaZjxI9Et1iRl6VCiQEHBBMRAgDHBQI/FpZTBYMBp6g+hhSAAAAA ABoAY3NpZ25hdHVyZS1ub3Rlc0BwZW5ndWluLmRlImh0dHA6Ly93d3cucGVuZ3Vp bi5kZS9+YmIvY29udGFjdC9wZ3Avc2lnbmluZ3Mvbm90ZXMuQTkyRjM0NEYzMUE4 QjhERURERkE3RkI0N0MyMkMzOUY4MDdBQzUzQS5hc2MiMxpodHRwOi8vd3d3LnBl bmd1aW4uZGUvfmJiL2NvbnRhY3QvcGdwL3BvbGljeS92MS4xLwAKCRCrHktgRnVr HsTuAJ9cTEySl64e6UJgYUVyQ9FUhDBT7wCghZWaFgusjbcUY/8wh9C/OvsSCp6J ARIDBRA9A+ZYlWBhpt2TQTkBAQY9B+MFdy8EKYP1mgbIXhZC8sScs2sSUsLhF0Zp Sq6JcAMGIqjZZRSPfvDgt9Aqe8GnG6AtZ7NXdfYARBq301Vaf1t/kNwVK0zcL3Ts wpGZ/j9Ao+HhJFA1ivPHb3zrazrmEluFHbbPHZ+33Lvx1APLw2AXP2ise5XmO/Ra 52I5TgeNP9HJs1R+Qk8Pt+Pir5EfgegoJngRgdySfvcFFo9O2Kinx1sV3a/KTzmP 4kzmygsk2zVjTN9uLv/RV7U/MheTshFxIfQUxCFUofTz16Z5/nPEt2ePOWXQGPZr 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 eXB0by9rZXlzaWduaW5nL2tleXNpZ25pbmcudmVyMS4wLnR4dAAKCRD5fPnjOkt/ XSZCB/45brff7zO0wtcSO55jnl1ef/ivPg4jTKDRRLtTo9BEGf0NDYM4laaeFV2D AP/upFTG7I3vtRG20W64jCxzuBPto6Om8DobzCWaqr4vnuwi0sHFpqeX+pULRHFo dBPv2PMevLMDHTq7wVIh62hzJrWYPrX8CP3Fgl7s9f0O8YeoGIWQRTR+oJ9qwDqY 55uVzKfhalrxoC/MWz+Au8HAcdDJvZsTN0jEF7byIuKjnL0BQXjuMiEcIAmNZ8G+ mU3F1tZaMaEkvIC0VuhgbuuUc8CvuSdSeu2jtVdAR1T4+o7JXl7T3cMe6VMRpIZS w8S9c9oYANM9W4Fv/CcfXjM0YZGViQHdBBMBAgDHBQI/FpYHBYMBp6iKhhSAAAAA ABoAY3NpZ25hdHVyZS1ub3Rlc0BwZW5ndWluLmRlImh0dHA6Ly93d3cucGVuZ3Vp bi5kZS9+YmIvY29udGFjdC9wZ3Avc2lnbmluZ3Mvbm90ZXMuQTkyRjM0NEYzMUE4 QjhERURERkE3RkI0N0MyMkMzOUY4MDdBQzUzQS5hc2MiMxpodHRwOi8vd3d3LnBl bmd1aW4uZGUvfmJiL2NvbnRhY3QvcGdwL3BvbGljeS92MS4xLwAKCRAZomgJiDj9 lNvQCACUffB9VWqHksmiZ/5q/zKBGtWBGChdc1KkjzrMcfwZPijE5taUdS1mD04+ 6naJ+KgSbIiOrtk4GsCuHJSLBIhJy9dtpvaZMhmU6kKp1ItxXfBw6VqD3bgllDPn kWkb5q034BOAmdg7Y4jXeD5iCdUNpIGemKlF1S1GNYnYzYnTKfRIcqgZ8G4QA8Po /vDaoPw42XbEY1p3pjUjwfuh4Uhqb3lZtM/PPCHhSkogT/EW6DdyB40YfZzvDQj4 upYfS19jwbrREo6xsFAMeQ60nZFqxjbWD34BIIqnWGOGM3vU+4kTDJTH36MOHSmc pteXz4wDlBUTstG9MS1/zMPJcRt0iEkEMBECAAkFAkCSecMCHSAACgkQfCLDn4B6 xTpECQCfZWMSiTQL3cODPJmeK0lxfmtRSRoAnif1TCQIIBHuzdUVvcP6g+yVqpm9 tCNUaWxtYW4gTGlubmV3ZWggPGFydmVkQEZyZWVCU0Qub3JnPohGBBARAgAGBQI/ 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 wueG259FlMmE9O34GQCfX0DtGbMndyRtcwbXqX5ih14WHd2IYgQTEQIAIgIbAwQL BwMCAxUCAwMWAgECHgECF4AFAkD8D5IFCQfCnv8ACgkQfCLDn4B6xTptXgCggbpZ QyKe8BvYbC1NUXc9my720h0AnROeWBYTqf5E64r2kr3LEzijdJhbiG0EERECAC0F Aj3zl+QFgwLKpq0gGmh0dHA6Ly93d3cudG9laG9sZC5jb20vcm9ib3RjYS8ACgkQ EFgWhcUhCX6JWwCfWBLfY0MNvg76j1aFNiDSN0+Kc+MAnjyL6sZi65007O2iMN5Z rpizKHEgiJMEExECAFMFAj8hV4QFgwGc5w1GGmh0dHA6Ly93d3cudHJhc2gubmV0 L350aG9tYXNiL2NyeXB0by9rZXlzaWduaW5nL2tleXNpZ25pbmcudmVyMS4wLnR4 dAAKCRCkec3EWrRgauA7AJ42KOLGN/ovjnxEdHD7xzzRcHktAACgkyi3zR2G3oL5 a3nit4rQvihA+xCIkwQTEQIAUwUCPyFjyQWDAZzayEYaaHR0cDovL3d3dy50cmFz aC5uZXQvfnRob21hc2IvY3J5cHRvL2tleXNpZ25pbmcva2V5c2lnbmluZy52ZXIx LjAudHh0AAoJEHkFdo91hPXY9CcAoKrjRA8ND3y6T1aQSgRZeJeYu/LAAJ9sJeTF Mk2uR098SDRCUcfTeKC8xYiiBBABAgAMBQJADIE/BYMDwb/PAAoJEL/W7lhX938J NtkD/3/2RKm28v6btjL2UrCJg8LjxoqxSOdU6N5SLplZ2YOef3+gZUTZSsYT1K4X vPoBvPif+6zd0a9bFp+fP2j7SGMrlhHTd6+aDQ/BHaEZzt4dY2dfFcDNyvqIKeOT Xw8/HR+dwryHDNwRcEMOb00IPVjfVirOcdPNbn6jYP1LYnPniKIEEwECAAwFAj3a oBwFgwLjnnUACgkQ5RUoJTMc2l3FHAQAki+C6EKYQRullCePZ2GMJ8SR54xI42Ja PbSBzxpb684J/jabcr8WHHJvGXlapUmdl3vqlks5tatn5iFJvbE4qAPOdo6C5NXI pD5OSbHAocXj43QdrftuMVF7w1fyJBkWFoMrMZoa4FxiFLENbm7DknLebp1Bp282 O/XR9R52PJSIogQTAQIADAUCPyFkiwWDAZzaBgAKCRAbsIu/KpIyJW/MBACnClO5 +acvjHnfaUd53tcKfLkb+vWzMXWKNt37RG1d04bKqlkZdzJKT+noMBqflVf91rk3 goPPJPDjwUtm51gGlSgPG4mPnhQRrUHwC8BM0lGiuB68Z1QdxF1iUx8B623GtPrJ bfufCexrAxIL6La7KosErbR1JXbjS9+d+M1p9oiiBBMBAgAMBQI/SiLRBYMBdBvA AAoJEJugaRW/hasxbHUD/RqcGxjUaJgELwAfNcTpm86BsNL5tu6WJFe3DdIIzQTb 27GGgbOfj5NRLFnk75xgQtk8lnKqsXQHMC6hm+pwh4ZGISBZE7NIqYokUSYDT2mb plDo2kDPyO2V1fWf8P5f8rI5e2QYIvn4kNFWidfQKh1Rw86MlZVIieVf8eVeS5qC iQEHBBMRAgDHBQI/FpZTBYMBp6g+hhSAAAAAABoAY3NpZ25hdHVyZS1ub3Rlc0Bw ZW5ndWluLmRlImh0dHA6Ly93d3cucGVuZ3Vpbi5kZS9+YmIvY29udGFjdC9wZ3Av c2lnbmluZ3Mvbm90ZXMuQTkyRjM0NEYzMUE4QjhERURERkE3RkI0N0MyMkMzOUY4 MDdBQzUzQS5hc2MiMxpodHRwOi8vd3d3LnBlbmd1aW4uZGUvfmJiL2NvbnRhY3Qv cGdwL3BvbGljeS92MS4xLwAKCRCrHktgRnVrHo45AJ0dD92uCPhsjLWrVsbhMJfw mkVOnwCglKPYurVXyo6uXC/Q5KdueASb3iWJASIEEAECAAwFAj8RTT8FgwGs8VIA CgkQCen5CopyTkVorwf/ZHfXpigg+qo5D9nzURNgsckj7d5F6M3QfYUSpE7Hl882 6m80iVciBIkZEo9R2H9mFOf8CJFBLqcbz6vxRC0Q+xMbZSw8o0tRrfVTEPyvdh5a yIwKsV1mgFuxJwyDPN3zy7LejqsLQUA2IGY+pCz2kv7P0iWRvK4uaRO/z5qaF1QL d+aYssolkidmcMnkJph3+/UiN8Tvlr6UAcsAolj+ZShPM1whJ6aAOL1EnDmnHScV VmGIl6Qf2q1jtPlF3qG6CY9CyIaUSxSudAEMaGthTeM+MjP108aJcTYVF1PbyHnK y0e4tJlU/MW5OohVH3/KEmIj2lT2AvBUHbCYL4NW2IkBIgQTAQEADAUCPxEOgAWD Aa0wEQAKCRBABhUOQAnq7TmRCAC1UpdCGBG6ahH7Rmw39bsX4YqExVEuCHnTvMe3 RvVqx5uVkzsvHQU5wNYm6g+VOpMH1JMpQ7EsI4IUELbBAHfVHOOS4xWVYuPsP95o +uSGzJYs67p42cEcrHHvHh4BFYKOMnw38ghfizR0hTlQyAWsJ1E5uI/T2Yl++Iav 1tmhj2nCp/mrNDy80iTLuzLZgn/6XbPUwVS6E5YUV3AOPqOj/eDpDD9GDEjS3v9A avkmoECgLScHU25khmXwp3fogXU0LBMglGJ47yavnpzWYCk1nzR3kWGwwSb6MgN/ Ryono3kXIuCow30IZ9RAw8/6vZkK+dHF31sWA/i181nhepJ2iQEiBBMBAgAMBQI/ T3IPBYMBbsyCAAoJEKWgYMJuwmZtssAH/3ctJgr6Mh+JctTcxzMdMtVAsP1xe2CG zvVbryCztpeCQLfq/Bu3m16dfKurzArT56FQK+q+3uGrKe/tAYbzF5I+J8f+DdFt 6Rvbsdf5jxfa6VqvYUXI23B1OyKs0vFamkvm1YCLhm/fUU+GHqPZwPYasL01xUSj 8yJr/bgkXzy3A+Ddp1IFFnFBdhonANYFUOhoSaxgkTky7dLPtJS5gla5E/z4Omac V7qIGathhxGT6gVIj8kW4Zs+BrWRxhGYzGDt1fJzIDJB6ZO5bodnUoQycyKKn37Y E5s7kEdKoRMkZXWZaJk4bdF1b9EQZxlDvCBIRDPyYV1HQyk3R7az4S2JAWkEEwEC AFMFAj8hY58FgwGc2vJGGmh0dHA6Ly93d3cudHJhc2gubmV0L350aG9tYXNiL2Ny eXB0by9rZXlzaWduaW5nL2tleXNpZ25pbmcudmVyMS4wLnR4dAAKCRD5fPnjOkt/ XUa7B/9E12tRF4ZZ6zu04Ml0342x+tMNCW7BNNIYaY8vzGv5L/1XbZnUsvMbODbs wjtUIm7fTMd4QUlM0Onl8Os2jIKpk879oAptDdDZ9qW2aF49Y2xshn+OAMdnqg/s iiQuHIx7bQBdM0y0hxlw86be9ioeZxSeXPcsOfEoig7f/q2nepDnrJCOqf1L5G98 v/Wur7iMkPCoB6hb1VG6lwoATTeTqcQnBVKbxAYkNrRlzydQFMVyC1S26tkxebwU RCCQ21gIUv1WtE/dPwffygd/GnwIDnRaTq5GqkylB1//x97Y4dUy0Im7QXqNN7E9 eRpSKOZgCz50g4AL4vkIWiBz5NoeiQHdBBMBAgDHBQI/FpYHBYMBp6iKhhSAAAAA ABoAY3NpZ25hdHVyZS1ub3Rlc0BwZW5ndWluLmRlImh0dHA6Ly93d3cucGVuZ3Vp bi5kZS9+YmIvY29udGFjdC9wZ3Avc2lnbmluZ3Mvbm90ZXMuQTkyRjM0NEYzMUE4 QjhERURERkE3RkI0N0MyMkMzOUY4MDdBQzUzQS5hc2MiMxpodHRwOi8vd3d3LnBl bmd1aW4uZGUvfmJiL2NvbnRhY3QvcGdwL3BvbGljeS92MS4xLwAKCRAZomgJiDj9 lDjmB/9+xx4CERYCnN4lFiVjVFzj+kf8CSIypWi9eV4Cgm+KD4Rzp0mykx9RaOPS 80YGxNoZnWs3rLou2HZDTvMSFRewgkOcqC/FHrgGidboA+rUKTqswfoItSHnkk40 5mw9WeZHKIzuqYuTPjldEXqXt0Q6fUR34S2c539ddSST2fmZWZihKo7wTfVYr1tZ f4I3tgzko4RbKka1kTCNaN7brJ1Lnsxsv+qWpZXkkeBxzFm+ci1whREIRlCRd++K Z10UeBO8efZjNQRJ6MtZaT2l2NjAMtOtUVYoQQp62U8MaGSN4GYUlx6EeGliVG25 BxIp25aqFxE1aoxR34P5xxoo/0u4iEYEExECAAYFAkCUK3UACgkQiwjDDlS8cmN8 qACcCXDT1uoHqpYBqUwQXGBrIG98OLMAn3fDQD+PxIoQRnl2mTfS7tvK+5NSiEwE EhECAAwFAkDqYrEFgwLj3l0ACgkQHUdvYGzw6vdwmACePDgvHzOP08Y9YIeCvHDd rxovnFAAn1Drnt2s/TrU5WqQNcskN73uo7b2iEwEExECAAwFAkCY7TUFgwM1U9kA CgkQ7YQCetAaG3PpewCePfTDRDfn1Lk6GfcgT696QNyH/JQAn0ROZC6OiyRop2WD Psloq/czqckkiGIEExECACICGwMECwcDAgMVAgMDFgIBAh4BAheABQJAC9oOBQkG 0ml9AAoJEHwiw5+AesU6pr0AnRh7cno052HUBE0aa818rs/8zlAnAJ9Rpxn1PNy6 fHDfggn3CvfNoY4DfIhiBBMRAgAiBQI9rbqaAhsDBQkDwmcABAsHAwIDFQIDAxYC AQIeAQIXgAAKCRB8IsOfgHrFOiX4AJ9GHkeHPIbS/6NGOjYJCszIux9zRACdEW8b voIWBtpPqk4Ea+hzDwPAtLSJASIEEwECAAwFAkEksIIFgwKpkIwACgkQG2jc/MBZ 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 ERyMMGzC2DcISa1N0XcAoNjA/KX7Wb3TfHrDlgVoJj3Pz94HiEwEExECAAwFAj91 g5AFgwFIuwEACgkQYSSaITCTnKX48wCgln9QeNOwxvzirYVdO1JiJRVPfooAoJvb uUGz3JgYlcfIJv4qavEQxTBhiEwEExECAAwFAj923lUFgwFHYDwACgkQF8Iu1zN5 WizjwwCgg64UkRnhVE/LWsV9wKDom+APiusAoJXiKKcZX6bWxBagwGrmKps78T3J iEwEExECAAwFAj+DIOoFgwE7HacACgkQTaAgihPikKTPegCZAaWNKXI1gVzLzfTQ Y6OfbdrrMkQAoIwJ4T7oggx0nuQZIOuOhdPEWSXwiEwEExECAAwFAj+PEnYFgwEv LBsACgkQGcp/AjG8ndbEGQCfeqdzppVd/q5Ge3ifa+oGb8vpM+UAni3C09IIhlFr Al2cExRU/v8i5EF1iGIEExECACICGwMECwcDAgMVAgMDFgIBAh4BAheABQJA/A+S BQkHwp7/AAoJEHwiw5+AesU6oBAAoIWVMgus2P28XPTOPNVtwwwEHNfZAJ9wa67a r46OySJ5MGUy45zcV7CG2IhiBBMRAgAiAhsDBAsHAwIDFQIDAxYCAQIeAQIXgAUC QPwPkgUJB8Ke/wAKCRB8IsOfgHrFOqAQAKCLHe6ZQtrvqlMj45q1MzzljkcQAgCg gt8dWLdgjW5mKx+aBq0b9+V3ry+IbQQREQIALQUCPfOXzAWDAsqmxSAaaHR0cDov L3d3dy50b2Vob2xkLmNvbS9yb2JvdGNhLwAKCRAQWBaFxSEJfi42AJ42PjJMjXqU qTVmXbxU2PEJ4svdcwCfRPxi46JV2VDJ4W63G1DaUDiWiWGIkwQTEQIAUwUCPyFX hAWDAZznDUYaaHR0cDovL3d3dy50cmFzaC5uZXQvfnRob21hc2IvY3J5cHRvL2tl eXNpZ25pbmcva2V5c2lnbmluZy52ZXIxLjAudHh0AAoJEKR5zcRatGBq03YAn2ag RerjydLAVZj71bDEOOp+x66RAJ9ShytdZkMoPvUd9CV/8H5HxooLEYiTBBMRAgBT BQI/IWPJBYMBnNrIRhpodHRwOi8vd3d3LnRyYXNoLm5ldC9+dGhvbWFzYi9jcnlw dG8va2V5c2lnbmluZy9rZXlzaWduaW5nLnZlcjEuMC50eHQACgkQeQV2j3WE9di+ ywCfasORltrDCeqxTVRCt5ApJnGqJ+wAoIHdbs0xxl/6vW9hya8xiNLH6bv4iQCV AgUQPSL5m8RGkei8OaXNAQFIEwQAjU0nYZWZedJSmP1p95TXWPHU7H5EK63z/pNl bVzHyxiCwR2M6OacN7sEIL/PndMM2R0wVbfjmtEogotpKeghoAxnHzZiFJPT/VSj k/pJ0Vskoi57VlsXztfiaShSbWN2mXe2bcr5ypfY6EMNKyBZno2nSUZRdZ8pd0tZ Wf3JzbqJAJUDBRA9Is6DvUCm6Q/OhUkBAUbCA/45odKyNdrcQ1n6i1aDW+LCw8lT xsOikdW5GJQRhHr8CX38zQG9I80Mc7OqspyVCiJ7RrbJB3q8i/QSauaWBGw7Hfxi 2+KL0kkYnLVzyGwinRfH9jH2N7AV4c5pK2T6qPIqAlqvbahpiBgW3N7F23yeSkQm nZf77bwCoZ1EGBksoYiiBBABAgAMBQJADIE/BYMDwb/PAAoJEL/W7lhX938JWHQD /0KGlDZTHafArjeelk1yI0Em+7wRI1Qi6zqhsewE6O8DVobsOOeEWpc+sTsBCxig nllpVq18ovEQ1uqAGtb7mSKmS6qicn23/WgEE32ZmWInkZTAra2a0UPaSZl/1AYV EXrEEYRT8c55pbaJljPCmMeTPv4bOZ26jlnRuP1ZHnu4iKIEEwEBAAwFAj0je7wF gwOawtUACgkQxEaR6Lw5pc1InAP8DiZIr+zbc88sTKSIAta6rJgXOen9D3IfF1uf 31chOcwtXqXAZgF3PFoQMUUvsnF2nR0FdxKYx81u+DhUJf8LEzSu7KDscr1fQfnE HY8XQZkH28Nf5A4Pvif4SokGIFXPJenvivZvRXm3w3vDxWsXNDeavEwruCLwTKIQ FKW/7kaIogQTAQIADAUCPdqgHAWDAuOedQAKCRDlFSglMxzaXXqEBACRD+dGF2xl UYAuWPS1NrK8y9TdelmV9j8JkRPyxoFOUjTJima+I1mBIpvKw0cmcRMrXd1QBbgj L10PhpYZUdF3hHOqpSmG1HptytFefLb/STybLvixEeq6UGJkkAZB+nwR4Wv05fW9 /o0++/02xO1fqyQgG2+3zk0id6nVQyo16YiiBBMBAgAMBQI/IWSLBYMBnNoGAAoJ EBuwi78qkjIl2BQD/11SvcUGwoDdPSv1OzKIdLM8u57m2WA1FAOtlJYjDbra6p2n 5ClbpNwQ6phj75Hi09kcEatm2WgM5zLD7laFk31ZTPVnRK8C65ZfJ91oH0Wlkz4e ojSaTag3WHKqEcvaEBK6Mo1iiXU4o0pDq5IGuVMJeOE87Ly11fB9QCuOQacBiKIE EwECAAwFAj9KItEFgwF0G8AACgkQm6BpFb+FqzHE8AQAkMxtg+wV+VOJ3NNNioua cu7qllxp9N4WgKsdRLJQDV+hcnIMnqhOcwewKS8/ievIC1lloZ1bIiTpwtkli9qL tZMvXKYETj34YEwuc4sB9eVkxiGsh8t56s6ERgKEQMr872ZZ10F9YRqjs31whrMw ylRrBEU2SOLm5RMOzC2V8GOJAQcEExECAMcFAj8WllMFgwGnqD6GFIAAAAAAGgBj c2lnbmF0dXJlLW5vdGVzQHBlbmd1aW4uZGUiaHR0cDovL3d3dy5wZW5ndWluLmRl L35iYi9jb250YWN0L3BncC9zaWduaW5ncy9ub3Rlcy5BOTJGMzQ0RjMxQThCOERF RERGQTdGQjQ3QzIyQzM5RjgwN0FDNTNBLmFzYyIzGmh0dHA6Ly93d3cucGVuZ3Vp bi5kZS9+YmIvY29udGFjdC9wZ3AvcG9saWN5L3YxLjEvAAoJEKseS2BGdWseDesA oKCjFDCU3jIC6z+0nRKimHPzV3aoAKCrm+owZ1w6bBXMB6tZc4ZwRLbztYkBEgMF ED0D7RyVYGGm3ZNBOQEBq+gH4QFz5MNM6veSfl4uzf3ftMDylYkMjJknlg/DXVlv 0tKShrJf3MSlQQjf0x+RpAxMSOFj3OeUhTv9l+F+rnQljg7sqaey5DbJ0Tml6JVO QkqaMMVKbqo5XJMcFqvrvk4U3gSQVsMy6aIFCbUIiHDHaZgecbOnIVynPHnodPxe hO1yzHXDXXFxgFdtVQAfbBZ97x9b+o4HuJkc7wwe7cuY24ySPP4APEvwbgobn09L BTcV6df4RZBJNVBhrdi2vAyoM0cNaRTbjoH8NpTkLp91QuIWk4bbHD2r0EtxSlYx 3RfJeGpBQ10XJba7oETBXy5K4yU4R/9zFAscXcjnUPmJARUDBRA9A+0YAVW64qCU 2iUBAZ/0B/9DSJD5LUeMmra4zZ954BjdkY8UxXkMbbNU6Ea1FXjU0qEBQKCzH3RO aJeqn1+nq2XlVW0Mp1xno3SgqXXduwWkYGWjhZobvlU5KYVDBbq4lhsw2tU476X8 +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 zi3+vU2RdVKJgl4HehvyTOAS4fWMqQBhz1ha5xaXUdPFrnC6ih3bflmWxFxjK6Ot EOi+q+sTlALfPZ5S7tUazNCHXYSjtC2AncW8zq1tp+TYMJ9/Cj2j30M3752HW73o XQAHW4E3cgfiNWlxRY8eC/9XR7PpnZYV9s3gbHoYrn5vkbxOmzW+bbw//y8CBV5v tLdJo4J2bR1QueKjIAv6rBiJAd0EEwECAMcFAj8WlgcFgwGnqIqGFIAAAAAAGgBj c2lnbmF0dXJlLW5vdGVzQHBlbmd1aW4uZGUiaHR0cDovL3d3dy5wZW5ndWluLmRl L35iYi9jb250YWN0L3BncC9zaWduaW5ncy9ub3Rlcy5BOTJGMzQ0RjMxQThCOERF RERGQTdGQjQ3QzIyQzM5RjgwN0FDNTNBLmFzYyIzGmh0dHA6Ly93d3cucGVuZ3Vp bi5kZS9+YmIvY29udGFjdC9wZ3AvcG9saWN5L3YxLjEvAAoJEBmiaAmIOP2UNN4H /iI98ocmrlSsXKH4kvKrAXdVR6Zt/eWN7bDhufaiCq5gPpkySvANnBSHv083bor6 AoK4v77Otwl5SiTnK9A2YkPqfk54mYzX6Wyd9rkXfvq7gx1FZIv7Ad8Ht2aJqAhG lSZWQ9DE7b7lDtCDwrDREimWAdGozy2sjNsqPYyF0R6okrHfkOVheXEw9ogZY8hr PQYENabv4R5nIg0QsK3P5QA9c6uwcEPYvz9YLsJNPgub5PnU9hWwhinttwq5byt5 f787YFF+61LoGq94SBEG47NY+j9++vvf9YCJLnMVzmZqdE+MZyu0AjcdXNzBIByB eaJFVzSyxQcnu9EjayJMWcCIRgQTEQIABgUCQJQrewAKCRCLCMMOVLxyY6bmAJ0a vxrzQD1efLks7SmqyWL+q0sMrACfeWLTlQcgmuWDPagEG252YLLmsSqITAQSEQIA DAUCQOpisQWDAuPeXQAKCRAdR29gbPDq9zR+AJoCQLogYVirW7v9e6ueMN7GfeNp VQCggcuTNnj8MC54QqRu3aJIoz1D/2yITAQTEQIADAUCQJjtNQWDAzVT2QAKCRDt hAJ60Bobc/CEAJ905qJBRThmUHPhUypx6mhm6ZpBbgCfcbCpxMQjLIhCTbl4Xra1 cze07JqIYgQTEQIAIgIbAwQLBwMCAxUCAwMWAgECHgECF4AFAkAL2hEFCQbSaX0A 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 AsqmtSAaaHR0cDovL3d3dy50b2Vob2xkLmNvbS9yb2JvdGNhLwAKCRAQWBaFxSEJ frLjAKCvcDInjxlVoIbKXarT/Qs2KWP2RgCdG2SbtlZDLwFkZRjs0YE9+nmQPbiI iwQTEQIATAUCPQUZEAWDA7klgT8aaHR0cDovL3d3dy5tYXRoZW1hdGlrLnVuaS1i aWVsZWZlbGQuZGUvfm1tdXR6L3NpZ24tcG9saWN5Lmh0bWwACgkQ3oWD+L2/6Dhn iQCfRY91QlECGZNKnfVBlBCSFwR+JtkAmMS2LqXMI6uSKTt0w539aXD6J0iIkwQT EQIAUwUCPyFXhAWDAZznDUYaaHR0cDovL3d3dy50cmFzaC5uZXQvfnRob21hc2Iv Y3J5cHRvL2tleXNpZ25pbmcva2V5c2lnbmluZy52ZXIxLjAudHh0AAoJEKR5zcRa tGBqms4An2lrhQ/2N5lh8pnZ1Nwi9eX2bnWmAKDGEqVycEviEIe67HbJHuGnOLta J4iTBBMRAgBTBQI/IWPJBYMBnNrIRhpodHRwOi8vd3d3LnRyYXNoLm5ldC9+dGhv bWFzYi9jcnlwdG8va2V5c2lnbmluZy9rZXlzaWduaW5nLnZlcjEuMC50eHQACgkQ eQV2j3WE9dgnQwCfcGtsy9PvbnJ+BBGMntnsGNn7Zy4An1dBhrQ+qqrMEV0l/MYN blU/Ab06iQCVAgUQPSHiMMRGkei8OaXNAQFO8QP+ND89vlNQ6i6oXPavoIxmGim7 wfXKdVw+03bWmRkH5RWras41FjBcepqAwTaR9nsCcBEcWixTyL5fNEcIXAVTmpz2 F0v05NABsIbF2JzZkl0M+XrMXvVCBZNDYGTRfI3vbzDoA+/rDVbvtzT0HOOV2oyr KEauovrzosuPIKyz67yJAJUDBRA9Is6DvUCm6Q/OhUkBAT8MBACch7zkD8aZ14D0 ZHB/lgQE3g32AAovMEbWKqQR61FqNIvMftOVfUFhGniUmrmihIRKBec4xtAkPhWe +4FnBfltgFN7AV17d8iu4btslQ7tHWeFdcnDdneC71fbNl/hooPpZxd5vZ/oRO15 Ed5I3L5U6Iuw9awLUIOBucSRRVcZj4iiBBABAgAMBQJADIE/BYMDwb/PAAoJEL/W 7lhX938Jtn8EALGbaC9Xrr9daPicfwUmsTmxEV1DE0OFkB0YfrmUk1ncTNB/pSwr 4QaarsGdW00ShZ5m9SWU6ZHn1CeYf2RtTFgT/EwN70DM1YcLuVaw4lnoafDiuYZY kUCs18u6orqd9A20gf2w6P+9PowxlNUnJTHVViABwdEWePrDM9L5ui37iKIEEwEB AAwFAj0je7wFgwOawtUACgkQxEaR6Lw5pc2lFAQAg6KOdiu04FGz1jz+Tggkl7t4 KtDJrGZBmva4vxUBhK0AdlMsSZZXbIodSR7PVA7Mb3L4tDx0tneFIAC+32KewWOu CXwtVwOJZK3axg9w5GFg45Ghh8Hc5F1M5Uyq6NvWyb7qi7XUmhH5qM6eqDcrhvCO TRCLGPBXM8p4+aK/T0SIogQTAQIADAUCPdqgHAWDAuOedQAKCRDlFSglMxzaXYpU BACdppXJbQfw8kLTTp3l/qgECXti+n7rEK30MQ4OHNdFpPuuh6d5r6KETkQSRTno tVdXpQUq6sJIoa4qClbmz6R1VTEgArHW8X/jpws6dsXBAJU3GutEQpN1a+x6L8At 6JNxUGHpzrIzdZopuu9Q6xLkoWXXF69vDZlW0vwcV3XgaoiiBBMBAgAMBQI/EzNT BYMBqws+AAoJELRrkjttir5xgRQEAKectU4Ib51xMNA+0lRMV+GAYwXOFpI3WCTX Dxr/nvpc4QUK+KJkVn2l8idUCOMCYSDrvVAGnl53AUTmz02sLA+20Tn/ZAqIrP6T 8cKvFO+ju4x3NFNaNuN4s48ZaGudr5VFaJcrAU0PvcG7Qe/WFgi++gMQUY2WfJ3K vCGfAG60iKIEEwECAAwFAj8hZIsFgwGc2gYACgkQG7CLvyqSMiUinAP7BRufbAis Y6A57wCMu7SnucxE8mYPXrA1D91BNhHC5j/2oVjD8ABFNRZuN1oSn/eryx/eE3e6 2YrI4u88ZVP+v4Oc/olAN8xQUyUOjuVmFShhkRvz9jH2ZZgBFEyGGLjw5/FqOZTs P3iRdozgBgIuyCz3h4V8Y45+9l9bakLiTluIogQTAQIADAUCP0oi0QWDAXQbwAAK CRCboGkVv4WrMc/jBACRNmWwawnpyeu8FWycyEwgCIGwubPCuw6h4RCMSERvztg2 1NYN5oMW1fuj2gKJ5z75fhxBd5PNoNte7T5E12Cbga7eU/zYHMMc5ZDGd8VCmcm8 +dCr8QwJysOTiHKUp4dhO/iWtQJAW8xecP62DHVSnZY9dQlHBGPQlZMEIHNCq4kB BwQTEQIAxwUCPxaWUwWDAaeoPoYUgAAAAAAaAGNzaWduYXR1cmUtbm90ZXNAcGVu Z3Vpbi5kZSJodHRwOi8vd3d3LnBlbmd1aW4uZGUvfmJiL2NvbnRhY3QvcGdwL3Np Z25pbmdzL25vdGVzLkE5MkYzNDRGMzFBOEI4REVEREZBN0ZCNDdDMjJDMzlGODA3 QUM1M0EuYXNjIjMaaHR0cDovL3d3dy5wZW5ndWluLmRlL35iYi9jb250YWN0L3Bn cC9wb2xpY3kvdjEuMS8ACgkQqx5LYEZ1ax5cmQCfQ3wka/3qZHrRih4BSahLVKSm OR8An1drwAOjOfxAgTG82IJ75NAMl0f7iQERAwUQPQPtJJVgYabdk0E5AQF5Tgfe PReDw5ujR/pK+AkZNWQXvVz76Q8IvdnbVvF250rkHhIk8rrobIeocc53NBOocadE 5EsskELwpDO43XqWFM9GE3K7/+wd5fD3Epty6bZbkJrLmqBNQzYfY654C8I0JRd9 f+AyAAG/EeRQwNhNmHrOktBMDxx94472nmE9evpK8Ny7dnI2ur55rJXpXoAnPB78 aj0bzkAGSSoNnDsEMjc99MmAWhRHBCghQ5rACj3fef6Th82gAJGJQx685TQUP/Yn rgKThp1nuc60yeFO85pyZNcEjqVULc5Yjo9J0XVbTxkswMu9V3og5MF9WabibPul pwLCcrGURe8UnvvPiQEVAwUQPQPxCAFVuuKglNolAQF8fAf9FRYD4NPCgtRI3ZHU 5q7iOUUYZ7q6qxAzbofc4RqHPgyMeTjAaSnb/xbgTC7x8vbOK6YNqveDW+HwqFNr 8/CiTMhbwyD5S8Isa4qgQXiEz6knSZhkM4d2zTie7QaEgc0YPkwwgj8iN81p6GaZ 7+QErt5wzg4iJnAWjBDPF5b0eHIor+OJINegunfE2dSpWFMmMxpgQNQIsCLj52Xc JJhy9TjoL4gWXaKS1DXcTJrkqaGQu35FDwIL8h1CF3WiHhwbDt3XUAA1phLmgPnb e+AmSfZKKGcBSIlS7AOLBY2tcr5izumDtA/8UxmA4+KbaCjufxIgSwiYF1w9tNa2 SNCxvIkBHAQQAQIABgUCPSeWRgAKCRCM9myBE905UIM0CAC5DMi+sP2MvevGoeSr MKEqJJLgrCY+1X6hwV3Et1nfOclxtICKWw7Kd1oaDLORd++VJM3b0L2Vu6riJ75+ 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 bmluZ3Mvbm90ZXMuQTkyRjM0NEYzMUE4QjhERURERkE3RkI0N0MyMkMzOUY4MDdB QzUzQS5hc2MiMxpodHRwOi8vd3d3LnBlbmd1aW4uZGUvfmJiL2NvbnRhY3QvcGdw L3BvbGljeS92MS4xLwAKCRAZomgJiDj9lAmfCAC89hFV1QPBgmZe+pF5bxkpld4c /P6uGwSJZ2Mumi87GrkesKclpnamTD1PirLdJqO/Ffnq7zdOJ8TpqAWVXWnjJUck 8oqlkNETlTWqNdqmT8ljIYoqPUTFP5p6PADy4xnmFueSZPQwecXbiW/elXc1eHW3 PYLuaw3jbtso68o7cU13cfqEzmN5n1HKnXixT7JMLvwdgbikGGIgDqxXHrv11/Fb alEeXQL+PF9dw2G0ugXST0OlrTksShyEv5Nqm480rS8E64xXIaa/4Kb+OwU9x6IC 0yV/X+erJvK+6sYcSoqpqu7TskTMBjNvESarjuUPSzpi3LwsmvKUd+BMrVELiEYE ExECAAYFAkCUK3sACgkQiwjDDlS8cmP7ywCeNNNwkqLhZfeLuzlWvAOp5wZ0vOQA njRUkNfSkBBEQrNUrh7RCH24I3+5iEwEEhECAAwFAkDqYrEFgwLj3l0ACgkQHUdv YGzw6veqOQCfZ4f/7xdxNmr3zuCAKv/r2MYLUgYAnRTfu8DAYqgVjj6DfClt7f6b R2dQiEwEExECAAwFAkCY7TUFgwM1U9kACgkQ7YQCetAaG3OSvACfZ6iEHUc2wGId gu7oJ+12YGdLUD0AnR75JVZbFEH3L7NEp1zy0TuIuLzKiGIEExECACICGwMECwcD AgMVAgMDFgIBAh4BAheABQJAC9oRBQkG0ml9AAoJEHwiw5+AesU6/osAnRUXgHdm LLbpQqytH7ujEnw4dhPbAJ9l/IaaLZFGdKVeJHnjCH4Jt9z/4YhiBBMRAgAiBQI8 +9joAhsDBQkDwmcABAsHAwIDFQIDAxYCAQIeAQIXgAAKCRB8IsOfgHrFOpCRAJ0a S6qwC4olz8Oe5qHwKtcZjiE5nQCeNPwyrZFzhdGOGk8Lmv2z4UV1MRmJASIEEwEC AAwFAkEksIIFgwKpkIwACgkQG2jc/MBZaCPkwQf/Y2icRxtO4dGTVZWD5CGgEnBm cQpiuuGePnJTuOSoH05C8wdxGCtMxRtSgq6mmNVw70LitR9V+qdGPih/7E5x1aTj iB8NHw6NOkGfIngSogiPB6vhHeDuyBVIl8YukPD2OVjE/G0J1piWt/e14N0Aalt5 ByeE/yyo3pGrzPMHjZJqX270cnhnE4L9lnUBWbuquAR4LzAVYqUxrb123Vwo7xOE Hs7z4jFZM1D2YYdBFlEmC+wWP7LgVJJmoje7LaCfye7ry2qDge+7NgZbDaiD7037 tVlgHFRAuL+BLg6rKK1BkLqmzH+A+JdDkt5Ecwbyv4SsEt3/B7mfE8bOoRx/c7kB DQQ8+9eSEAQAlH4len4HnBlYW7YTMLAQfusc2JdxD+meidHs1XaBs5Rn0seyQefm Oro01k8R8jAEmqzhHCghvVEU0aTLHTWqPHfIxS05HLZIYQ0IEFMf5z2SSsvUGrgy dtHq1a0Bw4qN5+xkOMETZKBdM9bgnL7KtF+GHFrrftvLblabHw8eXAsAAwYD/11G vCT+Nc9wa+pzLPgj92xMz0iELHIq88mCEHEY1MCaodifdZZHwfj1wd+Lddbwcw1e X62TghQunsYDxqSYrDjx3rmip30oPjryT5SRqB07zc/5Sh6G2/xE4JtgQIXkCQ+C 2TynHw3kSAcTY8A2tdMvQQH9MWJ00t2Im74JSwMYiEwEGBECAAwFAjz715IFCQPC ZwAACgkQfCLDn4B6xTot3ACdGHGZoFk9kC8+dUofV/TNC2y1XS0An38uZp7TSItq 6FjLGnwwxyEHKSi9iEwEGBECAAwFAkD8DdkFCQfCnUcACgkQfCLDn4B6xTqLnwCd F76qbc4881DthYFd9nJnW12u4yAAnA3LDx3zoquK+sljWqO1CfmWqv62 =uO29 -----END PGP PUBLIC KEY BLOCK-----
<remko@FreeBSD.org>
pub 1024D/8F494B77 2004-09-03 Remko Lodder (my FreeBSD.org uid) <remko@FreeBSD.org>
Key fingerprint = 575D 8AD6 8646 E6D2 1226 0A8C D2A9 0DFF 8F49 4B77
uid Remko Lodder (Remko Lodder) <remko@elvandar.org>
sub 2048g/D843AEDD 2004-09-03 [expires: 2005-09-03]
-----BEGIN PGP PUBLIC KEY BLOCK----- mQGiBEE4vPoRBAC4dNWQ87nDcZoYBN06IANIh9vEomUme0YimbljsIozq+BLDgZi 6A6iQXWpoEWSCOHX5nCnQDS0selxJ7easE8tm2NXHIKLOCStDh9Jk9/dPpvAPAKF ZRyRf6emtNFewvQqxaP16Rs3mlvyfzKDWhIp9QPz5SohpgrpsNR0HcU63wCg34zJ uXgWapznE1e/gpFHVSdao0MD/ieMQBXiusNFj+ULjm9w+XossGiSuk5t9n5YlLtl Y+wpfeXq0bAlAjCHMmL3ZpPsksyTcJT4NEYyd+JUKBT9YVOitXHUfW005qHDFXBw 5hMl8SritJLxNY7OfEvVeGM06Ipeaw2IwxrSBiN9vmPMpdO9hZl1Vbj0vJ+CTgnb l2fDA/9rsMfj8rsFNZipEprRo3tJQ4G+SaZAIvaHxwFC6ecTrIJ16qYfSPOB50RU Yuiz2UTQeVUHYcUqzpcVmUAij5WX1gcIrQdYL9BC3Kpp+POc2IPlpHcqcijhHbi0 WlbRyaMTkARVJ6NTU6wFChvS7WTHwApo7dUJJEYNSYkggksiGrQwUmVta28gTG9k ZGVyIChSZW1rbyBMb2RkZXIpIDxyZW1rb0BlbHZhbmRhci5vcmc+iF8EExECAB8F AkE4vPoFCQHhM4AECwIHAwMVAgMDFgIBAh4BAheAAAoJENKpDf+PSUt3EscAn3iv MzGhinK3kmaysN5MCcLFI+DmAJ9Uc8sLwL+sGpAVaD5ETN7RQ9zmZ7Q1UmVta28g TG9kZGVyIChteSBGcmVlQlNELm9yZyB1aWQpIDxyZW1rb0BGcmVlQlNELm9yZz6I ZAQTEQIAJAUCQXBYRAIbAwUJAeEzgAYLCQgHAwIDFQIDAxYCAQIeAQIXgAAKCRDS qQ3/j0lLd2BwAKCqTX62b2I+XEMoL7pqs9UO+v7SxwCgyTfd/k0UyBlfefZHIQbO imSAT/y5Ag0EQTi9CRAIAPuPdKJu0sPXK55CMvYS1p1/5HxOsuO06WF1KJGssx0N 4aaaxnzNT/b/dFU2DgrczZei/6Ln8Q8IXmtb3fwH6JarVKFx9R0GVwi/kNhrSpca +TwK7pMOmCx1NGRamqxXwFydQRry5JmIL22+0gQ8Mth5hxZ8I5jUjhy0SHljoaOi TtEn6jFRQKrljEXfJhw+PGT2++VllHxnekxYbBVNEU9WrjtiP6ViOLnIETXiXBg2 JpUopMiIfM3sDwTTdSSwxAo3blKpIZuo5gqpa4tEG/RcZjcRkSJvsvw/HV4aq2AY tlQuqlTu63lTj1ymNXxK0n25wH32AH3vCDSFauJ+o/cABA0IAKq3UIeAct1raNxC SONxWDxpHD7YZ5WXex4dpBx+tQOiRgcLHjdIscIcwEaiL+/pzqOHaaux5h3Co9l1 K5dJ4y9f5kHaJNqzt0mcyp6iZXuHMLfymUBF8KF5+BDxtaMO0GrQOkIf3YWO5ClE 4C4pDAsCpcJ5Ai+t1lzDZjSN6Krw4UCJCAumZPOz95tRbVp77rfcO4AGfKJUTRXS 5RDaQ5VpaHmMJDkZ2YXDgVrxFRWS8Rw70ZeY7Cc2y88SUMsu42tD+VxVwXJfHz7c EMn0DTkc+gP3+V3cholsHAyyCn22nnX02HUdE2v0jbUiZljMEbQVGqevA9lilGw+ kfKNGLiITAQYEQIADAUCQTi9CQUJAeEzgAAKCRDSqQ3/j0lLd6oDAJ4m+MR+7nKJ l8wGWZ84BsiFS/2OvgCgouIxlC0t78kXgBz3zjM5oOYtfCc= =QVjz -----END PGP PUBLIC KEY BLOCK-----
<pav@FreeBSD.org>
pub 1024D/C14EB282 2003-08-25 Pav Lucistnik <pav@FreeBSD.org>
Key fingerprint = 2622 B7E3 7DA5 5C53 2079 855B 9ED7 583F C14E B282
uid Pav Lucistnik <pav@oook.cz>
sub 1024g/7287A947 2003-08-25
-----BEGIN PGP PUBLIC KEY BLOCK----- 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 =Jmz+ -----END PGP PUBLIC KEY BLOCK-----
<bmah@FreeBSD.org>
pub 1024D/5BA052C3 1997-12-08 Bruce A. Mah <bmah@acm.org>
Key fingerprint = F829 B805 207D 14C7 7197 7832 D8CA 3171 5BA0 52C3
uid Bruce A. Mah <bmah@ca.sandia.gov>
uid Bruce A. Mah <bmah@ieee.org>
uid Bruce A. Mah <bmah@cisco.com>
uid Bruce A. Mah <bmah@employees.org>
uid Bruce A. Mah <bmah@freebsd.org>
uid Bruce A. Mah <bmah@packetdesign.com>
uid Bruce A. Mah <bmah@kitchenlab.org>
sub 2048g/B4E60EA1 1997-12-08
-----BEGIN PGP PUBLIC KEY BLOCK----- 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 =mFiB -----END PGP PUBLIC KEY BLOCK-----
<mtm@FreeBSD.org>
pub 1024D/7CD41F55 2004-02-06 Michael Telahun Makonnen <mtm@FreeBSD.Org>
Key fingerprint = AC7B 5672 2D11 F4D0 EBF8 5279 5359 2B82 7CD4 1F55
uid Michael Telahun Makonnen <mtm@tmsa-inc.com>
uid Mike Makonnen <mtm@identd.net>
uid Michael Telahun Makonnen <mtm@acs-et.com>
sub 2048g/E7DC936B 2004-02-06
-----BEGIN PGP PUBLIC KEY BLOCK----- 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 =TuyI -----END PGP PUBLIC KEY BLOCK-----
<dwmalone@FreeBSD.org>
pub 512/40378991 1994/04/21 David Malone <dwmalone@maths.tcd.ie>
Key fingerprint = 86 A7 F4 86 39 2C 47 2C C1 C2 35 78 8E 2F B8 F5
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: 2.6.3ia mQBNAi22tqgAAAECAPARUB5VpJvYQyHAzL0WITkJmKG1lpwFMPz4jenjJRplPr33 OvKxQcXh1bAWNVFiJVDJsWwnfif94wQdVUA3iZEABRG0JERhdmlkIE1hbG9uZSA8 ZHdtYWxvbmVAbWF0aHMudGNkLmllPokAlQIFEDCwQ4yqxsuiiP+uKQEBricEAKAE f18kbKpFKU/DPRVhVYlLHCkzXLzZCiTxBUGjMaXZswKwrjVLF2l8mrNQhqC9L953 AGyUYNfPLtqw7b088v3ATCIrZ+izWyE27IrjZWSS57GZiDtnkm6moarG79yANBql LBc0sK077cHEC+/gDwXNBLg0NNpHkaVXPxixt/ETiQBVAgUQMK+p+pFKk8pIl/up AQF0QQH+ME6vPoS2+FgSN1q9R1hwmwEPAaYdyfhv2lj1/6KYDEaO9Lhw2u57nW7z CDpir9gNN0X9U3XrIxlJ7wWxa1k2PokAVQIFEC7vu/zjBB1VQDeJkQEBWFsCANX+ qJO8J6qeJW8gcrmxMBA0l2MjEHcu8XNky6YT3yS6So72yL1lZbG78Sew03fXnWNS GyhRrPz7sURNLtJDNDo= =wpn4 -----END PGP PUBLIC KEY BLOCK-----
<kwm@FreeBSD.org>
pub 1024D/F95426DA 2004-09-10 Koop Mast <kwm@rainbow-runner.nl>
Key fingerprint = C66F 1835 0548 3440 8576 0FFE 6879 B7CD F954 26DA
uid Koop Mast <kwm@FreeBSD.org>
sub 1024g/A782EEDD 2004-09-10
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.2.6 (FreeBSD) mQGiBEFCGHYRBACI9ERMi5j2009Juy2kpXS860i9tJJ10mM9TNuCZVYcPRRTiSWe Q+YySmBtR9TA3OZfd6BA9EqusEgcwUJpxjZ8zjGzirj/OjcPtKwM9ZO6dadeMNaE wT32bJDUw//2ky2xflJCsjg+TSO7PxQi3g/YEWfau6Istg8PKfzHQan0EwCgxwrV 6JijZQ85jIgQoceJjkwBLHsD+gKeeSUG7g2CO+NJf2d0tBj+l22QzmeAtlnuUskd nHKDAzzty80e4HXkUYw8IMueR7Fe2Tjx20OvVSkzMwiZYqevIJHVhiouCFZxYpSa JQHPYLpMXMVZ1X8d17tjbFRBXWmNrDcEhb4m3WoDKfQD/qbMCwBErsQ0t15dddnQ BVyqA/93dSzMYRC+Zm6Hzfk5Dz2MsvsxEE30ysSwFjIZ06RtYPKlN0x3ABCGba8f o5H0P6+gobJRLTQfK4xDS4J3G/d7TWO1bZGk9MPEzCJDexTt5yfKsY2jZRVRrikE fIbdSUgLnczBdUno5qC9IyMhGNa8O92GsjleDm7D+p+wkkoyCrQbS29vcCBNYXN0 IDxrd21ARnJlZUJTRC5vcmc+iF4EExECAB4FAkFCGHYCGwMGCwkIBwMCAxUCAwMW AgECHgECF4AACgkQaHm3zflUJtqlWgCfWKIRLzsvZjBjuck31Ep8sEDP0GgAn17m X0hYq8W+2gbHbmYeqIFefHs9tCFLb29wIE1hc3QgPGt3bUByYWluYm93LXJ1bm5l ci5ubD6IXgQTEQIAHgUCQUK9MgIbAwYLCQgHAwIDFQIDAxYCAQIeAQIXgAAKCRBo ebfN+VQm2sH2AKCnwIQ3C8+62/uQh05mqXqdzAaU8gCdEkRN+L9HY1OwFlSDi6Tc OAWLTPG5AQ0EQUIYdxAEAItGBQMO4f4rHYh9zc4fd62RhBfMHJpY1ex6HeiHt3pb i6KfBUai1zRYxgq9F+8qR9WgBLF1VhA4O0nCU9/FKOChc19W7xKa2auvE22Kq1ta xjCszahtPTDGIBs4K8u0fH/Gx4VSikQcfIGNd3IK4vALbLfH+iK/1RJNXPzQ9A4H AAMFA/4+UBNqZPucstZgmEwVB2H1Bt671fQqODpWj2eOMIYJWXKraUxdIjUqzm9K QhC7LBj9ihsn+LRsO49oWIAv5bks4zC0STACJ+Lx+FMb1i5ayAp/03DoZyrjRnGb SIY8Dtqonut2nic0NQ4XD5uqTkx2t7xlKJay/n4Nop2uqwajOYhJBBgRAgAJBQJB Qhh3AhsMAAoJEGh5t835VCbaOZEAn3wkQ7xISlGUox1/aiPU1CafRrZyAKCXgDLa wlCa23ftqh2DPxkAXtCnEA== =FIQv -----END PGP PUBLIC KEY BLOCK-----
<matusita@FreeBSD.org>
pub 1024D/20544576 1999-04-18 Makoto Matsushita <matusita@FreeBSD.org>
Key fingerprint = 71B6 13BF B262 2DD8 2B7C 6CD0 EB2D 4147 2054 4576
uid Makoto Matsushita <matusita@matatabi.or.jp>
uid Makoto Matsushita <matusita@jp.FreeBSD.ORG>
uid Makoto Matsushita <matusita@ics.es.osaka-u.ac.jp>
sub 1024g/F1F3C94D 1999-04-18
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.6 (FreeBSD) Comment: For info see http://www.gnupg.org mQGiBDcZe6YRBACDOZSZ5cWE6IvNkx2Ht6S/VdIY1OXFU8n+cOVxNIHFWXPUOrFG F526VZoPfjURnslubdxXC8TKGspX96uc1jdROHvEwsxUUELyzZ7G5oJ5wd4jHwjq K5zwV5FZoNm1SHdeN0FqZB9rlJdOt0kxVZS+b1PUc0j1i4oDNZz7+8rc0wCgltLi c2i5RQzjuvJvF9P8OYGujHcD/3Tq02ov/aNX+jIoO58uuOBZpYFL7ZfbCeiMs+4A dmvjTI9MpfLBP711iu1asuikx6HLQts9UTVk36qP9ubNmFi54kDHsej7Ce8m+dOu Cjcjle6Be71MGLq4YUxd9xZmGGDPhEFnHWbB/QPP4n/m3DN3hblWBgP2PsgmqDyK 518dA/0bhL5pvw5LSaRtGxxWvFBInfWGzC5EuLw4ERZW+bEFB0To08ZnocLRN/E6 tZ2JTr2O5aMLqUEM3jgsIvs9EOGUBwPRzyOQXpc2uQemn7J0pL6PQfuBIaUI/NOu ULM0gQfLIV3wOP6Y5gH0FBcLt/ofrqdYys0C6zTq3LqDW5FdQbQrTWFrb3RvIE1h dHN1c2hpdGEgPG1hdHVzaXRhQG1hdGF0YWJpLm9yLmpwPohVBBMRAgAVBQI3GXum AwsKAwMVAwIDFgIBAheAAAoJEOstQUcgVEV28OwAn3Vej8AnsKK8uTWbJ21VDY7T OjUEAJ4yLYfPw5a8C8vGiAKid9sGeZiGwbQrTWFrb3RvIE1hdHN1c2hpdGEgPG1h dHVzaXRhQGpwLkZyZWVCU0QuT1JHPohVBBMRAgAVBQI3GX1RAwsKAwMVAwIDFgIB AheAAAoJEOstQUcgVEV2OhMAnRDxuze75oYGBKpmajy5uqKoxzqSAJwK9RX1Qz16 XxNkpl1GXpxu/uTMJ7QxTWFrb3RvIE1hdHN1c2hpdGEgPG1hdHVzaXRhQGljcy5l cy5vc2FrYS11LmFjLmpwPohVBBMRAgAVBQI3GX1lAwsKAwMVAwIDFgIBAheAAAoJ EOstQUcgVEV2cwIAnjzKpQYVzgQKH+m2p0INfg9WLNv2AJ4pKR2Euf6bc5a2/gmX dIjpyg44brQoTWFrb3RvIE1hdHN1c2hpdGEgPG1hdHVzaXRhQEZyZWVCU0Qub3Jn PohXBBMRAgAXBQI71CCFBQsHCgMEAxUDAgMWAgECF4AACgkQ6y1BRyBURXbNzwCd FbR5SgpkfCI3USicWNAuX3ZmgxsAn3nMt3/3WBkLJYx4b9Fq9j8XIrHEuQENBDcZ fB4QBACE5eLj/ouWmFq+5jwSwGln6EOH8k96VE4bUrYspqrKxAxSoVagPyg9z1Fd QnjgXPaKuvcdfqVJZFWM97w675NIT/ncup3q1BG5HRrTCi7xs2pHaJ3eeY4Ek2eg jx8asi72tOkKWPLY/Qjg7pxVBPjD1VeC3/VOMDHhA2RRGL3GowADBQP/ZCqA2Nbq 9ZgDyUVgHBDjcZ8Ilqnu5fvn4P9veMK2vCJAGxe+tIjJ6qut6mr7Bk+sUrTIvRMG QuvO6fOrBXseihfrrz9OAkwMrfhQKYe6GuOAHViaOLSeEj/MSM5zomUvHJVsMU2q r/TXMui2cG2X/z+Nu3oBdc7r+QPzEztyg+2IRgQYEQIABgUCNxl8HgAKCRDrLUFH IFRFdivuAJ0clNOzjVcGl+mtAISube0ZfBGsbQCfXNRIS0bUADiMVc2AiW53Q47h oyY= =GDLX -----END PGP PUBLIC KEY BLOCK-----
<ken@FreeBSD.org>
pub 1024D/54C745B5 2000-05-15 Kenneth D. Merry <ken@FreeBSD.org>
Key fingerprint = D25E EBC5 F17A 9E52 84B4 BF14 9248 F0DA 54C7 45B5
uid Kenneth D. Merry <ken@kdm.org>
sub 2048g/89D0F797 2000-05-15
pub 1024R/2FA0A505 1995-10-30 Kenneth D. Merry <ken@plutotech.com>
Key fingerprint = FD FA 85 85 95 C4 8E E8 98 1A CA 18 56 F0 00 1F
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.6 (FreeBSD) Comment: For info see http://www.gnupg.org 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 sGDiYyJDVnPYxZcEN0h06w== =CRmh -----END PGP PUBLIC KEY BLOCK-----
<dinoex@FreeBSD.org>
pub 1024R/331CDA5D 1995-06-04 Dirk Meyer <dinoex@FreeBSD.org>
Key fingerprint = 44 16 EC 0A D3 3A 4F 28 8A 8A 47 93 F1 CF 2F 12
uid Dirk Meyer <dirk.meyer@dinoex.sub.org>
uid Dirk Meyer <dirk.meyer@guug.de>
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.6 (FreeBSD) Comment: For info see http://www.gnupg.org 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 =b0g6 -----END PGP PUBLIC KEY BLOCK-----
<sanpei@FreeBSD.org>
pub 1024R/391C5D69 1996-11-21 sanpei@SEAPLE.ICC.NE.JP
Key fingerprint = EC 04 30 24 B0 6C 1E 63 5F 5D 25 59 3E 83 64 51
uid MIHIRA Yoshiro <sanpei@sanpei.org>
uid Yoshiro MIHIRA <sanpei@FreeBSD.org>
uid MIHIRA Yoshiro <sanpei@yy.cs.keio.ac.jp>
uid MIHIRA Yoshiro <sanpei@cc.keio.ac.jp>
uid MIHIRA Yoshiro <sanpei@educ.cc.keio.ac.jp>
uid MIHIRA Yoshiro <sanpei@st.keio.ac.jp>
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.6 (FreeBSD) Comment: For info see http://www.gnupg.org mQCNAzKTzO0AAAEEAMVsAcUX89qHkwlI03RlAYBqQa00TFmgPwZs8sWvNUqTGtlK kOXcN9WNBvwzMYtEk/u5C1HukqISnFkDW7ZKYm+Um1sQPioFHTwDC6R2HRDZBCV7 0fROlQpb479iBlr8wNAYDhOs0rl25FpE/uAXYThW9Ik/apgXN4rTGxk5HF1pAAUR tCJNSUhJUkEgWW9zaGlybyA8c2FucGVpQHNhbnBlaS5vcmc+iQCVAwUQNu4ch4rT Gxk5HF1pAQHYiQP+IoxOpfpSPg8Gr7MUtoU3WZPY/5IuKoOwnFNFcSyuhrgn/OOB pbxkYjTO3MLh7Xa+9sPigevHy/sNA4vVZdjk05sjRfAZxIWPrinRy/kzva0KOY69 u1QfX+Vx2mfq/EfMJMHP/Am0H71nOfAZsscKlb/jmuo1TxIpCUx+wWmNn5+0I1lv c2hpcm8gTUlISVJBIDxzYW5wZWlARnJlZUJTRC5vcmc+iQCVAwUQOY7IlorTGxk5 HF1pAQGQBgP+MXSjPfcnNhNfUmeLu8sM63DnrFIfRP9E+n/yhZT0wO51r2LmF4ZX YI04IJCywJiPjEpCFXNAhqDfypkTXWcbLTxX6gE5GNqii5iq+z+UuO4panpJO5OY 4H0/90cH6I/zl93EZN9wfZJghn66vgL4tDTgILdRPekIOB23JQIXsf60KE1JSElS QSBZb3NoaXJvIDxzYW5wZWlAeXkuY3Mua2Vpby5hYy5qcD6JAJUDBRAyk8ztitMb GTkcXWkBAf3zA/9sDB0n/UlsH9hzaw4r2k0FT9F7Ixtk2i/vqmHDUUcrlEqGaeko /3Q+et2KzepX981mI7N2jdClqJgjlHapGoIQWZL3Jy7ocgCXDTYwGU2cFRF7kzkz h3FyYotm6bMi5F53GamkVbYZfogLo1MW7jmqIydJNdT1oseDbrwkjvXwdLQlTUlI SVJBIFlvc2hpcm8gPHNhbnBlaUBjYy5rZWlvLmFjLmpwPokAlQMFEDKUUFiK0xsZ ORxdaQEBjuIEALtVC6fjyDiRnZ3ReckdTO7k83VUTZiQH+2cMFNd8gi+O2sZ3YnW 6veQI45VB3oHD9kzMjol3B1ld7iKcQzHC6qUEviW+mTRRN2Y26DB704FNeUrqm1A LO8NPL6iNKFvUNsu3T0ZRY7oX9a9nMmcD7M2bm6jxrhckS8hY7x1D0xftCpNSUhJ UkEgWW9zaGlybyA8c2FucGVpQGVkdWMuY2Mua2Vpby5hYy5qcD6JAJUDBRAylFA5 itMbGTkcXWkBARgCA/0RBudh/8z/HWdX0GC0m3I0zIAOiGfmnJMPkzLryXuOQsbE dg28b193QnwTz6/ASF6PLJkivcd1vREXCz3C+jHz6OGs5jUKcSf5c0ZaIE4T21Hq LPKHSj0cYxgiC0auwY46m/yfO8I0bdiM6Ki3fSBTlTmDlNhWxOQ4Ic2RamKNNrQl TUlISVJBIFlvc2hpcm8gPHNhbnBlaUBzdC5rZWlvLmFjLmpwPokAlQMFEDKUTtSK 0xsZORxdaQEBjWYD/i3EOU8lEoje9jTBHfQaps9BQgviFSaHk0G41emKszLSLnGQ BeMGZTyWda6sTSqeLKg56HEmmVGzC/nHlhwspC6bdYaBmOpnSmmzxVstcYq8oiXI mlfFEcL5DJEau1VTBP56Fk4GCffaibCTRGYrQcJz4yLfATjYsni5Y8zXqhWItBdz YW5wZWlAU0VBUExFLklDQy5ORS5KUIkAlQMFEDrvMx2K0xsZORxdaQEBTgAD/jO7 tb78V3muNw+rfD8tA+yWXw8IdC4QHCa+Ga6Uwf9nw0WD+fuuz0I2La4iaC3FPtTs 1hz1QlmrztffL3tfsePDeN59nz89m+WPW/Cu+mLY2Eim2Hm6AWKVvtxtndunOSls xQLr0uhvNN5BOzEqv2V+l0MrwadPxUrHG0izqmGJ =cmvD -----END PGP PUBLIC KEY BLOCK-----
<jim@FreeBSD.org>
pub 1024D/3AA4FEE0 2002-01-10 Jim Mock <jim@FreeBSD.org>
Key fingerprint = AEEC 998D 7828 D306 AFF7 06CA D8FE 7285 3AA4 FEE0
uid Jim Mock <mij@soupnazi.org>
sub 1024g/3780652B 2002-01-10
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.6 (FreeBSD) Comment: For info see http://www.gnupg.org mQGiBDw88s8RBACUCev7G9g7Bl2dxPQQpmO8jrud/oRe7Q9OyXfSl4f9hZBFYoB9 jS5+H+Cz0nnALPpCAQVpjEjUQ3llDE7XcfNTeEJrqlhTcLzPW5k/icKbPgHnbZgp qC1Brxy1sjy1qGOJSoYCkludXkI1iyt3Fw7ingUFpvTpT9gFYqgLExNZbwCg/scY 9iub1moAJTdBsva/jGatazUD/2GymldDx+M1gW3P8YqOkmn/lv8RDTjlCvfhe+xA X6hxIbasYDJAX0cNs6tJd1KJpznwT0MtRuaFq6+xmVcGTCEyTXsf5yqQDV9mGyMn B5cr7kyxArfyNcoq9DYyEhtrqfewLIA6eiPCIdyPRD9/5GpLk+9c/I5MQB1All0H LjJuA/9OTyJkKvPO5rsLSjVfhNg4FPx3W/23f9767tcOKbFSYsb5rHYSC8sP/Mim fgyqZJd2jm/ch4xU9zxPRmKIgz8mUxpofwh2v8iDtfUZwqVJCrN6RYskJCwG0WkT bhG7Hp3q4xGa48npkCXGw4NnKkKYZTU3RK7FbcwZmJYb7krzX7QbSmltIE1vY2sg PG1pakBzb3VwbmF6aS5vcmc+iFcEExECABcFAjw88s8FCwcKAwQDFQMCAxYCAQIX gAAKCRDY/nKFOqT+4FuNAKCRO4EJs5q5YNgbe12hCiPPKL9eaACg+z6prde98KAn qD/gCRvAORa04bG0GkppbSBNb2NrIDxqaW1ARnJlZUJTRC5vcmc+iFcEExECABcF Ajw88wgFCwcKAwQDFQMCAxYCAQIXgAAKCRDY/nKFOqT+4O7RAJ9pKTJDRjdP/cPo pkzTIgjhk1cPugCgp/hX2a7w26gqnvrRXCa9T0Rxvgq5AQ0EPDzy1BAEAKJwt13v YhG4P6mgwevIECIshvuM9vRqlR5MULHavyZqNOLp5M3mCr3k4v3ok8G7UeSc1Jg/ 5ND1EKw63gNh2SsetlruSMWZLEJ3aerbBBS71HIog4oGuLst3dbc1TJ3ZQkamMnk BB8kWARSzSdpjCc7ANGi/5Omnu0koknduPabAAMFA/wNcC6i3fr7SGo0kFqCq752 lkl85IdVFApLVnhz7PrrI8WMw5QaltnW8aiKDwE7+EDu8C6vQj9YQNldjVzjAnav RpvZue3K+mdrZ2BzCxOnF9PNxo4pcFwYefyPqSWnht9bvlU7DHeeykgStBGcCE8F YS6CogoPwRGC7WGYF2amL4hGBBgRAgAGBQI8PPLUAAoJENj+coU6pP7ghJcAn2LW giZk+flVW0OUFmBACgqffLtmAKDxU4uLZrS4nA3Utgiu5x+/8n8yUQ== =uAGs -----END PGP PUBLIC KEY BLOCK-----
<marcel@FreeBSD.org>
pub 1024D/61EE89F6 2002-02-09 Marcel Moolenaar <marcel@xcllnt.net>
Key fingerprint = 68BB E2B7 49AA FF69 CA3A DF71 A605 A52D 61EE 89F6
sub 1024g/6EAAB456 2002-02-09
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.6 (FreeBSD) Comment: For info see http://www.gnupg.org mQGiBDxk42sRBACyzSSCLYA90zaZoMlg4zhMXhciG/YuiBZ005q0s9W9cuFFxwOM 0mLFbBHQKj5TG5TNswnf9VreRg8lRPCzgQ63atc10RU2tfa88hIjWZ4G4WEFDeXS hlj4dIA6KO93UEoJmIyR7hswisb086mK4dM9hq9FxJT7YQ63PkUYmd+pfwCgjX/y xM6+aPj0sXuOvAcVVmrnp8UD/2pEd8kxAKIaWmxOm9aGB0/E6vjZWxCk1+CO7tgG 4gInFYUnqniPB4JOXOWriwBGPx5IqWYwYpgeuoi/KeE/Wn7bRUEeCbBGEmJkHO9l 3xJuPX8JKDkGuTNDvR3SINKSzx7gb77eGorwxV7e4FXBeXOyXLxgDqDhh7Sjv5/4 ikr2A/99b5t1akHlNe1ITpuEETDNRcfu38/KW/nF3p1IKQ4Q+exSlEJzPFupYNoZ O7uD3A0YCNf3jIY52ufkZXqhqfsp6aRLetbqDcKVrZWSudAzGAEk3Q85a6Ei4mUB tfv4dmXQOLzfAFHezhCQIt5LIPJ5Dmz/a26+u0DmlfisgP5ltbQkTWFyY2VsIE1v b2xlbmFhciA8bWFyY2VsQHhjbGxudC5uZXQ+iFcEExECABcFAjxk42sFCwcKAwQD FQMCAxYCAQIXgAAKCRCmBaUtYe6J9pN3AJ982m/rtLgyiuHl1IM+/xfsZ460SACb BM7V955SU4T2b+1FW1ieOuuZEKC5AQ0EPGTjbBAEAKbxUKuiOJsAQnGKTXtbyRdR Y6BZQK9tPNXEIjIUZ94Crs9lVq/P3kyvpR/ziL+Yt3agUAELiX+cggUZ5KRzKBmo PJ6ZdWOuKLRN2+PfK1QVOQayeZV11XZAsPwyHI2v/hvjJnFvQNTEXWLZsBNnfTdx 0zi5RBNhf5Gt1hyuT4cvAAMFA/9xKQ7aKkvi+C7KafwH6B5X6lIQxRbTQuaZaqKL M8pDmVLqo3er7S1ullwMWfarQLHtlwirX9IOQN833TCDev9QeeYZZ5g2MpWO5nx4 kxEOAK6Lg+QBg4RcoLK9CpHUpLoChGQzNaDudztUixwVaaigj21O4PXFr9pmLLZk vj7AN4hGBBgRAgAGBQI8ZONsAAoJEKYFpS1h7on2XgAAnj0B9B7g4XPMXjizKVNP YLC2BYjgAJ4tZI/tGYxHex5RCeFv/fG4wN593g== =R/4a -----END PGP PUBLIC KEY BLOCK-----
<marck@FreeBSD.org>
pub 1024D/6B691B03 2001-07-20 Dmitry Morozovsky <marck@rinet.ru>
Key fingerprint = 39AC E336 F03D C0F8 5305 B725 85D4 5045 6B69 1B03
uid Dmitry Morozovsky <marck@FreeBSD.org>
sub 2048g/44D656F8 2001-07-20
-----BEGIN PGP PUBLIC KEY BLOCK----- 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 KX84wMOTyluPNU+o =+K0J -----END PGP PUBLIC KEY BLOCK-----
<tmm@FreeBSD.org>
pub 1024D/419C776C 2000-11-28 Thomas Moestl <tmm@FreeBSD.org>
Key fingerprint = 1C97 A604 2BD0 E492 51D0 9C0F 1FE6 4F1D 419C 776C
uid Thomas Moestl <tmoestl@gmx.net>
uid Thomas Moestl <t.moestl@tu-bs.de>
sub 2048g/ECE63CE6 2000-11-28
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.6 (FreeBSD) Comment: For info see http://www.gnupg.org mQGiBDoj/ekRBACnO84k2i5lLHZKscyV8tjQSkkr26hasdbc/uyV7HTiPhMUjEAz Pamk+bDmy/Ls8k0SJ1l0vILBBd31G5VYtKonIrgp4vZ9gV0fBdCyFDXb8bh11Pk3 pEZiG9vJevq40OPvsThLKHCLNhZ5zLPp6gd0IHwRJ0LU94pouFXd33MzrwCg4gTJ K00Dw0w1hFtUsq6WjNC+1B8D/2WiEuzBMnO6gz0p/eJ1eZ7mvrBXLQZ0u5vJ3eg2 CCPrtS1ZITq3ICPDN6biEiMgtRmlYn/VYvDQqxwNE0X2yMfB/9sdah45zma9EeVn Iy8meaCFDLhm4aIYc1foUuz3WbCNlJFY5xYPXCMXLkC65xdybHKng5TXh6NOOWf3 PfCWBACPMotTRKttAuw5YcZE5VDrSXPYHu/jm2CpIVmrac7+kDj9pGH9sB7BdUxw vczqtAT0jk7MrT+u3FH9wBtEFTXl7ksGTmDOFWJgYn3ZOEaVaX/OqD89UNhrOA2v ZOaaoKMYxK/pszPdr1Ghd6BQCmYKtLBlFYiTDRM5UMVHTqN7VrQfVGhvbWFzIE1v ZXN0bCA8dG1vZXN0bEBnbXgubmV0PohXBBMRAgAXBQI6I/3pBQsHCgMEAxUDAgMW AgECF4AACgkQH+ZPHUGcd2xMLwCfdEkPZVBgEmYnlyOKfyTSslMhud0AoKDKZNXA huNslb4KF8yKWBNRwfPStCFUaG9tYXMgTW9lc3RsIDx0Lm1vZXN0bEB0dS1icy5k ZT6IVwQTEQIAFwUCOo01FgULBwoDBAMVAwIDFgIBAheAAAoJEB/mTx1BnHdsOfMA n1xd4f7iAe6id42DLg4W3fibsCwsAJ0cT2lf08RhHkT+zLVoubyIDoY6ILQfVGhv bWFzIE1vZXN0bCA8dG1tQEZyZWVCU0Qub3JnPohXBBMRAgAXBQI6pO9pBQsHCgME AxUDAgMWAgECF4AACgkQH+ZPHUGcd2z+7gCdF5fq/lebn3/gp40O8xP/J0XFbiIA oKJP186L04qpSNamc/qG3gs7h3DGuQINBDoj/wkQCACl8M8ObSTJaOY4SgoQkKgB CkJJP5ScUpfYV9w3dxKL/77cyfghfYsnAWuA9yXJcjA0F+u+jRf8gS7OaHD9H9Mm pMGq54Aa0KUQaDbL/Jzf5zrKS/RASHzl1vYXuZB1OIzPfeAIx9u3UaziVEGXJha3 1KgTur+TU+F94ZFTi8uApq2VoNT6sFi/V2x79bxlLFr9M9yD/0+kMZKovWRODy6T gWJzzcdd//dkvKp22tNf6C2wq8Bu60cWR81+awgG2otgZjCPUs2Bwhqa5opeUqGn J+f+PXo6+m2UF21m1vLARENuumu6SXf3XqGIUiQbT6jCdJORzwaxeCiMfu0qNnUX AAQLB/9u9gZN0N0r21ZjM6ZRmDC/REouCdYHEj49+f9g/xLXCfacpWVcrK9lIrcg hxRE2mQ/nlQLeHroC3Dp1AfThKSPFX3PRD/9CcRu480imT84ljf+6vonAZ20Edm5 vVO+UoJMZQ2G+rWRRf4bDfwFoyDw3DsNmUL4yH8m2RpTxXn0pQtD2riJD8CBCXEP K95TYT4MomJ7Szg7O5/QLngfw0q6QdKRm1vEIP7r6t+UbVNp9+5g9qvz4aqm3beY pw1QCDHcqpDITnlTxTdV2SgNpF8JPg7joaOa36AxWwRzfLFyzyw/JGQE8RwJa8BN iTu0IrKuiF1biRxqiYO887GBA/8QiEYEGBECAAYFAjoj/wkACgkQH+ZPHUGcd2xN TACgkS0AGqqd2nLtWhpbE72tD660tv8AoI24cRkUa2op32mti5zfLLMsM4AZ =76WN -----END PGP PUBLIC KEY BLOCK-----
<rich@FreeBSD.org>
pub 1024R/583443A9 1995-03-31 Rich Murphey <rich@lamprey.utmb.edu>
Key fingerprint = AF A0 60 C4 84 D6 0C 73 D1 EF C0 E9 9D 21 DB E4
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.6 (FreeBSD) Comment: For info see http://www.gnupg.org mQCNAy97V+MAAAEEALiNM3FCwm3qrCe81E20UOSlNclOWfZHNAyOyj1ahHeINvo1 FBF2Gd5Lbj0y8SLMno5yJ6P4F4r+x3jwHZrzAIwMs/lxDXRtB0VeVWnlj6a3Rezs wbfaTeSVyh5JohEcKdoYiMG5wjATOwK/NAwIPthB1RzRjnEeer3HI3ZYNEOpAAUR tCRSaWNoIE11cnBoZXkgPHJpY2hAbGFtcHJleS51dG1iLmVkdT6JAJUDBRAve15W vccjdlg0Q6kBAZTZBACcNd/LiVnMFURPrO4pVRn1sVQeokVX7izeWQ7siE31Iy7g Sb97WRLEYDi686osaGfsuKNA87Rm+q5F+jxeUV4w4szoqp60gGvCbD0KCB2hWraP /2s2qdVAxhfcoTin/Qp1ZWvXxFF7imGA/IjYIfB42VkaRYu6BwLEm3YAGfGcSw== =QoiM -----END PGP PUBLIC KEY BLOCK-----
<knu@FreeBSD.org>
pub 1024D/9FD9E1EE 2000-03-21 Akinori MUSHA <knu@and.or.jp>
Key fingerprint = 081D 099C 1705 861D 4B70 B04A 920B EFC7 9FD9 E1EE
uid Akinori MUSHA <knu@FreeBSD.org>
uid Akinori MUSHA <knu@idaemons.org>
uid Akinori MUSHA <knu@ruby-lang.org>
sub 1024g/71BA9D45 2000-03-21
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.6 (FreeBSD) Comment: For info see http://www.gnupg.org mQGiBDjXWqERBACDCxgN9+yMfpm3yvkYp+P4Uw6xxPdcZ9RvnTRkBX9zXaRgSPmM zeZ63LpB99uVphVZrv/EdlyTf+cRdz6VXXRcTBloA/FsyY86IluBnWCH054WyXzr 7az5WB9yDbPnlwcSL919bq0UqTuQUlQswdQAoDQG5LNNZNa0T01ydYtNlwCg3weS I/nEJrGCXGy2wrjg8LiwQ28D/Re2JHQPTYqDEZl6wj5U83wT55ChnTrjPRbGmr/C UdJP6CZQg6+DXYGYulcp3oL4btcdFDRFglJzmQNkUYmqiVC20SMVKUctrOCAI60P 7VE40UtXz9EounPSRQQ1lSdMNeRwrZ9o7IcrSj0EBw8lw3d2WxyM2Rs2crZWfOI2 mu8dA/9LbmAw5sLk5Lo5i41nAWP76pyuGxSia6zMRdML6ynoC5kmyrI9TwW5LNU/ Lsq1Ru2XSA+CwSBpTt0vdwS88dDwPGxRuUHhWVpa1M5t7K7uYODB1cD5AyNoNnR/ lHpxfPZOJNdA3OPgfssN9K+PIuhbBU5xONCoAcdC9TEqSezfUrQfQWtpbm9yaSBN VVNIQSA8a251QEZyZWVCU0Qub3JnPohWBBMRAgAWBQI411qhBAsKBAMDFQMCAxYC AQIXgAAKCRCSC+/Hn9nh7n1bAJ4vkEQX0JkcYgltt0Vv5qkS3bGqNgCguxfhuEzZ vBzpAW9/XdstjA/DSPS0HUFraW5vcmkgTVVTSEEgPGtudUBhbmQub3IuanA+iFYE ExECABYFAjnly3oECwoEAwMVAwIDFgIBAheAAAoJEJIL78ef2eHu7RoAoKn5Lw0y C+/lju5+pV0WI5dmxTzxAKDJRtsRSTBcJ7ohvzztxZqyjfSK+bQgQWtpbm9yaSBN VVNIQSA8a251QGlkYWVtb25zLm9yZz6IVgQTEQIAFgUCOZGiowQLCgQDAxUDAgMW AgECF4AACgkQkgvvx5/Z4e4t+ACgnr8RmYw81/oC7MKS2CSoFb9cg6sAnjKay6ho 14iMG+YcFNbjxwGvSE9EtCFBa2lub3JpIE1VU0hBIDxrbnVAcnVieS1sYW5nLm9y Zz6IVgQTEQIAFgUCOeXLZwQLCgQDAxUDAgMWAgECF4AACgkQkgvvx5/Z4e5+zQCf Z/09J5FOgAqw3UrTTAzR6QWicG0AoJdlBcdUltEO4WV+q3FRlw4RVnA8uQENBDjX WqwQBAC09OxAmKbGn9FETdMA/5abvOY7JgNcFhQutEVnJ90mF/npBucWkCRbOr83 t+NB0h5Te+lV/c+mjPyOemfWdAK4R9zQsat+ZqATv4Vgiy0UbJ/5TPfSraNK+QkX nxcDrhpcJXZhX6VYzbWdRSn8xSZzPT19qq0BFafz9UhZKXnLDwAEDQP/dpZe0jWw rED/Kbyr8CDoEKuun/5gPi5xmNz9iJlyvcsdOgok7yen0HHWgdaZAGX3GzjpB5gA aISX/kK66s+NeM1XQ7YXpcI8naf0jPa6N3SNWjLf3xPxLbMk0SyaGnrnSQNikk/H Bk2Nqyn0kcEaaBbdfrgkuuQWPnBDrq2EdOOIRgQYEQIABgUCONdarAAKCRCSC+/H n9nh7oxxAKC+gMyhZmSZdTvT3a2Y0RDOx5kRLACeP3JEvGZAZuo1sJeEw504+jr8 1Xo= =M+Al -----END PGP PUBLIC KEY BLOCK-----
<max@FreeBSD.org>
pub 1024D/CE356B59 2000-02-19 Masafumi NAKANE <max@wide.ad.jp>
Key fingerprint = EB40 BCAB 4CE5 0764 9942 378C 9596 159E CE35 6B59
uid Masafumi NAKANE <max@FreeBSD.org>
uid Masafumi NAKANE <max@accessibility.org>
uid Masafumi NAKANE <kd5pdi@qsl.net>
sub 1024g/FA9BD48B 2000-02-19
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.2.2 (FreeBSD) mQGiBDiuMYURBACEgL3d4mL0pojugj8TZFEQef+MKkXB3lazrqV2ahgWqt6K24qr 5fZrGkI8vxmYR4VkI1eLfe0Q4LoBZifL5nJYEvMvWPmdLuYjp4iwjgBdzLnwr59+ k8+T/fohGDOqx45voCdq68Jmxg283zFGQ4FChMP3ZMlOPmFRIp01C84xxwCguNFG BVPeuM0y7JH0ucRygUqc4acD/jfe/UEjGBWxOCfZYOnXEp4NXWis3xRyUDO3cuoG 8M8MEmg0dX0onFuNU5yrEBFtzPw2GO6DMM8h5hJXdSWkiyusn05PGk/jVSP9/MD5 TYyqKL1tG/fKUgtevZSi7o1x/N0bgIBqmzd30Cqx29p7juVV+SBcKCRT1qloz6fc a5B6A/wJD5n3HOAStsWpZ6To/Apdb4A3PD4+ePfQxSICsHCFg/M04FkrG48So2qc 7dSq6UH3xLsoiRIUonwCQsT+PaQQMrZNKjfal9xlEFfw1TV/squ+oNE8E24Lkzxt 8Kkn86Ec5uiUlRulSMG9HJuWM+9Qu7TF76FWP8llVp6ELkYCGrQhTWFzYWZ1bWkg TkFLQU5FIDxtYXhARnJlZUJTRC5vcmc+iFcEExECABcFAjv4RDQFCwcKAwQDFQMC AxYCAQIXgAAKCRCVlhWezjVrWUEIAKCgwVSawCg1Lzrbf8uZdMAfeOWFXQCcD7EF tsdhbEV62AOUeQQWPr9de1O0J01hc2FmdW1pIE5BS0FORSA8bWF4QGFjY2Vzc2li aWxpdHkub3JnPohXBBMRAgAXBQI7+ERfBQsHCgMEAxUDAgMWAgECF4AACgkQlZYV ns41a1lUuwCgsIhWJdtPBebkV6w+NQ/8jlkJgrwAnj9lZkiTAgl1E/vcF7yPbY7f HlHetCBNYXNhZnVtaSBOQUtBTkUgPGtkNXBkaUBxc2wubmV0PohXBBMRAgAXBQI7 +ESBBQsHCgMEAxUDAgMWAgECF4AACgkQlZYVns41a1nv1ACggYgtKhaprmMs30oz yoC0NatFJ44AoI0XSPh2G9zHEjF8AyYAe6sVCLqvtCBNYXNhZnVtaSBOQUtBTkUg PG1heEB3aWRlLmFkLmpwPohXBBMRAgAXBQI7+EljBQsHCgMEAxUDAgMWAgECF4AA CgkQlZYVns41a1lYRwCcC8l4PdrwHKNrZlTW6vod6kYgR3YAni8iLUZW5Se6nTH9 WuN0XYPpZRG5uQENBDiuMdYQBADVzBBn5+1UQVCLS51y6eCD3TidT/uJAr+eeiWZ IbTmXrltNm5rGs7OT9QYNLhCFFPYKJxa9hFbrGpgserEFnqBfxcbMLa/wyIm9m/l MI+NNCAU4IpgDWtgjf1kjzwnJPwH69YzcqS2jlEKIjkCrEa/Bpr1Nvo4aLvqlTR8 tJh+1wAECwP/YBMEMx/zgTvS3Jtji6nPceRe8icGRHb4SD7MVF/WxYu5VK7wlmuw 9I9WXnHyYaL4c6Q49FAvwhkppByqJFL0txyJ8+nNa6H5mit8m6dcsCMG3NzyvxBP 082h/MWbJn3Xdg89lp4UG3UP8sV1oWyIchd8rqxFk/EVB7fVQWNz/gKIRgQYEQIA BgUCOK4x1gAKCRCVlhWezjVrWUlcAJ467I5lFNlkwcENe5vND+DPaWyreQCfddOu 6Va2/bf7Ln4TKyl17uRro7Y= =VmY5 -----END PGP PUBLIC KEY BLOCK-----
<yoichi@FreeBSD.org>
pub 1024D/E0788E46 2000-12-28 Yoichi NAKAYAMA <yoichi@assist.media.nagoya-u.ac.jp>
Key fingerprint = 1550 2662 46B3 096C 0460 BC03 800D 0C8A E078 8E46
uid Yoichi NAKAYAMA <yoichi@eken.phys.nagoya-u.ac.jp>
uid Yoichi NAKAYAMA <yoichi@FreeBSD.org>
sub 1024g/B987A394 2000-12-28
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.6 (GNU/Linux) Comment: KUHASIKU WA http://www.gnupg.org/ WO GORANKUDASAI mQGiBDpK8uIRBACY5SwFQXiqzDlO1k/syoFoiFIFl/Dp+QmwK2oovIvlBVo/1gbx EhXrKRrfC67KSxxdUsgN290v/VVTmq8Opy1/RF+RAdxM3JrUfkcm5+IBWbSUfXFP i8OXBVgh7wNENVtwwD52F+0CFIWZXkClaif4DGkf38V6LJ6hBIycxuNDQwCggXTT Kj5SP2hFC0ueyQtPDoJEgbED/0bPL9R08io82IQqksOR9IUy0OdFJkLVWLnollEY LGjXa/AHgE8L8oWU/2eF1WM4JrtVRdcKe0Ja2e9LuH6IonGAdwqUeeAOwA/RdGj3 63EglH5ugv4rZZKWZ3/piuNXvtq0bhAfl6zBHi5iUB4bgPVoVJGn3VyykPWxdqfX sT5+A/wIml11cFMogN3RXy/2Y3JRWeBtUCfdoRjeQPgK8++krm2Pr/AtHgcqNSjI W0slX4cLou2TEhV3BHb/4npsdaY0BzYgL7V1YggCv0Pu1s2D53Nzi30V66SRP0BZ OlNTA88WdMfoF3ttb04swSenG9X8dbpyYEdlvxNbbKKbUiBORbQxWW9pY2hpIE5B S0FZQU1BIDx5b2ljaGlAZWtlbi5waHlzLm5hZ295YS11LmFjLmpwPohXBBMRAgAX BQI6SvLiBQsHCgMEAxUDAgMWAgECF4AACgkQgA0MiuB4jkZz3wCeIi857V2zyRA7 gRVsx+DcoCLeC3YAn2G3gFd+v14iZHXrPaqpd1gSjjayiEYEEhECAAYFAj2pty0A CgkQFwU5DuZsm7CchQCfdD/itI8d/uhmH9A0upJYYoYS46YAoOAfpFKvAGe/vBpw dy40SxBG/qELtCRZb2ljaGkgTkFLQVlBTUEgPHlvaWNoaUBGcmVlQlNELm9yZz6I VwQTEQIAFwUCPai4HwULBwoDBAMVAwIDFgIBAheAAAoJEIANDIrgeI5GKx0An1kh KzDAfR7Fzba/V7DHq2BRLcRQAJ9nZFgBncerxFMYAanwJruIYtPnJYhGBBIRAgAG BQI9qbcxAAoJEBcFOQ7mbJuwe4kAn1E2VVFpLajGFYgipCmMgpxRXPmxAKCUa/ee BEW5LPNf8xhaeIGlAtPZm7Q0WW9pY2hpIE5BS0FZQU1BIDx5b2ljaGlAYXNzaXN0 Lm1lZGlhLm5hZ295YS11LmFjLmpwPohXBBMRAgAXBQI9qLhMBQsHCgMEAxUDAgMW AgECF4AACgkQgA0MiuB4jkYrnQCfUgkHO/ioUTHeBtYJHGeL9qthlnMAnikYzk6K gDV8cHI/ETcNoh542Q6piEYEEhECAAYFAj2ptzEACgkQFwU5DuZsm7A/JgCgvX8u hjU7WPofTfM2d11+j+ywHm4AnRS8iRNMqbP9+crcNzCRSQ7OZFqluQENBDpK8vEQ BAClmz0m/wuG01nst/7X+riyNgZ3j3oRurb9Fg2pb7wkci6nlhzCHTcFNCZiY1nS Vp+/3tRkC7HQPz3zhYo3ieCf12NUweJ8jhbZubp1fYY9ubKoj12I+LXTfZf3kA5G UD/n1nkAqxH2yP3eVz1BpKUc+Lz+5USiDo+XfrvfxQcZHwADBQP9GejakrIdVKcA /4UTWnMh8HK2b7tDLwLKyJg/8lagBkIAH5tPpCXi1qXuvHe+T9SjbdwW/lyxSARV FAz1ejp4QEWsAGQ/pchjb+S+iYvNq0VfzkZPqFFllLMaQc9mo6blgGgSEqLNpba6 gDmVTJZ5jAhVxFBhRPwchSdPP3ewVRWIRgQYEQIABgUCOkry8QAKCRCADQyK4HiO RpwtAJ0alZHYWdBCXaPF9G9HCl/T40wzJQCdF5K4aEEsIG1P0WmNjbY4PEAVndc= =NZ/b -----END PGP PUBLIC KEY BLOCK-----
<bland@FreeBSD.org>
pub 1024D/D004116C 2003-08-14 Alexander Nedotsukov <bland@FreeBSD.org>
Key fingerprint = 35E2 5020 55FC 2071 4ADD 1A4A 86B6 8A5D D004 116C
sub 1024g/1CCA8D46 2003-08-14
-----BEGIN PGP PUBLIC KEY BLOCK----- mQGiBD87tOARBACkfv0/19ar/kUNsj2vL+APjo/cx0A0bubEmaPhwNuLOjtafdNm /pUULYi28lDVDxQJ8UM1voqrCcue+finCyy+k2L0nR37tlUA4t/+GH4gq4y2xL7S o/D5DqHDA0cTDAIQCbdD/rj3Z7nJw2Vkn3tAwZ6NUXV7OdLS+csbpJIjmwCg0HB1 tzahpgegUe5XauCly+NXNMMD/3UcnNA7kBKSZMcuOVq7TkqYYvQZPoroK3yYcAZL Yo4WoPEyjtlD/ZpZVysQiSMxLXRHjsEbMAMZL7Tx/Sav01XUiBHBGDHXaWWVdqmg efxtBeoG7MZxAAXBLfcSeV0bjkd9oGWW/inHrl0NgEljZQqo1kbIEb5asooyT18v vZgjA/9l8xZdOlSJv7Ct+VGrfMStMmpBCn7IRSjeJRq2pNe0pbJtzXAnAwyrB62X gF6n7ONKdLk/WPihRdfrc4BZnNIWZU0q5P11rOENQEnToprAOYebhmS6cY0lx0SR M00HVTTgzsNVWDy9h+uOobicBSHPh2La7KGnFRtMb6pZFg5Y2LQoQWxleGFuZGVy IE5lZG90c3Vrb3YgPGJsYW5kQEZyZWVCU0Qub3JnPohbBBMRAgAbBQI/O7TgBgsJ CAcDAgMVAgMDFgIBAh4BAheAAAoJEIa2il3QBBFsAUoAoIGf7gn1DPL+Miw3/2W1 YdJPT3TjAJ9LOVjgV1mZks+FjRdl1IETcJ4fPLkBDQQ/O7TjEAQA9yIaEvU/Vbj0 L1xFjIOGEyM5vFvn5xP2LibOI7hUH+cMDaWkBgrSLqsI7k6P3HSTVWpkKUTl+vJe OJnIx1gFE/WJDPK5trnjzHQI9kWf6j8EREXCFuuvDy3QhuJiHTjB+I8IVYh+oiXl 6SNo0ekvQd6KZlkPUXy8rczb8Y+A7GsAAwUD/iPYrIWC4xSX8kL6HFjaE2fS42EW iyfyb7slFSE2xtRf+xZyBa2Mu5XQsg+vJcSBsjrxpYdd+OuyTLuYRsYvuLZnB65H tTli1/ous2J56useJyeik9wJfFyZBlOtmw1QFLxELly+XgKiyGRNkTrws+smyFjC GWwhlhc40r824oWPiEYEGBECAAYFAj87tOMACgkQhraKXdAEEWySXACgwFVr9ZgH TYnmgWGXAmQWvJV+xAQAn2HlGDmOpuTDzfO5PvXOOWnFjvIt =bcPN -----END PGP PUBLIC KEY BLOCK-----
<simon@FreeBSD.org>
pub 1024D/27359A51 2003-07-22 Simon L. Nielsen <simon@nitro.dk>
Key fingerprint = 912B F341 7E90 2049 05B4 3800 87DA 5C0D 2735 9A51
uid Simon L. Nielsen <simon@FreeBSD.org>
sub 2048g/C11D9097 2003-07-22 [expires: 2006-07-21]
-----BEGIN PGP PUBLIC KEY BLOCK----- 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 rCB3m02y35Q= =9o1L -----END PGP PUBLIC KEY BLOCK-----
<anders@FreeBSD.org>
pub 1024D/00835956 2000-08-13 Anders Nordby <anders@fix.no>
Key fingerprint = 1E0F C53C D8DF 6A8F EAAD 19C5 D12A BC9F 0083 5956
uid Anders Nordby <anders@FreeBSD.org>
sub 2048g/4B160901 2000-08-13
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.6 (FreeBSD) Comment: For info see http://www.gnupg.org mQGiBDmXNAsRBAD0WcmPy11DRvDsEpadBPCATmPrvAImfj5XjcxBAJlBJoc9fiq4 8OcnipVdId6STdVKvB3K3h9aNsb75+rD/W3nMi8MumjyXJoHAf8d68cnjppizcPd uQPOy76lkbiyV9OYBtaNQqmU8hE8MTr5Kew9NBCoC4SB4NX8kVh8iglrZwCg8J4F ltBYDz+Z5ZGoh54fnYN6IAED/jO7ISCvWbFtnzCw1FOghcgueqrWoy0OYKq8ZfuO m046fuIlHcswJOKLLexTajsYAC0WWe9H3SvKvv1etexMh5SsrgWTsSuIvlPfG4oj D5vIYqvH5NiqJdh9qiFEzGsv44jgESDVy9qaErbXRVe9htuRZqbtEPnB5cRRwTr1 WhfuBADW1VLXj3UGw4OeBBd5KPIYXCx7RKS4nfrlBCqMcIaiD+K42U+7PXEJB8uM 2sJ6uRYs0j4tTLBbDC2TC1QfT5NIVLG5wWkIh+jL7PODH+i4LF8n0pQyuLwJOFAx s6RIHNPB2fdI5sqB9lMIBszlb896wVJf9PPWFAt/5Aekw7eTLbQiQW5kZXJzIE5v cmRieSA8YW5kZXJzQEZyZWVCU0Qub3JnPohXBBMRAgAXBQI76xZsBQsHCgMEAxUD AgMWAgECF4AACgkQ0Sq8nwCDWVZnYgCg4fzk40pYLg3iNayO9dDNp4yHS/MAoLi/ WCYhNOS0TMpap9SQXC/2e0MZtB1BbmRlcnMgTm9yZGJ5IDxhbmRlcnNAZml4Lm5v PohXBBMRAgAXBQI76xekBQsHCgMEAxUDAgMWAgECF4AACgkQ0Sq8nwCDWVaoNACd HR57Uuyyti+OqVr4zaVEIgg+bYwAoMcFR3xdqArQmp561541p+k1IBUWuQINBDmX NGsQCADRkDqg2uW9mn5YCXlzx9KlhAfPRny6kF4+B+ga0ZaIzJng2pY8EsAxKn88 yH6ERs/PYdsy/AyksG8vzuc9CalW8JFEc+kvtJIL0HhBonlInaeUWHPixGEcOPcW ab8dPhW3zfEgOqquky21d8Zg+G3Z29tmKGcYKSQgt6W59z7vITK7+gv7tOGp2IpZ 1kGqPZn+JqvB3n/uWo3rTxOGA/tduMwfESA5gHmEzKmU/17yIkE0SflKOp0VIGdl Fp1A1ULJDDVXjtDkxFvZ1I+WpqF7p9FCgy/OHUfUa0py3uHIEKMahqpAZ9e8D+GI nGizPR33ZY5PfM72ABXeGhFnweP/AAQNB/9HPBzxoJJFJNLyosSlI+Wkmh51K/nC EawQG6a+tgL6cPHgJQkgthPUywkI+2g7SUSurgPz0hRCPg2PjHP3PwVhjKzUgfAj y9eVnu+JSpst/a0Y5LEQdNnwG+Y+Cs0q9xj4T1VXw8B9fA3y1wS1a13zCQjfLrZP ziIGjHIBvpOFrSU3ML1rRaVfQpm2wQXsGHzjkaZq7HQy2EOVLzik34XkPBY1DrnY nSEwSurfjTrKTLNYsN53xCGwJ2w2347qXr04j87XhRmGCJQ/Nrrin4z4LQ/zNm5Z bErlts8PAfR13kqP7rx/H1n5obhpOoXUqb4Rm94c0r/s9JRah9ppgADRiEYEGBEC AAYFAjmXNGsACgkQ0Sq8nwCDWVbTvwCcCG0X50Tq7V4NeGgREttltmR7UlYAoOgK 1OFsIdCCq6JjrwvfN7ry3pwc =clge -----END PGP PUBLIC KEY BLOCK-----
<obrien@FreeBSD.org>
pub 1024R/34F9F9D5 1995-04-23 David E. O'Brien <defunct - obrien@Sea.Legent.com>
Key fingerprint = B7 4D 3E E9 11 39 5F A3 90 76 5D 69 58 D9 98 7A
uid David E. O'Brien <obrien@NUXI.com>
uid deobrien@ucdavis.edu
uid David E. O'Brien <whois Do38>
uid David E. O'Brien <obrien@FreeBSD.org>
uid David E. O'Brien <dobrien@seas.gwu.edu>
uid David E. O'Brien <obrien@cs.ucdavis.edu>
uid David E. O'Brien <defunct - obrien@media.sra.com>
uid David E. O'Brien <obrien@elsewhere.roanoke.va.us>
uid David E. O'Brien <obrien@Nuxi.com>
pub 1024D/7F9A9BA2 1998-06-10 "David E. O'Brien" <obrien@cs.ucdavis.edu>
Key fingerprint = 02FD 495F D03C 9AF2 5DB7 F496 6FC8 DABD 7F9A 9BA2
uid "David E. O'Brien" <obrien@NUXI.com>
uid "David E. O'Brien" <obrien@FreeBSD.org>
sub 3072g/BA32C20D 1998-06-10
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.6 (FreeBSD) Comment: For info see http://www.gnupg.org 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 wFQ+RbHSXThyO1HZCYdfSaaYVfrrLv5ooTBRHzP5DlSXk13nddBOE4g/AwUQOT3B NOMeMj1ArjBSEQKxUQCfY3XjdW3Yun2hWKmKaPpXDBKonz0An1Wr4nbjBvlsovrs eysWYs1ovDgKtCdEYXZpZCBFLiBPJ0JyaWVuIDxkb2JyaWVuQHNlYXMuZ3d1LmVk dT6JAJUDBRAw9rraP9k6yEHOCYkBAZjmA/9lczxVp0UjLAXM3jfErQv2dzpLDAiT QVp10pi+a8mAzPVCnmCfcNy4fQJbInAfe5FC8gxBe9DnsjLfHh5vlZzDHANpbq5P MLW5C2igBoAg0Im4RpevDhD664ZgYgB6HXHhPBSB3Gaarnpx+R6JpfDBolSg6Boi IN3q+kzftlTaDIkAlQMFEC+a5SFlYKmsNPn51QEB/tEEALKURfb7Y7metDHx5oV5 LybWyV8cTJKINUllX8HDnz6zZQ7bMYlQ0qsqRqEIDMpMk1tojT+/HI4te21uW0T/ FCemdm7leZM6g38Ne358L8jY/34iz0bIFeZjDzLoOKW5C8wtG/N88voiE0grVR3e iFEmtwWT5lRaV+DmKYQ4kXxAiQCVAwUQL6UVDceLqoSSZB6ZAQFokgP9G9xfWcKj CxbEr9TAEDsKIsNkKQKEFlfqGuAjSVWOBqEIyG0Wb1pZEQKHI379aEK9nVNSsQ5m Qk/E6JRvYENt9q5uJ9mp6+wPUVYt83YL7uv1YJJSy788tdr1esutgiAeLNmNMmOg Rw3vz8iKYJozmSyDSK/HwHS7zZ2Q9K5hpDCJAJUDBRAvoGvwym8rg/wMAtUBATFj A/9h8jSR5py9wPy6WkjsYQbml8B2fVjsLzoQbMI+b5IFYeDkRYLTnSLJKzuK8zHn 1aFeXIhD0CRY5PC9jMAu84I59iE90x95uLPAH00rSJam2gEqPovRYcinADluivOT XGAn5qN9bKlmdsFNLMIFs/rohnIFab7wG3+t+i+8YYY2YIkAdQMFEC/kX5DT8j9C J2rqEQEBOFcDAKcdXpMcMjw+uSDwNc0pjOEYkfnpaW6MKnOo0qbwALmuSn/l21+J eypp1kr9VeWKn9tcUHucBHyTzswxeu21jI/KUUIRzuQsupgnop5LyNNrpDjxbQvN uiBIX+jAVQvxsbQoRGF2aWQgRS4gTydCcmllbiA8b2JyaWVuQGNzLnVjZGF2aXMu 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 lSVmAKDF3kyQAZDAyz+21MQJnmJ2O5dFJg== =cMCa -----END PGP PUBLIC KEY BLOCK-----
<philip@FreeBSD.org>
pub 1024D/049DB879 2001-01-04 Philip Paeps <philip@paeps.cx>
Key fingerprint = FA74 3C27 91A6 79D5 F6D3 FC53 BF4B D0E6 049D B879
uid Philip Paeps <philip@pub.telenet.be>
uid Philip Paeps <philip.paeps@pandora.be>
uid Philip Paeps <philip@nixsys.be>
uid Philip Paeps <philip@freebsd.org>
sub 2048g/476FFC94 2001-01-04
-----BEGIN PGP PUBLIC KEY BLOCK----- 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 =dhQi -----END PGP PUBLIC KEY BLOCK-----
<hmp@FreeBSD.org>
pub 1024D/938CACA8 2004-02-13 Hiten Pandya (FreeBSD) <hmp@FreeBSD.org>
Key fingerprint = 84EB C75E C75A 50ED 304E E446 D974 7842 938C ACA8
uid Hiten Pandya <hmp@backplane.com>
sub 2048g/783874B5 2004-02-13
-----BEGIN PGP PUBLIC KEY BLOCK----- mQGiBEAscLQRBADERe+RX2eJpYLoaJ7d29B8YcTYzNlsfzghM1R1/Dx2RDy5poKa Jn9j+Iptq1qS9GkTHXFcQh8LT2K7wnE/MZTCxkZvg2ZkfQbJ4Z+0z3A1A6Kvg0tH X5aqmPUeLXvnps7nqZxkhl2ibcjhH/VYZK3mdRikd1wtJD1EhbbeqaR8BwCgkQAG vdJHN9gfjLLcM12EitkjoUcEALoo1bPoULWd4YhVH7W5L3Qp0dr1vf5pYC/V7FQ+ 8yPXZtGzMvIld8iX1sv/zsw4EoXXsaRzJo/ixdCS1WYBPowryu0G/LX5w0RTTGHc ihcHLm6ZmyNuIsTQ1ifLNASJoLkNBlQAuA0VG4evAujrmaWyEHbbIDSQKUJOjL9u jb2HA/9pycrr3+735Aa7B5jThN6p1XEC8GQg5MDx23QnTPj9QHXH4qs7s+hwxZq9 3WkVFBcJtDBi8PeEVqfD/QPeU3ewbnNnfaF46miGV1iG1mzU4zMq4n5oBdijf5eL cRRdOJytYKTvlSCe8gf0MzfaB3RqD8+Cjcs3PtQOy1VT4aQiv7QgSGl0ZW4gUGFu ZHlhIDxobXBAYmFja3BsYW5lLmNvbT6IXgQTEQIAHgUCQCxw7AIbAwYLCQgHAwID FQIDAxYCAQIeAQIXgAAKCRDZdHhCk4ysqEPZAJ9ByMndfTtnnVIbsyHc2NjDp5F/ vgCeP6o87Lw4aHuGo5guA9yeWwtwAla0KEhpdGVuIFBhbmR5YSAoRnJlZUJTRCkg PGhtcEBGcmVlQlNELm9yZz6IYQQTEQIAIQIbAwYLCQgHAwIDFQIDAxYCAQIeAQIX gAUCQCxxDgIZAQAKCRDZdHhCk4ysqLchAJ4+01/uQVdqdDeESGodcvgKsrieqACb BIW7HMvh85WqofTeAK5pJu7hCM25Ag0EQCxw2BAIAPXEkkg6lSxGRmVH1yzRnSKr /M48xyRXYDrRPaVVBFkC4Af3CR5MjncJtjbzm7xH82glC67cksRTfTZRs7kJsid+ g62V53dAu1Uoj8ecSDhblb8yW3rTLKVqGcliGcTRFivcm+ZFm0kc0xCQE3rd1COX NLEomMV6xuZ9PVzDAbJwAoGdpCYsCl09eZrTErueQ7pEVsLx9/0zQSmC/uDFEVZ7 23GsJg23+EUBT5KuTxQ4i0k++Ccr4HR/OiUy6KmyXSNsKsBsXwm3map3Debqqqx1 ssrDXa+PHkKEUrONQBoYbZ17DpPZb+NKWibi0Vp1HKPP2vZl4NZQC0GBLXbEudMA AwYIAOYhwVTWKQSgeEZUNe4PwvHczx8/3VNjYZGY6/ZRjgmfO3+MagjonZqfxYha GpsEV17NXm4WIg6HWtI43JwIWfkUybsdxQVH4i5lWYuA26wD6UtNXw9laPHKXonR DvmKDC6K0iFbSxTqXRZVQ//wMxh58/Yw/fX+fYtmH6u6kPaL+CPRkhQLezTzZWHj 2wF6v+frdglW1/LpwpCFndb1i5+36ogZ5ZudG/iz53QzlOF0IZSGHIb9tlQ+4gUn KfxpQloI+5vAyqpHDKIH9K26wTBzKsp5Mt4W6cLfgjXs7TNc8BVT8d4rmmbGpGnG pSjj7b1q6EhpIVBkAMLw7qanLlCISQQYEQIACQUCQCxw2AIbDAAKCRDZdHhCk4ys qAuZAJ0VNEtJSZOAGetxBJ/BMWahVD8xeQCfVKwTHdPh83Qcf28xx81icY5OKY0= =rF4D -----END PGP PUBLIC KEY BLOCK-----
<mp@FreeBSD.org>
pub 1024D/330D4D01 2002-01-27 Mark Peek <mp@FreeBSD.org>
Key fingerprint = 510C 96EE B4FB 1B0A 2CF8 A0AF 74B0 0B0E 330D 4D01
sub 1024g/9C6CAC09 2002-01-27
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.6 (FreeBSD) Comment: For info see http://www.gnupg.org mQGiBDxThkERBACPf5/QHmyM944qrl3hWlWvK9fZZR2c37rhxAeqDJ8WsEMPBTZK WPn9BsMk+2d8e62FkzYo6L5juekd8invwd1nnszFFJdTDWx+vpMMgYuHBmme0QuP OnlU2FwJUCknw5Ed5pYV8F6azGgUNjYKIIJi/L3D9S2qDZ7l+3DgD0knKwCg4o8Z ZE2vd9uQw0AZ7lIa+li3hB8D/jHrVZqHxhOuUbxIXoJG3g54mH4i9GF8uN8ZdhA0 9AxLVLzjLr4CQd97++LdSLagSvgD9N6OrtMPeqge4Frr1anJ+LRPDeOQhd0meJZB iCiekil4DSOsowqgmIG7DlAJx+PNV66qO1ExX1fv1ugyoWHJqYmdBSF9x1fHU788 GxCtBACC9DLBMmMVu1Fsw3rnkZaR7xX1a1Bu95ZUu6TKJP6qUS5GnQOxF7dDjuwX /uRinkQ7W9vR4UuVvcV+Ct5R/yq7e+SfLb+YFQ2BmWeGNs5AVLxIZsZ0ar16fwB9 XdxxHU/IkA3kYo4JfTvi3QXjLn4mbYUuBIVGAL63UO1kx1c8crQaTWFyayBQZWVr IDxtcEBGcmVlQlNELm9yZz6IVwQTEQIAFwUCPFOGQQULBwoDBAMVAwIDFgIBAheA AAoJEHSwCw4zDU0BXeQAoMlSoeOO5WtFMyC8viNAafpPcT6hAKCcjmQyI/cI0id2 PMX9ZOfrKd/ma7kBDQQ8U4ZDEAQAw9gcDj02cAlUh8G9bLIQazPLJnX0fah7KB3O kxh8wFn0LliP7W7HLB+nQNyO4TfNgI0bhVyKDQQbKI2xJ4hylo9Z1K2R7GilgCnB FUqIp0MdqAswX2Dq7KXoyYAZRBOnQounUMaQ+6cfRI37mWc6dC2uY5qHne4zmLML /lVOjVMAAwYD/1ZArkN4IDk/VALPnzW4VYcCcT+101DMZfIMvHK2MiwWFmO+Er/K gIo9DrybHNQ6+bVQh/F6PSlxDrgWey7dQbHQSssC364v3RPOCmuBJCMTEszaais3 VekHF9i9NMsUzbGpowaQv+YKMFQu4Rtlwaq7NUp/cD4a+jaxto9ij4EliEYEGBEC AAYFAjxThkMACgkQdLALDjMNTQHvuQCg1PrMlcafQ3BUaXAQRlGoyvF2WcQAn17c HA1RAO/MXM99nT62+AKLlpeb =mfY+ -----END PGP PUBLIC KEY BLOCK-----
<roam@FreeBSD.org>
pub 1024D/16194553 2002-02-01
Key fingerprint = FDBA FD79 C26F 3C51 C95E DF9E ED18 B68D 1619 4553
uid Peter Pentchev <roam@ringlet.net>
uid Peter Pentchev <roam@sbnd.net>
uid Peter Pentchev <roam@FreeBSD.org>
uid Peter Pentchev <roam@online.bg>
uid Peter Pentchev <roam@orbitel.bg>
uid Peter Pentchev <roam@techlab.office1.bg>
uid Peter Pentchev <roam@cnsys.bg>
sub 1024g/7074473C 2002-02-01
-----BEGIN PGP PUBLIC KEY BLOCK----- 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 =sg5U -----END PGP PUBLIC KEY BLOCK-----
<den@FreeBSD.org>
pub 1024D/485DDDF5 2003-09-11 Denis Peplin <den@FreeBSD.org>
Key fingerprint = 495D 158C 8EC9 C2C1 80F5 EA96 6F72 7C1C 485D DDF5
sub 1024g/E70BA158 2003-09-11
-----BEGIN PGP PUBLIC KEY BLOCK----- mQGiBD9gSfARBAC0ZC5VEuEzqk8KQ3tFam5rugDTaigVzYDmT6XBrQuVwYrFY5zj gz3o87e/KGmvh0FgpulhoJpkOW9l7oPQpp0wvEm45WRq17+7quW9VppgVCzs79FL Cc77A4g5LAuO27i1yygfMfPrr6J/M5bM2FyuUS35QvKBTlkZiB/Zt1d1QwCgzJML PdRvozXQdg6/bPc+M3Wh9AsD/0NxL7cwGExg57hnxA3oNB4M7IM1MwbDDaEQvJbW Ls8c+x2UMzdE4XHMhr940GiwUzEa1lyy0M7FmB+cdFgqhJ1VFjYE6VyGkyYtticL my6Im5S4Pfvx7pO2qLmYW+OnbnC6FFgFPbsAZVl/1fy4hN7U2zQIMw3kIodFBnyN RMsvA/9uzITCim3ov/9x4OYX0BfUNNmczIZMvXbmcuDH+NfwkGu9pmRitx/AWHGJ chOv4vMuMnBHU12TV1dstlWrb+Q5DVrnbVUq90mUbxg2emvlv+xK2oZ9EBKjAv/z NFqySi52vd+OmgopbVI6bI2+VdKrKeNcDByt/2zRGo9Y9hDULbQeRGVuaXMgUGVw bGluIDxkZW5ARnJlZUJTRC5vcmc+iFsEExECABsFAj9gSfAGCwkIBwMCAxUCAwMW AgECHgECF4AACgkQb3J8HEhd3fUzKwCgj1hA+IDNLHGdD+ua2bs3nPcL+vMAnjR8 6CwsvOZIL5cr0EyveMsGNWqnuQENBD9gSfIQBAD+YKY2v46TD994B3h0KtAI8/Zd aJ+K1yUNIDxjueo7v+c3jKaWPgX1h+Cr/O936IVnG1zg81zEF0Ly6NcwWrj70UDO deA4tvx8HQoYfjwRA2kYAv73yvt+UG6WS3cGkX28dcLb8/JEV5M64AYKhgqRX12m VJWIKdqMYzho8n0mCwADBQQA9WcaZB8RVj22I88DA6okYxiU2vqAN+QUvZfX0X1/ 7Rh3mB8iAXBuASEw6NbQnGtky8RlkTDgYu1UJt0aSV2U2CXKOyPCJut0Ka+YYtOM prdHmnNSksNvwThju8F6js51nrf3D/7L9SFhc+W8JTfa8iz9Zfgq1HQkZ3foSO5J W0CIRgQYEQIABgUCP2BJ8gAKCRBvcnwcSF3d9Ut3AJ9WFh2gFxmqE8O3B85dO4yx z/OvxQCgsQynjVGZI9JJn1W0KOAYSbihdu4= =kQUf -----END PGP PUBLIC KEY BLOCK-----
<pirzyk@FreeBSD.org>
pub 1024D/4E23DACA 2001-03-02 Jim Pirzyk <pirzyk@freebsd.org>
Key fingerprint = 07EE A1BD 32E5 C402 59B6 22D5 D846 31D1 4E23 DACA
uid Jim Pirzyk <Jim.Pirzyk@disney.com>
sub 1024g/F38895F7 2001-03-02
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.6 (FreeBSD) Comment: For info see http://www.gnupg.org mQGiBDqfK40RBADDZo6Nm31TcstpbbDGjJXxTAace2fZhTtu98UaC3/78vD+YTqH Mp4sR6OSSWuf1vS9MSeaHJitLvuProQvOC+yEKzW31KuAPnldqrTerEdcy41GASb NbqNz0fTBOUyRebJQ52XZjFC3nagAf+btqIEd8rRegwK0JDWdkIhuNztBwCgzWyj Z3y2+rYSoTc0gK170uL/zAUD/jIOCSPtLFgZf8AgPaxx1fkWmDZdf4RKpckVMgnK vZrQkhXymksXoH7CeT2MpB5R05tpOQF4jV8OwCHSYqJ3P1XlEod7plw98BUiyS3y gu+ML1fiIERHnZumDFxRwKN2ybkzMbZzuHiZl3pAdWe+3lYa65aRIs3CrUoQSzN1 /JfJBACtOCm6Xq8kfk4fVvlN3lqDcpU7Gw3kJiudOg3gAv45egeG18HKJI3H6gvq N7rj0xl4m0vEL5AYBRJ/THVy/3574s0DwCCPI18VQPL8vmSXc8UgAkJlgkdtumH3 OHqPNi4NPEd82wECXmnflbCS5A5CXGtrzXsPMrhiXz3lpFFR+LQiSmltIFBpcnp5 ayA8SmltLlBpcnp5a0BkaXNuZXkuY29tPohXBBMRAgAXBQI6nyuNBQsHCgMEAxUD AgMWAgECF4AACgkQ2EYx0U4j2sqnWQCgvXWdITNFCbKedEmEXTbwzzKq0qcAnjrg XUiN3MvMvXk9tnGDCJwnWhoYtB9KaW0gUGlyenlrIDxwaXJ6eWtAZnJlZWJzZC5v cmc+iFcEExECABcFAjsEMxcFCwcKAwQDFQMCAxYCAQIXgAAKCRDYRjHRTiPaym2w AJ4oUKyvm2uf0Hkqig4s66TzKYVu2ACfVLrGSFHD0oharwIs8CcwN5wPg5O5AQ0E Op8rmBAEAOKSRsTI+Ty5w27RVzf62B29RZOfdySTmEPQu3YdlWFuA7Rks5fD565U PMUtPRzTEy7ofoPHxWv0bgbEBDuAoXmkjz/KYhcTGCwVyzg9PN/QEa8F/ETn/1Y9 bbTejC3mM6ThPDqKvdh70IZW7jMfeDxKUTCHs3rFdGQrJfbdP6dnAAMFA/94szUi Hx02WgHQjVdYjFNp4YdWNTn/HEDZZdhKyI+ATw1IqtnnAlhSfLW0AhRIr2qSwT2t PW6eocCmrDHPd1VZ891QfcF/tWkSIgB8ROaFkjJra57wZO+/Dg46kdpZYh5xjrbR tffQr2c0/2tnvTrl4/ErMmhskeppBtwZfpuzE4hGBBgRAgAGBQI6nyuYAAoJENhG MdFOI9rKNWcAn2WQbmvRcYF9B0YjzGNFKXjGjzuVAJ4v+kxM46P9tcQ3ZTKMKOaz 9bVtpA== =ggLc -----END PGP PUBLIC KEY BLOCK-----
<jdp@FreeBSD.org>
pub 1024R/BFBCF449 1997-02-14 John D. Polstra <jdp@polstra.com>
Key fingerprint = 54 3A 90 59 6B A4 9D 61 BF 1D 03 09 35 8D F6 0D
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.6 (FreeBSD) Comment: For info see http://www.gnupg.org mQCNAzMElMEAAAEEALizp6ZW9QifQgWoFmG3cXhzQ1+Gt+a4S1adC/TdHdBvw1M/ I6Ok7TC0dKF8blW3VRgeHo4F3XhGn+n9MqIdboh4HJC5Iiy63m98sVLJSwyGO4oM dkEGyyCLxqP6h/DU/tzNBdqFzetGtYvU4ftt3RO0a506cr2CHcdm8Q+/vPRJAAUR tCFKb2huIEQuIFBvbHN0cmEgPGpkcEBwb2xzdHJhLmNvbT6JAJUDBRAzBNBE9RVb +45ULV0BAWgiA/0WWO3+c3qlptPCHJ3DFm6gG/qNKsY94agL/mHOr0fxMP5l2qKX O6a1bWkvGoYq0EwoKGFfn0QeHiCl6jVi3CdBX+W7bObMcoi+foqZ6zluOWBC1Jdk WQ5/DeqQGYXqbYjqO8voCScTAPge3XlMwVpMZTv24u+nYxtLkE0ZcwtY9IkAlQMF EDMEt/DHZvEPv7z0SQEBXh8D/2egM5ckIRpGz9kcFTDClgdWWtlgwC1iI2p9gEhq aufy+FUJlZS4GSQLWB0BlrTmDC9HuyQ+KZqKFRbVZLyzkH7WFs4zDmwQryLV5wkN C4BRRBXZfWy8s4+zT2WQD1aPO+ZsgRauYLkJgTvXTPU2JCN62Nsd8R7bJS5tuHEm 7HGmiQCVAwUQMwSvHB9/qQgDWPy9AQFAhAQAgJ1AlbKITrEoJ0+pLIsov3eQ348m SVHEBGIkU3Xznjr8NzT9aYtq4TIzt8jplqP3QoV1ka1yYpZf0NjvfZ+ffYp/sIaU wPbEpgtmHnVWJAebMbNs/Ad1w8GDvxEt9IaCbMJGZnHmfnEqOBIxF7VBDPHHoJxM V31K/PIoYsHAy5w= =cHFa -----END PGP PUBLIC KEY BLOCK-----
<krion@FreeBSD.org>
pub 1024D/AEB426E5 2002-04-07 Kirill Ponomarew <ponomarew@oberon.net>
Key fingerprint = 58E7 B953 57A2 D9DD 4960 2A2D 402D 46E9 AEB4 26E5
uid Kirill Ponomarew <krion@netic.de>
uid Kirill Ponomarew <krion@guug.de>
uid Kirill Ponomarew <krion@FreeBSD.org>
sub 1024g/0CEE1A9B 2002-04-07 [expires: 2005-07-03]
sub 1024D/8081D57A 2003-01-29 [expires: 2003-04-29]
-----BEGIN PGP PUBLIC KEY BLOCK----- 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 =LJJM -----END PGP PUBLIC KEY BLOCK-----
<markp@FreeBSD.org>
pub 1024D/182C368F 2000-05-10 Mark Pulford <markp@FreeBSD.org>
Key fingerprint = 58C9 C9BF C758 D8D4 7022 8EF5 559F 7F7B 182C 368F
uid Mark Pulford <mark@kyne.com.au>
sub 2048g/380573E8 2000-05-10
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.6 (FreeBSD) Comment: For info see http://www.gnupg.org mQGiBDkY4OYRBADvB+3Uh68SGrlbrq1MTAN/gnVaj4ztmA15X13bunGYdLKLEJdq rd9xFv5OgxGZXJ+sDhbKomJ7yrBGtUwC5kIrKXN+MPbO60yy30+kIVLKjXIv1d+c MlWhjFzHra7WGFmvhzYnbOI/zjlOR68iKHnwxhtKFOK9m2O3voURWLEuqwCgzK/S j4UGrPUmZf9XOZcKdnN07nMEAJrNh6aoVgK1xwpyO9uTURuCppqAUym/fr4xNQqh mngblwIACnV9FpBi1ogtX1iDo4YeQa7t7ALgdwTBbU8upVFYzoVByid9ibNu3OKv j9JvL55jUVg0wv6a8bEWjxnNK/zVa/HCzTbAzHob0CSgH9WmEJJEUIqI2/PG2dj+ ZX3QA/4y6Gon6iya2wk0Zs7mrTj80kxLRMnuPN6geTGVNTfrxat+sA1PVpT2WWSo qOrPoyxcpUBbJ3VlFmuYDDgld4lJiGD/2SG5BkD6OoGlRnD5AMgUxQtQFnkloao0 3md8UDucIJnJRF94pttQtv4lVKaocm4z0Fx6cWC4Ysupj1AG0rQfTWFyayBQdWxm b3JkIDxtYXJrQGt5bmUuY29tLmF1PohWBBMRAgAWBQI5GODmBAsKBAMDFQMCAxYC AQIXgAAKCRBVn397GCw2jxyVAKCbPwK2rDZx/oahfd4M7XJ4GoF0xQCcDExtL+DK wOugUQwfVIExB+HBM3y0IE1hcmsgUHVsZm9yZCA8bWFya3BARnJlZUJTRC5vcmc+ iFcEExECABcFAjse9k4FCwcKAwQDFQMCAxYCAQIXgAAKCRBVn397GCw2j/OXAJsF bdYQGgCs3sXMOdb7pNUi2DL2kgCdFOFSojmWV9mulpzH6ceb/fKgoJC5Ag0EORjh UxAIAMrmc2VXtnp/WWhGne6yTirnnWjR/c+rSK8ixbAqTkdYnocY6gtBJliR7LSh Cv2RD8TaUc0ZZseHC5vR7VZKXobXUF7QqB1Rgzz/CpsFeEmxxQxZrVKNjwcMloSt wmH17yW5tBDg8+6KhFwHj40oV88/49L8utVMEW80gh9O9TlYw5qCAp5QKqkFS52A hO54xjTNdEpv/9yXpwQfgUqkAHM8MQhsaxmKCIQXUGt6Lp13aHDAYtMizED0LBjV 3P3qCoc03P9k2nWwGGU7dukncYNNuLDW9xwkAfV9VQuPYCHEBiPTcRnn99imyvNz FNhOElHDttCyKtt1FdZZVAQzXusAAwYH/18mnEMMv4rMZglYb0PRCxaxwQYkxESt KyXEclTc0kgyaZnf4Vbdz1rroxxZLIf+16p/MVNFierz/7d5FbJYggCDSsBAaj4r Qe2/Os3oCnHyyQY+zF9Ac30CsxzgDxMYxYGJHr6x+s9cloZ3WwBFAO0bMoS/9T/9 /S7L0d0litecox5et2yEw4AqHdCslGx5mX0os66uh99eeEwW2EQHSLklwUPReb7U 6m+fNyWxq5w+qTPG+zcXdiW/117T1aONVmg29tSNW8S/syha2PCJ+IoordBus4mU kfa49yCuXyZAYDNLbkiqMVTDCqrH2+n1mbUuhRBaSZEvgqVfVLZzRziIRgQYEQIA BgUCORjhUwAKCRBVn397GCw2j7T3AJ0ZDGzVqNQBE07ntRKuzQQmou8YhwCgibYR ZJyP31xlO+Lt5FgzzeqcQwU= =DKp2 -----END PGP PUBLIC KEY BLOCK-----
<thomas@FreeBSD.org>pub 1024D/393D2469 1999-09-23 Thomas Quinot <thomas@cuivre.fr.eu.org> Empreinte de la cl�= 4737 A0AD E596 6D30 4356 29B8 004D 54B8 393D 2469 uid Thomas Quinot <thomas@debian.org> uid Thomas Quinot <thomas@FreeBSD.org> sub 1024g/8DE13BB2 1999-09-23
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.7 (FreeBSD) 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 =mFN1 -----END PGP PUBLIC KEY BLOCK-----
<hq@FreeBSD.org>
pub 1024D/85AC8A80 2004-07-22 Herve Quiroz <hq@FreeBSD.org>
Key fingerprint = 14F5 BC56 D736 102D 41AF A07B 1D97 CE6C 85AC 8A80
uid Herve Quiroz <herve.quiroz@esil.univ-mrs.fr>
sub 1024g/8ECCAFED 2004-07-22
-----BEGIN PGP PUBLIC KEY BLOCK----- mQGiBED/zxERBADJcZlF+Rzm8wL5lPTTPA1zLwa9u4ZZeVheS9vRGTOC6Sfi2NV9 feWCM4TR9CVtp2tAcVlrXjBzvhbeNajssCPn94qUh4z8ERJKT1R8n4zlilTcMTSQ qZ9t7mIpcpsmpCO1FvfozjfexpUSeLHONKlwHhXXQFdJm6bw3X+kZKUeQwCgut4g ilrxtY66n6pzC7jt8GaM1ikD+gLzk88lPNHA8hZurRaYoRD2cD7jOMk0WNuuRZLA 4LsG+hJUyrPU5vLKou+2iXl6MBvjlYwY3FS5wc1PZ9tRRbMNIq71xCTXmSapks50 M+/cVYhJhQTVWCFhY+HZLDJpiaeMEkTHqoXo6ePVSMgFDQXADv/hMIPkNheXzmXM yhw0BAC75FBSMcRJz8jOaHXSZ7AM9EdMhH4mru1YyfLzwqk0DQS7ToXc8mEpo9SJ c/rYfSHf6Egx9856sncCfLvoTScZDwWXvB7kJPOfXK0u8KK1uZBDAqEacmm2oEHd Xi0KbfW1zyqIPnLKjgu57OqSGyDBKzC2XuQvWcNk7Sol/Yxp9rQsSGVydmUgUXVp cm96IDxoZXJ2ZS5xdWlyb3pAZXNpbC51bml2LW1ycy5mcj6IXgQTEQIAHgUCQP/P EQIbAwYLCQgHAwIDFQIDAxYCAQIeAQIXgAAKCRAdl85shayKgHKNAJ9/qmkJgaMW zOFnMUGcH/fc9ksrZwCbBhYIuo/nnHe9tC53mIlqDoXOz/a0HUhlcnZlIFF1aXJv eiA8aHFARnJlZUJTRC5vcmc+iF4EExECAB4FAkEOc8MCGwMGCwkIBwMCAxUCAwMW AgECHgECF4AACgkQHZfObIWsioA0SgCdF2eAlmqyihMQVf/T8r/x6x385vIAoIhZ hhYxTsWZ4dUA1XmbEfZxMQPvuQENBED/zxMQBAC8M+1oDgxVjVnYlhapOHWNMDlU 1LolN2B9sUm56K0UaCpnCsrm2Jc/kzr1egmjqxGkV1dIih65W+oPZQOBqq4mAvPI SRlE0MrcPCeRyzN4zSwqwu1o0rcCWaacPpNxnG5icluD1RPBDucRPhc8gFMmcfEq 5pgw3LU58ZIrvB3FLwADBQQAjM9l/u6o0CVwRZ6XshuJQnc7Kt+su/xyZjkYqURp sZ8Q9xWgKI4Tv/x+IbgkU5D2vCu6FyfDpBMWsNnSxVJ8FaHCWDKLpDHxB0+RUcme HRcpvV+HnLvJtF1V0dRB3XVtD8h6TcGuntFlKHFTKKQk4H5X+fbsUdq4ycNwgNm/ IfyISQQYEQIACQUCQP/PEwIbDAAKCRAdl85shayKgJrjAJ9S1aS1G9Vpq0kYjZHp pFmvrw+CbgCeIgeeepmX9+n+2YEAuWfJlX2KZCs= =Snnd -----END PGP PUBLIC KEY BLOCK-----
<dfr@FreeBSD.org>
pub 1024R/95C11771 2000-02-27 Doug Rabson <dfr@freebsd.org>
Key fingerprint = 20 BB E4 38 5D 89 D2 D4 68 A6 2F DC 0A DE 10 3C
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.6 (FreeBSD) Comment: For info see http://www.gnupg.org mQCNAzi5GEEAAAEEAK2MWoFtSEoa6/eVi1dRiebsF+F4DnoxIaQATYfhynrLDLDL Zvl0pfgzMWG6VvtsC5c2u549BdYsbs7F95dUUAe2JG9V3m8YeLuzC5uTpac5PeX4 2pHpniY5DDRRlgv0BpCRDOF7JmnMSp1yv5I+EFzTdGYv1CdcyFfJuUqVwRdxAAUR tB1Eb3VnIFJhYnNvbiA8ZGZyQGZyZWVic2Qub3JnPokAlQMFEDi5GuIB213Sl+Y4 3QEBIPMD/Aqz0G5OfPjsHo+QgqXgwYfsdl5D2qEoQGj/GvJNW/+I5MeV4YuydZGJ PbJa6dX0C9jdhlPd6BUtDKBsY6/lQns+VIufraYhalinWpExFdDYi8ONu9tPzgab 7HCvgz+Ecp5UFdbIdfBvgelfwJBgJ1486VUsC8H4TfAjp0ZXlxRXiQCVAwUQOLkY QVfJuUqVwRdxAQEFqwQAkREhyh+Eu3QYxDkhhGwxHWl8G3WLEth/6MRUwLY0L3dt qPfZ5MByKqhj8EqKoso4KnBzDajeKwjIeM2mzlmOdRH6ElR4WtoQpn7Ru3O9u7/O l0ojq8PDUw0KTNKcLYuvG2qBKHeLYzpTEPRbKiRprZtB6bRSYE2mM3rY7q9LU8k= =pQjj -----END PGP PUBLIC KEY BLOCK-----
<trhodes@FreeBSD.org>
pub 1024D/1B9EBD43 2002-01-15 Tom Rhodes <trhodes@FreeBSD.org>
Key fingerprint = 2D4D 1D31 A5C6 08AA 1075 C963 C0F9 A089 1B9E BD43
uid Tom Rhodes <darklogik@pittgoth.com>
sub 3072g/F7A606E4 2002-01-15
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.2.1 (FreeBSD) mQGiBDxEXywRBADtQr4venVgd80wgpOBWwSLvYrw7YmFRMcTP5aw7fRHhxmhEyRE /1jyqt6I/uyS9irePzRyGcX/2RY1+APWjXN3dFtrcYzF1zNLld5flVzid//0bBt6 WkxH5DzCd18B0iZMVKYkVhlFibS2vp6opqoOAd5SU+oDx4OY82r1jDKavwCg/7FU VwL7iSh6PmnzBWuXIaeFjeUD/2E5JlvQXbcCK3AbEZJg/1lk9vfD+JVl8ZcOA+Tb JyH9MXJ+swS3wvFesjwIwIQLIx2LsecuHItmzybBMmYNLSd8RTsI1gYPLl2zqUaN FTpgHeh1bKF3oi9nn1KywxxpZxI8s9ClmdIeBW2hNWOGJf87vwAYf4uglox89xWf tztCBACPVVdNrAb2UOcFlwjvtcC11XkR7elLSrImJ61uZkCFQ3SNJ/nyppjzg8KS KDwehl4X4poqDBBShyh27PF8DtaZ0slatZuMz3CcmR5+aR6b9+5gHoekNwtR/Rra gYyTAMwdlnrh8zOd0fcpdmUW3NN531zy4Atu77rMb9JvWEz3sbQgVG9tIFJob2Rl cyA8dHJob2Rlc0BGcmVlQlNELm9yZz6ITgQQEQIADgUCPSAgAwQLAwECAhkBAAoJ EMD5oIkbnr1D2YYAnRcFECq5cm4t4mBmbsRnk3CCqZ3RAJ0eIsczi5W0fVRaut93 lnnnPH14frQjVG9tIFJob2RlcyA8ZGFya2xvZ2lrQHBpdHRnb3RoLmNvbT6ITgQQ EQIADgUCPSAgAwQLAwECAhkAAAoJEMD5oIkbnr1DsyEAnR/iu0Ijqv+yqCBsiGQh hZ7JnhQLAKDBlIB1Xka1xJBCS11HitB8QiQbn7kDDQQ8RF8vEAwAzB13VyQ4SuLE 8OiOE2eXTpITYfbb6yUOF/32mPfIfHmwch04dfv2wXPEgxEmK0Ngw+Po1gr9oSgm C66prrNlD6IAUwGgfNaroxIe+g8qzh90hE/K8xfzpEDp19J3tkItAjbBJstoXp18 mAkKjX4t7eRdefXUkk+bGI78KqdLfDL2Qle3CH8IF3KiutapQvMF6PlTETlPtvFu uUs4INoBp1ajFOmPQFXz0AfGy0OplK33TGSGSfgMg71l6RfUodNQ+PVZX9x2Uk89 PY3bzpnhV5JZzf24rnRPxfx2vIPFRzBhznzJZv8V+bv9kV7HAarTW56NoKVyOtQa 8L9GAFgr5fSI/VhOSdvNILSd5JEHNmszbDgNRR0PfIizHHxbLY7288kjwEPwpVsY jY67VYy4XTjTNP18F1dDox0YbN4zISy1Kv884bEpQBgRjXyEpwpy1obEAxnIByl6 ypUM2Zafq9AKUJsCRtMIPWakXUGfnHy9iUsiGSa6q6Jew1XpTDJvAAICDADBjQ3p OyWSFGSmZagEbqS2T+KMs94IxwdEXqLIfsS1XvPl7D45kKTN4ThEzuz2sz7gWvv8 pWTiV+XlKSgzjX+c6mu64DJTLiYn2Vdgk8VqxmDMWlS4r7nQtCuUg9+cqrfDE+vl Cqpfy2hDI4rNwC9vIY6RomEEeq68ixmUWJsUSoitXtbVxTrq7iPJYzFmkBqWT1iK WUekmfDN6wY94Lpbai1I04kR+/vxKdkmMAMOwv05W6+llXUz3twwuqny5ipQcPj5 i/+Pe433UEFmuNtkUNk8lX5QhuBnyhFK+nzlOScld08AL5zcqKm/yew7zSREXnHu IzMjzAsO216ufFWqI9UDE0tg6US045P5GeY/uXRfDNb65DuGxFeisDyH/WtoST20 hn5OcS+RAv0fjKGhwTeInc9Qdl57cd8n2Kif9oBlQ9wnfWL3lxxZfMOpHJNy6+D8 dCem3EdjUI9ScJyRiwfo6fXJyZ630n+3I1UtGQhqG2TYDiPo4yqw8rMJm1CIRgQY EQIABgUCPERfLwAKCRDA+aCJG569Q5/eAKCTPO44fSJpxA3pKV2T3D9tmLpWMACg m9rVxuLvsLUuy0UenEK6/bBsDsk= =C9cS -----END PGP PUBLIC KEY BLOCK-----
<benno@FreeBSD.org>
pub 1024D/87C59909 2002-01-16 Benno Rice <benno@FreeBSD.org>
Key fingerprint = CE27 DADA 08E3 FAA3 88F1 5B31 5E34 705A 87C5 9909
uid Benno Rice <benno@jeamland.net>
sub 1024g/4F7C2BAD 2002-01-16 [expires: 2007-01-15]
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.7 (FreeBSD) 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 YbCuiDguaEN052KDrSoDvk4S =L0S4 -----END PGP PUBLIC KEY BLOCK-----
<paul@FreeBSD.org>
pub 2048R/BD42E037 2000-02-21 Paul Richards <paul@originative.co.uk>
Key fingerprint = 38 4F 33 80 53 92 01 46 ED 4B A4 91 3E 1E 6B FE
uid Dr David Paul Richards <paul@originative.com>
uid Paul Richards <paul@originative.com>
uid Paul Richards <paul@FreeBSD.org>
uid Paul Richards <paul@apache.org>
-----BEGIN PGP PUBLIC KEY BLOCK----- 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 =bMYo -----END PGP PUBLIC KEY BLOCK-----
<roberto@FreeBSD.org>
pub 1024D/7DCAE9D3 1997-08-21 Ollivier Robert <roberto@FreeBSD.org>
Key fingerprint = 2945 61E7 D4E5 1D32 C100 DBEC A04F FB1B 7DCA E9D3
uid Ollivier Robert <roberto@keltia.freenix.fr>
uid Ollivier Robert <roberto@keltia.net>
uid Ollivier Robert <roberto@eurocontrol.fr>
sub 2048g/C267084D 1997-08-21
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.2.4 (FreeBSD) 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 =FZD3 -----END PGP PUBLIC KEY BLOCK-----
<guido@FreeBSD.org>
pub 1024R/599F323D 1996-05-18 Guido van Rooij <guido@gvr.org>
Key fingerprint = 16 79 09 F3 C0 E4 28 A7 32 62 FA F6 60 31 C0 ED
uid Guido van Rooij <guido@gvr.win.tue.nl>
pub 1024D/A95102C1 2000-10-25 Guido van Rooij <guido@madison-gurkha.nl>
Key fingerprint = 5B3E 51B7 0E7A D170 0574 1E51 2471 117F A951 02C1
uid Guido van Rooij <guido@madison-gurkha.com>
sub 1024g/A5F20553 2000-10-25
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.6 (FreeBSD) Comment: For info see http://www.gnupg.org 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 jwCgnb++jBLoAgqu7BiWMBVe9sCLfMY= =qL8T -----END PGP PUBLIC KEY BLOCK-----
<niklas@FreeBSD.org>
pub 1024D/C822A476 2004-03-09 Niklas Saers <niklas@saers.com>
Key fingerprint = C41E F734 AF0E 3D21 7499 9EB1 9A31 2E7E C822 A476
sub 1024g/81E2FF36 2004-03-09
-----BEGIN PGP PUBLIC KEY BLOCK----- mQGiBEBNxyoRBAC22NnMqcH1hXXkz+jC+U2QGzOJdGHZtLRXDRpS4blFtRgAf4ab tZY6LJUMnjmdgaPP3Mc7YE/ITF1hGnzYF2jbJazNm17nMSP/66dGJt9dK4XAE4cc 5nYo3GnEkacAa1zUvM6e9OGaAIkndBDUW6+a9aSQNcNyMnYL1/APv+wdIwCg2G4C N221QrjrGbxVQPiBM51lY98D/11d/h8aOHYkf+nirhIj9GvRmXJfD3RANZUDjOsj OKGgUNlXm/AT6I226v9urfdtrhMg+5zdO+I2p7dZMad/RpnSYo0GMdLRzOlN6aoI +4JYoACq2C7iR8pmItb+L4Nl5nNBwmcLBXD+HaZebGffZy9Uvy/A5G0ty08I8LKm 5STvA/kBMybZhX+RTq5v1Kzau63bMBJR8MPHyWYAIBW2wTMJM1ndW5RrbIMJ71qC 8DFFTHFJd97s/fqBMQ9rj094CdDxCYQJUkZy5+qiBkRta//iSlgsi54Xhj9prgPj nBMWxUjAI5Ih0VPIp3/z/q5aQRvey8Ro5JWmduzH0KpLv2Qe17QfTmlrbGFzIFNh ZXJzIDxuaWtsYXNAc2FlcnMuY29tPoheBBMRAgAeBQJATccqAhsDBgsJCAcDAgMV AgMDFgIBAh4BAheAAAoJEJoxLn7IIqR2/y0AnRetbhzvjj3kKOV28bx2Qt+YRA/j AJ4yY9wDPJpwq63IsGeo3BYXi32zPbkBDQRATcc5EAQA2SipeeJJjvrzqqILHNA7 X+m/PAJonO4QhyIEXXMhzNGdiUVJ7wli23gGVF0Cj3V97Yw5KFGco3qOvvsWkO4c CLwd3NHbVL6OHKM36LcFd+a6RiJO9qAGGixyqUIkqYeWCmpObihrkZy9WADsSJTc /qOrLghJ0GyR4Ga8CoFNT/sAAwUEANfA3lWeTj3QZcDnJZYejt1aJWt7oUBQ/KOc HhTjY/A7zkQsAdgbcmuhzSiIH6eoofTwNOl/Kl0ieSdIyFMFfVxrmYEN/HUUUI4q J+BgWZgppinaeUEabnZPfY03T+ZanJ3DmB8s8x4HdpFi3jgtWY0KfDhDfHtNIeRu CYmLAzjYiEkEGBECAAkFAkBNxzkCGwwACgkQmjEufsgipHbIOQCfSaudT6wnsh4G 6D9TZkji6aDqUBwAoKqxWnOya/v/MqcgrXGSCih7phIL =Hz+C -----END PGP PUBLIC KEY BLOCK-----
<marks@FreeBSD.org>
pub 1024D/DBE7EB8E 2005-03-08
Key fingerprint = C0F0 44F3 3F15 520F 6E32 186B BE0A BA42 DBE7 EB8E
uid Mark Santcroos <marks@ripe.net>
uid Mark Santcroos <mark@santcroos.net>
uid Mark Santcroos <marks@freebsd.org>
sub 2048g/FFF80F85 2005-03-08
-----BEGIN PGP PUBLIC KEY BLOCK----- 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 IdA= =F4/l -----END PGP PUBLIC KEY BLOCK-----
<hrs@FreeBSD.org>
pub 1024D/2793CF2D 2001-06-12
Key fingerprint = BDB3 443F A5DD B3D0 A530 FFD7 4F2C D3D8 2793 CF2D
uid Hiroki Sato <hrs@allbsd.org>
uid Hiroki Sato <hrs@eos.ocn.ne.jp>
uid Hiroki Sato <hrs@ring.gr.jp>
uid Hiroki Sato <hrs@FreeBSD.org>
uid Hiroki Sato <hrs@jp.FreeBSD.org>
uid Hiroki Sato <hrs@vlsi.ee.noda.tus.ac.jp>
uid Hiroki Sato <hrs@jp.NetBSD.org>
uid Hiroki Sato <hrs@NetBSD.org>
sub 1024g/8CD251FF 2001-06-12
-----BEGIN PGP PUBLIC KEY BLOCK----- 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 OGg0F7Gi41lcFhA= =wurQ -----END PGP PUBLIC KEY BLOCK-----
<wosch@FreeBSD.org>
Type Bits/KeyID Date User ID
pub 1024/2B7181AD 1997/08/09 Wolfram Schneider <wosch@FreeBSD.org>
Key fingerprint = CA 16 91 D9 75 33 F1 07 1B F0 B4 9F 3E 95 B6 09
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: 2.6.3ia mQCNAzPs+aEAAAEEAJqqMm2I9CxWMuHDvuVO/uh0QT0az5ByOktwYLxGXQmqPG1G Q3hVuHWYs5Vfm/ARU9CRcVHFyqGQ3LepoRhDHk+JcASHan7ptdFsz7xk1iNNEoe0 vE2rns38HIbiyQ/2OZd4XsyhFOFtExNoBuyDyNoe3HbHVBQT7TmN/mkrcYGtAAUR tCVXb2xmcmFtIFNjaG5laWRlciA8d29zY2hARnJlZUJTRC5vcmc+iQCVAwUQNxnH AzmN/mkrcYGtAQF5vgP/SLOiI4AwuPHGwUFkwWPRtRzYSySXqwaPCop5mVak27wk pCxGdzoJO2UgcE812Jt92Qas91yTT0gsSvOVNATaf0TM3KnKg5ZXT1QIzYevWtuv 2ovAG4au3lwiFPDJstnNAPcgLF3OPni5RCUqBjpZFhb/8YDfWYsMcyn4IEaJKre0 JFdvbGZyYW0gU2NobmVpZGVyIDxzY2huZWlkZXJAemliLmRlPokAlQMFEDcZxu85 jf5pK3GBrQEBCRgD/jPj1Ogx4O769soiguL1XEHcxhqtrpKZkKwxmDLRa0kJFwLp bBJ3Qz3vwaB7n5gQU0JiL1B2M7IxVeHbiIV5pKp7FD248sm+HZvBg6aSnCg2JPUh sHd1tK5X4SB5cjFt3Cj0LIN9/c9EUxm3SoML9bovmze60DckErrRNOuTk1IntCJX b2xmcmFtIFNjaG5laWRlciA8d29zY2hAYXBmZWwuZGU+iQEVAwUQNmfWXAjJLLJO sC7dAQEASAgAnE4g2fwMmFkQy17ATivljEaDZN/m0GdXHctdZ8CaPrWk/9/PTNK+ U6xCewqIKVwtqxVBMU1VpXUhWXfANWCB7a07D+2GrlB9JwO5NMFJ6g0WI/GCUXjC xb3NTkNsvppL8Rdgc8wc4f23GG4CXVggdTD2oUjUH5Bl7afgOT4xLPAqePhS7hFB UnMsbA94OfxPtHe5oqyaXt6cXH/SgphRhzPPZq0yjg0Ef+zfHVamvZ6Xl2aLZmSv Cc/rb0ShYDYi39ly9OPPiBPGbSVw2Gg804qx3XAKiTFkLsbYQnRt7WuCPsOVjFkf CbQS31TaclOyzenZdCAezubGIcrJAKZjMIkAlQMFEDPs+aE5jf5pK3GBrQEBlIAD /3CRq6P0m1fi9fbPxnptuipnoFB/m3yF6IdhM8kSe4XlXcm7tS60gxQKZgBO3bDA 5QANcHdl41Vg95yBAZepPie6iQeAAoylRrONeIy6XShjx3S0WKmA4+C8kBTL+vwa UqF9YJ1qesZQtsXlkWp/Z7N12RkueVAVQ7wRPwfnz6E3tC5Xb2xmcmFtIFNjaG5l aWRlciA8d29zY2hAcGFua2UuZGUuZnJlZWJzZC5vcmc+iQCVAwUQNxnEqTmN/mkr cYGtAQFnpQP9EpRZdG6oYN7d5abvIMN82Z9x71a4QBER+R62mU47wqdRG2b6jMMh 3k07b2oiprVuPhRw/GEPPQevb6RRT6SD9CPYAGfK3MDE8ZkMj4d+7cZDRJQ35sxv gAzQwuA9l7kS0mt5jFRPcEg5/KpuyehRLckjx8jpEM7cEJDHXhBIuVg= =3V1R -----END PGP PUBLIC KEY BLOCK-----
<das@FreeBSD.org>
pub 1024D/BE848B57 2001-07-19 David Schultz <das@FreeBSD.ORG>
Key fingerprint = 0C12 797B A9CB 19D9 FDAF 2A39 2D76 A2DB BE84 8B57
uid David Schultz <dschultz@uclink.Berkeley.EDU>
uid David Schultz <das@FreeBSD.ORG>
sub 2048g/69206E8E 2001-07-19
-----BEGIN PGP PUBLIC KEY BLOCK----- mQGiBDtXc9MRBADg4tN94el8rq0ZMUqB2jEVACg/UfYjtsaboDL4HBBUH+P+Wxic 9JqotcTbT8pJGeRpeXbfO0YHaAFnUfilhoFkeLyAgDvnUP9Z77DjFpliLAKlvuCz Lxi4UxgQXRdedNCg3omrxQWx7Yx067GT/yw4RgvogOuYBX0l3AJ25/WBxQCg/6Dj TMTu6iYR2Y6dEL4NGs9PnBMEAKBlhelAhzYoMpcWpk2VITUgONMW+Oi2JDTmwDd+ 1FAUDc1mHSoNBKPUrCWyXiwfzL09/ROlK/KMR6YoYtV6d66zZ/dQNuzrMhsis+Ou PCtvcaR5NGln49THgcw7/K5gTjwrG1xA/wcwnvUp6sxjh4p88meI/LNBAstixb3z FiLDA/9pAqn42B9ZBL1le98DTiLDemHvQFgXu8Oj20IIF0umyJRBfKwDY6iIx0gd 1rUKua6XnqMSEg+LmHmSfDBaAOsFTdnL7wVU0tLF0V9goxU4qDZjw5EeMEqnk7tg /6REIvtdOA/GLOmr/Q0WA4JEukcih3AQ9iFnwg7WAp0S4GF6gLQsRGF2aWQgU2No dWx0eiA8ZHNjaHVsdHpAdWNsaW5rLkJlcmtlbGV5LkVEVT6JAEsEEBECAAsFAjtX c9MECwMBAgAKCRAtdqLbvoSLV78JAKD4iJ2kNeTsYQnWZ2DeytAeqVaKFwCfTIQE lFPZyaQr7yjthREE+8SPZCG0H0RhdmlkIFNjaHVsdHogPGRhc0BGcmVlQlNELk9S Rz6JAEsEEBECAAsFAj5S1iEECwMBAgAKCRAtdqLbvoSLV4b5AKCljokqRgi/pbDa ZebYLluQCIkbgQCg+jSKAIi1r+CZiaCJdqk193IZVnm5Ag0EO1dz0xAIAPZCV7cI fwgXcqK61qlC8wXo+VMROU+28W65Szgg2gGnVqMU6Y9AVfPQB8bLQ6mUrfdMZIZJ +AyDvWXpF9Sh01D49Vlf3HZSTz09jdvOmeFXklnN/biudE/F/Ha8g8VHMGHOfMlm /xX5u/2RXscBqtNbno2gpXI61Brwv0YAWCvl9Ij9WE5J280gtJ3kkQc2azNsOA1F HQ98iLMcfFstjvbzySPAQ/ClWxiNjrtVjLhdONM0/XwXV0OjHRhs3jMhLLUq/zzh sSlAGBGNfISnCnLWhsQDGcgHKXrKlQzZlp+r0ApQmwJG0wg9ZqRdQZ+cfL2JSyIZ Jrqrol7DVekyCzsAAgIH/1AtvAGCJchvLFoaR5KNocKcoUMe2NrpRrFS3DsYOsXU 0U95pmAHJaMt+wv4UDs/wNzOzC6stRML+3lg6sYnSgddH+N/DA0b5jQSAyNWlL87 j08h3ATaPeDD6qhqFRe3uzpQMAJJWbeTdyiT2vwgglgcaJWuVjYSfkkxX7AVDFHw C4IOuZ0aQhHyHQsGQURTg+sotMx+kX68o7oGZqBBOcr8VdFyrlq0Tq1b/i0fJnn2 Nz5hY+OOXbyeoJbaY0KiGnnMwHmeZ2eJWk1cCHUZnrY5WOxYQHail2KHXxhYuPoI xsL0y+XdErX+lc2BiEbvXROs+VxEo/3/BVJXAIar3nCJAD8DBRg7V3PTLXai276E i1cRAsj2AKC26JMJWsvd93UUWRXDKmU46MgLggCfTOIjPheQwY9VCN3jO9YROzij QVE= =qhh7 -----END PGP PUBLIC KEY BLOCK-----
<schweikh@FreeBSD.org>
pub 1024D/0FF231FD 2002-01-27 Jens Schweikhardt <schweikh@FreeBSD.org>
Key fingerprint = 3F35 E705 F02F 35A1 A23E 330E 16FE EA33 0FF2 31FD
uid Jens Schweikhardt <schweikh@schweikhardt.net>
sub 1024g/6E93CACC 2002-01-27 [expires: 2005-01-26]
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.6 (FreeBSD) Comment: For info see http://www.gnupg.org mQGiBDxUIHoRBACGAbIspofa2HTwV0Y81ZgrizVgvsHduKRMYmu9scX6eFSQWC2a JLXXnMJMK97LG2m6qX/hzjxZKU/n2eNpHa3h9zLYQ/8VdN+AFHGZtgmZ7xe7UpBI V2YohykdmgKqg8WuVQGrNTwbkaAFeLnG3yXhR83qukRvv+qFfXbEF+1S2wCg6lLg YJ6U4J1pfTO95Rd4hw5v6DsD/0hUfa6C6C6xjME6P7r/ORd91+nJsfO0pcV1rK0s yCMdAy/zdUlKpsNF9vS0qhCFonuOHWxMEe7D8L80oUAwlk4RrFBm+Ch7RoBGYGru aEom/7JGNoRqUD2CKbFnkAYi9HP6XlXcpgm3GO4c4VtIcEbgywjw7rNhmNoYLrZV YUb0A/9mNCqpPTd8ngm7kPyTTMJitYEVaBPXEdiPueYJND+eI9AQkcqYhs6LWq4c jgmTNeImQ+kR1UeDj3dOwUDqhGmLPN60nD+Q2oHHBif8NJOu47mx1dgdriM9FsTN 3UbeSve+mY8Z8zcPIYKl2UJLPZckWgq4pZRrE147cnKHSHHM9LQtSmVucyBTY2h3 ZWlraGFyZHQgPHNjaHdlaWtoQHNjaHdlaWtoYXJkdC5uZXQ+iF0EExECAB0FAjxU IHoFCQWjmoAFCwcKAwQDFQMCAxYCAQIXgAAKCRAW/uozD/Ix/ZB8AJ989jyDH1G2 T1KMoNd7gPk9tAw1VACfXJgkrI42ShC4cHz37xrVLXeJp9i0KEplbnMgU2Nod2Vp a2hhcmR0IDxzY2h3ZWlraEBGcmVlQlNELm9yZz6IXQQTEQIAHQUCPFQ+0AUJBaOa gAULBwoDBAMVAwIDFgIBAheAAAoJEBb+6jMP8jH9P+YAoM72fnNwxxcDjb+3Mv3A CfbHonYCAJ9lfK9fIbkgfAHo+2kwnOEN4yWxzLkBDQQ8VCB/EAQAzzIqOgms7u+e UKampP/5U9G78HA3GIkVLcAeq5FfpFtls4NmSKz240zNxXmABWTSlBmOQvMdhB08 vRbzEsxPoVdNaF+QvRZYEr5+2bOM1pnHqYYMyUKwN83LXgTDnXxas4mtrkgngZTe tGdFQ3PIVqW4jV0MmnEmaqde0nMJ6XsAAwUD/2z82PDDwFBu1Ogogh63qE69HSQt 8weHX+Skmi75jE3r2niUlx6B0IfLXzFqP33vyrsov7QHgAuOjNficisbC73o3gjp voJ2RYB2IfUCgeFvipLpqY1TWJ3bF52TYnJg4rrEWd5OWs4FB0iaJ78LVWgq3WsN zfgcgfQ38d+scJu4iEwEGBECAAwFAjxUIH8FCQWjmoAACgkQFv7qMw/yMf1PIwCg nSP0i+q9jhEf9T5xA0+qg2yYB/IAnjvd/tA+2/5bP4pObE/oRNjIVZBZ =YPu9 -----END PGP PUBLIC KEY BLOCK-----
<gshapiro@FreeBSD.org>
pub 1024R/4FBE2ADD 2000-10-13 Gregory Neil Shapiro <gshapiro@gshapiro.net>
Key fingerprint = 56 D5 FF A7 A6 54 A6 B5 59 10 00 B9 5F 5F 20 09
uid Gregory Neil Shapiro <gshapiro@FreeBSD.org>
pub 1024D/F76A9BF5 2001-11-14 Gregory Neil Shapiro <gshapiro@FreeBSD.org>
Key fingerprint = 3B5E DAF1 4B04 97BA EE20 F841 21F9 C5BC F76A 9BF5
uid Gregory Neil Shapiro <gshapiro@gshapiro.net>
sub 2048g/935657DC 2001-11-14
pub 1024D/FCE56561 2000-10-14 Gregory Neil Shapiro <gshapiro@FreeBSD.org>
Key fingerprint = 42C4 A87A FD85 C34F E77F 5EA1 88E1 7B1D FCE5 6561
uid Gregory Neil Shapiro <gshapiro@gshapiro.net>
sub 1024g/285DC8A0 2000-10-14 [expires: 2001-10-14]
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.6 (FreeBSD) Comment: For info see http://www.gnupg.org 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 LsOLmQ== =GprF -----END PGP PUBLIC KEY BLOCK-----
<arun@FreeBSD.org>
pub 1024D/7D112181 2003-03-06 Arun Sharma <arun@sharma-home.net>
Key fingerprint = A074 41D6 8537 C7D5 070E 0F78 0247 1AE2 7D11 2181
uid Arun Sharma <arun@freebsd.org>
uid Arun Sharma <arun.sharma@intel.com>
sub 1024g/ACAD98DA 2003-03-06 [expires: 2005-03-05]
-----BEGIN PGP PUBLIC KEY BLOCK----- mQGiBD5my2cRBADKOgeJz+IX/4UT65iwvAMoR5SMctMAEGNHvTk96H0DSYmDmqPE 6D4PWxjiAmbFdMmxGvmPlZDGRk7IpZhrvmsAuAvwImA/UyGb3Qnb0zOoOlAIQiGz NXRvum8vzoTeW5r9ghLOKkBuze1qi8PZdT+ztreaYcPPZBI9zPNfnZd29wCg4Sqo eWA46NgWICUsOpC3dkhAmdMEAKBUmh8p4kOZQq5LPv3y1fo+5MBI1gnawiJoO955 nzVuisH5h1yaNjz0nkB5VtEG2Ub2mhBjckze4EP4FzPgIpOhSMdGfNh67rrByvv5 DD/SBwjULSEGbBlywn462QDb1X0PxFX5C6IYK2Q6i/vbWkOFMI2dVuQX0PUq9zjN D5QJA/sFeXR7NcutCUaLknFCaV1cBTITJNurKn5Vm3QQq5s6R2cFTxdouHcSNkto EbhcAvMapxlWl146h7mAtLsXXa5s3wuMWq+igOXUk0wkcm8CqvSQtnVYl4Xy/Ll3 zXKxtzKHZ1YxAdYQXGkesBuaSafCN6VYDFFSEwChHrwe1sV9obQiQXJ1biBTaGFy bWEgPGFydW5Ac2hhcm1hLWhvbWUubmV0PohiBBMRAgAiBQkDwmcABAsHAwIDFQID AxYCAQIeAQIXgAIZAQUCPmbLaAAKCRACRxrifREhgYRWAJwLdcAEvjkJf5bHy975 R7q7Rp4KUACgq214dvKu35ysWriNNxu2jtIj1he0HkFydW4gU2hhcm1hIDxhcnVu QGZyZWVic2Qub3JnPohiBBMRAgAiBQI+ZsydAhsDBQkDwmcABAsHAwIDFQIDAxYC AQIeAQIXgAAKCRACRxrifREhgVrxAKCXiBsYhu++BPQX9prGf2BeKNYaswCfaS2Z eNyZsxSNedBb26k8ARWrZzq0I0FydW4gU2hhcm1hIDxhcnVuLnNoYXJtYUBpbnRl bC5jb20+iGIEExECACIFAj5q4pcCGwMFCQPCZwAECwcDAgMVAgMDFgIBAh4BAheA AAoJEAJHGuJ9ESGBbWIAnRAlo9PVZzdar5pmWDGspeyGk63ZAJ9X3x6ZQSD7uYeB ajKe61NpPAamJbkBDQQ+ZstqEAQAkgu4UWlgyF1IeMM+vwHQ43zik3Rn6nhpJXRb Arpg4QyVHQNQshVT4XsmSvcgw0TSUub0x5m23dqnhcoB/mk0kAIymVQiEaa4SLjI tTXd93yRvSgPd8JEUNFwcSE43ZJrrmSAqIc6MUJ0hI/pAeCFvRWYQ80+82xx30Vn fJLOJR8AAwUD/R2xFX5geJ7W8OyLtB5XQirkL1YPGLNNx4lyAPXFJc1s1KwfZ90q LYNw2qLRIacYKmY2X9BrWADXPrEZIDKljn+Awz34lSwerLHWwYDDoeyjfMt4Mmra MsV8UIjaBGO1ptbqEDSVeb1tiWQGa622pT5YaZp/r/OFdlmg+JvkAzHkiEwEGBEC AAwFAj5my2oFCQPCZwAACgkQAkca4n0RIYGWkgCgxhDAezhK5kiSC4N74g9ifsF2 jl8AnjujFRJcMfV2R28jiZ2BS9mnvqjU =klyl -----END PGP PUBLIC KEY BLOCK-----
<nork@FreeBSD.org>
pub 1024D/7104EA4E 2005-02-14
Key fingerprint = 9580 60A3 B58A 0864 79CB 779A 6FAE 229B 7104 EA4E
uid Norikatsu Shigemura <nork@cityfujisawa.ne.jp>
uid Norikatsu Shigemura <nork@ninth-nine.com>
uid Norikatsu Shigemura <nork@FreeBSD.org>
sub 4096g/EF56997E 2005-02-14
-----BEGIN PGP PUBLIC KEY BLOCK----- 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 =/u/r -----END PGP PUBLIC KEY BLOCK-----
<vanilla@FreeBSD.org>
pub 1024D/ACE75853 2001-11-20 Vanilla I. Shu <vanilla@FreeBSD.org>
Key fingerprint = 290F 9DB8 42A3 6257 5D9A 5585 B25A 909E ACE7 5853
sub 1024g/CE695D0E 2001-11-20
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.6 (FreeBSD) Comment: For info see http://www.gnupg.org mQGiBDv5ys0RBACm/dkRFFWNFb6pafzsHX3YHfyYBQAhyoT5ZPvvh7e6RdHYdxYc tYjgtOid4jL20Uz7kXYwT5OVYo/l9j/AqknacYoboO5AHcJrfO3QjfztJaorUSqv w9dv6DSOQWwTmexeshp6v5aEsOpDbfPtUnFBwcJe5lOBsokk2CqkzI/XqwCgv49G uNLbdtIN87CrUwyiLG5nsSED/35/A/9b/KNwjBoBbheCJDByHNPd9svQIpVWTuk5 i5RKVQQET4ZD5tPQWPnSZ95ztkkwcjjOak+esHK85yTYXXjrfcP7JiE3HIZhyj3S dxWaOFEbSE3Xc0BT+8BOAPFfb2WMSdCQFowkRqbMiFudLnz4tZnBmTQcuxqp4G7S AFh8A/4jBhhkKaw0KeWtkFKugVgUWZNWZ54aJhUaLg5wGbSTNME74YLO0Xc+wkjY id3gG5ayJyecZXCMUf175/ZaSPeNRCBOfMjDnl3G05b/huBFUnXzxTkWCcmopOwW 5tz4C69UVP1UHg4XMu+f6D48srIaFu+DOMTwniL95vqcGkCUJrQkVmFuaWxsYSBJ LiBTaHUgPHZhbmlsbGFARnJlZUJTRC5vcmc+iFcEExECABcFAjv5ys0FCwcKAwQD FQMCAxYCAQIXgAAKCRCyWpCerOdYU/oHAJ4kKjpX6iMF1Y0FjPMyFiyUlgjT7ACf a3czQMrflxJC/VNuzMAmzA19j3y5AQ0EO/nKzRAEALHq1lBY0OBQBeV7sGOvTaBN itMZeVDrGDYUQ9xunaDsEHfz2fD3jXCZLaUayv4LZeWzRr4DbnK4F0AmZLR1v5h3 LxBuvqHPRma5RyyFRftwTNHM+DWu6TSqnE43QS7Ci+z8ua96CmcDa+PnEfubyNLE dco8gfE4oHDqni1R2qVfAAMFA/4uVSYj/DvIzckbZ05FjG+pg4HKsyxyFeFsrm9D 8JD9tC26k4YxLG5FPBdKRsDrN/lZbnLWHTtZqhE3WlX6DRlea93T9Vi2skbujKcN mbao5pyVXWl1dboFquP8ku91CRTZvmdLF6IBnPo0LfOu4jD6DsD5O0UZ7lD/Y+6p 8WcDfohGBBgRAgAGBQI7+crNAAoJELJakJ6s51hTsJUAoIB80SN0z90ocSdxYGwl xkOSm2cvAJ93DigXb3moOsw3BRLlLPQRS6TZxg== =aR5H -----END PGP PUBLIC KEY BLOCK-----
<cshumway@FreeBSD.org>
pub 1024D/3219F982 2001-05-17 Christopher Shumway <cshumway@freebsd.org>
Key fingerprint = 45F5 931B 0646 BF84 E78E E274 6C29 340E 3219 F982
uid Christopher Shumway <cshumway@titan-project.org>
sub 1024g/D215EFED 2001-05-17
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.6 (FreeBSD) Comment: For info see http://www.gnupg.org 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 =NDqN -----END PGP PUBLIC KEY BLOCK-----
<demon@FreeBSD.org>
pub 1024D/13D5DF80 2002-03-18 Dmitry Sivachenko <mitya@cavia.pp.ru>
Key fingerprint = 72A9 12C9 BB02 46D4 4B13 E5FE 1194 9963 13D5 DF80
uid Dmitry S. Sivachenko <demon@FreeBSD.org>
sub 1024g/060F6DBD 2002-03-18
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.6 (FreeBSD) Comment: For info see http://www.gnupg.org mQGiBDyVYkARBAC2Z/8odq3zwRIQZ9XOF4ZoQ8ITJRrTUwwYjwOf4Kz6gTH+zIGt Q57m5w1Scse3J/fDdIZzw0gJgH0XRpKOonWi23di4B3Oyvrdr1Zm6OlqUjoty8CC 7jo5WlLF/05Vai2HCUmFeqiukCN0mfm3Fd8S+hf1IpE1gaIxCKNvYaf14wCgpoVG Tqi+lIMCktV/vxUf3h7KgOsD/3nBeANz3U+Izr9g/AsF/FnHXeawl2m7USaIB7b1 4CFrQp8FDl6TCAtPHQyQ6pdnh0HZ3h+7cfPB1poRaXUvDimQZR9KHZO9uIilpC2n MdBjbkXmvVQ5FhOJz49cXw51Lck11n/+OuP4N4TcIHdt0DQJoUrGIB6X6Op9aOrP Ob70A/sFsFfebYdfH8loLsJkHU8VbB2Y0KZBXSnhysQ9muvj1HqT+n66o/3SliCE R3cNVMgg51pqxzUC0o6qTVKJbfOrI5b2tbYjvx87ejugQwafhKu8t1liDuUYQK0Q S549pzLKUr/NUvJaYU//6QlFIPNSzwB6x4wjrWAKBv6Vn+x0c7QoRG1pdHJ5IFMu IFNpdmFjaGVua28gPGRlbW9uQEZyZWVCU0Qub3JnPohXBBMRAgAXBQI8lWJABQsH CgMEAxUDAgMWAgECF4AACgkQEZSZYxPV34DFVgCfREoIUfpKaEeGyzl0zKThVC7J XccAnjiB85SwuNAxMraQuGDJXojukUfwtCVEbWl0cnkgU2l2YWNoZW5rbyA8bWl0 eWFAY2F2aWEucHAucnU+iFcEExECABcFAjyVY4cFCwcKAwQDFQMCAxYCAQIXgAAK CRARlJljE9XfgA6GAJ9RFwXlNqYap2SI14IPRjX9ZAzvjACeOC/Elh0HkwQ2HZMT edpgzOuknUK5AQ0EPJViRRAEAO4VdFfYGd/amgG2MDGqD269Kb5vTFbS5mDczgjM 6gXZgOjhbvj3x2auo+Pfos6M/bOtHuIk7QFOeOEJ1wcg8wgE3L3kFQPeEPeOgKBk /eA1ExIW3hiPeuwNxT3iWEv0GF/rvCSeSK3nuuDBNmkSpJ4LHIyO8Kf5YJNp8+6D yJ8rAAMFA/4jaulRHxSsWlFIm3gpBR9aiXGGX1pZTuJpXqjAQcRzDa9cuVatiSJS H9wzfE8R4353s5HpaY3AkVRjY6s9AB8bygGdUCQjuIuifTS4+tG/wmaXNgyqBqaB 6V9gTgfW/7XqcJUGeLLMUpccSRZhlQvHd18aTfPWPB49xu2+arw6P4hGBBgRAgAG BQI8lWJFAAoJEBGUmWMT1d+AYlgAoKZWZs7rDLdQbn2d0CVwmWb6hQLhAJ9E/r8N n3jf2PI8Psl2wtgvWazpaA== =mkxU -----END PGP PUBLIC KEY BLOCK-----
<jesper@FreeBSD.org>
pub 1024D/F9561C31 2001-03-09 Jesper Skriver <jesper@FreeBSD.org>
Key fingerprint = 6B88 9CE8 66E9 E631 C9C5 5EB4 22AB F0EC F956 1C31
uid Jesper Skriver <jesper@skriver.dk>
uid Jesper Skriver <jesper@wheel.dk>
sub 1024g/777C378C 2001-03-09
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.6 (FreeBSD) Comment: For info see http://www.gnupg.org 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 Crfzumk= =Ru0+ -----END PGP PUBLIC KEY BLOCK-----
<scop@FreeBSD.org>
pub 1024D/BCD241CB 2002-04-07 Ville Skytt�<ville.skytta@iki.fi>
Key fingerprint = 4E0D EBAB 3106 F1FA 3FA9 B875 D98C D635 BCD2 41CB
uid Ville Skytt�<ville.skytta@xemacs.org>
uid Ville Skytt�<scop@FreeBSD.org>
sub 2048g/9426F4D1 2002-04-07
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.7 (GNU/Linux) mQGiBDywu5YRBACKxY/5WzdUtpL2aK2Yy/Yde2spYiEP2vKj3bs+ovV7a9129lki ldCu8PhoJO+x+96+AwbrR/T5FlXyQrInMa9U5os/8/HQjTXtY/oeq+UNDNFZrnMR Gu0zYICbzgd1rW/tnZJBkB3X2Ao6k0hSATGmP5/sowT7EBSdaM7ZhhqOywCg5A5n J7+062MfzdS/3KoSn+Utex8D/2BN/BMLvrItQBUjy0tn8Vsomx+FHbFKOm1cuOeq smhsOmsANwIafiZnK4+SnQlVbXJLM6exNTqSimH93y7Q9BX7hmWYl0XVpUui0mBR UrVG00PEa0jTLasOkvlyYBS1En4gZ5J2ArE2cYFPkv7jndqJ/pAAZkG+tQnXJ8l5 g0SLA/4tJHLJ6kPad98V3cVbTfhY2Dn/i+QbHvzBbBj+bETLEUdqOKzADGrWoJeE fADfxYi24wHkpH3U781p4SldZpOUvkyYj7YmjqZP0AH6SsKI3i52z1BDQF49gRcD uc0sSmv57yvjKCk1Cehen4/qaVcqXWTZ5NfyGb+hbHLtA2FxSrQjVmlsbGUgU2t5 dHTDpCA8dmlsbGUuc2t5dHRhQGlraS5maT6IWgQTEQIAGgULBwoDBAMVAwIDFgIB AheAAhkBBQI8sLuXAAoJENmM1jW80kHL8KkAn1yTiwsMLq9GsqA44hkh1Sk0etM/ AJ9BiDSqgX0S/wzyXAqfYcsmxS96qbQnVmlsbGUgU2t5dHTDpCA8dmlsbGUuc2t5 dHRhQHhlbWFjcy5vcmc+iFcEExECABcFAj0dWzwFCwcKAwQDFQMCAxYCAQIXgAAK CRDZjNY1vNJBywFtAJ9NCVHRa6GxtfTxae+6ZkTh08xQZQCfcGNMwhcSGJUyjKI2 eYucgrkwp2C0IFZpbGxlIFNreXR0w6QgPHNjb3BARnJlZUJTRC5vcmc+iFwEExEC ABwFAj0di4oCGwMECwcDAgMVAgMDFgIBAh4BAheAAAoJENmM1jW80kHLzoYAoLqR 3unds+O73Z3EppJna4gECkQ0AJ0Uye7ZXLMTJo7pNmZSBSz6bA/qFLkCDQQ8sLvS EAgAinenfe1g5Cdp8bf72+idBePq0zHyPUOpCuFGkiKXecXpgQUHCVYM8IiafB1M Or9V97vy1H56sr+HaBsC75mpuPC7lnltoY+zq0zIkNbi20+p/546W7A5MV66xtTx D6uUSyZ3jksAaVch+6yQNNxr3CDWiNSjomkK1ExPsjaPAA82L4yExAJJGwUYAPOS B1Gw6N3dUtoNuQwJdcw8fjsaRektXsHm6Nnm++3gB0YJ4/x3gcvxlNlONHNp5vdW msQAJtWj4isSMfqi6Y4SQsw2MWOKrYr8Lt++m4cQC6/VZXafTR/TrDZCqYhwovyX vgLMdKfxTZLqsyZwgWDxFKOEewADBQf8CCEh65lRfWQG3MopboOs2fFp3BsfVMvA stV5AYktLHvwGXTW0rx7sCdb3kBtKjiuNFob3gis2Nd05NUxFrzrZsyaktyDiZmT gjmEL1LvodDg/mXLRQgl3QDzUL1nlfFQRkcKqlDfCYezbgYFxCy4EGsC86cf8s8F ZI0hyXXY+zir+xJ/w4KBtL+cY5LJExh0FyPfNnL+tXUthRuN9wxZwVyQ9I4RTlkv ybb8VTWEgzkIf5BiDZalvcOJNAujptlgz2cLnV4Kzu55Xy7jOi5YfYjMbSDa6W5c vO/wbcAG3gwZOoeHBRjwTNkn4iBkDPq71o1LDDxHvWUVAO+jU3TrZYhGBBgRAgAG BQI8sLvSAAoJENmM1jW80kHL1RMAoNsmDIuxlUf3YwjAr/fSqBOKWgN0AKDc0CBV uZAqlAL0tDv8Fiz3HvICMQ== =mEvy -----END PGP PUBLIC KEY BLOCK-----
<glebius@FreeBSD.org>
pub 1024D/1949DC80 2003-08-25 Gleb Smirnoff <glebius@freebsd.int.ru>
Key fingerprint = 872C E14A 2F03 A3E8 D882 026E 5DE4 D7FE 1949 DC80
uid Gleb Smirnoff <glebius@cell.sick.ru>
uid Gleb Smirnoff <glebius@bestcom.ru>
uid Gleb Smirnoff <glebius@freebsd.org>
sub 1024g/A05118BD 2003-08-25
-----BEGIN PGP PUBLIC KEY BLOCK----- mQGiBD9J8QsRBACUyUv4bahsxZl2FID6EMQWhx0jTm3USIrxLV/Gc2z6k2gpFPtO V6qVzHSVV8uaIRGf+7Yh+uJINWeMJpmljvB2bjr4kSJcIKPA9O6QwlCS2eCEKLRw pLz5T7NAE3+unm+jI+cTEF6E+oBJX1AoRDdxxfbrwKwHDs4GVnvw59sWCwCg5gc0 QfYCexqGbOx7s+xjcXRxitMD/1ueSCsb2RLvV9hZzwsFOV3p6lahZPyC/TZaL+5D 5xwQnEvU7VXFhgd+G/XcQ7RwNLYkNVK4yhSoKK1WT36zs16/1elfqXWmslJpquIE OL5AEeVapZMrY6Q6/W8YzsydZGvt+t4vQmswlHurUW5kt1KrCNw0HcalN49Z89bC DMLOA/9JNuDx7FwK9IotF+HStr10OQP8pFuQWdFJp1x1+Pj6EzZgP73997uyQKx9 mVHCWmKRR6vbhGvczoPbZtJH15XBmxhkKL8lXUSTkmCM5uOj++lSIGExIyfF4WY/ pq5u2zx+n5iDUPwGEQ7pYKg1imEUztdlbtQL/JHFaRNE2uZETrQkR2xlYiBTbWly bm9mZiA8Z2xlYml1c0BjZWxsLnNpY2sucnU+iF4EExECAB4FAkBa8loCGwMGCwkI BwMCAxUCAwMWAgECHgECF4AACgkQXeTX/hlJ3ICOSgCgnl5rt40d7i+Fqs8Pvy28 UYg1qfoAoJzWFCRWAccF1HfgxSvQDkOiq25+tCJHbGViIFNtaXJub2ZmIDxnbGVi aXVzQGJlc3Rjb20ucnU+iFsEExECABsFAj9J8QsGCwkIBwMCAxUCAwMWAgECHgEC F4AACgkQXeTX/hlJ3IBDjACfX2OVPL9FZ2D8iBYpbCKX3awTAIkAoJB/jr16QOtX j55rKa91AzUvoLvMiEYEExECAAYFAkC9rWYACgkQ7PDpCywXIINRZQCeJwVRZPLx /ZZegLuzLMtwaD60iNgAoL3YZlOYHBGRdDOc5LGMworaK2W7tCNHbGViIFNtaXJu b2ZmIDxnbGViaXVzQGZyZWVic2Qub3JnPoheBBMRAgAeBQJA9D4cAhsDBgsJCAcD AgMVAgMDFgIBAh4BAheAAAoJEF3k1/4ZSdyAk8YAnA69obJ2ysFk3itJR8XaGqST GOzaAKCgdyZtYl4nItq6GoWZUkoN62ONe7QmR2xlYiBTbWlybm9mZiA8Z2xlYml1 c0BmcmVlYnNkLmludC5ydT6IXgQTEQIAHgUCQPQ+dgIbAwYLCQgHAwIDFQIDAxYC AQIeAQIXgAAKCRBd5Nf+GUncgGceAJ9qR3ivgpNA9yxehONSZ27QAJEhtwCgvHAY DiCvEm3mbmJxke23D4v0ice5AQ0EP0nxIRAEAL15EovBvRgOEwDNoLFTh1Iy4oJf R94bxP3js/BUNOIIvhNRxyoSa5XSOe+zwdHU7conSzP20g8VL+sgRAhM3zSsTebO ckklGpo1+gViyWhR+LCkjTnp/AR7v/Ok9Hc3jmre3lCm85McTdXhPrtD7KIk7O7r bVWQWyqtdRDXF6NLAAMFBACVHBPfooazC9ARB0bEYnr2Lc4LpsTSrWHGok64YmWo SRxCLBbH3Z49i5KHOjHyNoUUEKc2+yFrePoCsZJlqTHQtdbWnUb8++UUu7U/ielk kq8XCHdZWihpXVxSx0TrwdTSTlsDG8GAwn/Ban85By6ueFZ5XQfWCaF0HCGmmN3k RIhGBBgRAgAGBQI/SfEhAAoJEF3k1/4ZSdyASCUAoKOIlIINOfgg6g7skaTIJF6s m6nVAJwJ5ziy7xbt+id2um5tQMtfoHtnkA== =c9ib -----END PGP PUBLIC KEY BLOCK-----
<kensmith@FreeBSD.org>
pub 1024D/29AEA7F6 2003-12-02 Ken Smith <kensmith@cse.buffalo.edu>
Key fingerprint = 4AB7 D302 0753 8215 31E7 F1AD FC6D 7855 29AE A7F6
uid Ken Smith <kensmith@freebsd.org>
sub 1024g/0D509C6C 2003-12-02
-----BEGIN PGP PUBLIC KEY BLOCK----- mQGiBD/MDZIRBACfyWbQW/cZnu504r57DAQbCbTYNG7V/TgfZwphIPyC8YnLtmJv vLdtl7+ToiG7UJUJsBE9OJdb1qA7JP5+jha/TlzIAUMW8doWNyI52nM1zHzBAZVE aB4Gxy7pib9yBsrGYiLbuV5YfB7TUyea31OXpZ4jPl1E6RxlYdVuzEhq0wCgnOeC SuO0cJZMXisY7DhoF1Q8ucEEAIALzShJ6bbjABbcvMWmoRwXvIcBsAcjKSdRcIp0 AP+9i3PSZkNXV7rfYM3+SydTa3sJIVBbdXChQakcZqu9+rmfL53rErErYuRwKqhX mkp4+3GO7cKm0Oya1xLF9es/OfkKcQ9LxkEytNEnU7xlUNoP8fkCMJcBIwagzPfY 7UAzBACEwGP/o1e0R36jOAjrUZsxe63Zopz5138bYdZtmsqwI+QHK6+/tS5I7FCL EQZL6fEjR7gF1lcj3gC2nypjO1aqodx0hShlNnz9d3uJ0q8EChjJuc30UhjgTcbb ZQv3hssKHkvTJ5ch0x+ohYCfH+Gcd8jbXCZvvS8PcI66DRaz3rQgS2VuIFNtaXRo IDxrZW5zbWl0aEBmcmVlYnNkLm9yZz6IXgQTEQIAHgUCP8wW5gIbAwYLCQgHAwID FQIDAxYCAQIeAQIXgAAKCRD8bXhVKa6n9nfpAJ9MHcwNehlbFRJn8B9tlLBE2JvU aQCeLuore1PhiLZPjHriz0/npGn9xDuIRgQTEQIABgUCQLQblAAKCRDYyjFxW6BS wyFIAJkBI9/2PBvvTvB0FZUF2yd3JEQJMgCgpWVGTdChec2z/YGMQ/EeTgNDThy0 JEtlbiBTbWl0aCA8a2Vuc21pdGhAY3NlLmJ1ZmZhbG8uZWR1PohhBBMRAgAhAhsD BgsJCAcDAgMVAgMDFgIBAh4BAheABQI/zB/pAhkBAAoJEPxteFUprqf2oVkAnj0Y vcFOkVU9JWyJJKieWL/+OuNSAJkBvi/uFt2RgkNgUOvHR61SxZrGeYhGBBMRAgAG BQJAtBtxAAoJENjKMXFboFLDvxkAn21uVgtvwLN82vOpKTvBzwAUVK/gAKCKEQDk vfyMyQZayoFeC8cMagaUCbkBDQQ/zA2UEAQAqYnqd58qHyrKfsw3SrTE74/4qneU ra7FY74jcUhGhrxOElG5hXrHHEHo+0M+0zFwhqedecj2GZbrzGEl5SxVsme3slAf Gt5OaAk/ojOY5d5rTezG5v7jSr4EX0JKDkdlve8RozHsutXznsXmUY/BfO1qACek herQeczznycJPZ8AAwUD/1MF+jo626W+4/gMgjgCQ+saOiNI6AnGlS879MUjV0Ef j6aPfAJ5Xi7zNqkM+HdNBxjPtyxIK8RqmdAjHDMR8FjlZjf+svwuL2CfXk4jCk02 OXD4dxJK74w/ZTK2kSW1VW63+5K1lgsRmZvnTpGZ4ijxj4H0r2bJFQ7iUd2kNxpO iEkEGBECAAkFAj/MDZQCGwwACgkQ/G14VSmup/YeOgCfcaCQpDfKaEvYiw7XJryW b4OXclEAnArceW10G489Csi2QR94q7clHU0G =gLKU -----END PGP PUBLIC KEY BLOCK-----
<ben@FreeBSD.org>
pub 1024D/2CEF442C 2001-07-11 Ben Smithurst <ben@LSRfm.com>
Key fingerprint = 355D 0FFF B83A 90A9 D648 E409 6CFC C9FB 2CEF 442C
uid Ben Smithurst <ben@vinosystems.com>
uid Ben Smithurst <ben@smithurst.org>
uid Ben Smithurst <ben@FreeBSD.org>
uid Ben Smithurst <csxbcs@comp.leeds.ac.uk>
uid Ben Smithurst <ben@scientia.demon.co.uk>
sub 1024g/347071FF 2001-07-11
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.6 (FreeBSD) Comment: For info see http://www.gnupg.org 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 =D508 -----END PGP PUBLIC KEY BLOCK-----
<des@FreeBSD.org>
pub 1024D/A0D39168 2004-08-21 Dag-Erling Sm�grav <des@des.no>
Key fingerprint = 82B6 AED6 2F8B 1591 4A92 EE36 3FA0 DE08 A0D3 9168
uid Dag-Erling Sm�grav <des@teleplan.no>
uid Dag-Erling Sm�grav <des@freebsd.org>
uid [jpeg image of size 3868]
sub 1024g/E7611058 2004-08-21 [expires: 2006-08-21]
-----BEGIN PGP PUBLIC KEY BLOCK----- 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 TYMAn2Mn33DQz6/n34BD67QH6yYUkEvQ =Xfau -----END PGP PUBLIC KEY BLOCK-----
<sobomax@FreeBSD.org>
pub 1024D/888205AF 2001-11-21 Maxim Sobolev <sobomax@FreeBSD.org>
Key fingerprint = 85C9 DCB0 6828 087C C977 3034 A0DB B9B7 8882 05AF
uid Maxim Sobolev <sobomax@mail.ru>
uid Maxim Sobolev <sobomax@altavista.net>
uid Maxim Sobolev <vegacap@i.com.ua>
pub 1024D/468EE6D8 2003-03-21 Maxim Sobolev <sobomax@portaone.com>
Key fingerprint = 711B D315 3360 A58F 9A0E 89DB 6D40 2558 468E E6D8
uid Maxim Sobolev <sobomax@FreeBSD.org>
uid Maxim Sobolev <sobomax@mail.ru>
uid Maxim Sobolev <vegacap@i.com.ua>
pub 1024D/6BEC980A 2004-02-13 Maxim Sobolev <sobomax@portaone.com>
Key fingerprint = 09D5 47B4 8D23 626F B643 76EB DFEE 3794 6BEC 980A
uid Maxim Sobolev <sobomax@FreeBSD.org>
uid Maksym Sobolyev (It's how they call me in official documents. Pretty lame...) <sobomax@portaone.com>
uid Maksym Sobolyev (It's how they call me in official documents. Pretty lame...) <sobomax@FreeBSD.org>
sub 2048g/16D049AB 2004-02-13 [expires: 2005-02-12]
-----BEGIN PGP PUBLIC KEY BLOCK----- mQGiBDv7rWERBADAnp/1Nc02OyU3eiXisqYDw2CaFNG7CpTNalQbJCX9KDuCzNbh RKS7slRG0Cp/IsCIoJ0WLugslAZHBtLigl5XxdVeTYKJfXV1gKXLBnzW942oswUu zMeZzpcrCYHK7AVaTtZJEQTDf/SIx/ZYu8DJPv/7m9I7aY3EYXQsHIqj7wCghRzg vhbpzqR9KiIsH82z5ctlGHUD/AixgJJ6dCf/bxIq3siaijMs1fM1JNLTIL5W7i+I LWUjM9PJztfasAZMj4kXjimZl9345CW+0+jV2oe7y+AFWGZUsQHKb3azruH9frZc a6JSUOwvy4mQjMwtQC2ngJsUQGqrfGl3DLaa4hJzlgQ6i0PHTN1ljKvrMNgtgnZg dypDBAClZuCCjn1RffnM4FzWuDZLYL/wLhqbtzMNvQXe5gwnDeg1QM1xgfUtaaa0 7f071Ayv+K54wVk+7XIRZLP0Kbgo07kJlXw5AzznzY4167RkcrifLPtG4nbDQCaS QreYjUG902h8T7ckkmTV6VAPGUEh/ms9aAeFxAg2XOXiwCaYerQfTWF4aW0gU29i b2xldiA8c29ib21heEBtYWlsLnJ1PohlBBMRAgAdBQI8INsQBQkB4TOABQsHCgME AxUDAgMWAgECF4AAEgkQoNu5t4iCBa8HZUdQRwABAZRqAJ4ypOHGqZA7mf+m+R1k kUCSxtirZACeIXLS54rLLTauEHQtuHfNKEQolCC0JU1heGltIFNvYm9sZXYgPHNv Ym9tYXhAYWx0YXZpc3RhLm5ldD6IZQQTEQIAHQUCPDcdsAUJAeEzgAULBwoDBAMV AwIDFgIBAheAABIJEKDbubeIggWvB2VHUEcAAQEdMQCgg67lgOG0NlSy6RlNxeqT mREvqt0AnjoRX4MwyfWsHmD63XoByM5XjdketCBNYXhpbSBTb2JvbGV2IDx2ZWdh Y2FwQGkuY29tLnVhPohlBBMRAgAdBQI8Nx30BQkB4TOABQsHCgMEAxUDAgMWAgEC F4AAEgkQoNu5t4iCBa8HZUdQRwABAYJvAJsGythE5SUctWSmAYIxYHagnEUU/gCd FQv6AywESIEMOLK5iaONMFb5NGO0I01heGltIFNvYm9sZXYgPHNvYm9tYXhARnJl ZUJTRC5vcmc+iGUEExECAB0FAjw3HwsFCQHhM4AFCwcKAwQDFQMCAxYCAQIXgAAS CRCg27m3iIIFrwdlR1BHAAEBbJQAn1tcab5GD07XKi33AdcyP521kGhHAJ9eo7wb PMLk4e7y6ZiQEeMd4DF1/5kBogQ+e3iWEQQAsxiirVfUk5G6X5YyhHT3pX2Tt6n0 F5hj36BLxU/Cbn7viUMP2x6qafIolWC5wW3JEklsql3wXovUl6Uuaah6S57XD+45 YNAztjJ2rOp4wW9KD6i7IWkbtgz0eRLQBNzEvcvdMfGqH/1XujGn033Q3tpgT8sH WfbT68DXuaUTJCMAoJhav+twkmoLhT0o5KSjSgcmtjOvA/4oJZ9D5H4rSRKWhQNG 5A5FZlNX1q7K9/WYcSKWsE6R+jnOFigZOt/wEXA4tUiI1b7SaVnSPNgQ26iMPDIZ uauEmvjQmVDSdO0ZsS545VQ9xJtksJdHZXnTVKWyTNiRWGHWT3ucR2XFJ40U+so/ AxKch0N5CqtYy9A27aO6KLqBOwP9GJUvIE1zB5plWP70d9Kii6Gf9c84VwK8sYcd w45M4DozPUJqMUcfP4ycvK5AY80MRvNr+UP0VgfpuKElh2JCUpgj9XTE48vuAdyd 3q6lVEC4SpjZu29oFNyzcX0dILPHy49pTaNOUK7EQgdS1S7OWksP6XCWQ+Fmd8E7 vtcT+BO0JE1heGltIFNvYm9sZXYgPHNvYm9tYXhAcG9ydGFvbmUuY29tPohiBBMR AgAiBQkB4TOABAsHAwIDFQIDAxYCAQIeAQIXgAIZAQUCPnt4lwAKCRBtQCVYRo7m 2FP7AJ9QC+MpLfOgfrBZ62ylXJbgV9rSfQCbB+djelAeWNwsPCSI1ztdLW71gIW0 I01heGltIFNvYm9sZXYgPHNvYm9tYXhARnJlZUJTRC5vcmc+iGIEExECACIFAj57 eW8CGwMFCQHhM4AECwcDAgMVAgMDFgIBAh4BAheAAAoJEG1AJVhGjubYpG8An1bD +5ViByos/wyRoQ3fL5eRnPbYAJ9orRZWWPheXO7sO4kRB4p0tUGZQ7QfTWF4aW0g U29ib2xldiA8c29ib21heEBtYWlsLnJ1PohiBBMRAgAiBQI+e3mWAhsDBQkB4TOA BAsHAwIDFQIDAxYCAQIeAQIXgAAKCRBtQCVYRo7m2EMFAJ0SKWhO8mbbRHNjJZhr Z6gRvtM7RACfXwBb7dbxG1ZEcJHfvaJxo/VxF2G0IE1heGltIFNvYm9sZXYgPHZl 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 =Z1Sd -----END PGP PUBLIC KEY BLOCK-----
<dcs@FreeBSD.org>
pub 1024R/488A2DD5 2000-06-07 Daniel C. Sobral <dcs@newsguy.com>
Key fingerprint = AF 90 A6 A2 B5 8D 6C 28 37 F3 F4 47 8B 31 47 DF
uid Daniel C. Sobral <dcs@freebsd.org>
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.6 (FreeBSD) Comment: For info see http://www.gnupg.org mQCNAzk+tBAAAAEEAK5EJZPGnimL5cl9lFRpl3mYboOuN6K/ne/2oHt5CNlhBTuU 64VDPcBsM6ha+KJwSCdiO191AHnbpJSmIzNmL1VLHZunbZhJms2rf388pXO6nyu3 GW7x2nmqg5qTTkVZAILcuqb8DF4ODF8FEwwCzDJ4ikhSxgXbsTN8YkBIii3VAAUR tCJEYW5pZWwgQy4gU29icmFsIDxkY3NAZnJlZWJzZC5vcmc+iQCVAwUQOT60EDN8 YkBIii3VAQH1AQP+L27NSLH7LAG4M6GMaMVaI4GkLroqWVumwggYI0UsrBazSYhI t2fULDSnbhXGYUnmMYc8GcS2+m7KIp6getBSXWXPYr44aOwC2r3mB4WmUp4gWsqd 80C5Zc35m62xpkg/yb59UMI/OWTGdU9tVVS1YTdaarLGl+yJ6EWM7qECiVSJAJUD BRA5RV1dVS4eLnPSiKUBAaXaBACBbO0J8IhMnsAXZ7fYKrQVCQFK6HSMQjISlm4Y 8kD1ZtKEMUuBlbbHEt7NoIcvH60jDJPkjSgwMRjUYbluTQe/dfthRkFa92WYcy0G BbgEz+Iib1s0deFF5wL0wSLC9RIIReOk/pEOg/cY7efeutoEOX8LVfz18MkxgH2A 3Cv6gLQiRGFuaWVsIEMuIFNvYnJhbCA8ZGNzQG5ld3NndXkuY29tPokAlQMFEDk+ vYUzfGJASIot1QEBPjAEAJMooQYQUef1jKBsYC9xh9WcvtQ45Hku+BKwU6tBlhLT JMIn9n0guzXey4gsVcpgJcjmZEXAq+dbgL/ps63CXQAahomlszpdea9aumbak1aU 51eIEftheyZaqmM4stDvoC+pdQxWP5K3n2d/7itwFde19xQNuK9UD9iPjJnz2L47 =Axyy -----END PGP PUBLIC KEY BLOCK-----
<brian@FreeBSD.org>
pub 1024R/666A7421 1997-04-30 Brian Somers <brian@freebsd-services.com>
Key fingerprint = 2D 91 BD C2 94 2C 46 8F 8F 09 C4 FC AD 12 3B 21
uid Brian Somers <brian@awfulhak.org>
uid Brian Somers <brian@FreeBSD.org>
uid Brian Somers <brian@OpenBSD.org>
uid Brian Somers <brian@uk.FreeBSD.org>
uid Brian Somers <brian@uk.OpenBSD.org>
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.6 (FreeBSD) Comment: For info see http://www.gnupg.org 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 3mPjEgv3yQyXxmScDQ== =g4uu -----END PGP PUBLIC KEY BLOCK-----
<nsouch@FreeBSD.org>
pub 1024D/C744F18B 2002-02-13 Nicholas Souchu <nsouch@freebsd.org>
Key fingerprint = 992A 144F AC0F 40BA 55AE DE6D 752D 0A6C C744 F18B
sub 1024g/90BD3231 2002-02-13
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.6 (FreeBSD) Comment: Pour information voir http://www.gnupg.org mQGiBDxq4ZARBACJSN3t0e7d8A7LNfvsKsNNfMWbANu/f3vEhDEj4D4X2QLKyk8t Ti5/wO2Z7HJiT5QfI3zeRWetvHMWXhAYc24GrTUMdCt2zhUjufi5BdysmcbLiZFt 9wjJpJITW4A6W7YP55ORkZs6ye/j4Luf7YN4xISWvM9/kzpUtU8R6txC3wCgq28H 0tdFPUDvyAwr+97vHs97z/UEAIFPSIAsrH00DuudiLpqZB0LE+BcDsSKgxBQsZJT 06EQQaE9XMN4f46nAtxzFhSbGZL4qIBUO3Ny1Pp0rqjCfumuwONLXZSK829LaaJn WfZ5ux9ZjvfYJ86NgUV2tFnwZm2UYQXc4234FfzfebeiSmYI27BMvLJ28xXU+pNw vUvhA/9uPu+i3Dk+ha+0UaBTp/HNTAveoTKH6lNOS12XhCNNPQUL0gonJTeWThRO z4YttxgLa5I/MoNsub0+GtNrlyhLyHKzjBBHEqJHJp7+zkyfCODnJaxUqoKskUSD QF5VX6v6vEQl5UBjGwonHmzsrnuqTb9pyYhfPTch9n22eS6ZqrQkTmljaG9sYXMg U291Y2h1IDxuc291Y2hAZnJlZWJzZC5vcmc+iFcEExECABcFAjxq4ZAFCwcKAwQD FQMCAxYCAQIXgAAKCRB1LQpsx0Txi0J7AJ9q3/ulyXnWjGWlR0L+3QtfPKI5EgCf WTLlr+SXYF+nrW4VvQcJvuyzZyG5AQ0EPGrhlBAEAKQjsjIRO+kHT+9qCYsw6HPi BYzH++xP0i5143trUJ66FoEfqOl4UqHwNJ7GEXq9MWgzBH9wDL69Bb4kSKQ9vKwD EgAnXObS3FOUPLK5AMXc5jy8rRaUru58+cGs1cNIg69zgQ3FQyWF0FHI7kGsAdz9 8iUZhXL22I7+EVBgd9DLAAMGA/9oK+Xjo7xdLZvkW8b4nNIA7Xyml2uMLYjg/OVg qRkVU5f7KM2oHna7+VtvdJrIl9bTVc6mrTl6GY1/0GYb1edgSu2Axg+msj3fVkGd 8hWuNQ/T5v45kgPcoJxWLzaWWkDeLQAf5tq/QVmN8hofl6UsrsNDvYTBbl7129uo 3BJbG4hGBBgRAgAGBQI8auGUAAoJEHUtCmzHRPGLta8An39UVQwz3OgsZQ5e8upC VEBCvTUmAJ9/8mbmXF+Ii/JdY6STmU1MMfmQvQ== =A6my -----END PGP PUBLIC KEY BLOCK-----
<ssouhlal@FreeBSD.org>
pub 1024D/2EA50469 2004-07-24 Suleiman Souhlal <ssouhlal@FreeBSD.org>
Key fingerprint = DACF 89DB 54C7 DA1D 37AF 9A94 EB55 E272 2EA5 0469
sub 2048g/0CDCC535 2004-07-24
-----BEGIN PGP PUBLIC KEY BLOCK----- mQGiBEECPOARBACeiKSpedo952tApwSI+rrDIrp5LOC5FG1crAiTpAqy6aP+n60z c2euoVDGjH/ncUZ+TxUK/MkzSOFXTjU0TETFgq2UMxSzZCLwPrmQibfHbmnF08+g 0EjlslsszccPgTEZz6F85aZGYWjU4dhQ1VYP+y5Im88CgahggCB6J+8hHwCggMu3 f51egcdCrodzFvL8poUYKi8D/i644gOjVN/YamHS5QUGNPJ9xkcq5G4OfK+Ubjq8 6T1dd7UkJ22sePpKGtRhPNATeEar/HwzLB7r2h+UAD4Yrl6+//EwWB73BgxyCqcB X57s57K3+UMblbLR3NWJAD/HpxIBFxXfj55VPk6aH6GX5LzayMxfZVYccMyWOcsK UZaNA/0aJkearTpmitBL49fOhz8Je/QIF6riigkdOuyx62yAtYRNrVbDrQvvornR Z1CLUp+mixUc3bT+emLFpz2ZXmGqCr9BMAqENh0gayGeekyk8IYLQudFSidL3yHo WErc76neXoBE/5M/v7jZCrQS9loS0vITFsui0Rv95BcsNbV0iLQnU3VsZWltYW4g U291aGxhbCA8c3NvdWhsYWxARnJlZUJTRC5vcmc+iF4EExECAB4FAkECPOACGwMG CwkIBwMCAxUCAwMWAgECHgECF4AACgkQ61Xici6lBGkj0QCbBe+RP2fX0+t1fiU/ oOcORVeRc3UAn3Y7M2TfTKmSh+5RXsaxcVKWDqZauQINBEECPPgQCACOxltxnJKq MHIW1P1u4pjby/v0ZsVWbhqmPzW1L/o0SHbBdPkLn+NZmOKG3sXFkitq1nnXQMq0 pdWwEK55rN3+iYMpq2OJgubsEDJbo39Lom49w3xXs3ElHKWmgjNUMmiGi3yA3Q5P p9E13ze+ZBTTZrlj9xtTsXYPCkoihcjA8iD1G52CJYuVQOCxeKo3d8EZi4sFXhTs yGfK7ipLN2jO4H8LSrImMlT5z/ePmhTgo59A+vsIShklJpRlHqYB861sMobUlbCd 0n7Fng8pD9jIG63usHJgU32AVEeZ9BMaZ5Gjsm7KvIwJH+w8DGnR7016hleSXSEk wVbS7zjXKfAPAAQNB/9GQcWpnuKYlVa7olq9XOVHe2pHrnK20wLy14ormB245Aip gTCN/SEIgwc09nF2QXXXhzZrxsFCPphgJh7CT8g25LCJ2rchOhCpShNS43I1ol3d II4nK0DtXUJc/3qG5PgPaNLHHyskwIIyfL2rKRlufTgByzF3AKXHweJQ9suxGkGS i2+l1NBwLwsjee59gEyKXT/cbfkV/IgA+NBpj7QaDs0yhsbPSDAJszbo53aBAB9U sZjWP9tkrzaP1eoSbl+LFttLtrivG/v8HZuPlI4lELeRboslI1aUUfZVt7xx4A6P u3L1DWOYm9rQ0q1KMlhGQKa/JBtaKy73wwzZujSWiEkEGBECAAkFAkECPPgCGwwA CgkQ61Xici6lBGnrNQCbBljRUNo/9EHyCk0D07YM27DYC+8Anj9wU0uuZE798XZ6 n4y0m1iMcuSh =Fl75 -----END PGP PUBLIC KEY BLOCK-----
<vs@FreeBSD.org>
pub 1024R/3FD1B6B5 1998-06-16 Volker Stolz <vs@freebsd.org>
Key fingerprint = 69 6F BD A0 2E FE 19 66 CF B9 68 6E 41 7D F9 B9
uid Volker Stolz <stolz@i2.informatik.rwth-aachen.de> (LSK)
uid Volker Stolz <vs@foldr.org>
-----BEGIN PGP PUBLIC KEY BLOCK----- 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 G7oQ/NdFiVk5IOo= =r3Jh -----END PGP PUBLIC KEY BLOCK-----
<gsutter@FreeBSD.org>
pub 1024D/845DFEDD 2000-10-10 Gregory S. Sutter <gsutter@zer0.org>
Key fingerprint = D161 E4EA 4BFA 2427 F3F9 5B1F 2015 31D5 845D FEDD
uid Gregory S. Sutter <gsutter@freebsd.org>
uid Gregory S. Sutter <gsutter@daemonnews.org>
uid Gregory S. Sutter <gsutter@pobox.com>
sub 2048g/0A37BBCE 2000-10-10
-----BEGIN PGP PUBLIC KEY BLOCK----- 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 sTEQABKrEX0m =fxvp -----END PGP PUBLIC KEY BLOCK-----
<metal@FreeBSD.org>
pub 1024D/AE562682 2004-05-23 SUZUKI Koichi <metal@FreeBSD.org>
Key fingerprint = 92B9 A202 B5AB 8CB6 89FC 6DD1 5737 C702 AE56 2682
sub 4096g/730E604B 2004-05-23
-----BEGIN PGP PUBLIC KEY BLOCK----- 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 =xwme -----END PGP PUBLIC KEY BLOCK-----
<nyan@FreeBSD.org>
pub 1024D/8394B81F 2001-10-15 Yoshihiro TAKAHASHI <nyan@jp.FreeBSD.org>
Key fingerprint = D4FA D8CA 2AED FCF4 90A3 3569 8666 0500 8394 B81F
uid Yoshihiro TAKAHASHI <nyan@furiru.org>
uid Yoshihiro TAKAHASHI <nyan@FreeBSD.org>
sub 1024g/B796F020 2001-10-15
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.6 (FreeBSD) Comment: For info see http://www.gnupg.org mQGiBDvKlwgRBADKGTPgNos5F4dobTyIhNN1nVHwKtvdTM06orzFj8VccmdZlJF7 DLp1UH1gwiVGLu1NPOrQXKeaZmK3iO11fTV0zbCUlUnfgSQsJJeGUFMx7/tgu/F3 L1qe1p37txNYN09SSEBJe7rlTLhM4VWa3LeEG58Td0d2qP/fJeikz9HIVwCgzIJd aEclfjgNmsx2lM8jn6qxJXED/jyqV1eAgTD8C6MRPGYcqyLUZoIy7SwdhvQLKlT3 rAI4yHy5m8Njj0bk1oJM+2PAhZN3o16tpsjQEJuWoIGWxe9P4AX2Rr6htpidn2Gc UOXaMFZyy0MX4ULfph78FEzRC8WGEV1hWLW9pNnzaASY/RwNNvW/YnGyKSCq9ilC YG9mBACfcmN76QnFFDHd76otrltwwjj1zTRoHEnBgfj/EldDeOaU5cBG0HiV6cbv 94MYUi16AnN6462qG8RHJmSPblsm2Og1e7aaZl0CpVgOq86QBwqDHFXh0q0UtgXU EQChaBe68ydZRwd9TScAknuj5iAXfXtwAeyhWbzmVyJH0Kk8QbQlWW9zaGloaXJv IFRBS0FIQVNISSA8bnlhbkBmdXJpcnUub3JnPohXBBMRAgAXBQI7ypcIBQsHCgME AxUDAgMWAgECF4AACgkQhmYFAIOUuB9UUQCgwTQSPrbTxhJvi1DdGsYhHOsT0PsA nRNBwMyeLPQPhLxw8EPLgyno7+EHtCZZb3NoaWhpcm8gVEFLQUhBU0hJIDxueWFu QEZyZWVCU0Qub3JnPohXBBMRAgAXBQI7ypdXBQsHCgMEAxUDAgMWAgECF4AACgkQ hmYFAIOUuB8q0ACfTgzsn+Q6wc4aDQ7nT3+M4HPWXhUAn3nhtyq4Ucu2A6oHXvVt 1oAhhGyPtClZb3NoaWhpcm8gVEFLQUhBU0hJIDxueWFuQGpwLkZyZWVCU0Qub3Jn PohXBBMRAgAXBQI8VVkOBQsHCgMEAxUDAgMWAgECF4AACgkQhmYFAIOUuB/XmgCa AgHmONlOiOhKdY5LtVJoDi0+cOgAoK4wJFYzstYbpXayj0LqbgmYiY3QuQENBDvK lwwQBACBBH7cM4WCT6D1w1XAQnWgL4eE/fMcR3aPiHBDd8eDWFFOhwSPh3W6jZ5T STUEZCF7lgD3k+QJtDhVKE0U/hha1ZFMgdTTbhEW9Pl9DHW3BYxPXxq/SURwpGFg 0GriV65Hx3Dq6cxkBfzGZzrZA2JfRwb3pXisNSGDILAtNRw3jwADBQP+OSbFQWL2 n+KrBX4dPbp5cuFVL1/NNOWhSOwU+IsR8jDaCYpLy+Zkn7Bn90bIee7zsdWOkGWf /qV0qm6dY7xLs/hoCKgk+0jPPevVcCayfCTzBZ+d76qPjWQtEgKN7/LJZn8rMCBf B4kHxrcclf9z3OdI+BzTNrPZaCeHLd7nMKeIRgQYEQIABgUCO8qXDAAKCRCGZgUA g5S4H1r/AJ973EUo0J+SF83Sj/hL0zDTQBKlKgCcDy1o6LmSduT3NE28KB3Iw10I kqA= =eB3G -----END PGP PUBLIC KEY BLOCK-----
<mi@FreeBSD.org>
pub 1024R/3FC71479 1995-09-08 Mikhail Teterin <mi@aldan.star89.galstar.com>
Key fingerprint = 5F 15 EA 78 A5 40 6A 0F 14 D7 D9 EA 6E 2B DA A4
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.6 (FreeBSD) Comment: For info see http://www.gnupg.org mQCNAzBPh/0AAAEEAKiF0rNVbbuQue8Mo+knlGKtZJXWkLOhmdzE+FPxTSRv3TOS OHOfFbEbTlcuplvYv1US6o4liAyyx6vGLGa7ZW0zLFAtTOJTfwW3GPmcMTieOIK3 wwzJtjH+wi7VeXIQCU/mOcLC9A8QaLqhJ86e3m9FODSFMIluSoucrgI/xxR5AAUR tC1NaWtoYWlsIFRldGVyaW4gPG1pQGFsZGFuLnN0YXI4OS5nYWxzdGFyLmNvbT6J AJUDBRAwT4kMH2ldntvsCqUBAVAcA/4x53VCfOx5Bm+BtneQNEvHgV8aqWW0tM4r 31KtsSjMwuHF3kl7PJtCfVk4OpRvog4u9V5G7gtUhUIOi/Qfuia2YHvvxIh3sx7Z Gg22e4FxNzNob3qV+YiPOr+Aa6EoYfHB45eHSLFXryCBS60a0CfZies+CSzcHBy9 /Zu51dCtnQ== =f57V -----END PGP PUBLIC KEY BLOCK-----
<gordon@FreeBSD.org>
pub 1024D/357D65FB 2002-05-14 Gordon Tetlow <gordont@gnf.org>
Key fingerprint = 34EF AD12 10AF 560E C3AE CE55 46ED ADF4 357D 65FB
uid Gordon Tetlow <gordon@FreeBSD.org>
sub 1024g/243694AB 2002-05-14
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.7 (FreeBSD) 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 =1nJ4 -----END PGP PUBLIC KEY BLOCK-----
<lth@FreeBSD.org>
pub 1024D/56B0CA08 2004-05-31 Lars Thegler <lth@FreeBSD.org>
Key fingerprint = ABAE F98C EA78 1C8D 6FDD CB27 1CA9 5A63 56B0 CA08
uid Lars Thegler <lars@thegler.dk>
sub 1024g/E8C58EF3 2004-05-31
-----BEGIN PGP PUBLIC KEY BLOCK----- mQGiBEC7Hq8RBACUBh7OsXzgLr6Hz1QigRoSr5nWAUdj7Z9wNIcoE9t6J61MIUtP qGL3x73LspmwBGu/aC9muJ5b4Ont+BBBkVkC3Cdl7pKSvT70/ZB7TKw9f9HA9S67 jK/NnrgG4R9amixfd0KyycNpf3yvug2FV5VZBiUqvuqWipqXacOxsD8rAwCgksWW 74+msARYAf+mTeR7/NCEH3MEAJFfoV3APPGGECWfwrDmQT1IiBhObbjsVKbo4z7w yHxK+3Qm9nCG/sVthRll96C+rtAJKf+FEN8nvIx/9Z1UQ3Y7zTMgzlbz83BhhPnZ lAZEZI+EfmWsltzmyjJHnsvShRvjEp/YQ+0tfZV5uAPy2yrICw/rvozhCmqTox5l zOgXA/9mfbgbJR8NS7IwzcVSH+YEW06lyxLHjEd31aIj6wgX7O9H7JdXOytTqbSR VXN+5GjJhEaw9GmAd6tsvusHMy+1GBgY7TFFUNYO+JqHn6FKGzfPiFyxDyvyrF01 QL033peqiNVxTS5nvJzmKQCpftlU3S85R+K62Alv6xO70HyaALQeTGFycyBUaGVn bGVyIDxsYXJzQHRoZWdsZXIuZGs+iF4EExECAB4FAkC7Hq8CGwMGCwkIBwMCAxUC AwMWAgECHgECF4AACgkQHKlaY1awygj74QCggWeR8IRwgHIsxVv5zItpzdtnkSsA n31ytm6noxfetU5J/5NnR6bwV4WetB5MYXJzIFRoZWdsZXIgPGx0aEBGcmVlQlNE Lm9yZz6IXgQTEQIAHgUCQLsjTQIbAwYLCQgHAwIDFQIDAxYCAQIeAQIXgAAKCRAc qVpjVrDKCPikAJ9a/Or2be00A9PeXyoo+b7VuLAzhgCcCX9kI2DduTtitld/mY93 vZDnQPO5AQ0EQLseuBAEALDSStxYn/CidImaPKwDZoYVpXpHucmBZ/nK/rFwMNh/ /RZD8ZdBF1PEDf3EA78qTxEk7PfSnoEWcxmcNfiMSALiTkehI4nWQH7j0ZSwqC/5 Du4lP1v1PSeR35IkC58n8kur74olLMdoYxlpVOwh7jGR9W/3MSEjQ7NJP9AZ4yw/ AAMFBACv3/ZxNdO78IPVJ1kQsfGUnwfpiw9syDqK+CMA6FyTCI2VUc6kY0Wc23Qv uoGv8ROk75pa2MJxEH/GQJNSZerJCSzLqdCyEW4tuxxJPQ7celSZ7PL5QutBzytL 4rUQ5bUlYQBFlCx6aOuG2+zQqiFbm1RqX7RYdOf3LnlRmkaTDIhJBBgRAgAJBQJA ux64AhsMAAoJEBypWmNWsMoIibYAn1x8xlAkuQC2ZlUID9ORxSIgEMyjAJ99nQWi rCVB/qZMKoL16f9mHKvJ4g== =OYqV -----END PGP PUBLIC KEY BLOCK-----
<thierry@FreeBSD.org>
pub 1024D/C71405A2 1997-10-11 Thierry Thomas <thierry@pompo.net>
Key fingerprint = 3BB8 F358 C2F1 776C 65C9 AE51 73DE 698C C714 05A2
uid Thierry Thomas <thierry@thomas.as>
uid Thierry Thomas <tthomas@mail.dotcom.fr>
uid Thierry Thomas (See <http://horde.org>.) <thierry@horde.org>
uid Thierry Thomas (FreeBSD committer) <thierry@FreeBSD.org>
sub 2048g/277D65DB 1997-10-11
sub 1024G/8866DD0F 2002-01-26
sub 1024g/36DA7AF9 2003-11-26 [expires: 2003-11-27]
sub 1024R/C5529925 2003-11-26
-----BEGIN PGP PUBLIC KEY BLOCK----- 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 UR0ATWFkZSBhIG1pc3Rha2UgaW4gbXkgc2lnbmluZyBzaGVldC4gSXQgd2FzIHNv bWVvbmUgZWxzZSdzIGtleSBJIHdhbnRlZCB0byBzaWduLgAKCRDw4AhgAD7XAd1q AJ4gQRvA+HwjyZe/iXtfurbtsx9auwCglVfRAM4L0L3IPzXrBKhj7vmxRh+0PFRo aWVycnkgVGhvbWFzIChTZWUgPGh0dHA6Ly9ob3JkZS5vcmc+LikgPHRoaWVycnlA aG9yZGUub3JnPohfBBMRAgAfBQI+9iQmAhsDBwsJCAcDAgEDFQIDAxYCAQIeAQIX gAAKCRBz3mmMxxQFojubAJ9ATTvB+Gku4kj05MCj6x6vKD0jSwCeKvnmQ0ZV84fW N+XWANOWEFjBoouIRgQTEQIABgUCP6fu1wAKCRADs+HWWNo4HRHaAJ9KCiMPJ6NX XuHZwlDfGrwOO9xkHQCfVIndhp48NebhpsdxlDA/qV1UdbqIRgQTEQIABgUCP6zn CgAKCRC98qIgXjYZ0+j6AJ9yUTEIHsm2QUTDYgU+486LjPcT+gCglykyVeD0q9GH dLUKi69FyoALae6IRgQTEQIABgUCP7CzkwAKCRDw4AhgAD7XARjyAJ0WnMAnGmvr fRUoc9Jc09J5dMkCWwCfUpNO1AwMGHz8PN/NExgv+Qn/p4WImAQwEQIAWAUCP7C6 PFEdAE1hZGUgYSBtaXN0YWtlIGluIG15IHNpZ25pbmcgc2hlZXQuIEl0IHdhcyBz b21lb25lIGVsc2UncyBrZXkgSSB3YW50ZWQgdG8gc2lnbi4ACgkQ8OAIYAA+1wHZ rACbBulk0H0vsEH7yxQD9jj7mcRS0NoAn1Ti0eZ/zE1UNdBuTl/8q/jd+cYItCtU aGllcnJ5IFRob21hcyA8dHRob21hc0BhZG1pbmlzdHJhdGV1ci5uZXQ+iFsEMBEC ABsFAj+wJh0UHSBBZHJlc3NlIHDDqXJpbcOpZS4ACgkQc95pjMcUBaIjkQCgzGUw Yqul7je6LkSPVhP1YmdVGroAni4ReNynhu3TUQUJo4zBcwVvtuQEiEsEEBECAAsF AjdcPS0ECwMBAgAKCRBz3mmMxxQFog5aAJ9XhE7suBxTL6kL1btLfB5p7E298ACf SB4FjLwlLjo42xQ4M6DRQN9iB7uIRgQTEQIABgUCP6fu1wAKCRADs+HWWNo4HVI7 AJ91ogIm/rIkkQu7FXa6e6uuycIDVwCbB9ZzTCjNxjzop9gWytRhvFRx5YCIRgQT EQIABgUCP6znCgAKCRC98qIgXjYZ01EfAJ41f2OfyM1FY4pua6DBLSLBHPNbaACf VT5iZbK40auCC7b6MUG34NneUEyIRgQTEQIABgUCP7CzkwAKCRDw4AhgAD7XAX7K AJ4m7GehLjTQpywvncfcrv/5MTSvgwCfYUorT/WTsDQoOaMoE2W/F+uDQYaImAQw EQIAWAUCP7C6M1EdAE1hZGUgYSBtaXN0YWtlIGluIG15IHNpZ25pbmcgc2hlZXQu IEl0IHdhcyBzb21lb25lIGVsc2UncyBrZXkgSSB3YW50ZWQgdG8gc2lnbi4ACgkQ 8OAIYAA+1wHbEQCfTFgbXTT++vxhYU6jT1ubnhyDQ+wAn2Nk8mRcTvFoxT1AEeYk /7lUMihHtDhUaGllcnJ5IFRob21hcyAoRnJlZUJTRCBjb21taXR0ZXIpIDx0aGll cnJ5QEZyZWVCU0Qub3JnPohfBBMRAgAfBQJAVOPNAhsDBwsJCAcDAgEDFQIDAxYC AQIeAQIXgAAKCRBz3mmMxxQFos4vAJ9mk4ywY/DBvKv/mL+e9sn9SZRoQQCgikxq LhFlaeW08KXi+sWa8L3fFw65Ag0END/P0BAIAPZCV7cIfwgXcqK61qlC8wXo+VMR OU+28W65Szgg2gGnVqMU6Y9AVfPQB8bLQ6mUrfdMZIZJ+AyDvWXpF9Sh01D49Vlf 3HZSTz09jdvOmeFXklnN/biudE/F/Ha8g8VHMGHOfMlm/xX5u/2RXscBqtNbno2g pXI61Brwv0YAWCvl9Ij9WE5J280gtJ3kkQc2azNsOA1FHQ98iLMcfFstjvbzySPA Q/ClWxiNjrtVjLhdONM0/XwXV0OjHRhs3jMhLLUq/zzhsSlAGBGNfISnCnLWhsQD GcgHKXrKlQzZlp+r0ApQmwJG0wg9ZqRdQZ+cfL2JSyIZJrqrol7DVekyCzsAAgIH /11g00L/Fo10wPfhTK36SiPTICreJc5w3f76kNt858uucmPiCqeqUscqXR//pFuN 1E5fAydUiR2OvL0GZNYsbhNhbGCyKCXgNnf18cdljV7IC9dmWyB39w3WyArMMJxj ofqWDCFhafVTKHNc6X3pRlmjRlN8l+Xma/i0y5aUyulCbOW+y7VC8j85T08AI4OA MC+ZcNDMoO6JPTZxObBc9nYPASXq74KTw6I7Ts72QEG5ft/iDzkLyLVl4VyGdFjP F+BaBokmsAFEjpmwTNNtPjaRBYixjcSQzzfHAc9nZuI4hwDC3M4QzN9CZpOITzsK bsDn4Naq/ZzIwb1/DbF3fVGIPwMFGDQ/z9Bz3mmMxxQFohECX8wAn1/QaK7peizY OIX9h5010OBgeQqaAKDTnqu1lJrjW5HDy7Bh8OHS34QUsYhVBCgRAgAVBQI/xHyZ Dh0CRWxHYW1hbCBidWcuAAoJEHPeaYzHFAWiojoAn1seFxiuKdd6Acp02WRuSS0Q PwgHAKChTHhjtuzIthEwsfu7BTbx7LdhBbkBDQQ8UrSXFAQAv3OVaKReKWz1Dr7N 1lMCMaf6syyw18eAWRwUA2TIHJJLi9Dh4cz1pvQec6jcuK37jnfMn0IK7xCx4Kh5 66Fv3QVcS1NPQbogfmjH6E1szfG7OgTjRrsJqDvr/KQB4C9CEqTJ4KkiPBqmHro7 EphCTpseaIwfsW1lN8oMP2PY/WcAAwUD/Ah4vjY66jR0jWohyntjWvUXJ2hns4/9 eqnpnUsLJNiCqnHxYC65KUjzBz6Pj043GZeMKB1NTCjO1gLiwZB6Fc0OOwNBNTUq sKY3fFTn4vBUos/hDyyM6AK+AA//uYYLsIv2Xb0gpT29YQANnujMYg3Qw2iwsDXQ 3oUaMjJS7AKNiFUEKBECABUFAj/IXqsOHQJCdWcgRWxHYW1hbC4ACgkQc95pjMcU BaJJVACfTzxZpMTum8hbatYNJT1LW6s/W7kAnjGB67AsK/ZNztT8YYGF4IvpNMtw iEYEGBECAAYFAjxStJcACgkQc95pjMcUBaLO4gCgy2i7oC1CzXynfTVSSJeHUhUR Z4YAn30gYAZ2SBnJbFacUKp1MVFF0KeeuQENBD/Ee1YQBACirST2KYveRvVMObAr JFD7yr09NPTUFQVfM2Txov/ujuuuelgppQezbVMev0u8AXbj9PBK8aSmxPUQAoNg Dd2o4aaKTP0H0C2NB3tvlBdVDWZ5S7B67+i+WehmjT0dZ7kqf6xnqRWGJdOiAMkD lrZoQsRov4DbSeHtKqtLXbrwdwAFEwP/QJ2ni5rydS+KCbChMdGB5QzS4iOBcYDz dZKU2txkZVDHUgcF90w7/cQv0AOAI+FfHlpQ0aYffCuW5QkM542J6ISrN78QWiO+ KP2jbsmLVHEYtYQ+efAvHX2Vgxnf5ccrmkaMeEJX1hTdTw6/J6zLdTLS7nPORFKH FKx71Q5f96CITwQYEQIADwUCP8R7VwIbDAUJAAFRgAAKCRBz3mmMxxQForwAAKCM kS7lIeQthoWkWMo9XoNI/UtNQwCeI2l+7zCTQnJcKWM45BJraPxu6MC4iwQ/xHuV AQQA6UDzUqOVS4Wr/19dCAokjyhVW5vdxQQ6/9Hqi0t40MFa2RpFHPrf8mOln4JI gbbLovtjCwWCAOM9R+rsHre7bxGUiNdvbPe4WfaUTNORivNHqQEEwb32HQlclyXf BP+Xv5KRRW4Nchr2Q2GZ5SVwnI6D7HsaolnqWbAIH7Q/gcUABimISQQYEQIACQUC P8R7lQIbAgAKCRBz3mmMxxQFotXxAKDN1cC52HRuCXYlDldt6M7ar2uhFwCeM9WW IdiwCcBp7/H54lrLqyROdEk= =UF8E -----END PGP PUBLIC KEY BLOCK-----
<flz@FreeBSD.org>
pub 1024D/5147DCF4 2004-12-04
Key fingerprint = D203 AF5F F31A 63E2 BFD5 742B 3311 246D 5147 DCF4
uid Florent Thoumie (FreeBSD committer address) <flz@FreeBSD.org>
uid Florent Thoumie (flz) <florent@thoumie.net>
uid Florent Thoumie (flz) <flz@xbsd.org>
uid [jpeg image of size 1796]
sub 2048g/15D930B9 2004-12-04
-----BEGIN PGP PUBLIC KEY BLOCK----- mQGiBEGyCSARBACWd64iJ+56C42einT4AIwy9qon61Lx+LO4BOMgeaQTGy9/fKq0 XqQmPddhp9awRtm0+QoeZQ00q2qyY6ufmSZJCr9iQg2a1b/fG/UKZSIKBguDuCCk O6acsAd3H0fmZRu8jAD+pMsJb9gO5T6YLIHK9p8uVPG0lRKzulTXm5zsEwCgkoi9 h+S/dIPXfX94thtJgVcUeLEEAJK9ZO2KFfGx+YRKDpbj7ocGgjqMlhkDFw13Lycq jopPipNwpey4ZKjJa2w2fmIbcqpUZW3EH1Ld8KBOt1bhGlI92uqvrssalNH82PGL cbiuvYMHXOfE05tOWD2JgxJE5tY0KtED4SDaF77RAcy4z9nFt4og4YknB/seOQZ/ 5oSKA/980pHAvnm3TFK7jQN+AIckWxOS3mXxvwHmvM/MzQEVUrFAPp0C/aCh4JJF 7Tvy54cRKEUJQpXuTeyBT0pMU0ataaESMfk4hM/WDhvlV0AXebah44uJfBAcHwJt f/d3c+1I5eRkWuN+ey+6FfBCooW4KvqVCnrWC/Kk16VqAyn9UrQrRmxvcmVudCBU aG91bWllIChmbHopIDxmbG9yZW50QHRob3VtaWUubmV0PoheBBMRAgAeBQJBsgpP AhsDBgsJCAcDAgMVAgMDFgIBAh4BAheAAAoJEDMRJG1RR9z0Y7sAmwT9GkO3Wcrl y9KcPtsQV4x6dvJhAJ0cGtclPmdOM34jMC7U5NQol2bV/rQkRmxvcmVudCBUaG91 bWllIChmbHopIDxmbHpAeGJzZC5vcmc+iF4EExECAB4FAkGyCSACGwMGCwkIBwMC AxUCAwMWAgECHgECF4AACgkQMxEkbVFH3PQ5igCgiRkJPRjrvitfZOrvLhx+oScK 3moAnifC/FHLFLr7hG/NlgLbF2yjN7Fv0cZXxlUBEAABAQAAAAAAAAAAAAAAAP/Y /+AAEEpGSUYAAQEAAAEAAQAA//4AbwoKQ1JFQVRPUjogWFYgVmVyc2lvbiAzLjEw YSBSZXY6IDEyLzI5Lzk0IChqcC1leHRlbnNpb24gNS4zLjMgKyBQTkcgcGF0Y2gg MS4yZCkgIFF1YWxpdHkgPSA3NSwgU21vb3RoaW5nID0gMAr/2wBDAAgGBgcGBQgH BwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5 PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCABgAGADASIAAhEBAxEB /8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUF BAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcY GRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqD hIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW 19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAEC AwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMi MoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaan qKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6 /9oADAMBAAIRAxEAPwD3Fic02nkAmmleagsSiikJ496AAnsOtN3Y7ivNfHnxL/sb dY6KFmuwcPcHlIiDggf3m/T8a8b1DxL4h1KYtdaheyZ6BpTgfQDgflTsGp9W5z1o zivlTT/E/iDS5EaDVL2IKwOwTttOD3XofxFe1+BviNB4hCWGokR6l/CyKQswx/46 evH5Z6UWA9CDetOqPqKkpANY9qRetOIzTQMGgCbuaKO5ooARq4z4ja3Jpegra28p juL4mIMOyfx49DggZ7ZJ7V2bV538Qrb7brWgwAH70mT+KZ/lQJnPaV4Ksrq1iuNR V5ZnAJTdgKOw4rbTwdoaqQunoAePvsf61qoViVRwAOBVtCPUUyTl5/BHh90I+wfj 5jf41y+reC4tMzf6W7L5RD7CfTuD7V6XK2AefyrKv4i9tIigncCOKAub3gvWJtb8 MwXV04e4BaN3wBuIJwSBxnBXPvXSVwHwwR49Kv42PCXRGMYwdozXfg0ikFJjnNLQ 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 YhEx5U7AKdGZ55po =hxwJ -----END PGP PUBLIC KEY BLOCK-----
<viny@FreeBSD.org>
pub 1024D/A0D22385 2003-12-27 Vincent Tougait (viny) <viny@FreeBSD.org>
Key fingerprint = 2126 0A3B 54E9 CA39 8069 6D80 39CC B9D2 A0D2 2385
sub 2048g/8C47ED80 2003-12-27
-----BEGIN PGP PUBLIC KEY BLOCK----- mQGiBD/tYx8RBAClyD7+FupG+ilw2ZnMDa0SJepx4KgIa0yl4y2w5pgydV84qhLK 83ybBnnnB55/EiXxYmS7QWL4krIt9FWTI/5bRqFeXtgI2J9O+xP9qtL0xpfR1pem 8/N70GNzMceTISrjcs1zhY8sb6F4xFjJuj3vKgRL63Y/0poBA7qz3/NMGwCgwTvT kRY4K23AmEcYj1DAt/jJeCMEAIOwKOgX7ystW85bpggiUo69PlAxXmzKng5dAB/l SWQOHgwEnljMPKxhExmyD6HeyVgSIn2/60r2/891R6QOG8sKqXpMTSkAL9m/FhxQ MIwpWvJ/e2qjVimT1qLovGmRfyMDt+jfwDRn+hPLTo0+58G/3Q2y0S2ww238/T2k C2EkA/4qQMRGz2nYFyIDqXl4duLQFT7kgUoLxBXf1Uf7T2nSMIiQL6bXwCSdlGAq J3mamLSkx/juRr8y5v+aoqaZkFALp1LmclWMuCraSrrkMNZ3tK2mp69kS3y88GvX X/a6UO6mYbD3zPOK9RJVw622k0H3MLm4miLGoTETdV3aqQg8AbQpVmluY2VudCBU b3VnYWl0ICh2aW55KSA8dmlueUBGcmVlQlNELm9yZz6IXgQTEQIAHgUCP+1jHwIb AwYLCQgHAwIDFQIDAxYCAQIeAQIXgAAKCRA5zLnSoNIjhRnxAJ9Oaf5CBWlhC+36 1o+XoxxyjmMKNgCgjFopxv6htPFj/altGLDO06zNvzO5Ag0EP+1jahAIAIlehRNK dLN6wKN8modGzPMnkYqP1lp6DHXFTzQRk46T79xGQwMMX7tKgh+Q8k9icO8cViWm /lsHAKyRZT+vC10Uiv+G1FMCKHPVWAwIRTiAQF9m22VTi+Hp2SA7fkWk1RYrXyQn wBNJve8+k+0kzrgNHVbsTuReqe9ih9znm0LDiNBRvLefGxQE/JWliBRrzwkxqw11 gSRPwsrY8y8+vGcpECfTo2cksSNdCifsdaaSeoK2YEkjiFq7mZABrNRnwbQoG3ks TPrIZJ6MR7mjmc94N6LH1SSvLtDrFF10K++x8FfwK54neRKqWcH4vGxNnFyu+9WJ hB/Ks5T8qSmhO/sAAwUH/AwiE6ch85CKy1+xhDelmqRgQ5LACJY40duYmGPSQ1Iu 6Z2i9bgk7jhSuwaKYcviIjHZs4Tl+2kYqPLw0ok8PCT4F7w5SWnahn2c4rZIVqsf h/TP8K8WPhvE4UhRYLPR4ZYWzR0M9NfGLdGkarqo5TJB40J+v1Ct3rXoe42CFdqK OO+5jywxgGDlALXFHEm7dqBVsyBu9ZC51wa47Lv5CW0jqkxp8fCEYULqclrS8Qt2 YKEZokeK9sEpWU5ZffMqML5buGGk2zS3utjcvQDAhhXoHtwWF1W4dECZDK0CYahG /Gi/OUIDVhhh0DlgHZ7Gc4dkHEelMR4HwLCt2NDUj0OISQQYEQIACQUCP+1jagIb DAAKCRA5zLnSoNIjhUtoAJ98EoAYWFYCGIM1Z671DVa8L2qTJACgqlCHhNJMxGw/ 83T8CL0qvuNdDpA= =yktl -----END PGP PUBLIC KEY BLOCK-----
<ume@FreeBSD.org>
pub 1024D/BF9071FE 2005-03-17
Key fingerprint = 1F00 0B9E 2164 70FC 6DC5 BF5F 04E9 F086 BF90 71FE
uid Hajimu UMEMOTO <ume@mahoroba.org>
uid Hajimu UMEMOTO <ume@FreeBSD.org>
uid Hajimu UMEMOTO <ume@jp.FreeBSD.org>
sub 2048g/748DB3B0 2005-03-17
-----BEGIN PGP PUBLIC KEY BLOCK----- mQGiBEI5K/4RBAD0LiHx/Tl4UyaX8yFUGjX1+PvATTJloNZGXl+jagSUQxCOp6Hv emDinSPskld/viupoAxjRImlkP905Y0Q6iDMne4s5fM/75lpeG9ztKRSgDQrQLTL HhXPXKNMtDV91yDqFEkwptS+0MaTMY0KrlR29RtGnpjoa347TU2BzU6TcwCgw+SL YdOWeSGs/7LKdUIyYlrldjkEAMqIQwnDl14vZBe9EOCrjSA4gHv6g2IQP1TRCpBu +/Fpi2+xcj117xO++uqMMzoi3aWwsqarao0/VSJ7ZD81by1H56Hnsp1d0r67neJy PKsyh2JfSQww9cxVkQjuZAjZNN1SLzDeA6xtSZrcmim+f0GIxlz3JFS9za/scs8x mGqzBADRF2My4V5HEMeScREj2hoquRv/uG727Nw+jftwiE+7TB7+JUwwyakAStNv x4+YEFAVSpKxyWgOeMqOWYd9bOSwJk40t9y1Gk6TTgV2C6sYwGHMSNOWYZbhYX7c 84cxm2PtQFIq7g4Q30IkfAhYFzEwKmPJ8eV1zO0uNIhE+SO9QbQgSGFqaW11IFVN RU1PVE8gPHVtZUBGcmVlQlNELm9yZz6IXgQTEQIAHgIbAwYLCQgHAwIDFQIDAxYC AQIeAQIXgAUCQjxiFQAKCRAE6fCGv5Bx/qe3AJ99w7Ipfxs4CF3/+eCf53HO3FuI +wCdF/xyvVjjNdAYXCMxCHtUF85bD++0IUhhamltdSBVTUVNT1RPIDx1bWVAbWFo b3JvYmEub3JnPohhBBMRAgAhAhsDBgsJCAcDAgMVAgMDFgIBAh4BAheABQJCPGIY AhkBAAoJEATp8Ia/kHH+3c4An3RGo6JduyjPTZFh0eCBezNgzxdnAJsGRRE6ERs8 nyORm56bvSgRTw9VKLQjSGFqaW11IFVNRU1PVE8gPHVtZUBqcC5GcmVlQlNELm9y Zz6IXgQTEQIAHgUCQjxgkwIbAwYLCQgHAwIDFQIDAxYCAQIeAQIXgAAKCRAE6fCG v5Bx/iTtAKC+8mS7jAYMz3QsCe4dJeIPaJcFGQCcDQITgNpJcUmBZ5u21Jotvp1X T/y5Ag0EQjksbhAIAP1+LeYSauTBi/ST3343W0lkqYr6HgZMNS7RtoCGFWcjfiYU 99ybRgr0XwH5yJrn6JASp27f/ve5cwt/7ERLZ7flcfFi53AekeuRjFDkThLx2N4I s29ZQZsYubdOKHapnMflnFE3PQfkB7Og1MoFxkp0kOAEP/rOyuLMc9CbUaWczxWo FS8bmZDJ5ZNzAQ2vQFu5ExxomOENApy3ZCm/Z6MU5YJ2trsP3dkYStyG+1pT4NsU R4+TIbQfFzwZjowiC5w8rM4FIV4FMQ+3YvIEVkT+M/93hLGakh5tQENsitj7JsrC VA2mkomV4Hnjj94YCxUiPu59kHgiKGgXbdnceX8AAwUIALF64I+guwCaHbjoRPVg HWRuU2NzuKN93xii+xyIpImf+S30aTbFy0D6ZTQRSCs34oVNMSkUzySVcVn9DTG5 +KVCHCOnGMH/Iv3dRWlHZ3HX6Gvr/cRyhDfWYDEec7KCDGT7Q87UbmTZ9cmOh+/h M4ND0NoYU6/EaaOqyRH4D8/LAeg0YsEpilClYWhlXT7VS7noOBf1JuB9Q0nOGycR DstkHWJf5om82lH5FzAuh9kEAduv8JdBdsMh3Zh4N80tCV7OyBQFWHV0UgjARSLY msEuelzzaFcfR2vIrmpYIElr6JzHGBiux0XK3Qk98kexGRdbrDFpaxbrsjs1/8m9 MVOISQQYEQIACQUCQjksbgIbDAAKCRAE6fCGv5Bx/mRWAKCAQQ67iDvQq08n+bHa QkK3EDOmqACfZmJe9AepCkPAUkvp0ketnOPBXAE= =QZ8N -----END PGP PUBLIC KEY BLOCK-----
<ups@FreeBSD.org>
pub 2048R/D684B04A 2004-10-06 Stephan Uphoff <ups@freebsd.org>
Key fingerprint = B5D2 04AE CA8F 7055 7474 3C85 F908 7F55 D684 B04A
uid Stephan Uphoff <ups@tree.com>
sub 2048R/A15F921B 2004-10-06
-----BEGIN PGP PUBLIC KEY BLOCK----- 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 =93PR -----END PGP PUBLIC KEY BLOCK-----
<nectar@FreeBSD.org>
pub 2048R/33C1627B 2001-07-05 Jacques A. Vidrine <nectar@celabo.org>
Key fingerprint = CB CE 7D A0 6E 01 DC 61 E5 91 0A BE 79 17 D3 82
uid Jacques A. Vidrine <jvidrine@verio.net>
uid Jacques A. Vidrine <n@nectar.com>
uid Jacques A. Vidrine <jacques@vidrine.cc>
uid Jacques A. Vidrine <nectar@FreeBSD.org>
uid Jacques A. Vidrine <n@nectar.cc>
pub 1024D/1606DB95 2001-07-05 Jacques A. Vidrine <nectar@celabo.org>
Key fingerprint = 46BC EA5B F70A CC81 5332 0832 8C32 8CFF 1606 DB95
uid Jacques A. Vidrine <jvidrine@verio.net>
uid Jacques A. Vidrine <n@nectar.com>
uid Jacques A. Vidrine <jacques@vidrine.cc>
uid Jacques A. Vidrine <nectar@FreeBSD.org>
uid Jacques A. Vidrine <n@nectar.cc>
sub 2048g/57EDEA6F 2001-07-05
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.2.1 (FreeBSD) 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 =lY5L -----END PGP PUBLIC KEY BLOCK-----
<adamw@FreeBSD.org>
pub 1024D/42C743FD 2002-10-12 Adam Weinberger <adam@vectors.cx>
Key fingerprint = A980 3F2E 80A8 9619 9D1C 82E8 A3C2 8CD9 42C7 43FD
sub 1024g/15D67628 2002-10-12
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.2.0 (FreeBSD) mQGiBD2neE8RBADgkTfNUPbm3AVnVPn/Ds5lDO89yKowW3ULixWqJ6Mti+7sIQ6y A4v5/dlUODTH0sdL4Cl3q36pCOP13IIq7o14h4YOjMhdMhsv43678VYK0PvR70hK /PxqIRV3lQsP2g8LihKLpRy6sHleIXu1hRLbIBI6/iJTmFcENQfivyHpBwCg31J6 6jew1OrTLlB76aWmmRJIlVkEAII7j0gAqV/zjR16sAsfiCSHSg9A8RGBmC67zUfK PxnrLiw0gqyrt77YnXvANGWDdIMHEZrcDBrb8ciSO8agBO2+/7mOVDVDU5I/SJRi rfJTQvFphcnOe7F3MaxdfA/vZE9woXq4JLXfnmcgUAey4iYB2QbV/+v1HBo6wys6 qyDXBACMsXFWZbDNDwUZBxGVS66bLwpZ/UhWqkrAyvK/7M/HQjkFTUUX2fSTPnWh AkcA82asPxQFTdbd7BOs4JnXUY4m+wfP3pzGaCbgL6WYumRjvmvkmeyZtFD+2wxL nu/F3oO9PC2f4mGa6E928BLy2bRCV75L0OMmbR5Fd0Z+95k3kLQhQWRhbSBXZWlu YmVyZ2VyIDxhZGFtQHZlY3RvcnMuY3g+iFkEExECABkFAj2neE8ECwcDAgMVAgMD FgIBAh4BAheAAAoJEKPCjNlCx0P9I7UAmQGWPEjqlXfxptWgb5WKskfl+rkkAJwI OSvOdiBFM7/EBBgn9pUQ/6PVUrkBDQQ9p3haEAQAzc17FQj9ePY4tW2+nWiQzj8I GVG+8fsVwFhDb4hFcpJxPiR3/J07tU4iyKek/qUiOQdW/dI30vm3rOSIUa3r9iaj OaJilRVDO3ErUCdcrJjGf+fTWZFa8t2TLwOooyV8tJ5IUYLwJ8s7/3OpwWh1pfCQ qxGACCiXeKQo0a9jxJcAAwUD/35x0sm6jV2OZaHxX/JteeLu1hJOE4hc8oRqiE93 4j8frz33jIsRFpKJ+H28LXtRmVXtVTdq3RuHll5JRCMG+IPLT3Tns/d0L90twpOj 4r+2BFIK6SYE6JYngf+J5clwve3vE7Y/b8NbSawEApvVxdrpsevGH0Sn5MSdiukm EkJviEYEGBECAAYFAj2neFoACgkQo8KM2ULHQ/1NRgCeJ6ZJYvc1oOUBdEKd7SoH rFA6N/8An3A9ukQlZm3lPMutMia2vnsb108k =0qTN -----END PGP PUBLIC KEY BLOCK-----
<nate@FreeBSD.org>
pub 1024D/C2AC6BA4 2002-01-28 Nate Williams (FreeBSD) <nate@FreeBSD.org>
Key fingerprint = 8EE8 5E72 8A94 51FA EA68 E001 FFF9 8AA9 C2AC 6BA4
sub 1024g/03EE46D2 2002-01-28
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.6 (FreeBSD) Comment: For info see http://www.gnupg.org mQGiBDxVl7cRBADbXnR4t/xRvvOSiPuGPnOGeamrphPbpPXsWD8Nm/pjfN3fhSfa 0gv3Y2n/IyLTg93gWZhWloMznkdg59Oj0oPSUxjgPauVw4q6l3JJIcurJNlp/Q7l DH0KLFJ8GuL6zxAz7Jcx1BpAIEu+G2SnI8+ZuGvq+YwaDxPFavfCqmVaBwCg/iPu OI+84/W54yZXvxfUN7dkDmED/3CxYLGeWqPqE8B8Eq8BlmgfP/FwaqXXb6xR7jsE XBaqNOIita6Iz49sYTYKYY2rMv6dMXjX1FM13wNW3rS73xkNvuJz0WU6sWl9Hw1e kjNjCN2oIqkqB5/1H14NMSOcUPLqERP7goFIK7OAJejUmm5Nc3KjG1S2G97xxjPe 39mlBAC0QFfa8J0Z6TORFa8Uqyx90pC/Y+I/S+y0vP/59ReP/PnQq/aUdDPLt5OZ edtpz7M4A2GtoVkWtedPRsw0hYK+Q3CtOMemQSnlfVjTZq5edL05Po09N89M/WMz hB9aRcdY7IN/btsQ0H12ZH+rEj+O4Adu+qEjsWePfW60Uj74GbQqTmF0ZSBXaWxs aWFtcyAoRnJlZUJTRCkgPG5hdGVARnJlZUJTRC5vcmc+iFcEExECABcFAjxVl7cF CwcKAwQDFQMCAxYCAQIXgAAKCRD/+YqpwqxrpMSwAKCVuyt4B1Pc1tAwRMEOmmZw 2nGIIQCgyRvB49snyBl86TikYv97ZifyLmK5AQ0EPFWXuRAEAIghycOZtElvBhfw r7TisjtVtzKhbF0Kj9cGg5brCC8/bJLK7PxNe48NSdlqMJ7algumsgYR37b/QBmq sOSEa2wXCnvCSD0ol+bdPn+Psb+hyi+AVNmVgdlJwuxHUHny0lWQnxeQLrt07SAw Ye/Nnc+arH6GXzBwXSpsQ2sOaMajAAMGA/9Hzjkv6HmJkPlKT2TNx33mbLaDk8xv vAJXxogxDcUqDDwqszWPcqShaW0IkMZo+grZfykZJjA0/8QUCaEUwhnYIwHMQRdA uNegCF/D2x4yzkF4d9gKYCCykDUrwvFDztIhGkinyzu6+xwe9qFcL/esIxnnonz7 Wx8/3e7pRvS2QIhGBBgRAgAGBQI8VZe5AAoJEP/5iqnCrGukuikAnAt8uA1EIv/5 WDCIpvNp0lgmwes9AJ4vD1R35+Db6UIw+R5EJaxNBY84zg== =xbGI -----END PGP PUBLIC KEY BLOCK-----
<wollman@FreeBSD.org>
pub 1024D/0B92FAEA 2000-01-20 Garrett Wollman <wollman@FreeBSD.org>
Key fingerprint = 4627 19AF 4649 31BF DE2E 3C66 3ECF 741B 0B92 FAEA
sub 1024g/90D5EBC2 2000-01-20
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.6 (FreeBSD) Comment: For info see http://www.gnupg.org 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 iq7OH/kskwCfeEvJINcMBk0UEdjpgO85woB6QKI= =stB+ -----END PGP PUBLIC KEY BLOCK-----
<joerg@FreeBSD.org>
pub 1024D/69A85873 2001-12-11 Joerg Wunsch <j@uriah.heep.sax.de>
Key fingerprint = 5E84 F980 C3CA FD4B B584 1070 F48C A81B 69A8 5873
pub 1024D/69A85873 2001-12-11 Joerg Wunsch <j@uriah.heep.sax.de>
uid Joerg Wunsch <joerg_wunsch@interface-systems.de>
uid Joerg Wunsch <joerg@FreeBSD.org>
uid Joerg Wunsch <j@ida.interface-business.de>
sub 1024g/21DC9924 2001-12-11
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.2.6 (FreeBSD) mQGiBDwWI2kRBADM4C4YlBiLozC/bZDedK12BMLyfnv9yOppj/doC1cOEaE+xZNQ 7/aDZfhi7FNQzt+ehh52DLihV91G7gOsACtUk3gLR8G+0q6U76dBY/gvAGzCYUu0 bJwlQCcPMysF4sNEwvsuct1fIVAHa+660X6Q+WI+eADIwZyN8wR1GrEqswCg3uGM xm85EYtxPFx7tyxfA8q/d+MD/i+SPmt9xEZ/KZOMbQVPw/vYmeWW4lVZGG2HLKmH J2FiAW4YjryoNqhpbbqlJigxf6staqgnQL4uuzBrr6v+OIjbljTHA7fs0WA4mtTX u7YcAKPXBTztw/O+f3tZz08Ep+AHJ3Q+pTbbRQZpikGGdOpjfLcEyAQBh1rNA3zl /MiLA/9IL7yfpyiA6cjX+MuUCqlqbPW2awQOCsmDBOcpXdOYC+MsBUhlT7IcFtQd BUxUiqdIKlRtIT4l4LnqzhL2HASv6Zzc06zGS+tlG6BlpCGlSxz8fp4asbTYdJnp d7lqme75jOUNjygal5lxJApincaLjv+4IaNUWCC5RjQuRsd3t7QwSm9lcmcgV3Vu c2NoIDxqb2VyZ193dW5zY2hAaW50ZXJmYWNlLXN5c3RlbXMuZGU+iF8EExECAB8C GwMCHgECF4AFAkGkelUHCwkIBwMCAQMVAgMDFgIBAAoJEPSMqBtpqFhz3+0An1WU SyLW5PtVk8AN2wZOZoIbdpWJAJ9UZjNCICVixY7lc+me/lfu7+nCsIhzBBARAgAz BQJB4lonBYMB4TOAJhpodHRwOi8vd3d3LmNhY2VydC5vcmcvaW5kZXgucGhwP2lk PTEwAAoJENK7DQFl0P1Yu+kAn27zpfl6Angb/DIsaV6srJ6SB/hmAJoDHPErifuG 2L4KGF3NcagZRoUl77QgSm9lcmcgV3Vuc2NoIDxqb2VyZ0BGcmVlQlNELm9yZz6I XwQTEQIAHwIbAwIeAQIXgAUCQaR6QgcLCQgHAwIBAxUCAwMWAgEACgkQ9IyoG2mo WHNIRwCgnTUFJ1krhK0XISLLossxl68fS0MAoJEjQcOZTKtIp8S4Dqo7/VJYUVKF iHMEEBECADMFAkHiWicFgwHhM4AmGmh0dHA6Ly93d3cuY2FjZXJ0Lm9yZy9pbmRl eC5waHA/aWQ9MTAACgkQ0rsNAWXQ/VjuVACeKGyJ5VTFr26fxsDgqrlfXjksoBMA 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 =SfCl -----END PGP PUBLIC KEY BLOCK-----
<bz@FreeBSD.org>
pub 1024D/0E4A7875 2000-02-04 Bjoern A. Zeeb <bz@FreeBSD.org>
Key fingerprint = 5E31 F886 E2EE BA7E 2AA5 DDD4 21C5 0916 0E4A 7875
uid Bjoern A. Zeeb <bz@zabbadoz.net>
uid Bjoern A. Zeeb <bzeeb@zabbadoz.net>
uid Bjoern A. Zeeb <bzeeb-lists@lists.zabbadoz.net>
sub 1024g/6139751B 2000-02-04
-----BEGIN PGP PUBLIC KEY BLOCK----- mQGiBDibVJ8RBACD4GHc4Ptsvx9fzbshr9KKwRDEhreLAYhVk31aaI2q1/k7X0Jy lSBsoi67YeoYpGFl9N26vReq1mHufTfbXjBzYkodcbTe5sZlP50HlHvXrnB458k9 xVsrqphq1C7oXPjoTsv+WS3zgR6kb74fjCCyIY3iKFnuBoNmhBwwGqr6SwCgspas IibQSFclUc3xF1gwrTPhHeUD/3BVc061ZP1lbJEB19j3CGdreqxF/2dR5EpeT/ck tc2vc9pNRVikzY7DDG3d8xJKqSIcGjhaEmDx+BXBp7a5BvTx8utOzaT8SkzWcCtm kGVYnfXb3AxppFJ0b8s4feUX3sGw6RJhuJ5o0mD+YsffGx7BGhAPUQg8opLqb8VA SzjgA/0desJLuSbrJ3emIAOtOHjXhcge+FHzjemM5e/b7W+to32EdsjDtmLU3Ozd OC5KRAKc+bIANb29FlCEerGIxnrZkI7InWP2lceCJVrvGVBS7ZSrPudtansupSde 9xVQEK9/fAbhRjZAFxPQld/h2niM9a7DKsk/5jj9iBeH37RxoLQgQmpvZXJuIEEu IFplZWIgPGJ6QHphYmJhZG96Lm5ldD6IVgQTEQIAFgUCOJtUnwQLCgQDAxUDAgMW AgECF4AACgkQIcUJFg5KeHWLNwCeMqLNZ9qGaTMevi8XD3aX29kF0f4An1vLf13t Tixyfdavnf7yR1Vzr8SciEYEEBECAAYFAjicHKsACgkQ8ZparKdkcvLXkACfaQVR 7DFM0uYOBRvPdXHEbioYysQAn1rF2T+2Kw9hNFIDecPc7DSY3KWUtCNCam9lcm4g QS4gWmVlYiA8YnplZWJAemFiYmFkb3oubmV0PohcBBMRAgAcBQJAmUDkAhsDBAsH AwIDFQIDAxYCAQIeAQIXgAAKCRAhxQkWDkp4dcldAJ9wYabXnkHowzLuDNhOE5Kc vKNZmQCffOLEN2vwaWXGUMvOopweeHTRvQu0L0Jqb2VybiBBLiBaZWViIDxiemVl Yi1saXN0c0BsaXN0cy56YWJiYWRvei5uZXQ+iFwEExECABwFAkCZQQYCGwMECwcD AgMVAgMDFgIBAh4BAheAAAoJECHFCRYOSnh1WSsAn2p0jqshOQAJRMV5k6KX0ZOS 24fHAJ0WNoHJc7NunSYF8psmgnq6vyQf7LQfQmpvZXJuIEEuIFplZWIgPGJ6QEZy ZWVCU0Qub3JnPohcBBMRAgAcBQJBBsEjAhsDBAsHAwIDFQIDAxYCAQIeAQIXgAAK CRAhxQkWDkp4dUzOAJ9sIESTxIqvcbNn7IJym3QS3yvi6wCgrgQlEbTAinEmw5vI YnAcZ2slxG65AQ0EOJti3BAEAN7GWKRvB1lJ3KsV+AiBLk5eCXlgV/NySuE849bZ 3KHi1aUjrmY6+I6Ux1dThT3vKXWpyswToxPwPjM0zUHfn1MTi+yxfZPaii8XEb0J xIFh954WKeqvw0OfdJPlQF5i3rRNVaCBmFGU76f5Iy7uADFvCXQ/dyGzZczIKv1j dfiLAAMGBAC0PA7svDq2S5GNjbUoZHvR06ukh1IRzkbfY0aX4OyhwOWzN0s3BazY 8K0PxynCv5fGMqWjm85vew0E4Qe7GYZrzupzX8M3eiyHRYzHSgfgLWyokRjgL6R/ lyDLyVm10VANoGID8V3tgseXC/coNhgyATwKXIETsXBq9oG0hGwSdIhGBBgRAgAG BQI4m2LcAAoJECHFCRYOSnh1U/EAn3CxttXeYdVQnnuIl5OWefQjeiQUAJwKaSgq Aw/UmkgmwF5uPEs7MyhC8g== =RhVh -----END PGP PUBLIC KEY BLOCK-----
<phantom@FreeBSD.org>
pub 1024D/9196B7D9 2002-01-28 Alexey Zelkin <phantom@FreeBSD.org>
Key fingerprint = 4465 F2A4 28C1 C2E4 BB95 1EA0 C70D 4964 9196 B7D9
sub 1024g/E590ABA4 2002-01-28
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.6 (FreeBSD) Comment: For info see http://www.gnupg.org mQGiBDxVhBMRBAD20EH9hS3S3gy73E1s//vYS1yo4GmmvzUzMTJo4HH6OMFT/MVn B51RXK5YlQ1cau4MWt2sifpWsG2hmmmPtOIaC6Mn4X8cEXmzy6qW5m+3RUdXB8rM pFSEVVEGhE9Sq+pTI1wB4VUJ5mhQtvWVJKsmuyf1YRa/zrr2zbZTIXg5EwCggloA GdcoFNm7p+cW56HJI1jZTpcD/jUyc4KLeimo+6Fn3z6NZh64GS+JmmCDe7mlcK2S XNPVq3tXXP3ZUKdv3faoMAgI1hSi82/32GINDkhiLPc0Q2tQZRDYKvyY/swgJSnV 1LV8jlpk2VsmsYOp9hW4SJLAQUaejpZe4CwHpOfJWbPkXE83nVygA0lnN89dfhIH JaB8A/9VottMl88+CLzqF3AzN72R5tFWnSFMWumaODis+UvLW0XAMP4AHhvux/FS Pl+m2YtilHhib6lfMYuGalN84H7VxOBxjc9L4qORV9jP4cWEYXpxx0DTmmtFfLae xGGTyYNM1RiqmScXMF28Am1I+WhnLTql8DVFWr8XoZUbususg7QjQWxleGV5IFpl bGtpbiA8cGhhbnRvbUBGcmVlQlNELm9yZz6IVwQTEQIAFwUCPFWEEwULBwoDBAMV AwIDFgIBAheAAAoJEMcNSWSRlrfZ9yQAn0bnLWBjo47dKrS82X1VvbuokkNXAJsH oANWk5PoOZzySJ7st8/IyaLBErkBDQQ8VYQXEAQA2cEOpYzl8L5y8TErdj1lfpHt gxm1QFETl8HvZGb/hTRWVhIcUhtOLA2uftk1oDHbnp+FPsJuFTxanCaCSQVdtMEE I1zK/Qy384FjS1B6L3yq84yTKn+Gp8SbMX3ZWT+dVmy88yJpmo/yFiiN9d2hYy1q fCUWhbAoWeD7sqSeGL8ABA0D/Au95rpaYunrMhu5nVdvZpTbNEIEDLOTS337GWy7 n1E9RG72ujCLFg8tbEmjEUFYfCZ/cW+6+2/Nj7zoGH9xXH6bRTfSKXojdKgNkUvL SLynpmFpUlFKc4fzSxx5EkCxH/zog9X2CQjMvxHmSD1/x+LeD0v/5WMsLvIdj6Op 0KmziEYEGBECAAYFAjxVhBcACgkQxw1JZJGWt9nbrQCcCvSJho7n1r4+1PGTlcep ABxplbsAn05jPrtZLjln7aKcavCp8FICJ2TY =GYHE -----END PGP PUBLIC KEY BLOCK-----
本书包含了为 “The FreeBSD Documentation Project” 工作的数百名志愿者的工作成果。 这些文字使用符合 DocBook DTD 的 SGML 撰写, 并使用开放源代码的 DSSSL 引擎, Jade 将其转化为许多其他的表现方式。 采用了 Norm Walsh 的 DSSSL 样式表, 并进行了一些追加的定制, 以指引 Jade 产生正确的结果。 Donald Knuth 的 TeX 排版语言, 以及 Leslie Lamport 的 LaTeX 或 Sebastian Rahtz 的 JadeTeX 宏集为本文档的印刷版本发挥了至关重要的作用。
| [1] |
现在理解一下i386的含义。 请注意 即使您的 FreeBSD 不是运行在一个 Intel 386 CPU, 都会定为i386。 他不是指您的处理器,而处理器的“体系结构”已经显示过去了。 |
| [2] |
启动脚本这些程序在FreeBSD在启动过程中运行。 它们的主要功能为其他每方面的运行作好准备, 和运行您的配置所用到的相关环境。 |
| [3] |
关于 FreeBSD 的控制台和键盘设备这些详细资料或使用技巧可在手册里找到: syscons(4)、atkbd(4)、vidcontrol(1) 和 kbdcontrol(1)。 我们不在这里详细介绍, 但是爱好者总会在手册里找到详细的答案。 |
| [4] |
有点不正确--少数的东西是不能中断的。 例如, 假如进程试图读取网络上另一计算机上的文件, 而那个的计算机会因为某些原因拿走了这个文件, 那这个进程从上述情况来看是 “不能中断”。 最终这个进程会超时,典型的两分钟。一出现超时进程将被杀死。 |
| [5] |
自动赋值算法是设置maxusers等于系统的内存总量,最小到32,最大到384。 |
| [6] |
Well, 除非您连接多个终端设备,这种情况我们在第 20 章讨论. |
| [7] |
可以使用的 UID/GID 的最大值是 4294967295, 但这可能会给采用上述假定的软件造成严重的问题。 |
| [8] |
选项-sadduser(8) 是。 当我们想要改变默认设置可以使用-v选项 |
| [9] |
在 FreeBSD 中标准的登录口令最长不能超过 128 个字符。 |
| [10] |
这个提示教您怎样选择一个安全易记的密钥短语, 请看 Diceware Passphrase 网站。 |
| [11] |
RAID 代表廉价磁盘容错(Redundant Array of Inexpensive Disks) 提供各种容错机制, 但后面这个术语可能会有些让人误解:它不提供冗余功能。 |
| [12] |
这也不总是正确。我们不可能永远支持 FreeBSD 的旧发行版, 尽管我们会在发布之后支持他们数年之久。 关于 FreeBSD 目前对于旧发行版的支持政策的完整描述, 请参见 http://www.FreeBSD.org/security/。 |