About Etext Wizard

EtextWizard

目录：

一、关于Etext Wizard:

  1. 软件开发目的及软件用途
  2. 软件的主要功能
  3. 软件的安装及卸载
  4. 软件的注册
  5. 软件的下载地址

二、“北极星工作室”的其他软件：

三、我的主页及联系方式：
一、关于Etext Wizard: Top
1.软件开发目的及软件用途 Top
相信各位在上网一段时间后，硬盘里一定积攒了大量的电子文本，如：
技巧集锦、教程、技术文章、编程指南、小说、散文、传记等等，这些
精彩文件平时大量占用你的硬盘空间，一到用的时候，怎么也找不到；
读起来也很费力，一部《三国》你至少要打开一百二十个文件；而且
第二天也找不到昨天读到那里了，你说急人不急人！
   终于有一天想把他们作成帮助文件，但是，面对某个目录下的几千个
文本文件，才发现所谓的“所见即所得”的帮助文件制作软件竟然要
一个又一个地“手工重复劳作”........
  我曾经用Help&Manual手工作了一个包含两千多条Delphi技巧的帮助文件，
历时两三周终于完成，可是...手抽筋，眼发晕，食欲不振.......
  有时，真的希望有人把我想要的文本全处理好再放到网上，可是...
  面对网上成兆亿的文本难道只有手工处理吗？
  由此，萌发了我的软件开发方向：电子文档处理。

“把繁重而又重复乏味的工作全部交给电脑去做吧！
    人的智慧在于告诉它应该怎么做！”
                                —xxx如是说。

2.软件的主要功能 Top

                功能
                 | 简介

                Txt->Help
                 | 文本文件转帮助文件，支持UNIX格式的TXT，自动添加标题、目录、索引。

                Txt->Html
                 | 文本文件转网页，自动处理URL&EMAIL

                Txt->Chm
                 | 文本文件转网页帮助文件，自动添加目录、索引、
                前页、后页等

                Html->Txt
                 | 网页文件转文本，转换完成比较干净彻底
                （可处理&nbsp;等），支持部分ASP文件。

                Html->Chm
                 | 网页文件转网页帮助文件，自动添加目录、索引。

                VBcode->Html
                 | VB源程序转为网页文件便于浏览。

                FileRenamer
                 | 批量文件改名，可预览结果，众多实用选项。

                Index Maker
                 | 对一个或多个目录下的所有或部分文件作索引，
                自动提取网页的<Title>作为标题，自动提取
                TXT第一行作为标题，多种输出格式。

                Dir Maker
                 | 批量目录建造。 *

                Title Editor
                 | 文本文件的标题编辑器及文件预览器。*

                Find&Replace
                 | 批量文件字符串查找替换器
                *

                Big5->GB

       注解：带*的项目尚未最终完成

3.软件的安装及卸载 Top

运行环境： MS win95;win98;win2000. win98以前的版本运行需要VB5.0
          的链接库文件MSVBVM50.DLL。

安装：

直接运行完全安装版即可（建议初次安装使用完全安装版）；
如果你以前安装过EtextWizard，直接下载新版本的主执行文件
EtextWizard.exe覆盖原来的即可。

卸载：

运行“控制面版”的“添加和删除程序”，找到“电子文档处理器”，
  选“卸载”，再依屏幕操作即可。

4.软件的注册 Top

本软件为“共享软件”，即“先试后买”的软件。

由于目前正处于测试阶段，故软件价格待定。

5.软件的下载地址:

本软件将会不定期更新版本，请留意！

http://dadao.net/pub/guohua99/softdown.htm

二、“北极星工作室”的其他软件： Top

TextVampire(网络即时贴) v1.0：Top
浏览文本或网页时，随时把你喜欢的文字很方便地存成.Txt文件。
你要做的只是选好文本，再按一下CTRL-C，这时，点击“网络即时贴”的
粘贴并生成文本文件”钮，TextVampire会自动截取所选文本的第一行（非空）
作为文件名保存起来，方便你将来收集整理、查找；同时也简化了你的击键次数。

http://dadao.net/pub/guohua99/softdown.htm

三、我的主页及联系方式： Top

我的主要站点：

http://dadao.net/pub/guohua99/
 (北极星书库)

(虚拟域名：http://fengguoguohua.yeah.net/)

http://fengguohua.myrice.com/
 (北极星软件库)

http://go.163.com/~guohua99/(电子文档处理器)

镜像站点：

http://members.xoom.com/fengguohua/

http://guohua99.363.net/

eMail:

fengguohua@hotmail.com

警告：Top

对重要文件请先作好备份，以免造成不必要的损失；
用户试用此软件的同时由用户个人承担试用此软件的一切风险，如用户不接受
此项要求请马上把本程序从你的硬盘删除； TXT转HELP结束后，程序会自动删除
已处理过的目录下的所有RTF文件，请在运行前
检查该目录下是否有重要的RTF文件，请作好备份。
请不要使用本软件制作非法电子出版物，否则一切后果由制作人自行承担，与本软件作者无关。
请不要修改本软件的版权信息（包括随软件发布的一切文档），否则作者将保留追究其法律责任的权利。
在不修改作者版权信息及保证软件完整性的前提下，任何个人或组织可随意发布或试用本软件的免费共享版，
但不得对本软件做任何逆向工程（指反汇编、反编译，公布注册码、散发正式版等）。
本文档中所指“程序”或“本程序”均指EtextWizard(中文名：电子文档处理器)。

注：MS,Windows Help(hcw.exe,hcrtf.exe),Html Help(hhw.exe,hhc.exe)的版权均归美国微软公司所有。

All Rights Reserved, Fengguohua of North Star, 2000-05-03

Top


Linux 操作系统专题

 返回原主页

Linux 中的其它技巧

安装“红帽子”
 一步一步安装Turbo Linux
 如何在 Linux 下拨号上 Internet 网
 Linux下的VC集成开发环境
 Linux DOS2Linux mini-HOWTO
 Linux运行环境
 跟我学用Linux命令
 在RedHat 5.0中配置News Server
 在xteam linux下上网冲浪 		在linux下设置WWW Server
 用linux下的php3发E-MAIL
 PHP4.03在linux下的安装
 inittab的重要意义
 用比较法学Linux基本命令
 从NT引导程序来启动LINUX
 在Linux机器上设置pop3代理
 实现LINUX与WINDOWS95文件共享
 如何在Linux上建立DNS服务器
 用FIPS为LINUX分区

本栏目内容持续增加中……

Linux HowTo 中译版
写一份 HOWTO
 4Linux HOWTO 中文索引：版权声明
 Linux HOWTO 中文索引：译注：关於 HOWTO 中译版
 如何在 Linux 下安装及使用 CD-ROM：概述
 如何在 Linux 下安装及使用 CD-ROM：CD-ROM 技术
 如何在 Linux 下安装及使用 CD-ROM：支援的硬体机种
 如何在 Linux 下安装及使用 CD-ROM：安装
 如何在 Linux 下安装及使用 CD-ROM：应用
 如何在 Linux 下安装及使用 CD-ROM：常见问题与解答
 Linux Chinese HOWTO 中文版：前言
 Linux Chinese HOWTO 中文版：在 Linux 上使用中文的困难
 Linux Chinese HOWTO 中文版：如何取得中文软体
 Linux Chinese HOWTO 中文版：显示及输入中文
 Linux Chinese HOWTO 中文版：中文 X Window
 Linux Chinese HOWTO 中文版：中文列印
 Linux Chinese HOWTO 中文版：中文排版软体
 Linux Chinese HOWTO 中文版：有用的中文软体
 Linux Chinese HOWTO 中文版：其它软体的中文相关问题
 Linux Chinese HOWTO 中文版：Linux 的中文化
 Linux Chinese HOWTO 中文版：常见问题解答
 Linux Chinese HOWTO 中文版：附录 - FTP.IFCSS.ORG 的中文软体列表
 DNS HOWTO 中译版：前言
 DNS HOWTO 中译版：简介
 DNS HOWTO 中译版：暂存专用名称伺服器
 DNS HOWTO 中译版：一个简单的领域
 DNS HOWTO 中译版：真实领域的例子
 DNS HOWTO 中译版：维护工作
 DNS HOWTO 中译版：Bind version 8
 DNS HOWTO 中译版：拨接连线的自动设定
 DNS HOWTO 中译版：常见问题解答
 DNS HOWTO 中译版：如何成为一个大型的 DNS 管理者
 The Linux GCC HOWTO中译版V0.1
 The Linux GCC HOWTO中译版V0.1：生火上路(Preliminaries)!
 The Linux GCC HOWTO中译版V0.1：上哪抓这些东东？
 The Linux GCC HOWTO中译版V0.1：GCC的安装(installation)与启用(setup)
 The Linux GCC HOWTO中译版V0.1：移植(Porting)与编译(Compiling)程式
 The Linux GCC HOWTO中译版V0.1：Debugging and Profiling
 The Linux GCC HOWTO中译版V0.1：连结(Linking)
 The Linux GCC HOWTO中译版V0.1：动态载入
 The Linux GCC HOWTO中译版V0.1：与发展人士联络
 The Linux GCC HOWTO中译版V0.1：结语
 The Linux GCC HOWTO中译版V0.1：索引
 Glibc 2 HOWTO 中文版：简介
 Glibc 2 HOWTO 中文版：选择你的安装方式
 Glibc 2 HOWTO 中文版：取得 library
 Glibc 2 HOWTO 中文版：安装成测试用的 library
 Glibc 2 HOWTO 中文版：安装成主要 library
 Glibc 2 HOWTO 中文版：使用非主要 libc 编译程式
 Glibc 2 HOWTO 中文版：编译 C++ 程式
 Glibc 2 HOWTO 中文版：报告臭虫
 Glibc 2 HOWTO 中文版：Specs 档□例
 Glibc 2 HOWTO 中文版：杂项
 Linux Information Sheet 中译版：Linux 的简介
 Linux Information Sheet 中译版：Linux 的特性
 Linux Information Sheet 中译版：Hardware 需求
 Linux Information Sheet 中译版：移植程式及其它软体的不完整列表
 Linux Information Sheet 中译版：谁使用 Linux？
 Linux Information Sheet 中译版：开始
 Java CGI HOWTO 中译版：简介
 Java CGI HOWTO 中译版：设定伺服器以执行 Java CGI 程式 (解释篇)
 Java CGI HOWTO 中译版：设定伺服器以执行 Java CGI 程式 (简略篇)
 Java CGI HOWTO 中译版：执行一个 Java CGI 程式
 Java CGI HOWTO 中译版：使用 Java CGI 类别
 Java CGI HOWTO 中译版：未来的计划
 Java CGI HOWTO 中译版：版本修改记录
 Kernel HOWTO 中译版：简介
 Kernel HOWTO 中译版：重要问题与解答
 Kernel HOWTO 中译版：如何真正进行核心的配置？
 Kernel HOWTO 中译版：编译核心
 Kernel HOWTO 中译版：修补核心
 Kernel HOWTO 中译版：附加的套件
 Kernel HOWTO 中译版：一些陷阱
 Kernel HOWTO 中译版
 Linux Meta-FAQ 中译版：简介
 Linux Meta-FAQ 中译版
 中文版 The Linux News HOWTO：介绍
 PPP HOWTO 中译版
 PPP HOWTO 中译版：简介
 PPP HOWTO 中译版：IP 号码
 PPP HOWTO 中译版：这份文件的目的
 PPP HOWTO 中译版4,5
 PPP HOWTO 中译版：将 PPP 设定为客户端的工作概要
 PPP HOWTO 中译版：7,8,9
 PPP HOWTO 中译版：10,11,12
 PPP HOWTO 中译版：如果你的 PPP 伺服器使用 PAP 认证
 PPP HOWTO 中译版：以手动方式建立 PPP 连结
 PPP HOWTO 中译版：使你的连结自动化 - 创造连结指令稿
 PPP HOWTO 中译版：测试你的连线指令稿
 PPP HOWTO 中译版：17,18,19
 PPP HOWTO 中译版：20,21,22
 PPP HOWTO 中译版：建立连结之後 - etc ppp ip-up 指令稿
 PPP HOWTO 中译版：24,25,26,27
 RPM HOWTO (RPM at Idle)：Introduction
 RPM HOWTO (RPM at Idle)：Overview
 RPM HOWTO (RPM at Idle)：3,4,5
 RPM HOWTO (RPM at Idle)：Building RPMs
 RPM HOWTO (RPM at Idle)： Multi-architectural RPM Building
 Linux Serial HOWTO 中译版：简介
 Linux Serial HOWTO 中译版：已经支援的串列硬体
 Linux Serial HOWTO 中译版：串列埠的名称是什麽
 Linux Serial HOWTO 中译版：你应知道的有趣程式
 Linux Serial HOWTO 中译版：我怎麽用数据机拨号出去
 Linux Serial HOWTO 中译版：我要怎麽样用数据机以 getty_ps 拨入及拨出
 Linux Serial HOWTO 中译版：我怎麽设定终端机连线到我的 PC 上
 Linux Serial HOWTO 中译版：8,9,10
 14:00 Linux Serial HOWTO 中译版：11,12
 Linux Serial HOWTO 中译版：13,14
 SMB HOWTO：介绍
 SMB HOWTO：2,3,4
 SMB HOWTO：5,6,7,8,9,10
 The Linux Sound HOWTO -- Linux 音效指引
 The Linux Sound HOWTO -- Linux 音效指引：2,3
 The Linux Sound HOWTO -- Linux 音效指引：安装
 The Linux Sound HOWTO -- Linux 音效指引：支援音效的应用软体及常见问题与解答
 The Linux Sound Playing HOWTO 中译版 ：介绍
 The Linux Sound Playing HOWTO 中译版：播放各种声音格式
 The Linux Sound Playing HOWTO 中译版：其他实用处理声音的应用工具
 中文 UPS Howto：简介
 中文 UPS Howto：请注意已过时的资讯
 中文 UPS Howto：聪明的与单调的 UPS
 中文 UPS Howto：软体
 中文 UPS Howto ：自己动手指南
 Linux XFree86 HOWTO 中译版：介绍
 Linux XFree86 HOWTO 中译版：硬体需求
 Linux XFree86 HOWTO 中译版：安装 XFree86
 Linux XFree86 HOWTO 中译版：设定 XFree86
 Linux XFree86 HOWTO 中译版：执行 XFree86

最佳浏览效果：IE4.0以上版本，800x600分辩率
感谢 重庆网虫基地、思茅之窗 给予主页空间


Get Update News

Update Link:
http://dadao.net/pub/guohua99/softdown.htm

程序会经常更新，请登陆网站以得到最新版本。如有任何意见和建议也请给我发Email。

我的Email地址： fengguohua@hotmail.com。


Goto EtextWizard's Homepage

My Homepage:
http://dadao.net/pub/guohua99/

这里有许多已经经过我的“电子文档处理器”处理过的Windows帮助文件或Windows HtmlHelp格式的小说、传记等作为范本供大家参考。


New Page 1

标题： 安装“红帽子”
姓名 ：
Email：
地址 ：
转摘 ：PC学堂--由肇庆怀集县晨光工作室sokoo制作

返回

第一部分

在“瘟酒吧”（Windows 98）又一次以蓝屏来作回答时，我们决定安装上正在流行的Linux一试。
Linux有几种版本,我们手中的是Red Hat Linux 5.1版,即所谓"红帽子"。但颇为令我们沮丧的是我们找遍了手里所有的报纸刊物（笔者之一是个购书狂，拥有绝大多数市面上发行的计算机报刊）。发现竟没有一篇详细介绍红帽版安装的文章，到是有不下三四篇介绍Slackware Linux安装的，也许是红帽版安起来太容易了？真是#￥%$%^@!$(顺便说一句，那几篇文章看一篇就够了，因为全像一个模子刻出来的，#@$%%#@!)。没有参考物，没有办法只有自己摸索了。经过一段时间的试验，总算大体弄清楚了，写在这里给与我们有同样苦恼的朋友。
我们在两台机器上安装了Linux，配置分别如下：
机器A：Pentium133 CPU，430VX主板，32MEDO内存，S3 765显卡，帝盟ISA声卡，火球EX6.4G硬盘，三洋6X光驱，飞利浦14寸显示器。
机器B：AMD K6-2-300 CPU，VIA MVP3主板，64MSDRAM内存，RIVA 128显卡，AU8820PCI声卡，火球EL5.1G硬盘，NEC 24X光驱，三星15寸显示器。
这两个配置我们相信是与大多数朋友的机器配置相去不远的（当然，那块新升级的EX硬盘不算在内）。
Pentium 133上安装的是新升级的空硬盘，为了稳妥起见，我们先在这台机器上进行了安装（另一个原因是这台机器上不管安装什么系统从没发生过兼容性问题，比较可靠）。
安装遇到的第一个问题是如何启动安装程序！？我们手中的光盘是自启动的，但这台机器的主板较老，不支持从光盘启动，光盘dosutils目录下有一个叫autoboot的批处理文件，在纯DOS下运行它也能启动安装程序，但我们运行后却不知什么原因不能正常启动，只好另想他法。
第三种方法就是制作启动盘，在\dosutils\images目录下有一个文件boot.img，用dosutils\rawrite.exe程序读出写入软盘即可，使用中，我们发现该映像文件也完全可以用HD-Copy来读取。
用刚做好的启动盘启动计算机，会出现一个帮助屏幕和一个boot:提示符，此时一般按Enter即可。安装程序会自动启动，出现一个欢迎屏幕，按Enter确认。此时，会出现若干个菜单，要求你确认使用的语言、键盘类型、是否有Pcmcia卡等等，除非有特殊情况，否则选默认项即可。
接下来，系统要求你选择从何处安装，对绝大多数用户来说，选择第一项cdrom即可。紧接着，系统向你询问是升级还是安装，此刻，我们选择安装（当然！）。
下面开始的就是最重要的部分，为Linux创建分区。有两种方法，一是和其他版本一样，使用fdisk程序进行分区，但Red Hat Linux还提供了一种简单一些的方法，使用Disk Druid程序。
选择Disk Druid项，屏幕分成了三个部分，中间是当前分区的硬盘，上面是该盘的分区表，下面是Add、Edit、Delete、Ok、Back五个按钮，按下Add按钮，为Linux创建分区。
使用Linux，要创建以下几个分区：
/（root）：根分区，用于存放Linux的系统文件，在没有/usr分区时也用来存放应用程序。有/usr分区时只要50-100M足矣，否则越大越好。
（swap）：交换分区，与Windows的交换文件属同一事物，大小在内存大小至127M之间，但实际上Linux的内存管理比Windows高明太多，用不了那么多的空间就能运行的很好，不像Windows 98那样即便装了128M内存有时还要疯狂读盘。
/usr、/home：分别用于存放应用程序和用户自己的数据，根据情况，越大越好。
/boot：用于存放Linux的内核，10M足矣。
还有一些分区，就对个人用户来说，用处不大了。
这些分区中，只有root、swap两个分区对于安装Linux来说是必须的，我们决定开辟一个1G的root分区和一个100M的swap分区。
点击Add按钮，出现一个对话框，在Mount Point项内打入“/”，表示是根分区，在Size (Megs)项内以兆为单位输入分区的大小，在Growable?选项里选择与否表示该大小是否是确切大小，若选中则以该大小为最小大小，空间会随需要膨胀直到充满整个硬盘。Type项表示该分区的类型，我们选择Linux Native，表示是Linux的主分区。然后就可以按Add，创建该分区，
创建swap分区的方法一样，只是在Mount Point内不要输入任何东西，将Type选择为Linux Swap，表示是交换分区。
分区时要注意，如果你希望用硬盘启动系统，则root分区（再没有boot分区时）或boot分区一定要分在主盘的1023柱面即前504兆以内。原因后面再讲。
分区完毕，若有错误还可以修改，否则按下Ok将分区表写入硬盘。
分区的另一种较复杂但也较灵活的方法是使用fdisk程序（注意，不是DOS下那个）。因为这在每个Linux版本都一样，这里就不提了，有兴趣可去读有关书籍。
接下来……是格式化！对了，与DOS下一样，分区后就要格式化，首先是格式化swap分区，然后是其他分区，直到所有新建分区初始化完毕，初始化时刻选择是否查找坏块，就如同format是否带/q参数一样。
初始化分区后，下一件该做的事就是安装组件,Linux的完全安装大约需要700多兆,但在日常的应用中只需要其中的一小部分就可以了。可以根据自己的需要取舍，如果为了省事则可以使用默认的选项。在屏幕的中央有一个“Select individual packages”选项，选中它，可以对每个具体组件的内容进行取舍，就像Windows自定义安装时的详细内容按钮一样。菜单的最后是一个“Everything”项，选中它就意味着安装全部组件，不必一个一个去选中了。选好组件后，安装程序会检查组件的相关性，如果有某一个组件是运行某一个已选组件时所需要的，它就会为你指出，此时你只要按回车，该组件就会自动加入到选中组件中去。
组件选好了，此时安装程序就会自动格式化分区并安装选中的组件，这个过程时间较长，但和Windows的漫长等待比起来还是很快的，只是要注意如果光盘上有什么毛病，安装可能会自动终止，并且下次安装时只能再从头开始。
安装好了组件，下一步是安装各硬件设备，这一过程就好似Windows的监测即插即用设备，只是一切都要你自己动手，还记得使用DOS和Windows 3.X的时代么？那么来吧！
首先是安装鼠标，一般选择默认的微软鼠标即可。
如果你在安装组件时，选择了安装Xwindows（一种Linux下的图形界面，就仿佛是Linux下的Windows 3.X），那么现在就会要求你配置Xwindows。首先，安装程序会监测你的显示卡，如果不能自动识别（大多数情况下都是如此），它会列出所有Linux所支持的显示卡，你在其中选择你的显卡型号即可，唯一要注意的是不要选择一个和你的显示卡“相似”的显卡，否则可能会出问题。接下来安装程序会要求你输入显示器的型号，在这里能见到大多数市场上可见的显示器（当然，显示器的牌子比起显卡来可是少的多了）。如果没有，你可以在“Custom.”项里输入显示器参数（不过我看不大用的上）。然后安装程序会检测你的显示设备能力，你也可以不让它检测而自己输入显示内存大小之类的数据。
最后，它将会询问你在使用Xwindows时要使用的显示模式，建议不要使用它的推荐模式，我们安装时它推荐了一个1024×768，字小得几乎看不清。
接下去是配置网络，这部分项目较多，篇幅所限略过，不过此处提示较详细，有网络使用经验而英文又不至太糟的人看懂没有问题。
接下来是调整系统时间，在列秒的项目中选择你所在的时区，不过我们似乎没有找到北京时间，不要紧，选择“GMT+8”（格林尼治标准时+8）就行了。上方有一个Hardware clock set to GMT选项，如果你选择了这个选项，那么Linux启动时，系统会自动把你的CMOS时间改成与你所选择的时间一致，选不选由你。
接下来要让你选择启动时所要启动的Services，一般选择默认项即可。
接下来是配置打印机，与配置显示设备的过程有些类似，英文水平说的过去就能看懂，这里我们就不多说了，以免有骗稿费之嫌疑（啊，又被他骗走了几十个字的稿费，我听见有人说）。
接下来是一件十分关键的事，你要输入root口令，这是你在Linux系统中最重要的口令，是你进行系统管理与维护时要使用的口令，一些重要的操作必须由root用户来进行，将来进行系统升级也必须由root用户来进行，如果你知道一些较老的词汇的话，root用户也称之为超级用户。
口令（password）不得少于六个字符，要输入两次，两次必须一致，输入的字符不会显示在屏幕上，一定要记好，否则，嘿嘿，你可就惨了。
下面系统要创建一张启动软盘（不是开始安装的那一张），这不是必须的，但你一定要至少建立一张，以备在必须的时候用软盘来启动系统进行修复。注意不同内核版本的启动盘不能混用。
总算到了最后一步，在结束安装前，还要创建LILO，LILO是一个启动管理程序，简单的说就是类似System Commander的东西。如果你希望从硬盘上启动Linux，你就必须安装LILO，否则你就只能用软盘来启动Linux，安装LILO 时，root分区或boot分区必须在1023柱面之下，这是因为LILO要使用BIOS的中断来读取硬盘，而早期BIOS不支持读取1023柱面以后的内容，为了保持兼容，现有的Linux也不支持LILO读取1023柱面以后。如果你的分区不符合这一要求，那么LILO将不会创建。
安装程序将会问你将LILO安装在那个位置，一般安装在MBR，即主引导扇区，如果你使用了System Commander之类的启动管理程序，也可将LILO安装在root分区的第一个扇区，但要注意如果你没有其他启动管理程序，就不要建LILO安装在MBR之外的地方，否则不能实现与其它系统的多启动。现在安装程序将要求你输入为LILO添加的项目，大多数机器上什么也不用输入就行。
接着，屏幕上将显示出所有能启动的分区（即非扩展分区），你可以选择哪几个分区是为LILO管理的启动分区，与DOS不同，Linux是支持有多个可启动分区（即DOS的活动分区）的。右侧有一栏叫“Default”，它下面的“*”表示起动机器时的默认启动分区。
因为我们是在空盘上安装的，所以只要选择root分区为启动分区和默认分区就行了。
至此安装完成。下面我们将介绍第一次使用时所要进行的基本设置。

第二部分
安装完成后，安装+程序将自动重启动你的系统，这一次，自检完成后，你将在屏幕上看到一个“boot：”，在后面打入“linux”就可以启动Linux，因为此时的默认启动系统是Linux，所以什么也不按，几秒钟后也会自动启动Linux。
启动系统后，将要求你登录，此时只有一个根用户“root”，在“login后面打入‘root’”，系统将要你输入“root”密码，在“password”后面打入（还没忘吧？）。出现一个“#”提示符，我们成功进入Linux了！
进入系统的第一件事是创建一个属于你自己的账号。“咦，root不行吗？”，当然行，可是root是级别最高的用户，它的权力不受限制，一次误操作完全可能摧毁整个系统，你不觉得天天以root登录有点玩悬吗？所以我们要创建一个普通用户以供日常工作所用。
在提示符后面打入useradd命令在后面打入新的用户名（注意区分大小写！这可和DOS下不一样），回车后就有了一个新用户。
但此时还没有口令，不能登录。不要紧，打入passwd命令，后面跟着新创建的用户名，系统将要求你输入新口令，打两次，新口令就有了！
按“Ctrl+D”注销root，以新用户名登录，发现这次提示符变成了“$”，登录成功了。
按“Ctrl+Alt+Del”重启系统（与DOS下一样），用DOS软盘进入DOS，安装DOS与Windows，这不用我讲了（如果不顺利，可以去掉root分区的活动标志，另外，无论Linux或DOS对分区的类型与数量都有一定的限制，如果不能正常分区，可用分区工具多作些调整）。
安好后，发现由于LILO中没有Windows的信息，所以不能双启动，怎么办呢？
一般情况下，需要启动Linux（如果安装的是Windows 98，LILO有可能被破坏，需要用软盘启动），然后编辑/ect/lilo.inf文件，再用lilo命令写入硬盘，这在一些文章中已有介绍，但需要对Linux命令有较多的了解才能应用自如，并非三言两语能够说清，我们当初就曾花了一个多小时看了三四篇文章却也没能装上（可能是我们无能，但那文章写的……不说也罢！）。
但对于Red Hat Linux,却有一个简单的办法，再次启动安装程序，但这次选择升级（UPDATE），跳过所有项目，直到LILO的安装，将root分区和DOS的主分区都设定为可启动分区，默认启动分区任选，写入再启动，就一切按你的想法实现了（有时可能需要用到fdisk分区程序，此时可以打入“m”命令看它的帮助）。
在那台AMD K6-2 300上安装Linux较复杂一些，因为那台机器的硬盘上已有内容。我们的对策是使用硬盘分区工具Partition Magic（此工具在许多配套光盘上都有，很多报刊上也都有使用介绍，这里不再详述），从原有分区中划出总计约1G的空间，并将其移至硬盘开头，再按以上所述的方法安装即可。
如果你希望让你的Linux出声，你还需要配置声卡（不过这不是必须的），以root的身份登录，打入sndconfig，然后按照屏幕上的提示进行即可。但令我们失望的是，我们的两块声卡都没被认出来，它是不是只认创通的ISA声卡，还希望明白人给在下指点迷津。
Linux是一个大有前途的操作系统，朋友们如有条件应该装上一个试一试，的确有所值得。就我们在使用中的感觉，虽然字符的界面不很好用，提示信息也不亲切，但比Windows强大可靠的多，更何况还有图形的Xwindows呢。而且他对系统的要求比微软的怪物们低得多，在这两台机器上都跑得很好，而对Windows来说，且不说那台Pentium 133，就是那台K6-2，1G的硬盘分区够你挠头了。
上网的朋友可以去以下几个地方去看看，这都是国内的Linux网站和俱乐部:
1.http://linux.sunnet.org/njlug
NJLUG南京Linux俱乐部
2.http://linuxclub.mnf.nu/
上海Linux俱乐部 主要栏目有“新手起步”、“开发园地”、“技术资料”、“软件介绍”、“邮件列表”等。尤其是，这里搜集了较为完全的中文资料，如中文HOW TO等。
3.http://www.netease.com/~zuolin/
“土人小屋”的个人主页，有一些关于Linux的中文文章，很不错，还有很多其他资源。
还可以到这个地方(http://fanzhang.yeah.net)去，这是我们一个好友的主页，他搜集了大量的Linux的有关资料在上面，你不想听听Linux之父Linus Torvalds,自己念这个词吗？去看看吧！
最后，为了报答看着我们在此大骗稿费的朋友的耐心，告诉你：启动你的Linux，打入startx，就可以启动你的Xwindows，在Xwindows中附带了大量的小游戏，其中有一个叫“xbill”的，大致意思就如同常见的桌面游戏“打苍蝇”、“捻蟑螂”一类，但这次的苍蝇变成了高举Windows的比尔·盖茨，你要阻止他将Windows装进一台又一台的计算机。看着一个又一个的小比尔·盖茨在我的鼠标下灰飞烟灭，被不断崩溃的“瘟酒吧”激起的万丈怒火也削减了许多。痛快，解气！

返回


New Page 1

标题： ■ 写一份 HOWTO
姓名 ：Greg Hankins
Email：
地址 ：
转摘 ： http://member.netease.com/

返回

4. 写一份 HOWTO
如果你有兴趣写一份 HOWTO 或 mini-HOWTO，请先与我联络!!! 我的地址是 gregh@sunsite.unc.edu.

这里有一些当你写一份 HOWTO 或 mini-HOWTO 时应遵守的准则。

尝试使用有意义的结构与组织，并写得清楚些。请记住许多 HOWTOs 的读者并非以英文作为母语的。
如果你在写一份 HOWTO，你必须 使用 SGML-Tools 工具，可从 http://www.xs4all.nl/~cg/sgmltools/取得。这个工具可以让我们经由单一原始文件产生 LaTeX (DVI 及 PostScript) 文件，纯文字，以及 HTML 格式，而且它是特别设计用来写 HOWTOs 的。这也使得所有的 HOWTOs 文件看起来具有一致的形式。你事先将文件格式化并检视 PostScript，纯文字及 HTML 的输出是十分重要的。
如果你在写一份 mini-HOWTO，你可以使用 SGML (如上所述) 或是 HTML 格式。如果你使用 SGML 格式，它会和其它 HOWTOs 一起被放入 LDP 的书中出版。
请确定所有的资讯都是正确的。不需我强调这点的重要性。如果有所怀疑，不能确定，请在文中清楚的注明你仅仅是在猜测而已。
请确定你包含了最新版本的软体。同时，确定包含了如何取得软体的全部资讯(FTP 站名及全部的路径名称)，目前的版本以及发行日期等。
如果合适的话，在最後面包含一节「常见问题解答(FAQ)」。许多的 HOWTO 文件需要「FAQ」或「常见问题」一节来涵盖内文所未包含的资讯。
使用其它的 HOWTOs 或 mini-HOWTOs 做为□本。SGML 的原始档也可以从 Linux FTP 站取得。除此之外，看一下 LDP Style Guide 里的一些建议。
请确定在文件开头处包含了你的名字，email 地址，日期以及版本资讯。如果必要也可以包含你的 WWW 地址或永久住址。标准的开头就像这样:
标题
作者姓名及 email 地址
版本号码及日期

例如:
The Linux HOWTO Index
by Greg Hankins
v2.10.29, 31 July 1997

最後，准备好接到一大堆的问题与意见。全世界每天都有数千次造访 HOWTO 文件的收集站。

在你写完 HOWTO 之後，将它寄给我。如果你用 SGML-Tools，直接将 SGML 原始档寄给我就行。我会负责编排这些文件，将它放到 sunsite.unc.edu 并且在不同的新闻组群上发表。

经由我发表一份 HOWTO 是很重要的，因为我维护这些档案并且追踪已经写了那些 HOWTOs，以及谁做了什麽等等。

然後，你所要做的就是在定期更新并将文件寄给我。

[译注]
如果你有兴趣翻译一篇 HOWTO，请先看如何参与 Linux HOWTO 中文翻译计画，并与 C.W.Huang 联络。


New Page 1

标题： 《 一步一步安装Turbo Linux 》
姓名 ：
Email：
地址 ：
转摘 ：PC学堂--由肇庆怀集县晨光工作室sokoo制作

返回

关于TurboLinux中文版

    TurboLinux是Pacific HiTech公司开发的一个Linux发行版本，目前由北京拓林思软件有限公司发行了TurboLinux的简体中文版预览版（正式版也已发行），版本号为3.0.2 Pre Release 1 FTP，可以到ftp://turbolinux.com.cn/pub/turbolinux下载该版本，本文就以TurboLinux 3.0.2中文简体版为例，介绍一下Linux的安装。

安装前的准备

    电脑系统准备：TurboLinux声称可以运行在相对低档的电脑中。但在安装使用后发现，准备一台高速度、大硬盘、多内存的电脑还是非常必要,Linux对电脑硬件系统的要求可以说比Win98有过之而无不及。如果你的电脑配置为内存32MB、PC133、硬盘2G以上，使用TurboLinux才可以得到可以比较满意的效果。
    准备硬盘：虽然可以在一个有DOS引导分区的硬盘上开辟另外的分区安装TurboLinux，但是很危险，因为安装操作过程中很可能就会破坏掉DOS引导分区上的数据，因此，在安装TurboLinux之前，最好准备一个可以随心所欲使用的硬盘（当然，这个硬盘必须大于200M）。如果只有一个硬盘，就要想想办法来备份你硬盘上的重要数据，不要存在任何的侥幸。
    当然，也可以建立包含Linux的多重引导系统，但建立的过程复杂和繁琐，因为安装TurboLinux必须要使用它自己的独特分区，需要在已有DOS分区的硬盘上划出硬盘空间来安装TurboLinux,如使用DOS或者Linux的FDISK软件来给硬盘重新分区(建议使用不破坏分区数据的分区软件如PQ来准备Linux分区)。所以，最好还是准备一个空硬盘，或者DOS分区上只有一般数据文件。
    安装过程中的热键：在安装TurboLinux过程中，可以使用一些热键，具体使用可以参见安装光盘上的安装指南（DOC目录下的HTML文件）。

开始　选择安装方式

    光盘引导安装：建议从CD－ROM启动Linux安装光盘（需要主板BIOS支持系统从CD－ROM启动,并要在CMOS的“Boot Sequence”（启动引导）中将CD－ROM设在最前面)。
    DOS引导安装：可以进入纯DOS状态，用TurboLinux安装光盘中的LoadLin方式启动。进入安装光盘的子目录/dosutils，输入命令Autoboot就可以开始安装TurboLinux。另外还可以利用Linux的启动安装软盘来安装，这种方式需要制作启动安装软件，稍觉麻烦。具体方法可以参见光盘上的安装说明。

第一阶段　安装设备选择

    第一步：安装程序开始，出现TurboLinux安装开始的提示画面，按“Enter”键（回车）开始安装。　　中文版TurboLinux安装，是一系列向导似的中文菜单界面，很多步骤只需要按回车键（“Enter”键）。但总的来说，还不能做到简单、轻松，特别是安装的后半部分。更讨厌的是，在设置过程中如果出现什么差错，很有可能要从头再来。
    第二步：色彩选择。选择是否使用彩色显示器。
    第三步：TurboLinux欢迎画面。提示可以查看安装光盘上的HTML安装手册，以及可以查看技术支持网站http://www.pht.com/turbolinux/(中文版支持网站http;//www.turbolinux.com.cn)。按回车。
    第四步：选择键盘类型。这里列出了几十种键盘类型，一般情况下选择“us”。可以在安装完TurboLinux之后使用/usr/sbin/kbdconfig命令来重新设置键盘类型。
    第五步：询问机器是否支持PCMACIA卡，一般笔记本电脑才有该接口卡，对于大多数台式机，选择“否”。
    第六步：安装程序开始自动检测系统的硬件设备（即执行TurboProbe检测程序），检测过程中请按程序的要求关闭并口打印机。
    TurboProbe是TurboLinux安装程序的一部分，TurboProbe自动检测系统中的各种接口卡设备，检测过程中可以按“Alt＋F4”来查看检测的进程。按“Alt＋F1返回安装程序主画面。检测结束之后会显示所有检测到的设备列表。
    第七步：安装程序询问是否要从并口的启动设备来安装，即是否从外接的光驱、硬盘等来安装TurboLinux。一般选择“否”。
    第八步：安装程序报告检测到的设备列表。
    第九步：选择安装设备，大都选择CD－ROM。
    第十步：确定CD－ROM里插入了TurboLinux安装光盘。按回车。
    第一阶段的安装过程是最简单的，几乎可以一路按回车。但从下面开始，你需要认真读安装程序的每一条说明，并谨慎地操作。

第二阶段　建立Linux分区

    第十一步：选择TurboLinux安装程序的对话框和列表的确认方式。一般选择“普通”。即一步一步地进行设置选择。　　这一步和下面的一些步骤，需要使用键盘的“TAB”键来移动光标（也要使用方向键，不能使用鼠标），使用空格键来选择，最后用回车键表示结束。
    第十二步：选择网络类型，可以选择“LAN”（局域网）或者“PPP”（拨号上网）,然后选择“完成”。
    关于网络的设置，可以在安装完成后进行，你需要自己去潜心研究。
    第十三步：询问是否有“SCSI”设备。选择“否”。
    第十四步（重点步骤）：进行Linux的分区。安装TurboLinux，必须在硬盘中建立一个Linux根分区，根分区的大小没有多少限制。安装程序将自动建立一个交换分区（大致做虚拟内存使用），所以在分区时还必须预留下大约128MB的未分区的硬盘空间。在这一分区步骤中，安装程序列出几个选项，如果事先已完成分区（如使用PQ，以及TurboLinux光盘中自带的分区工具建立了Linux分区），可以选择“完成”，也可以使用本步骤中提供的“FDISK”和“CFDISK”（推荐）两个分区工具进行重新分区。下面就使用“CFDISK”进行分区。
    第十五步（重点步骤）：建立一个新的主分区（分区名称表示为“/dev/hda1”）。图2所示的画面中列出了硬盘上存在的分区。使用上下光标键移动选择某个分区，然后使用左右光标键在屏幕底部来选择操作命令。常用的操作是“Delete”（删除）和“New”（新建）。不需要的分区，可以将之删除。然后将光标移动到一个空区上（Free Space），用左右光标键将光标移动到屏幕底部的“New”，按回车，再用光标键选择“Primary”（建立Linux主分区），按回车，屏幕上显示字符“Size（in MB）：××××”（××××表示磁盘空间大小，单位是MB）。这时输入要建立的主分区的大小，只输入数字，单位是MB。按回车，选择“Begin”（分区从空余磁盘空间的头部开始），TurboLinux的主分区就建立好了。建议将要做为主分区的根分区设置得大一些，因为如果你要完全安装TurboLinux，根分区需要1200MB以上的空间，最小安装也要100MB。
    第十六步：建立一个逻辑分区。方法大致同上，不过在选择建立分区类型时，选择“Logical”。也可以不建立逻辑分区，而只有主分区。
    为安装Linux创建的分区比较特殊，可以有主分区、逻辑分区、交换分区，其中主分区里要设定一个分区做根分区（/dev/hda1）来安装系统。交换分区也是必须的，在TurboLinux中可以手动创建设置，也可以由安装程序自动设定。
    第十七步：设置交换分区。使用左右光标键选择“Quit”，按回车退出回到第十四步所示的界面。选择“完成”，安装程序将开始检测硬盘上的分区，并自动设置交换分区。然后格式化交换分区，格式化时可以检查硬盘分区上是否有坏的扇区（坏块）。
    第十八步：选择和格式化根分区。交换分区设置后，安装程序提示选择哪个分区做系统的根分区（如果你有多个Linux主分区的话），以及是否格式化Linux的主分区。使用“Tab”键移动光标到要格式化的分区，按空格键选择，然后再将光标移动到“确认”上，按回车，系统即开始格式化硬盘分区。
    建议选择格式化根分区，即使是在Linux的根分区早已建立的情况下。
    第十九步：进行拨号上网的TCP／IP协议参数设置。输入IP地址如10.10.10.1，按回车，则自动填入网络掩码为225.0.0.0。缺省网关地址，主DNS服务器地址程序同样可以自动填写。选择“确定”。
    第二十步：程序开始查询节点名和域名，查询不到，会要求输入域名和节点名。填入域名，例如Linux，则节点名自动输入为Linux。填入第二服务器名字（IP）和第三服务器名字，例如Linux1和Linux2。选择“确定”继续。
    第二十一步：确认历史记录文件。安装程序提醒操作者，安装过程的记录文件将存放在根目录中的／tmp/turbopkglog中。安装过程中出现的问题可以在该记录文件中查找解决线索。

第三阶段　文件复制

    第二十二步：程序提示开始软件包的安装。选择“确定”，安装画面中列出了八种系统安装方式。并注明了安装所需要的磁盘空间。用上下光标键移动光标条到需要的安装方式上，再用“Tab”键选择“安装”并按回车。
    一般选择“个人工作站”，这种安装方式可以安装个人工作所需要的大多数软件包，如字处理、图形编辑等工具。当然也可以选择使用完全安装，只是你必须准备足够大的分区。
    第二十三步：设定引导分区。安装画面中列出了在什么分区上建立“LILO”（Linux的启动引导程序）。推荐在/dev/had（硬盘的主引导区）安装。也可以在根分区中建立引导或者软盘引导Linux。
    第二十四步：设定传递参数，传递诸如内存大小等参数给安装程序，使之设定Linux启动参数。一般不设定。
    第二十五步：检测视频硬件，如显卡等。检测完毕则列出检测结果，你可以将检测结果与你实际知道的显卡参数作比较，看看是否正确。大多数情况下，都可以正确检测出显卡。如果不正确，则要在下一步中手动配置显卡。安装程序列出了两百多种显卡，大部分显卡都可以在其中找到。
    当然，Linux对硬件的驱动支持还非常糟糕，很多硬件（如现在的很多AGP显卡）都没法驱动。更糟糕的是很少有硬件厂商提供针对Linux系统的驱动程序，所以，你的电脑能否安装上Linux，还要看你的运气了。不过，你可以到网上去找一找（如http://202.103.112.32/～gaoyu/search.html），看看能否找到你需要的Linux驱动程序。

第四阶段　安装X Window服务器

    第二十六步：安装程序开始配置输入输出设备。首先配置键盘，一般选择“us”键盘布局。用“Tab”键选择“确认”。回车到下一步，选择键盘布局，如果使用的是所谓的Windows键盘（104键），则选择“Generic 104－key”。最后再设定键盘上的语言布局为“美国英语”。
    第二十七步：配置鼠标。先在鼠标列表中选择使用的鼠标类型，大多数情况下是选择“微软兼容鼠标（2键）”，或者“普通PS2鼠标”。在下一个窗口中设定鼠标所用的串接口，选择“串行口1”。最后，指定鼠标所用的按键数，根据自己鼠标的情况选择2或者3。
    第二十八步（重要步骤）：选择显示器。一般都选择“缺省显示器”，除非你真的有一个国际名牌显示器。虽然还可以定制显示器，但如果设置不对，则你可能面临重头开始安装的麻烦事，具体设置就要自行研究了(请一定要慎重选择设置,因为一个错误的设置可能会造成显示器损伤)。
    接下来选择要显示的颜色数，如果显卡上的显存较小,最好就设置为8位色，否则下面就不会得到高的显示分辨模式。　　第二十九步(重要步骤):选择显示分辨模式。如果前面选择了缺省显示方式，安装程序将自动给出几种可能的显示分辨率模式(这与显存,显示颜色数,显示器都有关系)。建议最好设置在800×600以上。一般不设置虚拟显示大小。扫描频率可以选择自动配置。最后，设定使用100DPI字库（适用于大多数显示器）。
    第三十步：选择使用图形登录方式，然后程序提示检查X服务器的设置是否正确，程序使用当前配置启动一个X Window画面，如果显示正确,按“Quit”按钮返回程序(也可以按“Ctrl＋Alt＋Backspace”键返回)。程序询问显示是否正确，选择“No”可以进行重新配置。然后程序将配置参数记录保存下来，X Window服务器就配置完毕了。

第五阶段　最后的收尾工作

    第三十一步：配置时区，一般按默认参数选择即可。
    第三十二步：配置打印机。一般选择取消，即使是真的要配置打印机，也可以安装完成后再配置。
    第三十三步：检测即插即用设备，一般是指声卡等设备，也可以在安装完成后设置（建议先不设置安装，因为安装不成功可能引起更多的麻烦）。
    第三十四步：选择窗口管理器的颜色数目，可以选择16位色（16bpp）。如果显卡上的显存不多，建议选择8位色。　　第三十五步：设置超级用户密码，该密码可以使你用超级用户（即系统管理员）的身份进入Linux，对系统进行全面管理。接下来还要设置一个普通用户密码，供你在一般情况下以普通用户使用Linux。
    注意，在输入密码时，屏幕上将不回显表示密码的字符（如＊号）。
    第三十六步：安装完成，系统重新启动进入Linux的窗口服务器系统。
    经过以上三十六步安装过程后，如果一切正常，就可以看到了TurboLinux的芳容，不知这时你是沮丧还是兴奋？未完成的工作……
    按照上面的步骤进行的TurboLinux安装，只是保证你能够看到它的面纱，还有太多太多的安装工作要做，如安装MODEN、打印机，配置网络，设置显示模式、字体。至于其他设备如扫描仪、电视卡、外接存储设备等的安装可能会无法进行。限于篇幅，下面只简单介绍一下声卡的安装和字体的设置。
    手动安装声卡：启动Linux系统，输入系统管理员身份名称“root”，再输入密码（注意不回显表示密码的字符）。进入X Window窗口，点击窗口右面按钮条中写有“TurboLinux”的按钮。在弹出的按钮条中选择“控制面板”，弹出控制面板窗口，在其中选择“System Tools”（系统设置）栏，在界面右面就列出了八个设置选项。点击最后一个选项“TurboSoundCfg”，开始声卡的驱动设置。
    Linux系统在X终端（类似Windows的DOS程序窗口）中启动声卡设置程序。开始是介绍画面，按回车，程序要求选择声卡类型。对很多用户来讲，可以选择“SoundBlaster 16”，你也可以用光标键来选择你认为合适的声卡类型。然后，用“Tab”键将光标移动到“MPU－401 MIDI Inter－face”项，再用空格键选择，然后按回车。
    在接下来的界面中设置IO端口和中断（IRQ）。一般IO端口可以设定为0x220，IRQ设置为5或者7，其他可以试选，按回车确定。在MPU－401设置中，可以按默认参数设置，按回车。程序提示声卡的驱动设置参数将保存，按回车确认。
    最后，程序将播放声音样本（一声钟响），以检测声卡是否设置正确。如果听见，表示声卡设置正确，如果没有听见，可以在接下来的画面中选择“否”，程序即回到前面步骤，开始重新设置。
    TurboLinux同样提供了自动检测并安装即插即用设备(例如声卡)，同样在控制面板中的“System Tool”中选择“TurboPNPcfg”项，程序即可开始自动检测即插即用设备。
    设置字体:TurboLinux的X Window窗口界面使用了TrueType字体。目前在国内流行的TurboLinux免费试用版本，在安装后,某些字符会显示不正常,出现乱码。不过可以在X Window下安装另外的中文TrueType字体。安装字体很简单，只需将如Windows的TrueType字体文件拷贝到目录“/usr/X11R6/lib/X11/fonts/tt”中，要注意的是TurboLinux预定义了字体的文件名字，如宋体的字库文件名为tlc_songttf。当拷贝宋体字库文件时必须要将文件名改为tlc_songttf。其他预定义的文件名为tlc_heittf(黑体),tlc_kaittf(楷体)等。
(特约作者　王洪义)

贝贝解释：Linux

Linux是一个操作系统,就像Win98一样，Linux提供了管理电脑硬件、软件的一系列功能。Linux 的主要特点就是作为一个建立在386/486/Pentium等CPU电脑上的操作系统，可以在Internet上免费下载使用。同时，任何人都可以利用公开的设计源代码来修改Linux，并可能被接纳进标准版本。Linux是从 Unix操作系统发展演化而来，例如Linux相容于 Unix的System V 以及 BSD Unix版本系统。1991年4月,由芬兰人Linus Benedict Torvalds开发出Linux的核心kerne之后，历经无数版本的演变,才渐渐变成一个完整的操作系统核心,而这个发展过程是通过神奇的Internet来完成的。但只有系统核心是没有用的,本篇讲的TurboLinux就是经过商业公司包装的Linux 套装软件。


New Page 1

标题： ■ 4Linux HOWTO 中文索引:版权声明
姓名 ：Greg Hankins
Email：
地址 ：
转摘 ： http://member.netease.com/

返回

:
5. 版权声明
Copyright (c) 1995 - 1998 by Greg Hankins.

除非另外说明，Linux HOWTO 文件的版权是属於其个别作者的。 Linux HOWTO 文件可以一部份或全部，以任何物理或电子媒体重制或散布，但必须将此版权声明包含在内。本文件允许并欢迎商业行为的散布，但应该事先知会作者。

任何的翻译，衍生，或整合任何 Linux HOWTO 文件的工作必须在此声明的规□下进行。也就是说，你不能利用一份 HOWTO 衍生的工作然後在其散布加上额外的限制。在某些情况下可有例外; 请用下面的地址和 Linux HOWTO 的协调人联络。

简单地说，我们希望尽可能地从各种管道散布这些资讯。然而，我们希望保有文件的版权，而且希望知道任何重新散布这些文件的计画。

如果你有任何问题，请用电子邮件和 Linux HOWTO 的协调人 Greg Hankins 联络: gregh@sunsite.unc.edu

英文原文(若翻译有误，以原文为主)

Copyright (c) 1995 - 1998 by Greg Hankins.

Unless otherwise stated, Linux HOWTO documents are copyrighted by their respective authors. Linux HOWTO documents may be reproduced and distributed in whole or in part, in any medium physical or electronic, as long as this copyright notice is retained on all copies. Commercial redistribution is allowed and encouraged; however, the author would like to be notified of any such distributions.

All translations, derivative works, or aggregate works incorporating any Linux HOWTO documents must be covered under this copyright notice. That is, you may not produce a derivative work from a HOWTO and impose additional restrictions on its distribution. Exceptions to these rules may be granted under certain conditions; please contact the Linux HOWTO coordinator at the address given below.

In short, we wish to promote dissemination of this information through as many channels as possible. However, we do wish to retain copyright on the HOWTO documents, and would like to be notified of any plans to redistribute the HOWTOs.


New Page 1

标题：如 何 在 Linux 下 拨 号 上 Internet 网
姓名 ：娄 志 勇 侯 红 梅
Email：
地址 ：
转摘 ：PC学堂--由肇庆怀集县晨光工作室sokoo制作

返回

---- Linux 是 目 前 最 热 门 的 网 络 操 作 系 统 之 一， 它 包 含 了 完 整 的Internet 服 务， 其 中 和 拨 号 上 网 有 关 的 软 件 有: 1) Xwindow 视 窗 系 统;2)PPP 拨 号 软 件;3) Netscape Communicator 4 浏 览 器。 通 过 它 们 你 就 可 以 象 使 用 Win9X/NT 那 样 快 速 上 网。

---- 一、 安 装Modem

---- Linux 既 支 持 内 置Modem 卡， 也 支 持 外 置 式Modem。 笔 者 推 荐 使 用 外 置 式 Modem， 因 为 其 操 作 简 单、 便 于 观 察 硬 件 工 作 状 态。 请 在 主 机 上 为Modem 选 择 一 个 空 闲 的COM 端 口， 例 如:COM2 (Serial B)， 用9 针( 或25 针) 信 号 线 连 接 好 COM 口 和Modem, 打 开 电 源 开 关。

---- 二、 配 置PPP 拨 号 软 件

---- 以 超 级 用 户root 登 录, 进 入Linux 的Desktop， 打 开xterm 窗 口， 键 入pppsetup, 这 时 屏 幕 出 现:

---- 1) 询 问 拨 号 电 话 号 码 对 话 窗

┏ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ┓
┃ ┃
┃ What is the phone number of your ISP ? ┃
┃ ┃
┃ [ atdt163 ] ┃
┃ ┃
┠ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┨
┃ ┃
┗ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ┛

---- 在 对 话 框 中 输 入 拨 号 上 网 电 话 号 码, 如 果 你 使 用 音 频 电 话, 就 填 入atdt163 , 使 用 脉 冲 电 话， 就 应 填 入atdp163 。 选 择OK, 进 入 下 一 步。

---- 2) Modem 端 口、 速 率 选 择 窗

┏ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ┓
┃ ┃
┃ Where is your modem /dev/cua ? ┃
┃ ┃
┃ cua0 = (COM1 :under DOS) ┃
┃ cua1 = (COM2 :under DOS) ┃
┃ cua2 = (COM3 :under DOS) ┃
┃ cua3 = (COM4 :under DOS) ┃
┃ ┃
┠ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┨
┃ ┃
┃ What baud rate is your modem ? ┃
┃ ┃
┃460KBps - ISDN modem ┃
┃230KBps - 56KBps modem or ISDN modem ... ┃
┃115KBps - 28.8,33.6,or 56 KBps modem ... ┃
┃57.6KBps - 28.8,33.6,or 56 KBps modem ... ┃
┃38.4KBps - 28.8 or 33.6 modem ... ┃
┃19.2KBps - 14.4 KBps modem ... ┃
┃ 9.6KBps - No comment ┃
┃ ┃
┠ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┨
┃ ┃
┗ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ┛

---- 上 面 一 段 是 询 问 你 将MODEM 连 到 了 哪 个COM 端 口(Linux 称 之 为 cua 设 备) 上， 选 择cua1, 即COM2 口。

---- 下 面 一 段 则 是 询 问modem 速 率。Linux 既 支 持 通 常 速 率, 如:14.4K,28.8K,33.6K, 也 支 持 高 速 的56K, 甚 至 更 高 速 的230K,460k ISDN modem。 选 择 适 合 你 实 际 情 况 的 速 率， 进 入 下 一 步。

---- 3) 是 否 回 拨 电 话 对 话 窗

┏ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ┓
┃ ┃
┃ Does your ISP use CALLBACK ? ┃
┃ ┃
┠ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┨
┃ ┃
┗ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ┛

---- 选 择NO， 不 需 回 拨 电 话。

---- 4) 电 信 局 域 名、 域 名 服 务 器IP 地 址 对 话 窗

┏ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ┓
┃ ┃
┃ Where is your ISP's domain name ? ┃
┃ ┃
┃ [ hf.ah.cn ] ┃
┃ ┃
┠ ─ ─ ─ ─ ─ ─ － ─ ─ ─ ─ ─ ─ ─ ─ ┨
┃ ┃
┃ Where is the IP address of your ISP's ┃
┃ name server ? ┃
┃ ┃
┃ [ 202.102.192.68 ] ┃
┃ ┃
┠ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┨
┃ ┃
┗ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ┛

---- 域 名、 域 名 服 务 器IP 地 址 要 根 据 本 地 电 信 局 提 供 的 资 料 填 写, 例 如: 安 徽 合 肥 地 区 的 域 名 为: hf.ah.cn, 域 名 服 务 器IP 地 址 为202.102.192.68 。

---- 5) 使 用 拨 号 脚 本

┏ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ┓
┃ ┃
┃ Does your ISP use PAP or CHAP ? ┃
┃ ┃
┃ PAP authentication ┃
┃ CHAPauthentication ┃
┃ MS-CHAP Microsoft version CHAP ┃
┃ SCRIPT create chat script for login┃
┃ ┃
┠ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┨
┃ ┃
┗ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ┛

---- 不 使 用PAP 或CHAP 协 议， 选 择SCRIPT， 建 立 自 己 的 拨 号 脚 本。 屏 幕 提 示：

┏ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ┓
┃ ┃
┃ What text should I wait for ?┃
┃ ┃
┃ [ : ] ┃
┃ ┃
┃ And waht should I send ? ┃
┃ ┃
┃ [ username ] ┃
┃ ┃
┠ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┨
┃ ┃
┃ What text should I wait for ?┃
┃ ┃
┃ [ : ] ┃
┃ ┃
┃ And waht should I send ? ┃
┃ ┃
┃ [ password ] ┃
┃ ┃
┠ ─ － ─ ─ ─ ─ ─ ─ ─ ─ ┨
┃ ┃
┗ ━ ━ ━ ━ ━ ━ ━ ━ ━ ━ ┛

---- 在 第 一 段" 等 待 什 么" 提 示 中， 填 入 冒 号":", 即 在 拨 号 后 等 待 电 信 局 主 机 提 示 符: 的 出 现； 而 在 第 一 段" 发 送 什 么" 提 示 中， 填 入 你 的 拨 号 上 网 用 户 名, 如username, 即 对 电 信 局 主 机 的 提 示 用usename 作 为 应 答。

---- 同 理, 在 第 二 段" 等 待 什 么" 提 示 中， 填 入 冒 号":"； 而 在 第 二 段" 发 送 什 么" 提 示 中， 填 入 你 的 拨 号 上 网 口 令, 如password。

---- 至 此，PPP 拨 号 设 置 完 成。 在 你 拨 号 上 网 时，Linux ppp 软 件 会 自 动 用 你 填 入 的 内 容 建 立 拨 号 连 接， 就 象Win9X " 拨 号 网 络" 做 的 那 样。

---- 三、Netscape Communicator 4 浏 览 器 的 调 整

---- Netscape communicator 4 浏 览 器Linux 版 与Win9X 版 界 面 相 同, 设 置 方 法 大 同 小 异， 需 要 注 意 二 点：

---- 1) 在Cache 选 项 菜 单 中，Cache 缓 存 大 小 要 根 据 实 际 内 存、 硬 盘 空 间 情 况 设 定。 一 般Disk Cache 应 是Memory Cache 的2 倍。

---- 2)Email 服 务 器 地 址 要 认 真 填 写。SMTP Server、POP3 Server 地 址, 国 内 各 地 电 信 局 命 名 方 式 情 况 不 一, 不 一 定 和DNS Server 地 址 一 样, 要 以 本 地 电 信 局 提 供 的 数 据 为 准, 需 特 别 注 意。

---- 四、 拨 号 上 网

---- 1) 打 开xterm 窗 口， 键 入ppp-go, 这 时Modem 就 会 发 出 欢 快 的 拨 号 声,Linux PPP 软 件 开 始 建 立 拨 号 连 接。

---- 2) 当Modem 连 接 成 功 后, 再 打 开Netscape communicator 浏 览 器, 在Location: 后 面 键 入Web 地 址， 你 就 进 入 激 动 人 心 的Internet 网 了!

---- 3) 当 任 务 完 成 后, 在xterm 窗 口 中 键 入ppp-off 即 可 离 线。


New Page 1

标题： ■ Linux HOWTO 中文索引 : 译注: 关於 HOWTO 中译版
姓名 ：Greg Hankins
Email：
地址 ：
转摘 ：http://member.netease.com/

返回

6. 译注: 关於 HOWTO 中译版
6.1. 声明

本译文属於 Linux 中文文件计画(CLDP)的一部份。网址为 http://www.linux.org.tw/CLDP/。欢迎各位网友踊跃投入此一计画。
除非另外声明，Linux HOWTO 中译版的版权是属於个别译者的，就如同英文版的版权是属於其个别作者一般。本中译文件之翻译权已取得原作者之同意。译者保留此份中译版文件所有的权利。
本中译文件允许以各种媒体形式散布，但应该事先知会作者，并保留此声明且在不违反英文版版权声明的情况下进行。
为了力求译文通畅可读，译者可能稍微的重组一部份的文字，加油添醋，或是精简原文。如此以弥补中英文间语法结构的差异性，且让语气可以贯通无碍。
一些关键字与专业词汇等，会附加上原文单字。遇有转译困难，则保留原文不变。若对这些字汇有适当译词的，请不吝指教。
内文中若遇有"[译者注:]"之标记，则为译者额外之注解。
本文件虽已力求正确，然而任何依据本文件而造成的损失，译者及原作者皆概不负责!
如有任何问题，请用电子邮件和 CLDP 的协调人联络: cwhuang@phys.ntu.edu.tw.

草拟中! 有任何不妥，不足之处欢迎补充!

6.2. 中译文件列表
目前已有的中译版 HOWTO 如下:

CDROM HOWTO, 译者 伍永康 <yorkwu@ms4.hinet.net>.
Linux 的光碟机相容性资讯。 Updated 9 November 1997.
Chinese HOWTO, 作者 黄志伟 <cwhuang@phys.ntu.edu.tw>.
如何在 Linux 下使用中文。 Updated 13 Febrary 1998.
DNS HOWTO, 译者 Asd L. Chen <asdchen@ms1.hinet.net>.
如何设定 DNS。 Updated 8 January 1998.
GCC HOWTO, 译者 陈建勋 <frank63@ms5.hinet.net>.
如何设定 GNU C 编译器及发展程式库。 Updated 20 November 1997.
Glibc2 HOWTO, 译者 Allex Juang <allex@ms2.accmail.com>.
如何安装与转移到 glibc2 程式库。 Updated 25 Febrary 1998.
HOWTO-INDEX, 译者 黄志伟 <cwhuang@phys.ntu.edu.tw>.
Linux HOWTOs 文件索引。 Updated 7 March 1998.
INFO-SHEET, 译者 黄志伟 <cwhuang@phys.ntu.edu.tw>.
Linux 作业系统的一般介绍。 Updated 6 November 1997.
Java-CGI HOWTO, 译者 黄志伟 <cwhuang@phys.ntu.edu.tw>.
如何建立 Java CGI 程式。 Updated 25 August 1997.
Kernel HOWTO, 译者 Asd L. Chen <asdchen@ms1.hinet.net>.
升级与编译 Linux 核心。 Updated 30 August 1997.
META-FAQ, 译者 黄志伟 <cwhuang@phys.ntu.edu.tw>.
Linux 资讯的列表。 Updated 29 October 1997.
News HOWTO, 译者 胡世明 <smhu@ish.chna.edu.tw>.
Linux 的新闻伺服器及客户端软体资讯。 Updated 20 October 1997.
PPP HOWTO, 译者 Asd L. Chen <asdchen@ms1.hinet.net>.
在 Linux 使用 PPP 网路的资讯。 Updated 9 October 1997.
RPM HOWTO, 译者 马儿 <marr@cc.nccu.edu.tw>.
如何使用 Red Hat 包装管理程式。 Updated 1 December 1997.
SMB HOWTO, 译者 J.S.Lin <r6921068@ms.cc.ntu.edu.tw>.
如何在 Linux 使用 SMB 协定。 Updated 3 January 1998.
Serial HOWTO, 译者 Asd L. Chen <asdchen@ms1.hinet.net>.
如何在 Linux 下使用序列装置(数据机，终端机)。 Updated 18 November 1997.
Sound HOWTO, 译者 伍永康 <yorkwu@ms4.hinet.net>.
Linux 的音效硬体及软体资讯。 Updated 12 November 1997.
Sound Playing HOWTO, 译者 J.S.Lin <r6921068@ms.cc.ntu.edu.tw>.
如何在 Linux 下播放各种声音格式。 Updated 30 November 1997.
XFree86 HOWTO, 译者 J.S.Lin <r6921068@ms.cc.ntu.edu.tw>.
如何取得，安装，设定 XFree86 3.3 (X11R6)。 Updated 7 March 1998.

并有下列的 mini HOWTO:

Advocacy mini-HOWTO, 译者 洪朝贵 <ckhung@cyut.edu.tw>.
如何提倡使用 Linux 的建议。 Updated 2 February 1998.
IP Alias mini-HOWTO, 译者 黄志伟 <cwhuang@phys.ntu.edu.tw>.
如何使用 IP 别名(IP aliasing)。 Updated 23 October 1997.
IP Masquerade mini-HOWTO, 译者 Asd L. Chen <asdchen@ms1.hinet.net>.
如何使用 IP 伪装(IP masquerading)。 Updated 19 November 1997.
Large Disk mini-HOWTO, 译者 Asd L. Chen <asdchen@ms1.hinet.net>.
如何使用超过 1024 磁柱的磁碟机。 Updated 13 November 1997.
Linux+DOS+Win95 mini-HOWTO, 译者 黄耀民 <yawmin@tcts.seed.net.tw>.
如何共同使用 Linux, DOS 及 Windows95。 Updated 19 January 1998.
Linux+NT-Loader mini-HOWTO, 译者 黄志伟 <cwhuang@phys.ntu.edu.tw>.
如何共同使用 Linux 及 Windows NT 载入器。 Updated 12 November 1997.
Public Web Browser mini-HOWTO, 译者 Fan-Yu Kuan <allenk@neto.net>.
如何建立一个 guest 帐号来使用 WWW 浏□器。 Updated 10 November 1997.
Quota mini-HOWTO, 译者 Asd L. Chen <asdchen@ms1.hinet.net>.
如何建立磁碟配额限制(quotas)。 Updated 21 October 1997.
RPM+Slackware mini-HOWTO, 译者 黄富强 <wfkwong@net.polyu.edu.hk>.
如何在 Slackware 下安装 Red Hat 套件(RPM)。 Updated 11 February 1998.
Remote Boot mini-HOWTO, 译者 Yun-Yul Tseng <yytseng@auto.fcu.edu.tw>.
如何建立可选式的远端开机。 Updated 20 February 1998.
Soundblaster-16 mini-HOWTO, 译者 黄志伟 <cwhuang@phys.ntu.edu.tw>.
如何安装 Soundblaster-16 PnP 音效卡。 Updated 20 November 1997.

感谢各位热心的协助。

所有文件皆同时提供 big5 码(繁体字) 与 GB 码(简体字) 两种版本。

本中译计画的协调人是 黄志伟 <cwhuang@phys.ntu.edu.tw>。如果你对此计画有任何问题，建议，评论，补充内容，请来信告诉我。


New Page 1

标题： Linux 下 的 VC 集 成 开 发 环 境
姓名 ：娄 志 勇 侯 红 梅
Email：
地址 ：
转摘 ：PC学堂--由肇庆怀集县晨光工作室sokoo制作

返回

一、 概 述

---- Linux 下 的 Visual C 是 个 软 件 集 成 开 发 环 境, 其 中 包 括 了 用 来 创 建、 修 改、 编 译、 运 行、 调 试 应 用 软 件 所 需 要 的 一 切。 它 可 以 让 您 用 可 视 化 的 面 向 对 象 编 程 技 术， 迅 速 开 发 出 基 于Xwindow 的 应 用 软 件， 其 构 成 可 用 如 下 等 式 表 明：

Visual C = vxp + gcc

---- vxp 是 由 国 人 陈 勇 先 生 开 发 的Linux 自 由 软 件， 它 负 责 在 前 台 提 供 一 个 友 好 的、 可 视Xwindow 软 件 编 程 界 面。( 下 载 地 址http://www.shsu.edu/~stdyxc05)

---- gcc 则 是Linux 自 带 的GNU C 语 言 编 译 器 及 相 关 的Xwindow 开 发 工 具。 这 一 部 分 是 整 个 开 发 环 境 的 核 心， 处 在 后 台， 并 由vxp 自 动 调 用。

二、Visual C 屏 幕 画 面

---- 启 动Linux 的Xwindow 系 统， 双 击vxp 图 标， 即 可 进 入Visual C 集 成 开 发 环 境， 屏 幕 上 出 现4 个 窗 口: ( 见 图1 -- pic1.gif )。

---- 1. 主 窗 口： 位 于 屏 幕 顶 部， 标 题 为Visual X windows Programming API , 由 菜 单 条、 工 具 条、 信 息 指 示 区 组 成。 菜 单 条 包 括： 文 件、 运 行、 程 序、 编 译、 工 具、 选 项、 窗 口、 帮 助 等 项 目; 工 具 条 有 新 建、 打 开、 保 存等 按 钮； 信 息 指 示 区 则 给 出 当 前 对 象 的 名 称、 几 何 尺 寸、 相 对 坐 标位 置 等 信 息。

---- 2. 工 具 箱 窗 口： 位 于 屏 幕 左 侧， 标 题 为Widgets, 由 若 干 图 标 组 成, 每 个 图 标 代 表 一 种控 件。 如 按 钮、 滚 动 条、 列 表 框 等。

---- 3. 对 象 树 窗 口： 位 于 屏 幕 右 侧， 标 题 为Objects Tree 。 该 窗 口 实 时 地、 以 直 观 的 树型 标 明 了 各 对 象 的 层 次 关 系。

---- 4. 窗 体 窗 口： 位 于 屏 幕 中 央， 是 个 标 题 为untitled 的 空 窗 口， 也 是 应 用 软 件 的 最高 层 主 窗 口。

三、Visual C 编 程 实 例

---- Visual C 编 程 可 分 为3 个 步 骤：

---- 1. 绘 制 程 序 界 面

---- 2. 设 置 对 象 属 性

---- 3. 书 写 回 调 代 码

---- 第1 步 是 利 用 工 具 箱 提 供 的 各 种Widget 控 件， 在untitled 窗 体 窗 口 中 放 置 菜 单、 按 钮、 滚 动 条、 对 话 框 等 对 象， 绘 制 成 预 定 的 应 用 程 序 界 面。

---- 在 这 里， 为 简 单 起 见， 我 们 在untitled 窗 口 中 只 放 了 一 个 名 为"PushBotton1" 的 按 钮。 方 法 为： 在 工 具 箱 窗 口 内 单 击 标 有"OK" 字 样 的 按 钮 控 件， 然 后 将 鼠 标 移 到 窗 体 窗 口， 在 理 想 中 的 起 始 位 置 拖 动 鼠 标， 一 个 高 亮 度 的 矩 形 即 随 着 鼠 标 指 针 缩 放， 当 松 开 鼠 标 后， 高 亮 度 的 矩 形 即 被 同 样 大 小 的 按 钮 所 代 替, 其 名 称 为 系 统 默 认 的"PushBotton1"

---- 第2 步 是 在 第1 步 的 基 础 上， 利 用 系 统 提 供 的 " 资 源 编 辑 器" (Resources Editor) 对 选 定 对 象 的X 资 源-- 即 属 性-- 进 行 设 置。

---- 例 如："PushBotton1" 按 钮 对 象 就 有 颜 色、 字 体、 标 签 字 串 等 多 种 属 性， 程 序 员 可 以 根 据 需 要 对 这 些 属 性 进 行 设 置。 当 选 中 一 个 对 象 后， 资 源 编 辑 器 会 自 动 以 列 表 框 的 形 式 给 出 该 对 象 的 各 种 属 性、 可 能 的 属 性 值， 减 轻 了 程 序 员 的 记 忆 负 担。

---- 紧 接 第1 步， 我 们 以 修 改PushBotton1 的"labelString" 标 签 字 串 属 性 为 例， 将 鼠 标 指 针 移 到PushBotton1， 单 击 鼠 标 右 键， 调 出 资 源 编 辑 器， 在Select A Resource 项 里 选 择"labelString" 属 性， 将 其 值 改 为"My OK button" , 这 时,"PushBotton1" 字 样 应 被"My OK button" 代 替 ( 见 图3 -- pic3.gif )。

---- 第3 步 是 整 个 编 程 过 程 中 比 较 困 难 的。 这 一 步 是 要 程 序 员 通 过 " 回 调 代 码 编 辑 器"(Callback Code Editor)， 用C 语 言 编 写 回 调 代 码-- 即 控 制 对 象 的" 方 法"。

---- 例 如： 当 用 户 鼠 标 单 击My OK button 按 钮 后， 我 们 想 让 屏 幕 上 出 现"My OK button is selected " 信 息， 程 序 员 就 应 当 这 样 编 写 回 调 代 码：

---- 在"My OK Button" 上， 单 击 鼠 标 右 键， 调 出 " 回 调 代 码 编 辑 器" 。 在 最 下 方 的Source Code 文 本 输 入 框 里 键 入：

printf("My OK Button is selected");

---- 至 此， 一 个Xwindow 程 序 的 框 架 就 出 来 了。 单 击 " 保 存" 按 钮， 将 其 命 名 为example.vxp 。

四、 编 译、 运 行 和 调 试

---- 1. 进 入vxp 主 窗 口。

---- 2. 在Application 菜 单 项 中， 选 择 " 生 成C 代 码" 项, 可 将example.vxp 转 换 成example.c, 然 后 选 " 生 成makefile" 或 " 生 成Imakefile" 。

---- 3. 在Compile 菜 单 项 中， 选 择 via makefile 或via Imakefile， 用gcc 进 行 编 译， 生 成 可 执 行 文 件example 。

---- 4. 在Run 菜 单 项 中, 选Execute application 来 运 行example; 选Debug application调 试example 。

---- 从 使 用 中 我 们 可 以 看 出， 相 对 于 传 统 的 软 件 工 具，Linux Visual C 为 程 序 员 提 供 了 更 加 强 有 力 的 的 开 发 手 段， 大 大 提 高 了 工 作 效 率 和 编 码 质 量。


New Page 1

标题： ■ 如何在 Linux 下安装及使用 CD-ROM : 概述
姓名 ：Jeff Tranter,
Email：jeff_tranter@pobo
地址 ：
转摘 ：

返回

1. 概述
这是 Linux CD-ROM HOWTO. 编撰它的目的是包含一切在 Linux 安装及建置 CDROM 时所需的知识, 以供大家快速参考. 它将回答常见的问题, 还有指引其它关於唯读光碟机的应用及技术方面的参考.

1.1. 铭谢
这里的很多资讯都来自 Linux 核心中的原始码及文件, alt.cdrom 这个讨论区的FAQ, 及 Linux 使用者的惠予.

感谢有 SGML Tools 套件, 以至虽然这分文件有多种格式, 但我只要编写一分原始档就可以了.

1.2. 英文版版本沿革

Version 1.0
公开的第一份版本.

Version 1.1
在 1.1.20 版核心增加了 CDU33A 支援; 加入对 Reveal FX 的消息; 读音轨的资讯; 一些 alpha 测试中的驱动程式; 加入问题与解决一节; 及一些其它不重要的东西.

Version 1.2
在 1.1.33 版以後的核心必须将 ISO-9660 档案系统以唯读方式挂上; 确认 SB16 SCSI 已被支援, 但 Aztech 的新机器则未支援; 加入相片光碟及 xpcd; 还有提示 sbpcd 的自动退片功能.

Version 1.3
从 1.1.49 版核心後, sbpcd 的自动退片取消了. 加入 XA 碟片资讯及辨识方法.

Version 1.4
现在 HOWTO 已有别的语言版本了; sbpcd 支援了 IBM 及 Longshine 的机器; Aztech 驱动程式有 alpha 测试版了; CDU-33 不再自动侦测, 并支援相片光碟及唱片; SCSI 光碟机可以接超过二台; 新的 IDE 驱动程式; 提醒要检查 jumper; 可用 IOCTL 叫 sbpcd 要不要自动退片; 列出有支援多重烧录的机型; CDU-33 的灯闪烁问题.

Version 1.5
迟到了好久才完成( 我那时很忙 ); 文件置於 GPL 规则之下; 很多新驱动程式的资讯; 更多设置及解决问题方面的资讯; 加入很多 HTML 连结; 其它很多次要改变.

Version 1.6
加入退片程式的连结; 档案权限修补的问题; 连结到 Creative Labs 的网站; 参考 ATA/EIDE FAQ 及 ftp 站; 注意到 Creative Labs 及 Mitsumi 的新光碟机改采 IDE 介面; 提到 supermount; 支援抓音轨的资料太旧了, 请参考 cdda2wav; 更多制作 CD 的资讯; EIDE 多片机种的资讯; 修正一些白字.

Version 1.7
新核心版本; 多数 README 档搬到 /usr/src/linux/Documentation 去了; 有些驱动程式已脱离实验阶段; 更多支援机种; 强调现在多数机种是 IDE/ATAPI 介面的; 加入测速及随插即用(Plug and Play)支援问题; vger 的通信论檀关闭了; 其它次要改变.

Version 1.8
安装後光碟机不能用问题; aztcd 现支援两种 CyCDROM 机器; 千万别在 IDE 光碟机身上用 sbpcd 驱动程式; 开始支援一些 ATAPI 多片装机种; 提到对印表机介面机种的(缺乏)支援程度; 最新稳定核心换成 2.0; 其它次要改变.

Version 1.9
除去一些非常旧, 现在已经过时的问题; 作者的 E-mail 地址换了; 中文版出来了; 修正一些软体套件的最新位置; 对多媒体的书写下更多资讯; 一些次要的拼字及文法上的改变.

Version 1.10
认明了新的 Aztech 的机种是 ATAPI 的没错; 加入了 CDU31A 可做成模组的选项; 挂载 CD-ROM 时有选项可读取隐藏档; 加上六个月建议使用期; 书本(指Linux multimedia guide) 的新 URL; 次要的拼字及文字的改变.

Version 1.11
加入了印表机介面机种的参考资料; 加上bpcd驱动程式的资讯; 中文版有了新网址; 选择性的CR-56x驱动程式; 可开机光碟的相关资料; 回答关於CD-ROM API的问题; Linux Multimedia Guide现在有法文及日文译本了.

Version 1.12
加入波兰文译本的连结; CD-Writing不再只是mini-HOWTO了; 增加了两个关於Joliet 档案系统的问题.

1.3. 中文版版本沿革

1.8版
最初的中文版本; 试译版.

1.9版
最初的正式中文版本, 用HTML写成.

1.10版
首页由 www.ncu.edu.tw 移到现在的位置 http://linux.ntcic.edu.tw/~yorkwu/linux/howto/cdrom.

1.11版
首次改成Linux HOWTO的SGML版本.

1.12版
第一次加入中文版沿革资讯.

1.4. 最新版本何处寻
这份文件的新版本将定期张贴到 comp.os.linux.answers 网路新闻组. 它们也会上载到很多包括 ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/ 的匿名 ftp 站.

本文的超文件版及其它 Linux HOWTO 也在很多 WWW 站, 包括 http://sunsite.unc.edu/mdw/mdw.html. 很多散布的 Linux CD-ROM 也包含 HOWTO, 通常放在/usr/doc/目录里, 你甚至可向一些业者要印刷版. 然而有时 CD-ROM 里的, 在 ftp 站台上的, 或是印刷的版本已经显得过时了. 如果在本 HOWTO 上标的日期早於六个月前, 那麽在 Internet 上可能已经有新版了.

Bruno Cornec (cornec@stna7.stna.dgac.fr) 写的法文译版可在ftp://ftp.ibp.fr/pub2/linux/french/docs/HOWTO/ 看到.

箕浦逸史 (minoura@uni.zool.s.u-tokyo.ac.jp) 翻译的日文版在http://jf.linux.or.jp/JF/JF.html/.

伍永康 (yorkwu@ms4.hinet.net) 翻译的中文版(BIG-5编码)可由 http://linux.ntcic.edu.tw/~yorkwu/linux/howto/cdrom/ 取得.

Bartosz Maruszewski (b.maruszewski@zsmeie.torun.pl) 翻的波兰文译版可在 http://www.jtz.org.pl/Html/CDROM-HOWTO.pl.html 取得.

多数本文件以及其它Linux HOWTO文件也可以在 http://sunsite.unc.edu/pub/Linux/docs/HOWTO/translations/ 及 ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/translations/找到.

如果你把它翻成其它语言, 请让我知道, 我会为它在这儿做个连结.

1.5. 回馈
这份 HOWTO 文件, 需要各位使用者帮助, 才能越来越好用. 如果您有任何建议, 修正, 或意见, 请告诉作者(jeff_tranter@pobox.com). 我将会在下一版试著加入这些意见.

(译注: 对本中文版的意见, 请告诉译者.)

我也很乐意尽我能力回答关於唯读光碟机及 Linux 的一般问题. 但在这之前, 请先耐心读完这整篇 HOWTO, 然後再给我和你碰上问题相关的所有细节. 请别问我如何在非 Linux 的作业系统上使用光碟机.

如果您在唯读光碟上或以硬拷贝形式发行此文件, 请您附送我一份. 请送到我的真实地址 . 也请考虑一下对 Linux 文件计画作点奉献, 以支持 Linux 的免费文件. 请和 Linux HOWTO 协调人 Greg Hankings ( gregh@sunsite.unc.edu ) 联络以得到更多资讯.

1.6. 散布时的注意事项
原作版权为 Jeff Tranter (1995-1997) 所有. 中文版版权为伍永康及 Jeff Tranter (1996-1997) 所有.

这份 HOWTO 是免费文件(free documentation); 你可以在合於 FSF ( 自由软体基金会 ) 出版的 GNU GPL(一般公开授权) 之规定下重新散播 及/或 修改它; 您可以自由决定适用 GPL 2.0 或之後的任何版本.

希望这份文件的发出对您有帮助, 但我们不 提 供 任 何 保 证 , 即使是 商业上 或 合於某特殊用途 的隐含保证亦然. 详情请参见 GNU 一般公开授权书.

要取得 GNU 一般公开授权书(英文版), 您可以寄信到 Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,USA.


New Page 1

标题： Linux DOS2Linux mini-HOWTO
姓名 ：Guido Gonzato
Email：
地址 ：
转摘 ：PC学堂--由肇庆怀集县晨光工作室sokoo制作

返回

- From DOS to Linux - Quick!

By Guido Gonzato　<Guido@ibogfs.cineca.it>
April 26, 1996
Version 1.1

中译 : mglow.bbs@bbs.ee.ntu.edu.tw
文中 <ps.> 的部份为译者补述, 并非为原文所译. 再者, 原文发表日期距今也将近
一年, 有部份的说明与今日现况或有些微出入..但不足以影响其立论的正确性 :)

前言

这个 mini-HOWTO 是为(将成为曾经是??) DOS 的使用者而写的. 尤其是那些已经饱受 DOS 凌虐而准备投向 Linux , 这个在 i386 上 Un*x clone OS 的朋友.

当我在我的 PC 上安装 Linux 後, 我很希望能够迅速的了解并且利用它. 我相信这也 是每个人的期望. 你可能已经知道 DOS 可以视为 Un*x 的一角. 身为一位 "资深" DOS 使用者, 我可以告诉你它们有许多的相似之概念: 档案系统, 目录, 环境变数, 程式的 执行, .BAT 档案..等等. 这篇文章的目的在於让已经用过 DOS 的使用者能够将他们在 DOS 上的认识转换到 Linux 上. 你尽可以在床上读个几页, 当然, 之後再去 PC 上 操作或许会更好.

在此, 我仍然要强调, 这篇文章 *不是* Linux 的入门课程 -- 对初学者而言, 我建议 你能够有一份 Matt Welsh 所写的 "Linux Installation and Getting Started", 这篇文章在 sunsite.unc.edu 或是其 mirrors, 放在 /pub/Linux/docs/LDP 下; 写得 很不错而且易懂. 另外 HOWTO 和 FAQ 也是不错的选择. 而这篇文章并不是以上作品的 同类型文章, 只是一定有一些家伙 (我就是其一) 在只看了二十页不到 (而非全部的 200 页以上), 就迫不及待的想要进入 Linux 的世界.

第零节: 介绍

0.1: Linux 就是你要的吗??

这个世界上并不存在著"最好的电脑" 或是 "最棒的 OS"(作业系统): 这完全视你的 需求而定. 比方说, 我很不喜欢 Mac (得罪了 :) : 它的确很容易使用, 但我还是喜欢 PC 帮我完成某些事. (试试在 Mac 上做和 dir/s/w >lst 一样的事) 至今, 对许多人 而言 Mac 只是 "最好" 的电脑. 同样的, 我也不认为 Linux 是最好的 OS : 显然, Linux 优於 Win95, 但是很多人还是喜欢後者(Win95).

Un*x 的主要诉求对象是以程式设计师和科学家, 而 Mac & Win 是针对著一般性的使用者 而设计的. 因此, Linux 足以提供一个广阔的天空 -- 如果你需要的是 Compilers, 网路, 以及学术实验性质的软体, 而你也喜欢三不五时的修理你的 Linux : 换句话说, 你喜欢 hacking. 另一方面, 假使你非得要求有帮你完成所有事的对话框, 需要使用商用套装程 式, 或是说, 你对命令列的提示号有失落感的话 ... 那你还是早点死心吧...:p

接下来就看你了. 但在此之前先提醒一件事: Linux 和 DOS/Windows 是可以在同一台 电脑上并存的.

0.2: 这就是我要的!! 请告诉我更多一些!!

现在, 假设你已经装好了 Linux. 依照安装步骤, 你也应该有个帐号(account) (如果 不是这样, 请参考 6.1 节). 现在你的 Linux 已经在运作当中了. 或许有人已经告诉 你, 所有你需要的软体都已经在系统里了, 而你该做的就是 login. 这时你键入了 login name, password, 然後两眼对著萤幕发直 -- "好啦, 但再来呢??"

别失望.. 你尽可以完成从前你在 DOS 下的工作, 甚至更多. 设想一下, 你现在面对 的不是 Linux, 而是 DOS. 这时, 你应该会作下列的工作:

1. 执行程式; 建立, 复制, 编修档案或是改变档名 -- 维护档案;
2. 建立, 删除, 或是在目录间跳动 -- 维护目录;
3. 格式化磁片然後备份档案 -- 磁碟处理;
4. 修修补补 autoexec.bat 和 config.sys 这两个档 -- 系统维护;
5. 写自己的程式, 可能是 .bat 或是 qbasic -- 程序处理;
6. ..其它还有吗..?? :)

你一定很高兴知道, 上述的事在 Linux 下一样可以完成, 而且方法和 DOS 极为相似. 在 DOS 下, 一般使用者使用的命令只是系统提供的许多命令中的少数几个 -- Linux 也一样. 在此, 如果你并未熟悉完成上述六点的相关 DOS 命令, 那请你先暂停.. 先 去翻翻 DOS 使用手册吧. 在往後的讨论里, 本文将不会对诸如什麽是目录或是 PATH 是什麽来做解释.

在继续讨论前的一些注意事项:

1) 和 DOS 不同, Linux 具有一些内建的系统安全机制. 在你打开 PC 电源然後启动 Linux 之後, 你必需 "log in", 这是为了使系统知道你即将使用系统并工作; 这是因 为 Un*x 是一个多人使用的 OS. 此外, 一般的使用者并非拥有这台电脑(的一切资源); 只有使用 root 来做 login 的使用者才是真正的拥有者(这个人就是所谓的系统管理者, 在你在己的 PC 上, 你就是 root); 每个档案及目录都有存取权限的定义, 这使得有些 档案无法被一般使用者存取. 另一方面, DOS, 却无法提供这些保护 -- 你可以存取整颗 的硬碟.

2) 一旦你结束工作要关机, 请 *不要* 马上切断 PC 的电源 ! 相反的, 这必须经过一 些正当的程序 (按下 ctrl-alt-del , 等到系统做完例行的检查之後, 告诉你 OK, 才可 以关掉电源). 从另一个角度来说, Linux 是一个很稳定的系统, 你完全不必担心一旦有 某个错误的应用程式导致系统挂掉, 逼迫你必需按下 reset 钮 :p

3) 我们非常鼓励你多尝试与实验 : 请放心, 这样不会对系统造成伤害 (ps. 前提是你 并不是用 root 的身份来尝试). 你可以在提示号後面打以下指令以得到帮助 ($ 是标准 提示号, 而 # 是 root 专用的) :
        $ help
(相当合乎逻辑), 或是想得到更多讯息:
        $ man <command>
在这里, 如果你已经安装了 man pages, 那麽这样就会将与 <command> 相关的 manual (man 的原字) page 印出来. 你也可以试试这样:
        $ apropos <command>
或
        $ whatis <command>

4) 通用规则 (help, man ..etc)

a) <...> 表示必须给定的参数, [...] 则可有可无. 例如 :
        $ tar -tf <file.tar> [> redir_file]
file.tar 一定要指定, 但是 redir (重新导向输出档) 是可以不用加的.
b) 以下 "RMP" 表示 "Read the Man Pages for further information" -- "请看 man
page".

你现在已经可以继续阅读下面的部份了.

第一节: 档案维护

1.1. 档案: 前言

Linux 拥有一个档案系统 - 意思是 "一个有很多档案和目录的结构" - 和 DOS 非常 相似. 档案都有一个名称(档名, 它的组成必须要遵循一些规则), 被置放在目录当中. 有些是可执行的程式, 它们必须要一些额外的参数才可以正确执行. 另外, 你也可以使用 "万用字元" (wild card) , 输出/入导向, 管道(piping). 但, 和 DOS 仍有些许的不同.

- - 第一: 在 DOS 下, 档名必须遵守 8.3 格式的规则. 比方说 NOTENOUG.TXT. 在 Linux 里我们有比较自由的空间. 假如你的 Linux 已经安装在 ext2 或是 umsdos 等等的 档案系统上, 你就可以使用长档名来为档案取名, 这样可以使档名中包含更多的字元和 "点". 举个例子, This_is.a.VERY_long.filename. 请注意到我用了大写和小写的字母, 而事实上...

- - 第二: 大小写是不一样的. 因此, FILENAME.tar.gz 和 filename.tar.gz 是两个不 同的档案. 这个规则在命令来说也是成立的: 当使用 ls 这个指令 (和 DOS 的 DIR 类似) 会得到目录下案的列表, 但是用 LS 的话, 系统只会丢给你一个错误的讯息.

- - 第三: 用 "." 开始的档案名称会被视作隐藏档. 例如: .I.am.a.hidden.file , 使用 ls 时就看不到了 (ps. 用 ls -a 可以看见隐藏档)

- - 第四: Linux 并没有规定可执行档一定要有 .COM , .EXE 或 .BAT 的延伸档名. 如 果我们用 ls -F 这个命令, 就会发现执行档後面会被加上一个 '*'. 例如:
        $ ls -F
        letter_to_Joe　Cindy.jpg　cjpg*　I_am_a_dir/　my_1st_script*
cjpg* , my_1st_script* 是可以被执行的. 在 DOS 中, .BAK 表示备份档案, 而 Linux 则在档名尾加上一个 '~'.

- - 第五: DOS 程式需要的参数要用 /switch 的方法给予, 而 Linux 却是用 -switch. 就像 dir /s 与 ls -R. 附注一点, DOS 下的某些程式如 PKZIP 和 ARJ, 是用和 Un*x 一样的参数给定方式.

1.2. 档案: 对应 DOS 与 Linux 相关的指令

左边是 DOS 的命令; 右边是 Linux 里具用同样功能的指令.
COPY:　 cp
DEL:　　rm
REN:　　mv
TYPE:　 more, less, cat

Redirection and plumbing operators: < > >> |
Wildcards: * ?
nul:　　/dev/null
prn, lst:　　　 /dev/lp0; lpr

- - EXAMPLES -

DOS　　　　　　　　　　　　　　　　　　 Linux

C:\GUIDO>copy joe.txt joe.doc　　　　　 $ cp joe.txt joe.doc
C:\GUIDO>copy *.* total　　　　　　　　 $ cat * > total
C:\GUIDO>copy fractals.doc prn　　　　　$ cat fractals.doc | lpr
C:\GUIDO>del temp　　　　　　　　　　　 $ rm temp
C:\GUIDO>del *.bak　　　　　　　　　　　$ rm *~
C:\GUIDO>ren paper.txt paper.asc　　　　$ mv paper.txt paper.asc
C:\GUIDO>type letter.txt　　　　　　　　$ more letter.txt
C:\GUIDO>type letter.txt　　　　　　　　$ less letter.txt
C:\GUIDO>type letter.txt > nul　　　　　$ cat letter.txt >/dev/null
        n/a　　　　　　　　　　　　　　 $ more *.txt *.asc
        n/a　　　　　　　　　　　　　　 $ cat section*.txt

附注:

1) * 在 Linux 中变得聪明多了:
- - * 表示除了隐藏档外的所有档案; .* 表示所有隐藏档;　*.* 就是"某些字元" + 一个点 + "某些字元" 的档案名称;
- - p*r 可以满足 peter 和 piper 两个字; picked 和 peck 也都可以表为 *c* ;
2) 使用 more 这个命令时, 按下<space> 可以继续阅读下一页, 'q' 或 ctrl-c 结束. less 和 more 类似, 但可用方向键.
3) Linux 里 *没有* UNDELETE 这种命令. 所以, 砍掉档案前要三思啊..
4) 除了 DOS 中的 < > >> 之外, Linux 可以使用 2> 来对错误讯息导向. (stderr)
5) Linux 有另外一组万用字元: []. 使用:
- - [abc]* 表示以 a, b, 或是 c 开头的档案;
- - [I-N]* 表示由 I, J, K, L, M, 或 N 开头的档案;
6) 没有像 DOS 一样的 rename 可用; 也就是说, ren *.xxx *.yyy 是无效的.

1.3. 执行程式: 多工与 Session

要执行一个程式, 就像 DOS 一样键入它的名字就可以了. 如果说这个程式被放在 PATH (第四节) 指定的目录 (第二节), 那麽该程式就会被启动. 例外的是, Linux 不像 DOS 可以执行放在现行目录下的程式 (.) , 除非 . 已经加入 PATH 中了. 若要执行现行 目录下的程式, 可以这样做: ./<prog>.

这是一个标准命令的格式:
        $ command -s1 -s2 ... -sn par1 par2 ... parn <input >output
-s1 , -s2 ... -sn 是命令选项, parn 是程式参数. 我们可以在同一行上键入数个命令:
        $ command1 ; command2 ; ... ; commandn
这就是执行命令的方法, 但是我们可以更进一步. 一个使我们使用 Linux 的主要原因 是, 它是一个多工的系统 -- 它可以同时执行数个程式 (以下, '程式'用'行程'代替) 你可以将一个原本在背景执行的行程提升到前景并继续执行. 而且, Linux 可以使你有 多个 session : 这就像同时有好几台电脑在工作!

- - 切换 session 1..8:
        $ <ALT-F1> ... <ALT-F8>.
- - 开始一个新的 session , 但不离开原本 session :
        $ su - <loginname>
例如:
        $ su - root
这相当有用. 比如, 当你要 mount 一个磁碟(机) 时. 因为只有 root可以作这件事.
- - 结束一个 session:
        $ exit
- - 在前景执行一个行程:
        $ progname [-switches] [parameters] [<input] [>output]
- - 在背景启动一个行程(在背景执行) 要加上 '&' 这个符号:
        $ progname [-switches] [parameters] [<input] [>output] &
- - 查看有多少行程正在执行:
        $ ps
这样会列出一个表格. 每一个行程都会有一个 PID 来识别 (一个数字).
- - 杀掉一个行程:
        $ kill <PID>
有时後你必需用这个方法来结束一些行程 (当你不知道怎样正确结束时 :) 一个行程或许 要用以下方法才可以结束:
        $ kill -15 <PID>
        $ kill -9 <PID>
此外, shell (像 COMMAND.COM 相等的东西) 允许你暂停某个行程的执行, 或是把前景 换到背景执行, 背景换来前景. 我们用'工作'来称呼行程.
- - 查看有多少工做:
        $ jobs
这样列出来的工作是以一个 shell 分配的数字来区别的, 而不是用 PID.
- - 暂停一个前景的行程:
        $ <CTRL-C>
(但不总是有效 :p )
- - 暂停前景的程式:
        $ <CTRL-Z>
(ditto)
- - 将一个被暂停的程式移到背景继续执行:
        $ bg <job>
- - 把一个背景执行中的程式提升到前景:
        $ fg <job>
- - 再一次的, 要砍掉一个行程:
        $ kill %<job>
这里的 <job> 可能是 1, 2, 3, ... 有了这些命令你就可以在同一个时间格式化磁碟, 压缩档案, 编译一个程式, 还可以解压缩, 而且, 你仍然还是看到提示号和游标在等 待你的命令. 不妨在 DOS 下试试看这麽做吧!! 在 Windows 下也试试, 比较一下它们 效率的不同, 然後你就会知道你的选择是否正确了.

第二节: 使用目录

2.1. 目录: 前言

我们已经大略看过 DOS 和 Linux 在档案处理方面的不同. 在目录方面, DOS 用 \ 表示根目录, Linux 则是 /. 同样的, 巢状表示的目录, DOS也用 \ 来分隔每一层次 目录, Linux 用 /. 比方说以下路径:
        DOS:　　\PROGRAMS\C++\SOURCES\HELLO.CPP
        Linux:　/home/guido/papers/geology/mid_eocene.tex

相同的是, .. 表示上一层目录, . 表示现行目录. 记得一件事, 系统并不允许你在任何 地方 cd , rd, 或是 md. 每一个 user 都有一个自己的目录称作是 home, (这是系统管 理者分配的) 例如在我自己的 PC 上, 我的 home 是 /home/guido.

2.2. 对应 DOS 和 Linux 中的相关指令

DIR:　　ls, find, du
CD:　　 cd, pwd
MD:　　 mkdir
RD:　　 rmdir

- - EXAMPLES -

DOS　　　　　　　　　　　　　　　　　　 Linux

C:\GUIDO>dir　　　　　　　　　　　　　　$ ls
C:\GUIDO>dir file.txt　　　　　　　　　 $ ls file.txt
C:\GUIDO>dir *.h *.c　　　　　　　　　　$ ls *.h *.c
C:\GUIDO>dir/p　　　　　　　　　　　　　$ ls | more
C:\GUIDO>dir \*.tmp /s　　　　　　　　　$ find / -name "*.tmp"
C:\GUIDO>cd　　　　　　　　　　　　　　 $ pwd
        n/a - see note　　　　　　　　　$ cd
        n/a - see note　　　　　　　　　$ cd ~
        n/a - see note　　　　　　　　　$ cd ~/temp
C:\GUIDO>cd \other　　　　　　　　　　　$ cd /other
C:\GUIDO>cd ..\temp\trash　　　　　　　 $ cd ../temp/trash
C:\GUIDO>md newprogs　　　　　　　　　　$ mkdir newprogs
C:\GUIDO>md \progs\turbo　　　　　　　　$ mkdir /progs/turbo
C:\GUIDO>rd newprogs　　　　　　　　　　$ rmdir newprogs
C:\GUIDO>rd \progs\turbo　　　　　　　　$ rmdir /progs/turbo

附注: ~ 是 home 的一个缩写. cd ~ 可以使你瞬间回到自己的 home, 不论你在哪里. cd ~/tmp 会带你到 /home/your_home/tmp. 这样, 可以了解吗??

第三节: 软碟, 硬碟, 和类似装置

3.1. 使用软式磁碟

或许你从未想过, 但 DOS 的 FORMAT A: 作了比它看起来更多的事. 事实上, 当你键入 FORMAT 这个命令时, 它会:

1) 实际的去格式化磁碟;
2) 建立 A:\ 这个目录 (= 建立一个档案系统);
3) 使这个磁碟能够被使用者使用 (= mount 一个磁碟机).

这三个步骤在 Linux 中是分开的. 我们可以在 Linux 中建立及使用 MS-DOS 格式的磁碟, 但是当然还有其它的格式可用. 最常用的要算是 ext2. 以下是准备一份可用的磁碟之方法 (请先 su 为 root):

- - 格式化一张 1,44 Meg 的软碟 (A:)
        # fdformat /dev/fd0H1440

- - 建立一个档案系统:
        # mkfs -t ext2 -c /dev/fd0H1440
或
        # mformat a:
建立一个 MS-DOS 的档案系统.

在使用这张磁片前, 你需要先将这个磁片连同磁碟机 mount.
- - mount 一个磁碟机:
        # mount -t ext2 /dev/fd0 /mnt
or
        # mount -t msdos /dev/fd0 /mnt

现在你已经可以使用这张磁片了. 当你结束工作, 要拿出磁片前, 请你 *一定* 要 umount. (重要!)
        # umount /mnt
好, 你可以把磁片拿出来了. 很明显的, fdformat 和 mkfs 只要对未格式化的磁片进 行就可以了, 已作过的就不需要了. 如果要使用 B 磁碟机, 请参考前述的范例, 用 fd1H1440 和 fd1 替换 fd0H1440 和 fd0.

现在你从前对 A: , B: 的工作现在都移转到 /mnt 下了. 例如:

DOS　　　　　　　　　　　　　　 Linux

C:\GUIDO>dir a:　　　　　　　　 $ ls /mnt
C:\GUIDO>copy a:*.* \docs\temp　$ cp /mnt/* /docs/temp
C:\GUIDO>copy *.zip a:\zip　　　$ cp *.zip /mnt/zip
C:\GUIDO>a:　　　　　　　　　　 $ cd /mnt
A:\>　　　　　　　　　　　　　　/mnt$

不消说, 对软碟成立的方法, 对其它的 device 一样成立. 比方, 你可以 mount 另一 个硬碟或是光碟机. 稍微看一下 /dev 下的 device. 下面是 mount 一个光碟机的范例: 　　　　# mount -t iso9660 /dev/cdrom /cdrom

第四节: 量身订作一个 OS

4.1. 系统初始化相关档案

在 DOS 中有两个很重要的档案 -- AUTOEXEC.BAT 和 CONFIG.SYS. 当启动 DOS 时, 这两个档案负责一些系统的设定工作 , 诸如设定环境变数 PATH, FILES 等等, 甚至 呼叫其它必需在开机时载入的程式.

在 Linux 中也有一些类似工作的档案, 但其中有些却是相当的危险; 再你真正了解 你将要做的事之前, 请千万别去碰它. 无论如何, 我还是得告诉你那些需要特别谨慎 的档案:

FILES　　　　　　　　　　　　　 NOTES

/etc/inittab　　　　　　　　　　don't touch for now!
/etc/rc.d/*　　　　　　　　　　 ditto

如果你想做的是设定 PATH 或是其它的环境变数, 抑或修改 login 时的讯息, 呼叫一个 程式, 以下大概就是你要的:

FILES　　　　　　　　　　　　　 NOTES

/etc/issue　　　　　　　　　　　sets pre-login message 设定 login 前的讯息
/etc/motd　　　　　　　　　　　 sets post-login message 设定 login 後的讯习
/etc/profile　　　　　　　　　　sets PATH and other variables, etc. 设定环境变数
/home/your_home/.profile　　　　does whatever you want 这里可以随意加入你想要的

如果最後那一个档案(~/.profile) 存在, (注意到它是隐藏档), 那麽在你 login 之後 它的内含命令就会被执行.

范例 - 请看这个 .profile:

        # I am a comment
        echo Environment:
        printenv | more　 # equivalent of command SET under DOS
        alias d='ls -l'　 # easy to understand what an alias is
        alias up='cd ..'
        echo "I remind you that the path is "$PATH
        echo "Have a good day, "$LOGNAME

PATH 和 LOGNAME, 正如你所预料的, 是两个环境变数.

4.2. 程式初始化设定档

在 Linux 下, 一般来说所有的事都可以依照你的要求而作安排. 大多数的程式都有 它们自己的初始化设定档, 这些都可以由你来修改. 通常, 它们都以 .prognamerc 的 型式存在於 home 目录里. 在这里, 首先你可能需要接触的设定档有:

..xinitrc: 用来初始化 X Window System.
..fvwmrc: 初始化 fvwm 这个 window manager. 你可以在
/usr/lib/X11/fvwm/system.fvwmrc 找到范例.
..xfm/*: xfm (一个 file manager) 的设定档.
..Xdefault: 由 rxvt -- 一个终端机模拟程式 -- 所使用.

对於这些设定档, 或是你将来会遇到的其它档案, 请查 Man page.

第五节: 关於程式设计

5.1. 编写叙述程式 (Scripts): .BAT 档的聚合体

你或许使用过 .BAT 来当做一长串命令的缩写 (我常做这种事). 这件事可以藉由在 profile 或 .profile 中设定 alias 来达成. 但是, 一旦 .BAT 档太过复杂, 那麽你 会喜欢由 shell 提供的叙述语言 (Scripting language) : 它几乎和 Qbasic 一样强 大而且易用. 它可以使用变数, 可以拥有像是 while , for, case if.. then .. else, 的语法结构; 它还有其它的优点 -- 例如, 它可以当成是程式语言的替代品.

要撰写一个 script - 就像在 DOS 下写 .BAT 档一样 - 只要编写一个 ASCII 的档案, 内含你想要的指令, 然後储存, 再使用下面这个命令让它可以被执行:
        $ chgmod u+x <scriptfile>
当要执行时, 只要键入它的档名就可以了.

这里有个小小的警告: 系统内定的编辑器叫作 vi, 它有一点难以使用, 我想你应该也 会这样认为它有些烦人. 我不会在这篇文章中讨论它 -- 我自己也还尚未找到使用的窍 门 :p 请参考 Matt Welsh 的 "Linux installation... ", 109 页. 但你也可以使用其 它的编辑器, 如 joe 或是 X 下的 emacs. 这里只稍为说明一点你必需知道的 vi 知识 (至少让你可以 quit :p )

- - 加入一段文字可以用在文章中按下 'i';
- - 离开 vi 但不储存文章 : 请按 ESC 再打 :q!
- - 离开且存存 : 按 ESC, 再打 :wq

在 Linux 中编写 shell script 是一门大学问 -- 它几乎要一本书才能讲得详细. 本文不会再更深入的讨论这个问题; 但是, 以下提供了几个有用(希望是)的范例, 希望 能够使你对 shell script 有个初步的了解.

EXAMPLE 1: first_script

        #!/bin/sh
        # I am a comment
        # don't change the first line - it's got to be there
        echo "Today is `date`"
        echo "My name is "$0
        echo "You gave me the following "$#" parameters: "$*
        echo "First parameter is "$1
        echo "Have you grasped the trick?"

EXAMPLE 2: 2exe

        #!/bin/sh
        echo "making "$1" executable... "
        chmod u+x $1

EXAMPLE 3: backup

        #!/bin/sh
        echo "Copying files in ~/bak... "
        for name in $*
        do
          cp ${name} ~/bak
        done

EXAMPLE 4: fmta

        #!/bin/sh
        echo "I remind you that only root can format disks"
        fdformat /dev/fd0H1440
        mkfs -t ext2 -c /dev/fd0H1440
        echo "disk formatted."

EXAMPLE 5: mnta

        #!/bin/sh
        echo "I remind you that only root can mount disks"
        mount -t msdos /dev/fd0 /mnt
        echo "don't forget to umount when you've done."

5.2. 自己写个 C 程式

你应该不会期待在 Linux 有 GW/Qbasic 吧?? 在 Un*x 中, 系统内定的语言是 C, 不管你是喜欢还是讨厌它. 当然还有其它的语言可以用 (FORTRAN, Pascal, Lisp, Bacic .. 但没有 Turbo Pascal ^Q^ ).

假设你懂得 C.. 如果你曾经被 Turbo C++ 或是它在 DOS 下的兄弟们宠爱过, 那这里 有两句话恐怕不啻晴天霹雳: Linux 下的 C 编译器叫作 gcc, 但, 它没有 IDE 环境, 没有线上求助系统, 没有整合式除错器,..等等. 只有一个命令列的编译器, 但强大 且有效率. 以下这个命令可以编译你已写好的 hello.c :
        $ gcc hello.c
这样会产生一个 a.out 的执行档. 如果你想让 gcc 造出其它档名的执行档, 键入
        $ gcc -o hola hello.c
要联结一个程式库, 你要在 gcc 後加上一个 -l<arg> 的选项. 比如说要联结 math
library
        $ gcc -o mathprog mathprog.c -lm
( -l<arg> 会迫使 gcc 联结 /usr/lib/lib<arg>.a; 因此, -lm 会联结
/usr/lib/libm.a)

对小程式来说, 这是一个好方法. 但是若程式是由数个 source files 组成, 我们可能 会需要 make 这个程式. 假设我们已经写好一个语法分析程式 parser.c, 它 #include 了两个 .h : parser.h , xy.h. 现在, 有个 calc.c 需要使用到 parser.c 中的功能. 这样该怎麽办??

我们可以写一个叫作 makefile 的档案, 告诉编译器所有 source 和 object files 间的关系, 在这个例子里,

        #　This is makefile, used to compile calc.c
        #　Press the <TAB> key at appropriate positions!

        calc: calc.o parser.o
        <TAB>gcc -o calc calc.o parser.o -lm
        # calc depends on two object files: calc.o and parser.o

        calc.o: calc.c parser.h
        <TAB>gcc -c calc.c
        # calc.o depends on two source files

        parser.o:　parser.c parser.h xy.h
        <TAB>gcc -c parser.c
        # parser.o depends on three source files

        # end of makefile.

储存, 然後键入
        $ make
以便编译程式. 或者, 这个档案被存在 calc.mak 里, 那麽就必需
        $ make -f calc.mak
当然, 请参阅 Man pages 以得到更多的资讯.

此外, 某些函数的用法在 man pages 可以找得到, 例如
        $ man printf

第六节: 剩下的 1%

6.1. 使自己暂时脱离 root 的身份

用 root 来 login , 并且处理每天的工作实在不是一件好事情. 因为这个帐号相当 危险, 应该仅供系统维护时使用. 下面这个命令可以为你自己建立一个一般性的帐号. 用 root login, 再键入
        # adduser
然後输入系统询问的资料. (如果有你看不懂的问题, 请按下 <RET>. 这样系统将会 使用预设的资料.)

6.2. 建立虚拟记忆体

虽然 Linux 理论上只要 2M 就可以执行, 但是愈多的记忆体会使工作更顺利. X Window System 会要求至少 8M RAM , 否则它就罢工. 要使用虚拟记忆体来增加可用记忆空间, 请以 root 身份执行:
        # dd if=/dev/zero of=/swapfile bs=1024 count=8192
        # mkswap /swapfile 8192
        # sync
        # swapon /swapfile
接著把最後一行加入 /etc/rc.d/rc.local 中, 使每次开机时就会自动开启 swap.

6.3. 使用 tar & gzip

在 Un*x 中有著几个被广泛使用於保存或压缩档案. tar 是一个保存档案的工具. 它有 点类似 PKZIP 但并不会作压缩的工作 -- 它只是将许多档案包装成一个而已:
        $ tar -cvf <archive_name.tar> <file> [file...]
把 tar file 解开, 要用以下的命令:
        $ tar -xpvf <archive_name.tar> [file...]
如果欲检视 tar file 中的档案列表,
        $ tar -tf <archive_name.tar> | less
用 compress 或是 gzip 可以压缩档案. 压缩後档案就无法再使用除非解开来:
        $ compress <file>
or:
        $ gzip <file>
这样建立出来的压缩档会以 .Z (compress) 或 .gz (gzip) 作为延伸档名. 这些档案 无法再被 compress 或 gzip 再压缩. 想将档案解压缩的话, 请用
        $ compress -d <file>
or
        $ gzip -d <file>

请参阅 Man pages.

其它像是 arj ,zip 或是 unzip (PK??ZIP 相容) 的工具在 Linux 下一样找得到. 在 Un*x 的世界里, .tar.gz 或 .tgz 的档案就像 DOS 下的 .ZIP 一般普遍. 以下这个命令可以浏览 .tar.gz 档案中的档案列表:
        $ gzip -dc <file.tar.gz> | tar tf - | less

6.4. 安装应用程式

大多数的 Linux 软体都以 .tar.gz 的方式包装; 有些软体就可以在 / 下用这个命令 完成安装:
        # gzip -dc <file.tar.gz> | tar xvf -
档案会在正确的目录中解压缩 (目录亦会自动建立好). 看来不错, 不是吗?? :)
Slackware distribution 的使用者(其实其它的 distribution 也不差, 像是 redhat)
就有一个满有亲和力的安装程式 pkgtool.

其它的软体可能有它们自己的安装方试; 你可以找到说明的文件. 此外, 有些软体 是以 C 或 C++ source code 的方式来制成, 并未编成执行档. 这时就必须自行编译. 绝大多数的情形你只要打
        # make

很明显的, 你会需要 gcc -- 这个应该在所有的 distributions 中都有. 但是记住:
请用 root 身份完成以上这些软体安装的工作.

6.5. 你不能不知道的小技巧

让系统帮你键入命令: 按下 <TAB> 可以让系统自动补齐命令中未打完的字. 例如: gcc this_is_a_long_name.c ; 只要键入 gcc thi<TAB> 就够了. (当有数个使用以上 相同字元开始的档案时, 你必需给与一定数量的字元使系统可以判定到底你想要的是哪
一个).

回卷: 按 SHIFT + PAG UP 可以使萤幕回卷数页, 这视你拥有的 Video RAM 多寡而定.
更进一步的说, 当你要使用下面这个命令
        $ script <script_file>
这样会使得在萤幕上出现的任何东西都被复制到 script_file 中, 直到你使用 exit 这个命令为止. 这样就可以在稍後再来检视刚才的内容.

重设萤幕: 如果你不慎 more 或是 cat 一个像可执行档的档案, 我想你的萤幕应该会 充满了奇怪的符号. 用 reset 就可以解决这个问题:
        $ reset
或是依序键入 CTRL-V ESC c RETURN.

来自 kernel 的讯息: 看一下 /var/adm/messages (以 root 身份), 里面包含了 kernel 要告诉你的资讯, 其中有启动时出现的讯息.

6.6. 一些有用的程式

最重要的一件事就是, 要怎样找到这些软体. 我想大家都已经知道如何在网路中驰骋, 以及使用 archie 和 ftp. 这里列出三个最重要的 Linux 相关 ftp site:
sunsite.unc.edu, TSX-11.mit.edu, nic.funet.fi . 请使用距离你比较近的 mirror.
(ps. 国内的 nctuccca.nctu.edu.tw, linux.cis.nctu.edu.tw, ftp.ncu.edu.tw..etc)

at 可以让你在特定的日期及时间执行程式

delete-undelete 就像它们的名字一样 :)

df 会告诉你有关你的硬碟的资讯;

dosemu 能执行一些 DOS 的程式 (但非全部..ps. 我想应该是大多数了..) - 包含 Windows 3.x , 但需作些调整;

file <filename> 告诉你 <filename> 是哪一种档案 (ASCII 文字档, 可执行档, 包装後
的档案 ..等等);

find (参看 2.2 节) 是最强且有用的工具之一. 它能够找寻档案系统中, 所有符合 搜寻条件的档案, 并且对它作处理. 最常见的使用方法是:
        $ find <directory> <expression>
这里的 <expression> 包含了搜寻的标准和对目标档案的处理动作. 例如:
        $ find . -type l -exec ls -l {} \;
会找到所有的 symbolic links 并且显示它们联结的目的地.
        $ find / -name "*.old" -ok rm {} \;
则找寻所有符合 *.old 型式的档案, 然後询问你是否要删除它.
        $ find . -perm 755
搜寻所有存取权限为 755 的档案 (即可执行档)
        $ find . -user root
会找到拥有者为 root 的档案. 其它还有很多的用法, 当然, RMP :p

grep 可以在档案中找寻一个字串. 比如说
        $ grep -l "geology" *.tex
将列出所有包含 "geology" 这个字的 tex 档. 其馀请 RMP;

gzexe 将可执行档压缩, 但仍可执行;

joe 是一个很棒的编辑器. 用 jstar 可以启动它 -- 你会得到一个看起来像, 用起来 也像 WordStar 或是它的兄弟姊妹如 DOS editor 的编辑器;

lpr <file> 可以在背景列印档案. 用 lpq 可查看在列印序列中排队的情形;

mc -- 一个很好用的 file manager;

pine , 一个不错的 e-mail 程式;

sudo 使一般使用者做某些 root 才能做的事 (像是 format 或是 mount .. RMP :p )

uname -a 会告诉你系统目前的状况;

zcat 和 zless 可以帮助你阅读被 gzip 压缩的文字档 - 却不用先将它解压.
        $ zless textfile.gz
        $ zcat textfile.gz | lpr

6.6. 常用的档案, 与它们的延伸名称, 相关程式

在 Linux 里你会遇到许多型式的档案 -- 它们都有不同的延伸名称. 以下是一个大
略的列表:

..1 ... .8: Manual Pages, 由 man 来读取.

..arj: arj 产生的压缩档.

..dvi: TeX (後述) 产生的输出档. 用 xdvi 就可以阅读; dvips 可以用来将 .dvi
转换成 .ps 的 postscript 档.

..gif: 图型档. 用 seejpeg 或是 xpaint.

..gz: gzip 的压缩档.

..info: info 档 ( man page 的一种型式). 由 info 来读取.

..jpg,.jpeg: 图型档. 使用 seejpeg.

..ps: postscript file. 用 gs , 或是 ghostview 来阅读. (great !!)

..tgz,.tar.gz: 由 tar 包装, 再由 gzip 压缩的档案.

..tex: 经过 TeX 处理的文字档, TeX 是一个强大的排版程式. 许多的 distributions
都附有 tex.

..texi: texinfo 档. (和 .info 类似). texinfo 使用之.

..xbm,.xpm,.xwd: 图形档. 用 xpaint.

..zip: 由 zip 压缩包装的档案, 请使用 zip 和 unzip.

..Z: 由 compress 压缩的档案.

剧终 -- 现在...

恭喜你!! 你已经对 Un*x 有了最初步的认识, 而可以准备用 Un*x 来进行更多的工作了. 但仍要提醒你, 这样仍然不够, 你仍然需要多一点 Linux 的使用及尝试的磨链. 不过, 如果你只不过是要使用一些应用程式, 那麽以上的讨论我猜已经足够了..:) 虽然我现在 仍然对 Linux 懂得不多, 但是 Linux 已经可以帮我处理许多每天必需的工作了!

我相信你一定会迷上 Linux , 进而更进一步的学息它 - 每个人都这样的. 我猜, 有了 Linux , 你一定不会想念 DOS ! 虽然我并不敢奢望有太多的读者, 但我仍深切 的希望能够对阅读本文的读者有所帮助 :)

Disclaimer

"From DOS to Linux - Quick!" was written by Guido Gonzato, <Guido@ibogfs.cineca.it>, April 1996. Many thanks to Matt Welsh, the author of "Linux Installation and Getting Started", to Ian Jackson, the author of "Linux frequently asked questions with answers", to Giuseppe Zanetti, the author of "Linux - Il sistema operativo FREE SOFTWARE per personal computer 386/486", to all the folks who emailed me suggestions, and especially to Linus Torvalds and GNU who gave us Linux.

This document is provided "as is". I put great effort into writing it as accurately as I could, but you use the information contained in it at your own risk. In no event shall I be liable for any damages resulting from the use of this work.

This document can be freely distributed as long as:

- - it is distributed in its entirety, including this disclaimer and permission notice;
- - no money is charged for it;
- - it is not modified in any way without my permission.

Translations, prints, re-editings, or extractions from this document must be approved by me before being distributed. For any requests, suggestions, flames, etc., feel free to contact me. If you don't have e-mail access, my snail-mail address is:

Guido Gonzato - Via Monte Ortigara 19/a, 37127 Verona - Italy

Enjoy life!

                             Guido　 =8-)

中译感言

看了这麽多前辈们累积的心血,　心中总是有点不安.. 偶然间有这个机会做一点翻译的 工作, 还是万万不足以表答小弟心中对前辈们的感谢..
希望这篇文章能够对您有所帮助. 小弟第一次从事翻译的工作, 谬误在所难免.
关於本文的译文若是您有任何的疑问或是建议, 您可以到 freebsd.ee.ntu.edu.tw 的 Interpret 板讨论, 或是 e-mail
b84089@cctwin.ee.ntu.edu.tw 或
mglow.bbs@bbs.ee.ntu.edu.tw 告诉我, 小弟一定会尽力给予满意的答覆..
另外, 本文尽可在 TANet 上流传而不需作者(就是我啦)的同意.. 但如欲移作商业用途, 还是请先知会一下..:)

                                                mglow.bbs@bbs.ee.ntu.edu.tw
                                                                     on 970211


New Page 1

标题： ■ 如何在 Linux 下安装及使用 CD-ROM : CD-ROM 技术
姓名 ：Jeff Tranter,
Email：jeff_tranter@pobo
地址 ：
转摘 ：http://member.netease.com/

返回

2. CD-ROM 技术
有一本 CD-ROM 的操作手册这麽写著:

``CD-ROM is read-only memory, and audio compact disc system is
available as package-media of digital data for those purpose. For
playing audio CD, please insert Head-phone jack.''

(`` CD-ROM 是唯读记忆体, 音讯光碟系统是以做为读取数位资料之目的而存在. 要是想听 CD 唱片, 请把耳机插入耳机洞里. '')

别抓狂 ! CD-ROM 的世界没有你那本操作手册讲得那样令人糊涂.

CD-ROM 是 Compact Disc Read-Only Memory 的英文缩写, 它是一种以雷射光来读取在 (polycarbonate) 碟片铝层上的, 在电子显微镜下才能见到的小洞, 以储存大量资料的媒体. CD 唱片也用相同格式. 因为其高储存量, 及低廉的价格, CD-ROM 已成为日益风行的储存媒体了.

一片 CD-ROM 碟片约可储存 650MB 的资料, 相当於 500 张 3.5 □高密度软碟片或二十五万页的打字资料.

第一代的机型( 单倍速机种 ), 提供了约每秒 150KB 的传输率; 这个现在看来已经过时了. 硬体制造商早已推出二倍速(300kB/s), 四倍速(600kB/s), 六倍速(6X), 八倍速(8X) 及更高倍速的产品.

多数的 CD-ROM 机器使用小型电脑系统介面(SCSI), ATAPI 加强型 IDE 介面, 或厂商的专属介面其中之一. 它们基本上也提供从外部耳机或音源线放 CD 唱片的功能. 有些机器也允许直接从唱片读取数位格式的声音片段.

CD-ROM 通常以 ISO-9660 档案系统( 正式名称叫 High Sierra ) 的格式存在. 这格式限制档名以 MS-DOS (8+3 字元) 形式存在. Rock Ridge Extensions 使用了 ISO-9660 标准没定义的栏位以支援长档名及额外的 UNIX 形式资讯(如档案所有人, 符号连结等.)

相片光碟是由柯达(Kodak) 发展出的标准, 用来存放以数位方式记录的相片影像到 CD-ROM 上. 你可以在电脑上利用某些软体看这些图片, 操作它, 或送去列印. 也可以不要一次做完, 稍後再将新相片录进去, 这就是众所熟知的多段录制(Multi-session)能力.

最近又有 CD 烧录器(CD-R), 且越来越普遍. 它使用不同的介质及特殊的方法记录, 但做出的光碟片可以用任何 CD-ROM 读取.

在将来, CD-ROM 厂商将提供能增加数倍储存量的技术.


New Page 1

标题： Linux运行环境
姓名 ：
Email：
地址 ：
转摘 ：PC学堂--由肇庆怀集县晨光工作室sokoo制作

返回

Linux现已能运行于多种平台：Intel 386、486、 Pentium、Pentium Pro CPU及AMD、Cyrix 、IT 等兼容Intel的CPU;MOTOROLA 680x0 CPU、DEC ALPHA CPU、SUN SPARCs CPU以及POWER PC。
    硬件需求：
    最小配置：386SX/16 ,1MB RAM,一个软驱(这样的配置在现在除了夸口外已没有什么实际意义了)。
    可用配置：486或相当的CPU，4MB－8MB RAM可运行普通任务；16MB可以大大减少与硬盘的交换动作；32MB几乎感觉不到交换动作；64MB可以运行更大、更多、更繁忙的任务。
    硬盘需求：基本的UNIX工具、SHELL及其管理工具不会超过10MB；如果需要灌装全部的套件，如SLACKWARE、RED HAT等则需600MB－1GB。
    硬盘：支持ATAPI、SCSI接口硬盘。
    显示卡：支持标准VGA、SuperVGA和几乎市场上流行的所有显卡。
    网络：支持几乎所有的以太网卡、部分FDDI卡、部分令牌环。
    CDROM:支持ATAPI和SCSI接口的CDROM。
    声卡：支持多种流行声卡，尤其是Sound Blaster系列。


New Page 1

标题： ■ 如何在 Linux 下安装及使用 CD-ROM :支援的硬体机种
姓名 ：Jeff Tranter,
Email：jeff_tranter@pobo
地址 ：
转摘 ：http://member.netease.com/

返回

3. 支援的硬体机种
这一节列出了现在 Linux 所支援的唯读光碟机及介面. 资料来源是来自最新的稳定 Linux 核心, 在写这篇时是 2.0.31. 也有开发版(development) 的核心(2.1.x), 但并不被认为够稳.

这份资讯目前仅适用於 Intel 平台上的 Linux. 某些资讯也许对其它处理器架构有参考价值, 不过我对它们没有第一手的经验.

3.1. ATAPI介面唯读光碟机
ATAPI (ATA 封包介面 )是个控制储存设备的协定. 它是建立在给硬碟使用的 IDE 介面 (ANSI 正式名称为 ATA(AT attachment)介面 )上. ATAPI 常用於硬碟, 光碟, 磁带及其它设备上. 是目前最畅行的介面, 提供了 SCSI 的大部份功能, 但又不需要昂贵的控制卡及接线.

Linux 核心有一个应该是任何 ATAPI 相容光碟机都能驱动的驱动程式. 有 Aztech, Mitsumi, NEC, Sony, Creative Labs, 以及精英等厂商生产相容的机种. 如果你最近买了 CD-ROM, 特别是四倍速以上的, 几乎都是 ATAPI 的.

3.2. SCSI介面唯读光碟机
SCSI (小型电脑系统界面)是唯读光碟机的一种流行介面. 它的主要优点是相当快的传输速率, 可接数台设备, 还有多种电脑平台都支援它. 而缺点则是需要相对较贵的控制卡及接线.

任何区块大小是 512 bytes 或 2048 bytes 的 SCSI 光碟机在 Linux 下应该都能驱动; 而在市场上的大多数机种应该都在这□围内.

你也需要一片 Linux 支援的 SCSI 控制卡; 想要更进一步资讯, 请看 SCSI HOWTO.

注意有些光碟机附送一片修改过的, 和 SCSI 不完全相容的控制卡(例如说, 它无法在後面再接 SCSI 装置). 这些很可能不能在 Linux 下使用.

3.3. 专属介面唯读光碟机
有些光碟机使用专属介面; 通常此介面由音效卡提供. 也有些和音效卡上的等效的简易介面卡存在. 这些机器趋向於比 SCSI 的便宜及小型. 缺点是缺乏标准及扩充性.

注意有时候专属介面被错误地当成 IDE 介面, 因为就像 IDE 硬碟般, 它们使用以 PC/AT 汇流排为基础的简单介面. 有些厂商, 特别像 Creative Labs, 出售很多不同型的光碟机 , 并在其音效卡上提供专属, SCSI 及 ATAPI 介面, 更增添了这项困惑.

底下列出了已知 Linux 支援的专属介面光碟机. 新增的机器的驱动程式可能在新的发展核心里或是做成核心修补档. 後者通常可在 ftp://sunsite.unc.edu/pub/Linux/kernel/patches/cdrom/ 中找到. 也请注意核心中的 README 档中的最新资讯, 这些档案通常在 /usr/src/linux/Documentation/cdrom □.

专属介面 CD-ROM 机种

厂牌 机型 核心驱动程式 附注
------ ----- ------------- --------
Panasonic CR-521 sbpcd Note 1
Panasonic CR-522 sbpcd Note 1
Panasonic CR-523 sbpcd Note 1
Panasonic CR-562 sbpcd Note 1
Panasonic CR-563 sbpcd Note 1
Creative Labs CD-200 sbpcd
IBM External ISA sbpcd Note 2
Longshine LCS-7260 sbpcd
Teac CD-55A sbpcd
Sony CDU-31A cdu31a
Sony CDU-33A cdu31a
Sony CDU-535 sonycd535 Note 3
Sony CDU-531 sonycd535
Aztech CDA268-01A aztcd Note 4
Orchid CDS-3110 aztcd
Okano/Wearnes CDD110 aztcd
Conrad TXC aztcd
CyCDROM CR520ie aztcd
CyCDROM CR940ie aztcd
GoldStar R420 gscd Note 5
Philips/LMS CM206 cm206 Note 6
Mitsumi CRMC LU005S mcd/mcdx Note 7, 8
Mitsumi FX001 mcd/mcdx Note 7, 8
Optics Storage Dolphin 8000AT optcd
Lasermate CR328A optcd
Sanyo H94A sjcd
various various isp16 Note 9
MicroSolutions Backpack bpcd

注意:

这些机种可能以Creative Labs, Panasonic, Matsushita, 或Kotobuki 之名出售.
这一型基本上和 CR-562 是一样的.
也可能以 Procomm 之名出售.
这个驱动程式仅对 CDA268-01A 有效. 其它型式像 CDA268-03I 及 CDA269-031SE 都不是专属介面, 应该用 IDECD(ATAPI) 驱动程式.
也可能是 Reveal Multimedia Kit 的一部份
飞利浦 CM205 并不被此驱动程式支援, 在 ftp://sunsite.unc.edu/pub/Linux/kernel/patches/cdrom/lmscd0.4.tar.gz 有它的alpha版驱动程式.
也可能以 Radio Shack 之名出售.
这个有两个驱动程式, mcd 是旧版的, mcdx 是新版, 有更多的功能, 但比较不稳.
这个驱动程式是给接在 ISP16, MAD16 及莫札特音效卡上的光碟机用的.

如果上列的机器没被你的核心支援, 你可能需要换新版本的核心.

如果你的机型不是上列的, 特别是如果是最近买的, 四倍速以上, 它很可能是前面所述的 ATAPI 光碟机. 一个最常犯的错误就是认为一切接在声霸卡上的光碟机都应该用 SBPCD 驱动程式. Creative Labs 及多数厂商早已不卖专属介面的机种了; 它们遵从标准的 ATAPI/IDE 介面.

3.4. 印表机介面唯读光碟机
有些厂商出售用平行印表机介面来连接电脑的光碟机. 目前唯一为Linux核心所支援的这型机种为MicroSolutions Backpack.

另外有几种这型光碟机的核心驱动程式以核心修补档或可载入模组的形式存在. 请查照http://www.torque.net/linux-pp.html 得知最新消息.

3.5. 选择性的驱动程式
Zoltan Vorosbaranyi写了另一个选择性的Panasonic/Matsushita CR-56x驱动程式. 可以在ftp://ftp.tarki.hu/pub/linux/pcd/pcd-0.29.tar.gz 找到.


New Page 1

标题： 跟我学用Linux命令
姓名 ：熊　健
Email：
地址 ：浙江
转摘 ：PC学堂--由肇庆怀集县晨光工作室sokoo制作

返回

Linux虽然是免费的，但它的确是一个非常优秀的操作系统，与MS－WINDOWS相比具有可靠、 稳定、速度快等优点,且拥有丰富的根据UNIX版本改进的强大功能。下面，作为一个典型的DOS 和WINDOWS用户，让我们一起来学习Linux的一些主要命令，希望大家能尽快进入到Linux的世界里。
    一、启动
    Linux的启动操作过程和DOS相似(尽管如此，但作为操作系统本身，Linux在启动和退出时所作的工作要比DOS多得多),也可以通过按下Ctrl＋Alt＋Del三键进行热启动。不同的是Linux启动到最后时，需要进行登录。下面是一个典型的登录过程：
    ……
    RedHat Linux release 5.1
    Kernel 2.0.32 on an i686
    login:
    你键入：root<CR>后，计算机显示输口令(password:)，输入你的口令（如果是第一次启动，则是你在安装时所输入的口令)即可。当计算机出现一个“#”提示 符时，表明你登录成功!
    [root@localhost root]#_ 　　 Linux提示符
    C:\>_　　　　　　　　　DOS提示符
    二、常用的一些命令：
    1.显示文件目录命令ls(DOS下为DIR)
    在Linux中用ls命令显示文件及目录(当然，你仍然也可用DIR命令，只不过在这里的参数不同)。例如：#ls<CR>
    root mnt boot dev bin usr xiong tmp etc games
    看起来似乎简单(就相当于DOS中的“DIR/W”)，但你会发现你看到的有些难懂，连哪些是目录哪些是文件都不清楚，哪些又是可执行文件呢?不要紧，请输入：#ls －F＋root/ mnt/ boot/ dev/ bin/ usr/ xiong* tmp/ etc/ games / readme
    看清楚了吧，带*为可执行文件(相当于DOS中的EXE和COM文件)，带/为子目录，其它的为通用文件。另外，我们可用ls －l显示文件目录的详细情况(相当于DOS中的DIR命令)。千万注意区分大小写!!如LS －f;Ls等都是错误的。另外，ls命令还有许多参数，你可以用man ls或ls－－help去进一步了解。
    2.改变当前目录命令cd(DOS下为CD)
    在DOS中，我们可以用C:\>CD\MNT\cdrom或cd\mnt\cdrom
    C:\mnt\cdrom>cd ..或cd..或CD..
    C:\mnt>cd\或C:\mnt>cd \
    而在Linux中为cd /mnt/cdrom，目录名的大小写必须与实际相同，cd后必须有空格。
    pwd 显示当前目录
    cd .. 必须为小写，必须有空格
    cd / 总目录为/，cd与/必须有空格
    3.建立子目录mkdir(DOS下为MD或MKDIR)
    在Linux中只能用mkdir，可用相对路径和绝对路径，请比较：
    C:\>md xiong或md \xiong或md\xiong
    DOS系统
    [root@localhost /]#mkdir xiong或mkdir /xiong
    Linux系统
    4.删除子目录命令rmdir(DOS下为RD)
    在Linux中用rmdir命令删除子目录，例如：
    rmdir /mnt/cdrom 相当于rd \mnt\cdrom
    注意：同DOS一样，要删除的子目录必须是空的，而且必须在上一级目录中才能删除下一级 子目录。
    5.删除文件命令RM(DOS下为DEL或EARSE)
    在Linux中用RM命令删除文件，例：
    rm /ucdos.bat 相当于del \ucdos.bat
    6.文件改名命令MV(DOS下为REN或RENAME)在Linux中用mv命令给文件改名，例：
    mv /mnt\floppy p相当于 ren \mnt\floppy p
    说明：在Linux中的mv命令除了文件改名外，还有文件移动的功能，请看例子：
    mv /mnt/floppy /bin 相当于DOS中的命令 move \mnt\floppy \bin
    7.文件复制命令cp(DOS下为COPY)
    在Linux中用cp命令进行文件复制，例：
    cp /ucdos/* /fox 相当于copy \ucdos\*.* \fox
    注意：DOS中的*.*在Linux中用*代替。
    8.获取帮助信息命令man(DOS下为HELP)
    在Linux中用man命令获取帮助信息，例：
    man ls 相当于help dir
    ls －－help 相当于dir/
    9.显示文件的内容less(DOS下为TYPE)
    在Linux中用less命令进行文件显示工作，例如，我们要显示man1子目录下的mwm.lx的内容，只需输入：[root@localhost man1]#less mwm.lx<CR>即可。在Linux中，我们也可用另外一个命令“more”来显示文件内容，例如：more mwm.lx。你会看到，这两个命令非常相似，实际上，less命令的功能要比more强一些，你可以自己去摸索。在Linux中，还提供了两个DOS中没有的阅读文件的命令，它们是head和tail命令，分别用来显示文件的头部和后部的部分内容。使用格式为：head(tail) [m]<name>，缺省n时，显示10行，例如：
    head /usr/man/mwm.lx 显示文件mwm.lx前10行的内容
    head 15 /usr/man/mwm.lx 显示文件mwm.lx前15行的内容
    tail 17 /usr/man/mwm.lx 显示文件mwm.lx后17行的内容
    10.重定向与管道
    大家知道，在DOS中，我们可以通过重定向与管道方便地进行一些特殊的操作，如：dir>direct将当前目录放入文件direct中；type readme>>direct，将文件readme的内容追加到文件direct中；又如：type readme.txt|more,分页显示文本文件readme.txt的内容。在Linux中的重定向与管道操作同DOS中的操作几乎一样，上面两个例子在Linux中应为：ls>direct; less readme.txt|more(注：实际上，Linux中的more和less命令本身具有分页功能)。
    11.外壳程序(shell)：命令解释器(command)
    在DOS系统中，我们绝大多数用户都是用的command.com这个命令解释器。当然，你也可换用Norton或DOS4.0以后的dosshell。在Linux中，有好几种shell。常见的有：ash,bash,ksh,tcsh,zsh等，从上面的环境变量中SHELL=/bin/bash可以看出你用的是哪种shell，它位于何处。计算机默认的一般是bash。
     以上讲到的仅仅是与DOS功能相似的一些Linux命令，而作为一个多用户、多任务的操作系统，其强大的功能还远不止于此。希望更多的人用上这个优秀的操作系统,相信你一定不会后悔的。()


New Page 1

标题： ■ 如何在 Linux 下安装及使用 CD-ROM :安装
姓名 ：Jeff Tranter,
Email：jeff_tranter@pobo
地址 ：
转摘 ：http://member.netease.com/

返回

4. 在 Linux 下安装 CD-ROM 包含了以下步骤:

安装硬体
设置及重建 Linux 核心
建立设备档及设定启动参数
重新启动 Linux 核心
挂上媒体(片子)

下几节将会详细列出该有的步骤.

4.1. 安装硬体
按照厂商的说明书指示去安装硬体, 或请厂商帮你装. 详细情形会因你使用的介面及内接或外接而有所不同. 对 Linux 来说, 并没有特别的安装要求. 你也许要设定机器或介面卡上的跳线(jumper)以使之正常工作; 有些核心驱动程式有 README 档教你如何做.

就如同档案ide-cd中所描述的, ATAPI CD-ROM 在做排线上唯一的一台机器时, 应调成 'single' 或 'master', 不要调 'slave'. (虽然最新的核心已不是很必要这样做了.)

4.2. 设置及建立核心
当开始从 CD-ROM 安装 Linux 时你应该早就有一片 boot 或者 boot兼root 磁片. 如果可能的话, 你可以选有支援你的 CD-ROM 的 boot 磁片. 如果你找不到支援你的 CD-ROM 的启动磁片, 你可以:

从网路安装
启动DOS, 将 Linux 档案装在你的硬碟上
启动DOS, 一片一片地制作开机安装片
找个可以帮你做支援你 CD-ROM 的启动磁片的人

在 Linux Installation HOWTO 中对安装 Linux 有更详细的步骤. 如果你是买Linux CD-ROM, 经常也会有一些安装指示 (在 CD 盒的小封面底, 或在 CD 的档案里).

Linux 刚安装好时, 多数人基於以下原因, 会重新编译核心:

支援 CD-ROM 或其它硬体
升级至更新的核心版本
缩小核心, 节省记忆体资源.

有关建立核心的详情请见 Kernel HOWTO 我只针对和 CD-ROM 有关的稍微提一下.

很明显的, 你在 make config 时, 需要加入对你的 CD-ROM 的支援.

如果你有 ATAPI 的机种, 你对下面问题应回答yes

Enhanced IDE/MFM/RLL disk/cdrom/tape support (CONFIG_BLK_DEV_IDE) [Y/n/?]
Include IDE/ATAPI CDROM support (CONFIG_BLK_DEV_IDECD) [Y/n/?]

对 SCSI 机种, 回答以下问题'y':

SCSI support (CONFIG_SCSI) [Y/n/m/?]
SCSI CD-ROM support (CONFIG_BLK_DEV_SR) [Y/n/m/?]

当然也要加入对你用的SCSI卡的支援, 如这行提示:

Adaptec AHA152X support (CONFIG_SCSI_AHA152X) [Y/n/m/?]

对专属介面 CD-ROM, 使用相对应的驱动程式. 你可以用上一章列的表得知你用的光碟机该用那种驱动程式.

基本上所有 CD-ROM 碟片都用 ISO-9660 档案系统, 所以你也必须引入它:

ISO9660 cdrom filesystem support (CONFIG_ISO9660_FS) [Y/n/m/?]

虽说对 CD-ROM 运作不是必要的, 如果你有 Linux 支援的音效卡, 你也许会想在核心起动它, 以便将来使用. Sound HOWTO 将是一个很好的参考.

然後你应该照正常的步骤去编译及安装核心. 在你建造设备档及照下一节设定启动参数前, 不要急著用新造的核心开机!

ISO-9660 档案系统及几乎所有 CD-ROM 驱动程式都可被做成可载入模组. 这样子一些核心驱动程式就不必重开机即可载入及去除. 我建议你先不要做成模组. 可在(核心中)模组的文件及 Kernel HOWTO 中找到使用模组的方法.

如果列在这里的机器并没有被你的核心支援, 八成需要更新核心...

你也可能要自己抓核心之外的修补档, 这通常牵涉到修补核心. 当然, Kernel HOWTO 也解释了如何做.

注意新版的核心有个功能表式的设置程式, 可用 make menuconfig 做, 或是 X11 式的设置程式(用 make xconfig). 三种方法都提供线上求助.

(译注: 1.3.xx 版以上才有 menuconfig; xconfig 好像较早就有)

4.3. 建立设备档及设定起动时参数
核心使用特别的档案来辨识该用那个驱动程式. 如果你用的是一个发行的 Linux 套件, 安装後你也许已经有必需的设备档了. 例如说, 在 Slackware Linux 下, 有个选单型安装程式, 它包含了 CD-ROM 安装. 多数系统也有 /dev/MAKEDEV 这个 叙述档(script). 如果你不用这些方法, 你可用像以下的手动的方法做. 即使你用了 ``较自动'' 的装法, 仍然建议你再确认一下, 以确保它们的正确性.

你可以用指出你机器型式的 shell 命令建立设备档. 这应该可用 root这个身份完成. 注意有些 Linux 套件用的名称可能不太一样.

另外也建议你建立一个符号连结, 这会好记一点. 例如说, 对一台 IDE 介面的机器来说 , 可以如下般建立:

% ln -s /dev/hdd /dev/cdrom

如果你想放唱片, 你就要设定档案模式(不是符号连结档, 是真正的设备档!), 使其它人也可读取.

% chmod 666 /dev/hdd
% ls -l /dev/hdd
brw-rw-rw- 1 root disk 22, 64 Feb 4 1995 /dev/hdd

起动 Linux 时, 驱动程式要确定该设备是否存在, 这通常是靠自动侦测. 多数驱动程式会侦测好几个位址, 但因配备不同. 可能的设备冲突. 及硬体限制, 有时需要手动给予这些资讯. 多数驱动程式支援从核心的命令列取得这些资讯. 这可以手动输入, 或加在你的开机载入程式里. 例如说, 你用 LILO 当开机载入程式的话, 你可以在 /etc/lilo.conf 用 append 命令:

append = "sbpcd=0x230,SoundBlaster"

请看 LILO 的文件获得更多资讯.

下一节我讨论每一种驱动程式, 它的设备档, 启动参数, 及它们的具备的能力. 你也许只想看和你的机器有关的部份.

4.3.1. Sbpcd 驱动程式

作者 : Eberhard Moenkeberg (emoenke@gwdg.de)
支援多次烧录碟片?: 是 (但并非所有机种皆可)
支援多台机器?: 是
可做成可载入模组?: 可
可读取数位音轨?: 可 (只有CR-562, CR-563及CD-200)
能自动侦测?: 能
设备档: /dev/sbpcd, 主编号25
设定档: sbpcd.h
核心设定的问题: Matsushita/Panasonic CDROM support?
请另外阅读: ide-cd

sbpcd=<io-address>,<interface-type>

第一个参数是 I/O 基底位址(如0x230). interface-type 可以是 ``SoundBlaster'' , ``LaserMate'' 或 ``SPEA'' ,请看 sbpcd.h 中的提示. 要关闭此驱动程式, 用 sbpcd=0.

可照下面建立设备档:

% mknod /dev/sbpcd b 25 0

一片卡最大可以装到四台, 後三台的次编号分别由一到三. 如果你的界面卡更多, 可建立主编号 26,27,28. 最多可有 4 片卡, 也就是 16 台 CD-ROM 可用, 对一般使用者应该够了 :-).

请看 sbpcd 档案以获得更多关於此驱动程式的资讯.

如果你最近才买, 不要假设接声霸卡的就应该用这驱动程式. 现在 Creative Labs 卖的几乎都是 EIDE/ATAPI 的机种了.

4.3.2. Sonycdu535 驱动程式

作者 : Ken Pizzini (ken@halcyon.com)
支援多次烧录碟片?: 否
支援多台机器?: 否
可做成可载入模组?: 是
可读取数位音轨?: 不可
能自动侦测?: 不能
设备档: /dev/sonycd535, 主编号 24
设定档: sonycd535.h
核心设定的问题: Sony CDU535 CDROM support?
请另外阅读: sonycd535

这个驱动程式的命令列是这样的:

sonycd535=<io-address>

io-address 是基底位址(如 0x320). 不然你也可以写在 sonycd535.h 里编译.

设备档这样建立:

% mknod /dev/sonycd535 b 24 0

有些 Linux 套件用 /dev/sonycd 这个档. 旧版核心给它主编号 21, 确定一下你的设备档是正确的.

这个驱动程式原本只是修补, 不过现在已是标准核心的一部份了. 请参考 sonycd535 这档案取得进一步资讯.

4.3.3. Cdu31a 驱动程式

作者 : Corey Minyard (minyard@-rch.cirr.com)
支援多次烧录碟片?: 是
支援多台机器?: 否
可做成可载入模组?: 可
可读取数位音轨?: 可
能自动侦测?: 不能
设备档: /dev/cdu31a, 主编号 15
设定档: cdu31a.h
核心设定的问题: Sony CDU31A/CDU33A CDROM support?
请另外阅读: cdu31a

这个驱动程式的命令列是这样的:

cdu31a=<io-address>,<interrupt>,PAS

第一个参数是 I/O 基底位址(如 0x340). 第二个是中断号码(0 代表不用中断, 用轮询), 第三个参数只有在连接 Pro Audio Spectrum 16 音效卡时要加, 固定是PAS.

如果是作成模组, 命令列格式则有些不一样. 用 modprobe 或 insmod 命令时, 是以以下形式载入:

cdu31a_port=<io-address> cdu31a_irq=<interrupt>

io-address 是必要的, 而 interrupt 则可有可无.

设备档这样建立:

% mknod /dev/cdu31a b 15 0

详细资讯请参见 cdu31a 档案.

这个驱动程式也有个资讯网站台, 可在 http://www.infinet.com/~zureal/cdu31a.html 找到. 作者是 Jeffrey Oxenreider (zureal@infinet.com), 包含了许多此驱动程式的常见问题.

4.3.4. Aztcd 驱动程式

作者 : Werner Zimmermann (zimmerma@rz.fht-esslingen.de)
支援多次烧录碟片?: 是
支援多台机器?: 否
可做成可载入模组?: 可
可读取数位音轨?: 不可
能自动侦测?: 不能
设备档: /dev/aztcd0, 主编号 29
设定档: aztcd.h
核心设定的问题: Aztech/Orchid/Okano/Wearnes (non IDE) CDROM support?
请另外阅读: aztcd

核心命令列像这样:

aztcd=<io-address>

唯一的参数是 I/O 基底位址(如 0x340)

设备档如下建立:

% mknod /dev/aztcd0 b 29 0

注意这个驱动程式仅供 CDA268-01A 用. 其他机型如 CDA268-03I 及 CDA269-031SE 等不是专属介面, 应该用 IDECD (ATAPI) 驱动程式.

详细资讯请参考 aztcd 档案

4.3.5. Gscd 驱动程式

作者 : Oliver Raupach (raupach@nwfs1.rz.fh-hannover.de)
支援多次烧录碟片?: 否
支援多台机器?: 否
可做成可载入模组?: 可
可读取数位音轨?: 不可
能自动侦测?: 不能
设备档: /dev/gscd0, 主编号 16
设定档: gscd.h
核心设定的问题: Goldstar R420 CDROM support?
请另外阅读: gscd

核心命令列如下:

gscd=<io-address>

它用 I/O 基底位址作为其参数.(如0x340)

设备档可照下例建:

% mknod /dev/gscd0 b 16 0

详细资讯请参考 gscd 档案及http://linux.rz.fh-hannover.de/~raupach 以取得更多资讯.

4.3.6. Mcd 驱动程式

作者 : Martin (martin@bdsi.com)
支援多次烧录碟片?: 否
支援多台机器?: 否
可做成可载入模组?: 可
可读取数位音轨?: 不可
能自动侦测?: 不能
设备档: /dev/mcd, 主编号 23
设定档: mcd.h
核心设定的问题: Standard Mitsumi CDROM support?
请另外阅读: mcd

这是旧版的 Mitsumi 机器驱动程式, 出来很久了. 也许你想用新的 mcdx 驱动程式, 它提供更多功能, 但也许没这麽稳.

允许的核心命令列如下:

mcd=<io-address>,<irq>

参数分别是介面卡的 I/O 基底位址(如 0x340)及 IRQ 要求号码.

设备档如下建立:

% mknod /dev/mcd b 23 0

详情请参阅 mcd 档案

4.3.7. Mcdx 驱动程式

作者 : Heiko Schlittermann
支援多次烧录碟片?: 是
支援多台机器?: 是
可做成可载入模组?: 可
可读取数位音轨?: 不可(硬体不支援)
能自动侦测?: 不能
设备档: /dev/mcdx0, 主编号 20
设定档: mcdx.h
核心设定的问题: Experimental Mitsumi support?
请另外阅读: mcdx

这是新的实验性 Mitsumi 驱动程式. 旧的 mcd 可能仍然比较稳, 且仍然存在.

可接受的核心命令列:

mcdx=<io-address>,<irq>

参数分别是介面卡 I/O 基底位址(如 0x340)及 IRQ 要求号码.

设备档照下面方法建:

% mknod /dev/mcdx0 b 20 0

如果你最近买 Mitsumi 机器, 不要假设它应该用这驱动程式; 现在 Mitsumi 也只做 EIDE/ATAPI 机种了, 应该用 idecd 驱动程式.

详细资讯见 mcdx 档

4.3.8. Cm206 驱动程式

作者 : David A. van Leeuwen (david@tm.tno.) 支援多次烧录碟片?: 是支援多台机器?: 否可做成可载入模组?: 可可读取数位音轨?: 不可能自动侦测?: 能设备档: /dev/cm206cd, 主编号 32 设定档: cm206.h 核心设定的问题: Philips/LMS CM206 CDROM support? 请另外阅读: cm206

核心命令列像下面:

cm206=<io-address>,<interrupt>

第一个是基底位址(如 0x340), 第二个是中断号码.

照下面方法造设备档:

% mknod /dev/cm206cd b 32 0

更详细的资讯请见 cm206 档

4.3.9. Optcd 驱动程式

作者 : Leo Spiekman (spiekman@dutette.et.tudelft.nl)
支援多次烧录碟片?: 是
支援多台机器?: 否
可做成可载入模组?: 可
可读取数位音轨?: 不可
能自动侦测?: 不能
设备档: /dev/optcd0, 主编号 17
设定档: optcd.h
核心设定的问题: Experimental Optics Storage ... CDROM support?
请另外阅读: optcd

它接受下面的核心命令列:

optcd=<io-address>

参数是介面卡 I/O 基底位址.

设备档建立法:

% mknod /dev/optcd0 b 17 0

详细资讯见 optcd 档.

4.3.10. Sjcd 驱动程式

作者 : Vadim V. Model (vadim@rbrf.msk.su)
支援多次烧录碟片?: 否
支援多台机器?: 否
可做成可载入模组?: 可
可读取数位音轨?: 不可
能自动侦测?: 不能
设备档: /dev/sjcd, 主编号 18
设定档: sjcd.h
核心设定的问题: Experimental Sanyo H94A CDROM support?
请另外阅读: sjcd

核心命令列像下面这行:

sjcd=<io-address>,<interrupt>,<dma>

指出基底位址, 中断, 及DMA直接记忆体存取通道号码. (如 sjcd=0x340,10,5)

设备档以下面方法做:

% mknod /dev/sjcd b 18 0

详情见 sjcd 档案

4.3.11. Bpcd 驱动程式

作者 : Grant R. Guenther (grant@torque.net)
支援多次烧录碟片?: 不明
支援多台机器?: 否
可做成可载入模组?: 可
可读取数位音轨?: 不可
能自动侦测?: 能
设备档: /dev/bpcd, 主编号 41
设定档: bpcd.h
核心设定的问题: MicroSolutions backpack CDROM support?
请另外阅读: bpcd

这驱动程式的核心命令列如下:

bpcd=<io-address>

参数是使用的基底位址(如 bpcd=0x3bc)

设备档的建造法:

# mknod /dev/bpcd b 41 0

这个驱动程式已包含於2.1版的核心原始程式中. 请看bpcd档以得到最新资讯.

4.3.12. SCSI CD-ROM 驱动程式

作者 : David Giller
支援多次烧录碟片?: 是 (受限於机器)
支援多台机器?: 是
可做成可载入模组?: 可
可读取数位音轨?: 不可
能自动侦测?: 能
设备档: /dev/scd0, 主编号 11
设定档: cdrom.h
核心设定的问题: SCSI CDROM support?
请另外阅读: 无

对每一种不同的 SCSI 卡而言, 用的命令列参数不一样, 请参考 SCSI HOWTO.

可以接多台机器(至多接到 SCSI bus 能接的上限). 设备档主编号是 11, 次编号由 0 起算:

% mknod /dev/scd0 b 11 0
% mknod /dev/scd1 b 11 1

(译注: 在核心里叫做 /dev/sr0, /dev/sr1, 等, 但其实它们就是/dev/scdX)

此驱动程式本身不支援读取数位音轨功能, 然而有些 SCSI CD-ROM 有这能力, 可用 cdda2wav 程式达成(它使用通用 SCSI 核心介面).

4.3.13. IDECD 驱动程式

作者 : Scott Snyder (snyder@fnald0.fnal.gov)
支援多次烧录碟片?: 是
支援多台机器?: 是
可做成可载入模组?: 不可
可读取数位音轨?: 可 (在硬体支援的机种上)
能自动侦测?: 能
设备档: /dev/hd{a,b,c,d}, 主编号 22
设定档: cdrom.h
核心设定的问题: Include support for IDE/ATAPI CDROMs?
请另外阅读: ide-cd

这是 ATAPI CD-ROM 驱动程式. 它支援下面的命令列格式:

hdx=cyls,heads,sects,wpcom,irq
或
hdx=cdrom

这里的 hdx 可以是 {hda,hdb,hdc,hdd}, 或只有 hd, 表示下一台机器. 只有前三个参数是必要的(cyls,heads,sects), 例如说, hdc=1050,32,64 hdd=cdrom

要让 IDE 驱动程式认识你的 CD-ROM 可能有点麻烦, 特别是你有超过二台设备或超过一个 IDE 接头. 通常这需要由 LILO 送出正确的命令列参数. /usr/src/linux/Documentation/ide-cd这档案有详细介绍, 请仔细看.

最近的核心对多台 IDE 设备支援的更好了. 所以如果在旧核心上有问题, 升级也许能解决.

有些 IDE 介面硬体有问题, 但核心可以处理. 这种情形你要送参数给核心以启动此功能. 细节请见核心内文件.

4.4. 起动 Linux 核心
现在你可以用新核心启动了. 请注意看一下和以下的很像的讯息 ,它指出 CD-ROM 驱动程式有没有发现你的 CD-ROM( 讯息会因你用的 CD-ROM 种类不同而有变化)

hdd: NEC CD-ROM DRIVE:282, ATAPI CDROM drive

如果讯息卷动得太快了, 应该也可以用 dmesg 或 tail /var/adm/messages 来查看.

如果没有找到该机器, 那就代表有问题出现了, 请看``问题与解决''一节.

4.5. 挂上, 卸下, 及退出光碟片
若想挂上 CD-ROM, 把光碟片放进机器, 然後以 root 身份执行 mount 命令. (这里假设你已经如我们所建议的, 做了符号连结, 并且也有空的 /mnt/cdrom 目录)

% mount -t iso9660 -r /dev/cdrom /mnt/cdrom

现在你可以到 /mnt/cdrom 下去存取 CD 上的东西了.

你也许还想用其它的参数挂载 CD-ROM. 欲知详情, 见 man(8) 说明页.

你可以在 /etc/fstab 加进一行, 使 Linux 开机时就自动挂上 CD-ROM, 或给予一些挂载时的参数. 请看 fstab(5) 说明页.

注意, 若想要听 CD 唱片, 那就不要挂上它.

要卸下 CD-ROM, 以 root 身份执行 umount 命令.

% umount /mnt/cdrom

只有在没人存取 CD-ROM 时(包括没人目前目录在 CD-ROM 时) 才可以卸下该片子. 卸下後就可以退片了. 大多数机器都有退片钮, 不过也有一个软体退片程式 eject 可以靠命令就退出片子.

注意不要在碟片还在挂载中时退出片子( 这种状况因 CD-ROM 种类不同而可能或不可能发生.). 有些 CD-ROM 驱动程式可以在卸下时自动退片, 而挂上时自动进片. (你可以重新编译核心或用软体命令关闭这功能)

(译注 : 有些光碟机挂上时会把面板锁定, 就无法退片了, 当然不会不小心按到退片钮而将片子退出)

也有可能在放了 CD 唱片後, 无法挂上 CD-ROM 片子了. 这时你要用 CD 播放程式送出 ``停 止'' 命令後再尝试挂上. 这问题只在 sbpcd 驱动程式出现过.

Stephen Tweedie (sct@dcs.ed.ac.uk) 写了一个叫 Supermount 的程式提供了包括 CD-ROM 的可移动媒体的透明化挂载能力. 你可以在 ftp://sunsite.unc.edu/pub/linux/patches/diskdrives/找到.

4.6. 问题与解决
如果你按照本 HOWTO 的指示去做却还有问题, 有一些地方可以先确认一下. 这里由简单到复杂一条条列出来. 如果问题刚好出现在某步骤, 先解决这问题再进行下一步.

4.6.1. 第一步: 确定你用你自己编译的核心启动系统
你可以检查核心中的时戳, 看看是不是有包含支援 CD-ROM 的版本. 你可以用 uname 这个命令来检查:

% uname -a
Linux fizzbin 2.0.18 Fri Sep 6 10:10:54 EDT 1996 i586

或显示 /proc/version 档中的内容:

% cat /proc/version
Linux version 2.0.18 (root@fizzbin) (gcc version 2.7.2) Fri Sep 6 10:10:54 EDT 1996

如果这个时间戳记比你编译还早, 那你就是在用旧核心了. 你真的重开机过吗? 如果你 用 LILO, 是否忘记重装一次(一般执行/etc/lilo/install)? 用软碟开机的话, 做了一片新开机片, 并用它开机了吗?

4.6.2. 第二步: 确定需要的核心驱动程式有被编译进去
你可藉由观察 /proc/devices 来看编译进了什麽驱动程式:

% cat /proc/devices
Character devices:
1 mem
2 pty
3 ttyp
4 ttyS
5 cua
7 vcs

Block devices:
3 ide0
22 ide1

首先看你的 CD-ROM 驱动程式. CD-ROM 都是区块设备. 在这里我们看到主编号 22 的 idecd 驱动程式存在著.

% cat /proc/filesystems
ext2
msdos
nodev proc
iso9660

你也可以藉由看 /proc/ioports 档来看使用了那些 I/O port:

howto % cat /proc/ioports
...
0230-0233 : sbpcd
...

如果有东西你记得有编译但却没显示, 那麽就是你设置核心时出了问题. 从再设置及重建核心开始, 再重复安装核心的步骤.

4.6.3. 第三步: 起动时, 核心有侦测你的机器吗?
当核心起动时, 确定你的 CD-ROM 被侦测到了. 应该在开机讯息里可以看到. 如果讯息卷动太快, 看不到, 你可以用 dmesg 命令来叫回它:

% dmesg

或 者

% tail /var/adm/messages

如果开机没找到, 那一定某处有问题. 确定它开电源了, 并且连线也都接对了. 如果你的机器有位址的跳线(如 SCSI ID 或 562B 的 ID), 确定它设在正确位置上(例如, 若是只有一台则设 "drive 0") ATAPI CD-ROM 若是该 IDE 排线上唯一一台, 则必须设 "single" 或 "master", 不要设 "slave". 如果在 DOS 下很正常, 那你就可以相信硬体是正常的了.

有些驱动程式用自动侦测, 有些不用, 而且自动侦测也不是完全可信的. 使用你的驱动程式提供的核心命令列选项. 如果你不是很确定 I/O 位址或其它参数的话, 你可能要试好几遍. LILO 可以被设成允许你起动时手动输入参数.

另一个可能就是你用错驱动程式了. 有些文件将专属介面写成 IDE, 使人们误以为它是 ATAPI 的机种.

还有一个可能是你的机器(或介面卡)是那种需要 DOS 驱动程式来驱动它的所谓 ``相容型''. 这样的话, 你要先用 DOS 开机, 载入这个驱动程式, 再按 Control-Alt-Del 重起动 Linux.

如果本文件中没列出你的机器, 那可能在 Linux 下还没有驱动程式. 你可以看一下文後的参考资料表, 试著求一点帮助.

4.6.4. 第四步: 你 能 从 机 器 上 读 出 资 料 吗?
试著从 CD-ROM 读资料. 打入以下命令後, 应该可以看到 CD-ROM 的灯亮起来(如果有灯的话), 而且也不会回报错误. 照你的驱动程式的设备档, 并确定放了一片 CD-ROM 片子; 按下 Control-C 离开.

dd if=/dev/cdrom of=/dev/null bs=2048
^C
124+0 records in
124+0 records out

如果成功, 那核心就能成功的和机器通讯, 你可以跳到下一步.

如果不能的话, 问题可能出在设备档. 确定在 /dev 下的设备档的主编号及次编号如前面写的一样. 也检查一下它是否允许读取及写入权.

也有一点点可能是硬体问题. 可能的话, 在 DOS 下试试看, 确认是不是这状况.

4.6.5. 第五步: 你 能 挂 上 片 子 吗?
如果你能读取但不能挂上, 首先确定一下核心有没有支援 ISO-9660 档案系统. 如前所述, 看 /proc/filesystems 档.

注意一下, 请在挂上时用 ``-t iso9660'' 及 ``-r'' 选项. 还有在 CD-ROM 中放的是资料碟片, 不是唱片. 通常要以 root 身份执行挂上命令.

确定挂载点存在, 且是个空目录.

如果你想开机时自动挂载, 确定在 /etc/fstab 中有正确的一行.

如果你有跑 syslog, 那可能你看不见有些核心发出的讯息. 试试 dmesg 命令:

% dmesg
SBPCD: sbpcd_open: no disk in drive

错误也可能记录在 /var/adm 目录下的档案中, 全看你的系统怎麽设的.

4.6.6. 消除听音乐时的问题
如果你的机器读 CD-ROM 时没问题, 但听唱片就有问题, 这里提供些解决之道.

你需要些可放唱片的软体. 有些程式可能和你的机器不相容. 试试其它的或重新编译它. 一个找软体的好地方在 ftp://sunsite.unc.edu/pub/linux/apps/sound/cds/

有些 CD-ROM 不支援放唱片. 检查 README 档或原始码看看是不是这情形.

检查一下声音是不是会从耳机孔出来. 如果可以, 那八成和你的音效卡有关. 使用混音程式设定输入频道及音量. 确定你从 CD-ROM 接了条音源线到音效卡上. 也确认一下核心的音效卡驱动程式存在及可用(请看 Sound HOWTO).

4.6.7. 要是一切都没用呢?
如果你还有问题, 这里有一些最後的建议, 你可以试试:

小心地重读这份 HOWTO 文件
读文後列出的参考文件, 特别是相关的核心原始码的 README 档.
在 comp.os.linux 或其它 USENET 新闻组贴帖子, 问问题.
送一个问题到 Linux 通信论坛
用最新版的 Linux 核心
向店家求救
找你的 CD-ROM 厂商
寄封信给相关驱动程式的作者
寄信给我(作者)
叫出 emacs, 打入``ESC-x'',``doctor'' (:-)


New Page 1

标题：在RedHat 5.0中配置News Server

返回

估计大家都看了很多中英文的News Howto,结果一般是看得稀里糊涂
(我自己就是这样的感受:-),一是那些文档年代"久远",二是针对从源代
码编译开始的情况,三它们不是针对Linux来讲的.装了RH5.0后我发现配
置INN(我认为C-News软件已经"死"了)已经是很简单的事情了,下面把我
的一些粗浅的经验介绍给大家.欢迎指正并完善.

一,基本概念
关于UUNet,有很多文章和书籍介绍,这里没必要重复了.值得一提的
是,你的新闻服务器并不一定要连入UUnet,完全可以配置为一个Stand
Alone的News Server.在新闻服务器上读,写(post)文章的用户称为Reader,
Reader与Server之间是按照C/S方式来做的.当然可以把你的新闻服务器
与其他服务器相连,相互转发文章.一个新闻服务器向另一个服务器转发
文章,则第一个服务器被称为feeder.所以要记住news feed的行为发生在
两个服务器之间.
我们假定你的新闻服务器的名字为news.foo.com.cn(当然域名就应该
是foo.com.cn),在安装RedHat 5.0时选择了INN包并允许开机启动innd,
这时RedHat已经自动完成了大部分配置,你根本不需要去编译源码,也就
找不到config.dist,Install.ms等文件.安装完成后相关文件在以下目录:
/usr/sbin/innd
/usr/sbin/inndstart
/etc/rc.d/rc.news
/etc/news/*
/etc/crontab
/usr/bin/inews
/usr/bin/rnews
/usr/lib/news/*
/usr/lib/news/bin/*
/var/lib/news/
/var/lib/news/send-nntp
/var/lib/news/send-uucp
/var/spool/news/
/var/log/news/
/usr/doc/inn-1.7/
/usr/doc/inn-1.7/Install.*
/usr/doc/inn-1.7/FAQ/

二, 先把news.foo.com.cn配置为单独的新闻服务器
首先要提醒一点,凡是owner是news.news的文件,你要切换成news身份
去操作(RH5.0已经给你建立了news组和用户,你可以去看一下/etc/group
和/etc/passwd文件)---发出su news命令即可.其实对于/etc/news/下的
文件可以用root身份直接编辑(我用joe编辑没有问题).
1 配置/etc/news/inn.conf
如果你安装时正确地配置了网络,这一步可以省去,缺省如下:
##inn.conf -- inn configuration ....
##......
domain:foo.com.cn
organization: foo company news site
server:localhost
这样一般就可以了,若要了解细节,用"man inn.conf"看一下,照猫画虎
是个好方法.
2 配置/etc/news/nnrp.access
事实上INN包是一组程序来完成News的工作,而不是innd一个人做所有的
事,但innd总揽全局,除了send-nntp/send-uucp由cron带动以外,其他的工作都
由innd完成或发起,nnrpd就是一例. nnrpd完成news readers的服务.它的配置
文件是/etc/news/nnrp.access,控制哪些站点可以访问,是否带密码访问这个
新闻服务器.修改这个文件无需重新启动innd.缺省值如下:
# Default to no access
*:: -no- : -no- :!*
#allow access from localhost
localhost:Read Post:::*
这时你添加几行,允许更多的人访问你的站点,如加入:
stdin:Read Post:::*
*.foo.com.cn:Read Post:::*
注意每一行最后应没有空格.用"man nnrp.access"了解更详细的情况.配
置完以后用"/usr/lib/news/bin/inncheck nnrp.access"检查你的配置是否正
确:出错则有提示,正确反而什么都没有.
3 添加新闻组
站点上有哪些新闻组由/var/lib/news/active文件确定.你可以手工编辑
这个文件来添加新闻组(不要忘了切换到news身份哟),active文件的格式用"man
active"去看吧.推荐的方法是用"ctlinnd newgroup chinese.comp.XXX(or
whatever)"
ctlinnd这个命令很有用,后面可能还会介绍.比如你手工该了active文件,你就
需要用ctlinnd reload active "modify active"通知innd更新新闻组条目.
4 监管某个新闻组
在active配置文件里,最后一项可以是y,n,m,j,x,=XXX.XXX,当它是m时,
就表示此新闻组受到监管.监管的意思就是news reader发表到这个组的文章
先发到监管人的Email信箱,监管人审查后再把它贴到新闻组上去.它的配置文
件是/etc/news/moderators,这个功能用得比较少,用man看一下就行了(一路
man下去,配置就完成了:-).
5 启动innd
有些不重要的配置文件如/etc/news/overview.fmt无须修改,使用缺省
就很好. 负责启动innd的是/etc/rc.d/rc.news,但RH5.0已经把innd启动,所以
这时你无须做任何事,你的news站点基本正常运行了,用/usr/lib/news/bin/inncheck
-v
看一下,应该没有错误.现在要做的就是配置客户端(reader)软件来测试一下.
配置netscape没什么好讲的,如果用tin来读文章,需要注意几点:
a,如果以本地方式读,需要增加一个连接ln -s /var/lib/news/active
/usr/lib/news/active
b,如果以nntp方式读(tin -r),需要设定一个环境变量export
NNTPSERVER=news.foo.com.cn
或生成文件/etc/nntpserver.
c, tin的资源文件有$HOME/.newsrc,$HOME/.tin/tinrc等,用ls -a看.

三 与其他的news站点相互"灌水"
例如与news.freesoft.cei.gov.cn.为了简化说明,我们假定只能由freesoft向
news.foo.com.cn站点feed文章,即freesoft是你的上级(当你的News服务器可以向
freesoft发文章时,你们的关系是对等的,无所谓上级下级).进行这样的配置首先
要上级同意你的请求(否则他不修改他的配置:-).
1 获取上级的active和newsgroups
su news#切换为news身份
1) telnet news.freesoft.cei.gov.cn nntp > /tmp/newsgroups
list newsgroups
quit
2) telnet news.freesoft.cei.gov.cn nntp > /tmp/active
list active
quit
3) 编辑这两个文件,把你所想要的加入到你的/var/lib/news/active或
newsgroups文件中. 然后用ctlinnd reload active "modify"更新.
(用inncheck active先检查一下是好习惯).
2 允许上级站点feed文章到你的站点
修改配置文件/etc/news/hosts.nntp,加入一行
news.freesoft.cei.gov.cn:
即可,用man
hosts.nntp了解细节.相关文件hosts.nntp.nolimit,passwd.nntp等
视情况作出修改(如需要密码等).
发命令ctlinnd reload hosts.nntp "modify hosts.nntp"通知innd更新.
相应地,在news.freesoft.cei.gov.cn上也要加入news.foo.com.cn
更新innd:ctlinnd reload hosts.nntp "modify hosts.nntp"
3 配置/etc/news/newsfeeds

这个配置文件是最复杂的了,参数很多,好多我也没搞清楚(没耐性仔细看完man
newsfeeds:-).
它主要管news server之间feed的方式及distribution.
feed的方式一般有三种:
实时的nntplink/send-nntp/send-uucp.
nntplink又有logfile/channel/stdin几种
方式,不过我在我的机器上居然没有找到nntplink这个程序!
我对uucp不了解,估计现在用得
也不太多. nntp的传送方式又有几种:
1) 常规方式:pipe
2) xbatch,
类似于uucp的传送方式,batch->compress->transmission->uncompress->unbatch
3) streaming NNTP(streaming vs pipeling)

看来配置newsfeeds真是烦死了,不过我们还是用简单的方式来做,复杂的情况留到以后再说.

比如说在freesoft上的newsfeeds上加入一行:
foo:chinese.comp.*:Tf,Wnm:news.foo.com.cn
然后用ctlinnd reload newsfeeds "modify newsfeeds"更新innd缓冲区.
4 配置/etc/news/nntpsend.ctl

这个文件主要是为在newsfeeds中要求nntpsend的条目配置batch和innxmit参数.
所以要用man
innxmit要查看各种参数的细节.在我们这种情况,需要在freesoft
的nntpsend.ctl上加入一行:
foo:news.foo.com.cn::-S -t300
^^^注意这个"foo"就是newsfeeds里的sitename,必须要对应起来.

配置完成后把这个文件拷贝到/var/lib/news/下(要把它的owner改为news.news).
5 配置/etc/crontab
先用/usr/lib/news/bin/inncheck -v检查没有错误.
然后用手工发命令/var/lib/news/send-nntp foo news.foo.com.cn

一切正常的话可以修改crontab了.我注意到在/etc/cron.hourly/inn-cron-nntpsend

里已经调用了send-nntp,你只需要加入参数 foo news.foo.com.cn就行了.

运行一段时间没有问题的话,可以掉过头来你做freesoft的feeder,在你这一端进行

相应的配置,你们就可以相互转信了. 如果你与UseNet的一台news
server连上的话,你
应该也是UseNet的一员了.

这些只是我数天来的粗浅经验,并未严格检验,很多参数,格式没有讲.我只是把我的思路

提出来,希望对你有所帮助,或抛砖引玉.

注: 网络的配置不当会引起一些希奇古怪的问题,如我用tin
-r不能post文章,但用netscape
却可以,发现hostname返回的是news而不是news.foo.com.cn,修改/etc/sysconfig/network就

好了.难道netscape自己会send-ihave?
(linger于1999-06-11上载)


New Page 1

标题： ■ 如何在 Linux 下安装及使用 CD-ROM :应用
姓名 ：Jeff Tranter,
Email：jeff_tranter@pobo
地址 ：
转摘 ：http://member.netease.com/

返回

5. 应用
这一节简要地列出在 Linux 下 CD-ROM 的主要应用. 查阅 Linux软体大地图(LSM) 看看它们在何处及最新是第几版.

5.1. CD唱片播放程式
有好些程式有能力放唱片, 可从耳机洞或音效卡出声.

Workman
一个在 X11 下的图型化播放程式, 支援 CD资料库, 还有很多其它功能.

WorkBone
一个互动性的文字模式播放程式

xcdplayer
一个 X11 下的简单播放软体

cdplayer
非常简单的命令列播放器

Xmcd
一个 X11/Motif 的播放软体

xmitsumi
另一个给 Mitsumi 机器用的 X11 下播放程式

xplaycd
另一个 X11 的播放器, 包含一个混音器及 VU表程式

cdtool
命令列播放 CD 唱片的工具

以上有些程式可能程式里规定用某个设备档(如/dev/cdrom). 也许你可以用参数指示它用什麽设备档, 或你也可在 /dev 下建符号连结来指示. 如果将声音送到音效卡, 你或许会想用混音器来调音量或选择 CD-ROM 输入当录音音源.

5.2. 相片光碟
相片光碟利用 ISO-9660 档案系统存放专属格式的影像档. 并非所有 CD-ROM 都支援读取相片光碟.

Hadmut Danisch 写 的 hpcdtoppm 程式可将像片光碟档案转成可转移式点阵图(ppm, portable pixmap) 格式. 它可经由 ftp://ftp.gwdg.de/pub/linux/hpcdtoppm 取得, 或者也可以在 PBM(portable bit map)公用程式(在很多档案库中都都可取得) 里 面找到. (请查询 ``pbm'' 或 ``netpbm'')

Gerd Knorr(kraxel@cs.tu-berlin.de)写的 photocd 程式可将相片光碟转成 Targa 或者 Windows 及 OS/2 用的 BMP 档.

这位作者也写了 xpcd, 一个可处理相片光碟影像的 X11 软体. 你可以用滑鼠选择影像, 在小视窗中浏览, 或用五种解析度看它. 你也可选定影像的一部份, 只载入它们. xpcd 可 在 ftp://ftp.cs.tu-berlin.de/pub/linux/Local/misc/中找到.

ImageMagick 影像档操作程式也支援像片光碟档案. 它在 ftp://ftp.x.org/contrib/applications/ImageMagick/里.

5.3. Mkisofs
Eric Youngdale 的 mkisofs 套件允许你在硬碟上建立 ISO-9660 档案系统. 这样可以帮助你深入了解光碟, 也能在烧光碟前先测试其档案系统.

真正烧光碟的程式几乎都依厂商不同而有所不同. 它们也要求写资料时不能有任何中断, 所以像 Linux 这种多工作业系统并不是非常适合这种工作.

5.4. ISO-9660 公用程式
有些公用程式可以确认 ISO-9660 格式化的碟片是否正确. 你也许会发现在测试奇怪的 CD 时会有用. 这玩意可在 ftp://ftp.cdrom.com/pub/cdrom/ptf/ 中找到. 作者是 Bill Siegmund 及 Rich Morin.


New Page 1

标题： 在xteam linux下上网冲浪
姓名 ：赵江
Email：
地址 ：南京
转摘 ： http://www.cbinews.com/

返回

    以前接触过的Linux，在上网时总是感到有些不太方便，尤其是我们这些网虫最常用到的拨号上网，配置起来非常复杂。对于我们许多想接触Linux但又有上网嗜好的国内用户还是不太适合的。前不久笔者买到了一套Linux中文版Xteam Linux，并且试用了一下它的拨号上网功能，觉得和以前的Linux相比之下好用了许多。由于在Xteam Linux下专门设计了一个类似于Win95下拨号网络的Linux拨号工具：PPPtool，它所使用的网络协议也是TCP/IP协议，而且配置和使用都是在可视化的窗口界面下进行的，所以比较简单直观。至少那些那些能够熟练使用Windows95系统的朋友都可以轻松的掌握，现就将自己的拙见介绍给大家。
    想使用PPPtool的话，首先要在安装Xteam Linux时选择安装X，将PPPtool安装上，这样你的工作就会稍微轻松一些。但如果你为了节省硬盘空间或者是出于其它原因选择了最小安装，那么你还需要在安装了X和KDE之后才能使用PPPtool。要提醒大家的是，必须要安装PPP－2.3.5－1.i386.rpm文件包。
    拨号连接的配置和Windows95下的情况差不多，主要是设置下面这些参数：Modem连接的端口、Modem的最大传输速率、对方拨号服务器的电话号码、名字服务器的地址、拨号用户和登录口令。接下来就一一向各位Linux新手作一个介绍。
    1、新建拨号连接
    启动PPPtool后，双击“新建拨号网络图标”，即出现新建拨号向导窗口。输入一个拨号网络名称后，点击“确定”按钮，进入“Modem设置”窗口。在此你可以选择Modem所安装的端口和最大连接速率。与Windows95中不同的是，你要根据Modem所连接的串口来选择。如果Modem连接在COM1口上，就选择“/dev/cua0”，若是在COM2口就选择“/dev/cual”。再点击“下一步”，然后输入拨号服务器号码、用户帐号和口令，点击“下一步”，再点击“结束”按钮。现在拨号网络的窗口中就出现了你新建立的拨号连接了。
    2、查看拨号连接属性
    双击你刚刚新建的拨号连接图标，弹出一个窗口，一共有三个独立的页面，分别用来设置基本参数、拨号选项以及TCP/IP属性。“基本参数”页面中的选项是刚才新建连接时设定的，所以无需改动；“连接选项”页面中的选项我们一般不会用到，就使用它的默认值即可；至于“TCP／IP”页面中只有“域名服务器”一栏需要设置，大家可以将自己拨号服务器的IP地址输入。
    3、拨号上网
    在拨号连接图标上点击右键，选择“拨号”。此时会出现一个拨号状态条，同时Modem应发出一阵在Windows95下大家都比较熟悉的嘈杂声音。一会儿之后，就会出现对话框，同时告诉你连接网络成功了。但如果不幸拨号失败，在确定硬件(Modem、COM口等)无故障的前提下，大家可以从下面的几种原因中进行排查：账号的用户名或口令错误、电话线路忙、对方拨号服务器忙。
    还有一点要提醒大家的就是最好大家都使用root身份登录，因为笔者发现PPPtool只能由超级用户(root)进入，而笔者的其他朋友在使用自己的普通用户身份进入系统时就不行了，目前还不知道是什么问题，如果哪位Linux高手知晓其中的奥妙，还请指点一二。不过想回来我们自己在单机上安装的Xteam Linux应该都是可以用root登录的吧。
    在网络连通后，你就可以启动独特的Xteam Linux下附带的Netscape浏览器，来感受一番与Windows95截然不同的网络情结了


New Page 1

标题： ■ 如何在 Linux 下安装及使用 CD-ROM :常见问题与解答
姓名 ：Jeff Tranter,
Email：jeff_tranter@pobo
地址 ：
转摘 ：http://member.netease.com/

返回

6. 常见问题与解答
6.1. 没有 root 身份的人, 如何挂上及卸下光碟片
多数 mount 命令支援user选项. 假设你在 /etc/fstab 里加入了这样一行:

/dev/sbpcd /mnt/cdrom iso9660 user,noauto,ro

那麽普通使用者就可以像下面这样挂上或卸下这台机器的资料:

% mount /mnt/cdrom
% umount /mnt/cdrom

挂上程序将会加上一些额外选项以确保系统安全(例如: 程式不准执行, 片子上的设备档将失效(不予理会)); 在有时候这限制当然严了点.

另一个办法就是抓 usermount, 它允许非 root 之使用者挂上/卸下可移除设备, 如软碟及 CD-ROM 等, 但限制对其它设备的动作(如硬碟分割区). 它在主要的档案库都有.

在 ftp.cdrom.com 里有 mount.c 的原始码, 它允许一般使用者挂上/卸下 CD-ROM. 它必须 setuid 後才能这麽做.

(译注 : setuid 是指, 将执行档执行时的权限变成和执行档所有人相同. 普通执行档执行时, 权限是执行者的权限, 这样的话很多程式都不能跑(如: 你不能修改/etc/passwd, 所以不能变更密码.). 而如果setuid, 该档又是root所有, 这种执行档就有root权限了. (像passwd程式就是靠这个改密码的). 不过 setuid 反过来也可能是系统安全的主要漏洞.)

6.2. 为何我要卸下光碟时, 却得到 "device busy" 讯息?
如果有任何程序正在存取这机器, 包括它们的现行目录正在它上面, 那就不能卸下. 如果你实在不晓得那个程序正在使用这片光碟, 你可以像下例一样的用 fuser 命令:

% umount /cdrom
umount: /dev/hdd: device is busy
% fuser -v /cdrom
/cdrom: USER PID ACCESS COMMAND
tranter 133 ..c.. bash

6.3. 我如何将 CD-ROM 用 NFS 与其它电脑共享?
你需要在/etc/exports档中加入一个项目; 这样别的机器的使用者就可以挂上它了. 请看 exports(5) 这份说明页.

6.4. 我能用 CD-ROM 起动 Linux 吗?
当安装 Linux 时最常用的方法是用软碟开机片, 有些 Linux 组件可以直接由 DOS 起动光碟上的 Linux 核心.

Michael Fulbright (msf@redhat.com) 回报说若有正确的CD-ROM片子, ROM BIOS及 ATAPI CD-ROM机器, 从CD直接开机是可能的. 最新版的mkisofs也支援制作这种片子. 他也加入了一些修补, 以支援这种开机光碟的El Torito标准.

6.5. 如何从 CD 唱片直接抓取数位音轨?
Heiko Eissfeldt( heiko@colossus.escape.de )和 Olaf Kindel 写了一个公用程式可以读取音讯资料, 并将它存成 .wav 格式的声音档. 这个程式叫 cdda2wav.tar.gz, 可以在 sunsite.unc.edu 找到.

因为 CD-ROM 世代交替太快了, 很难列出哪些 CD-ROM 可读取数位音乐资料. 你最好的赌注是抓最新版的 cdda2wav 套件, 并读它的文件.

若想要更进一步的资讯, 请上 http://www.tardis.ed.ac.uk/~psyche/pc/cdrom/CDDA.html 这个站台看看, 还有参阅 alt.cdrom FAQ 的 reference 那节.

6.6. 为什麽 find 命令不太正常?
在没有 Rock Ridge Extension 的 ISO-9660 光碟上, 你需要在 find 後加上 -noleaf 这选项. 请参考 find(1) 说明页.

(在我的经验中几乎所有 Linux CD-ROM 都用 Rock Ridge Extension, 这问题的发生率应该极低.)

6.7. Linux 是否支援任何 CD-ROM 的烧录设备?
X-CD-Roast 套件(Linux 版)是使用 CD 烧录机的图形化前端介面. 此套件可在 sunsite.unc.edu 里的 /pub/Linux/utls/disk-management/xcdroast-0.95.tar.gz 找著.

也请参考 Linux CD-Writer mini-HOWTO 文件, 可在 ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/mini/CD-Writer 或 http://sunsite.unc.edu/mdw/HOWTO/CD-Writer.html 处找到.

(译注 : 有位仁兄(不知道叫什麽名字)有写他对 CD-ROM 烧录机的心得, 在 http://mail.ncku.edu.tw/~thlx/, 可以参观.)

6.8. 我挂载 CD-ROM 时得到: Read-Only file system 讯息?
CD-ROM 是只能读取的媒体. 旧版的核心你能用可读写方法挂上 CD-ROM, 然後尝试写资料进去并不会产生任何讯息. 在 1.1.83 版後, 这被修正为 CD-ROM 必须以唯读方式挂上( 就是说 mount 要有 -r 选项 ).

6.9. 我关机时, 为什麽托盘自动退出来?
在 1.1.38 版核心, sbpcd 在卸下片子时会自动退片. 如果你下了关机指令, 那麽挂上的 CD 就会被卸下, 然後就退出来.

这样子在换片时很方便. 如果托盘打开状态下你挂上或读取CD, 那麽它也会自动进片.

我发现有时这功能会造成问题(如 cdplay 及 workbone). 在 1.1.60 版核心你可以用软体决定要不要用这功能. 有个□例程式包含在 sbpcd 的文件里. (或者用 eject 程式).

6.10. 我有一片无法挂上的``特殊''片子
这片``特殊''片子看来像是 XA 碟片(就像相片光碟或用 CD-R 烧的 ``一次写入'' (one-offs) 片子)多数 Linux 核心 CD-ROM 驱动程式并不支援 XA 格式, 虽然你也许能在一些档案库找到一些修补.

sbpcd 驱动程式是支援 XA 的. 如果你用这驱动程式, 你可以依以下方法确定片子是不是 XA 的格式: 修改 sbpcd.c, 允许显示``主目录" (TOC)资讯(DBG_TOC). 然後做新核心, 起动它, 则每次挂上时都会显示 TOC( 由主控台或记录档). 看第一个数字, 如果是 20, 那就是 XA 片子, 如果是 00, 那就是普通片子. 如果 TOC 显示不同的轨, 那也是 XA 片子的信号.

(感谢 Eberhard Moenkeberg 提供以上资讯)

其它的无法读取 CD 可能原因:

它不是用 ISO-9660 档案系统(如 : 有的用 SunOS)
它是 CD 唱片
CD 有损坏或毁伤
你把光碟片放反了 :-)

6.11. 多片装 CD-ROM 在 Linux 下能用吗 ?
好几位使用者已报告 SCSI CD-ROM 多片机种运作顺利. 你也许要打开`` Probe all LUNs on each SCSI device'' 的核心选项. 至少有一位使用者发现也要加大驱动程式中的 SCSI 超时等待值(timeout value). Nakamichi MBR-7 的七片装及先锋牌的 12 片装已确定能用.

EIDE/ATAPI 的多片机种也能使用. 2.0 版核心对一些机器使用 CDROMLOADFROMSLOT 这个 ioctl 函式做了初步支援. IDECD 驱动程式的文件档包含了一个原始码可做一般程式选择换片槽的参考. 或者你也可以找最新版的 eject 程式.

6.12. 我收到 ``/cdrom: Permission denied'' 错误
有些 CD 有档案权限, 仅允许 root 读取它. 1995 年三月的 InfoMagic CD set 就是一个好例子. 这真的是很不方便.

底下的修补, 由 Christoph Lameter(clameter@waterf.org) 好心提供, 用它修补核心, 解决这问题.

From: clameter@waterf.org (Christoph Lameter)
Newsgroups: comp.os.linux.setup
Subject: Infomagic Developers Set: Fix for CD-Rom permissions
Date: 12 Apr 1995 20:32:03 -0700
Organization: The Water Fountain - Mining for streams of Living Water
NNTP-Posting-Host: waterf.org
X-Newsreader: TIN [version 1.2 PL2]

The March 1995 Edition of the Infomagic Developers CD-ROM Set has
problems because the information stored in the root directory
permissions is causing the following problems with using the CDs

(1995年三月版的InfoMagic Developers CD-ROM set有问题,因为它在根目录存取权限处
存的资讯造成以下使用CD的问题.)

1. Disc1 will always have the owner/group of 5101/51 and has write
access allowed (?)

(1. 第一片的拥有者/群组是5101/51,然後居然允许写入(?))

2. Disc2 and 3 have rwx set for root and no rights at all for any
other group/user. These discs cannot be accessed from any user other
than root! I run a BBS and I need to make them accessible for download
by others.

(2. 第二,三片对root有rwx权力,而对其它人/群组什麽也不给. 这两片光碟除了
root外任何人均无法存取! 我正在跑BBS,需要让别人能下载它们!)

I have seen several fixes to this problem already floating
around. Trouble is that these fixes usually change the rights for ALL
directories on the CD. This fix here changes ONLY the rights for the
root directory of the CD-Rom. If you want to run parts of Linux
directly off the CD you might run into trouble if all directories are
readable for everyone and if they are all owned by root.

(我已经看到这问题的几个解决之道了. 麻烦的是它们会影响光碟上所有目录的
存取权.我的修正只改了它的根目录存取权. 如果你想在光碟上跑东东,而所有目录
都可存取的话,会带来麻烦,因为他们是root所有.)

This fix will set the rights for the root directory to r-xr-xr-x and
the owner/group to the values indicated in the uid and gid options to
the mount command.

(这个修补会将根目录权限改成r-xr-xr-x,将所有人/群组改成mount那人的
uid及gid)

To apply:(用法:)
cd /usr/src/linux/fs/isofs
patch <**THIS MESSAGE**

and recompile kernel (you may have to fix up the patch by hand
depending on your kernel version).
(然後重编译核心(依你的核心版本,可能要手动修补.))

This fix should probably be incorporated into the kernel. What business
does data on a CD have to mess around with the permissions/owners of the
mount-point anyways?
(这个修正也许已放进核心了. 到底是什麽事,非要存放让挂载点的权限/所有人资料
变一团糟呢?)

--- inode.c.ORIG Wed Apr 12 17:24:36 1995
+++ inode.c Wed Apr 12 17:59:12 1995
@@ -552,7 +552,15 @@
these numbers in the inode structure. */

if (!high_sierra)
- parse_rock_ridge_inode(raw_inode, inode);
+ { parse_rock_ridge_inode(raw_inode, inode);
+ /* check for access to the root directory rights/owner CL */
+ if((inode->i_sb->u.isofs_sb.s_firstdatazone) == inode->i_ino)
+ { /* Change owner/rights to the ones demanded by the mount command */
+ inode->i_uid = inode->i_sb->u.isofs_sb.s_uid;
+ inode->i_gid = inode->i_sb->u.isofs_sb.s_gid;
+ inode->i_mode = S_IRUGO | S_IXUGO | S_IFDIR;
+ }
+ }

#ifdef DEBUG
printk("Inode: %x extent: %x\n",inode->i_ino, inode->u.isofs_i.i_first_extent);
@@ -805,4 +813,3 @@
}

#endif
-

注意以上的修补有些旧了, 可能无法完全乾净地修补最新的2.0版核心, 也请参考本篇後面提到的隐藏档的相关问题.

6.13. 我如何读懂 IDE CD 的核心错误讯息?
核心送给我的 IDE CD-ROM 驱动程式讯息像: ``hdxx: code: xx key: x asc: xx ascq: x'',这是什麽意思?

这是 IDE CD-ROM 的状态/错误报告. 预设状况下, IDECD 印出最原始的资讯, 而不浪费核心空间给错误讯息. 你可以改变它, 让它显示真正的错误讯息. 修改 /usr/src/linux/drivers/block/ide-cd.c , 将 VERBOSE_IDE_CD_ERRORS 改成 1, 并重编译核心.

6.14. 我如何测试我的 CD-ROM 是几倍速的呢?
有一个办法, 就是测试它要花多久读取 1500K 的资料:

% time -p dd if=/dev/cdrom of=/dev/null bs=1k count=1500
1500+0 records in
1500+0 records out
real 5.24
user 0.03
sys 5.07

正常的单倍速 CD-ROM 每秒传送 150KB, 所以约要 10 秒钟. 二倍速约要 5 秒钟, 四倍速的约 2.5 秒钟等等... real 时间也许是最好的值 -- 在上面情形指出它是二倍速机器. 你可以增加资料量得出更准确的值. (如果你担心受快取影响的话.)你也许应该多测几次, 求平均值.

6.15. 装好 Linux 後, 我的 CD-ROM 不能用了
最常见的症状是先用 Linux 安装时, Linux 承认你的 CD-ROM. 但装完後, 从软碟或硬碟开机却又不能用它了.

最大的可能就是多数 Linux 套件中, 装在硬碟的核心不一定就是和安装片用的一样. 你选了支援你设备的安装片, 它却给你在硬碟上装一个没有支援 CD-ROM 的 ``通用版''核心. 你可以照第四章所说的 ``问题与解决'' 去做. (从检查 /proc/devices 开始)

解法是重编译核心, 确定你需要的 CD-ROM 驱动程式及其它需要的部份(如 SCSI 卡, ISO-9660 档案系统)都编进去了. 如果你不知道怎麽做, 看 Kernel HOWTO

如果你安装时用了命令列参数(如``hdc=cdrom'')你要把它加进开机载入程式的设定档中(通常是 /etc/lilo.conf)

6.16. 在 CD 上有隐藏档, 我没办法读...
有些 CD 的一些档案有设定隐藏位元. 这些档案正常状态是看不到的. 不过如果你挂上时用了 "unhide" 选项, 那麽应该就可以读取了.(这个选项似乎没有文件记载过)

6.17. 哪儿找得到CD-ROM API的文件资料?
如果你想写自己的应用程式, 诸如CD唱片播放程式等, 你必须懂得Linux提供的应用程式介面(application programming interface, API)

原本CD-ROM核心驱动程式都是用自定的ioctl以支援这类机器的功能. 像 /usr/include/linux/sbpcd.h 这样的标头档就描述了这些. 由於很多驱动程式都是由别的驱动程式发展而来, 介面虽不完全相同, 但类似之处颇多.

最近, 由David van Leeuwen(david@tm.tno.nl) 发起, 建立一组CD-ROM用的共通 API. 这文件在 /usr/src/linux/Documentation/cdrom/cdrom-standard.tex. 已有几个核心驱动程式支援它了. 我预计下一个主要版本核心 (3.0?) 里, 所有 CD-ROM驱动程式都会符合这API.

我的书, Linux Multimedia Guide, 也提到了如何写CD-ROM程式, 特别是放音方面的. 请看"参考文献"那节.

6.18. 为什麽我不能看到Windows CD-ROM的长档名?
如果你有一片CD-ROM, 上面有Windows可看到, 但Linux看不到的长档名, 那麽这片光碟可能是使用Microsoft专属的Joliet档案系统格式. 请看下一个问题.

6.19. Linux支援Microsoft的Joliet档案系统吗?
Microsoft制定了一种叫Joliet的ISO CD-ROM档案系统延伸格式. 在写这篇时, 对Joliet 的支援正进行中, 可以在 http://www-plateau.cs.berkeley.edu/people/chaffee/joliet.html 或 ftp://www-plateau.cs.berkeley.edu/pub/multimedia/linux/joliet/ 找到修补档.


New Page 1

标题： 在linux下设置WWW Server
姓名 ：宁辛
Email：
地址 ：
转摘 ： http://www.cfan.com.cn/

返回

    编者按：许多人的生活已变得越来越简单：食物、水、空气、网络。这种简单源于一种“透明”—网络操作对于用户已变得越来越透明了。但在这种透明背后，却是越来越庞大复杂的网络操作系统，越来越不透明的管理。你看看本期专题的几篇文章便可明白了。

    其实关于网络操作系统真是罄竹难书。这里不过是冰山一角。但也许是最闪亮的一角：如何在Linux上设置WWW Server和建立DNS服务器，教你在SCO OpenServer和Windows NT、Windows 95中相互共享打印机的技巧，Solaris和NetWare5安装技巧。当然，UNIX操作系统还有很多，这里的几款无法代表全部。希望大家举一反三，能够获得一些启发。

    目前WWW Server软件有许多，能运行在linux下的也不少，有NCSA HTTPd Server、CERN HTTPd Server、pache、Netscape Fast Track Server、Zeus Server等。这些软件各有特色：NCSA（美国伊利诺斯大学的国家超级计算应用中心）是WWW Browser Mosaic发迹之地，也是Netscape公司的安德森成名的地方；CERN（欧洲原子核研究中心）是WWW的起源地，1989年蒂姆·贝纳斯-李正是在这开发成功了世界上第一个Web服务器和客户机。这两家推出的WWW Server功能齐全，成为同类软件的标准，再加上它们都是Freeware，因此刚一推出就大受欢迎。前几年，在linux下WWW Server软件使用最多的是NCSA和CERN，但这一两年来，后起之秀Apache却独领风骚，号称“WWW Server之王”。在最新的Red Hat、Slackware和 OpenLinux各版本中都包含了Apache。

    Apache是在NCSA的基础上发展起来的，因此这二者的配置文件十分相似。Redhat5.2自带的是Apache 1.3。

    一、安装

    Apache的安装十分简单。最好在安装red hat时，选择安装web server，这样即使你对编译操作不熟的话，也能轻轻松松把服务器架设起来。

    如果你想亲自编译源文件，那么你已经不是一个初学者，建议你直接去看how-to文档或其他资料。

    打开机器，进入X-Window系统后，启动Netscape Navigator，敲入本机的IP地址，如果出现“It worked”的欢迎页面，那说明服务器程序工作正常。你可以进行下一步配置工作。

    在不同的版本下，服务器默认的工作根目录也不一样。Red Hat默认的是/etc/httpd，配置文件在/etc/httpd/conf目录下，页面文件在/home/httpd目录下。

    二、设置httpd.conf、srm.conf、access.conf文件

    Apache安装成功后，在conf子目录下有四个文件：httpd.conf、srm.conf、access.conf、magic（请注意：在www-howto文档中，说第四个文件是mime.types，但在实际安装中，在conf子目录下是magic文件）。httpd.conf是Apache设置文件中的主文件，httpd程序启动时会先读取httpd.conf。srm.conf是数据配置文件，在这个文件中主要设置WWW Server读取文件的目录、目录索引时的画面、CGI执行时的目录等等。access.conf是负责基本的读取文件控制，限制目录所能执行的功能及访问目录的权限设置。

    下面将简单对这三个数据设置文件进行说明。

    1. httpd.conf文件

    TransferLog：如果你想知道你的网站上哪个页面最受来访者的欢迎，在一段时间内有多少人访问你的站点，你当然可以设置一个计数器，但每页都设计数器，太繁琐而且得到的结果不太可靠。最好的办法是查看相应log文件，TransferLog命令就是指定当浏览器要求服务器传送文件时记录到所设置的文件，可以根据此文件查看有哪些用户看过哪些HTML文件。可用一些程序分析这个文件的数据，得出监测各种有用的数据。默认的访问log文件是logs/access_log。

    ErrorLog：这个命令是指定当WWW Server运转过程中发生问题时错误信息存放到哪个文件。默认是logs/error_log。

    VirtualHost：这个命令是用来设置虚拟主机，即用一台主机执行多个域名的WWW Server。详细命令使用将在第三部分详细解释。

    2. srm.conf

    DocumentRoot：指定WWW Server存放html文件的根目录。WWW Server从硬盘中读取html文件传送给浏览器，并不是可从任一个目录中读取文件，而是从一个特定目录中开始读取文件，这个特定的目录就是由DocumentRoot命令来指定。red hat5.2中默认的目录是/home/httpd/html。

    如果用户访问http://www.swm.com.cn/netlife/index.html，此时WWW Server并不是从系统的根目录下的netlife目录中读取index.html，而是从/home/httpd/html/netlife目录中读取index.html文件。

    UserDir：如果要在WWW Server上给一些用户开设空间，搁放个人主页，最好不要把每个人的html文件都放到DocumentRoot目录中，用UserDir命令可让每个人的页面放置在自己的home目录中。默认的目录是public_html。

    如果UserDir设置的目录是public_html，而Username是yan，而该user的home目录是/home/yan，那你访问http://www.swm.com.cn/~yan/intr.html时所看到的intr.html文件存放在/home/yan/public_html中，而不是/home/httpd/html。

    3. access.conf

    如果你有些目录只想让某些人访问，或者只允许在特定的目录下允许CGI程序，这时就要对access.conf进行修改。

    Apache的存取控制方式有两种：一是“整体存取控制”，只通过access.conf来控制文件的设置，来限定目录所能执行的功能及存取目录的权限设置。二是“特定目录存取控制”，在特定目录中建立存取设置文件，这个文件名在srm.conf中的AcessFileName来决定，默认是.htaccess。例如某些目录中的文件只允许某些人访问，那可在该目录下建立.htaccess文件，当WWW Server读取该目录时便会自动读取.htaccess来决定是否读取执行或要求口令验证。这两种方式所使用的命令几乎相同，而且设置的格式也相同。

    Directory：说明要设置的目录，然后再用命令来设置目录的功能和权限。

    Options：设置目录可以执行哪些功能。有None、All、ExecCGI、Includes、Indexs、IncludesNoExec、FollowSymlink、SymlinksOwnerMatch等选项。如果想让某个目录可以执行CGI程序，那么应在Options命令中加上ExecCGI选项。

    Require：设置可以对所指定目录以指定方式来存取的Users和Group。该命令执行后，当读取该目录数据时，系统会要求输入Username和Password。

    * 忠告：修改完设置文件后，不要像在Windows工作那样，重启机器使其生效。要记住，你现在linux下，使用linux的好处之一就是不用再见到Windows 98那死机时的蓝屏以及不必对配置文件做了一点点修改就无聊而又频繁地重启机器。你的WWW服务器任何时候都有很多人在访问，频繁地重启机器将把你的客人赶跑。要学会不重启机器，而是重新启动一个正执行的程序（Process，严格一点应叫做进程、作业）。可以用kill命令来使程序重新启动。具体kill的使用参见有关文档。

    先用ps命令查看httpd的pid号，然后用kill命令杀死它，重新启动httpd。具体命令如下：

    linux〉 ps -x

    linux〉 kill -HUP 13668（13668是假设httpd的pid号，在实际使用中，不同的情况值也不同）

    这样就可将httpd重新启动，使修改的配置文件生效。

    看完上面一大堆命令，是不是有些烦，其实你不了解这些命令也无所谓，用系统默认设置也能正常工作。

    三、虚拟主机（Virtual Host）的设置

    作为系统管理员，若你只有一个IP地址，却有好几个域名，又要求访问每个域名都要看到不同的内容，那怎么办？总不至于为每个域名都配上一台服务器吧。这就要采用虚拟主机（Virtual Host）技术，幸好Apache就支持这种功能。虚拟主机有两种方式：IP－Based（基于IP式）、Name-based（基于域名式）。IP－Based指的是一个域名对应一个IP地址，而Name-based指的是多个域名对应一个IP地址。

    虚拟主机的设置并不复杂，只要在httpd.conf文件中加入相应的命令就行。

    下面是一个Name-based（基于域名式）虚拟主机的httpd.conf例子（编者注：因篇幅原因，我们这只给出了相关部分，全文见www.swm.com.cn）。IP为：192.9.188.20，两个域名分别是long.com.cn、short.com.cn。

    httpd.conf:

    NameVirtualHost 192.9.188.20

    〈VirtualHost www.long.com〉

    ServerAdmin webmaster@long.com

    ServerName www.long.com

    DocumentRoot /home/httpd/long/html

    ErrorLog logs/error_log

    TransferLog logs/access_log

    〈/VirtualHost〉

    〈VirtualHost www.short.com〉

    ServerAdmin webmaster@short.com

    ServerName www.short.com

    DocumentRoot /home/httpd/short/html

    ErrorLog logs/short.com-error_log

    TransferLog logs/short.com-access_log

    〈/VirtualHost〉

    NameVirtualHost命令指定在哪个IP上设置虚拟主机

    在VirtualHost命令中进行各个主机的具体设置。

    ServerAdmin命令是设定当WWW Server执行有问题时，会将ServerAdmin所设置的E-mail传送到浏览器，让使用者用该E-mail与系统管理员联系。

    ServerName命令是设置WWW Server的域名。

    四、提供个人主页空间、用户homepage的设定

    经常见到某些网站提供个人主页，显得很神气，其实你也可以开放你机器上的空间给别人，这很简单就能实现。只要你按照下面的提示对你的WWW服务器配置文件进行修改。

    给用户开放个人主页空间，一是要确定用户主页的存放目录，二是开放用户主页目录的读取权限。

    方法一：你以root的身份给用户chen开个帐号，系统自动会给chen分配一空间/home/user，而后在/home/chen的目录下建一public_html的子目录，子目录的属性要设成other可读和可执行的。

    接着修改access.conf。在文件的最后加上以下一段：

     〈Directory /home/chen/public_html〉

     AllowOverride None

     order allow,deny

     allow from all

     〈/Direstory〉

    而后，重新运行httpd，用户就可以通过http://www.swm.com.cn/~chen/访问chen的个人主页。

    这种方法的优点是方便，缺点是安全性太差。

    方法二：另一种办法是在/home/httpd目录下为用户chen建个目录chen。修改srm.conf中的UserDir为/home/httpd/*/html，接着重新运行httpd便可以了。


New Page 1

标题： ■ Linux Chinese HOWTO 中文版 : 前言
姓名 ：黄志伟 陈永升
Email：
地址 ：
转摘 ：http://member.netease.com/

返回

1. 前言
1.1. 简介
这是一篇介绍如何在 Linux 上使用中文的文件。它是 Linux 中文文件计画(Chinese Linux Documentation Project, CLDP)的一部份。然而，和其它 CLDP 文件不同的是，本文是第一篇，可能也是唯一的一篇，先用中文写成，再翻译成英文的 HOWTO 文件。 ^_^

本文件虽已力求正确，然而无法保证所有操作／设定□例都可以顺利的在你的系统上面进行。如果你依照本文件的说明而使你的系统发生任何问题或损失，作者都将不负任何责任。

希望由於本文的出现，能大量减少在网路上一再重复出现的问题: "为什麽我不能输入/看到中文?", "为什麽我 xxxx 装不起来?" 等等。虽然我也了解这是不太可能的...

1.2. 注意事项
本文中□例的使用以 sh/bash 为主。若你使用的是 csh/tcsh, 请注意其中的差异。例如对环境变数的设定，在 sh/bash 中是

# export TERM=vt100

在 csh/tcsh 中则是

# setenv TERM vt100

1.3. 最新版本
由於 SGML 文件格式的帮助，本文同时提供下面几种格式的版本

纯文字
HTML
PostScript
SGML
这些格式皆可自 ftp://ftp.phys.ntu.edu.tw/pub/CLDP/howto-translations/ 下载。

你也可直接在线上阅读本文的最新版本:

http://www.phys.ntu.edu.tw/~cwhuang/pub/os/linux/CLDP/Chinese-HOWTO.html
Linux 中文文件计画网页

英文版可自此取得:

http://sunsite.unc.edu/LDP/HOWTO/Chinese-HOWTO.html

1.4. 版权及声明
本文件的版权是属於黄志伟 <cwhuang@phys.ntu.edu.tw>。在非商业的用途下，你可以任意的拷贝，散布，流传这份文件的全部或一部份，而且我非常鼓励你这麽做，以便让这份文件能帮助更多的朋友(不过请别将我的名字给拿掉)。若要引用於商业用途，请先洽作者。

文件中提及的其它商标或名称是属於个别公司或个人所有。

1.5. 目标
本文希望能提供在 Linux 系统上使用中文的完整而自足的说明。只要是与 Linux 上使用中文有关的，我都希望能够包括进来! 然而，限於个人智识与能力，我知道这几乎是个"不可能的任务"。因此，有任何的不足或遗漏之处，请别在意，尽量告诉我!

1.6. 感谢
我要感谢 Hong Zhang <zhangh@earthlink.net> 撰写这份文件的第一个版本，它是本文件的基础。还要感谢由陈永升(cdchen) <cdchen@linux.ntcic.edu.tw> 完成了 显示及输入中文一节。

感谢陈建勋 <frank63@ms5.hinet.net> 将本文件译为英文。

更要感谢致力为 Linux 中文化的许多人们。因为他们的努力，今日我们在 Linux 上才有舒适的中文环境能使用。


New Page 1

标题： 用linux下的php3发E-MAIL

返回

必须先配制sendmail,然后可以用以下两种方法:
1.直接用mail函数
2.调用sendmail
exec("/usr/lib/sendmail -t << END
From: xxx@xxx.com
To: xxx@xx.com
Cc: ...,...,...,...
Bcc: ...,...,...,...
Subject: xxxxx
xxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxx
xxxxxxxx
.
END
");

(linger于1999-08-09上载)


New Page 1

标题： ■ Linux Chinese HOWTO 中文版 : 在 Linux 上使用中文的困难
姓名 ：黄志伟 陈永升
Email：
地址 ：
转摘 ：http://member.netease.com/

返回

2. 在 Linux 上使用中文的困难
本节试图将在 Linux 上使用中文可能遭遇的困难，做一通盘的描述。如此当你遇到问题时，可能比较容易找出关键所在。其实这里描述的困难也不仅仅出现在 Linux 上，许多也同时出现在其它系统，甚至整个电脑使用环境上。如果你没有兴趣或真的很著急的话，就直接跳到 显示及输入中文 那节吧!

我们知道中文字在电脑上是由两个位元组(two bytes)所编码组成的。最常见的编码方式有台湾地区所通行的 big5 编码，及大陆地区所使用的 GB 编码。而且开头的位元组几乎都是大於 128 的数值，也就是所谓 non-ASCII 码的□围(ASCII 是指小於 128 的编码)。

好的! 那又怎麽样呢? 问题就在这! 许多程式由於各式各样的原因，并未考虑到输入的资料可能是 non-ASCII 码的问题。它往往假设了它所要处理的资料都是 ASCII 码，更糟糕的是，当它遇到 non-ASCII 码时，常常假设它不存在，而将它的第八个位元截去! 这是所谓的 8-bit clean 问题。

例如，你的 telnet 程式总是认为你输入的都是七位元的 ASCII 码。当你输入中文时，每每将第八位元砍掉，所以都变成乱码。

网路上的通讯程式也常常只能传输七位元的资料。较早期的 sendmail 程式就是恶名昭彰的例子。 sendmail 只能接送含七位元的信件，导致我们在传送中文信件时，必须采用各式各样奇怪的 编码格式 (如 uuencode, base64, QP 等)，这往往又为收信者带来很大的困扰! (我常在想如果当初电子邮件的创造者能多一点点的远见，我们今天就会少许多的问题!)

在网路上这个问题显得更为复杂。即使你和你的收信人的机器都已经安装了可以处理中文信件的 sendmail 程式，对方仍有可能收到乱码信件。因为这封信在到达对方手中前可能经过好多部主机，如果其中一部机器的 sendmail 将第八位元截去，事情就完了! 对於 client/server 架构的程式，问题可能出在 client 端，也可能是在 server 端，或是双方都有。

除了无法处理 non-ASCII 码资料的问题之外，应用程式无法辨识中文编码也是一大问题。也就是，很多程式(即使能正确处理八位元的资料)都将一个中文字视为两个独立的位元组。这在许多情况下不会有什麽不好，但在某些场合下就显得很糟!

最显然的例子，即使你能正确的输入中文，可是当你按下倒退键(backspace)时，往往只倒後了一个位元组而将一个好好的中文字截成两半，剩下的那半当然就成了乱码。还有，文书编辑器可能在一个中文字中间换行而导致出现乱码，或是将一行很长的中文句子当作一个很长的英文字母而不换行，使得画面变得很难看。

还有更糟的! 某些中文字所含的特殊内码对某些应用程式具有特别的意义，这导致程式遇到这些内码时将产生严重的错误，或是当掉。

下面将试著为这些问题提出一些解决之道，但是这仍是片面的，不完全的，而且不能令人满意。也许只有当所有的软体都能为中文量身打造时问题才可能真正的解决。

话虽如此，愈来愈多的程式在设计上已经注意到国际化的问题，例如现在大部分主机的 sendmail 程式都已经能正确处理 8-bit 的信件 --- 因为不仅仅是传输中文信件需要 8-bit, 现在很多的多媒体邮件也都需要用 8-bit 传送。 很多软体 已经完全不需修改，或者只要开启一些特殊的选项，就能使用中文。同时也有愈来愈多人正在为软体的中文化而努力。请让我们拭目以待。


New Page 1

标题： ■ PHP4.03在linux下的安装
姓名 ：何志强
Email：
地址 ：
转摘 ： www.chinaasp.com

返回

....本文主要介绍PHP4.03及mysql3.23.9在redhat6.0系统apache1.3.11下的安装。 文中所汲及的软件都可以在本站的软件栏目下载。

....所需软件

php4.03源程序 C语言代码
mysql3.23 alpha源程序
apache 1.3.11源程序
phpmyadmin_2.0.5 管理MYSQL数据库的最佳工具
第一步 下载所需程序，安装MYSQL3.23程序。

....su为root新建一目录为程序安装的目录如
/server
在server下建目录mysql ,apache,
....将上面3个文件下载到/usr/src/下.

运行如下指令解开文件包

tar -zxvf php-4.0b3.tar.gz
tar -zxvf mysql-3.23.9-alpha.tar.gz
tar -zxvf apache_1.3.11.tar.gz
将phpmyadmin下载到/server下

同样运行
tar -zxvf phpMyAdmin_2.0.5.tar.gz

cd /usr/src/mysql-XXXX
这里XXXX是程序的版本号，下同，系统必需已安装C开发库

./configure -help
./configure -prefix=/server/mysql
make
make install
cd /server/mysql/bin
./mysql_install_db
到这mysql已安装成功
可以运行mysql数据库

/server/mysql/libexec/mysqld &

可以通过数据库查看程序mysqlshow查看数据库当前的状态

/server/mysql/bin/mysqlshow

第二步 安装apache及php4。

.... 如果系统中已有apache运行先关闭此服务

killall httpd

编译apache及php4, 每一个行号为一行

cd /usr/src/apache_1.3.x
./configure --prefix=/server/apache
cd ../php-4.0.x
./configure --with-mysql=/server/mysql --with-apache=../apache_1.3.x --enable-track-vars
make
make install
cd ../apache_1.3.x
./configure --prefix=/server/apache --activate-module=src/modules/php4/libphp4.a
make
make install
cd ../php-4.0.x
cp php.ini-dist /usr/local/lib/php.ini
apache及php4已安装成功下面配置apache及php4

配置php4
php4的配置文件为/usr/local/lib/php.ini文件

可以用vi 来编辑，如果你安装了MC也可以用MC来编辑

在[mysql]下修改

mysql.default_port = 3306
mysql.default_host = localhost
mysql.default_user = root

保存文件。

配置apache
apache的配置文件为/server/apache/conf/httpd.conf

去掉
#AddType application/x-httpd-php .php
行的注册号"#"加入行
AddType application/x-httpd-php .php3
保存文件。

配置phpmyadmin_2.0.5
在/server/phpmyadmin_2.0.5下找到config.inc.php3文件 从第10行起修改如下
$cfgServers[1]['host'] = 'localhost';
$cfgServers[1]['port'] = '3306';
$cfgServers[1]['adv_auth'] = false;
$cfgServers[1]['stduser'] = 'root';
$cfgServers[1]['stdpass'] = '';
$cfgServers[1]['user'] = 'root';
$cfgServers[1]['password'] = '';
$cfgServers[1]['only_db'] = '';
$cfgServers[1]['verbose'] = '';

修改第65行
require("english.inc.php3");为
require("chinese_gb.inc.php3");
保存此文件。

启动apache
/server/apache/bin/apachectl start

第三步测试

....在/server/apache/htdocs/下链接目录/server/phpMyAdmin_2.0.5为admin
....在流览器中打开http://localhost/admin/index.php3 这时该能连接到MYSQL的数据库中，你可以对数所库进行操作。这表明整个系统以能正常工作。 你也可以新建立一个php文件如下

文件名 info.php

//查看系统状况 文件开始

<? phpinfo();?>

//文件结束

在流览器中访问此页时你将得到有关PHP的运行资料.

注.本文中所有内容都在文中有关的平台上运行通过，不同的PHP版本可能会有所不同


New Page 1

标题： ■ Linux Chinese HOWTO 中文版 : 如何取得中文软体
姓名 ：黄志伟 陈永升
Email：
地址 ：
转摘 ：http://member.netease.com/

返回

3. 如何取得中文软体
3.1. 中文软体站台
本文件所提供的大部份中文软体都可从这些站台取得:

ftp://linux.cis.nctu.edu.tw/
ftp://linux.csie.nctu.edu.tw/pub/chinese/
ftp://chinese.linux.org.tw/pub/Chinese/
ftp://NCTUCCCA.edu.tw/Chinese/ifcss/software/
http://cnapps.ifcss.org/
http://irpslibrary.ucsd.edu/software/chinese_software/index.html

3.2. 善用 Archie
经常在网路讨论区上看到: "那里可以找到 xxxx...?" 之类的问题。其实网路上早就有很好的工具可以帮助你找到你要找的软体。这个系统叫做 archie。连到 http://archie.edu.tw/archie.html，输入你要找的软体名称。例如，你要找 xcin, 只要输入 xcin 就可以找到所有含 xcin 的软体名称。然後选择离你最近(网路距离)的站台下载即可。更详细的说明请自行参考 archie 的网页。

你也可以使用文字模式的 archie. telnet archie.edu.tw, 以 archie 签入，然後输入 prog FILENAME，例如:

Archie > prog xcin-2.1d.tar.gz
# Search type: sub.
# Your queue position: 1
# Estimated time for completion: 5 seconds.
working... =

Host linux.cis.nctu.edu.tw (140.113.166.117)
Last updated 08:47 27 Nov 1997

Location: /packages/chinese/xcin
FILE -rw-r--r-- 1106789 bytes 08:58 25 Jul 1997 xcin-2.1d.tar.gz


New Page 1

标题： ■ inittab的重要意义

返回

主题: inittab的重要意义
------------------------------------------------------------------------------
BBS水木清华站∶精华区

发信人: taichi.bbs@bbs.ee.ncu.edu.tw (小太极), 看板: Linux
标 题: Re: 多工....
发信站: 中央大学松涛风情资讯站 (Fri Mar 21 21:54:13 1997)
转信站: sobee!netnews.ntu!spring!News.csie.ncu!Evergreen

＞ ==>发信人: starship.bbs@bbs.ee.ttit.edu.tw (刺客的鱼), 信区: Linux
＞ 【 在 taichi.bbs@bbs.ee.ncu.edu.tw (小太极) 的大作中提到: 】
＞ : 如果你的 /etc/inittab 是安装以後就没改过的话, 那你的 vitual terminal
＞ : 只有六个 (alt - F1~F6), 那就是正常的。
＞ : 若你想要有多於 6个以上的v.t. 那你可以修改 /etc/inittab
＞ : 看到如下的设定:
＞ : c1:1235:respawn:/sbin/agetty 38400 tty1 linux
＞ : c2:1235:respawn:/sbin/agetty 38400 tty2 linux
＞ : c3:5:respawn:/sbin/agetty 38400 tty3 linux
＞ : c4:5:respawn:/sbin/agetty 38400 tty4 linux
＞ : c5:5:respawn:/sbin/agetty 38400 tty5 linux
＞ : c6:45:respawn:/sbin/agetty 38400 tty6 linux
＞ ^^^^^^^^^^^^^这些是什麽意思.请教一下...:)

inittab 档的设定通常格式如下:

id:runlevel:action:process
例： c6:45:respawn:/sbin/agetty 38400 tty6 linux

id就是代表名称通常是两个字元, 你可以自己取, 如上面的c6

runlevel是代表unix的执行模态, 通常有单工(单人模式)、多工(多人模式)
而你在单人模式或多人模可能会想执行不同的程式, 如多人模式的
文字介面, 多人模式的 x视窗介面, 就又可以有不同的执行模态
所以上面45 是指模态4(多人X视窗介面)及模态5(多人文字介面)
就执行这一行

action是指这行指令是要如何执行, 如boot(只有在开机时执行)、
once(在指定的执行模态只执行一次)、wait(转换模态时,
等原来的process终结後再执行)........
上面的respawn是指只要process一终结就重跑一次,vitual console
非常需要。

process就是执行的程式啦! 上例是agetty

(inittab 是 init 的起始设定档)
另外你有兴趣的话, 可以 man inittab 以及 man init

(shell98于1999-05-19上载)


New Page 1

标题： ■ Linux Chinese HOWTO 中文版 : 显示及输入中文
姓名 ：黄志伟 陈永升
Email：
地址 ：
转摘 ：http://member.netease.com/

返回

4. 显示及输入中文
如果你总是从 DOS 的中文系统或是中文 Windows 95 之类的环境下透过 telnet 来利用 Linux 主机的话，你是不需要看本节的。只有当你直接在一部 Linux 主机萤幕前操作时你才需要在 Linux 上安装中文系统。

4.1. xcin+crxvt
如果你常使用 X Window ，我们十分建议你采用 xcin 与 crxvt 组合的方式，来解决中文输入的问题。

XCIN 是 Xwindow Chinese INput 的缩写，是一个在 X Window 模式下执行的中文输入系统，因为 xcin 是利用 X Window 的 Server/Client方式执行的，所以你只要启动一个 xcin 输入视窗，便可以对应许多的 crxvt 显示虚拟终端机，占用系统资源比较小。也提供类似 DOS 环境下的忘形或自然输入法的智慧型输入选字环境。在早期，若你要安装 xcin, 你必须准备倚天中文系统，以供 xcin 安装程式来转换字形与输入法；在居士先生 <thhsieh@twclx.phys.ntu.edu.tw> 接手 XCIN 的维护工作後，已经解决这个麻烦的问题了。

目前 xcin 的最新版本为 2.3.01. 但这目前还只是个 beta 版本。如果你想要取得较稳定的版本，还是建议你去抓取 xcin-2.1d 来使用吧。

4.1.1. 软体取得
你可从下面地点取得 xcin 的原始程式

ftp://linux.cis.nctu.edu.tw/packages/chinese/xcin/xcin-2.1d.tar.gz
ftp://linux.cis.nctu.edu.tw/packages/chinese/xcin/xcin-2.3.01.tar.gz

4.1.2. 软体安装
这边我们以 xcin-2.3.01 为例。要安装 xcin-2.3.01 请您先取得 xcin-2.3.01.tar.gz 这个档案，并请在任何一个目录下解开。

# tar xzvf xcin-2.3.01.tar.gz
....
# cd xcin-2.3.01
# ./configure (请依照画面上的指示讯息，依序修改你的安装选项)
# make
# make install

这样就完成 xcin-2.3.01 的安装了。

另外，在 RedHat Linux 里面，您也可以取得由 Cd Chen 所维护的 xcin-2.3.01.i386.rpm 来安装 xcin 2.3.01。其方法如下:

# rpm -ivv xcin-2.3.01-3.i386.rpm

4.2. yact
yact 是在终端机模式下执行的中文显示、输入系统。与 chdrv 最大不同的地方是: yact 是透过 svgalib 程式函式库使用你的显示卡，如果你的 svgalib 没有包含你所使用的显示卡资料，可能无法使用这个系统。

yact 让人称赞的，就是其显示的字形为 24X24 ，比起其他的终端机中文输入系统而言，比较漂亮许多。另外，它在处理卷页功能时，也比较流畅许多。目前 yact 最新的版本是 yact-p4。

你可在此取得 yact:

ftp://linux.cis.nctu.edu.tw/packages/chinese/yact/yactp4.tar.gz

安装 yact 的方法也很简单，在你取得 yact 的原始程式档後，解开并且检查 Makefile 是否正确，接下来，直接打 make all install 就完成了执行档的安装工作。如果需要更详细的资料，请阅读 README 档。

接下来要安装字型。yact 使用 HBF 字型，但在 yact 的程式码中并未附字型档，你必须另外安装。如果你有倚天中文系统，yact 的作者建议使用它的字型。将 yact 原始程式码下的 fonts 目录中的 HBF 字型描述档 et24.hbf 复制到 /usr/local/lib/yact 目录下并改名为 hzfont.hbf。接下来将倚天中文的 STDFONT.24 SPCFSUPP.24 SPCFONT.24 及 ASCFONT.24 字型档也复制到 /usr/local/lib/yact, 并将 ASCFONT.24 改名为 12x24 即可。

如果你想使用免费的 HBF 字型亦可。将 256 字的 ASCII 字型改名为 12x24, 并将中文 HBF 字型的描述档改名为 hzfont.hbf, 连同字型图档一起放入 /usr/local/lib/yact 即可。

4.3. bcs16
由於 yact 需要使用 svgalib 1024x768 模式，而此模式在除 ET4000 系列之外的显示卡支援并不十分良好，使得许多朋友对於这个优良的中文系统不得其门而入。 bcs16 就是针对此缺点而由 yact 修改而来的。它仅需 640x480 解析度，因而能在大部份的显示卡上执行。

在此可取得 bcs16

ftp://linux.cis.nctu.edu.tw/packages/chinese/bcs/bcs007a.tgz

安装

解开并编译安装
# tar zxvf bcs007a.tgz
# cd bcs16
# make
# cp bcs16 /usr/local/bin

bcs16 采用 yact 的输入法表格，因此你可能要先按照上节安装 yact. 但是 bcs16 v0.05 以後已增加了独立的呒虾米输入法的支援，所以如果不需要其他 yact 的输入法，就不必先安装 yact. 你只要取得 DOS 版的呒虾米输入法表格 liubig5.tab 放入 /usr/local/lib/yact 即可。
将 data 目录下的档案放入 /usr/local/lib/yact 中，并取得合法的倚天字型 spcfont.15, spcfsupp.15, stdfont.15 放到同一目录里。
如果你还想看 GB 码或日文，韩文，到这里取回字型 cclib.16.gz cclib.16a.gz, jis.16.gz, ksc.16.gz 解压缩後放入 /usr/local/lib/yact
ftp://nctuccca.edu.tw/Chinese/ifcss/software/fonts/
如果你有倚天的造字档或中国海字集也可将它拷贝到 /usr/local/lib/yact/usrfont.15m.
执行 bcs16. 按 Alt-H 可以得到进一步的指令说明。

bcs16 的作者是 cnoize.bbs@bbs.cis.nctu.edu.tw.

4.4. chdrv
一种在主控台(console)上提供显示，输入的中文文字显示程式。chdrv 因为直接读写 tty 装置，所以必须由 root 来启动。目前 chdrv 是由 王佑中 <wycc@iis.sinica.edu.tw> 先生所维护，最新的版本为 chdrv-1.0.10。

4.4.1. 取得 chdrv
你可在

ftp://linux.cis.nctu.edu.tw/packages/chinese/chdrv/
分别取得 chdrv 的原始程式码 chdrv-1.0.10.tar.gz, 已编译的二进位执行档 chdrvbin-1.0.10.tar.gz, 以及字型档 chdrvfont.tar.gz.

4.4.2. 安装 chdrv
解开二进位压缩档

# tar xvzf chdrvbin-1.0.10.tar.gz
# mv chdrvfont.tar.gz chdrv-1.0.10/
# cd chdrv-1.0.10

请阅读 INSTALL.1.0 的安装说明修改 installbin。如果你使用 shadow password，你还必须更改 chinese.conf，将下面这行的注解去掉
LOGINPROGRAM /bin/telnet

再将这行变成注解
LOGINPROGRAM /bin/login

现在你可以执行安装程式
# ./installbin

4.5. cxterm
在 X Window 模式下执行的中文虚拟终端机，为最古老的中文显示/输入环境，提供各种中文内码模式，包含 BIG5，HZ，GB 等等。因为每一个 cxterm 虚拟终端机都必须载入中文资料，耗用的系统资源相当大。

4.5.1. 取得 cxterm
CXterm 的最新版本是 cxterm5.0.p3.tar.gz (5.0 版)。这个压缩档里已经包含了 CXterm 与中文字型。你可以在这里取得:

ftp://ftp.ifcss.org/pub/software/x-win/cxterm/
或在 sunsite 的 RPM 包装格式 cxterm-5.0-1.i386.rpm, cxterm-big5-5.0-1.i386.rpm, cxterm-gb-5.0-1.i386.rpm.
ftp://sunsite.unc.edu/pub/Linux/distributions/redhat/contrib/contrib-2.0.x/RPMS/

4.5.2. 安装 cxterm
解开压缩档:

# tar -xvzf cxterm5.0.p3.tar.gz

这将会产生一个新目录 cxterm-5.0，然後:
# cd cxterm-5.0
# ./config.sh

如果想让系统上所有的使用者都能使用 CXterm，你必须使用 root 的权限来执行 ``./config.sh''。然後你就可以按照下面的过程完成安装:
0. Read COPYRIGHT Notice
1. Compile, Install, and Configure "CXTERM 5.0" in One Step

2. Compile cxterm (not to install)
3. Install cxterm (after successful compilation in 2)
4. Install additional Chinese font(s) for your X window
5. Configure your account for using cxterm (after installation in 3)

x. Exit
Please choose (0/1/2/3/4/5/x) :

如果你想让一切自动完成，请选 1。然後，输入安装的目录。像我是使用 /usr/local/chinese。在这压缩档里还附有两个中文字型，选 1 和 3 都会自动安装这些字型。你还可以选 4 安装额外的字型。安装完之後，你还要将 cxterm 与 CXterm 放在搜寻目录之中。

# export PATH=$PATH:/usr/local/chinese/bin

CXterm 是一个 shell script，用来载入 X Window 资源与 cxterm。如果要使用 GB 编码，请下:

# CXterm -gb

或是使用 BIG5 编码:
# CXterm -big5

4.5.3. CXterm 的 Color patch
在 ftp://ftp.ifcss.org/pub/software/x-win/cxterm 下还有 cxterm 的 color patch。使用此修补档可使 cxterm 能显示 ANSI 的颜色。假设你将 cxterm 的原始档放在 /tmp/cxterm-5.0

# cp cxterm-5.0.p3-color.patch.gz /tmp
# gzip -d cxterm-5.0.p3-color.patch.gz
# patch < cxterm-5.0.p3-color.patch
# cd cxterm-5.0
# ./config.sh

4.6. XA (Xcin Anywhere)
XA 是 Xcin Anywhere 的缩写。它是一个让你在一般的 X Window 软体中利用 xcin 来输入中文的小工具。若配合 CXWin 或 XA+CV 则可让原本不支援中文的软体可显示并输入中文，这样 xterm 就自动变成 cxterm 了，酷吧? 不过 XA 目前仍不十分稳定，使用它你必须自行承担风险。要使用 XA, 你必须先安装好 xcin. 你可在此取得 XA:

ftp://linux.cis.nctu.edu.tw/packages/chinese/xcin/XA/

解开压缩档。由於 XA-0.3b 的安装程式有些小瑕疵，在某些系统上可能会失败，因此请先修改 guess_x11.in, 将这行:

XA_LIBX11=`ldd @XTERM@|grep libX11.so|@AWK@ '{print $3}'`

改为
XA_LIBX11=`ldd @XTERM@|grep libX11.so|head -1|@AWK@ '{print $3}'`

然後执行 ./configure, 如此会产生 mk, config.h. 再来执行 ./mk 来编译。若成功的话打入 ./mk test xterm, 试试可否在 xterm 里叫出 xcin 并输入中文。如果没问题的话可以将 wrap.so 复制到 /usr/local/lib/. 使用方法为:
# export LD_PRELOAD=/usr/local/lib/wrap.so
# netscape &

再来按照一般使用 xcin 的方法使用即可。

XA 的作者是 weijr.bbs@bbs.ntu.edu.tw.

4.7. 新增输入法
目前常见的输入法表格有两种格式: tit 及 cin. 这两种都是纯文字格式(换句话说你可以直接用文书编辑器来观看)。但各个中文系统为了加快搜寻速度，多半提供工具程式将纯文字格式转为特殊的二进位档。如果你要安装某种输入法，必须取得它的 tit 或 cin 表格，或是转换後的格式。

以下呒虾米输入法为例，分别说明如何在各中文系统中加入呒虾米输入法: 下面所提到的输入法表格都可在 ftp://ftp.cis.nctu.edu.tw/UNIX/Chinese/Boshiamy/ 取得。

4.7.1. xcin
利用 xcin 的工具程式 cin2tab 将 cin 表格转换为 tab 档:

# cin2tab boshiamy.cin

它会产生 boshiamy.tab 及 boshiamy.tab.rev 两个档案。将它放到 xcin 的目录中。启动 xcin:
# xcin -in9 boshiamy.tab

然後用 CTRL-ALT-9 即可叫出呒虾米输入法。

4.7.2. yact & bcs16
yact 使用与 cxterm 相同的 cit version 2 输入法表格。你可以使用 yact 附的 tit2cit 工具将 boshiamy.tit 转换为 cit 表格。

再来将 boshiamy.cit 放入 /usr/local/lib/yact 并为其建立一符号连结:

# ln -s boshiamy.cit 9

然後用 CTRL-ALT-9 即可叫出呒虾米输入法。

4.7.3. chdrv
首先将 boshiamy.tbl 放到 /usr/local/lib/chinese. 再来修改 /etc/chinese.conf, 将 INPUT 一节加入呒虾米输入法的设定:

--------------------------------------------------------------------------------

BEGIN INPUT
PHONETIC /usr/local/lib/chinese/phone.def
MULTI /usr/local/lib/chinese/boshiamy.tbl
END INPUT

--------------------------------------------------------------------------------
最後利用 chdrv 的工具程式 chconfig 使 /etc/chinese.conf 的内容生效。

4.7.4. cxterm
用 cxterm 的工具 tit2cit 将 boshiamy.tit 转为 cit 档或 citnf 档，然後修改 .Xdefaults，设定一个启动呒虾米的组合键。详细的安装与使用，请参阅 cxterm 的技术文件。

4.8. 中文输入问题
在我们完成中文系统建立的工作，你已经可以在你的 Linux 机器上面显示中文了。但如果你使用中文化的文书编辑软体，你会发现，你的 Linux 只能显示中文，却无法接受中文的输入工作。如果你想要改进这个问题，你必须自己修改两个地方，使 Linux 系统可以接受中文的输出与输入工作。首先你必须要在你使用的 Shell 起始档增加 locale 的设定 (关於 locale 详情请看 locale mini-HOWTO)；另外也得在自己家目录中 (Home directory) 的 .inputrc 档 (如果你的家目录中并未有这样的档案, 请自行建立) 增加关於输入的设定。以下把 Shell 起始档与 .inputrc 相关设定公开如下，你可以参考使用：

Bash Shell: 请在 /etc/profile 增加下面的内容：

--------------------------------------------------------------------------------

stty cs8 -istrip
stty pass8
export LANG=C
export LC_CTYPE=iso-8859-1

--------------------------------------------------------------------------------

Tcsh Shell: 请在 /etc/csh.login 或 /etc/csh.cshrc 增加设定如下:

--------------------------------------------------------------------------------

stty cs8 -istrip
stty pass8
setenv LANG C
setenv LC_CTYPE iso-8859-1

--------------------------------------------------------------------------------

$HOME/.inputrc 档增加设定如下:

--------------------------------------------------------------------------------

set convert-meta off
set output-meta on

--------------------------------------------------------------------------------

最後，请你自己准备一个已经包含中文字的档案，利用 grep 工具程式来搜寻其中的文字。如果可以找得到，表示你的 Linux 系统已经可以处理中文字了。


New Page 1

标题： ■ 用比较法学Linux基本命令
姓名 ：孙小东
Email：
地址 ：第一汽车集团公司职工大学
转摘 ：

返回

用比较法学Linux基本命令

---- 随着中文版的Linux的诞生,Linux这个诞生于网络,发展于网络的开放式操作系统已经步入我们的世界,它是由芬兰大学生Linus Torvalds于1991年基于Unix系统开发的,并经众多爱好者、公司的努力和支持已经成熟、壮大起来了。它具有Unix系统的可靠性、稳定性、多任务性以及强大的网络功能，吸引了广大电脑爱好者。为使大家能更好、更快地熟悉、深入到Linux系统中来，将Linux的基本操作与我们所熟悉的DOS操作中相似的命令比较，从以下几方面进行基本命令的学习：
---- 一、基础知识

---- 1．开机进入

---- Linux系统的开机同正常的DOS、Windows开关机顺序相同。若是多操作系统则在LILO boot：后输入Linux，就可进入Linux的注册提示符Login：，在其后输入用户名，在口令提示符password：输入口令，注册正确后，可进入相应的用户环境。如输入：root，及其密码，可进入超级用户环境#，输入其他用户名及口令，可进入该用户环境$。

---- 2．关机退出

---- 在超级用户提示符#下输入halt（立即关机）或shutdown time（延迟time分后关机，给各用户每隔一段时间发出还有多长时间将关机的警告）后， 计算机将进行一系列的关机工作，最后出现System halt，就是关机结束，可以关闭电源了。非超级用户则需用exit退出操作环境，再进入超级用户环境，方可进行关机工作。

---- 3．命令操作注意事项

---- 在Linux中有一些与DOS不完全相同的地方，见下表：

DOS Linux
命令行字母 不区分大小写 区分大小写
提示符 > #、$
路径分隔符 \ /
通配符 *、? *、?、[]

---- 在Linux系统中，超级用户的系统提示符是#，一般情况下普通用户的系统提示符是$，普通用户的系统提示符也同DOS一样可以进行更改。通配符中*与?的含义是一样的，[]是仅包括括号内的符号，连续的符号可用“-”连接首尾的符号代替，如[12345678]可以用[1-8]代替，[abcdefijk]可用[a-fi-j]表示。

---- 4．文件类型

---- 与DOS、Windows不同的是，在Linux系统中，目录和设备都被视为文件，共有四种文件类型，它们是：⑴普通文件，即我们通常所说的文件，在长列目录方式时行首前用一符号“-”表示。⑵目录文件，即我们通常所说的目录，在长列目录方式时行用首前用一字母“d”表示。⑶字符设备文件，如显示器、打印机、终端等，在长列目录方式时行首前用一字母 “c”表示。⑷块设备文件，如硬盘、软盘、光盘在长列目录方式时行首前用一字母“b”表示。

---- 在Linux中用长格式列目录命令ls -l时，如下例：

---- 文件类型

-rwxrw-r-- 5 user group 1089
Nov 18 1998 filename
存取权 用户 组名
字节数 最后修改时间 文件名
---- 大家对DOS下的8.3格式的文件名都一定很熟悉了,由于它的表达能力有限,所以在Windows95之后加入了长文件名支持,Linux继承了UNIX的优点,也可以用长长的一串字符作文件名。但是在Linux中文件类型可不像在DOS下那样容易从文件的扩展名上了解到，在DOS下的可执行文件的扩展名为com或exe，而在Linux中只能通过文件属性得知，采用命令ls –F可区分目录和文件，在目录后有“/”符号，可执行文件后有“*”符号，用ls –aF可见所有的文件和目录列出，包括隐藏的文件和目录，隐藏文件的文件名以点号“.”开头。

---- 5.读取权限

---- 在Linux中，文件的主人即所有者，其他使用者分别称为同组者、其他人，为保证各用户文件的安全，Linux同UNIX一样通过限制某些用户对文件的随意存取。共有三个级别的存取权：读权r、写权w、执行权x。在存取权中共有九个字符的位置其顺序是：所有者、同组人、其他人。在上例中分别表示：主人对文件拥有读写权和执行权，同组人对文件拥有读写权、其他人对文件只拥有读权。

---- 6.获取在线帮助命令

---- 在Linux中有一条专门用于取得在线帮助的命令man ，其使用方式为# man command。man有一套它自己的命令，通常由单个键组成，按空格键和F键将翻到下一页，按B键翻到上一页，按Q键退出man工具，回到命令行。掌握了以上的基础知识，结合熟知的DOS命令进行比较,对于学习Linux的基本命令就可以很快地运用自如,为进一步深入学习Linux打下深厚的基础.。

---- 二、文件管理和目录操作

---- 与DOS、Windows一样，在Linux中也有许多关于文件管理和目录操作方面的命令，对二者的主要命令列表如下：

---- 1.文件管理

功能 DOS Linux 注意事项
显示文件内容 type、more cat 、more type、cat
是全部显示，more是分页显示
打印文件 print lpr
拷贝文件 copy cp
移动文件及改名 move mv
删除文件 del, erase rm
---- 2.目录操作

功能 DOS Linux 注意事项
列目录及文件 dir/选项 ls –选项
在Linux中cd/直接返回登录时的目录而不是根目录，
显示工作目录 cd pwd
变更工作目录 cd\目录 cd/目录
建立目录 md，mkdir mkdir
删除目录 rd，rmdir rmdir
目录更名 move mv
拷贝目录 xcopy copy
---- 在二者中，命令的格式都是一样的，只是选项、参数不相同而已，也可以进行组合操作，具体运用时可使用帮助命令，只不过Linux的命令的功能更为强大，据记载DOS中的不少命令都是借鉴UNIX而来的，而Linux正是居于UNIX发展起来的，这也是二者有着几乎相同的命令和格式的原因之一。

---- 三、软、硬盘及光驱的使用

---- 1．软、硬盘及光驱的使用

---- 在Linux中对其他硬盘逻辑分区、软盘，光盘的使用与我们通常在DOS与Windows中的使用方法是不一样的，不能直接访问，因为在Linux中它们都被视为文件，因此在访问使用前必须使用装载命令mount将它们装载到系统的/mnt目录中来，使用结束，必须进行卸载。命令格式如下：

mount –t 文件系统类型 设备名 装载目录

文件类型常用的有：
msdos dos分区文件
ext2 Linux的文件系统
swap Linux swap分区或swap文件
iso9660 安装CD-ROM的文件系统
vfat 支持长文件名的dos分区
hpfs OS/2分区文件系统
---- 设备名是指要装载的设备的名称，如软盘、硬盘、光盘等，软盘一般为/dev/fd0 fd1，硬盘一般为/dev/hda hdb ，硬盘逻辑分区一般为期hda1 hda2…等等，光盘一般为/dev/hdc。在装载前一般要在/dev/mnt目录下建立一个空的目录，如软盘为floppy，硬盘分区为其盘符如c、d等等，光盘为cd-rom，使用命令：

mount –t msdos /dev/fd0 /mnt/floppy
装载一个mddos格式的软盘
mount –t ext2 /dev/fd0 /mnt/floppy
装载一个Linux格式的软盘
mount –t vfat /dev/hda1 /mnt/c
装载Windows98格式的硬盘分区
mount –t iso9660 /dev/hdc /mnt/cd-rom
装载一个光盘
---- 装载完成之后便可对该目录进行操作，在使用新的软盘及光盘前必须退出该目录，使用卸载命令进行卸载，方可使用新的软盘及光盘，否则系统不会承认该软盘的，光盘在卸载前是不能用光驱面板前的弹出键退出的。

---- 2．格式化命令mkfs

---- 格式化软盘时不需事先安装空盘，只需将软盘放入软驱中，使用如下命令，便可格式化一张在Linux中使用的软盘：

#mkfs –t ext2 /dev/fd0 1440
---- 在熟悉以上基本命令之后，就可以进行其他命令的进一步学习，例如：文件编辑软件vi，存取权限的修改,检查修复文件系统，增减用户及修改密码,安装其他Linux文件，及一些Linux的实用工具软件，建立x-Windows图形界面，利用Linux上网等等，来增加对Linux的感性认识。
  作者： 孙小东（第一汽车集团公司职工大学）


New Page 1

标题： ■ Linux Chinese HOWTO 中文版 : 中文 X Window
姓名 ：黄志伟 陈永升
Email：
地址 ：
转摘 ：http://member.netease.com/

返回

5. 中文 X Window
X Window 系统是 UNIX 下强而有力的图形环境。XFree86 由 MIT X Window 系统 X11R6 改版而来，它是免费的。

5.1. CXWin
中文 X Window (以下简称 CXWin)是 XFree86 的一个修补(patch)，使得它可以在 X Window 下显示中文字型。作者为交大李欣□。目前的 CXWin 仅支援 BIG5 编码。CXWin 能让你拥有中文的下拉选单，中文视窗标题，以及在各种不同的视窗管理员及应用软体中显示中文。

5.1.1. 如何取得
你可以在此取得 CXWin 3.3:

ftp://linux.cis.nctu.edu.tw/packages/X/Xserver/CXwin/3.3/

如果你使用的是 XFree86 3.2, 你可以在这里取得 3.2 版的 Linux ELF 格式:

ftp://linux.cis.nctu.edu.tw/packages/chinese/CXwin/binaries/

你仅需要取得你所需要的 X server 即可。例如你用的是 XF86_SVGA, 就取回 XF86_SVGA.gz 就行了。 XF86_SVGA.gz 应该可以在大部份的显示卡上工作。

如果你的系统是 RPM 相容的，你也可以取得 RPM 包装的最新版 CXWin 3.3.1:

ftp://linux.cis.nctu.edu.tw/packages/X/Xserver/CXwin/3.3.1/

5.1.2. 修补档(Patches)
如果你有 XFree86 的原始程式码，你可以在同样的地点取得修补档并自行编译成执行档。

5.1.3. 如何安装
如果你安装的是 CXWin 3.3, 首先要确定你有这些 shared libraries(可以用 ldconfig -p 来观察):

libm.so.5 => /lib/libm.so.5.0.6
libdl.so.1 => /lib/libdl.so.1.7.14
libc.so.5 => /lib/libc.so.5.3.12

如果你用的是 CXWin 3.2, 你需要的是 libc-5.2.18 或以後的版本。

首先，解开以 gzip 压缩的档案:

# gzip -d XF86_SVGA.gz

然後以 root 的身份，先将原来的 X server 备份下来:
# cd /usr/X11R6/bin
# mv XF86_SVGA XF86_SVGA_BACKUP

把刚解开的 CXWin 放在适当的地方，并建立适当的符号连结(symbolic link):
# mv /tmp/XF86_SVGA /usr/X11R6/bin
# chown root.bin XF86_SVGA
# chmod 4755 XF86_SVGA
# ln -sf XF86_SVGA X

如果你要安装的是 RPM 包装就更简单了:

# rpm -ivv XFree86-SVGA-3.3.1-1c.i386.rpm

CXwin 还需要下面四种 BIG5 字型才能正常使用: taipei15, taipei16, taipeik20 与 taipeik24. 请按照下一节方法来安装这些中文字型。

5.2. 安装中文字型
5.2.1. 何处取得字型
很可能你的系统已经安装了某些中文字型。你可以用下法找出已安装的 GB 字型:

# xlsfonts | grep gb
-cclib-song-medium-r-normal--0-0-72-72-c-0-gb2312.1980-1
-cclib-song-medium-r-normal--16-160-72-72-c-160-gb2312.1980-1
-isas-fangsong ti-medium-r-normal--0-0-72-72-c-0-gb2312.1980-0
-isas-fangsong ti-medium-r-normal--16-160-72-72-c-160-gb2312.1980-0
-isas-song ti-medium-r-normal--0-0-72-72-c-0-gb2312.1980-0
-isas-song ti-medium-r-normal--16-160-72-72-c-160-gb2312.1980-0
-isas-song ti-medium-r-normal--24-240-72-72-c-240-gb2312.1980-0
hanzigb13fs
hanzigb13st
hanzigb16fs
hanzigb16st
hanzigb24st

最後五个是前五个的别名。要得知已安装的 BIG5 字型用:
# xlsfonts | grep big5
-kc-kai-medium-r-normal-fantizi-0-0-75-75-c-0-big5.eten.3.10-1
-kc-kai-medium-r-normal-fantizi-20-200-75-75-c-200-big5.eten.3.10-1
-kc-kai-medium-r-normal-fantizi-24-240-75-75-c-240-big5.eten.3.10-1
-kc-ming-medium-r-normal-fantizi-0-0-75-75-c-0-big5.eten.3.10-1
-kc-ming-medium-r-normal-fantizi-15-150-75-75-c-160-big5.eten.3.10-1
-kc-ming-medium-r-normal-fantizi-24-240-75-75-c-240-big5.eten.3.10-1
-uw-ming-medium-r-normal-fantizi-0-0-75-75-c-0-big5.eten.3.10-1
-uw-ming-medium-r-normal-fantizi-16-160-75-75-c-160-big5.eten.3.10-1
-uw-ming-medium-r-normal-fantizi-20-200-75-75-c-200-big5.eten.3.10-1
-uw-songti-medium-r-normal-fantizi-0-0-75-75-c-0-big5.eten.3.10-1
-uw-songti-medium-r-normal-fantizi-20-200-75-75-c-200-big5.eten.3.10-1
-uw-songti-medium-r-normal-fantizi-24-240-75-75-c-240-big5.eten.3.10-1

如果你还没有安装任何字型，或是想装更多的字型，都可以在 ftp://ftp.ifcss.org/pub/software/fonts/ 取得。其中 gb/bdf/ 是 GB 字型，big5/bdf 是 BIG5 字型。

5.2.2. 安装 X 字型
假设你取得一 BIG5 字型 eb5-24k2.bdf.gz 与 GB 字型 gb24st.bdf.gz。首先将其转换为 .pcf 格式

# gzip -cd eb5-24k2.bdf.gz | bdftopcf -t > eb5-24k2.pcf
# gzip -cd gb24st.bdf.gz | bdftopcf -t > gb24st.pcf
# compress *.pcf

然後安装在 /usr/X11R6/lib/X11/fonts/misc
# mv *.pcf.Z /usr/X11R6/lib/X11/fonts/misc/
# cd /usr/X11R6/lib/X11/fonts/misc
# mkfontdir .

请观察 fonts.dir，现在应该包括下面两行
eb5-24k2.pcf.Z -kc-kai-medium-r-normal-fantizi-24-240-75-75-c-240-big5.eten.3.10-1
gb24st.pcf.Z -isas-song ti-medium-r-normal--24-240-72-72-c-240-gb2312.1980-0

你可以为这些字型名称建立别名(aliases)。这样当你使用中文软体时可以节省打字时间。在 fonts.alias 加下面两行
gb24st "-isas-song ti-medium-r-normal--24-240-72-72-c-240-gb2312.1980-0"
taipeik24 "-kc-kai-medium-r-normal-fantizi-24-240-75-75-c-240-big5.eten.3.10-1"

再来告诉 X Server 重新读入字型
# xset fp rehash

如果一切顺利，你就可以使用新字型了:
# cxterm -GB -fn 12x24 -fh gb24st &

你也可以将字型放到另外一个目录下，如 /usr/X11R6/lib/X11/fonts/chinese. 这样的话你必须加这行到 /etc/XF86Config 的 Section "Files" 中

FontPath "/usr/X11R6/lib/X11/fonts/chinese/"

这样你下次启动 X Window 时就可使用这些字型了。

5.2.3. 将其它字型转换为 X 字型
由 lwj 所写的一个 TTF2BDF 程式能让你将 Windows 的 TTF 字型转换为 BDF 字型。可从下面地点取得:

ftp://linux.cis.nctu.edu.tw/packages/chinese/TTF2BDF.EXE
这是一个 Win32 程式。因此你必须在 Windows 95/NT 上执行。

再来将 BDF 转换为 PCF 字型就可以在 X Window 下使用了。(X Window 也可直接用 BDF 字型，但 BDF 字型较大，还是转换为 PCF 再用较佳。)

# bdftopcf -t < ming.bdf > ming.pcf

你也可将 HBF 字型转换为 BDF 与 PCF 字型。在此可取得转换的工具程式:

ftp://ftp.ifcss.org/pub/software/fonts/utils/hbf.tar.gz

# hbftobdf ccfs24.hbf > ccfs24.bdf
# bdftopcf -t < ccfs24.bdf > ccfs24.pcf

5.3. TaBE 及 B5LE
TaBE 及 B5LE(Big5 Locale Environment) 是从 locale 著手为 X Window 加入中文能力的计画。若能完成的话可望彻底解决 X Window 下的中文显示及输入问题。

因为 TaBE 的作者 shawn 去当兵了，TaBE 的网页己经被移除了(太惨了吧?)，目前计画也已停摆。

B5LE 的作者是 Thinker <Thinker.bbs@bbs.yzu.edu.tw>. 然而其主要的发展平台是 FreeBSD. 若有人成功在 Linux 上安装 B5LE 请让我知道。相关的网页资料请见

http://ftp-cnpa.yzit.edu.tw/~thinker/B5LE/


New Page 1

标题： 从NT引导程序来启动LINUX
姓名 ：IP浪子
Email：
地址 ：
转摘 ： www.chinaasp.com

返回

从NT引导程序来启动LINUX
原文By Gustavo Larriera 中文译文: By "o k"

今天，象你我这些技术专家，经常不得不应付以下情形，就是让LINUX和NT两个不同的系统在同一台机器中和平共处。已经有了许多相关的HOW-TO文献--去看一看是个不坏的建议--去看如何设定LILO(The Linux Loader，Linux引导程序)以完成此类工作的那些。遗憾的是，经典文献基本没有涉及NT 引导程序。是的，我知道对不少人而言，Linux和NT间存在着门户之争:-) 但从一个IT技术者的角度而言，主要目标只是如何圆满完成这个工作而已。

现实生活中的很多时候，要求我们安装Linux时，不能去改变已有的NT引导方式。比如, 很可能那是你老板的机器，并且他/她非常喜欢自己的机器永远以自己熟悉的方式启动;-) 本文将集中介绍如何设定NT引导程序使其能引导Linux（当然也要能继续引导NT!）

我希望这些小技巧能使Linux的使用者以最简单的方式达到通过NT引导程序来启动Linux的目的。以下介绍适用于采用Intel兼容CPU的NT4.0服务器和工作站。

引子
你费了好多口舌，终于让老板同意在她的机器上装Linux。她NT用得很开心，Word啦，Excel啦，还有其它小东东，得心应手。她也并不固执，决定也可以试试Linux的啦，Linux装就装吧，不过有一个条件：她喜欢继续通过她熟悉的，能启动NT或DOS的那菜单来引导。她的意志就是你的意志，于是你决定不用LILO来双重引导她的机器。
MBR有所帮助
你应该牢牢记住的最重要的一点是，许多软件产品会利用硬盘上面仅有的那个宝贵的主引导记录（Master Boot Record，MBR）NT是这样，没有选择余地；Linux也可以这样，如果你喜欢。机器的BIOS会执行储存在当前激活分区的信息，来初始化你希望的操作系统。
NT安装后，MBR会被修改成去引导一个在激活分区的根目录下，叫NTLDR的程序。原来的MBR会被存到一个叫BOOTSECT.DOS的小文件中。NT安装完成后要记住绝不能覆盖这个MBR, 否则NT将无法启动。以防万一， NT的用户需要NT的应急修复磁盘（Emergency Repair Disk，ERD）。

记住了这些后，就要注意设定LILO时*不能*装到MBR中去，而是装到Linux的root分区中去。这样，对NT而言，不会带来问题；而Linux没有MBR也可以活下去。

NT之引导过程
当NTLDR启动， NT用户看到"OS Loader V4.xx" 后，它会切换处理器到386状态，并启动一个非常小的文件系统。接着，它会去读BOOT.INI文件，看是否有其它操作系统存在，并显示一个选择菜单。下面是一个典型的BOOT.INI:
[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(2)\WINNT

[operating systems]
multi(0)disk(0)rdisk(0)partition(2)\WINNT="NT V4 is here"
multi(0)disk(0)rdisk(0)partition(2)\WINNT="NT V4 VGAMODE" /basevideo /sos
C:\="DOS is here"
TBOOT.INI有两部分构成。 "boot loader section"部分指定菜单在屏幕上的停留时间，和缺省菜单选项。"opearating systems section" 部分指定可选的操作系统种类。可以看到机器可以启动NT(以标准模式或VGA安全模式)和DOS。从这个例子我们可以推断，DOS从硬盘C:(第一个硬盘的第一个分区)启动，而
NT从第二个分区启动。典型安装时，会以DOS的FAT文件系统格式化一个C:的分区，然后将NT装在另外一个NTFS(NT文件系统)的分区。
如果用户选择了启动NT, 另外一个程序NTDETECT.COM，就会开始进行硬件检查。如果一切正常，NT内核就会被装入，正如我们都知道的那样。

再来看如果启动的不是NT的情形。此时，NTLDR 需要知道非NT OS引导所必需的引导扇区是哪个。此时，相应的引导扇区映象必须要在一个小小的512字节的文件中。比如，要引导DOS，NTLDR 将会寻找一个叫BOOTSECT.DOS的引导扇区映象文件。 这个映象文件是NT的安装程序产生的。

那么， 引导Linux又是怎样呢？这很简单，需要的只是一个引导扇区映象文件，姑且称之为BOOTSECT.LIN (在本文稍后会看到如何得到这个文件)。 必须将BOOTSECT.LIN 放到C:, 并要修改 BOOT.INI。此时"operating systems ection"部分看起来应该是这样的：

[operating systems]
multi(0)disk(0)rdisk(0)partition(2)\WINNT="NT V4 is here"
multi(0)disk(0)rdisk(0)partition(2)\WINNT="NT V4 VGAMODE" /basevideo /sos
C:\="DOS is here"
C:\BOOTSECT.LIN="Now Linux is here"
修改BOOT.INI， 可以用任何普通ASCII文本编辑器（比如记事本）。这个文件的正常属性为系统-隐藏-只读，所以你必须用 'attrib' DOS 命令或在NT中，用文件属性对话框中来变更属性。

Linux侧的故事
现在我们将注意力转到Linux。我们需要安装Linux，定制LILO，产生BOOTSECT.LIN文件。
第一步是装好Linux。我们都知道怎么做：为Linux选适当的系统，SWAP,和用户分区，运行安装程序，等等。一切顺利时，这一步在45分钟之内就可以完成。

接下去就要定制LILO。我们知道怎么做，但要注意*不能* 将LILO装到MBR中去(除非你想将NT吞了:-))。设定LILO时，要选择将它装到你Linux 的root分区。如果你还不知道如何设定LILO, 就花几分钟读读HOW-TO文献，或者就用一些好的安装程序，我是用S.u.S.E.的, 因此我的安装程序就是 'yast'
(Yet Another Setup Tool)。

LILO定制好之后，(为行文方便， 此处假设Linux的root分区是/dev/hda3)我们必须用'dd'来产生引导记录映象文件。以root Login后，按以下做:

# dd if=/dev/hda3 bs=512 count=1 of=/dosc/bootsect.lin
如果没有能将FAT C: partition mount成为 /dosc，譬如说由于这个分区被以NTFS方式格式化，不能访问这个分区。此时可以将 BOOTSECT.LIN写到一个以DOS方式格式化的磁盘中，或者NT能读的其它什么分区也可以。如果BOOTSECT.LIN不是被放到C:\，要记住此时应相应修改BOOT.INI文件。

现在你老板可以从她的NT Loader菜单中选择Linux了。NTLDR将会装载BOOTSECT.INI，她就可以看到LILO的提示。她就可以去尝试她新的Linux机器了。最后，你可以设定LILO在选择提示时能去引导Linux和C: 上的DOS。你的老板就可以再次回到C: 分区上的NT Loader。 前文描述的方法可以反复进行，如果你希望能选择引导多个Linux，就必须为每一个Linux都产生一个相应的引导扇区映象文件。

版权所有 (C) 1999 NJLUG
出版于第36期《Linux公报》1999年1月 中文版第三期


New Page 1

您现在的位置：网上学校 >> 网上交流 >> LINUX 应用与技巧

标题： ■ Linux Chinese HOWTO 中文版 : 中文列印
姓名 ：黄志伟 陈永升
Email：
地址 ：
转摘 ：http://member.netease.com/

6. 中文列印
这一节教你怎麽列印中文文件。但我不会教你如何设定印表机，你必须自行设定妥当。这一节介绍的工具都是将文件转换成 PostScript 格式，因此你还要让你的印表机能列印 PostScript 档案。如果你的印表机不直接支援 PostScript, 你可以安装 ghostscript. 请参考 Printing HOWTO 的说明。

6.1. cnprint
cnprint 是一个将中文文章转换为 PostScript 档案以供列印的工具。使用上就和标准的列印指令一样。它同时支援 GB, HZ 与 BIG5 编码。

6.1.1. 何处取得
你可在 ftp://ftp.ifcss.org/pub/software/unix/print 找到 cnprint280.tar.gz。

6.1.2. 安装 cnprint
cnprint280.tar.gz 只包含了五个档案

# ls
cnprint.1 cnprint.cmd cnprint280.README
cnprint.c cnprint.help

用下法编译
# gcc cnprint.c -o cnprint
# mv cnprint /usr/local/bin
# mv cnprint.1 /usr/local/man/man1

6.1.3. 安装 HBF 字型
HBF 字型包括了标头档与字型图档: .hbf 是描述字型的标头档，这是一个文字档，里面记载了它的字型图档名称。两种档案你都必须安装。你可在 ftp://ftp.ifcss.org/pub/software/fonts/ 找到 HBF 字型。

例如你想使用 ccfs24.hbf, 一种仿宋简体字型，你必须取得这三个档案: ccfs24.hbf, cclib.n24 与 ccsym.24。在 ifcss 的字型目录下的 00index.txt 列出了所有 HBF 字型的档案名称。

建一个目录专门来放 HBF 字型，例如 /usr/local/lib/chinese/HBF/。将你取回来的 HBF 标头档与字型图档都放到这个目录下。然後在环境变数中指定 HBF 字型的完整目录。

# export HBFPATH="/usr/local/lib/chinese/HBF/"

档案 cnprint.cmd 中包含了 cnprint 的一些预设值。你必须修改它，让它指向你安装的 HBF 字型。然後将它放到 $HBFPATH

# cp cnprint.cmd $HBFPATH

现在你可用 ``cnprint -w FILENAME'' 将中文文章转换为 PostScript 档案。详细的用法请参考 man cnprint.

6.1.4. 编码转换
cnprint 2.80 还增加了许多特异功能，例如，各种编码格式的转换，BIG5 <=> GB <=> HZ. 不过 BIG5 <=> GB 必须另外安装转换表格，这个表格可以从下面地点取得:

ftp://ftp.ifcss.org/pub/software/unix/convert/hc.tab
取回後放到 HBF 字型目录下，然後修改 cnprint.cmd, 加上
DEFAULT_GBB5_TABLEFILE: /usr/local/lib/chinese/HBF/hc.tab

cnprint 2.80 的 BIG5 到 GB 转换不仅能做到一般的字对字转换，还能做到词对词的转换。然而 cnprint 本身也未提供转换的字典，你必须自行建立。详情请参考 man cnprint.

6.2. ps2cps
这个小程式的功能是将原本无法以中文输出的 PostScript 档转换成可以以中文输出。例如 Netscape 在列印时是先将档案转成 PostScript，但其输出的 PostScript 却不包含中文字型，这使得原来是中文的部分变成乱码印出。这个程式可以读入 PostScript 档，将其乱码的部分改以中文字取代之，并将结果送到标准输出，则其输出结果便可送到任何可以印 PostScript 文件的印表机列印。

在下面地点取得:

ftp://linux.cis.nctu.edu.tw/packages/chinese/misc/ps2cps-0.1.tgz

解开後视你的需要修改 Makefile:

BINPATH : 可执行档 (ps2cps) 的安装路径
PS2CPSPATH : PS2CPS 的资源档路径
PS2CPSRC : PS2CPS 资源档的名称

再来 make all install 即可。

你必须按照上节的方法先安装好 HBF 中文字型。再来修改你的 ps2cpsrc 档案:

HBF_PATH: 定义 HBF 字型所在目路
HBF_NAME: 定义 HBF 字型的名称 ( .hbf ，不含路径 )
CH_WORD_SHIFT: 定义中文字型位移。

其中最後一项是用来调整中文字型的位置用的。由於有些中文字型与原本的英文字型可能不在同一水平线上，故可以设此变数以做上下调整。其值为 -1.0 至 +1.0 之间。

然後你就可以用作者附的□例来测试:

# ps2cps thhsieh.ps > c-thhsieh.ps

用 ghostview 来试试能否看到中文字型。

然而这个程式尚在测试阶段，有许多问题待解决。若你有任何问题或是建议可直接向作者反应: 台大物研所谢东翰 <thhsieh@twclx.phys.ntu.edu.tw>.

6.3. bg2ps
这也是一个将 BIG5 中文档案转成可列印的 PostScript 档，功能和 cnprint 类似。但是它使用 TrueType 字型因此输出结果比较漂亮。它还另外附一个可将 Netscape 输出的 PostScript 转换成可列印中文的 script. 作者是 Chen-Shan Chin <cschin@u.washington.edu>.

你可以从这里取得软体:

http://weber.u.washington.edu/~cschin/bg2ps/

6.3.1. 安装 bg2ps
解开压缩档并编译:

# mkdir bg2ps
# cd bg2ps
# tar xzvf bg5ps.tgz
# gcc -O2 ttf2psm.c -o ttf2psm

再来安装 TrueType 字型。你可将它安装在 bg2ps 同一目录，或另外指定目录。请参考 安装 TTF 字型 的说明。然後在你的目录下建一 .bg5ps.conf 档案，你可以直接拿它所附的□例 bg5ps.conf 来修改。其中最重要的是将 chineseFontPath 指到你安装 TrueType 字型的目录，并将 fontName 改成你使用的字型名称。

用它所附的□例来测试，并用 ghostview 或 gv 观看结果:

# ./bg5ps -if test.big5 -of test.ps
# ghostview test.ps

6.3.2. 安装 nps2cps
nps2cps 没有额外的设定档。你必须自行修改 nps2cps script 中的 chineseFontPath 及 fontName.

测试 nps2cps:

# nps2cps < netscape.ps > test.ps
# ghostview test.ps

6.4. gb2ps
gb2ps 是另一种可以列印 GB 与 HZ 编码的工具程式。

6.4.1. 如何取得 gb2ps

套件:

gb2ps.2.02.tar.gz

ftp://ftp.ifcss.org/pub/software/unix/print

字型:

csong24.ccf ckai24.ccf
cfang24.ccf chei24.ccf

ftp://ftp.ifcss.org/pub/software/fonts/gb/misc/

将字型放在某个目录下，例如 /usr/local/lib/chinese/CFONT

6.4.2. 安装 gb2ps
在编译 gb2ps 之前先更改 Makefile 的设定

CFONT=/usr/local/lib/chinese/CFONT/
COVERPAGE=/usr/local/lib/chinese/lib/cover.ps

然後打
# make
# cp gb2ps /usr/local/bin

［关闭此窗口］


New Page 1

标题： ■ 在Linux机器上设置pop3代理
姓名 ：周焕清
Email：
地址 ：浙江省慈溪锦堂师范学校
转摘 ： http://www.computerworld.com.cn

返回

---- 　　概述：在Linux服务器上,http/https/ftp代理的应用非常广泛， squid大家都很熟悉，但是有些特殊情况下，你可能需要让一台Linux 机器也做为pop3代理服务器，代理客户端从互联网上接收邮件，并传送邮件给客户工作站。

---- 　　作用：也许这种服务对于专线连到ISP的用户更适合，在有的公司的内部网中，你需要从外部世界收信，可能你不能直接与外部世界通信，但你能很容易地访问到你的防火墙机器，这时，在防火墙机器上安装pop3代理就起到了一种不可替代的作用。

---- 　　软硬件环境：Redhat Linux 5.2，TIS通用防火墙代理服务程序 plug-gw (下载），实现方法：

---- 1.安装pop3代理非常简单，你仅需要下载上面提到的一个很小的程序plug-gw即可，请下载后放入/usr/local/etc目录下(需要执行权限）

---- 2.这里假设你需要代理互联网上两个邮件服务器，一个是 public.sta.net.cn,另一个是pop3.163.net，（若你设置了防火墙相关规则，请确保其外部接口至少能与上面提到的两个邮件服务器通信，可参见另一篇关于防火墙的文章）

---- 3.在/usr/local/etc目录下创建存取表文件netperm-table,象下面这样：

    root@sh-proxy etc # more netperm-table
    plug-gw: port 110 192.168.13.* -plug-to
public.sta.net.cn-port110
    plug-gw: port 114 192.168.13.21 -plug-to pop3.163.net
-port110

    root@sh-proxy etc # ls -l
    total 24
    -rwxrwxr-x 1 root root 314 Sep 14 17:58 netperm-table
    -r-xr-xr-x 1 root root 22489 Dec 31 1998 plug-gw

---- 　　注：第一行允许192.168.13.0网段上任何机器可使用该代理服务器接收public.sta.net.cn上的邮件。

---- 　　第二行仅允许一台机器192.168.13.21可使用该代理服务器接收 pop3.163.net上的邮件。

---- 　　4.修改/etc/services，加下面的一行：

    pop3proxy 114/tcp

---- 5.在命令行下运行两句程序，也可加入到/etc/rc.d/rc.local的最后，使得每次启动时装载:

    # /usr/local/etc/plug-gw -daemon pop3 pop3 &
    # /usr/local/etc/plug-gw -daemon pop3proxy pop3proxy &

---- 　　注：请确信/etc/services中存在一行pop3 110/tcp ,若前面的名字不是pop3，而是其它的如pop-3等，那么或者更新为pop3 110 /tcp，或者运行/usr/local/etc/plug-gw -daemon pop-3 pop-3 &

---- 　　6.若你在windows客户端用outlook express收发邮件，若从 public.sta.net.cn收信，仅需改pop3服务器为你的防火墙即可，若从 pop3.163.net收信，你还得更改标准pop3端口号为114,而不是110。


New Page 1

标题： ■ Linux Chinese HOWTO 中文版 : 中文排版软体
姓名 ：黄志伟 陈永升
Email：
地址 ：
转摘 ：http://member.netease.com/

返回

7. 中文排版软体
7.1. LaTeX + CJK 4.1.2
TeX/LaTeX 是一套的幕後排版软体。其优秀的输出品质早已为广大的学术界朋友所喜爱及采用。 CJK 4.1.2 是一个 LaTeX2e 的巨集套件(macro package)，能让你在 TeX 文件中使用 CJK (Chinese/Japanese/Korean) 的文字编码。

你的系统必须先安装好 teTeX/LaTeX. 许多的 Linux 发行套件都已包含了 teTeX/LaTeX. 如果没有的话，你也可以自己装。请参考 teTeX HOWTO 的说明。

7.1.1. 取得软体
在下面地点取回 CJK 4.1.2

ftp://nctuccca.edu.tw/Chinese/ifcss/software/tex/CJK-4.1.2.src.tar.gz

在此取回你要的 TTF 字型:

ftp://nctuccca.edu.tw/Chinese/ifcss/software/fonts/big5/ms-win/

7.1.2. 安装
你必须知道你 teTeX/LaTeX 的安装目录 $TEXMF, 例如 /usr/lib/texmf. 我还假设你用的字型是 ntu_kai.ttf, 如果你用别的请自行对应。

将你抓回来的字型 解压缩 後放到 $TEXMF/fonts/truetype/chinese 下。
解开 CJK-4.1.2.src.tar.gz, 将 texinput 子目录移至 $TEXMF/tex/latex, 改名为 CJK, 并建立字型目录。
# cd 4_1.2/; mv ./texinput $TEXMF/tex/latex/CJK
# mkdir -p $TEXMF/fonts/tfm/chinese/ntukai
# mkdir $TEXMF/ttf2pk
# mkdir $TEXMF/hbf2gf

接下来这个可能是最难的步骤。将 4_1.2/doc/teTeX 目录下的 *.diff 以 patch 指令施加到这几个档案上:
/usr/bin/MakeTeX*
$TEXMF/web2c/texmf.cnf
$TEXMF/fontname/special.map

例如:
# cd /usr/bin
# patch -s < 4_1.2/doc/teTeX/MakeTeXPK.diff

由於 TeX 的版本众多，你的 patch 可能会失败。这样的话你就要自己手动地将失败的地方补上(失败的地方会记录在 .rej 中)。如果你不太了解 patch 运作的原理，最好请教一下有经验的人。
编译及安装 bg5conv
# cd 4_1.2/utils/Bg5conv; gcc -o bg5conv bg5conv.c
# chmod 755 bg5latex
# cp bg5conv bg5latex /usr/local/bin/
# gzip bg5conv.1; cp bg5conv.1.gz /usr/local/man/man1/

由於含 BIG5 码的 TeX 文件中某些中文编码可能含有 {, }, \ 等对 TeX 具有特殊含义的符号，bg5conv 能将这些编码转换为 TeX 能处理的形式。
编译及安装 ttf2pk, 这是一个将 TrueType 字型转换为 TeX's pk 字型的工具。
# cd 4_1.2/utils/ttf2pk/src
# make all OS=unix
# cp ttf2pk /usr/local/bin/
# cd ..
# cp config/ttf2pk.cfg $TEXMF/ttf2pk/
# gzip ttf2pk.1; cp ttf2pk.1.gz /usr/local/man/man1/
# cp c00kai.fd $TEXMF/tex/latex/CJK/Bg5/
# cp MakeTTFPK /usr/local/bin

如果你还想直印的话在 $TEXMF/tex/latex/CJK/Bg5/ 上自己编一个 c00kair.fd 档:
--------------------------------------------------------------------------------

\def\fileversion{4.1.0}
\def\filedate{1996/11/20}
\ProvidesFile{c00kair.fd}[\filedate\space\fileversion]

% traditional Chinese characters in Big 5 encoding scheme.

% font shape: kai
% ntu_kai.ttf is Kai3 Shu1 ("model book")

\DeclareFontFamily{C00}{kair}{}

\DeclareFontShape{C00}{kair}{m}{n}{<-> CJK * ntukar}{}
\DeclareFontShape{C00}{kair}{bx}{n}{<-> CJKb * ntukar}{\CJKbold}

\endinput

--------------------------------------------------------------------------------

执行 texconfig:
# texconfig rehash
# texconfig hyphen

7.1.3. 测试

横印测试:
# cd 4_1.2/examples
# bg5latex Big5.tex (看看有没有产生 Big5.dvi ?)
# xdvi Big5.dvi (是否能看到中文? 当然你要先进 X Window)
# dvips Big5.dvi -o Big5.ps (转换成 PostScript 格式)
# ghostview Big5.ps (用 ghostview 观看)
# lpr Big5.ps (送到印表机，看看是否印出中文)

直印测试: 用 examples 目录中的 Big5vert.tex 来重覆上述过程。

7.1.4. 增加新字型
例如，你想改用明体字型 ntu_mm.ttf

将你的 TrueType 字型放在 $TEXMF/fonts/truetype/chinese 下。
在 $TEXMF/ttf2pk/ttf2pk.cfg 中增加两行:
ntumm: -e Big5 $TEXMF/fonts/truetype/chinese/ntu_mm.ttf
ntummr: -r 1 -e Big5 $TEXMF/fonts/truetype/chinese/ntu_mm.ttf

建立 c00ming.fd 档:
# cd 4_1.2/utils/ttf2pk
# cp c00ming.fd $TEXMF/tex/latex/CJK/Bg5/

再次执行 texconfig.
将 4_1.2/examples/Big5.tex 中的 kai 改为 ming, 重覆上面 bg5latex, xdvi, dvips 等测试看看结果正不正确。
如果要直印，同样重覆安装一节所述，建立 c00mingr.fd 如下，并将 Big5vert.tex 中的 kair 改为 mingr, 重覆测试过程。
--------------------------------------------------------------------------------

\def\fileversion{4.1.0}
\def\filedate{1996/11/20}
\ProvidesFile{c00kair.fd}[\filedate\space\fileversion]

\DeclareFontFamily{C00}{mingr}{}

\DeclareFontShape{C00}{mingr}{m}{n}{<-> CJK * ntummr}{}
\DeclareFontShape{C00}{mingr}{bx}{n}{<-> CJKb * ntummr}{\CJKbold}

\endinput

--------------------------------------------------------------------------------

7.1.5. 建立 CJK 文件
中文 CJK TeX 文件与一般 LaTeX 主要不同之处在於:

所谓 LaTeX 的 preamble (\documentclass 至 \begin{document}）区域中， 必须有 \usepackage{CJK} 这个命令，即必须载入 CJK.sty。
中文字必须在 CJK 或 CJK* 的中文环境中。
要变换字型可用 \CJKfamily 命令，如 \CJKfamily{fs} 将以下的字型改成仿宋字（当然 fs 这个字形名称必须定义在 c00fs.fd 中）。
下面是一个 CJK 文件的□例:
--------------------------------------------------------------------------------

\documentclass[12pt]{article}
\usepackage{CJK}
\begin{document}
\begin{CJK*}{Bg5}{kai}

\section{第一节}
\section{第二节}
中文段落、章节、图形、表格、参考文献、…等
...

\end{CJK*}
\end{document}

--------------------------------------------------------------------------------

7.2. ChiTeX
由中央大学数学系陈弘毅教授 <yih@math.ncu.edu.tw> 所发展。除了 ChiTeX 特有的几个指令，使用 ChiTeX 就像使用英文 TeX 一样容易。

7.2.1. 取得
ChiTeX 可以从这里取得

ftp://dongpo.math.ncu.edu.tw/tex-archive/local/chitex/chitex/Linux/

7.2.2. 安装
你要知道你的系统上安装的 TeX 是什麽版本。在较旧的系统上通常安装的是 NTeX, 而在新的系统上通常是 teTeX. 如何知道你的 Linux 装的是 teTeX 还是 NTeX? 只要执行一下 tex, 若出现

This is TeX, Version 3.14159

就是 teTeX. 若出现
This is TeX, Version 3.1415N

则为 NTeX. 请按照你的 TeX 版本取回适当的 ChiTeX.

ChiTeX 的安装很简单。只要将 chitex60.tgz(teTeX) 或 chitexN.tgz(NTeX) 以及 fonts1.tgz, fonts2.tgz 放在 /usr/local 下，再将 chitex60.tgz 解开并执行安装程式 csetup 即可。

# tar zxvf chitex60.tgz
# cd chitex60
# ./csetup

7.2.3. 安装字型
你可以安装中文 TrueType 字型供 ChiTeX 使用。

将 TrueType 字型放在 $TEXMF/fonts/chinese/ttf.
修改 $TEXMF/tex/chinese/chitex.fdf, 加入一行
\choosechfont{fontname}{filename}

其中 filename 是你的字型档名去掉 .ttf, 而 \fontname 是此字型的名称。例如，如果你想使用某字型 avntmv.ttf, 就加入一行 \choosechfont{ming}{avntmv}, 并在文件中使用巨集 \ming 表示开始使用字形 avntmv.ttf.
chitex.fdf 中已事先定义好下面几种字型，因此如果你要装这些字型，就不必再更改 chitex.fdf.
\kai ----> ntukai.ttf
\li ----> ntuli.ttf
\mr ----> ntumr.ttf
\fs ----> ntufs.ttf

7.2.4. 测试
现在你可以拿 ChiTeX 附的□例来测试:

# chilatex math2.tex (编译)
# xdvi math2 (预视)
# dvips math2 (转换成 PostScript 档)
# ghostview math2.ps (用 ghostview 观看转换出来的 PostScript 档)

你也可写个小文件来测试新安装的字型:

--------------------------------------------------------------------------------

\documentclass[12pt]{article}
\begin{document}
\ming
这是个测试
\end{document}

--------------------------------------------------------------------------------

更详细的资料请参考陈教授网页的说明:

http://www.math.ncu.edu.tw/yih/intro.htm

7.3. 六书(Dtop)
六书是由致远科技所研发的一套 Unix 平台的中文排版软体。民国八十四年十一月初完成的 v1.4 版一口气推出了五个平台的版本。其中 Linux 平台的 beta 版提供使用者自由，无限期的试用。这项创举使得 Linux 爱好者又多了一个良好的中文使用环境。然而，由於市场太小，以致正式版迟迟未能推出。目前似已停止研发。

7.3.1. 如何取得
六书 for Linux 的 beta 版可自各大校园的 FTP 站台取得:

ftp://nctuccca.edu.tw/Chinese/ifcss/software/linux/X11R6/dtop1.4/pub/
ftp://ftp.ntu.edu.tw/Chinese/ifcss/software/linux/X11R6/dtop1.4/pub/
ftp://ftp.ccu.edu.tw/pub3/chinese/linux/X11R6/dtop1.4/pub/
ftp://ftp.ncu.edu.tw/OS/linux/X/ifcss/X11R6/dtop1.4/pub/
ftp://ftp.ifcss.org/pub/software/linux/X11R6/dtop1.4/pub/

其下有三个子目录，分别是:

dtop.linux
存放六书的执行档与执行时所需的资料档，目前分类为三个主要档案。全部解开安装後所需硬碟空间接近 40 MB.

dtop.readme
存放六书 Linux beta 版的相关文件。这些文件皆以六书的档案格式储存，使用者可直接使用六书 Linux beta 版读取。

dtop.manual
存放六书 X Window 版的使用手册，以六书的档案格式储存。六书的 X Window 版(Linux, IBM AIX, HP-UX, Sun 4.1.x, Solaris)皆可直接读取。

7.3.2. 安装
六书的硬体需求大约是: CPU 486 DX-33 或以上。RAM 16 MB 或以上。太少的记忆体速度会慢得让你受不了!硬碟空间应预留 50 MB 左右。

取回 dtop.linux 目录下的压缩档，在自行选定的目录下全部解开即可，如 /usr/local/dtop。

在执行前还必须先设定好环境变数: $DTOPHOME 是你安装六书的目录，$DTOPTMP 是六书暂存档的目录，一般设在 /tmp 即可。XAPPLRESDIR 是六书资源档所在目录，一般是在 $DTOPHOME/user 下。

# export DTOPHOME=/usr/local/dtop
# export DTOPTMP=/tmp
# export XAPPLRESDIR=DTOPHOME/user

你还要设定六书所使用的中文字型目录:

# xset fp+ $DTOPHOME/pcf.chn

最後你还要设定 Keysym 对应表。由於 Linux X Window 上 Keysym 与 Keycode 的对应和工作站不尽相同，例如在 Linux X Window 上 BackSpace 与 Delete 两个 Keysym 都对应到同一 Keycode，造成 BackSpace 实际上是 Delete 的行为模式。为解决此问题六书造了一个 Keysym 档，置於 $DTOPHOME/user 下，档名为 dtop_keysym.linux. 在进入 X Window 後，键入

# xmodmap dtop_keysym.linux

另一个解决的方法是直接在指令列上下

# xmodmap -e "keycode 22 = BackSpace"
# xmodmap -e "keycode 107 = Delete"

一切都准备就绪後就可以执行六书了:

# $DTOPHOME/bin/dtop14

你可以阅读六书所附的线上使用手册以获得更详尽的说明。

7.4. ChinesePower
ChinesePower 是一个在 X window 上非常易於使用，所见即所得(WYSIWYG)的远东文书处理器。它支援 BIG5, GB, 日文，韩文混合输入，PostScript 列印与显示。它可以为文件产生七种颜色的 GIF 图档，非常适合用来制作中文网页。 ChinesePower 使用 HBF 或 TTF 字型。

由此取得 ChinesePower

ftp://ftp.ifcss.org/pub/software/x-win/editor/chpower-2.0.tar.gz

编译 ChinesePower 需要 HBF 字型与 Motif 程式库。首先修改 Makefile 以符合你的需求，然後

# make

如此将产生二进位执行档。再来设定环境变数
# export HBFPATH=/usr/local/lib/chinese/HBF/
# export TTFPATH=/usr/local/lib/chinese/TTF/
# export HZINPUTDIR=/usr/local/lib/chinese/dict/
# export CHPOWERPATH=path_of_chinesepower

7.5. EasyFlow
由王佑中 <wycc@iis.sinica.edu.tw> 所发展的中文简排程式。相关资料请参考

http://formosa.iis.sinica.edu.tw/~wycc/


New Page 1

标题：实现LINUX与WINDOWS95文件共享
姓名 ：赵江
Email：
地址 ：南京
转摘 ：

返回

     Linux现在可以说是如日中天，君不见各大报刊杂志媒体上关于它的介绍和应用都是铺天盖地的吗？相信众多的电脑玩家中也有和笔者一样，在一块硬盘上安装了Linux和Windows95两个操作系统的。但是这样一来，就有一个问题困扰着我们——Linux和Windows95的文件不能方便地共享，这怎么办？如果你也和笔者有着同样的遭遇，那就请关注下面的文章吧，相信在看完之后，你一定会有一个满意的解决之道。
    一、在Linux中操作Windows95的文件
    虽然Linux对Windows95支持方法较多，但在这里向大家介绍一种最简便的方法，即利用mount挂装文件系统访问Windows95。这种方法是把Windows95分区作为Linux的一个“文件系统”挂装到Linux的某个空文件夹下，将Windows95分区与mnt文件夹联系起来，然后在Linux下访问/mnt文件夹实际上就是访问Windows95分区中的内容了。
     比如当我们键入下列命令“mount/dev/had1/mnt”之后，就已经将Windows95分区挂到Linux下的/mnt文件夹中了，这时就可以使用Linux中的常用命令来读取、拷贝、删除和改写Windows95中的文件了。
     例如：
     “vi/mnt/temp/setup.bat”可在Linux下查看Windows95分区中temp目录下的setup.bat文件内容；
     “cp/mnt/windows/win.ini/tmp”将Windows95分区中windows目录下的win.ini拷贝到Linux的/tmp文件夹中；
     “rm/mnt/temp/＊.＊”就在Linux下将Windows95分区中的temp文件夹中所有文件删除。
     上述的方法对于Unix和Windows95共存的系统也是适用的，至于具体的命令语句，大家可以查看相关的书籍，在此就不再详述了。但是有一点要提醒各位注意，linux下对Windows85分区的文件操作格式为“命令/mnt/Windows95分区中文件路径”，其中的“Windows95分区中文件路径”默认的是根目录，如果需要进入子目录的话，还要添加相应的路径。
     可是在Windwos95中实现对Linux中的文件调用时，就不能采用上述方法，而要使用专门的工具了。好，我们一起再来看看——
    二、Windows95中的Linux分区文件调用工具
     这个软件的名称叫做explore2fs，使用它可以实现对Linux分区中的文件进行读取、复制、写入和属性修改等功能。
     explore2fs是个绿色免费软件，整个程序也就只由一个可执行的文件组成，运行后可以看见图1所示的窗口。由于采用的是类似资源管理器的操作界面，所以对于那些熟悉Windows95但又刚刚接触Linux的朋友来说是能够很快上手使用的。在窗口左边是Linux分区下的所有目录，右边显示的则是相应目录中的文件，而且上部还有一些快捷按键来帮助你工作。
     在使用explore2fs之前还要作一些相应的设置工作，主要有两个方面：1、确定用哪个程序来浏览Linux文件；2、允许Linux分区的写操作。前者可以在“View/Options/General”中的[Program]进行设定，原先默认的是Windwos附带的那个写字板，但是你可以自行设置为系统中其它的编辑程序(附图2)。而后者的设置需要在刚才的标签中选取[Debug]，然后点中“Enable write support”的复选框即可。在完成了设置工作之后，就可以选取需要浏览的Linux文件并右击鼠标选择“View”来观看其内容；需要拷贝文件的时候，可以先选取文件，再右击鼠标选取“Import”和“Export”来进行。其中“Import”是把Windows95分区中的文件写入Linux分区中，“Export”则把Linux分区中的文件复制到Windows95的分区中，还有一个最简单的办法就是直接使用Drag and Drop来操作。
    但是由于Windows和Linux使用的分区不同，explore2fs的作者声称当从Windows95中写文件到Linux分区的时候，有可能破坏Linux原有的分区。虽然笔者在使用的过程中还没有遇到这种悲剧的上演，还是特地在此提出告诫大家，以免有一天你的Linux不能正常启动的时候来找我算帐，呵呵……
    看完这里，当你需要在一个操作系统下调用另外一个操作系统中的文件时，就不要来回切换操作系统，再用软盘拷贝了吧，是不是觉得一切都很简单？如果你需要这个explore2fs，可以在以下链接中进行下载：http://uranus.it.swin.edu.au/～jn/explore2fs/explore2fs－1.00－pre2.zip，其大小为320K。


New Page 1

标题： ■ Linux Chinese HOWTO 中文版 : 有用的中文软体
姓名 ：黄志伟 陈永升
Email：
地址 ：
转摘 ：http://member.netease.com/

返回

8. 有用的中文软体
8.1. cjoe - Joe's Own Chinese Editor
JOE 是一个 UNIX 上免费专业的 ASCII 文字编辑器。它用起来就像大部份 IBM PC 上的文字编辑器。

在此可取得

ftp://ftp.ifcss.org/pub/software/unix/editor/cjoe-2.8.tgz

编译与安装很简单。除非你要更改执行档或 man page 档案放置的位置，不然就直接:

# make
# make install

8.2. celvis
Celvis 是一个很像 UNIX 上标准编辑器 vi/ex 的东西，几乎支援所有 vi/ex 的指令。 Celvis 可编辑同时含有中英文的文章。它也同时支援 GB2312-80 和 BIG5 编码。

由此取得 celvis

ftp://ftp.ifcss.org/pub/software/unix/editor/celvis-1.3.tar.gz

取回後解开

# tar zxvf celvis-1.3.tar.gz
# cd celvis

你必须更改 tmp.c，把 93-95 行砍掉。
--------------------------------------------------------------------------------

#if OS9
if we don't have write permission...
#endif

--------------------------------------------------------------------------------
然後就可以开始编译。
# cp Makefile.s5 Makefile
# make install

因为它的 Makefile 并非为 Linux 而写的，你可能会看到许多警告讯息，不过没关系，不管它! 编译完之後 celvis 会被安装在 /usr/local/bin.

8.3. cvim
CVim 是一个 vim-4.2 的中文修补程式。它包括了一些和 vi 很像但 celvis-1.3 所没有的特色，像是行号，回绕行，及大型档案的编辑。你可以自下面地点取得 vim-4.2-Chinese-patch 与 vim-4.2.tar.gz:

ftp://ftp.csie.nctu.edu.tw/pub/Unix/Chinese/cvim
再按下面的方法解开:
# tar -xvzf vim-4.2.tar.gz
# cd vim-4.2/src
# patch < ../../vim-4.2-Chinese-patch

你可更改 vim-4.2/src/feature.h 以符合你的需求。编译及安装很简单，就是
# make
# make install

8.4. he
DOS 上著名的文书编辑器汉书的 Linux 版。然而这是一个 shareware 程式，处理的文件有一百行的限制。

在下面地点取得:

ftp://linux.cis.nctu.edu.tw/packages/he_linux/he_linux.tar.Z

使用 root login

# cd /
# uncompress he_linux.tar.Z
# tar xvf he_linux.tar

相关之简易说明，请参考 /usr/lib/he/notes2.2，/usr/lib/he/chap15 及 /usr/lib/he/appendix 三个档案。

8.5. hztty
Hztty 可在不同中文编码格式做转换。首先解开 hztty-2.0.tar.gz

# tar -xvzf hztty-2.0.tar.gz
# cd hztty-2.0
# make linux

编译完之後，将执行档 hztty 移到你的 bin 目录，并将 man page 移到 man 目录。
# mv hztty /usr/local/bin
# chmod 555 /usr/local/bin/hztty
# cp hztty.1 /usr/local/man/man1
# chmod 444 /usr/local/man/man1/hztty.1

如何使用 hztty 请参考 hztty 的线上手册。

8.6. ktty
这是另一个跟 hztty 很像，用来在 kterm 或 pxvt 上阅读中文的工具。你可在此取得:

ftp://ftp.ifcss.org/pub/software/unix/convert/ktty1.3.tar.gz

然而它无法在 Linux 上编译。你需要使用 hztty-2.0.tar.gz 中的 ``tty.c''，然後在 Makefile 中加上两行

linux:
${MAKE} ${MFLAGS} DEFINES='-DPOSIX -DSYSV -DUSE_SYSV_UTMP' ${PROG}

这样就可以编译了
# make linux

8.7. Cemacs 与 CChelp For Emacs
Cemacs 是一种使用 GNU Emacs 来显示与编辑中文档案的方法。你必须在中文终端机上执行 Emacs。 CCHELP 是一套提供中文辅助讯息的系统。安装 CCHELP 之後，你可以用滑鼠在任意中文字上按下，然後就会有那个字的说明讯息跑出来，包括它的拼音，英文解释等。它同时支援 GB 与 BIG5 编码。

Cemacs 与 CCHELP 皆可在此取得:

ftp://ftp.math.psu.edu/pub/simpson/chinese/

请按照 cemacs 与 cchelp 的 README 指示安装。

8.8. Mule
MULE 是 MULtilingual Enhancement to GNU Emacs 的简写。简单的说，就是在 GNU Emacs 上加些东西，让它可以处理多国语言(编码系统)。它将多位元组(multi bytes)的编码系统(encoding system)重新在内部又编一次码，因此，一篇文章中可同时使用中文 (BIG5 跟 GB), 日文, 韩文, 英文, 泰文等等。

8.8.1. 取得 Mule-2.3 与 Linux 的修补档
在下面地点可取得 mule-2.3.tar.gz 及 Linux 的修补档 mule-2.3+lx.diff.gz:

ftp://sunsite.unc.edu/pub/Linux/distributions/je/sources/mule/

如果你用 Red Hat Linux, 可取得 RPM 的包装 mule-2.3-1.i386.rpm, mule-common-2.3-1.i386.rpm 及 mule-elispsrc-2.3-1.i386.rpm:

ftp://sunsite.unc.edu/pub/Linux/distributions/redhat/contrib/contrib-2.0.x/RPMS/

8.8.2. 编译与安装
解开压缩并加入修补档:

# tar -xvzf mule-2.3.tar.gz
# patch < mule-2.3+lx.diff
# cd mule-2.3/
# ./configure "i386-*-linux" --with-x11 --with-x-toolkit --with-gcc

如果你想将 mule 改成自己喜欢的样子，请阅读 INSTALL 档，并用 ``./configure --help''. 然後，更改 ``src/Makefile''，将 ``-lcurses'' 改成 ``-lncurses''。再来
# make
# make install

预设的安装目录是 /usr/local.

8.8.3. 在 Mule-2.3 使用中文
如果你已安装了字型，你可以用 mule 来输入与显示中文。大部份的字型都是 16 或 24 点的，所以用:

# mule -fn 8x16 &

或
# mule -fn 12x24 &

按 M-x load-library RETURN chinese RETURN . ``Ctrl-]'' 用来切换输入法。

8.9. hc
这是一个 BIG5 及 GB 编码的转换程式。在下面地点取得:

ftp://ftp.ifcss.org/pub/software/unix/convert/hc-30.tar.gz
依下法解开并安装:
# tar zxvf hc-30.tar.gz
# cd hc3
# make
# mv hc /usr/local/bin
# mv hc.tab /usr/local/lib/chinese
# mv hc.1 /usr/local/man/man1

GB 转为 BIG5 用

hc -m g2b -t /usr/local/lib/chinese/hc.tab < INPUT_FILE > OUTPUT_FILE

BIG5 转为 GB 用

hc -m b2g -t /usr/local/lib/chinese/hc.tab < INPUT_FILE > OUTPUT_FILE

你可以自己写一个 shell script 来简化上面的指令。

8.10. ctin
ctin 是一个已将所有讯息中文化的新闻讨论群阅读器(news reader). 你可以在此取得已编译完成的执行档取原始程式码:

ftp://linux.cis.nctu.edu.tw/packages/chinese/ctin/ctin-970625.src.bin.tgz

执行 ctin 前必须先设定环境变数 $NNTPSERVER 指向你想使用的新闻伺服器:

# export NNTPSERVER=netnews.ntu.edu.tw

然後执行 tin 即可。

8.11. 其它小玩意
你可以在这里找到一些可显示中文的小工具，如 cuptime, cw, cless, cwrite, cytalk 等等。

ftp://ftp.vit.edu.tw/unix/linux/chinese/


New Page 1

标题： ■ 如何在Linux上建立DNS服务器
姓名 ：张子波
Email：
地址 ：天津光电通信技术有限公司技术中心
转摘 ： http://www.computerworld.com.cn/

返回

---- 在一个基于TCP/IP协议的网络系统中，网络中的主机是通过一个32位的IP地址来进行寻址的。当一个网络拥有大量机器时，记住这些机器的IP地址是相当困难的。因此，为了简单起见，人们通常通过主机的名字来访问网络上的其它机器。这样就需要在寻址时把主机的名字解析成与它相对应的IP地址。目前解决这个问题主要有三种方法。

---- 一种解决方法是在网络上的每台机器上都维护一个hosts文件，该文件包含了一个网络上所有主机名到IP地址的映射表。当网络上增加、移走主机或重新分配IP地址时，就要修改每台机器上的hosts文件。显然，当网络上拥有大量机器时，这种方法是非常繁琐的。另一种解决方法是使用NIS（网络信息服务）在网络上共享一个hosts文件。但这种方法只适用于中小规模的Linux/UNIX网络，如果网络中含有windows机器，它就无能为力了。最后一种解决方法就是使用DNS（域名系统）。DNS作为一种新的名字解析机制，克服了上述两种方法的不足。本文将以RedHat Linux 6.0（kernel 2.2.5）为网络操作系统平台，介绍DNS的工作原理和配置方法。

---- 一、 DNS的工作原理

---- [编按：略]

---- 二、 DNS的配置

---- 假设我们有一个C类网络202.9.201，企业域名为toec.com。该网络上的域名服务器为ns.toec.com，它的IP地址为202.9.201.111。网络上有两台工作站workstation1.toec.com和workstation2.toec.com。它们的IP地址分别为202.9.201.1和202.9.201.2。在配置DNS之前，首先要确保网络畅通，可用ping或telnet等命令进行测试。然后用root帐号登录。

---- （一）、配置/etc/resolv.conf文件。在文件中加入下面两行：

search toec.com
nameserver 202.9.201.111

---- 其中search选项给出了一些可能的域名（各域名之间用空格分开）及搜索域名时的顺序。例如，要解析域名www.toec.com的IP地址，域名服务器会根据search选项的内容，首先解析www.toec.com.toec.com，如果解析失败再解析www.toec.com。nameserver选项则指定了域名服务器的IP地址。
---- （二）、配置/etc/nsswitch.conf文件。在文件中加入下面一行：

hosts: files dns

---- 该文件规定了在进行域名解析时，先在本地的/etc/hosts文件中查询。如果未找到，再通过/etc/resolv.conf文件中指定的域名服务器查询。
---- （三）、配置/etc/named.conf文件。该文件是守护进程named的配置文件，其内容如下所示：

options {
directory "/var/named";
};
zone "." {
type hint;
file "named.ca";
};
zone "0.0.127.in-addr.arpa" {
type master;
file "127.0.0";
};
zone "toec.com" {
type master;
file "toec.com";
};
zone "201.9.202.in-addr.arpa" {
type master;
file "202.9.201";
};

---- 现将文件中各行的含义介绍如下：

1～3行：directory选项定义了所有区域文件都位于/var/named目录下，下面zone中设置的文件名都是基于它的相对路径。

4～7行：告诉服务器守护进程named从/var/named/named.ca文件中读取有关根域名服务器的地址。如果域名服务器只工作在一个没有与Internet连接的局域网上，则该区域可不设。

8～11行：指定named作为127.0.0网段逆向查询（通过IP地址查询与之对应的主机名）的主域名服务器，并从/var/named/127.0.0文件中读取数据。

12～15行：指定named作为toec.com域的主域名服务器，并从/var/named/toec.com文件中读取数据。

16～19行：指定named作为202.9.201网段逆向查询的主域名服务器，并从/var/named/202.9.201文件中读取数据。
---- （四）、建立DNS数据库
---- 1、建立/var/named/named.ca文件，它包含了根服务器的IP地址。由于该文件是一个不断更新的文件，建议读者从Internet上下载一个最新的版本，而不要使用Linux系统提供的named.ca文件。其内容如下所示：

3600000 IN NS A.ROOT-SERVERS.NET.
A.ROOT-SERVERS.NET. 3600000 A 198.41.0.4
3600000 NS B.ROOT-SERVERS.NET.
B.ROOT-SERVERS.NET. 3600000 A 128.9.0.107
3600000 NS C.ROOT-SERVERS.NET.
C.ROOT-SERVERS.NET. 3600000 A 192.33.4.12
3600000 NS D.ROOT-SERVERS.NET.
D.ROOT-SERVERS.NET. 3600000 A 128.8.10.90
3600000 NS E.ROOT-SERVERS.NET.
E.ROOT-SERVERS.NET. 3600000 A 192.203.230.10
3600000 NS F.ROOT-SERVERS.NET.
F.ROOT-SERVERS.NET. 3600000 A 192.5.5.241
3600000 NS G.ROOT-SERVERS.NET.
G.ROOT-SERVERS.NET. 3600000 A 192.112.36.4
3600000 NS H.ROOT-SERVERS.NET.
H.ROOT-SERVERS.NET. 3600000 A 128.63.2.53
3600000 NS I.ROOT-SERVERS.NET.
I.ROOT-SERVERS.NET. 3600000 A 192.36.148.17
3600000 NS J.ROOT-SERVERS.NET.
J.ROOT-SERVERS.NET. 3600000 A 198.41.0.10
3600000 NS K.ROOT-SERVERS.NET.
K.ROOT-SERVERS.NET. 3600000 A 193.0.14.129
3600000 NS L.ROOT-SERVERS.NET.
L.ROOT-SERVERS.NET. 3600000 A 198.32.64.12
3600000 NS M.ROOT-SERVERS.NET.
M.ROOT-SERVERS.NET. 3600000 A 202.12.27.33

2、建立/var/named/toec.com文件。文件内容如下所示：

@ IN SOA ns.toec.com. root.ns.toec.com. (
1998081901 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
NS ns.toec.com.
MX 10 ns.toec.com.
localhost A 127.0.0.1
ns A 202.9.201.111
workstation1 A 202.9.201.1
workstation2 A 202.9.201.2
mail CNAME ns.toec.com.

---- 现将文件中各行的含义介绍如下：

---- （1）、第1行是一条SOA（Start Of Authority）记录。定义了toec.com域的主域名服务器的正式主机名字和负责维护此域的人的e-mail地址。其中地址中的“@”要由“.”代替。

---- （2）、第2行设置了该文件的版本号。二级域名服务器通过此版本号来判断主域名服务器的数据是否已更新。

---- （3）、第3行设置了二级服务器对主服务器进行两次SOA记录检查的时间间隔。

---- （4）、第4行设置了当二级服务器访问主服务器或数据更新失败后，间隔多长时间重试。

---- （5）、第5行设置二级服务器在没有和主服务器联系的情况下，经过多长时间放弃所有区域数据。

---- （6）、第6行设置二级服务器经过多长时间以后放弃RR（资源记录）。

---- （7）、第7行是一个NS记录。指定toec.com域的主域名服务器为ns.toec.com。

---- （8）、第8行是一个MX记录。为toec.com域指定一个邮件交换器，即上面SOA记录中root@ns.toec.com邮件地址所对应的邮件服务器名字。

---- （9）、第9～12行是几条A记录。定义了DNS域名到IP地址的映射，其中主机名部分可将toec.com省略。named在解析时会根据named.conf文件的相关设置，自动添加省略的部分。

---- （10）、第13行是一个CNAME记录，定义了主机的别名。例如，将ns.toec.com作为公司的邮件服务器，就可将mail.toec.com设为ns.toec.com的别名。这样，用户就可以根据习惯来访问公司的邮件服务器了。

---- 3、建立/var/named/202.9.201文件。该文件是网段202.9.201的逆向查询文件，内容如下所示：

@ IN SOA ns.toec.com. root.ns.toec.com. (
1998081901 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS ns.toec.com.
111 PTR ns.toec.com.
1 PTR workstation1.toec.com.
2 PTR workstation2.toec.com.

---- （1）、文件中1～7行与toec.com文件完全一样。
---- （2）、8～10行是几条PTR记录，定义了IP地址到DNS域名的映射。其中主机名部分必须为正式名称。

---- 4、建立/var/named/127.0.0文件。该文件是内部网络127.0.0的逆向查询文件，只有一个127.0.0.1 loopback地址。内容如下所示：

@ IN SOA ns.toec.com. root.ns.toec.com. (
1998081901 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS ns.toec.com.
1 IN PTR localhost.

---- （五）、启动named守护进程
---- # /usr/sbin/named

---- 三、检验DNS服务器的设置

---- 在Linux中提供了一个检查DNS服务器配置的工具：nslookup。在命令行状态下输入nslookup，就可进入nslookup的交互式环境。如果named配置正确，则会显示当前域名服务器的名称和地址。结果如下所示：

Default Server: ns.toec.com
Address: 202.9.201.111

---- （一）、检查正向DNS解析。在提示符“>”下输入主机名workstation1或workstation1.toec.com。nslookup应能显示主机名对应的IP地址，结果如下所示：
> workstation1
Server: ns.toec.com
Address: 202.9.201.111

Name: workstation1.toec.com
Address: 202.9.201.1

---- （二）、检查逆向DNS解析。在提示符下输入workstation1.toec.com的IP地址。nslookup应能显示IP地址对应的主机名，结果如下所示：
> 202.9.201.1
Server: ns.toec.com
Address: 202.9.201.111

Name: workstation1.toec.com
Address: 202.9.201.1

---- （三）、检查MX邮件地址记录。输入域名toec.com，nslookup应能显示对应的邮件服务器地址，结果如下所示：
> set q=mx
> toec.com
Server: ns.toec.com
Address: 202.9.201.111

toec.com preference = 10, mail exchanger = ns.toec.com
toec.com nameserver = ns.toec.com
ns.toec.com internet address = 202.9.201.111

---- （四）、检查CNAME别名记录。在提示符下输入ns.toec.com的别名mial.toec.com。nslookup应能显示正式的主机名，结果如下所示：
> set q=cname
> mail.toec.com
Server: ns.toec.com
Address: 202.9.201.111

mail.toec.com canonical name = ns.toec.com
toec.com nameserver = ns.toec.com
ns.toec.com internet address = 202.9.201.111

---- 四、更新DNS数据库
---- （一）、如果网络上增加了一台新的主机，则需要在/var/named/toec.com文件中追加一条A记录，在/var/named/202.9.201文件中追加一条相应的PTR记录，然后修改两个文件的版本号（Serial）。

---- （二）、利用控制named的工具ndc重新启动守护进程named，使已更新的DNS数据库生效。

---- # /usr/sbin/ndc restart

---- 通过上面的设置和测试，域名服务器就可以正常工作了。这里需要说明的是，根据INTERNIC对域名的管理规范，在一个独立的域名上，至少要有两台DNS服务器。即一台主服务器和一台二级服务器，以提高域名解析的可靠性。其实，在网络中只要建立一台主DNS服务器，DNS即可工作。因此，本文没有介绍二级服务器的配置方法，有兴趣的读者可以参考有关资料。


New Page 1

标题： ■ Linux Chinese HOWTO 中文版 : 其它软体的中文相关问题
姓名 ：黄志伟 陈永升
Email：
地址 ：
转摘 ：http://member.netease.com/

返回

9. 其它软体的中文相关问题
9.1. Netscape Navigator
有许多网页都讨论这个问题。Netscape (2.0 版以後) 同时支援 BIG5 及 GB 编码。要在 Netscape 下显示中文有三个步骤:

安装 X 的中文字型。请参考 安装中文字型 一节。
执行 netscape，将 Document Encoding 设定为 Tranditional Chinese (Big5) 或 Simplified Chinese.
在 Netscape 2.x, 3.x 中，这在 Options/Document Encoding/... 中设定。
在 Netscape Communicator 4.x 中，在 View/Encoding/... 中设定。
选择你要使用的中文字型。
在 Netscape 2.x, 3.x 中，由 Options/General Preferences/Fonts 设定。
在 Netscape Communicator 4.x 中，则在 Edit/Preferences.../Appearance/Fonts 里设定。
或许你会奇怪为何你只能使用 Fixed(HKU) Size 16.0。这是因为 /usr/X11R6/lib/X11/app-defaults/Netscape 的设定。假设你有下列这些 BIG5 字型
# xlsfonts | grep big5
-hku-fixed-medium-r-normal--0-0-72-72-c-0-big5.hku-0
-hku-fixed-medium-r-normal--16-160-72-72-c-160-big5.hku-0
-kc-kai-medium-r-normal-fantizi-0-0-75-75-c-0-big5.eten.3.10-1
-kc-kai-medium-r-normal-fantizi-20-200-75-75-c-200-big5.eten.3.10-1
-kc-kai-medium-r-normal-fantizi-24-240-75-75-c-240-big5.eten.3.10-1
-kc-ming-medium-r-normal-fantizi-0-0-75-75-c-0-big5.eten.3.10-1
-kc-ming-medium-r-normal-fantizi-15-150-75-75-c-160-big5.eten.3.10-1
-kc-ming-medium-r-normal-fantizi-24-240-75-75-c-240-big5.eten.3.10-1

在 /usr/X11R6/lib/X11/app-defaults/Netscape 上加一行
*documentFonts.charset*big5.eten.3.10-1: x-x-big5

如此 Netscape 就能够使用这些字型了。

另一个解决的方法是为你的字型名称加上别名(alias): 在你的字型目录下的 fonts.alias 档案中加(如果没有这个档案就自己建)

-big5-taipeik-medium-r-normal--16-160-72-72-c-160-big5.hku-1 taipei16
-big5-taipeik-medium-r-normal--20-200-72-72-c-200-big5.hku-1 taipeik20
-big5-taipeik-medium-r-normal--24-240-72-72-c-240-big5.hku-1 taipeik24

其中 taipeik20 等你是要为它取别名的字型名称。修改过要後用

# xset fp rehash

重新载入字型名称才会生效。

你可能会发现在中英文夹杂的网页里中英文字型的比例并不正确(如英文字太小)。这是因为你的选用的英文字型和中文字型大小并不配合的缘故。回到字型设定中选 Western(iso-8859-1), 然後更改英文字型的大小。调到你认为适当的大小比例即可。

9.2. sendmail
因为 sendmail 8.8.x 预设会将所有 8-bit 的信件编码後再送出，这或多或少会对收信人造成一些影响(参见 下一小节 的解决方法)。现在大部份的主机都已能直接传送 8-bit 的信件，所以你最好重新编译 sendmail, 将编码功能关掉。

在下面地点(或映射站台)取回最新版本的 sendmail:
ftp://ftp.sendmail.org/ucb/src/sendmail/
解开并更改 Makefile:
# tar zxvf sendmail-8.8.8.tar.gz
# cd src/Makefiles
# chmod u+w Makefile.Linux
# vi Makefile.Linux

在 CFLAGS+= 後加上 -DMIME8TO7=0.
编译并安装 sendmail:
# cd ..
# ./makesendmail all install

用手动方式安将 man pages 安装到适当目录(不装也没关系)。
砍掉旧的 sendmail 行程:
# kill -9 `head -1 /var/run/sendmail.pid`

重新启动 sendmail:
# /usr/sbin/sendmail -bd -q1h

9.3. procmail
Procmail 是一个电子邮件过滤器(mail filter). 它可将到的信件在存入你的信箱前先做处理，例如将信件分类等。不过这里要教你的是如何利用 procmail 来将被编码的中文信件解码成纯文字，以及在不同编码的信件转换为你常用的编码。

在你的 home 目录下建立 .procmailrc 档案，内容如下:

--------------------------------------------------------------------------------

# 在用 procmail 处理前先将信件储存下来，以免发生意外
# 你可以设定那些信件不必备份，例如由 MAILER-DAEMON 来的退信
:0 c
* !^From.*MAILER-DAEMON
mail/procmail-backup

# 将以 quoted-printable 或 base64 编码的信件解码
:0
* ^Content-Type: *text/plain
{
:0 fbw
* ^Content-Transfer-Encoding: *quoted-printable
| mimencode -u -q

:0 Afhw
| formail -I "Content-Transfer-Encoding: 8bit" \
-I "X-Mimed-Autoconverted: quoted-printable to 8bit by procmail"

:0 fbw
* ^Content-Transfer-Encoding: *base64
| mimencode -u -b

:0 Afhw
| formail -I "Content-Transfer-Encoding: 8bit" \
-I "X-Mimed-Autoconverted: base64


New Page 1

标题： ■ 用FIPS为LINUX分区
姓名 ：张国华
Email：
地址 ：
转摘 ： www.cpcw.com

返回

    LINUX是目前最热门的东西，相信许多朋友都在准备着装一个。在各种媒介上也都有许多关于LINUX的文章，网上更是随处可见。但是奇怪的是都没有提到用FIPS这个分区工具？真是很奇怪啊！
    那么FIPS是什么东西来的呢？其实你打开LINUX光盘找一找，它就在光盘根目录的dos-stuff目录下或dos-stuff\fips目录下了。好了，找到了吧？那么我们就具体谈谈它的使用吧！
    FIPS (First Interactive Partition Splitter) 程序是一个功能非常强大的MS-DOS工具程序，它可以在不删除硬盘上原有数据的情况下将硬盘上的一个分区分割重新分区。不过该程序只能分割MS-DOS的主分区（如果你的主分区不够大的话就算了吧），不能分割MS-DOS的扩展分区。下面是它的详细使用说明:
    1、假设你的全部硬盘都已分配给DOS/Windows使用. 请您建立一张DOS启动盘，将CDROM上的/install/FIPS目录下的RESTORRB.EXE（恢复分区用），FIPS.EXE 和ERRORS.TXT拷贝到该软盘上，不要直接在硬盘上使用FIPS。否则后果自负！
    2、先使用MS-DOS或Windows 95提供的SCANDISK （或Norton公司最新版本的NDD）来检查要划分的硬盘，修复错误，然后使用DEFRAG.EXE(或Norton公司最新版本的Speedisk，如果装了WIN95、98系统的就请用WIN95、98的磁盘碎片整理程序)来将硬盘。以保证硬盘的后半部分没有任何MS-DOS文件，注意像mirror或image这样的程序会重新把一些文件放在硬盘的最后面，请用“attrib -r -s -h image.idx”或 “attrib -r -s -h mirorsav.fil” 将这些文件的属性改为可读并删除他们，另外在autoexec.bat或config.sys中除去image或者mirror及其他防病毒程序如NAV，防止他们在FIPS重新启动机器时恢复原来的硬盘分区表。此外如果要用FIPS分割被doublespace，stacker， drivespace压缩的磁盘时只能分割压缩盘的宿主盘。做完这了这些准备工作之后，我们就开始分区吧。
    3、用做好的FIPS启动盘启动机器。运行FIPS, 当用户启动 FIPS 的时候， 程序可以让用户把硬盘上boot区及root区的备份写到软盘上的ROOTBOOT.00x （其中的 x 代表一个从0到9 的数字）文件里。如果在使用 FIPS 时发生任何错误，你就可以从软盘启动并执行RESTORRB 来恢复硬盘上原先的配置。 请注意： 如果你不止一次地使用 FIPS 的话（这一般是不必要的，但是可能发生），程序会把一个以上的 ROOTBOOT 档案写到软盘上。RESTORRB会让用户选择要恢复哪个配置文件。RESTORRB.000 这个文件包含用户原先的配置。正确选择0、1或2（视用了多少次而定，最后一次使用的数字最大）就可以即刻恢复分区前的状态，是不是很方便！^_^
    现在你必须输入新分区应该从哪个磁柱开始。使用左／右方向键来递增或递减磁柱的计数。不要急，看清楚了再按ENTER。剩下的分区以及新分区的大小会在程序中显示，选择正确的磁柱对你来说并不困难。每使用上／下方向键一次会递增十个磁柱。准备好后，按下enter继续。在此之后，可以选择重新编辑分区表（这会让用户重新选择划分分区）或是继续。如果用户键入“c”，则FIPS将会计算改变过的启动分区，再检查一次并提示用户是否要继续。如果用户键入“y” ，那么FIPS 将会把这些改变写入硬盘并结束。重新启动机器，用FDISK查看新配置是否已经起作用。现在,您的系统上应该有两个FAT分区,第一个是您的DOS/Windows的文件系统,第二个是个空的分区,可以被TurboLinux作为自己的分区。
    最后把这张启动盘保管好，以后一旦需要恢复你硬盘的分区，软盘启动并执行RESTORRB。你的硬盘就如同从未分过这一个区一样了！怎么样，的确很方便吧，还不快行动，把LINUX请进你的硬盘里去！


New Page 1

标题： ■ Linux Chinese HOWTO 中文版 : Linux 的中文化
姓名 ：黄志伟 陈永升
Email：
地址 ：
转摘 ：http://member.netease.com/

返回

10. Linux 的中文化
如果你还知道有那些 Linux 中文化的计画，请 告诉我。

10.1. Linux 中文文件计画
Linux 中文文件计画(CLDP)目前正全力进行於 Linux HOWTOs 文件的中文翻译工作，它的网址是 http://www.linux.org.tw/CLDP/。 CLDP 有一邮递列表 ldp-trans@linux.org.tw. 它成立的目的是:

结合众人的力量，整合 Linux HOWTO 翻译工作。
讨论 SGML Tools 中文处理问题。
分享及传承 Linux HOWTO 翻译的经验。
推广 Linux HOWTO 翻译计画。
其它与 Linux 中文化相关的工作。

想加入的话，请以 subscribe 为信件内容(非标题)寄到 ldp-trans-request@linux.org.tw 即可。如果你想得到此邮递列表进一步说明，请以 info 为信件内容寄到上述地址。若想得到邮递列表的使用说明，以 help 为信件内容寄到上述同一地址。如果你对邮递列表有任何建议或疑问，请写信到 ldp-trans-approval@linux.org.tw。

如果你愿意为 Linux 文件中文化尽一份力量，请加入此邮递列表。

10.2. Linux 中文化计划
这是为建立一个完整 Linux 中文化作业环境为目标的计划。由 陈永升 所发起，目前还在草创阶段，有待大家共同努力。

本计划的网页是 http://chinese.linux.org.tw/ 负责正式对外公告的，并提供本计划执行时问题讨论、批评建议与成果发表等工作。

10.3. Linux 的中文站台
下列地点可找到 Linux 中文资讯。如果你还知道有其它未列出的，请告诉我。

BIG5

http://www.linux.org.tw/
http://chinese.linux.org.tw/
http://linux.cis.nctu.edu.tw/
http://linux.ntcic.edu.tw/
http://freebsd.ee.ntu.edu.tw/bbs/6/index.html
http://cc.shu.edu.tw/~rick/wwwguide/c_linux_hopenet.html
http://henry.cis.nctu.edu.tw/~linuxwww/
http://marr.dorm9.nccu.edu.tw/~marr/Comp/PC-Unix/index.html
http://www.phys.ntu.edu.tw/~cwhuang/pub/os/linux/
GB
http://csun01.ihep.ac.cn/
http://www.clinux.ml.org/

10.4. Linux 的中文讨论区
如果你有问题，可以在这些讨论区发问，用中文也通哦! 不过请确定你已经先看过了相关的文件或 HOWTO. 否则重复问一些 FAQ 是很不受欢迎的!

news://tw.bbs.comp.linux
telnet://henry.cis.nctu.edu.tw


New Page 1

您现在的位置：网上学校 >> 网上交流 >> LINUX 应用与技巧

标题： ■ Linux Chinese HOWTO 中文版 : 常见问题解答
姓名 ：黄志伟 陈永升
Email：
地址 ：
转摘 ：http://member.netease.com/

11. 常见问题解答
11.1. 为何我无法输入中文?
答: 这个问题问得太笼统了! 你是在什麽情况下不能输入中文的?

如果你是在 console 的 shell 下不能输入中文，请参考 中文输入问题 一小节的说明。

如果你是在编辑器中不能输入，可能你的编辑器无法支援中文。请参考 有用的中文软体 一节安装能支援中文的编辑器。

如果你是 telnet 到别入的机器後不能输入中文，那麽问题很可能在 telnet 这支程式上。请参考 telnet 一小节的说明。

11.2. 我已取回 NTU TTF 字型，但要如何解压缩呢?
答: NTU TTF 字型是以 arj 格式压缩并分成好几个档案(以便让你可以放进磁片中)，解压缩的方法有点麻烦。例如你想要 ntu_kai.ttf 字型，你必须取回 ntu_kai.arj, ntu_kai.a01, ntu_kai.a02, ntu_kai.a03 四个档案。假如你有 DOS 版的 arj 程式，将这四个档案放在同一目录并用这个指令来解压缩:

C:\> arj x -va -y ntu_kai

如果你想在 Linux 上解压缩，要用 unarj 一个一个解开後再用 cat 将它合并:

# unarj e ntu_kai.arj ; mv ntu_kai.ttf ntu_kai.ttf0
# unarj e ntu_kai.a01 ; mv ntu_kai.ttf ntu_kai.ttf1
# unarj e ntu_kai.a02 ; mv ntu_kai.ttf ntu_kai.ttf2
# unarj e ntu_kai.a03 ; mv ntu_kai.ttf ntu_kai.ttf3
# cat ntu_kai.ttf* > ntu_kai.ttf

11.3. Netscape 的标题列/书签看不到中文?
答: 安装 CXWin 即可。请参考 CXWin 一节的说明。

11.4. 我的 Netscape 看不到中文呀?
答: 如果你在所有的网页都看不到中文，那麽你可能没安装中文字型，或是未将 Netscape 设定好。参考 Netscape 一小节的说明。

但是如果你在大部份的中文网页都可以看到中文，只有在少部份的站台却看到乱码，那麽这可能就不是你的问题了。少数站台采用 M$ FrontPage 制作的网页其语言编码(language encoding)的部份是 x-x-big5 而非一段通用的 big5. 这使得除 IE 之外其它的浏览器皆无法辨识其编码。这只不过是微软企图霸占浏览器市场所采用的恶劣手段之一罢了。解决这个问题最好的办法应该是发信给该站台的管理者，告诉它世界上除了 IE 之外还有其它的浏览器。如果不想倒站的话最好改用正常的编码方式。

当然如果你有更好的解决手段也请告诉我。

11.5. 如何在 Netscape 输入中文?
答: 安装 xcin+XA 即可。请参考 XA 一节的说明。

11.6. ChiTeX 与 CJK 有何不同? 可否同时安装?
答:

CJK 的中文字形读取寻找系统架构在 LaTeX 的 NFSS 上， ChiTeX 的中文字形读取寻找系统是独立而效率高的系统
CJK 可使用中文，日文，韩文; 而 ChiTeX 只对中文正体字(Big5)
CJK 只能用在 LaTeX 上; 而 ChiTeX 可用在 plain TeX 与 LaTeX 上。
ChiTeX 指令简单但很有用。
ChiTeX 是接近真正中文 LaTeX 的 中文 LaTeX。
功能的不同...
ChiTeX 和 CJK 应该是可以同时安装的，但是 ChiTeX 与 CJK 所用的 ttf2pk 如果同名字，可能有问题。解决的办法是在各自起始的指令稿(shell script)中定义 $PATH 变数，使其指向正确的 ttf2pk 位置。 (感谢陈弘毅教授解答。)

［关闭此窗口］


New Page 1

标题： ■ Linux Chinese HOWTO 中文版 : 附录 - FTP.IFCSS.ORG 的中文软体列表
姓名 ：黄志伟 陈永升
Email：
地址 ：
转摘 ：http://member.netease.com/

返回

12. 附录 - FTP.IFCSS.ORG 的中文软体列表
警告：预先编译好的 Linux 执行档多已过期，而且可能无法使用。

****
UNIX
****

========
UNIX:BBS
========

software: Phoenix BBS
version : 4.0, 1995.08.31
function: o UNIX platform multiuser BBS system,
o discussion boards, private email
o multichannel chat, one-to-one chat
o Internet Email, News gateway,
o 0Announce : Gopher-like information query interface.
o fine tuned to allow more than 256 users on-line
o configurable menu, screen display
o Chinese message
URL : ftp://ftp.ifcss.org/pub/software/unix/bbs/PhoenixBBS-4.0.tar.gz
author : Ji-Tzay Yang, Ming-Feng Chen, Tzung-Yu Wen

============
UNIX:C-UTILS
============

software: addpy
version : 1.0
function: To annotate Pinyin to rare Hanzi and a portion of
randomly selected common Hanzi. Both GB (simplified) and
Big5 (traditional) versions. Based on statistics derived
from huge Chinese corpus and well prepared hazni-freq-pinyin
tables. Source code and raw data provided.
URL : ftp://ifcss.org/pub/software/unix/c-utils/addpy.tar.gz
filename: README.addpy, b5addpy.l, gbaddpy.l, b5addpy.dat,
gbaddpy.dat, makefile
author : Guo Jin

software: rm4mat
version : n/a
function: remove formating codes for printing in some GB files
URL : ftp://ftp.ifcss.org/pub/software/unix/c-utils/rm4mat.c
author : Chenghong Wang

software: mail_hxwz
version : 1.1
function: It extracts HXWZ from your mail (Suppose you are subscribing
it). It is a Bourne shell program which works on most Unix
systems. It can rerun itself every Friday automatically.
URL : ftp://ftp.ifcss.org/pub/software/unix/c-utils/mail_hxwz
author : Yaoen Zhang

software: auto_get_hxwz
Version : 1.2
Function: It gets the current issue of HXWZ in GB or postscipt format.
It also process and print these files, and do the clean up.
It save your time and server machine time.
URL : ftp://ftp.ifcss.org/pub/software/unix/c-utils/auto_get_hxwz
author : Yaoen Zhang

software: Chinese less
version : 290, 1995.5.25
function: Browse BIG5 and GB text files
URL : ftp://ftp.ifcss.org/pub/software/unix/c-utils/cless-290.tar.gz
author : Paul W. Shew
comment : requires a chinese terminal, like cxterm.

software: cscreen
version : 3.2b
function: This is a modified screen to minic ETen in cxterm.
After you run cscreen in cxterm, it will intercept
every key movement and examine if the current
screen postion has a Chinese char. If it has,
auto-key movements will be made accordingly.
URL : ftp://ftp.ifcss.org/pub/software/unix/c-utils/cscreen-3.2b.tar.gz
author : Shih-Kun Huang

software: ytalk
version : 3.0.2c6
function: ytalk-3.02c provides better compatibility for DEC's
workstations, two-byte refresh for terminal like cxterm, and
capable of passing character code 254, internally used as erase
function in ytalk-3.0; Compatible with ytalk-3.0, cytalk-3.0,
cytalk-3.0.2, ytalk-3.02c0/1/2/3/4/5, that is, you can still use
Delete, or Backspace key. If both ends use ytalk-3.02c4, the code
254 is transparent, you can use more Chinese words to talk to
others.
URL : ftp://ftp.ifcss.org/pub/software/unix/c-utils/ytalk-3.0.2c6.tar.gz
author : Sze-Yao Ni

software: lunar
version : 2.1
function: conversion program between Solar and Chinese lunar calendars;
calculation of birthday in "4-column" astrology as well
URL : ftp://ftp.ifcss.org/pub/software/unix/c-utils/lunar-2.1.tar.gz
author : Ricky Yeung and Fung Fung Lee
comment : can output GB code, bitmap, or just ASCII

software: DateStar - Chinese Calendar Producer
version : 1.1
function: Displays Chinese and western calendar in
ASCII code, BIG-5 code (Hongkong, Taiwan),
GuoBiao code (PRC Standard), and HZ code (Network)
Prints on two most popular laser printers
PostScript laser printers, and
HP LaserJet (PCL) printers
Generates four different format
Yearly calendar, Monthly calendar,
One-page Weekly calendar, and Two-page Weekly calendar
Shows calendar with 24 Solar Terms (JieQi),
the Heavenly Stems and Earthly Branches
(TianGan DiZhi Eight Characters)
Supports user defined annotations
Applicable from year 1841 through to 2060
URL : ftp://ftp.ifcss.org/pub/software/unix/c-utils/datestar-1.1.tar.gz
author : Youzhen Cheng
comment : UNIX version works on SUN Workstation with SUN OS 4.1.x
see /software/dos/c-utils for DOS version

software: pull
version : 2.9, 1996.4.7
function: 1. Extracts the original file(s) from uuencoded/compressed/split
file(s).
a) uudecode a file and display the name of its decoded file
b) decompress .zz (= .gz/.Z/.zip) file
c) uudecode + decompress
d) uudecode + cat (concatenate) + gunzip
2. Packs file. Reverse the above `extracting' process.
compresses, (splits), then encodes file(s)
URL : ftp://ftp.ifcss.org/pub/software/unix/utils/pull.c.gz
author : Yao Li

software: utf-utils
version : 15 Oct 1993.
function: some utility programs for manipulating Unicode/ISO-10646 text
in the FSS-UTF encoding.
URL : ftp://ftp.ifcss.org/pub/software/unix/c-utils/utf-utils.tar.gz
author : Ross Paterson

software: gbfmt
version : 1.0
function: GB formatting with variable line width, GB<->HZ
URL : ftp://ftp.ifcss.org/pub/software/unix/c-utils/gbformat.tar.gz
author : Dongxiao Yue (http://www.cs.umn.edu/~dyue/wiihist/gbfmt.html)

===========
UNIX:EDITOR
===========

software: celvis
version : 1.3
function: vi editor with Chinese handling capabilities.
Most run on some Chinese terminal, e.g. cxterm, or IBM-PC with
some kind of Chinese DOS. Work exactly like Unix vi editor,
except that it side-scrolls long lines instead of wrapping.
URL : ftp://ftp.ifcss.org/pub/software/unix/editor/celvis.tar.gz
ftp://ftp.cs.purdue.edu/pub/ygz
author : Man-Chi Pong, Yongguang Zhang
comment : comments, bug-reports, modifications to: c-elvis@cs.purdue.edu

software: Chinese JOE (Joe's Own Editor)
version : 2.8c
function: Chinese BIG5 localized text screen editor. The key sequences are
remeniscent of WordStar and TURBO-PASCAL. Makes full use of
termcap/terminfo, is designed to work well over slow networks and
low baud rate modems, and has the best features of vi. Most
useful for editing unformatted text, such as USENET news articles
and for editing block-structured languages such as C and PASCAL.
URL : ftp://ftp.ifcss.org/pub/software/unix/editor/joe2.8_c.tar.gz
author : <u8222034@cc.nctu.edu.tw>

============
UNIX:CONVERT
============

software: cn2jp
version : 1.3.2, 1996.4.11
function: code conversion routines for Chinese and Japanese
URL : ftp://ftp.ifcss.org/pub/software/unix/convert/cn2jp1.3.2.tar.gz
author : Seke Wei

software: ktty
version : 1.3, 1996.4.11
function: This is a kanji terminal translator among Chinese and Japanese.
It allows online translation of codes so that you can view a
specific code real time using your Chinese or Japanese terminal.
It runs on Unix and is derived from the 'hztty' package
URL : ftp://ftp.ifcss.org/pub/software/unix/convert/ktty1.3.tar.gz
author : Seke Wei

software: code1
version : 1.3, 1996.4.11
function: This is a multilingual file browser for Chinese and Japanese.
It runs on Unix and allows browsing of files in various codes
using a Chinese or Japanese terminal.
URL : ftp://ftp.ifcss.org/pub/software/unix/convert/code1.3.tar.gz
author : Seke Wei

software: HUG program
version : 1.0, 1995.5.20
function: Converting between HZ, Uudecode/uuencode, GB codes
URL : ftp://ftp.ifcss.org/pub/software/unix/convert/shug.osf.zip
ftp://ftp.ifcss.org/pub/software/unix/convert/shug.sun4.zip
author : Yinrong Huang

software: hztty
version : 2.0 Jan 29, 1994
Function: This program turns a tty session from one encoding to another.
For example, running hztty on cxterm can allow you to read/write
Chinese in HZ format, which was not supported by cxterm.
If you have many applications in different encodings but your
favor terminal program only supports one, hztty can make life easy.
For example, hztty can your GB cxterm into a HZ terminal, a
Unicode (16bit, or UTF8, or UTF7) terminal, or a Big5 terminal.
URL : ftp://ftp.ifcss.org/pub/software/unix/convert/hztty-2.0.tar.gz
author : Yongguang Zhang

software: EHZ
version : 2.0
function: Conversion among GB/BIG5/CNS and EHZ-BIG5/GB/CNS.
Patch to hztty to support EHZ-BIG5/GB/CNS.
URL : ftp://ftp.ifcss.org/pub/software/unix/convert/EHZ-2.0.tar.gz
author : Ricky Yeung
comment : Also contains the EHZ spec and Fung Fung Lee's EHZ-BIG5-CNS spec.

software: b5cns
version : prototype
function: functions to convert Big5 <-> CNS
URL : ftp://ftp.ifcss.org/pub/software/unix/convert/b5cns.tar.gz
author : Ross Paterson

software: c2t
version : n/a
function: converts GB or BIG5 coded chinese to _pinyin_
URL : ftp://ftp.ifcss.org/pub/software/unix/convert/c2t.tar.gz
authors : Tommi Kaikkonen and Katya Ta

software: BeTTY/CCF/B5Encode package
version : 1.534, 1995.03.22
function: a chinese code conversion package for codes widely used
in Taiwan and the GB code widely used in Mainland, plus
a 7-bit Big5 encoding method (B5Encode3/B5E3, an extension
to HZ encoding for GB),
including off-line converters (CCF/Chinese Code Filters and
B5E/B5Encode) and an on-line converter (BeTTY) which simulates
your native chinese terminal to become aware of the coding
systems widely used in Taiwan and GB, HZ encoding.
URL : ftp://ftp.ifcss.org/pub/software/unix/convert/BeTTY-1.534.tar.gz
ftp://hermes.ee.nthu.edu.tw/shin/betty/BeTTY-1.534.tar.gz
author : Jing-Shin Chang

software: BeTTY-ws_2fl.p1
version : 1.0 (patch to BeTTY-1.534) Oct. 1995.
function: 1. makes BeTTY respect the window(tty) size.
2. a second Chinese code converting filter can be added on.
URL : ftp://ftp.ifcss.org/pub/software/unix/convert/BeTTY-ws2fl.p1.tar.gz
author : Wei Dong

software: c2gif
version : 0.01, 1995.10.21
function: convert a BIG5 text file to a GIF file
URL : ftp://ftp.ifcss.org/pub/software/unix/convert/c2gif001.tar.gz
http://www.math.ncu.edu.tw/~luors/c2gif/
author : Luoh Ren-Shan

software: gb2jis
version : 1.5, 1995.11.19
function: convert GB (or HZ) to JIS with two-letter pinyin
URL : ftp://ftp.ifcss.org/pub/software/unix/convert/gb2jis.tar.gz
ftp://ftp.ifcss.org/pub/software/fonts/gb/bdf/guobiao16.bdf.gz
author : Koichi Yasuoka

software: jis2gb
version : 1.5, 1996.1.10
function: convert JIS to GB (or HZ)
URL : ftp://ftp.ifcss.org/pub/software/unix/convert/jis2gb.tar.gz
ftp://ftp.ifcss.org/pub/software/fonts/gb/bdf/guobiao16.bdf.gz
author : Koichi Yasuoka

software: HZ
version : 2.0
function: convert among GB, HZ and zW
URL : ftp://ftp.ifcss.org/pub/software/unix/convert/HZ-2.0.tar.gz
author : Fung F. Lee

software: HZ+ specification and conversion utilities
version : 0.77
function: HZ+ is a convenient 7-bit representation of mixed Big5, GB,
and ASCII text for use in Internet e-mail, news, etc.
Source code for Big5 <-> HZ+ and GB <-> HZ+ conversion
utilities is here. DOS executables can be found in
another archive, /software/dos/convert/hzp.zip. New in
this Unix version is a simple HZ+ terminal program for cxterm
which allows the user to transparently read HZ+ mail and news.
URL : ftp://ftp.ifcss.org/pub/software/unix/convert/hzp.tar.gz
author : Stephen G. Simpson

software: hc
version : 3.0
function: convert between GB and BIG5
URL : ftp://ftp.ifcss.org/pub/software/unix/convert/hc-30.tar.gz
author : Fung F. Lee and Ricky Yeung

software: Support Table for Hanzi Convert (hc)
version : 1994/05/01
function: Convert table supports the program Hanzi Convert
(Author : Fung F. Lee and Ricky Yeung) GB<->Big5.
Include Russian, number, Japanese, graphing symbols and
"incorrect" codes. Text file, comments in it.
URL : ftp://ftp.ifcss.org/pub/software/unix/convert/sym-supp.tab
ftp://ftp.ifcss.org/pub/software/unix/convert/in-corr.tab
author : Chi-Ming Tsai

software: pbmbig5
version : 0.01, 1995.11.2
function: convert big5 coded Chinese text file to pbm graphic file
URL : ftp://ftp.ifcss.org/pub/software/unix/convert/pbmbig5-0.01.tar.gz
ftp://ftp.ifcss.org/pub/software/fonts/big/hbf/kck24.hbf
ftp://ftp.ifcss.org/pub/software/fonts/big/hbf/kcchin24.f02
author : Wei-Jou Chen

software: UTF utilities
version : 31 May 1994.
function: various utilities for the UTF encoding of Unicode/ISO-10646,
including conversion from ISO-2022 and (partially) back again.
URL : ftp://ftp.ifcss.org/pub/software/unix/convert/utf.tar.gz
author : Ross Paterson

software: utf7
version : prototype, use at your own risk
function: functions to convert between UTF-7 and other codes
URL : ftp://ftp.ifcss.org/pub/software/unix/convert/utf7.tar.gz
author : Ross Paterson

software: ISO-2022-CN encoder and decoder
version : beta 960408
function: Convert between CN-GB and CN-CNS codes
URL : ftp://ftp.ifcss.org/pub/software/unix/convert/iso-cn.tgz
author : handa@etl.go.jp
comment : BIG5 code is not yet supported.

===============
UNIX:NETWORKING
===============

software: gopher2.014c
version : 2.0.14
function: A Chinese localized gopher client capable of 8-bit BIG5 Chinese
string search on IBM AIX, SUN OS, and any other machines.
Compatable with any BIG5 Chinese system such as ET and
cxterm. executable binary for ibm and sun included.
URL : ftp://ftp.ifcss.org/pub/software/unix/networking/gopher2.014c.tar.gz
ftp://ftp.ifcss.org/pub/software/unix/networking/gopher.ibm.tar.gz
ftp://ftp.ifcss.org/pub/software/unix/networking/gopher.sun.tar.gz
author : Hoo-Tung Cheuk (NCTU CIS, Taiwan)

software: Chinese Tin
version : 1.2PL2a
function: tin 1.2PL2 newsreader with English/Big5 message toggle.
URL : ftp://ftp.ifcss.org/pub/software/unix/networking/ctin122a.tar.gz
author : Shih-Kun Huang

software: NcFTP with chinese message compatible
version : 2.3.0c, 1996.1.17
function: Chinese (BIG5) patch to NcFTP.
Now it can display any chinese message from ftp server instead
of "\xxx". ANSI color compatible in Line Mode.
URL : ftp://ftp.ifcss.org/pub/software/unix/networking/ncftp-2.3.0.chinese.tgz
author : NCEMRSoft (orig), Aiken Sam (chinese patch)

==========
UNIX:PRINT
==========

software: C2PS
version : 1.30 Aug 1 1995
function: Translate Big5 coded Chinese document into Level 2 PostScript.
This is the version for Sparcstation. Using Chinese TrueType fonts,
you can create the most beautiful document with C2PS.
This is a DEMO version. You can freely copied and use it.
URL : ftp://ftp.ifcss.org/pub/software/unix/print/c2ps130sos.tar.gz
ftp://ftp.ifcss.org/pub/software/fonts/big5/ms-win/
author : Hsueh-I Lu

software: cnprint
version : 2.60 JAN-25-95
function: print GB/Hz/BIG5/JIS/KSC/UTF8 etc or convert to PostScript
(conforms to EPSF-3.0). Fast. Multicolumn. Vertical printing.
Small disk space requirement. "Intelligent" treatment of
punctuations. Flexible change of fonts, char size,
width/height, char and line spaces, paper orientation and
margins, etc. Support of European chars. Special modes for
printing HXWZ. See readme for more
URL : ftp://ftp.ifcss.org/pub/software/unix/print/cnprint260.tar.gz
ftp://ftp.ifcss.org/pub/software/fonts/{gb,big5,misc,unicode}/hbf/
author : Yidao Cai
comment : v2.60 is also for VMS, use v2.61 for DOS

software: GBscript
version : 1.11
function: Convert GB/ASCII mixed text to PostScript output.
High print speed (4ppm on LaserWriter NTX).
Support Adobe-2.1.
Small PS file size (400K for one HXWZ issue).
URL : ftp://ftp.ifcss.org/pub/software/unix/print/gbscript-1.11.tar.gz
author : Yan Zhou

software: gb2ps
version : 2.02
function: convert GB/HZ to postscript, supports simple page formatting
(change chinese fonts and font size, cover page, page
number, etc). Five chinese fonts are provided in this
release, they are Song, Kai, Fang Song, Hei and FanTi
The HZ ENCODING is also supported.
URL : ftp://ftp.ifcss.org/pub/software/unix/print/gb2ps.2.02.tar.gz
ftp://ftp.ifcss.org/pub/software/fonts/gb/misc/fan24.ccf.gz
ftp://ftp.ifcss.org/pub/software/fonts/gb/misc/fang24.ccf.gz
ftp://ftp.ifcss.org/pub/software/fonts/gb/misc/hei24.ccf.gz
ftp://ftp.ifcss.org/pub/software/fonts/gb/misc/kai24.ccf.gz
ftp://ftp.ifcss.org/pub/software/fonts/gb/misc/song24.ccf.gz
author : Wei SUN

software: news2ps
version : n/a
function: news2ps converts BIG5 to Postscript
URL : ftp://ftp.ifcss.org/pub/software/unix/print/news2ps.c
ftp://ftp.ifcss.org/pub/software/fonts/big5/misc/chinese.16.new
author : The Society of HKU Postgraduate on Chinese Affairs
comment : rename chinese.16.new to chinese.16

software: hz2ps
version : 3.1
function: Convert hanzi (GB/BIG5) text to PostScript.
Use HBF font files.
URL : ftp://ftp.ifcss.org/pub/software/unix/print/hz2ps-3.1.tar.gz
ftp://ftp.ifcss.org/pub/software/fonts/{gb,big5}/hbf/
author : Fung F. Lee

===========
UNIX:VIEWER
===========

software: ChiRK
version : 1.2a
function: GB/HZ/BIG5 text viewer on terminals (or emulations) capable
of displaying Tektronics 401x graphics, such as GraphOn,DEC
VT240/330, Xterm, Tektool on Sun, EM4105 on PC,
VersaTerm-Pro on Mac, etc.
displays up to 17x40 Chinese characters per screen. works directly
under UNIX mail and news programs. Comes with four fonts.
URL : ftp://ftp.ifcss.org/pub/software/unix/viewer/ChiRK-1.2a.tar.gz
ftp://ftp.ifcss.org/pub/software/fonts/gb/hbf/cclib.v
ftp://ftp.ifcss.org/pub/software/fonts/gb/hbf/cclib.16
ftp://ftp.ifcss.org/pub/software/fonts/gb/hbf/cclibf.16.gz
ftp://ftp.ifcss.org/pub/software/fonts/big5/misc/chinese.16.new.gz
author : Bo Yang
comment : rename chinese.16.new to chinese.16

software: Cbanner
version : 1.10, 950821
function: To show Chinese word's banner
URL : ftp://ftp.ifcss.org/pub/software/unix/banner/cbanner1.10.tar.gz
author : Sheen Cherng-Dar, rewritten by Jonen Liu
comment : requires ETen Big5 Chinese System's fonts.

software: gb2text
version : n/a
function: convert GB to text
URL : ftp://ftp.ifcss.org/pub/software/unix/viewer/gb2text.c
author : Ding Yijun

software: hzbanner
version : 1.1, Feb 15, 1995
function: Display Song style GuoBiao in large ASCII characters,
supports GB2312-80 (^[$A), GB2312-80 + GB8565-88 (^[$(E),
Chinese-EUC (8-bit Guobiao) CNS Plane 1 & 2, BIG5 and HZ-encoding
( ?琅??)
URL : ftp://ftp.ifcss.org/pub/software/unix/viewer/hzbanner11.tar.gz
ftp://ftp.ifcss.org/pub/software/fonts/gb/bdf/guobiao16.bdf.gz
ftp://ftp.ifcss.org/pub/software/fonts/cns/bdf/cns1hku16.bdf.gz
ftp://ftp.ifcss.org/pub/software/fonts/cns/bdf/cns2hku16.bdf.gz
author : Koichi Yasuoka

software: hzview
version : 3.1
function: Display hanzi (GB/BIG5) text on dumb terminal.
Use HBF font files.
URL : ftp://ftp.ifcss.org/pub/software/unix/viewer/hzview-3.1.tar.gz
ftp://ftp.ifcss.org/pub/software/fonts/{gb,big5}/hbf/
author : Fung F. Lee

Software: cnview
Version : 3.1 (UNIX version. DOS version available under /software/dos/viewer)
Function: View GB/Hz/Big5 encoded Chinese text file on * HP-UNIX (X-window) *
URL : ftp://ftp.ifcss.org/pub/software/unix/viewer/cnview.tar.gz
ftp://ftp.ifcss.org/pub/software/fonts/{big5,gb}/hbf/
Author : Jifang Lin

software: readgb
version : n/a
function: convert GB to text
URL : ftp://ftp.ifcss.org/pub/software/unix/viewer/readgb.c
author : Yuzhao Lu
comment : modified from readnews.c

software: readnews
version : n/a
function: readnews converts BIG5 to ascii dot-matrix picture
URL : ftp://ftp.ifcss.org/pub/software/unix/viewer/readnews.c
ftp://ftp.ifcss.org/pub/software/fonts/big5/misc/chinese.16.new.gz
author : The Society of HKU Postgraduate on Chinese Affairs
comment : rename chinese.16.new to chinese.16

==========
UNIX:INPUT
==========

software: CCTeach
version : 1.0
function: Chinese Character input method Teacher.
Help new user to learn CC input and some utility programs
of "cxterm NewFace" for associate dictionary tool,
hotkey tool, WuBi phrase encoder, and converter with
".tit" <==> ".titnf".
Based on GB and Big5 (ETen and HongKong).
Support all input method by external dictionary file.
Need cxterm in unix, CC DOS or ZW DOS in PC.
URL : ftp://ftp.ifcss.org/pub/software/unix/input/CCTeach1.0.tar.gz
author : Xiaokun Zhu

=========
UNIX:MISC
=========

software: ICCS 1.3
version : 1.3, June 26, 1994
function: Internet Chinese Chess Server
URL : ifcss.org:/software/unix/misc/iccs-1.3.tar.gz
author : Xi Chen
comment : file off-lined due to legal status July 3, 1996. Please contact
the author Xi Chen at xichen@abel.math.harvard.edu for further info.

========
UNIX:WWW
========

software: cdelegate
version : 1.4a, 1996.5.1
function: This is a Chinese patch on DeleGate, a gateway for the WWW services.
provides code translation between Chinese/Japanese for WWW browsers
URL : ftp://ftp.ifcss.org/pub/software/unix/www/cdelegate1.4.tar.gz
author : Seke Wei

software: Chinese Lynx
version : 2.5FMc, 1996.7.19
function: Chinese BIG5/GB patch to lynx, a WWW client for vt100 terminals.
Volunteers needed to continue on the patch.
URL : ftp://ftp.ifcss.org/pub/software/unix/www/clynx25.zip
author : Nelson Chin

software: Internet MahJong Server (server + client applet)
version : 0.2beta
function: provides a server and a graphic client for playing MahJong on
the Internet.
URL : ftp://ftp.ifcss.org/pub/software/unix/www/MJ_dist.tar.gz
author : Zuwei Thomas Feng
*****
LINUX
*****

software: D Series (Chinese Tools, ELF binary)
version : 1.00, March 25, 1995
function: Binary distribution of various useful Chinese tools:
Viewers -- cxterm, crxvt; Input server -- xcin; GB,Big5,HZ,B5E3
code converters -- ccf, hc, hz2gb, gb2hz, zw2hz, b5decode,
b5encode; Print tool -- lunar, ttf2ps; Pseudo tty -- hztty,
betty; Various handy scripts, man pages, dictionaries, HBF fonts,
xfonts included; chdrv, celvis, elm, sendmail
URL : ftp://ftp.ifcss.org/pub/software/linux/CLinux/CTool/d1
ftp://ftp.ifcss.org/pub/software/linux/CLinux/CTool/d2
ftp://ftp.ifcss.org/pub/software/linux/CLinux/CTool/d3
ftp://ftp.ifcss.org/pub/software/linux/CLinux/CTool/d4
author : Eric Lin
comment : requires XFree86 3.1+, ELF libraries

software: C Series (Chinese packages for Slackware)
version : N/A
function: The Chinese packages collected by Wei-Jou Chen can be installed by
Slackware's setup tools. Basic idea are that we have right to install
and remove Chinese softwares easily and beginners can play them
without much trouble.
URL : ftp://ftp.ifcss.org/pub/software/linux/CLinux/c1/
ftp://ftp.ifcss.org/pub/software/linux/CLinux/c2/
ftp://ftp.ifcss.org/pub/software/linux/CLinux/c3/
ftp://ftp.ifcss.org/pub/software/linux/CLinux/c4/
ftp://ftp.ifcss.org/pub/software/linux/CLinux/c5/
compiler: CHEN, Wei-Jou

software: MU Series (Mule packages for Slackware)
version : N/A
function: The Multilingual Emacs 2.0 packages for XFree86 2.X and 3.1
collected by Shawn Hsiao can be installed by Slackware's setup
tools
URL : ftp://ftp.ifcss.org/pub/software/linux/CLinux/mu1/
ftp://ftp.ifcss.org/pub/software/linux/CLinux/mu2/
ftp://ftp.ifcss.org/pub/software/linux/CLinux/mu3/
ftp://ftp.ifcss.org/pub/software/linux/CLinux/mu4/
ftp://ftp.ifcss.org/pub/software/linux/CLinux/mu5/
ftp://ftp.ifcss.org/pub/software/linux/CLinux/mu6/
compiler: Shawn Hsiao

=============
LINUX:C-UTILS
=============

software: GNU fileutils-3.9
version : 3.9, 1 August 1994
function: Chinese version of the GNU file utility programs for Linux.
URL : ftp://ftp.ifcss.org/pub/software/linux/c-utils/fileutils-3.9-bin-chinese.tar.gz
author : Patrick D'Cruze

software: C2PS
version : 1.30 Aug 1 1995
function: Translate Big5 coded Chinese document into Level 2 PostScript.
This is the version for Linux. Using Chinese TrueType fonts, you
can create the most beautiful Chinese documents with C2PS.
This is a DEMO version. You can freely copied and use it.
URL : ftp://ftp.ifcss.org/pub/software/linux/chinese_utils/c2ps130lnx.tar.gz
ftp://ftp.ifcss.org/pub/software/fonts/big5/ms-win/
author : Hsueh-I Lu

============
LINUX:EDITOR
============

software: ?????? for Linux (promotion version)
version : v2.163
function: PE2-like text editor, special designed for Chinese
URL : ftp://ftp.ifcss.org/pub/software/
agent : LU, Heman

=========
LINUX:TTY
=========

software: chdrv
version : 1.0.7, 1995.12.20
function: Chinese Terminal Simulator. Does not require X-Windows.
URL : ftp://ftp.ifcss.org/pub/software/linux/tty/chdrv-1.0.7.tar.gz
ftp://ftp.ifcss.org/pub/software/linux/tty/chdrvbin-1.0.7.tar.gz
ftp://ftp.ifcss.org/pub/software/linux/tty/chdrvfont.tar.gz
author : WANG, Yu-Chung

===========
LINUX:X11R6
===========

software: Behavior DTop (for Linux)
version : 1.4, Beta
function: A full-featured Chinese DeskTop Publishing Software Package
characterized by object-oriented design for manipulating
various document objects, including text, tables, graphics,
equations, images, in an integrated way. Two outline fonts
are provided in the Beta Version. PostScript output.
Good as an English DeskTop Publishing Software Package too.
(See the README's & formated DTop manual files for a long and
complete list of functions and characteristics).
URL : ftp://ftp.ifcss.org/pub/software/linux/X11R6/dtop1.4/
author : DTop Development Group


New Page 1

标题： ■ DNS HOWTO 中译版 : 前言
姓名 ：Nicolai Langfeldt
Email：
地址 ：
转摘 ：http://member.netease.com/

返回

1. 前言
关键字: DNS, bind, named, dialup, ppp, slip, Internet, domain, name, hosts, resolving

1.1. 版权宣告
(C)opyright 1995 Nicolai Langfeldt. Do not modify without amending copyright, distribute freely but retain copyright message.
没有修订版权者请勿修改，可自由散布但必须保留版权讯息．

1.2. 感谢与求助
我要向无数次阅读这份文件的草稿并提供许多有用建议的 Arnt Gulbrandsen 表达感谢之意．我也要感谢那些将建议寄给我的人．

这份文件将永远不会有完成的一天，请把你的问题以及成功的经验寄给我，这可以使它成为一份更好的说明文件．所以请把钱，评论以及/或是问题寄给 janl@ifi.uio.no．如果你寄信给我并希望得到回答请表现基本的礼貌，确定回信地址是正确而且可以运作的．还有，写信给我前请先阅读 FAQ 一节．

如果你想翻译这篇 HOWTO 请与我联络，这样我才知道我的文章被变成何种语言 :-).

1.3. 题献辞
谨以这份说明文件献给 Anne Line Norheim Langfeldt．虽然她可能永远都不会阅读这份文件，因为她不是这类型的女孩．


New Page 1

标题： ■ DNS HOWTO 中译版 : 简介
姓名 ：Nicolai Langfeldt
Email：
地址 ：
转摘 ：http://member.netease.com/

返回

2. 简介
这是什麽以及这不是什麽

首先，DNS 就是领域名称系统(Domain Name System)．为机器命名的规则以及将这些名称转换为 IP 数字的软体．这份 HOWTO 文件说明了如何用 Linux 定义这样的对应．对应指的是这两件事的联系，机器名称，像 ftp.linux.org，以及机器的 IP 数字，像是 199.249.150.4．

DNS，对新手(你；－)而言，是网路管理中比较晦暗不明的地方之一．这份说明文件将会试著让几件事情能清楚一点．它描述如何设立一个简单的 DNS 名称伺服器．开始先说明暂存专用(caching only)伺服器，然後是为一领域设立主要(primary)名称伺服器．至於更复杂的设定你可以参考这份文件的 FAQ 一节．不用说你将得阅读真正的文件．我将会在 最後一章 回过头来说明这里所谓真正的文件包含有哪些．

在你可以开始进行这项工作之前你应该要先配置好你的机器以便可以从远端签入它以及由它对其它机器作远端签入，并且使所有各种对网路的连线都能成功地进行，尤其你应该要能够对 127.0.0.1 进行远端签入并且进入你自己的这台机器(现在就试试!)．同时你也需要一份运作良好的 /etc/host.conf, /etc/resolv.conf 以及 /etc/hosts 档案作为开始．因为我将不会在这里解释它们的功能．如果你还没有完成所有这些设定并使其运作那麽 the networking/NET-2 HOWTO 会解释如何设立它们．阅读之．

如果你使用 SLIP 或者是 PPP 那麽你得要能让它运作．若是它还不能运作的话阅读 PPP HOWTO．

当我说‘你的机器’时我的意思是你正要尝试在上面设立 DNS 的那台机器．不是任何可能在你网路环境里的其它机器．

我假设你并不是处於任何会阻碍名称查询的防火墙後面．如果你是那麽你将会需要特别的设定，参见 FAQ 一节．

在 Unix 上的名称服务是藉由一支称为 named 的程式来执行的．这是属於 bind 套件的一部份，这个套件是由 Paul Vixie 为网际网路软体集团(Internet Software Consortium)所协调发展的．大部分的 Linux 发行套件都包含有 named，而且通常安装於 /usr/sbin/named．如果你的系统有个 named 那麽你大概可以直接使用它；如果没有的话那麽你可以从某个 Linux ftp 站取回一份二进位执行档，或是从 ftp.isc.org:/isc/bind/src/cur/ 目录里取得最新最棒的原始程式码．本文件是说明 bind version 4 的．如果你安装 version 8 你要自己想办法．稍後有一节可能会对你有些帮助．

DNS 是个以整个网路为□围的(net-wide)资料库．要小心你放进里面的资料．如果你放些废物进去，你，以及其它人都将会从中取出些废物．保持你 DNS 的整齐一致那麽你将能从中取得良好的服务．学习去使用它，管理它，追查它的错误那麽你将会是另一个保持网路免於因为管理不善而效率低落的好管理者．

在这份文件里我断然地叙述几件并不完全是真实的事情(虽然它们至少有一半是真的)．这全都是为了简化．如果你相信我所说的那麽这些大概就能运作．

要诀: 如果你已经拥有我要你去改变的档案，那麽所有这些档案都要先做备份，这样一来如果经历这些改变之後没有东西会动的话你可以回复到你旧的，可以运作的情形．


New Page 1

标题： ■ DNS HOWTO 中译版 : 暂存专用名称伺服器
姓名 ：Nicolai Langfeldt
Email：
地址 ：
转摘 ：http://member.netease.com/

返回

3. 暂存专用名称伺服器
DNS 配置的首种尝试，对拨接使用者非常有用．

一台暂存专用名称伺服器将会为名称查询找出答案并且在下一次你需要那个名称的时候记得答案．

首先你需要一个称为 /etc/named.boot 的档案．当 named 启动时会读取这个档案．目前它应该单纯地包含:

--------------------------------------------------------------------------------

; Boot file for nicolais caching name server
;
directory /var/named
;
; type domain source file or host
cache . root.cache
primary 0.0.127.in-addr.arpa pz/127.0.0

--------------------------------------------------------------------------------

非常重要: 在这文件的某些版本中这个档案的这份列表会在第一个非空白字元前包含一些空格或 tab 键．这些不应该出现在档案中．如果你从这份 HOWTO 剪贴下来，记得删除任何前面的空白．

`directory' 这一行告诉 named 到哪里去找寻档案．所有其後命名的档案都将是相对於此目录的．根据 Linux 档案系统标准正确的目录应该是在 /var/named．因此 pz 是位於 /var/named 之下的，也就是，/var/named/pz．

称为 /var/named/root.cache 的这个档案是在此命名的．这个 /var/named/root.cache 应该包含:

--------------------------------------------------------------------------------

. 518400 NS D.ROOT-SERVERS.NET.
. 518400 NS E.ROOT-SERVERS.NET.
. 518400 NS I.ROOT-SERVERS.NET.
. 518400 NS F.ROOT-SERVERS.NET.
. 518400 NS G.ROOT-SERVERS.NET.
. 518400 NS A.ROOT-SERVERS.NET.
. 518400 NS H.ROOT-SERVERS.NET.
. 518400 NS B.ROOT-SERVERS.NET.
. 518400 NS C.ROOT-SERVERS.NET.
;
D.ROOT-SERVERS.NET. 3600000 A 128.8.10.90
E.ROOT-SERVERS.NET. 3600000 A 192.203.230.10
I.ROOT-SERVERS.NET. 3600000 A 192.36.148.17
F.ROOT-SERVERS.NET. 3600000 A 192.5.5.241
G.ROOT-SERVERS.NET. 3600000 A 192.112.36.4
A.ROOT-SERVERS.NET. 3600000 A 198.41.0.4
H.ROOT-SERVERS.NET. 3600000 A 128.63.2.53
B.ROOT-SERVERS.NET. 3600000 A 128.9.0.107
C.ROOT-SERVERS.NET. 3600000 A 192.33.4.12

--------------------------------------------------------------------------------
记住我说过要去掉空白字元!

这个档案描述了在这个世界上的根名称伺服器．这会随时间而改变并且必须加以维护．如何能保持它随时更新请参见 维护篇．在 named 的线上使用手册里有这个档案的描述，但是这，以我看来，最适合那些已经了解 named 的人们．

在 named.boot 里的下一行是 primary 这一行．我将会在稍後的章节里解释它的用法，目前只要把它设为在 pz 子目录下一个称为 127.0.0 的档案:

--------------------------------------------------------------------------------

@ IN SOA linux.bogus. hostmaster.linux.bogus. (
1 ; Serial
28800 ; Refresh
7200 ; Retry
604800 ; Expire
86400) ; Minimum TTL
NS ns.linux.bogus.
1 PTR localhost.

--------------------------------------------------------------------------------

接下来，你需要一份看起来像这样的 /etc/resolv.conf 档案:

--------------------------------------------------------------------------------

search subdomain.your-domain.edu your-domain.edu
nameserver 127.0.0.1

--------------------------------------------------------------------------------

`search' 这一行指出对於任何你想连往的主机名称应该搜寻的领域． `nameserver' 这一行指出你的机器可以在哪个位址上找到一台名称伺服器，在这个例子中是你自己的这台机器，因为你在它上面执行 named．如果你想列出好几个名称伺服器把它们都放在一行 `nameserver' 里，用空格隔开． (注意: named 从不读取这个档案，而是使用 named 的名称解答器会读取．)

来说明一下这个档案有什麽作用: 如果某个客户端尝试要找寻 foo 的话，那麽首先尝试的是 foo.subdomain.your-domain.edu 这个名称，然後接下来是 foo.your-fomain.edu 这个名称，最後则是 foo 这个名称．如果有某个客户端尝试要找寻 sunsite.unc.edu 的话，那首先尝试的是 sunsite.unc.edu.subdomain.your-domain.edu 这个名称(没错，它真笨! 不过它就是这麽做)，然後接下来是 sunsite.unc.edu.your-domain.edu 这个名称，最後则会是 sunsite.unc.edu 这个名称．你可能不会想放太多领域到 search 该行里去，搜寻它们会多花时间．

这个□例假设你属於 subdomain.your-domain.edu 这个领域，那麽你的机器，可能会称为 your-machine.subdomain.your-domain.edu．在 search 这行里不应该包含你的 TLD (顶层领域 Top Level Domain，在这个例子中是 edu 这个领域)．如果你经常需要连线到在另外一个领域里的主机你麽你可以把该领域像这样地加进 search 这行里:

--------------------------------------------------------------------------------

search subdomain.your-domain.edu your-domain.edu other-domain.com

--------------------------------------------------------------------------------
依此类推．很明显的是你得放入真实的领域名称来取代这些名称．请注意在领域名称的最後面并没有句号 '.'．

接下来，根据你 libc 版本的不同需要修正 /etc/nsswitch.conf 或者是 /etc/host.conf 档案．

/etc/nsswitch.conf

这是一个很长的档案，它指出到何处去取得各种不同的资料型态，从什麽档案或是资料库取得．它的顶端经常会包含一些有用的注解．找出以 `hosts:' 作为开头的那一行，它应该是这样:

--------------------------------------------------------------------------------

hosts: files dns

--------------------------------------------------------------------------------
如果档案里没有以 `hosts:' 作为开头的行那麽把上面这一行加上去．它是说程式应该先在 /etc/hosts 档案里找寻，然後根据 resolv.conf 询问 DNS．

/etc/host.conf

它可能包含有数行，其中应该有一行以 order 作为开始而且它看起来会像这样:

--------------------------------------------------------------------------------

order hosts,bind

--------------------------------------------------------------------------------
如果档案里没有 `order' 这一行的话那麽你应该贴一份上去．它告诉主机名称解析函式先在 /etc/hosts 里找寻，然後查问名称伺服器 (在 resolv.conf 里你说在 127.0.0.1 这个地方)．在大部分 Linux 发行套件中最後这两个档案的文件在 resolv(8) 的线上使用手册中(执行 `man 8 resolv' 即可)．这份线上用手册我觉得可看，而且每个人，特别是 DNS 管理者，都应该要阅读它．现在就做，如果你对你自己说``我稍後将会去做''，你将永远不会去接近它．

3.1. 起始 named
这些全部完成後就可以起始 named 了．如果你使用拨接连线的话那麽请先连上网路．键入 `ndc start' 并且按下 RETURN 键，没有选项．如果它不行的话那麽试著使用 `/usr/sbin/ndc start' 来取代．再不行的话请参考 FAQ 一节．现在你可以测试你的设定．当你在起始 named 的时候如果你观察一下 (使用 tail -f /var/adm/messages 指令)系统记录讯息档案 (通常是称为 /var/adm/messages 的档案，但也可能在 /var/log 下，或是叫 syslog 的档案) 那麽你应该会看见像样的一些东西:

Jun 30 21:50:55 roke named[2258]: starting. named 4.9.4-REL Sun Jun 30 21:29:03 MET DST 1996 janl@roke.slip.ifi.uio.no:/var/tmp/bind/named
Jun 30 21:50:55 roke named[2258]: cache zone "" loaded (serial 0)
Jun 30 21:50:55 roke named[2258]: primary zone "0.0.127.in-addr.arpa" loaded (serial 1)

如果有任何关於错误的讯息那麽就是有个错误发生， named 将会指名有错误的档案(我想是 named.boot 以及 root.cache 其中之一:-)．杀掉 named 程序并回头检查那些档案．

现在可以用 nslookup 来检查一下你的工作:

$ nslookup
Default Server: localhost
Address: 127.0.0.1

>

如果这是你所得到的回应那麽它已经能够运作．我们希望是这样．得到任何其它回应都请回头检查每一件事．每一次你改变 named.boot 档案之後你都得使用 ndc restart 这个指令重新起始 named 程式．

现在你可以输入查询．尝试找寻某些靠近你的机器．pat.uio.no 离我不远，在 Oslo 的大学里:

> pat.uio.no
Server: localhost
Address: 127.0.0.1

Name: pat.uio.no
Address: 129.240.2.50

现在 nslookup 要求你的 named 找寻 pat.uio.no 这台机器．然後它(named)联系在你 root.cache 档案里所指名的名称伺服机器其中一台，并且从那里查问它该如何继续下去．在你取得结果之前可能得花费一点时间，因为它搜寻你在 /etc/resolv.conf 里指名的所有领域．

如果你再试一次的话那麽你将会得到:

> pat.uio.no
Server: localhost
Address: 127.0.0.1

Non-authoritative answer:
Name: pat.uio.no
Address: 129.240.2.50

注意这回我们所得到的 `Non-authoritative answer:' 这一行．这代表 named 此次并未到网路外去查问，取而代之的是在它的暂存区里找寻并且在那里找到答案．但是暂存的资讯可能会过时．所以它藉由 `Non-authorative answer:' 来知会你有这个(很轻微的)危险性存在．当 nslookup 说这是你第二次查问某台主机时，这是 named 能暂存该项资讯并且正常运作的一个讯息．你可以使用 `exit' 指令离开 nslookup 程式．

如果你是个拨接(ppp, slip) 使用者请阅读 拨接连线专节，里面有一些给你的建议．

现在你知道如何设立一个能够暂存的 named 系统．来杯啤酒，牛奶，或是任何你喜欢的东西来庆祝吧．


New Page 1

标题： ■ DNS HOWTO 中译版 : 一个简单的领域
姓名 ：Nicolai Langfeldt
Email：
地址 ：
转摘 ：http://member.netease.com/

返回

4. 一个简单的领域
如何建立你自己的领域

4.1. 先来一点纯理论
在我们真的开始进行这一节以前我将会提供你一些关於 DNS 如何运作的理论．而你应该阅读它因为这对你有益．如果你不‘想要’那麽至少你也得很快地略读一下．当你看到应该放进 named.boot 档案里去的内容时再停止这种略读方式．

DNS 是一个阶层式的系统．其顶端写作 `.' 而其发音为 `root' ．在 . 之下有几个顶层领域(TLDs)，最知名的是 ORG, COM, EDU 以及 NET 这几个，但是还有更多．

在寻找一台机器名称时查询会以递回方法从顶端开始．当你想要找出 prep.ai.mit.edu 的位址时你的名称伺服器必须找到负责 edu 的一台名称伺服器．这个问题它会去查问 root.cache 档案，而 . 伺服器会给它一份 edu 伺服器列表．

$ nslookup
Default Server: localhost
Address: 127.0.0.1

开始查问某台根伺服器．
> server c.root-servers.net.
Default Server: c.root-servers.net
Address: 192.33.4.12

设定查询型态为 NS (名称伺服器记录 name server records)．
> set q=ns

查问关於 edu. 的资料．
> edu.

结尾的 . 在这里非常重要，它告诉该伺服器我们所查问的 edu 是在 . 之下的那一个，这稍能缩小搜寻的□围．
edu nameserver = A.ROOT-SERVERS.NET
edu nameserver = H.ROOT-SERVERS.NET
edu nameserver = B.ROOT-SERVERS.NET
edu nameserver = C.ROOT-SERVERS.NET
edu nameserver = D.ROOT-SERVERS.NET
edu nameserver = E.ROOT-SERVERS.NET
edu nameserver = I.ROOT-SERVERS.NET
edu nameserver = F.ROOT-SERVERS.NET
edu nameserver = G.ROOT-SERVERS.NET
A.ROOT-SERVERS.NET internet address = 198.41.0.4
H.ROOT-SERVERS.NET internet address = 128.63.2.53
B.ROOT-SERVERS.NET internet address = 128.9.0.107
C.ROOT-SERVERS.NET internet address = 192.33.4.12
D.ROOT-SERVERS.NET internet address = 128.8.10.90
E.ROOT-SERVERS.NET internet address = 192.203.230.10
I.ROOT-SERVERS.NET internet address = 192.36.148.17
F.ROOT-SERVERS.NET internet address = 192.5.5.241
G.ROOT-SERVERS.NET internet address = 192.112.36.4

这告诉我们 *.root-servers.net 服务 edu. 领域，所以我们可以藉此继续查问 c 伺服器．现在我们想要知道是谁负责下一层 mit.edu. 的领域名称:
> mit.edu.
Server: c.root-servers.net
Address: 192.33.4.12

Non-authoritative answer:
mit.edu nameserver = STRAWB.mit.edu
mit.edu nameserver = W20NS.mit.edu
mit.edu nameserver = BITSY.mit.edu

Authoritative answers can be found from:
STRAWB.mit.edu internet address = 18.71.0.151
W20NS.mit.edu internet address = 18.70.0.160
BITSY.mit.edu internet address = 18.72.0.3

steawb, w20ns 以及 bitsy 负责 mit 领域，选择其中一个并且查询 ai.mit.edu:
> server W20NS.mit.edu.

主机名称不分大小写，但是我使用滑鼠来剪贴所以这些资料是萤幕的拷贝．

Server: W20NS.mit.edu
Address: 18.70.0.160

> ai.mit.edu.
Server: W20NS.mit.edu
Address: 18.70.0.160

Non-authoritative answer:
ai.mit.edu nameserver = WHEATIES.AI.MIT.EDU
ai.mit.edu nameserver = ALPHA-BITS.AI.MIT.EDU
ai.mit.edu nameserver = GRAPE-NUTS.AI.MIT.EDU
ai.mit.edu nameserver = TRIX.AI.MIT.EDU
ai.mit.edu nameserver = MUESLI.AI.MIT.EDU

Authoritative answers can be found from:
AI.MIT.EDU nameserver = WHEATIES.AI.MIT.EDU
AI.MIT.EDU nameserver = ALPHA-BITS.AI.MIT.EDU
AI.MIT.EDU nameserver = GRAPE-NUTS.AI.MIT.EDU
AI.MIT.EDU nameserver = TRIX.AI.MIT.EDU
AI.MIT.EDU nameserver = MUESLI.AI.MIT.EDU
WHEATIES.AI.MIT.EDU internet address = 128.52.32.13
WHEATIES.AI.MIT.EDU internet address = 128.52.35.13
ALPHA-BITS.AI.MIT.EDU internet address = 128.52.32.5
ALPHA-BITS.AI.MIT.EDU internet address = 128.52.37.5
GRAPE-NUTS.AI.MIT.EDU internet address = 128.52.32.4
GRAPE-NUTS.AI.MIT.EDU internet address = 128.52.36.4
TRIX.AI.MIT.EDU internet address = 128.52.32.6
TRIX.AI.MIT.EDU internet address = 128.52.38.6
MUESLI.AI.MIT.EDU internet address = 128.52.32.7
MUESLI.AI.MIT.EDU internet address = 128.52.39.7

所以 weaties.ai.mit.edu 是 ai.mit.edu 的一台名称伺服器:
> server WHEATIES.AI.MIT.EDU.
Default Server: WHEATIES.AI.MIT.EDU
Addresses: 128.52.32.13, 128.52.35.13

现在我改变查询的型态，我们已经找到该名称伺服器所以现在我们将要询问 wheaties 关於 prep.ai.mit.edu 它所知道的任何事情．

> set q=any
> prep.ai.mit.edu.
Server: WHEATIES.AI.MIT.EDU
Addresses: 128.52.32.13, 128.52.35.13

prep.ai.mit.edu CPU = dec/decstation-5000.25 OS = unix
prep.ai.mit.edu
inet address = 18.159.0.42, protocol = tcp
#21 #23 #25 #79
prep.ai.mit.edu preference = 1, mail exchanger = life.ai.mit.edu
prep.ai.mit.edu internet address = 18.159.0.42
ai.mit.edu nameserver = alpha-bits.ai.mit.edu
ai.mit.edu nameserver = wheaties.ai.mit.edu
ai.mit.edu nameserver = grape-nuts.ai.mit.edu
ai.mit.edu nameserver = mini-wheats.ai.mit.edu
ai.mit.edu nameserver = trix.ai.mit.edu
ai.mit.edu nameserver = muesli.ai.mit.edu
ai.mit.edu nameserver = count-chocula.ai.mit.edu
ai.mit.edu nameserver = life.ai.mit.edu
ai.mit.edu nameserver = mintaka.lcs.mit.edu
life.ai.mit.edu internet address = 128.52.32.80
alpha-bits.ai.mit.edu internet address = 128.52.32.5
wheaties.ai.mit.edu internet address = 128.52.35.13
wheaties.ai.mit.edu internet address = 128.52.32.13
grape-nuts.ai.mit.edu internet address = 128.52.36.4
grape-nuts.ai.mit.edu internet address = 128.52.32.4
mini-wheats.ai.mit.edu internet address = 128.52.32.11
mini-wheats.ai.mit.edu internet address = 128.52.54.11
mintaka.lcs.mit.edu internet address = 18.26.0.36

所以我们从 . 开始连续找出在领域名称里的下一层名称伺服器．如果你使用你自己的 DNS 伺服器而不是所有这些个其它的伺服器，你的 named 当然会暂存所有这些在为你寻找这个答案时所找到的资讯，而且在一段时间内它不必再次查问．

一个比较起来很少被论及，但是同样重要的是 in-addr.arpa 领域．它也像‘正常的’领域一样是巢状的． in-addr.arpa 让我们可以在拥有主机位址的时候得知该主机的名称．在这里有件重要的事情要注意的是在 in-addr.arpa 这个领域中 ip 数字是以反向顺序书写的．如果你有某台机器的位址: 192.128.52.43 那麽 named 会以类似 prep.ai.mit.edu 这个□例的方式来处理: 找出 arpa. 的伺服器，找出 in-addr.arpa. 的伺服器，然後再找出 192.in-addr.arpa. 的伺服器，找出 128.192.in-addr.arpa. 的伺服器，接著找出 52.128.192.in-addr.arpa. 的伺服器，最後再找出所需之 43.52.128.192.in-addr.arpa. 的记录．聪明乎? (说‘是的’)．头两年这反向的数字也引起过一些困扰．

其实我是骗你的．DNS 并非完完全全地像我告诉你的这样运作．但是这已经够接近的了．

4.2. 我们自己的领域
现在来定义我们自己的领域．我们将会创造出 linux.bogus 这个领域并且定义其中的机器．我使用一个完全是虚拟出来的领域名称以便确定我们不会扰乱到网路上的其它地方．

我们早就已经以 named.boot 里的这一行开始了这个部份的设定:

--------------------------------------------------------------------------------

primary 0.0.127.in-addr.arpa pz/127.0.0

--------------------------------------------------------------------------------

请注意在这个档案里的领域名称结尾并没有加上 `.' 符号．第一行把定义 0.0.127.in-addr.arpa 的档案命名为 pz/127.0.0．我们早已经建立了这个档案，它是这样的:

--------------------------------------------------------------------------------

@ IN SOA linux.bogus. hostmaster.linux.bogus. (
1 ; Serial
28800 ; Refresh
7200 ; Retry
604800 ; Expire
86400) ; Minimum TTL
NS ns.linux.bogus.
1 PTR localhost.

--------------------------------------------------------------------------------

请注意在这个档案里所有的完整领域名称结尾的 `.' 符号，这与上面提到的 named.boot 档案形成对比．有些人喜欢以 $ORIGIN 指令启始每个区域档案，但这是不必要的．一个区域档案的基点(就是其所属的 DNS 阶层架构位置)是在 named.boot 档案的‘领域’行里指定的，在这个例子里是 0.0.127.in-addr.arpa．

这个‘区域档案’中包含三种‘资源记录’(resource records, RRs): 一个是 SOA 资源记录．一个是 NS 资源记录以及一个 PTR 记录． SOA 是授权起始(Start Of Authority)的缩写．`@' 是个意思为基点的特殊标记，而因为这个档案的‘领域’行说是 0.0.127.in-addr.arpa 所以第一行实际上是指

0.0.127.IN-ADDR.ARPA. IN SOA ...

NS 是名称伺服器资源记录，它告诉 DNS 什麽机器是这个领域 0.0.127.in-addr.arpa 的名称伺服器，也就是 ns.linux.bogus. 而最後的 PTR 记录说 1 (等於是 1.0.0.127.IN-ADDR.ARPA, 也就是 127.0.0.1)的名称是 localhost．

SOA 这个记录是所有区域档案的序文，而且在每一个区域档案里都应该有这唯一的一个，最开头的记录．它描述该区域，它从何而来(一台称为 linux.bogus 的机器)，谁负责其内容(hostmaster@linux.bogus)，这个区域档案是什麽版本(serial: 1)，以及其它必须做的，有关暂存与次要名称伺服器的事．剩下的栏位如 refresh, retry, expire 以及 minimum 你可以使用这份文件里所用的数字而且应该不会出问题．

现在重新起始你的 named(使用 ndc restart 指令)并使用 nslookup 来检验我们做了什麽:

$ nslookup

Default Server: localhost
Address: 127.0.0.1

> 127.0.0.1
Server: localhost
Address: 127.0.0.1

Name: localhost
Address: 127.0.0.1

所以它管理从 127.0.0.1 得到 localhost 的过程，很好．现在开始我们的主要任务，linux.bogus 这个领域，在 named.boot 里 插入新的一行 primary 指令:

--------------------------------------------------------------------------------

primary linux.bogus pz/linux.bogus

--------------------------------------------------------------------------------

注意，在 named.boot 档案里领域名称的结尾还是没有 '.' 符号．

在这个 linux.bogus 区域档案里我们将会放入一些完全虚拟的资料:

--------------------------------------------------------------------------------

;
; Zone file for linux.bogus
;
; Mandatory minimum for a working domain
;
@ IN SOA linux.bogus. hostmaster.linux.bogus. (
199511301 ; serial, todays date + todays serial #
28800 ; refresh, seconds
7200 ; retry, seconds
3600000 ; expire, seconds
86400 ) ; minimum, seconds
NS ns.linux.bogus.
NS ns.friend.bogus.
MX 10 mail.linux.bogus ; Primary Mail Exchanger
MX 20 mail.friend.bogus. ; Secondary Mail Exchanger

localhost A 127.0.0.1
ns A 127.0.0.2
mail A 127.0.0.4

--------------------------------------------------------------------------------

关於 SOA 记录有两件事需要注意．首先 ns.linux.bogus 必须 是一台具有 A 记录的真正机器．在 SOA 记录中用 CNAME 记录为名称的机器是不合法的．它的名字不一定要是 ns，它可以是任何合法的主机名称．再来，hostmaster.linux.bogus 应该被视为 hostmaster@linux.bogus，这应该是一个邮件位址或别名，是维护这个 DNS 的人经常读信的位址．任何关於此领域的信件会被送到这个位址．它的名字不一定要是 hostmaster，它可以是任何合法的电子邮件位址，然而这个位址 `hostmaster' 应该能工作正常．

在这个档案里有一种新的资源记录型态，即 MX 型态，或是邮件交换者资源记录(Mail eXchanger RR)．这种资源记录型态告诉邮递系统地址 someone@linux.bogus 的邮件要寄送到哪里，换句话说也就是应该寄送到 mail.linux.bogus 或是 mail.friend.bogus．在每个机器名称前面的数字是 MX 资源记录的优先权，数字比较低 (10) 的资源记录是邮件主要应该寄往的机器．如果失败可以把它寄往数字比较高的机器，一台次要的邮件处理者，也就是在这里具有优先权 20 的 mail.friend.bogus．

用 ndc restart 重新起始 named．以 nslookup 检验结果:

$ nslookup
> set q=any
> linux.bogus
Server: localhost
Address: 127.0.0.1

linux.bogus
origin = linux.bogus
mail addr = hostmaster.linux.bogus
serial = 199511301
refresh = 28800 (8 hours)
retry = 7200 (2 hours)
expire = 604800 (7 days)
minimum ttl = 86400 (1 day)
linux.bogus nameserver = ns.linux.bogus
linux.bogus nameserver = ns.friend.bogus
linux.bogus preference = 10, mail exchanger = mail.linux.bogus.linux.bogus
linux.bogus preference = 20, mail exchanger = mail.friend.bogus
linux.bogus nameserver = ns.linux.bogus
linux.bogus nameserver = ns.friend.bogus
ns.linux.bogus internet address = 127.0.0.2
mail.linux.bogus internet address = 127.0.0.4

小心地检验你将会发现一个错误．这一行
linux.bogus preference = 10, mail exchanger = mail.linux.bogus.linux.bogus

全都错了．它应该是
linux.bogus preference = 10, mail exchanger = mail.linux.bogus

我故意犯了个错误所以你可以藉此学习:-) 仔细看看该区域档案我们会发现这一行
@ MX 10 mail.linux.bogus ; Primary Mail Exchanger

遗漏了一个句点．或是说多了个 `linux.bogus'．在区域档案里如果一个机器名称不是以句点结尾那麽会在其结尾加入基点．所以不论是
--------------------------------------------------------------------------------

@ MX 10 mail.linux.bogus. ; Primary Mail Exchanger

--------------------------------------------------------------------------------
或是
--------------------------------------------------------------------------------

@ MX 10 mail ; Primary Mail Exchanger

--------------------------------------------------------------------------------

都是正确的．我比较喜欢後面这种形式，它需要的打字比较少．在一个区域档案里领域名称应该要不就是写出来并以 `.' 结尾或者就是一点都不要包含进去，而在这种情况下其领域预设为基点．其它人也许喜欢采用另一种方式．

我必须强调的是在 named.boot 档案里领域名称後面不应该有 `.' 的存在．你不知道有多少次因为多了或少了一个 `.' 而搞砸了并且对许多人造成困扰．

所以在加入我强调的重点後得到一份新的区域档案，其中还包含一些额外的资讯:

--------------------------------------------------------------------------------

;
; Zone file for linux.bogus
;
; Mandatory minimum for a working domain
;
@ IN SOA linux.bogus. hostmaster.linux.bogus. (
199511301 ; serial, todays date + todays serial #
28800 ; refresh, seconds
7200 ; retry, seconds
604800 ; expire, seconds
86400 ) ; minimum, seconds

NS ns ; Inet Address of name server
NS ns.friend.bogus.
MX 10 mail ; Primary Mail Exchanger
MX 20 mail.friend.bogus. ; Secondary Mail Exchanger

localhost A 127.0.0.1
ns A 127.0.0.2
mail A 127.0.0.4
;
; Extras
;
@ TXT "Linux.Bogus, your DNS consultants"

ns MX 10 mail
MX 20 mail.friend.bogus.
HINFO "Pentium" "Linux 1.2"
TXT "RMS"
richard CNAME ns
www CNAME ns

donald A 127.0.0.3
MX 10 mail
MX 20 mail.friend.bogus.
HINFO "i486" "Linux 1.2"
TXT "DEK"

mail MX 10 mail
MX 20 mail.friend.bogus.
HINFO "386sx" "Linux 1.0.9"

ftp A 127.0.0.5
MX 10 mail
MX 20 mail.friend.bogus.
HINFO "P6" "Linux 1.3.59"

--------------------------------------------------------------------------------
你也许会想要移动前面三个 A 记录以便让它们靠近其它的相关记录，而不是像这样放在最前端．

这里有几个新的资源记录: 主机资讯(HINFO: Host INFOrmation) 包括两个部份，使用引号涵括每个部份是个好习惯．第一个部份是机器上的硬体或是中央处理单元，而第二个部份是机器上的软体或是作业系统．ns 有一颗 Pentium CPU 并且执行 Linux 1.2 系统． TXT 记录是个随意的文字记录，你可以用它来记录任何事情．正式名称(CNAME: Canonical NAME)可以用来给每台机器数个名称．所以 richard 以及 www 都是 ns 的一个别名．很重要的一点是 A, MX, CNAME, 以及 SOA 记录永远不该参照 CNAME 记录设定的别名，它们只应该参照 A 记录所设定的名称，所以像这样的记录是错的

--------------------------------------------------------------------------------

foobar CNAME richard ; NO!

--------------------------------------------------------------------------------
不过这样是对的

--------------------------------------------------------------------------------

foobar CNAME ns ; Yes!

--------------------------------------------------------------------------------
还有一点也很重要的是注意正式名称所设定的对电子邮递位址而言不是合法主机名称: webmaster@www.linux.bogus 以上面的设定而言是一个不合法的电子邮递位址．即使它在你的系统上可以运作，可以预料的是很少有电子邮件管理者会去实行这项规则．避免这个问题的方法是使用 A 记录(或者也可能是一些其它的，像是 MX 记录)来取代之:

--------------------------------------------------------------------------------

www A 127.0.0.2

--------------------------------------------------------------------------------
Paul Vixie, 主要的 named 专家，建议不要使用 CNAME 这个设定．所以应该考虑不要很认真地去使用它．

藉由执行 ndc reload 载入新的资料库，这会使 named 再一次读取其档案．

$ nslookup
Default Server: localhost
Address: 127.0.0.1

> ls -d linux.bogus

这意指应该列出所有的记录

[localhost]
linux.bogus. SOA ns.linux.bogus hostmaster.linux.bogus. (199511301 28800 7200 604800 86400)
linux.bogus. NS ns.linux.bogus
linux.bogus. NS ns.friend.bogus
linux.bogus. MX 10 mail.linux.bogus
linux.bogus. MX 20 mail.friend.bogus
linux.bogus. TXT "Linux.Bogus, your DNS consultants"
localhost A 127.0.0.1
mail A 127.0.0.4
mail MX 10 mail.linux.bogus
mail MX 20 mail.friend.bogus
mail HINFO 386sx Linux 1.0.9
donald A 127.0.0.3
donald MX 10 mail.linux.bogus
donald MX 20 mail.friend.bogus
donald HINFO i486 Linux 1.2
donald TXT "DEK"
www CNAME ns.linux.bogus
richard CNAME ns.linux.bogus
ftp A 127.0.0.5
ftp MX 10 mail.linux.bogus
ftp MX 20 mail.friend.bogus
ftp HINFO P6 Linux 1.3.59
ns A 127.0.0.2
ns MX 10 mail.linux.bogus
ns MX 20 mail.friend.bogus
ns HINFO Pentium Linux 1.2
ns TXT "RMS"
linux.bogus. SOA ns.linux.bogus hostmaster.linux.bogus. (199511301 28800 7200 604800 86400)

很好．让我们检查它对於单独的 www 会说什麽:
> set q=any
> www.linux.bogus.
Server: localhost
Address: 127.0.0.1

www.linux.bogus canonical name = ns.linux.bogus

...换句话说，www.linux.bogus 真正的名称是 ns.linux.bogus．

linux.bogus nameserver = ns.linux.boguslinux.bogus nameserver = ns.friend.bogusns.linux.bogus internet address = 127.0.0.2

而 ns.linux.bogus 拥有 127.0.0.2 这个位址．看起来也很好．

4.3. 继续深入
当然，这个领域是高度虚拟的，里面所有的位址也都是，而这或许会让你有些混淆．真实领域的一个真实例子请见下一节．


New Page 1

标题： ■ DNS HOWTO 中译版 : 真实领域的例子
姓名 ：Nicolai Langfeldt
Email：
地址 ：
转摘 ：http://member.netease.com/

返回

5. 真实领域的例子
这里我们列出一些真正的区域档案

使用者建议我加上一个可以运作的真实例子，因为我对真正可运作的领域及虚拟□例之间差别解释的不够清楚．

关於这个例子有件事必须声明: 千万不要把它放到你的名称伺服器上! 把它当作参考资料来阅读就好．如果你想做实验，用上面虚拟的例子．我经过 LAND-5 的 David Bullock 的同意才使用这个例子．这些档案的日期是 1996 年九月二十日，因此如果你现在查询 LAND-5 的名称伺服器可能会发现有所不同．还有，请记住，删去前面的空白 :-)

5.1. /etc/named.boot (或 /var/named/named.boot)
我们发现需要两行 primary 的反向区域: 一个是 127.0.0，另一个是 LAND-5 的子网路 206.6.177．还有一行给 land-5.com 的正向区域．还有一点要注意的是不像我在这篇文章里将档案放在 pz 目录里，他将它们放到叫做 zone 的目录．

--------------------------------------------------------------------------------

; Boot file for LAND-5 name server
;
directory /var/named
;
; type domain source file or host
cache . root.cache
primary 0.0.127.in-addr.arpa zone/127.0.0
primary 177.6.206.in-addr.arpa zone/206.6.177
primary land-5.com zone/land-5.com

--------------------------------------------------------------------------------

5.2. /var/named/root.cache
记住这个档案是动态的，这边列出来的是旧的．你最好自己用 dig 产生一个新的．

--------------------------------------------------------------------------------

; <<>> DiG 2.1 <<>>
;; res options: init recurs defnam dnsrch
;; got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 6
;; flags: qr rd ra; Ques: 1, Ans: 9, Auth: 0, Addit: 9
;; QUESTIONS:
;; ., type = NS, class = IN

;; ANSWERS:
. 518357 NS H.ROOT-SERVERS.NET.
. 518357 NS B.ROOT-SERVERS.NET.
. 518357 NS C.ROOT-SERVERS.NET.
. 518357 NS D.ROOT-SERVERS.NET.
. 518357 NS E.ROOT-SERVERS.NET.
. 518357 NS I.ROOT-SERVERS.NET.
. 518357 NS F.ROOT-SERVERS.NET.
. 518357 NS G.ROOT-SERVERS.NET.
. 518357 NS A.ROOT-SERVERS.NET.

;; ADDITIONAL RECORDS:
H.ROOT-SERVERS.NET. 165593 A 128.63.2.53
B.ROOT-SERVERS.NET. 165593 A 128.9.0.107
C.ROOT-SERVERS.NET. 222766 A 192.33.4.12
D.ROOT-SERVERS.NET. 165593 A 128.8.10.90
E.ROOT-SERVERS.NET. 165593 A 192.203.230.10
I.ROOT-SERVERS.NET. 165593 A 192.36.148.17
F.ROOT-SERVERS.NET. 299616 A 192.5.5.241
G.ROOT-SERVERS.NET. 165593 A 192.112.36.4
A.ROOT-SERVERS.NET. 165593 A 198.41.0.4

;; Total query time: 250 msec
;; FROM: land-5 to SERVER: default ---- 127.0.0.1
;; WHEN: Fri Sep 20 10:11:22 1996
;; MSG SIZE sent: 17 rcvd: 312

--------------------------------------------------------------------------------

5.3. /var/named/zone/127.0.0
不过是基本的，不能省略的 SOA 记录，以及将 127.0.0.1 指向 localhost 的记录．两者都是必须的．不应有其它的东西在此档案中．这个档案可能永远不必更新，除非你的名称伺服器或管理人地址改变．

--------------------------------------------------------------------------------

@ IN SOA land-5.com. root.land-5.com. (
199609203 ; Serial
28800 ; Refresh
7200 ; Retry
604800 ; Expire
86400) ; Minimum TTL
NS land-5.com.

1 PTR localhost.

--------------------------------------------------------------------------------

5.4. /var/named/zone/land-5.com
在这里我们看到这个必须的 SOA 记录，必要的 NS 记录．我们可以看到它有一个次要的名称伺服器於 ns2.psi.net．这也应该是必要的，总是保有一个次要的伺服器做为备份．我们还看到做为 LAND-5 负责所有不同服务的主机，它以许多的 CNAME 记录做到这点 (另一个做法是用 A 记录)．

就像你从 SOA 记录看到的一样，区域档案以 land-5.com 开始，管理人是 root@land-5.com．序号(serial)以 yyyymmdd 的格式加上当天的号码; 它可能是 1996 年九月二十号那天的第六个版本的区域档案．请记住序号必须单调地递增，这里它只用一位数字表示当天的号码，因此在编辑九次之後他必须等到明天才能再编辑这个档案．[译注] 因此应该考虑用两位数字．

[译注]
读者可能会奇怪为什麽不能用 1996092010 ? 这个数字也是递增的，所以当然可以．但到了明天第一次编档案时该用什麽呢? 如果用 199609211，那麽这个数字就比 1996092010 要小了．这样会有麻烦．因此作者建议应用两位数字，如 1996092006．

--------------------------------------------------------------------------------

@ IN SOA land-5.com. root.land-5.com. (
199609206 ; serial, todays date + todays serial #
10800 ; refresh, seconds
7200 ; retry, seconds
10800 ; expire, seconds
86400 ) ; minimum, seconds
NS land-5.com.
NS ns2.psi.net.
MX 10 land-5.com. ; Primary Mail Exchanger

localhost A 127.0.0.1

router A 206.6.177.1

land-5.com. A 206.6.177.2
ns CNAME land-5.com.
ftp CNAME land-5.com.
www CNAME land-5.com.
mail CNAME land-5.com.
news CNAME land-5.com.

funn A 206.6.177.3
illusions CNAME funn.land-5.com.
@ TXT "LAND-5 Corporation"

;
; Workstations
;
ws_177200 A 206.6.177.200
MX 10 land-5.com. ; Primary Mail Host
ws_177201 A 206.6.177.201
MX 10 land-5.com. ; Primary Mail Host
ws_177202 A 206.6.177.202
MX 10 land-5.com. ; Primary Mail Host
ws_177203 A 206.6.177.203
MX 10 land-5.com. ; Primary Mail Host
ws_177204 A 206.6.177.204
MX 10 land-5.com. ; Primary Mail Host
ws_177205 A 206.6.177.205
MX 10 land-5.com. ; Primary Mail Host
; {Many repetitive definitions deleted - SNIP}
ws_177250 A 206.6.177.250
MX 10 land-5.com. ; Primary Mail Host
ws_177251 A 206.6.177.251
MX 10 land-5.com. ; Primary Mail Host
ws_177252 A 206.6.177.252
MX 10 land-5.com. ; Primary Mail Host
ws_177253 A 206.6.177.253
MX 10 land-5.com. ; Primary Mail Host
ws_177254 A 206.6.177.254
MX 10 land-5.com. ; Primary Mail Host

--------------------------------------------------------------------------------

另一件值得注意的事所有的工作站都没有个别的名称，而是用一开头加上最後两位的 IP 数字．用这样的惯例可以大量地简化维护工作，但可能有点不方便，而且，事实上可能是你的客户不满的来源．

5.5. /var/named/zone/206.6.177
我将在後面说明这个档案．

--------------------------------------------------------------------------------

@ IN SOA land-5.com. root.land-5.com. (
199609206 ; Serial
28800 ; Refresh
7200 ; Retry
604800 ; Expire
86400) ; Minimum TTL
NS land-5.com.
NS ns2.psi.net.
;
; Servers
;
1 PTR router.land-5.com.
2 PTR land-5.com.
3 PTR funn.land-5.com.
;
; Workstations
;
200 PTR ws_177200.land-5.com.
201 PTR ws_177201.land-5.com.
202 PTR ws_177202.land-5.com.
203 PTR ws_177203.land-5.com.
204 PTR ws_177204.land-5.com.
205 PTR ws_177205.land-5.com.
; {Many repetitive definitions deleted - SNIP}
250 PTR ws_177250.land-5.com.
251 PTR ws_177251.land-5.com.
252 PTR ws_177252.land-5.com.
253 PTR ws_177253.land-5.com.
254 PTR ws_177254.land-5.com.

--------------------------------------------------------------------------------

反向区域似乎是整个设定中最让人头痛的部份．它是在你有机器的 IP 数字时查询机器名称用的．例如: 你有一部 irc 伺服器接受 irc 客户端的连线．但你是挪威的伺服器因此你只希望接受来自挪威及其它斯堪地那维亚国家的连线．当你接到来自客户端的连线时 C 程式库能够告诉你连线机器的 IP 位址，因为客户端的 IP 数字是包含在传入的网路封包中的．然後你可以呼叫一函式 gethostbyaddr 以给定的 IP 查询机器名称． gethostbyaddr 函式会向 DNS 询问，DNS 就会出去查询这台机器名称．假设客户端来自 ws_177200.land-5.com，C 程式库提供给 irc 伺服器的 IP 是 206.6.177.200．为找出机器的名称我们要查询 200.177.6.206.in-addr.arpa．DNS 伺服器首先找到负责 arpa. 的伺服器．然後找到 in-addr.arpa. 的伺服器，再来是反过来的 206，然後是 6，最後找到在 LAND-5 负责 177.6.206.in-addr.arpa 区域的伺服器．由此我们得到 200.177.6.206.in-addr.arpa 的答案是 'PTR ws_177200.land-5.com' 记录，意指拥有 IP 206.6.177.200 的名称是 ws_177200.land-5.com．不过就像在解释 prep.ai.mit.edu 如何查询时所说，这过程稍微有点不对．

回到 irc 伺服器的例子．irc 伺服器只接再来自斯堪地那维亚国家的连线，也就是， *.no, *.se, *.dk．ws_177200.land-5.com 这个名字显然并不符合任何这些．因此伺服器会拒绝连线．如果没有经由 in-addr.arpa 区域到 206.2.177.200 的反向对应，伺服器将无法查到机器名称而将会拿 206.2.177.200 来和 *.no, *.se 及 *.dk 比较，当然找不到符合的．

有些人会告诉你反向对应查询只对伺服器重要，或是一点也不重要．当然不是: 许多 ftp, news, irc 甚至 http 伺服器将不接受无法查到名称的机器连线．因此事实上机器的反向名称对应是必须的．


New Page 1

标题： ■ DNS HOWTO 中译版 : 维护工作
姓名 ：Nicolai Langfeldt
Email：
地址 ：
转摘 ：http://member.netease.com/

返回

6. 维护工作
维持它的运作．

维持它们的继续执行之外，对於 named 你还有个维护的任务得要做．那就是维持 root.cache 档案的更新．最简单的方法是使用 dig 程式，首先不加任何参数执行 dig 程式，你将会取得从你自己伺服器得到的 root.cache．然後以 dig @rootserver . ns 查问所列出的根伺服器其中之一．你将会注意到这份输出看起来非常地像一个 root.cache 档案，除了一堆额外的数字以外．这些数字不会有什麽妨碍．把它存放到档案里(dig @e.root-servers.net . ns >root.cache.new)并且用它来取代原本旧的 root.cache 档案．

取代了原先的档案之後要记得重新启动 named 程式．

Al Longyear 寄给我这个指令稿，它可以自动执行来更新 named.cache，为它安装个 crontab 项目然後忘了它．这个指令稿假设你的电子邮件可以运作而且 `hostmaster' 这个邮件别名有定义．你应该修订它以便符合你的设定．

--------------------------------------------------------------------------------

#!/bin/sh
#
# Update the nameserver cache information file once per month.
# This is run automatically by a cron entry.
#
(
echo "To: hostmaster <hostmaster>"
echo "From: system <root>"
echo "Subject: Automatic update of the named.boot file"
echo

export PATH=/sbin:/usr/sbin:/bin:/usr/bin:
cd /var/named

dig @rs.internic.net . ns >root.cache.new

echo "The named.boot file has been updated to contain the following information:"
echo
cat root.cache.new

chown root.root root.cache.new
chmod 444 root.cache.new
rm -f root.cache.old
mv root.cache root.cache.old
mv root.cache.new root.cache
ndc restart
echo
echo "The nameserver has been restarted to ensure that the update is complete."
echo "The previous root.cache file is now called /var/named/root.cache.old."
) 2>&1 | /usr/lib/sendmail -t
exit 0

--------------------------------------------------------------------------------

有些人可能用 ftp 从 Internic 得到 root.cache 档案．请不要用 ftp 来更新 root.cache，上面提到的方法更为便利．


New Page 1

标题： ■ DNS HOWTO 中译版 : Bind version 8
姓名 ：Nicolai Langfeldt
Email：
地址 ：
转摘 ：http://member.netease.com/

返回

7. Bind version 8
Bind version 8 是最新的 bind 技术．我还没有尝试使用，但 David E. Smith <dave@bureau42.ml.org> 有．他写了这小节的其馀部份．

没有太多的不同．除了使用 named.conf 而不是 named.boot, 其馀都相同．而且 bind 8 包含了一个 perl 指令稿来将旧格式的档案转换成新的．例如一份暂存专用名称伺服器的 named.boot (旧格式):

--------------------------------------------------------------------------------

directory /var/named
cache . root.hint
primary 0.0.127.IN-ADDR.ARPA 127.0.0.zone
primary localhost localhost.zone

--------------------------------------------------------------------------------

在指令列下，於 bind8/src/bin/named 目录中键入:

--------------------------------------------------------------------------------

named-bootconf.pl < named.boot > named.conf

--------------------------------------------------------------------------------

这会产生 named.conf:

--------------------------------------------------------------------------------

// generated by named-bootconf.pl

options {
directory "/var/named";
};

zone "." {
type hint;
file "root.hint";
};

zone "0.0.127.IN-ADDR.ARPA" {
type master;
file "127.0.0.zone";
};

zone "localhost" {
type master;
file "localhost.zone";
};

--------------------------------------------------------------------------------

它将 named.boot 中的每样东西都转换过来，然而它并未加入所有 bind 8 所允许的新强化及配置选项．这里有份较完整的 named.conf 做同样的事，但是效率更好一点．

--------------------------------------------------------------------------------

// This is a configuration file for named (from BIND 8.1 or later).
// It would normally be installed as /etc/named.conf.
// The only change made from the `stock' named.conf (aside from this
// comment :) is that the directory line was uncommented, since I
// already had the zone files in /var/named.

options {
directory "/var/named";
check-names master warn; /* default. */
datasize 20M;
};

zone "localhost" IN {
type master;
file "localhost.zone";
check-names fail;
allow-update { none; };
allow-transfer { any; };
};

zone "0.0.127.in-addr.arpa" IN {
type master;
file "127.0.0.zone";
check-names fail;
allow-update { none; };
allow-transfer { any; };
};

zone "." IN {
type hint;
file "root.hint";
};

--------------------------------------------------------------------------------

bind8/src/bin/named/test 里有这个□例，以及领域档案的拷贝，许多人可以直接拿来修改使用．

领域档案及 root.hint (root.cache) 完全相同，更新它们的指令也是．


New Page 1

标题： ■ DNS HOWTO 中译版 : 拨接连线的自动设定
姓名 ：Nicolai Langfeldt
Email：
地址 ：
转摘 ：http://member.netease.com/

返回

8. 拨接连线的自动设定
这一节解释我如何设定以便让每个过程自动化．我的方法可能一点都不适合你，但是你可能从我所作的一些事情里得到一些点子．同时，我使用 PPP 拨接，然而有许多人使用 slip 或是 cslip 连线方式，所以你的设定里几乎每个地方都可能跟我的不同．但是 slip 使用的 dip 程式应该能够完成我所作的许多事情．

一般来说，当我没有连上网路时我的 resolv.conf 档案单纯地包含这一行

domain uio.no

这确保我不必等待主机名称解析函式库去尝试联系某台不可能帮助我的名称伺服器．但是当我连上线的时候我想要起始我的 named 并且拥有一个看起来像前面所描述的 resolv.conf 档案．我藉由保持两份 resolv.conf 的‘样板’档案，resolv.conf.local 以及 resolv.conf.connected 来解决问题．後面这一个看起来像前面所描述过的 resolv.conf 档案．

要自动化连线到网路的过程我执行一个称为 `ppp-on' 的指令稿:

--------------------------------------------------------------------------------

#!/bin/sh
echo calling...
pppd

--------------------------------------------------------------------------------
pppd 有个称为 options 的档案，它告诉 pppd 如何取得连线的一些特殊事项．一旦我的 ppp 连线完成後 pppd 起始一个称为 ip-up 的指令(这在 pppd 的线上使用手册里有描述)．这里是该指令稿里面的一部份:
--------------------------------------------------------------------------------

#!/bin/sh
interface="$1"
device="$2"
speed="$3"
myip="$4"
upip="$5"
...
cp -v /etc/resolv.conf.connected /etc/resolv.conf
...
/usr/sbin/named

--------------------------------------------------------------------------------

换句话说，我在这里起始我的 named 程式．当 ppp 离线时 pppd 执行一个称为 ip-down 的指令稿:

--------------------------------------------------------------------------------

#!/bin/sh
cp /etc/resolv.conf.local /etc/resolv.conf
read namedpid < /var/run/named.pid
kill $namedpid

--------------------------------------------------------------------------------
所以这在连线时配置并设定相关事宜并且在离线时解除该配置并结束相关程式．

某些程式，例如我想起 irc 与 talk，做了过多的假定，为了让其工作正常你必须修改你的 hosts 档案．我在 ip-up 上加入

--------------------------------------------------------------------------------

cp /etc/hosts.ppp /etc/hosts
echo $myip roke >>/etc/hosts

--------------------------------------------------------------------------------
hosts.ppp 是简单地包含了
--------------------------------------------------------------------------------

127.0.0.1 localhost

--------------------------------------------------------------------------------

而 echo 指令插入了我收到的 IP 号码做为我机器的名称(roke)．你应该改用你自己机器的名称，可以用 hostname 指令查出．

当你没有连线到网路上时执行 named 可能并不聪明，这是因为 named 将会尝试送出查询到网路上而且其终止时限(timeout)很长，而每次有某些个程式尝试解析一个名称的时候你就得等待到这个终止时限．如果你使用拨接的话你应该在连上网时起始 named 并且在离线时杀掉它．不过请参考 FAQ 一节的提示．

某些人喜欢在慢速的连线上使用 forwarders 指令．如果你的网际网路提供者在 1.2.3.4 以及 1.2.3.5 设有 DNS 伺服器那麽你可以插入这麽一行

--------------------------------------------------------------------------------

forwarders 1.2.3.4 1.2.3.5

--------------------------------------------------------------------------------
到 named.boot 档案里去．这将会减低源自你主机的 IP 流量，可能稍微提升速度．如果你是依线路的资料量付费的话这点特别重要．这还有个附加价值，让你脱离作为一个暂存的 named 维护者所应负起的责任: 你不需要去更新一个空的 root.cache 档案．


New Page 1

标题： ■ DNS HOWTO 中译版 : 常见问题解答
姓名 ：Nicolai Langfeldt
Email：
地址 ：
转摘 ：http://member.netease.com/

返回

9. 常见问题解答
本节中我将列出一些关於 DNS 以及本文件最常被提出的问题．还有解答 :-) 在写信给我前请先阅读过本节．

如何在防火墙之内使用 DNS ?
一些提示: `forwarders', `slave', 以及参考本文件最後面的文献列表．

如何利用 DNS 提供的可用位址於某一服务，如 www.busy.site，以获得负荷平衡或类似的效果?
为 www.busy.site 加上许多 A 记录，而且使用 bind 4.9.3 或以後的版本．这样 bind 会使用 round-robin 演算法找寻答案．这不能在更早版本的 bind 上工作．

我想在一封闭的 Intranet 上架设 DNS．我该怎麽做?
把暂存档案丢掉只留区域档案．这也表示你将不需要更新暂存档案．

我的系统没有 ndc 程式．我该怎麽办?
你的系统安装过一旧的，可能过期的 bind 程式．如果安全性对你很重要: 立刻将 bind 升级．如果不是，你也可以用这旧的．你可直接执行 named 而不是 ndc start． ndc reload 变成 named.reload 而 ndc restart 变成 named.restart．所有这些程式可能都在 /usr/sbin 里．

如何建立次要名称伺服器?
如果主要名称伺服器的地址是 127.0.0.1，在你的次要名称伺服器的 named.boot 档案中放一行:

--------------------------------------------------------------------------------

secondary linux.bogus 127.0.0.1 sz/linux.bogus

--------------------------------------------------------------------------------

我希望离线时 bind 仍继续执行．
我收到来自 Ian Clark <ic@deakin.edu.au> 的信件解释他如何办到这点．

I run named on my 'Masquerading' machine here. I have
two root.cache files, one called root.cache.real which contains
the real root server names and the other called root.cache.fake
which contains...

--------------
; root.cache.fake
; this file contains no information
--------------

When I go off line I copy the root.cache.fake file to root.cache and
restart named.

When I go online I copy root.cache.real to root.cache and restart
named.

This is done from ip-down & ip-up respectively.

The first time I do a query off line on a domain name named doesn't
have details for it puts an entry like this in messages..

Jan 28 20:10:11 hazchem named[10147]: No root nameserver for class IN

which I can live with.

It certainly seems to work for me. I can use the nameserver for
local machines while off the 'net without the timeout delay for
external domain names and I while on the 'net queries for external
domains work normally

名称伺服器将暂存资料保存在那儿? 有任何方法可以控制它的大小吗?
所有的暂存资料都保存在记忆体中，任何时刻它都不会被写入磁碟中．每次你杀掉 named 时这些暂存资料就没有了．没有任何方法可以控制暂存资料． named 用一些简单的法则来管理它．你不能用任何理由任何方法控制暂存资料或其大小．如果你希望如此你可以自己去改 named 的程式．不过最好别这麽做．

如何在重新起始 named 之间保存暂存资料? 我可以把它存下来吗?
不! named 被杀掉时不会保留暂存资料．这就是说暂存资料必须在每次你杀掉并重新起始 named 後重新建立． 没有办法让 named 将暂存资料存到档案里．如果你希望如此你可以自己去改 named 的程式．不过最好别这麽做．


New Page 1

标题： ■ DNS HOWTO 中译版 : 如何成为一个大型的 DNS 管理者
姓名 ：Nicolai Langfeldt
Email：
地址 ：
转摘 ：http://member.netease.com/

返回

DNS HOWTO 中译版 Previous: 常见问题解答
Next: DNS HOWTO 中译版
--------------------------------------------------------------------------------

10. 如何成为一个大型的 DNS 管理者
文件以及工具

存在真正的文件．在线上的或是印好的．要跨出由小型 DNS 到大型 DNS 管理者的一步阅读几份这些文件是必要的．印好的标准参考书是 DNS and BIND by C. Liu and P. Albitz from O'Reilly & Associates, Sebastopol, CA, ISBN 0-937175-82-X．我读过，它很棒．在另一本 TCP/IP Network Administration, by Craig Hunt from O'Reilly..., ISBN 0-937175-82-X 有一节是关於 DNS 的．另一本对管理 DNS 很好的(或者是对任何这一类工作都很好)书则是 Zen and the Art of Motorcycle Maintenance, 作者 Robert M. Prisig 书号 ISBN 0688052304．

线上的资料你可以在这里找到 http://www.dns.net/dnsrd/, http://www.isc.org/bind.html; 常见问题集，参考手册(BOG; Bind Operations Guide)是协定的定义以及 DNS 研究的文献．这些文件我大部分没有阅读过，但是因此我不是个大型 DNS 管理者．另一方面 Arnt Gulbrandsen 已经读过 BOG 而且对此很熟稔 :-)．网路新闻讨论群 comp.protocols.tcp-ip.domains 是有关 DNS 的讨论群．此外还有好几份关於 DNS 的 RFCs，最重要的可能是这些:

RFC 2052
A. Gulbrandsen, P. Vixie, A DNS RR for specifying the location of services (DNS SRV), October 1996

RFC 1918
Y. Rekhter, R. Moskowitz, D. Karrenberg, G. de Groot, E. Lear, Address Allocation for Private Internets, 02/29/1996.

RFC 1912
D. Barr, Common DNS Operational and Configuration Errors, 02/28/1996.

RFC 1713
A. Romao, Tools for DNS debugging, 11/03/1994.

RFC 1712
C. Farrell, M. Schulze, S. Pleitner, D. Baldoni, DNS Encoding of Geographical Location, 11/01/1994.

RFC 1183
R. Ullmann, P. Mockapetris, L. Mamakos, C. Everhart, New DNS RR Definitions, 10/08/1990.

RFC 1035
P. Mockapetris, Domain names - implementation and specification, 11/01/1987.

RFC 1034
P. Mockapetris, Domain names - concepts and facilities, 11/01/1987.

RFC 1033
M. Lottor, Domain administrators operations guide, 11/01/1987.

RFC 1032
M. Stahl, Domain administrators guide, 11/01/1987.

RFC 974
C. Partridge, Mail routing and the domain system, 01/01/1986.


New Page 1

标题： ■ The Linux GCC HOWTO中译版V0.1
姓名 ：Daniel Barlow
Email：dan@detached.demon.co.uk
地址 ：
转摘 ：http://member.netease.com/

返回

这篇文件的内容包括了如何在Linux下启用(set up)GNU C的编译器(compiler)以及怎麽建立(set up)那些可以拿来开发软体的程式库(libraries);同时, 对於程式码的编译(compiling),连结(linking),执行(running)与除错(debugging)等等,也会有概观(overview)的说明.这篇文件写作的材料,泰半是来自於Mitch D'Souza所收集GCC-FAQ,而这篇文件取代了GCC-FAQ.另外一个来源就是ELF-HOWTO了;可以这麽说,Linux GCC-HOWTO快要永久的取代ELF-HOWTO, 成为GCC最主要的说明文件了. 这是第一份公开发行的版本(不须理会版本序号;那是RCS的杰作(artifact)).有任何指正与建议的,我都很欢迎.
--------------------------------------------------------------------------------

~~~GCC HOWTO中译版说明文件 V0.1 补充说明 Taipei, Taiwan, R.O.C.

这份译文为Linux document projects(LDP)中文翻译计画系列之一.目前之网址为http://www.linux.org.tw/CLDP/.欢迎各位网友踊跃投入此一计画.
我并没有完全按照原文逐字翻译.为了力求译文通畅可读,我会稍稍的重组一部份的文字,加油添醋,或是精简原文;这样做的话,可以弥补中英文间语法结构的差异性,且语气可以贯通无碍.
一些关键字与专业词汇等,会附加上原文单字.
遇有转译困难,唯原文常见的字汇,如bugs,shadow password,padding之类的,则保留原文不变.若阁下对这些字汇有适当译辞的,请不吝指教.
内文中若遇有"[译者注:**]"之标记,则为本人额外之注解.
对这篇译文有任何建议与疑问的,请email至frank63@ms5.hinet.net.
WWW Home Page: http://wwwhome.fancy.com.tw/~frank/.
此中译文件之翻译权已取得英籍之原作者Daniel Barlow 先生之同意;另,陈建勋先生保有此份中译版文件所有的权利,你可以任意的拷贝,以各种媒体'完整'散布这份中译文件,唯此补充说明需原封不动附上,且不可任意更动译文.
翻译起始日期为:11/7/97;截止日期为:11/19/97

1. 生火上路(Preliminaries)!
1.1. ELF vs. a.out
1.2. 作者的私语(Administrata)
1.3. 印刷与排版(typography)
2. 上哪抓这些东东?
2.1. 这份文件座落之处
2.2. 其它相关的说明文件
2.3. GCC
2.4. C程式库与标头档
2.5. 相关联的工具 (as, ld, ar, strings etc)
3. GCC的安装(installation)与启用(setup)
3.1. GCC的版本
3.2. 东东装好後都到哪儿去了?
3.3. 标头档ㄋㄟ?标头档ㄋㄟ?
3.4. 建立交叉编译器(Building cross compilers)
4. 移植(Porting)与编译(Compiling)程式
4.1. gcc自行定义的符号
4.2. 线上求助说明(invocation)
4.3. 移植能力(Portability)
5. Debugging and Profiling
5.1. Preventative maintenance (lint)
5.2. 除错(Debugging)
5.3. 旁敲侧击(Profiling)
6. 连结(Linking)
6.1. 共享程式库 vs静态程式库
6.2. Interrogating libraries (`which library is sin() in?')
6.3. X档案???
6.4. 建立你自己的程式库(Building your own libraries)
7. 动态载入(Dynamic Loading)
7.1. 基本概念
7.2. 错误讯息(Error messages)
7.3. 控制动态载入器的运作
7.4. 以动态载入撰写程式
8. 与发展人士联络
8.1. Bug报表
8.2. 协助发展
9. 结语
9.1. 名人榜
9.2. 翻译
9.3. 欢迎任何的回馈(Feedback)
9.4. 合法的行迳规定
10. 索引


New Page 1

标题： ■ The Linux GCC HOWTO中译版V0.1: 生火上路(Preliminaries)!
姓名 ：Daniel Barlow
Email：dan@detached.demon.co.uk
地址 ：
转摘 ：http://member.netease.com/

返回

1. 生火上路(Preliminaries)!
1.1. ELF vs. a.out
目前,Linux的发展正波涛汹涌的进行著.简单一点讲,Linux有两种执行档的格式(formats)可用,取决於你的系统是怎麽整合起来的;你可能两种都有.读了这份文件之後,你就会知道是那一种了.

那,要怎麽区别呢?执行公用程式(utility)'file' (例如,file /bin/bash)就对了.就ELF格式的程式码来讲,显示出来的讯息会含有ELF的字眼;如果是a.out格式的,讯息内就会箝有 Linux/i386的字样了.

ELF与a.out格式的差异之处,会在後续的章节中讨论(很广泛喔).ELF是比较新的格式,一般而言,接受的程度较佳.

1.2. 作者的私语(Administrata)
版权说明(copyright information)与合法的行迳规定(legalese),就摆在这份文件的尾端.除此之外,我......,我还有一些不得不提醒你的话要讲:就算你□著没事干,也不要在Usenet上丢一些呆瓜问的问题;还有啊,不要老以为自己C的功力深厚,专门发表一些不是bugs的bugs出来丢人现眼, 告诉别人你不学无术.最後;嚼口香糖的时候,不妨挖挖你的鼻孔(,and picking your nose while chewing gum)! [译者注:不知道这是那一国的幽默? eh? :-)另一种可能是原文有缺漏字汇, 像是"and not picking your nose while chewing gum."]

1.3. 印刷与排版(typography)
如果你现在读的是Postscript,dvi或者是html格式的话,那麽你所看到的字型变化就会比只读纯文字格式的人多一些.特别的是,档案名称(filenames),命令(commands),命令的输出(command output)与摘录出来的原始码(source code)等,统统都是打字机的字型样式(form).这样做的话,对於某些需要强调的变数(variables)以及没有特定结果的□例(random things)而言,就可以达到强调的效果了.

读这份文件的同时,你也会得到一个有用的(usable)索引(index).假若是dvi, postscript之类的版本,索引的数字就是章节(section)的编号;如果是HTML的话,这些数字会按顺序排列,你可以用滑鼠左键来连结(linking)相对的索引;如果你看的是纯(plain)文字版本的话, 数字就只是数字, 没别的含意;建议你赶快升级为妙哩!

我所用的shell是Bourne shell(不是C shell),举的例子自然是Bourne shell的语法.如果你用的是C shell的话, 环境变数设定的语法会像下面这样:

% setenv FOO bar

要是用Bourne shell的话, 我会这样子写:

$ FOO=bar; export FOO

如果提示符号(prompt)显示的是井字符号#,而不是钱字符号 $,那麽,很有可能是这个命令只适用root而已.当然啦!要是你试了这些□例,结果弄得你的系统发生灾变,我可是一点责任也不会负的喔!祝你心情好啊!:-) [译者注:牵拖(闽南语) _ .]

11/8/97译.


New Page 1

标题： ■ The Linux GCC HOWTO中译版V0.1: 上哪抓这些东东?
姓名 ：Daniel Barlow
Email：dan@detached.demon.co.uk
地址 ：
转摘 ：http://member.netease.com/

返回

2. 上哪抓这些东东?
2.1. 这份文件座落之处
这份文件是Linux HOWTO系列之一.易言之,你可以在所有存放Linux HOWTO文件的网站上面找到它的芳踪,例 如http://sunsite.unc.edu/pub/linux/docs/HOWTO/.HTML格式的版本(可能会是较新的版本)可以从http://ftp.linux.org.uk/~barlow/howto/gcc-howto.html上面抓下来.

2.2. 其它相关的说明文件
gcc正式的说明文件是附在发行的原始码(source distribution)内(往下看就有了!),里头有textinfo与.info两种档案.要是你的网路连接速率够快,或者是有一片cdrom;不然的话,有高度的耐心也成,你可以自己把它untar,然後再把相对应的位元一一拷贝到/usr/info的目录底下.假如你的条件与上述的不符,不妨到 tsx-11站上去找一找.不过,我想,没有必要老是惦记著最新的版本吧.

libc的文件说明有两种来源.一种是GNU libc,以.info的格式储存,除了stdio之外,其馀Linux libc的说明都相当详尽精确.另一种可以在Linux的archivemanpages 上找到系统呼叫(system call)(第2节)与libc函数(function)(第3节)的文件说明.

2.3. GCC
解答有二:

(a)你可以在ftp://tsx-11.mit.edu:/pub/linux/packages/GCC/的网站上找到正式的Linux GCC发行系统(distribution),且已编译好的(read-compiled)可执行档(in binary).当我在写这份文件时,2.7.2(gcc-2.7.2.bin.tar.gz)是最新的版本.

(b)自由软体基金会(Free Software Foundation)所发布的GCC最新原始码可以从网站GNU archives上取得.没有必要非得与上述的版本一致才行,不过这个版本的确是目前最新的.Linux GCC的维护人士(maintainers)让你可以很轻松的自行编译这个最新的版本.configure命令稿(script)会帮你自动建好(set it all up)所有该做的事.建议你有空不妨到tsx-11看看,说不定会有修正的版本(patches)是你会想要用的(apply).

如果想要编译出一些有用的东东(non-trivial)(不是我罗唆,还是有不少细琐的东东在哩!),下面一小节所谈的也是你要具备的:

2.4. C程式库与标头档
在这儿你该选的是取决於(i)你的系统是ELF亦或是a.out的;(ii)你希望你的系统变成哪一种?如果你是从libc 4升级到libc 5,那麽给你一个良心的建议,去看看ELF-HOWTO文件.你一定会问,在ELF文件的哪儿呢?嘿!嘿!不偏不倚,就差不多跟这份文件一样的位置.你可以在网站tsx-11上面找到你想要的.

libc-5.2.18.bin.tar.gz
--- ELF共享程式库(ELF shared library images),静态程式库(static libraries)与标头档(include files)(针对C语言与数学程式库的).

libc-5.2.18.tar.gz
---libc-5.2.18.bin.tar.gz的原始码.这两个档案你都需要,.bin.套件(package)内含有标头档(header files).如果此时你正犹豫不决,不晓得是要老身亲自下海,动手编译C程式库;还是直接用编译好的二进位档(binaries)就可以了.有这种困扰的人,来,看我的嘴形:用人家编译好的二进位档不就解决了嘛.只有在你想要NYS或是shadow password的情况下,你才需要自己的手来推动摇篮.

libc-4.7.5.bin.tar.gz
--- 这个档案的内容是a.out的共享程式库(shared library images)与静态程式库.这个档案的用途是为了与前述的libc 5套件共存共荣(coexist)而设计的,不过除非你想要继续使用或者发展a.out格式的程式,不然的话,是不需要它的.

2.5. 相关联的工具 (as, ld, ar, strings etc)
到目前为止,与之前所谈的都一样,从网站tsx-11上,就可以找到这些工具程式.目前的版本是binutils-2.6.0.2.bin.tar.gz.

需注意的是binutils只适用於ELF格式,目前libc的版本也都是ELF的;当然啦, 习惯a.out的人如果有个ELF的libc与a.out的libc联合(in conjunction with)起来一起使用, 那对他们来讲是再好不过的美事了.不可否认的,C程式库的发展正以坚决的(emphatically)脚步迈向ELF格式,除非你真的有很好的理由,需要a.out的东东(things),不然啊,大家都会鼓励(encourage)你勇於突破,趁早加入锐不可挡的大潮流里.

11/9/97译


New Page 1

标题： ■ The Linux GCC HOWTO中译版V0.1: GCC的安装(installation)与启用(setup)
姓名 ：Daniel Barlow
Email：dan@detached.demon.co.uk
地址 ：
转摘 ：http://member.netease.com/

返回

3. GCC的安装(installation)与启用(setup)
3.1. GCC的版本
你可以在shell的提示符号下键入gcc -v,萤幕上就会显示出你目前正在使用的GCC的版本.而这也是一个相当可靠的方法,可以确定你现在所用的是ELF或是a.out.在我的系统上,执行gcc -v的结果是:

$ gcc -v
Reading specs from /usr/lib/gcc-lib/i486-box-linux/2.7.2/specs
gcc version 2.7.2

上面的讯息说明了几件重要的事情:

i486. 这是指出(indicates)你目前在用的gcc是为了486的微处理器(processor)而写的-可能你的电脑是386或者是586.这3种微处理器的晶片(chips)所编译而成的程式码,彼此间是可以相容使用的.差别之处是486的程式码在某些地方有加上padding的功能,所以可以在486上面跑得比较快.这对386的机器而言,在执行程式的效能(performance)上并没有什麽不良的影响(detrimental effect),只不过真的(does)会让程式码变得稍稍的大了些.
box. 这可以说一点也不重要;不过也可能另有所指(像是slackware或者是debian),或者根本什麽也不是(所以罗!完整的目录名称是i486-linux).假如你是实践派的代表,亲自动手建立属於自己的gcc,那麽你可以在建立的过程中(build time)设定这一项,以装点门面(cosmetic effect).就像我做的一样:-).
linux. 其实这是指linuxelf,或者是linuxaout.这一点会令人引起不必要的困惑,究竟是指哪一种会根据你所用的版本而异.
linux 意指ELF若版本序号是2.7.0或是更新的版本;否则的话,就是a.out的了.
linuxaout 意指a.out的格式.当linux的定义(definition)从a.out更换到ELF时,linuxaout就会顺水推舟,摇身一变,成了一个目标物件(target).因此,你不会看到任何版本新於2.7.0的gcc有linuxaout格式的.
linuxelf 已经过时了.通常那是指2.6.3版的gcc,而这个版本也可用来产生ELF的可执行档(executables).要注意的是,gcc 2.6.3版在产生ELF程式码时会有bugs-如果你目前用的是这个版本,建议你赶快升级.
2.7.2 版本的序号.

所以,总结起来,我有2.7.2版的gcc,可以产生ELF格式的程式码.就这麽简单,惊讶吧!eh?

3.2. 东东装好後都到哪儿去了?
如果安装gcc时没有仔细的看著萤幕,或者你是从一个完整的发行系统内把gcc单独抓出来安装的话,那麽也许你会想知道到底这些东东装好後是住在整个档案系统(file-system)的那个地方.几个重点如下:

/usr/lib/gcc-lib/target/version/ (与子目录(sub-directories))大部份的编译器(compilers)就是住在这儿的.在这儿有可执行的程式,实际在做编译的工作;另外,还有一些特定版本的(version-specific)程式库与标头档(include files)等.
/usr/bin/gcc 指编译器的驱动程式(driver)--就是你实际在命令列(command line)上执行的程式.这个目录可供各种版本的gcc使用,只要你用不同的编译器目录(如上所述)来安装就可以了.要知道内定的版本是那一个,在shell提示符号下打gcc -v.要是想强迫执行某个版本,就换打gcc -V version.例如:
# gcc -v
Reading specs from /usr/lib/gcc-lib/i486-box-linux/2.7.2/specs
gcc version 2.7.2
# gcc -V 2.6.3 -v
Reading specs from /usr/lib/gcc-lib/i486-box-linux/2.6.3/specs
gcc driver version 2.7.2 executing gcc version 2.6.3

/usr/target/(bin|lib|include)/. 如果你装了数种的目标物件(multiple targets),例如a.out与elf,或者某一种的交叉编译器(cross-compiler)等等;那些属於非主流目标物件(non-native target(s))的程式库,binutils(as, ld等等)工具与标头档(header files)等都可以在这儿找到.即使你只安装了一种gcc,还是可以在这儿找到这些原本就是替它们准备的东东.如果不是在这儿,那麽就应该是在/usr/(bin|lib|include)了.
/lib/,/usr/lib 与其它的目录等,都是主流系统(native-system)的程式库目录.许多的应用程式都会用到/lib/cpp ,因此你也需要它---作法上,不是从/usr/lib/gcc-lib/target/version/ 目录里拷贝,就是弄个符号连结(symlink)指向那儿. [译者注:所谓native,是指目前你的系统是以a.out或elf的格式为主,或者内定的gcc是哪一种版本等等.native的意思是'本土的','本国的'与'天生的'......等等;当你拿到一片CD-ROM重头至尾将Linux安装完成,让Linux出生,成为你个人特色浓厚的作业平台之後,如果再加装一些不一样的目标物件,自然就有'本土'与'外省'( 无关政治),'本国'与'外国','天生'与'人为'等等的区别,同时也含有内定(default)的意思在.假若再附加上你个人的价值观判断与喜好,我想用主流(native)与非主流(non-native)来翻译应该还算恰当.]

3.3. 标头档ㄋㄟ?标头档ㄋㄟ?
把你自己自行安装在/usr/local/include目录下的标头档(header files)排除在外的话,Linux还有另外3种主要的标头档(header files):

/usr/include/与其子目录下的标头档,大部份都是由H.J.Lu发展的libc套件(libc binary package)内所提供的.我会只说'大部份(most)'的原因, 是因为你可能有其它来源的标头档(header files)(像是curses与dbm程式库等等)摆在这儿;尤其是,如果你现在用的是最新的libc发行系统的话(新版本不像旧版那样,已不再支援curses或dbm了.),那东东之多是人人为之咋舌的! [译者注:libc binary package意指以二进位形式(machine code)储存之套件,并非原始码(text),若要以中文全称译出,则成'libc二进位档套件',似有聱牙之嫌,故略去binary,以libc套件通称.]
在核心原始码的发行系统内(kernel source distribution) ,/usr/include/linux 与 /usr/include/asm (里头有这些档案: <linux/*.h> and <asm/*.h>)应该有符号连结(symbolic links),可连结至目录linux/include/linux 与 linux/include/asm.如果你有鸿鹄之志的话,安装这些东东後,就不应该只是拿来编译核心(kernel)而已. 把原始码解压缩(unpacking)後,可能你也会发现,需要在核心的目录(kernel directory)底下做make config的动作.很多的档案都会依赖<linux/autoconf.h>的帮忙,可是这个档案却有可能因版本不同而不存在.若干核心版本里,asm就只是它自己的一个符号连结,仅仅是在make config时建立出来而已. [译者注:原文提及autoconf.h时是'Many files depend on <linux/autoconf.h>,which otherwise may not exist,*'.此处之otherwise之词性应为形容词(adj),指'另一情况','另一种','不同的'之意,将原文形容词子句拆开来应为: (i). Many files depend on <linux/autoconf.h>. (ii).<linux/autoconf.h> of other condition may not exist. 与下一句互相比对,此处应同指在不同版本之情况下.] 所以,当你在目录/usr/src/linux底下,解开核心的程式码时,就照著下面指示的做吧!
$ cd /usr/src/linux
$ su
# make config
[回答接下来的问题.通常回答得正不正确并不重要,除非你打算继续□起(go on and build)你的核心.]
# cd /usr/include
# ln -s ../src/linux/include/linux .
# ln -s ../src/linux/include/asm .

诸如<float.h>, <limits.h>,<varargs.h>, <stdarg.h> 与<stddef.h>之类的档案,会随著不同的编译器版本而异,属於你自己'个人'的档案,可以在 /usr/lib/gcc-lib/i486-box-linux/2.7.2/include/与其它有相类似(相同)目录名称的地方(places of that ilk)找到. 11/11/97译

3.4. 建立交叉编译器(Building cross compilers)
3.4.1. 将Linux当作目标作业平台(target platform)
假设你已经拿到gcc的原始码,通常你只要依循INSTALL档内的指示便可一切ok. make後面黏个configure --target=i486-linux --host=XXX on platform XXX,就能帮你变把戏了(do the trick).要注意的是,你会需要Linux与核心的标头档的;而且你也需要建立交叉组译器(cross assembler)与交叉连结器(cross linker),来源是ftp://tsx-11.mit.edu/pub/linux/packages/GCC/

3.4.2. Linux当成来源作业平台(source platform),MSDOS作为目标作业平台
Ugh.很明显的,这个大概需要用到"emx"套件(package)或者是"go"延伸套件(extender).请自行去ftp://sunsite.unc.edu/pub/Linux/devel/msdos看看.我并没有测试过这个,因此也无法保证(vouch)它的功能(abilities).


New Page 1

标题： ■ The Linux GCC HOWTO中译版V0.1: 移植(Porting)与编译(Compiling)程式
姓名 ：Daniel Barlow
Email：dan@detached.demon.co.uk
地址 ：
转摘 ：http://member.netease.com/

返回

4. 移植(Porting)与编译(Compiling)程式
4.1. gcc自行定义的符号
只要执行gcc时,附加 -v这个参数(switch),就能找出你所用的这版gcc,自动帮你定义了什麽符号(symbols).例如,我的机器看起来会像这样:

$ echo 'main(){printf("hello world\n");}' | gcc -E -v -
Reading specs from /usr/lib/gcc-lib/i486-box-linux/2.7.2/specs
gcc version 2.7.2
/usr/lib/gcc-lib/i486-box-linux/2.7.2/cpp -lang-c -v -undef
-D__GNUC__=2 -D__GNUC_MINOR__=7 -D__ELF__ -Dunix -Di386 -Dlinux
-D__ELF__ -D__unix__ -D__i386__ -D__linux__ -D__unix -D__i386
-D__linux -Asystem(unix) -Asystem(posix) -Acpu(i386)
-Amachine(i386) -D__i486__ -

假若目前你正在写的程式码,会用到一些Linux独有的特性(Linux-specific features),那麽把那些无法移植的程式码(non-portable bits),以条件式编译(conditional compilation)的前置命令封括(enclose in)起来,可是个不错的主意呢!

#ifdef __linux__
/* ... funky stuff ... */
#endif /* linux */

用__linux__即可达成目的;看仔细一点,不是linux啊.仅管後者也有定义,毕竟,仍然不是POSIX的标准(not POSIX compliant).

4.2. 线上求助说明(invocation)
gcc编译器参数(switches)的说明文件是gcc info page(在Emacs内,按下C-h i,然後选'gcc'的选项).要是弄不出来,不是卖你CD-ROM的人,没把这个东东压给你,不然就是你现在用的是旧版的.这种情况下,最好的方法是移动尊臀到archiveftp://prep.ai.mit.edu/pub/gnu或是它的mirrors站台上,把gcc的原始档案抓回家,重新烹饪一番.

gcc manual page (gcc.1) 可以说是已经过时了.一旦你吃饱撑著没事干要去看看它的话,它就会告诉你这件事,叫你别无聊了.

4.2.1. 旗正飘飘~(flags)
在命令列(command line)上执行gcc时,只要在它的屁股後面加上-On的选项,就能让gcc乖乖的替你生出最佳化後的机器码(output code).这里的n是一个可有可无的小整数.不同的gcc版本,n的意义与其正确的(exact)功效都不一样;不过,典型的□围是从0(不要鸡婆,我不要最佳化)变化到2(最佳化要多一点),再到3(最佳化要再多一点,多一点).

gcc在其内部会将这些转译成一系列的-f 与-m选项(options).执行gcc时带上旗号(flags)-v与-Q,你就能很清楚的看出每一种等级的-O是对应(maps)到那些选项(options).例如,就-O2来讲,我的gcc告诉我说:

enabled: -fdefer-pop -fcse-follow-jumps -fcse-skip-blocks
-fexpensive-optimizations
-fthread-jumps -fpeephole -fforce-mem -ffunction-cse -finline
-fcaller-saves -fpcc-struct-return -frerun-cse-after-loop
-fcommon -fgnu-linker -m80387 -mhard-float -mno-soft-float
-mno-386 -m486 -mieee-fp -mfp-ret-in-387

要是你用的最佳化等级(optimization level)高於你的编译器所能支援的(e.g. -O6),那麽它的效果,就跟你用你的编译器所能提供的最高等级的,是一样的结果.说实在的,发行出去的gcc程式码,用在编译时竟是如此处理这等问题,实非什麽好的构想.日後若是有更进步的最佳化方法具体整合到新的版本里,而你(或你的users)还是试著这样做的话,可能就会发现,gcc会中断你的程式(break your code)了.

从gcc 2.7.0到2.7.2的users应该注意到,使用时-O2会有一个bug存在.更糟糕的是,强度折减(strength reduction)居然没有用(doesn't work)!要是你喜欢重新编译gcc的话,是有那麽一个修正的版本(patch)可以更正这项错误;不然的话,一定要确定每次编译时都会加上-fno-strength-reduce喔!

11/12/97译

4.2.1.1. 有个性的微处理器(Processor-specific)
有一些-m的旗号无法藉由各种等级的-O来打开,然而却是十分有用的.这之中最主要的是-m386与-m486两种,用来告诉gcc该把正在编译的程式码视作专为386或是486机器所写的.不论是用哪一种来编译程式码,都可以在彼此的机器上执行,-m486编译出来的码会比较大,可是拿来在386的机器上跑也不会比较慢就是了.

目前尚无-mpentium或是-m586的旗号.Linus建议我们,可以用-m486 -malign-loops=2 -malign-jumps=2 -malign-functions=2,来得到最佳化的486程式码(486 code optimizations),而这样做正好就可以避免alignment(Pentium并不需要)有过大的gaps发生. Michael Meissner说:

我的第六感(hunch)告诉我, -mno-strength-reduce(嘿!我可不是在谈强度折减的bug啊,那已经是另外一个争论的战场了.)一样也可以在x86的机器上,产生较快的程式码,这是因为x86的机器对暂存器(register)有著不可磨灭的□渴在(and GCC's method of grouping registers into spill registers vs. other registers doesn't help either).传统上,强度折减的结果会使得编译器利用加法暂存器(additional registers)以加法运算(addition)来取代乘法运算(multiplication).而且,我也在怀疑(suspect)-fcaller-saves,可能也只是个漏洞(loss)也说不定.
而我的第七感则再度的告诉我, -fomit-frame-pointer可能会,也可能不会有任何的赚头.从这点来看,即意谓著有另一个暂存器可用来处理记忆体分配(allocation)的问题.另方面,若纯粹从x86的机器在转换(encodes)它的指令集(instruction set)成为机器码的方法上来看,便意谓著堆叠(stack)所用到的记忆体空间要比frame所用到的还要来的多;换句话说,Icache对程式码而言并没有实质上的益处.若是阁下用了-fomit-frame-pointer的话,同时,也就是告诉编译器在每次呼叫函数(calls)之後,就必须修正堆叠的指标(stack pointer);然而,就frame来讲,若呼叫的次数不多的话,则允许堆叠暂时堆积(accumulate)起来.

有关这方面主题的最後一段话仍是来自於Linus:

要注意的是,如果你想要得到最佳状况的执行成果(optimal performance),可千万别相信我的话.无论如何,一定要进行测试.gcc编译器还有许多的参数(switches)可用,其中可能就有一种最特别的组合(set),可以给你最佳化的结果喔.

11/14/97译

4.2.2. Internal compiler error: cc1 got fatal signal 11
Signal 11是指 SIGSEGV, 或者 `segmentation violation'.通常这是指说gcc对自己所用的指标感到困惑起来,而且还尝试著写入不属於它的记忆体.所以,这可能是一个gcc的bug.

然而,大部份而言,gcc是一件经过严密测试且可靠度佳的软体佳作.它也用了大量复杂的资料结构与惊人的指标数量.简言之,若是要评选本世纪最挑惕与最一丝不□的RAM测试程式(RAM tester)的话,gcc绝对可以一摘后冠的.假如你无法重新复制这只bug---当你重新开始编译时,错误的讯息并没有一直出现在同一个地方---那几乎可以确定,是你的硬体本身有问题(CPU,记忆体,主机板或是快取记忆体).千万不要因为你的电脑可以通过开机程序的测试(power-on checks),或者Windows可以跑得很顺,或者其它什麽的,就回过头来大肆宣传说这是gcc的一个bug;你所做的这些测试动作,通常没有什麽实际上的价值,而且没有价值也是很合理的结论.另外,也不要因为编译核心时,总是停留在`make zImage'的阶段,就要大骂这是gcc的bug---当然它会停在那儿啊!做`make zImage'时,需要编译的档案可能超过200档案;我们正在研拟一个比较小的地方来取代.

如果你可以重覆产生这个bug,而且(最好是这样啦)可以写一个短小的程式来展示这只bug的话,你就可以把它做成bug报表(bug report),然後email给FSF,或者是linux-gcc邮件表列(linux-gcc mailing list).你可以去参考gcc的说明文件,看看有什麽详细的资讯,是他们所需要的.

4.3. 移植能力(Portability)
据报,近日来许多正面消息指出,若有某件东东到现在都还没移植到Linux上去,那麽可以肯定的是,它一定一点价值也没有.:-)

嗯!正经一点.一般而言,原始码只需要做一些局部的修改(minor changes),就可以克服(get over)Linux 100%与POSIX相容的特质(compliance).如果你做了任何的修改,而将此部份传回(passing back)给原作者,会是很有建设性的举动(worthwhile).这样日後就只需要用到'make',就能得到一个可执行的档案了.

4.3.1. BSD教派（BSDisms） (有 bsd_ioctl, daemon 与 <sgtty.h>)
编译程式时,可以配合-I/usr/include/bsd与连结-lbsd的程式库.(例如:在你的Makefile档内,把-I/usr/include/bsd加到CFLAGS那一行;把-lbsd加到LDFLAGS那一行).如果你真的那麽想要BSD型态的信号行为(BSD type signal behavior),也不再需要加上-D__USE_BSD_SIGNAL了.那是因为当你用了-I/usr/include/bsd与含括了标头档<signal.h>之後,make就自动会把它加入了.

4.3.2. 失落的封印（`Missing' signals）(SIGBUS, SIGEMT, SIGIOT, SIGTRAP, SIGSYS etc)
Linux与POSIX是完全相容的.不过,有些信号并不是POSIX定义的---ISO/IEC 9945-1:1990 (IEEE Std 1003.1-1990), paragraph B.3.3.1.1 sez:

"在POSIX.1中省略了SIGBUS, SIGEMT, SIGIOT, SIGTRAP, 与SIGSYS信号,那是因为它们的行为(behavior)与实作方式是息息相关的(implementations dependent),而且也无法进行适当的分门别类(adequately categorized).确认实作方式後(conforming implementations),便可以生产出(deliver)这些信号,可以必须以文件说明(document)它们是在什麽样的环境(circumstances)下生产出来的,以及指出与它们的发展相关的任何限制(any restrictions concerning their delivery)".

如欲修正此点,最简单,也是最笨的(cheesy)方法就是以SIGUNUSED重新定义这些信号.而正确的方法应是以条件式的编译#ifdef来处理这些问题才对:

#ifdef SIGSYS
/* ... non-posix SIGSYS code here .... */
#endif

11/15/97译

4.3.3. K & R
gcc是个与ANSI相容的编译器;奇怪的是,目前大多数的程式码都不符合ANSI所定的标准.如果你热爱ANSI,喜欢用ANSI提供的标准来撰写C程式,似乎除了在编译器的旗号上加上-traditional之外,就没有什麽其它的可以多谈的了.There is a certain amount of finer-grained control over which varieties of brain damage to emulate;请自行查阅gcc info page.

要注意的是,尽管你用了-traditional来改变语言,它的效果也仅局限在gcc所能够接受的□围.例如, -traditional会打开(turn on)-fwritable-strings,使得字串常数(string constants)移至资料记忆体空间(data space)内(从程式码记忆体空间(text space),这地方是不能任意写入的).这样做会让程式码的记忆体空间无形中增加的.

4.3.4. 前置处理器(Preprocessor)的符号卯上函数原型宣告(prototypes)
最常见的问题是,如众所皆知,Linux中有许多常用的函数都定义成巨集(macros)存放在标头档(header files)内,此时若有相似的函数原型宣告出现在程式码内,前置处理器会拒绝进行语法分析(parse)的前置作业.常见的有atoi()与atol().

4.3.5. sprintf()
在大部份的Unix系统上, sprintf(string, fmt, ...)传回的是string的指标,然而,这方面Linux(遵循ANSI)传回的却是放入string内的字元数目.进行移植时,尤其是针对SunOS,需有警觉的心.

4.3.6. fcntl 与相关的函数; FD_*家族的定义到底摆在哪里?
就在 <sys/time.h>里头. 为了真正的原型宣告,当你用了fcntl,可能你也想含括标头档<unistd.h>进来.

一般而言,函数的manual page会在SYNOPSIS章节内列出需要的标头档.

4.3.7. select() 的计时(time-out)---程式执行时会处於忙碌-等待的状态(busy-waiting).
很久很久以前, select()的计时参数(time-out parameter)只有读的属性(read-only)而已.即使到了最近,manual pages仍然有下面这段的警告:

select()照理讲应该是藉由适当的修正时间的数值,再传回自原始计时(original time-out)开始後所剩馀的时间.未来的版本可能会使这项功能实现.因此,就目前而言,若假定在呼叫select()之後,计时指标(time-out pointer)仍然不会让人给修正过,可是一种非常不明智的想法喔!

未来就在我们的眼前了!至少,在这儿你绝对可以看到. 函数select()传回的,是扣除等待尚未到达的资料所耗费的时间後,其剩馀的时间值.如果在计时结束时,都没有资料传送进来,计时引数(time-out argument)便会设为0;如果接著还有任何的select(),以同样的time-out structure来呼叫,那麽select()便会立刻结束.

若要修正这项问题,只要每次呼叫select()前,都把计时数值(time-out value)放到time-out structure内,就没有问题了.把下面的程式码,

struct timeval timeout;
timeout.tv_sec = 1; timeout.tv_usec = 0;
while (some_condition)
select(n,readfds,writefds,exceptfds,&timeout);

改成,
struct timeval timeout;
while (some_condition) {
timeout.tv_sec = 1; timeout.tv_usec = 0;
select(n,readfds,writefds,exceptfds,&timeout);
}

这个问题,在有些版本的Mosaic里是相当著名的,只消一次的等待,Mosaic就挂了.Mosaic的萤幕右上角,是不是有个圆圆的,会旋转的地球动画.那颗球转得愈快,就表示资料从网路上传送过来的速率愈慢!

4.3.8. 产生中断的系统呼叫(Interrupted system calls)
4.3.8.1. 徵兆(Symptom):
当一支程式以Ctrl-Z中止(stop),然後再重新执行(restart)时--或者是其它可以产生Ctrl-C中断(interruption)信号的情况,如子程序(child process)终结(termination)等--系统就会抱怨说"interrupted system call"或是"write: unknown error",或者诸如此类的讯息.

4.3.8.2. 问题点:
POSIX的系统检查信号的次数,比起一些旧版的Unix是要多那麽一点.如果是Linux,可能就会执行signal handlers了--

非同步地(asynchronously)(计时器的滴答声)
系统呼叫的传回值(on return from any system call)
在下列系统呼叫的执行期间: select(), pause(), connect(),accept(), read() on terminals, sockets, pipes or files in /proc, write() on terminals, sockets, pipes or the line printer, open() on FIFOs, PTYs or serial lines,ioctl() on terminals, fcntl() with command F_SETLKW, wait4(), syslog(), any TCP or NFS operations.

就其它的作业系统而言,你需要的可能就是下面这些系统呼叫(system calls)了: creat(), close(), getmsg(), putmsg(), msgrcv(), msgsnd(), recv(), send(), wait(), waitpid(), wait3(), tcdrain(), sigpause(), semop() to this list.

在系统呼叫期间,若有一信号(那支程式本身应准备好handler因应了)产生,handler就会被呼叫.当handler将控制权转移回系统呼叫时,它会侦测出它已经产生中断,而且传回值会立刻设定成-1,errno设定成EINTR.程式并没有想到会发生这种事,所以就会bottles out了.

有两种修正的方法可以选择:

(1) 对每个你自行安装(install)的signal handler,都须在sigaction旗号加上SA_RESTART.例如,把下列的程式,

signal (sig_nr, my_signal_handler);

改成,
signal (sig_nr, my_signal_handler);
{ struct sigaction sa;
sigaction (sig_nr, (struct sigaction *)0, &sa);
#ifdef SA_RESTART
sa.sa_flags |= SA_RESTART;
#endif
#ifdef SA_INTERRUPT
sa.sa_flags &= ~ SA_INTERRUPT;
#endif
sigaction (sig_nr, &sa, (struct sigaction *)0);
}

要注意的是,当这部份的变更大量应用到系统呼叫之後,呼叫read(), write(),ioctl(), select(), pause() 与 connect()时,你仍然得自行检查(check for)EINTR.如下所示.

(2) 你自己得很明确地(explicitly)检查EINTR:

这里有两个针对read()与ioctl()的例子.

原始的程式片段,使用read().

int result;
while (len > 0) {
result = read(fd,buffer,len);
if (result < 0) break;
buffer += result; len -= result;
}

修改成,
int result;
while (len > 0) {
result = read(fd,buffer,len);
if (result < 0) { if (errno != EINTR) break; }
else { buffer += result; len -= result; }
}

原始的程式片段,使用ioctl().

int result;
result = ioctl(fd,cmd,addr);

修改成,
int result;
do { result = ioctl(fd,cmd,addr); }
while ((result == -1) && (errno == EINTR));

注意一点,有些版本的BSD Unix,其内定的行为(default behaviour)是重新执行系统呼叫.若要让系统呼叫中断,得使用 SV_INTERRUPT或SA_INTERRUPT旗号.

4.3.9. 可以写入的字串(Writable strings)
gcc对其users总怀抱著乐观的想法(optimistic view),相信当他们打算让某个字串当作常数来用时---那它就真的只是字串常数而已.因此,这种字串常数会储存在程式码的记忆体区段内(in the code area of the program).这块区域可以page到磁碟机的image上,避免耗掉swap的记忆体空间,而且任何尝试写入的举动都会造成分页的错误(segmentation fault).这可是一种特色呢!

对老旧一点的程式而言, 这可能会产生一个问题.例如,呼叫mktemp(),传递引数(arguments)是字串常数. mktemp()会尝试著在*适当的位置(in place)*重新写入它的引数.

修正的方法不外乎(a)以-fwritable-strings编译,迫使gcc将此常数置放在资料记忆体空间(data space)内.或者(b)将侵犯地权的部份(offending parts)重新改写,配置一个不为常数的字串(non-constant string),在呼叫前,先以strcpy()将资料拷贝进去.

4.3.10. 为什麽呼叫execl()会失败?
那是因为你呼叫的方式不对.execl的第一个引数是你想要执行的程式名.第二个与接续的引数会变成你所呼叫的程式的argv阵列(array).记住:传统上,argv[0]是只有当程式没有带著引数执行时,才会有设定值.所以罗,你应该这样写:

execl("/bin/ls","ls",NULL);

而不是只有,
execl("/bin/ls", NULL);

执行程式而不带任何引数(with no arguments),可解释成(construe)是一种邀请函(invitation),目的是把此程式的动态程式库独立(dynamic library dependencies)的特性印出来(print out).至少,a.out是这样的.就ELF而言,事情就不是这样了.

(如果你想得知此程式库的资讯,有一些更简单的介面可用;参考动态载入(dynamic loading)那一章节,或是ldd的manual page.)

11/16/97译


New Page 1

标题： ■ The Linux GCC HOWTO中译版V0.1: Debugging and Profiling
姓名 ：Daniel Barlow
Email：dan@detached.demon.co.uk
地址 ：
转摘 ：http://member.netease.com/

返回

5. Debugging and Profiling
5.1. Preventative maintenance (lint)
lint对Linux而言并没有很广泛的用途,主要是因为大部份的人都能满足於gcc所提供的警告讯息(warnings).可能最有用的就是-Wall参数了---这个参数的用途是要求gcc将所有的警告讯息显现出来.but probably has more mnemonic value if thought of as the thing you bang your head against.

网路上有一个实用的public domain lint,位於 ftp://larch.lcs.mit.edu/pub/Larch/lclint.我并不知道这个站到底有多好就是了.

5.2. 除错(Debugging)
5.2.1. 我要怎样做才能将除错资讯放到一支程式里头?
你需要添加-g的参数来编译与连结程式,而且不可以用-fomit-frame-pointer参数.事实上,你不需要重新编译所有的程式,只需重新编译目前你正在除错的部份即可.

就a.out的格式(configurations)而言,共享程式库(shared libraries)是以-fomit-frame-pointer编译而成,这个时候,gdb就变得英雄无用武之地了.连结时给定-g的选项,应该就隐含著静态连结(static linking)了;这就是为什麽要加-g的原因了.

如果连结器(linker)连结失败,告诉你找不到libg.a,那就是在/usr/lib/的目录底下,少了libg.a.libg.a是特殊的C语言侦错程式库(special debugging-enabled C library).一般在libc的套件内就会提供libg.a;不然的话(新版是这样的),你可能需要拿libc的原始码自己建立了.不过,实际上你应该不需要才对.不管是什麽目的,大部份的情况下,只需将libg.a连结到/usr/lib/libc.a,你就能得到足够的资讯了.

5.2.1.1. 那,能不能把除错资讯给拿掉?
很多的GNU软体在编译连结时,都会设定-g的选项,而这样做会造成执行档过大的问题(通常是静态的).实际上,这并不是一个很热门的想法.

如果程式本身有autoconf,产生了configure命令稿,通常你就可以用./configure CFLAGS=或是./configure CFLAGS=-O2来关掉除错资讯.不然的话,你得检查检查Makefile了.当然啦,假如你用的是ELF,程式便会以动态的方式连结(dynamically linked),不论是否有-g的设定;因此你可以平常心把-g拿掉(strip).

5.2.2. 实用的软体(Available software)
据了解,一般人都使用gdb.你可以从GNU archive sites拿到原始程式;或者是到tsx-11拿可执行档.xxgdb是一个X介面的除错程式(debugger),植基於gdb(也就是说你得先安装好gdb,才能再装xxgdb).xxgdb的原始码可以在ftp://ftp.x.org/contrib/xxgdb-1.08.tar.gz找到.

另外,UPS除错程式已由Rick Sladkey移植成功.UPS可以在X底下活得很好,不像xxgdb那样---仅仅是gdb的X前端介面(X front end).这支除错程式有一大堆优良的特点,and if you spend any time debugging stuff, you probably should check it out.先前编译(precompiled)好的Linux版与修正版(patches)的原始码可以在ftp://sunsite.unc.edu/pub/Linux/devel/debuggers/找到.而最初的原始程式则放在 ftp://ftp.x.org/contrib/ups-2.45.2.tar.Z.

你可能会发现另一个用来除错的工具strace,也是相当的有用.它可以显示出由程序(process)所产生的系统呼叫,而且还拥有其它众多繁复的功能(multiplicity),像是如果你手边没有原始码的话,strace可以帮你找出(figure out)有那些路径(path-names)已编译进执行档(binaries)内; exacerbating race conditions in programs that you suspect contain them;还有,strace可拿来学习程式是怎麽在电脑中执行的.最新的版本(目前是3.0.8)可在找到ftp://ftp.std.com/pub/jrs/.

5.2.3. 背景程式(Background (daemon) programs)
早期典型的常驻程式(daemon programs)是执行fork(),然後终止(terminate)父程序(parent).这样的做法使得除错的时间减短了.

了解(get around)这点的最简单的方法就是替fork()设一个breakpoint.当程式停止时,强迫fork()传回0.

(gdb) list
1 #include <stdio.h>
2
3 main()
4 {
5 if(fork()==0) printf("child\n");
6 else printf("parent\n");
7 }
(gdb) break fork
Breakpoint 1 at 0x80003b8
(gdb) run
Starting program: /home/dan/src/hello/./fork
Breakpoint 1 at 0x400177c4

Breakpoint 1, 0x400177c4 in fork ()
(gdb) return 0
Make selected stack frame return now? (y or n) y
#0 0x80004a8 in main ()
at fork.c:5
5 if(fork()==0) printf("child\n");
(gdb) next
Single stepping until exit from function fork,
which has no line number information.
child
7 }

5.2.4. 核心档案(Core files)
当Linux开机时,通常组态(configuration)会设定成不要产生核心档案.要是你那麽喜欢它们的话,可以用shell的builtin命令使其重新生效:就C-shell相容的shell(如tcsh)而言,会是下面这样:

% limit core unlimited

而类似Bourne shell的shell(sh,bash,zsh,pdksh)则使用下面的语法:
$ ulimit -c unlimited

如果你想要有个多才多艺(versatility)的核心档命名(core file naming)(for example, if you're trying to conduct a post-mortem using a debugger that's buggy itself) ,那麽你可以对你的核心程式(kernel)做一点小小的更动(mod).找一找fs/binfmt_aout.c与fs/binfmt_elf.c档内与下列相符的程式片段(in newer kernels, you'll have to grep around a little in older ones):

memcpy(corefile,"core.",5);
#if 0
memcpy(corefile+5,current->comm,sizeof(current->comm));
#else
corefile[4] = '\0';
#endif

将0换成1.

5.3. 旁敲侧击(Profiling)
Profiling是用来检核一支程式中那些部份(which bits)是最常呼叫或是执行的时间最久的方法.这对程式的最佳化与找出何时时间是浪费掉的而言,是相当好的方式.你必须就你所要的时程资讯(timing information)的目的档案(object files)加上-p来编译,而且如果要让输出的档案(output files)有意义(make sense),你也会需要gprof(来自binutils套件的命令).参阅gprof的manual page,可得知其细节.

11/18/97译


New Page 1

标题： ■ The Linux GCC HOWTO中译版V0.1: 连结(Linking)
姓名 ：Daniel Barlow
Email：dan@detached.demon.co.uk
地址 ：
转摘 ：http://member.netease.com/

返回

6. 连结(Linking)
由於静态(static)与共享(shared)程式库两者间不相容的格式(incompatible binary formats)的差异性(distinction)与动词*link*过量使用(overloading)於指称*编译完成後的事情*与*当编译过的程式使用时(invoke)所发生的事情*这两件事上头,使得这一章节变得复杂了许多.( and, actually, the overloading of the word `load' in a comparable but opposite sense)不过,再复杂也就是这样了,所以阁下不必过於担心.

为了稍微减轻读者的困惑,我们称执行期间(runtime)所发生的事为*动态载入(dynamic loading)*,这一主题会在下一章节中谈到.你也会在别的地方看到我把动态载入描述成*动态连结(dynamic linking)*,不过不会是在这一章节中.换句话说,这一章节所谈的,全部是指发生在编译结束後的连结(linking).

6.1. 共享程式库 vs静态程式库
建立程式的最後一个步骤便是连结;也就是将所有分散的小程式(pieces)组合起来,看看是否遗漏了些什麽.很明显的,有一些事情是很多程式都会想做的---例如,开启档案(open files),接著所有与开档有关的小程式(pieces)就会以程式库的档案型态提供给你的程式.在普通的Linux系统上,这些小程式可以在/lib与/usr/lib/目录底下找到.

当你用的是一静态的程式库时,连结器会找出程式所需的模组(bits),然後实际(physically)将它们拷贝到执行档内.然而,对共享程式库而言,就不是这样了.共享程式库会在执行档内留下一个符号(note),指明*当程式执行时,首先必须载入这个程式库*.很明显的,共享程式库是试图使执行档变得更小;也等同於使用更少的记忆体与磁碟空间.Linux内定的行为是连结共享程式库,只要Linux能找到这些共享程式库的话,就没什麽问题;不然,Linux就会连结静态的了.如果你想要共享程式库的话,检查这些程式库(*.sa for a.out, *.so for ELF)是否住在它们该在的地方,而且是可读取的.

在Linux上,静态程式库会有类似libname.a这样的名称;而共享程式库则称做libname.so.x.y.z,此处的x.y.z是指版本序号的样式.共享程式库通常都会有连结符号指向静态程式库(很重要的)与(on a.out configurations)相关联的.sa档案.标准的程式库会包含共享与静态程式库两种格式.

你可以用ldd (List Dynamic Dependencies)来查出某支程式需要哪些共享程式库.

$ ldd /usr/bin/lynx
libncurses.so.1 => /usr/lib/libncurses.so.1.9.6
libc.so.5 => /lib/libc.so.5.2.18

这是说在我的系统上,WWW浏览器(browser)*lynx*会依赖libc.so.5 (the C library)与libncurses.so.1(终端机萤幕的控制)的存在(presence).若某支程式缺乏独立性(dependencies), ldd就会说`statically linked'或是`statically linked (ELF)'.

6.2. Interrogating libraries (`which library is sin() in?')
nm 程式库名称 应该会列出此程式库名称所参考到的所有符号(symbols).这个指令可以应用在静态与共享程式库上.假设你想知道tcgetattr()是在哪儿定义的:你可以如此做

$ nm libncurses.so.1 |grep tcget
U tcgetattr

*U*说明了*未定义(undefined)*---也就是说ncurses程式库有用到tegetattr(),但是并没有定义它.你也可以这样做,

$ nm libc.so.5 | grep tcget
00010fe8 T __tcgetattr
00010fe8 W tcgetattr
00068718 T tcgetpgrp

*W*说明了*弱势(weak)*,意指符号虽已定义,但可由不同程式库中的另一定义所取代(overridden).而最直接的(straightforward)*正常(normal)*定义(像是tcgetpgrp)是由*T*所标示.

标题所谈的问题,最简明的答案便是libm.(so|a)了.所有定义在<math.h>的函数都保留在maths程式库内;因此,当你用到其中任何一个函数时,都需要以-lm的参数连结此程式库.

6.3. X档案???
ld: Output file requires shared library `libfoo.so.1`

ld与其相类似的命令在搜寻档案的策略(strategy)上,会依据版本的差异而有所不同,但是唯一一个你可以合理假设的内定目录便是/usr/lib了.如果你希望身处它处的程式库也列入搜寻的行列中,那麽你就必须以-L选项告知gcc或是ld.

要是你发现一点效果也没有,就赶紧察看看那档案是不是还乖乖的躺在原地.就a.out而言,以-lfoo参数来连结,会驱使ld去寻找libfoo.sa (shared stubs);如果没有成功,就会换成寻找libfoo.a (static).就ELF而言, ld会先找libfoo.so,然後是libfoo.a.libfoo.so通常是一个符号连结,连结至libfoo.so.x.

6.4. 建立你自己的程式库(Building your own libraries)
6.4.1. 版本控制(Version control)
与其它任何的程式一样,程式库也有修正不完的bugs的问题存在.它们也可能产生出一些新的特点,更改目前存在的模组的功效,或是将旧的移除掉.这对正在使用它们的程式而言,可能会是一个大问题.如果有一支程式是根据那些旧的特点来执行的话,那怎麽办?

所以,我们引进(introduce)了程式库版本编号(versioning)的观念.我们将程式库*次要(minor)*与*主要(major)*的变更分门别类(categorize),同时我们规定*次要*的变更是不允许用到这程式库的旧程式发生中断的现象(break).你可以从程式库的档名分辨出它的版本(实际上,严格来讲,对ELF而言仅仅是一场天大的谎言;继续读将下去,便可明白为什麽了): libfoo.so.1.2的主要版本是1,次要版本是2.次要版本的编号可能真有其事,也可能什麽都没有---libc在这一点上用了*修正程度(patch-level)*的观念,而给出了名称像libc.so.5.2.18这样的程式库.次要版本的编号内若是放一些字母,底线,或是任何可以列印的ASCII字元,也是很合理的说.

ELF与a.out格式最主要的差别之一就是在建立共享程式库上.我们先看ELF,因为它比较简单一些.

6.4.2. ELF? 它到底是什麽东东ㄋㄟ?
ELF (Executable and Linking Format) 最初是由USL(UNIX System Laboratories)所发展的二进位格式(binary format),而目前正应用於Solaris与System V Release 4上面.由於ELF所增涨的弹性(flexibility)远远超过Linux过去所用的a.out格式,因此GCC与C程式库的发展人士於去年(1995)决定改用ELF为Linux标准的二进位格式.

6.4.2.1. 怎麽又来了?
这一节是来自於'/news-archives/comp.sys.sun.misc'的文件.

ELF("Executable Linking Format")是於SVR4所引进的新式改良目的档格式.ELF比起COFF可是多出了不少的功能.以ELF而言,它*是*可由使用者自行延伸的(user-extensible).ELF视一目的档为节区(sections)如串列般的组合,而且此串列可为任意的(arbitrarily)长度(而不是一固定大小的阵列).这些节区与COFF的不一样,并不需要固定在某个地方,也不需要以某种顺序排列.如果users希望能补捉到新的资料,他们便可以加入新的节区到目的档内.ELF也有一个更强而有力的除错格式,称为DWARF(Debugging With Attribute Record Format)-目前Linux并不完全支援.DWARF DIEs(Debugging Information Entries)的连结串列会在ELF内形成.debug的节区.DWARF DIEs的每一个.debug节区并非一些少量的(small)且固定大小的(fixed-size)资讯记录(information records)的集合(collection),而是一任意长度的串列,拥有复杂的属性,而且程式的资料会以□围为根据的树状资料结构(scope-based tree)写出来.DIEs所能补捉到的大量资讯是COFF的.debug节区无法望其项背的.(像是C++的继承图).

ELF档案是从SVR4(Solaris 2.0 ?)ELF存取程式库(ELF access library)内存取的.此程式库可提供一简便快速的介面予ELF.使用ELF存取程式库最主要的恩惠之一便是,你不再需要去察看一个ELF档的qua了.就UNIX的档案而言,它是以Elf*的型式来存取;呼叫elf_open()之後,从此时开始,你只需呼叫elf_foobar()来处理档案的某一部份(components)即可,并不需要把档案实际在磁碟上的image搞得一团乱.

ELF的优缺点与升级至ELF等级所需经历的种种痛苦(contortions),已在ELF-HOWTO内论及;我并不打算在这儿涂浆糊.ELF HOWTO应该与这份文件相同之处有同样的主题才是.

6.4.2.2. ELF共享程式库
若想建立libfoo.so成为共享程式库,基本的步骤会像下面这样:

$ gcc -fPIC -c *.c
$ gcc -shared -Wl,-soname,libfoo.so.1 -o libfoo.so.1.0 *.o
$ ln -s libfoo.so.1.0 libfoo.so.1
$ ln -s libfoo.so.1 libfoo.so
$ LD_LIBRARY_PATH=`pwd`:$LD_LIBRARY_PATH ; export LD_LIBRARY_PATH

这会产生一个名为libfoo.so.1.0的共享程式库,以及给予ld适当的连结(libfoo.so)还有使得动态载入程式(dynamic loader)能找到它(libfoo.so.1).为了进行测试,我们将目前的目录加到LD_LIBRARY_PATH里.

当你津津乐道於程式库制做成功之时, 别忘了把它移到如/usr/local/lib的目录底下,并且重新建立正确的连结路径. libfoo.so.1与libfoo.so.1.0的连结会由ldconfig依日期不断的更新;就大部份的系统来说,ldconfig会在开机程序中执行. libfoo.so的连结必须由手动方式更新.如果你对程式库所有组成份子(如标头档等)的升级,总是抱持著一丝不□的态度(scrupulous),那麽最简单的方法就是让libfoo.so -> libfoo.so.1;如此一来,ldconfig便会替你同时保留最新的连结.要是你没有这麽做,你自行设定的东东就会在数日後造成千奇百怪的花样出现.到时候,可别说我没提醒你啊!

$ su
# cp libfoo.so.1.0 /usr/local/lib
# /sbin/ldconfig
# ( cd /usr/local/lib ; ln -s libfoo.so.1 libfoo.so )

6.4.2.3. 版本编号, soname与符号连结
每一个程式库都有一个soname.当连结器发现它正在搜寻的程式库中有这样的一个名称,连结器便会将soname箝入(embed)连结中的二进位档内, 而不是它正在运作的实际的档名.在程式执行期间,动态载入程式会搜寻拥有soname这样的档名的档案,而不是程式库的档名.因此,一个名为libfoo.so的程式库,就可以有一个libbar.so的soname了.而且所有连结到libbar.so的程式,当程式开始执行时,会寻找的便是libbar.so了.

这听起来好像一点意义也没有,但是这一点,对於了解数个不同版本的同一个程式库是如何在单一系统上共存(coexist)的原因,却是关键之钥.Linux程式库标准的命名方式,比如说是libfoo.so.1.2,而且给这个程式库一个libfoo.so.1的soname.如果此程式库是加到标准程式库的目录底下(e.g. /usr/lib),ldconfig会建立符号连结libfoo.so.1 -> libfoo.so.1.2,使其正确的image能於执行期间(run-time)找到.你也需要连结libfoo.so -> libfoo.so.1,使ld能於连结期间(link-time)找到正确的soname.

所以罗,当你修正程式库内的bugs,或是添加了新的函数进去(任何不会对现存的程式造成不利的(adversely)影响的改变),你会重建此程式库,保留原本已有的soname,然後更改程式库档名.而当你对程式库的变更会使得现有的程式(binaries)中断(break),那麽你只需增加soname中的编号---此例中,称新版本为libfoo.so.2.0,而soname变成libfoo.so.2.紧接著,再将libfoo.so的连结转向新的版本;至此,世界又再度恢复了和平!

其实你不须要以此种方式来替程式库命名,不过这的确是个好的传统(convention).ELF所赋予你在程式库命名上的弹性,会使得人气喘呼呼的搞不清楚状况;有这样的弹性在,也并不表示你就得去用它.

ELF总结:假设经由你睿智的观察发现有个惯例说:程式库主要的升级会破坏(break)相容性(compatibility);而次要的升级则可能不会;那麽以下面的方式来连结,所有的一切就都会相安无事了.

gcc -shared -Wl,-soname,libfoo.so.major -o libfoo.so.major.minor

6.4.3. a.out---旧旧的格式~
建立共享程式库的便利性(ease)是升级至ELF的主要原因之一.那也是说,a.out可能还是有用处在的.上ftp站去抓ftp://tsx-11.mit.edu/pub/linux/packages/GCC/src/tools-2.17.tar.gz;解压缩後你会发现有20页的文件可以慢慢的读哩.我很不喜欢自己党派的偏见(partisan)表现得那麽的淋璃尽致,可是从上下文间,应该也可以很清楚的嗅出我从来不拿石头砸自己的脚的脾气吧!:-)

6.4.3.1. ZMAGIC vs QMAGIC
QMAGIC是一种类似旧格式的a.out(亦称为ZMAGIC)的可执行档格式,这种格式会使得第一个分页无法map.当0-4096的□围内没有mapping存在时,则可允许NULL dereference trapping更加的容易.所产生的边界效应(side effect)是你的执行档会比较小(大约是1K左右).

只有即将作废的连结器有支援ZMAGIC,一半已埋入棺材的连结器有支援这两种格式;而目前的版本仅支援QMAGIC而已.事实上,这并没有多大的影响,那是因为目前的核心两种格式都能执行.

*file*命令应该可以确认程式是不是QMAGIC的格式的.

6.4.3.2. 档案配置(File Placement)
一a.out(DLL)的共享程式库包含两个真实的档案与一个符号连结.就*foo*这个用於整份文件做为□例的程式库而言,这些档案会是libfoo.sa与libfoo.so.1.2;符号连结会是libfoo.so.1,而且会指向libfoo.so.1.2.这些是做什麽用的?

在编译时, ld会寻找libfoo.sa.这是程式库的*stub*档案,而且含有所有执行期间连结所需的exported的资料与指向函数的指标.

执行期间,动态载入程式会寻找libfoo.so.1.这仅仅是一个符号连结,而不是真实的档案,故程式库可更新成较新的且已修正错误的版本,而不会损毁任何此时正在使用此程式库的应用程式.在新版---比如说libfoo.so.1.3---已完整呈现时,ldconfig会以一极微小的操作,将连结指向新的版本,使得任何原本使用旧版的程式不会感到丝毫的不悦.

DLL程式库(我知道这是无谓的反覆(tautology)---所以对我提出告诉吧!)通常会比它们的静态副本(static counterparts)要来得大多了.它们是以*洞(holes)*的形式来保留空间以便日後的扩充.这种*洞*可以不占用任何的磁碟空间.一个简单的cp呼叫,或是使用makehole程式,就可以达到这样效果(achieve).因为它们的位址是固定在同一位置上,所以在建立程式库後,你可以把它们拿掉.千万不要试著夺走ELF的程式库.

6.4.3.3. ``libc-lite''?
libc-lite是轻量级(light-weight)的libc版本.可用来存放在磁碟片上,与替大部份低微的(menial)UNIX任务收尾(suffice).它没有包含curses, dbm, termcap等等的程式码.如果你的/lib/libc.so.4是连结到一个lite的libc,那麽建议你以完整的版本取代它.


New Page 1

标题： ■ The Linux GCC HOWTO中译版V0.1: 动态载入(Dynamic Loading)
姓名 ：Daniel Barlow
Email：dan@detached.demon.co.uk
地址 ：
转摘 ：http://member.netease.com/

返回

7. 动态载入(Dynamic Loading)
这一章节目前是简短了一点;当我掠尽ELF HOWTO时,就是这部份再度扩展的时候了.

7.1. 基本概念
Linux有共享程式库,如果之前你已坐著读完上一章节,想必现在一听到像这样的说词,便会立刻感到头昏.有一些照惯例而言是在连结时期便该完成的工作(matching-names-to-places),必须延迟到载入时期(load-time)才能完成.

7.2. 错误讯息(Error messages)
把你连结的错误寄给我!我不会做任何的事,不过我可以把它们写起来**

can't load library: /lib/libxxx.so, Incompatible version
(a. out only) 这是指你没有xxx程式库的正确的主要版本.可别以为随随便便弄个连结到你目前拥有的版本就可以了,如果幸运的话, 就只会造成你的程式分页错误而已.去抓新的版本.ELF类似的情况会造成像下面这样的讯息:

ftp: can't load library 'libreadline.so.2'

warning using incompatible library version xxx
(a. out only)你的程式库的次要版本比起这支程式用来编译的还要旧.程式依然可以执行.只是可能啦!我想,升个级应该没什麽伤害吧!

7.3. 控制动态载入器的运作
有一组环境变数会让动态载入器有所反应.大部份的环境变数对ldd的用途要比起对一般users的还要来得更多.而且可以很方便的设定成由ldd配合各种参数来执行.这些变数包括

LD_BIND_NOW --- 正常来讲,函数在呼叫之前是不会让程式寻找(looked up)的.设定这个旗号会使得程式库一载入,所有的寻找(lookups)便会发生,同时也造成起始的时间(startup time)较慢.当你想测试程式,确定所有的连结都没有问题时,这项旗号就变得很有用.
LD_PRELOAD 可以设定一个档案,使其具有*覆盖*(overriding)函数定义的能力.例如,如果你要测试记忆体分配的方略(strategies),而且还想置换*malloc*,那麽你可以写好准备替换的副程式(routine),并把它编译成mallolc.,然後:
$ LD_PRELOAD=malloc.o; export LD_PRELOAD
$ some_test_program

LD_ELF_PRELOAD 与 LD_AOUT_PRELOAD 很类似,但是仅适用於正确的二进位型态.如果设定了 LD_something_PRELOAD 与 LD_PRELOAD ,比较明确的那一个会被用到.
LD_LIBRARY_PATH 是一连串以分号隔离的目录名称,用来搜寻共享程式库.对ld而言,并没有任何的影响;这项只有在执行期间才有影响.另外,对执行setuid与setgid的程式而言,这一项是无效的.而LD_ELF_LIBRARY_PATH与LD_AOUT_LIBRARY_PATH这两种旗号可根据各别的二进位型式分别导向不同的搜寻路径.一般正常的运作下,不应该会用到LD_LIBRARY_PATH;把需要搜寻的目录加到/etc/ld.so.conf/里;然後重新执行ldconfig.
LD_NOWARN 仅适用於a.out.一旦设定了这一项(LD_NOWARN=true; export LD_NOWARN),它会告诉载入器必须处理fatal-warnings(像是次要版本不相容等)的警告讯息.
LD_WARN 仅适用於ELF.设定这一项时,它会将通常是致命讯息的"Can*t find library"转换成警告讯息.对正常的操作而言,这并没有多大的用处,可是对ldd就很重要了.
LD_TRACE_LOADED_OBJECTS 仅适用於ELF.而且会使得程式以为它们是由ldd所执行的:
$ LD_TRACE_LOADED_OBJECTS=true /usr/bin/lynx
libncurses.so.1 => /usr/lib/libncurses.so.1.9.6
libc.so.5 => /lib/libc.so.5.2.18

7.4. 以动态载入撰写程式
如果你很熟悉Solaris 2.x所支援的动态载入的工作的话,你会发现Linux在这点上与其非常的相近.这一部份在H.J.Lu的ELF程式设计文件内与dlopen(3)的manual page(可以在ld.so的套件上找到)上有广泛的含盖(cover).这里有个不错的简单□例:以-ldl连结.

#include <dlfcn.h>
#include <stdio.h>

main()
{
void *libc;
void (*printf_call)();

if(libc=dlopen("/lib/libc.so.5",RTLD_LAZY))
{
printf_call=dlsym(libc,"printf");
(*printf_call)("hello, world\n");
}

}


New Page 1

标题： ■ The Linux GCC HOWTO中译版V0.1: 与发展人士联络
姓名 ：Daniel Barlow
Email：dan@detached.demon.co.uk
地址 ：
转摘 ：http://member.netease.com/

返回

8. 与发展人士联络
8.1. Bug报表
把问题写下来.这是针对Linux的,亦或是gcc在其它系统上所发生的问题.与kernel的版本相关吗?或者是程式库的版本?如果改用静态方式连结,问题是不是就消失了?你可以节录一小段程式来展示这只bug吗?

当你做了这些事情之後,你将会知道程式内的bugs是什麽.就gcc而言,bug报表程序是以info档来说明的.如果是ld.so或是C,maths程式库,将email寄到linux-gcc@vger.rutgers.edu.如果可能的话,包含一支自己自足的小程式以展示这个bug,而且附上说明,描述你想要让这支程式做些什麽与实际上它又做了些什麽.

8.2. 协助发展
如果你想要帮忙发展gcc或是C程式库,第一件事便是加入linux-gcc@vger.rutgers.edu邮件表列(mailing list).如果你只是想看看mailing list在讨论些什麽,这里有一个表列的archives,位於http://homer.ncm.com/linux-gcc/.接下来的事,就看你想做什麽了.


New Page 1

标题： ■ The Linux GCC HOWTO中译版V0.1: 结语
姓名 ：Daniel Barlow
Email：dan@detached.demon.co.uk
地址 ：
转摘 ：http://member.netease.com/

返回

9. 结语
9.1. 名人榜

Only presidents, editors, and people with tapeworms have the right to use the editorial ``we''.
(Mark Twain)

这份HOWTO文件几乎完全根植於Mitchum Dsouza的GCC-FAQ; 文件内大部份的资讯(not to mention a reasonable amount of the text)是直接来自於GCC-FAQ的. 这份HOWTO文件用到的第一人称代名词,可视为我们两人其中一个;通常,要是有人说"我还没有测试过这些;如果它烧了(toast)你的硬碟/系统/配偶,可别怪我!",那这样的话适用於我俩身上.

对这份文件有贡献的名人雅士如下所列(以名字的ASCII码的顺序): Andrew Tefft, Axel Boldt, Bill Metzenthen, Bruce Evans, Bruno Haible, Daniel Barlow, Daniel Quinlan, David Engel, Dirk Hohndel, Eric Youngdale, Fergus Henderson, H.J. Lu, Jens Schweikhardt, Kai Petzke, Michael Meissner, Mitchum DSouza, Olaf Flebbe, Paul Gortmaker, Rik Faith, Steven S. Dick, Tuomas J Lukka, 当然还有Linux Torvalds,没有了他,这整个运动就会变得一点意义也没有了,所以不可能让他孤单的.:-)

请不要觉得有任何的冒犯之处,如果您的名字没有出现在这儿,而您对这份文件(HOWTO或是FAQ)又曾经有过贡献的话,请email给我,我会改正过来的.

9.2. 翻译
到目前为止,这份文件还没有已知的翻译版出现.如果你希望生一个出来,请尽管去做,不过一定得告诉我相关的事宜.我讲的语言会是你想要翻的语言,那机率(很遗憾)只有好几百分之一,不过还是先把这摆一旁吧!不管是什麽方式,我都会很乐意帮忙的.

9.3. 欢迎任何的回馈(Feedback)
寄信给我dan@detached.demon.co.uk.我的PGP public key (ID 5F263625) 可在我的烘培鸡web pages上使用, 如果你觉得事情有必要保密的话.

9.4. 合法的行迳规定
All trademarks used in this document are acknowledged as being owned by their respective owners.

This document is copyright (C) 1996 Daniel Barlow <dan@detached.demon.co.uk> It may be reproduced and distributed in whole or in part, in any medium physical or electronic, as long as this copyright notice is retained on all copies. Commercial redistribution is allowed and encouraged; however, the author would like to be notified of any such distributions.

All translations, derivative works, or aggregate works incorporating any Linux HOWTO documents must be covered under this copyright notice. That is, you may not produce a derivative work from a HOWTO and impose additional restrictions on its distribution. Exceptions to these rules may be granted under certain conditions; please contact the Linux HOWTO coordinator at the address given below.

In short, we wish to promote dissemination of this information through as many channels as possible. However, we do wish to retain copyright on the HOWTO documents, and would like to be notified of any plans to redistribute the HOWTOs.

If you have questions, please contact Greg Hankins, the Linux HOWTO coordinator, at gregh@sunsite.unc.edu via email.


New Page 1

标题： ■ The Linux GCC HOWTO中译版V0.1: 索引
姓名 ：Daniel Barlow
Email：dan@detached.demon.co.uk
地址 ：
转摘 ：http://member.netease.com/

返回

10. 索引
以非文数字的(non-alphabetical)字元起始的入口处(entries),是以ASCII码的顺序排列的.

-fwritable-strings 39 56
/lib/cpp 16
a.out 1
ar 10
as 8
<asm/*.h> 19
atoi() 40
atol() 41
binaries too big 63 65 77
chewing gum 3
cos() 68
debugging 59
dlopen() 82
dlsym() 83
documentation 4
EINTR 52
elf 0 71
execl() 57
fcntl 47
FD_CLR 44
FD_ISSET 45
FD_SET 43
FD_ZERO 46
file 2
<float.h> 20
gcc 6
gcc -fomit-frame-pointer 61
gcc -g 60
gcc -v 14
gcc, bugs 15 28 29 84
gcc, flags 13 25 26
gdb 64
header files 17
interrupted system calls 51
ld 9
LD_* environment variables 80
ldd 81
libc 7
libg.a 62
libgcc 79
<limits.h> 21
lint 58
<linux/*.h> 18
manual pages 5
<math.h> 70
maths 69
mktemp() 55
optimisation 27
QMAGIC 76
segmentation fault 30 54
segmentation fault, in GCC 33
select() 50
SIGBUS 34
SIGEMT 35
SIGIOT 36
SIGSEGV 31 53
SIGSEGV, in gcc 32
SIGSYS 38
SIGTRAP 37
sin() 67
soname 73
sprintf() 42
statically linked binaries, unexpected 66 78
<stdarg.h> 23
<stddef.h> 24
strings 11
<sys/time.h> 48
<unistd.h> 49
<varargs.h> 22
version numbers 12 74
weird things 72
ZMAGIC 75


New Page 1

标题： ■ Glibc 2 HOWTO 中文版 : 简介
姓名 ：Eric Green,
Email：thrytis@imaxx.net
地址 ：
转摘 ：http://member.netease.com/

返回

1. 简介
1.1. 关於 glibc 2
Glibc 2 是最新版的 GNU C library。它目前可以未经修改就在 GNU Hurd， Linux i386， m68k， 以及 alpha 系统上执行，而移植到 Linux PowerPC， MIPS， Sparc 等系统正在发展中。未来将加入对其它架构及作业系统的支援。

在 Linux 上 glibc 2 是主要版本为 6 的 libc，也就是 Linux libc 5 的後继者。 Linux libc 的发展人员想以此逐渐取代 libc 5。它目前是实验性的，但是对那些想试试看或是想提供帮助的而言，则是足够稳定的了。假如你所使用的程式有支援的话，最新版本的 glibc 2 则已是非常稳定的了。 Glibc 2.1 版 (在不久的将来) 将能够当作主流使用。

Glibc 2 有三个选择性的 add-on：

Crypt
UFC-crypt package。 由於出口限制所以要分离出来。

LinuxThreads
Posix 1003.1c ``pthread'' 介面的实作。

Locale data
包含制造使用 glibc 的 internationalization 功能所需 locale data 档案的资料。

强烈建议安装 Cryt 与 LinuxThreads 这两个 add-on，如果不安装的话，有可能会与其它系统上的函式库造成不相容的情形。 (假如你不想使用者两个 add-on 的话，那你必须在执行 configure 时加上 --disable-sanity-checks 的选项)

1.2. 关於这份文件
这份文件含盖在 Linux 系统上安装 glib 2 适用对象是那些在 intel-based 的机器上使用著 libc 5 的使用者。但是对於其它系统以及其它不同的 library (如 glibc 1) 的使用者，只要将这份文件中出现的档名以及系统架构名称适当的代换，应该也可得到些帮助。

这份 HOWTO 最新版本的拷贝可在 Linux Documentation Project 或是 http://www.imaxx.net/~thrytis/glibc/Glibc2-HOWTO.html 找到。

1.3. 这份文件的最新改变
1.2 与 1.3 版的差别：

加入建议使用 add-ons 的讯息。
加入关於 glibc-linux 邮递列表的资讯。
更新关於 RedHat 以 glibc 为底的 distribution 的讯息。
更新 Debian glibc packages 的位置。
加入 texinfo 版本相依。

1.1 与 1.2 版的差别：

加入一些关於提出臭虫报告的资讯，以及更新臭虫报告的 email 与 gnats 位址 (由 Andreas Jaeger 所更动)。
更新贡献一节。


New Page 1

标题： ■ Glibc 2 HOWTO 中文版 : 选择你的安装方式
姓名 ：Eric Green,
Email：thrytis@imaxx.net
地址 ：
转摘 ：http://member.netease.com/

返回

2. 选择你的安装方式
有许多种方式安装 glibc 你可以安装成一个测试的函式库将目前使用的函式库当作是内定的然後在 compile 程式的时後用不同的选项来试用新的函式库用这种安装方式 以後可以轻易的移除 glibc (虽然用 glibc 连结的程式在移除 glibc 後都将不能使用) 另外 用这种方式安装 你必须从 source 重新 compile 并没有 binary distribution 可以安装成测试的函式库这样的安装请参照 安装成测试用的 library

这份文件中所说的另一种方式则是将 glibc 安装成主要 library。所有新编译的程式都将会使用 glibc，但是你也可以在编译时用不同的选项而将程式连结到旧的 library。你可以直接安装已经编译好的版本，也可以自己编译 library。假如想更改最佳化或是组态选项的话，那你必需取得原始码并且自己编译，这个安装的过程请参照 安装成主要的 C library

Frodo Looijaard 描述了另一种 glibc 的安装方式。他的方法是将 glibc 安装成次要的 library，然後设定交叉编译器 (cross compiler) 来使用 glibc。这个方式比起这份文件中的测试安装要复杂的多，但是比较容易连结到 glibc。这个方法在他的 Installing glibc-2 on Linux 文件中说明。

假如你现在使用的是 Debian 1.3，但是不想为了 glibc 而升级到不稳定的版本，那麽 Debian libc5 to libc6 Mini-HOWTO 会告诉你如何使用 Debian 的 package 来升级。

假如你要把 glibc 2 安装到一重要的系统上，那你就不应该将它安装成主要的 library。 使用测试的安装，或是在备用系统上试试看。即使没有臭□，有些程式在编译之前仍然需要某些修改，原因在於某些函式原型与型态上的改变。


New Page 1

标题： ■ Glibc 2 HOWTO 中文版 : 取得 library.
姓名 ：Eric Green,
Email：thrytis@imaxx.net
地址 ：
转摘 ：http://member.netease.com/

返回

3. 取得 library.
Glibc 2 包含 glibc package 以及数个 add-on： LinuxThreads、 Locale 与 Crypt，原始码在

ftp://prep.ai.mit.edu/pub/gnu/glibc-2.0.5.tar.gz
ftp://prep.ai.mit.edu/pub/gnu/glibc-linuxthreads-2.0.5.tar.gz
ftp://prep.ai.mit.edu/pub/gnu/glibc-localedata-2.0.5.tar.gz
ftp://prep.ai.mit.edu/pub/gnu/glibc-crypt-2.0.5.tar.gz

2.0.5c 版要用一额外的 patch，你可以在 ftp://prep.ai.mit.edu/pub/gnu/glibc-2.0.5-2.0.5c.diff.gz 找到。

你须要大约 150MB 的磁碟空间来作完全的编译与安装，由核心函式库的基本安装大约要 50MB。

2.0.5c 没有 binary package， 2.0.4 的 binary package 只有 i386 及 m68k 的版本，而 2.0.1 for alpha 则可以在以下地方找到：

Intel x86:
ftp://prep.ai.mit.edu/pub/gnu/glibc-2.0.4.bin.i386.tar.gz
ftp://prep.ai.mit.edu/pub/gnu/glibc-crypt-2.0.4.bin.i386.tar.gz
Alpha:
ftp://prep.ai.mit.edu/pub/gnu/glibc-2.0.1.bin.alpha-linux.tar.gz
ftp://prep.ai.mit.edu/pub/gnu/glibc-crypt-2.0.1.bin.alpha-linux.tar.gz
m68k:
ftp://prep.ai.mit.edu/pub/gnu/glibc-2.0.4-m68k-linux.bin.tar.gz
ftp://prep.ai.mit.edu/pub/gnu/glibc-crypt-2.0.4-m68k-linux.bin.tar.gz
由於 cypt 这个 add-on 有出口限制，非美国使用者请到 ftp://ftp.ifi.uio.no/pub/gnu 取得。

如果你用的是 RedHat distribution，那你可以从 ftp://ftp.redhat.com/pub/redhat/ 取得 glibc2 的 rpm。在 RedHat distribution 5.0 中， glibc 2 是主要的 c library。

如果你用的是 Debian distribution，那你可以从 ftp://ftp.debian.org/debian/dists/unstable/main/ 取得 glibc2 的 package。档名是 libc6。 Glibc 2 目前是 Debian 测试版的基本 package，等到 Debian 2.0 出来之後 将会是主要的 c library。


New Page 1

标题： ■ Glibc 2 HOWTO 中文版 : 安装成测试用的 library
姓名 ：Eric Green,
Email：thrytis@imaxx.net
地址 ：
转摘 ：http://member.netease.com/

返回

4. 安装成测试用的 library
这一节的内容是关於如何将 glibc 2 安装成测试用的 library。所有编译的程式都连结到你目前的 library，除非你给了某些额外的猜参数才会连结到新的 library。由於路径被编译到某些档案中，你也许需要由原始码来安装这 library。

4.1. 编译与安装
4.1.1. 需求

约 150 MB 的磁碟空间
GNU make 3.75
gcc >= 2.7.2 (最好是 2.7.2.1)
binutils 2.8.1 (假如是 alpha 你还需要 snapshot)
bash 2.0
autoconf 2.12 (假如你更动了 configure.in)
texinfo 3.11

在一台安装有 64MB 记忆体 i586@133 的机器上，编译完整的 library (包括 add-on) 大约须要 3 小时。而在 i686@200 则须约一个半小时。

4.1.2. 解开原始码
你必需由 archive 中取出原始码。如此才能编译它，最好的方式如下：

tar xzf glibc-2.0.5.tar.gz
cd glibc-2.0.5
cat ../glibc-2.0.5-2.0.5c.diff.gz | gzip -d | patch -p0
tar xzf ../glibc-linuxthreads-2.0.5.tar.gz
tar xzf ../glibc-crypt-2.0.5.tar.gz
tar xzf ../glibc-localedata-2.0.5.tar.gz

这会将 linuxthreads、 crypt 与 localedata 等目录放至 glibc-2.0.5 的目录底下，如此 configure 才可以找到这些 add-ons。

4.1.3. 设定组态
在 glibc-2.0.5 的目录底下，建立一个新的目录 compile，并且 cd 到 compile 底下，所也的工作都会在这个目录中完成，这会简化後续的清除工作。 (发展者似乎并未让 'make clean' 作得很好)

mkdir compile
cd compile

执行 ../configure。要使用 add-on，你必需用 --enable-add-ons 指定，例如说 --enable-add-ons=linuxthreads,crypt,localedata。

你也必需指定要安装的目录， /usr/i486-linuxglibc2 是个不错的选择，这样的 configure 命令如下：

../configure --enable-add-ons=linuxthreads,crypt,localedata --prefix=/usr/i486-linuxglibc2

4.1.4. 编译与安装
要编译与验证，执行

make
make check

假如 'make check' 成功了，安装 library：
make install

4.2. 更新 dynamic loader

建立连结，从 ld.so 到 /lib/ld-linux.so.2：
ln -s /usr/i486-linuxglibc2/lib/ld-linux.so.2 /lib/ld-linux.so.2

当一个档案连结时，这个 library 是唯一一个位置固定的。当稳定的版本出现的时後，在 /lib 使用连结也会使得将 glibc 升级为主要 library 时更为轻松。
修改 /etc/ld.so.conf。你需要增加新的 library 所在的路径到档案的最後，这路径应该是 <prefix>/lib。假如就以上的选择就应该是 /usr/i486-linuxglibc2/lib。在你修改了 /etc/ld.so.conf 之後，执行：
ldconfig -v

4.3. Configuring for gcc.
安装的最後一步是更新 /usr/lib/gcc-lib 以使 gcc 知道如何使用新的 library。首先，你须要复制目前的组态，要知道目前的组态 使用 gcc 的 -v 选项：

% gcc -v
Reading specs from /usr/lib/gcc-lib/i486-unknown-linux/2.7.2.2/specs
gcc version 2.7.2.2

这里， i486-unknown-linux 是目前所用的系统， 2.7.2.2 则是目前版本。你需要将 /usr/lib/gcc-lib/<system> 复制到新的测试系统目录：
cd /usr/lib/gcc-lib/
cp -r i486-unknown-linux i486-linuxglibc2

到你的新系统目录以及版本目录下：
cd /usr/lib/gcc-lib/i486-linuxglibc2/2.7.2.2

修改目录下的 specs。在这档案，将 /lib/ld-linux.so.1 换成 /lib/ld-linux.so.2，你也必需要移去档案中所有的 %{...:-lgmon} 表示式，因为 glibc 不使用 gmon 函式库来做 profile。你可以在 Specs 档□例 找到一个□例。

4.4. 更新标头档 links
你需要在你的 include 目录下建立连结到其它的 include 目录：

cd /usr/i486-linuxglibc2/include
ln -s /usr/src/linux/include/linux
ln -s /usr/src/linux/include/asm
ln -s /usr/X11R6/include/X11

也许你有其它的 library，例如说 ncurse，而这些 library 会需要它们自己的标头档，你应该从 /usr/include 复制或连结这些档案。 (有些 library 需要重新用 glibc2 来 compile，在这种情形下，只要编译并且 install 到 /usr/i486-linuxglibc2)

4.5. 测试你的安装
要测试安装是否成功，建立一档案 glibc.c 如下：

#include <stdio.h>

main()
{
printf("hello world!\n");
}

用 ``-b <base install directory> -nostdinc -I<install directory>/include -I/usr/lib/gcc-lib/<new system dir>/<gcc version>/include'' 的选项编译：
% gcc -b i486-linuxglibc2 -nostdinc -I/usr/i486-linuxglibc2/include -I/usr/lib/gcc-lib/i486-linuxglibc2/2.7.2.2/include glibc.c -o glibc

使用 ldd 确定程式是用 glibc2 连结，而非旧有的 libc：
% ldd glibc
libc.so.6 => /usr/i486-linuxglibc2/lib/libc-2.0.5.so (0x4000d000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

如果通过编译，连结也确定，并且执行时也产生 ``hello world!'' 的输出，那麽安装就成功了。


New Page 1

标题： ■ Glibc 2 HOWTO 中文版: 安装成主要 library
姓名 ：Eric Green,
Email：thrytis@imaxx.net
地址 ：
转摘 ：http://member.netease.com/

返回

5. 安装成主要 library
这一节的内容是关於将 glibc2 安装成你的主要 c library。任何你编译的新程式都将会连结到这一个 library，除非你用了特殊的编译选项来连结到其它的版本。

假如你是用 RedHat 或 Debian 并且已下载相关的 rpm 或 deb 档，请参阅 RedHat 或 Debian 的安装说明，你可以直接跳过这一节。

5.1. 由原始码编译 library
这一节解释如何由原始码编译 glibc 2 与 add-on。如果你想要改变最佳化与组态选项或使用额外的 package，那你就必需编译 library。

5.1.1. 需求

约 150 MB 的磁碟空间
GNU make 3.75
gcc >= 2.7.2 (最好是 2.7.2.1)
binutils 2.8.1 (假如是 alpha 你需要 snapshot)
bash 2.0
autoconf 2.12 (假如你更动了 configure.in)
texinfo 3.11

在一安装有 64MB 记忆体的 i586@133 机器上，编译完整的 library 与 add-on 大约需要三个小时。而在 i686@200 的机器上则约需要一个半小时。

5.1.2. 解开原始码
你需要从 archive 中解出原始码才能编译它，最好的方式是：

tar xzf glibc-2.0.5.tar.gz
cd glibc-2.0.5
cat ../glibc-2.0.5-2.0.5c.diff.gz | gzip -d | patch -p0
tar xzf ../glibc-linuxthreads-2.0.5.tar.gz
tar xzf ../glibc-crypt-2.0.5.tar.gz
tar xzf ../glibc-localedata-2.0.5.tar.gz

这将会把 linuxthreads、 crypt 与 localedata 等目录放到 glibc-2.0.5 目录下，如此 configure 才能找到这些 add-on。

5.1.3. 设定组态
在 glibc-2.0.5 的目录底下，建立一个新的目录 compile，并且 cd 到 compile 底下，所也的工作都会在这个目录中完成，这会简化後续的清除工作。 (发展者似乎并未让 'make clean' 作得很好)

mkdir compile
cd compile

执行 ../configure。要使用 add-on 你必需用 --enable-add-ons 来指定，例如 --enable-add-ons=linuxthreads,crypt,localedata。也许你也会想要指定安装的目录，要符合 linux 标准架构，指定为 --prefix=/usr。 (当在 linux 系统上 prefix 被设为 /usr， configure 知道要调整其它的路径，好将 libc.so 以及其它重要的 library 放到 /lib) 完整的 configure 命令如下：

../configure --enable-add-ons=linuxthreads,crypt,localedata --prefix=/usr

5.1.4. 编译
要编译与验证，执行：

make
make check

5.2. 准备安装
无论是由原始码或是 binary，你现在必需移动某些档案来迎接新的 library。任何新编译的程式会被连结到 glibc，但是旧有静态连结的程式仍然倚靠著 libc 5，所以你不能只是覆盖掉旧有的版本。

建立一个新的目录来放置旧档案：
mkdir -p /usr/i486-linuxlibc5/lib

旧的标头档必需从 /usr/include 移开：
mv /usr/include /usr/i486-linuxlibc5/include

建立一个新的 include 目录，并且设定到其它 include 目录的连结：
mkdir /usr/include

ln -s /usr/src/linux/include/linux /usr/include/linux
ln -s /usr/src/linux/include/asm /usr/include/asm
ln -s /usr/X11R6/include/X11 /usr/include/X11
ln -s /usr/lib/g++-include /usr/include/g++

这些连结须要视你的系统而稍作调整。最少在 Slackware 中， g++ 标头档案在 /usr/local/g++-include，而 Debian 却放在 /usr/include/g++，并且将 /usr/lib/g++-include 连结到 /usr/include/g++。在後者的情形，你也许会想要将原始的 g++ include 目录移回到 /usr/include。
回存所有额外的标头档与连结。某些非标准的函式库会将档案放至 /usr/include，或是在 /usr/include 放置一连结到它们的 include 目录下。这些档案与连结必须回存，如此才可以正确的使用这些额外的函式库。
将你的新 library 路径 (例如 /usr/i486-linuxlibc5/lib) 加入到 /etc/ld.so.conf 的顶端。你最好要有 ld.so 1.8.8 或是更新的版本，以避免在安装完 glibc 之後出现一些奇怪的讯息。
搬移或复制所有的旧 library 到新的目录。
mv /usr/lib/libbsd.a /usr/i486-linuxlibc5/lib
mv /usr/lib/libc.a /usr/i486-linuxlibc5/lib
mv /usr/lib/libgmon.a /usr/i486-linuxlibc5/lib
mv /usr/lib/libm.a /usr/i486-linuxlibc5/lib
mv /usr/lib/libmcheck.a /usr/i486-linuxlibc5/lib
mv /usr/lib/libc.so /usr/i486-linuxlibc5/lib
mv /usr/lib/libm.so /usr/i486-linuxlibc5/lib
cp /lib/libm.so.5.* /usr/i486-linuxlibc5/lib
cp /lib/libc.so.5.* /usr/i486-linuxlibc5/lib

假如你的 /usr 与 / 是在不同的 partition 上，那 libm.so.5 与 libc.so.5 应该用复制的而非搬，因为一些用来启动 linux 的程式会需要这两个 library，因此必须要位在 root partition。
将 /usr/lib/*.o 移到新的目录下。
mv /usr/lib/crt1.o /usr/i486-linuxlibc5/lib
mv /usr/lib/crti.o /usr/i486-linuxlibc5/lib
mv /usr/lib/crtn.o /usr/i486-linuxlibc5/lib
mv /usr/lib/gcrt1.o /usr/i486-linuxlibc5/lib

在你的 library 移动後，更新 library cache。
ldconfig -v

5.3. 由 binary package 安装
如果你是由一已预先编译好的 glibc binary，你必需：

cd /
gzip -dc glibc-2.0.bin.i386.tar.gz | tar tvvf -
gzip -dc glibc-crypt-2.0.bin.i386.tar.gz | tar tvvf -
ldconfig -v

如果你用的是不同的系统架构或是版本，请置换适当的档名。

5.4. 由 source 安装
要由 source 安装，执行：

make install
ldconfig -v

5.5. 更新 gcc specs
安装的最後一步 (不管你是由 binary 或是由原始码安装) 是更新 gcc 的 spec 档，让你可以正确的连结你的程式。要知道 gcc 所用的是那一个 spec 档，如下输入：

% gcc -v
reading specs from /usr/lib/gcc-lib/i486-unknown-linux/2.7.2.2/specs
gcc version 2.7.2.2

在这里，系统是 i486-unknown-linux，而版本则是 2.7.2.2。你必须将 /usr/lib/gcc-lib/<system> 复制到旧的系统目录下：

cd /usr/lib/gcc-lib/
cp -r i486-unknown-linux i486-linuxlibc5

到原先的目录与版本目录下：

cd /usr/lib/gcc-lib/i486-unknown-linux/2.7.2.2

并修改在同一目录下的 specs。将这档案中的 /lib/ld-linux.so.2 改成 /lib/ld-linux.so.1，并且要将所有的 %{...:-lgmon} 表示式删除，因为 glibc 不使用 gmon 函式库来做 profiling。你可以在 specs 档□例 找到一份 specs 档的□例。

5.6. 测试你的安装
要测试安装是否正确，请建立 glibc.c 如下：

#include <stdio.h>

main()
{
printf("hello world!\n");
}

并且 compile 这个程式：
% gcc glibc.c -o glibc

使用 ldd 来查证这个程式是连结到 glibc2 而非你的旧 libc：
% ldd glibc
libc.so.6 => /lib/libc.so.6 (0x4000e000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

假如这个程式可以通过 compile 并且在执行後产生 ``hello world!'' 的输出，那麽表示已经安装成功。


New Page 1

标题： ■ Glibc 2 HOWTO 中文版: 使用非主要 libc 编译程式
姓名 ：Eric Green,
Email：thrytis@imaxx.net
地址 ：
转摘 ：http://member.netease.com/

返回

6. 使用非主要 libc 编译程式
有些时後你会想要使用不同的 library 来编译你的程式，这一节会解释如何达成这个目的。我会使用在前两节中所使用的目录与安装名称，记得要改变这些名称以符合你的设定。

6.1. 一个关於使用非主要 libc 的警告
在你开使编译任何会在开机时用到的程式之前，假如程式是动态连结，并且是在 non-root partition 被 mount 之前使用的话，那所有连结用的 library 都必须在 root partition 上。在前面的安装程序里，我们将 glibc 安装成主要的 library，而旧的 library 仍然保留在 /lib， /lib 会在 root partition 上，也就是说，所有在开机时会用到的程式都能正常工作。然而，若你的 /usr 是在不同的 partition 上，且把 glibc 当成测试用的 library，安装在 /usr/i486-linuxglibc2，那所有你用 glibc 编译的程式都将不能使用，直到 /usr 已经被 mount 为止。

6.2. 用测试安装的 glibc 编译程式
要用测试安装的 glibc 编译程式，你必须要将 include 录路径重设成 glibc 的 include 路径。指定 ``-nostdinc'' 会取消正常 include 路径，而 ``-I/usr/i486-linuxglibc2/include'' 则会指到 glibc 的 include 目录，你也必须要只纸指定 gcc 标准 include 目录，通常是 /usr/lib/gcc-lib/i486-linuxglibc2/2.7.2.2/include。 (这里假设你安装测试的 library 在 i486-linuxglibc2，而 gcc 的版本是 2.7.2.2)

要用测试安装的 glibc 来连结，你必须指明 gcc 设定，这是由 ``-b i486-linuxglibc2'' 这选项来达成。

对大部份的程式，你可以简单的将其加入 makefile 的 $CFLAGS 与 $LDFLAGS 选项中：

CFLAGS = -nostdinc -I/usr/i486-linuxglibc2/include -I/usr/lib/gcc-lib/i486-linuxglibc2/2.7.2.2/include -b i486-linuxglibc2
LDFLAGS = -b i486-linuxglibc2

假如你使用 configure 这个 script，在执行 configure 之前，定义 shell 变数 $CFLAGS 与 $LDFLAGS (在 csh/tcsh 下用 env/setenv 在 sh/bash/其它之下用 set/export)。这样产生的 makefile 应该会包含正确的 $CFLAGS 与 $LDFLAGS。不过并非所有的 configure scrpt 都会去取得这些变数，所以在执行完 configure 之後，你还是要简检查一下 makefile，假如需要的话，手动修改它。

假如你所要编译的程式只叫 gcc， (而非直接呼叫 cpp 或 binutils) 你可以使用以下的 script，省去每次指定所有选项的麻烦：

#!/bin/bash
/usr/bin/gcc -b i486-linuxglibc2 -nostdinc \
-I/usr/i486-linuxglibc2/include \
-I/usr/lib/gcc-lib/i486-linuxglibc2/2.7.2.2/include "$@"

编译时你可以使用这个 script 而不是 gcc。

6.3. 当 glibc 是主要 library 时用 libc 5 编译程式
当你已经将 glibc 安装成主要的 library 之後，又想用旧的 library 来编译程式的时後，你必须将 include 路径重设成旧的路径。指定 ``-nostdinc'' 将会使预设的路径无效，而 ``-I/usr/i486-linuxlibc5/include'' 会将 include 的路径指到旧 library 的 include 路径，你也必须要指定 ``-I/usr/lib/gcc-lib/i486-linuxlibc5/2.7.2.2/include'' 以含入 gcc 所需的 include 档。注意要视你新的目录与 gcc 版本来调整这些路径。

要用旧的 libc 来做连结，你必须指定 gcc 所用的架构。这是由 ``-b i486-linuxlibc5'' 这个选项所指定的。

对大部份的程式，你可以简单的将这些选项加入到 makefile 里的 $CFLAGS 与 $LDFLAGS 选项里：

CFLAGS = -nostdinc -I/usr/i486-linuxlibc5/include -I/usr/lib/gcc-lib/i486-linuxlibc5/2.7.2.2/include -b i486-linuxlibc5
LDFLAGS = -b i486-linuxlibc5

假如你使用 configure 这个 script，在执行 configure 之前，定义 shell 变数 $CFLAGS 与 $LDFLAGS (在 csh/tcsh 下用 env/setenv 在 sh/bash/其它之下用 set/export)。这样产生的 makefile 应该会包含正确的 $CFLAGS 与 $LDFLAGS。不过并非所有的 configure scrpt 都会去取得这些变数，所以在执行完 configure 之後，你还是要简检查一下 makefile，假如需要的话，手动修改它。

假如你所要编译的程式只叫 gcc， (而非直接呼叫 cpp 或 binutils) 你可以使用以下的 script，省去每次指定所有选项的麻烦：

#!/bin/bash
/usr/bin/gcc -b i486-linuxlibc5 -nostdinc \
-I/usr/i486-linuxlibc5/include \
-I/usr/lib/gcc-lib/i486-linuxlibc5/2.7.2.2/include "$@"

编译时你可以使用这个 script 而不是 gcc。


New Page 1

标题： ■ Glibc 2 HOWTO 中文版: 编译 C++ 程式
姓名 ：Eric Green,
Email：thrytis@imaxx.net
地址 ：
转摘 ：http://member.netease.com/

返回

7. 编译 C++ 程式
因为 libg++ 使用了部份的数学函式库，也就是说会连结到 libm。由於你目前的 libg++ 是用旧版的 library 所建立的，所以你必须重新用 glibc 来 compile libg++ 或是取得一份 binary copy。最新版的 libg++ source 与用 glibc 所连结的 binary 可以在 ftp://ftp.yggdrasil.com/private/hjl/ 找到。

7.1. 用测试的 C library 安装 libg++
假如你已经将 glibc 安装成测试用的 library，那你必须安装到 glibc 所安装的目录下 (例如由前一节所示的 /usr/i486-linuxglibc2)。假如你是由 binary 来安装 (这也是我建议的安装方式，因为我一直都不能用这种方式成功地编译 libg++)，你必须将档案解到暂存的目录下，将 usr/lib/ 下的所有档案搬到 <install directory>/lib/ ，并将 usr/include/ 下的所有档案搬到 <install directory>/include/ 下， (记得先删除 include/g++ 这个连结！) 再将 usr/bin/ 下的档案搬到 <install directory>/bin/。

7.2. 在主要 glibc 下安装 libg++
若你已经将 glibc 安装成主要的 library，假如还想要用旧的 libc 来编译 g++ 的程式，那你必须先将旧的 libg++ 档案移至旧的 libc 的目录下。也许最简单的方式就是如前一节用 libc 5 来安装一份新版的拷贝，然後在正常安装 glibc 版。

7.3. 使用非主要 libc 来编译 C++ 程式
假如你想用非主要 libc 来编译 C++ 程式，那你必须要 加入 g++ 的 include 目录。在上面的例子中，对测试用的 glibc 是 /usr/i486-linuxglibc2/include/g++，而对主要 glibc 则是 /usr/i486-linuxlibc5/include/g++，这通常都可以由添加至 $CXXFLAGS 这个变数来完成：

CXXFLAGS = -nostdinc -I/usr/i486-linuxglibc2/include -I/usr/lib/gcc-lib/i486-linuxglibc2/2.7.2.2/include -I/usr/i486-linuxlibc5/include/g++ -b i486-linuxglibc2


New Page 1

标题： ■ Glibc 2 HOWTO 中文版: 报告臭虫
姓名 ：Eric Green,
Email：thrytis@imaxx.net
地址 ：
转摘 ：http://member.netease.com/

返回

8. 报告臭虫
假如你以为这函式库有错，请先阅读 FAQ，也许已经有人遇到过这个问题，并且也有了简单的解决方法。另外，你也应该查看 INSTALL 档中的 "Recommended Tools to Install the GNU C Library" 一节，因为有些错误不在於 glibc 而是在於这些工具。

假你找到了臭虫，请先确定的确是臭虫。一个判断的好方法是看看 glibc 的行为是否与其它的 c library 相同。假如相同的话，那也许你是错的，而函式库是正确的。 (但也不一定如此) 假如不相同的话，那肯定两者之中有一个是错的。

接著，请到 http://www-gnats.gnu.org:8080/cgi-bin/wwwgnats.pl，并且查看臭虫资料，确定这个问题尚未有人提出。你也应该看看 BUGS (内付於 libc 中) 所列出的目前的臭虫。

一旦你确定找到了一只新的臭虫，请试著将它缩小到最小的 test case。就 C library 而言，你只需要将它缩小到单独一个函式呼叫 (假如可以的话)。这应该不是太困难的事。

最後一个步骤是就你的 test case 提出臭虫报告。要送出臭虫报告，请包含你的 test case、你所得到的结果、你所期待的结果、你认为可能的原因在那 (只要你曾想过的任何原因)、你的系统类别、你所使用的 GNU C library、 GNU CC 编译器、 GNU binutils 的版本。另外，请附上执行 configure 时产生的 config.status 与 config.make，这两个档案会在你执行 configure 时後的目录下。

所有的臭虫报告都应该使用 glibcbug 这个 GNU libc 所付的 shell script 送至 bugs@gnu.org (旧的位址 bugs@gnu.ai.mit.edu 也仍然可以使用)。或是到 GNATS 网站上利用 http://www-gnats.gnu.org:8080/cgi-bin/wwwgnats.pl 这个介面来做。

你的建议与问题应该送到 bugs-glibc@prep.ai.mit.edu 这个邮递列表。假如你没有阅读新闻群组 gnu.bug.glibc，那麽你可以要求 bug-glibc-request@prep.ai.mit.edu 加入这个列表。

请不要将 GNU C library 的 bug report 送到 <bug-gcc@prep.ai.mit.edu>，这是为了 GNU CC 而设立的，而 GNU CC 与 GNU C library 是由不同人们的所维护的。


New Page 1

标题： ■ Glibc 2 HOWTO 中文版: Specs 档□例
姓名 ：Eric Green,
Email：thrytis@imaxx.net
地址 ：
转摘 ：http://member.netease.com/

返回

9. Specs 档□例
这里是一份 specs 的□例这将使 gcc 用 glibc2 来编译与连结。它应该位於 /usr/lib/gcc-lib/<new system dir>/<gcc version>. 假如你用的是 x86 的系统，那你也许可以直接将这一段复制到档案里去。

*asm:
%{V} %{v:%{!V:-V}} %{Qy:} %{!Qn:-Qy} %{n} %{T} %{Ym,*} %{Yd,*} %{Wa,*:%*}

*asm_final:
%{pipe:-}

*cpp:
%{fPIC:-D__PIC__ -D__pic__} %{fpic:-D__PIC__ -D__pic__} %{!m386:-D__i486__} %{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT}

*cc1:
%{profile:-p}

*cc1plus:

*endfile:
%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s

*link:
-m elf_i386 %{shared:-shared} %{!shared: %{!ibcs: %{!static: %{rdynamic:-export-dynamic} %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} %{static:-static}}}

*lib:
%{!shared: %{pthread:-lpthread} %{profile:-lc_p} %{!profile: -lc}}

*libgcc:
-lgcc

*startfile:
%{!shared: %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} %{!p:%{profile:gcrt1.o%s} %{!profile:crt1.o%s}}}} crti.o%s %{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}

*switches_need_spaces:

*signed_char:
%{funsigned-char:-D__CHAR_UNSIGNED__}

*predefines:
-D__ELF__ -Dunix -Di386 -Dlinux -Asystem(unix) -Asystem(posix) -Acpu(i386) -Amachine(i386)

*cross_compile:
0

*multilib:
. ;


New Page 1

标题： ■ Glibc 2 HOWTO 中文版: 杂项
姓名 ：Eric Green,
Email：thrytis@imaxx.net
地址 ：
转摘 ：http://member.netease.com/

返回

10. 杂项
10.1. 进一步的资料
10.1.1. 相关网页

FSF's GNU C Library Home Page
Using GNU Libc 2 with Linux
Installing glibc-2 on Linux.
Debian libc5 to libc6 Mini-HOWTO.

10.1.2. 新闻群组

comp.os.linux.development.system
comp.os.linux.development.apps
linux.dev.kernel
gnu.bugs.glibc

10.1.3. 邮递列表

Glibc 2 Linux 讨论列表
这个邮递列表是为了让安装有 glibc，也就是新的 GNU C library，的使用者讨论的。议题包括相容性的问题，以及在 linux/glibc 环境下程式的编译问题。要订阅这个邮递列表，请寄一封信至 Majordomo@ricardo.ecn.wfu.edu，信的内容为 "subscribe glibc-linux <your email address>"。

10.2. 贡献
大部份的资讯都是由 GNU Libc web page 以及 Ulrich Drepper's <drepper@gnu.ai.mit.edu> glibc 2 announcement 所偷来的， Andreas Jaeger <aj@arthur.rhein-neckar.de> 则提供了部份的 Bug report。

以下各位都曾对本文件提供相关资讯以及意见：

Allex Juang<allex@ms2.accmail.com.tw>
Mark Brown <M.A.Brown-4@sms.ed.ac.uk>
Ulrich Drepper <drepper@gnu.ai.mit.edu>
Scott K. Ellis <ellis@valueweb.net>
Aron Griffis <agriffis@coat.com>
Andreas Jaeger <aj@arthur.rhein-neckar.de>
Frodo Looijaard <frodol@dds.nl>
Ryan McGuire <rmcguire@freenet.columbus.oh.us>
Shaya Pott


New Page 1

标题： ■ Linux Information Sheet 中译版 : Linux 的简介
姓名 ：Michael K. Johnson
Email：johnsonm@redhat.com
地址 ：
转摘 ：http://member.netease.com/

返回

P1. Linux 的简介
Linux 是 POSIX 规格的完整重新实作，有著 SYSV 及 BSD 扩充，(这表示它看起来及运作上就像 Unix，但不包含相同的基础原始程式码)，可以原始程式码及二进位执行档两种形式取得．它的版权属於 Linus Torvalds <torvalds@transmeta.com>，以及其它的贡献者，在 GNU General Public License (GPL) 下可自由的散布． GPL 的一份拷贝包含在 Linux 原始程式码里，你也可以自 ftp://prep.ai.mit.edu/pub/gnu/COPYING 取得一份拷贝．

Linux 不是公益软体，它也不是共享软体(shareware)．它是`免费'软体，通常叫做 freeware，而你可以送人或贩买拷贝，但你必须包含原始程式码或者让它可被由你送出或贩买执行档相同的方式取得．如果你散布任何的修改，你必须散布这些修改的程式码．详情请见 GNU General Public License．

Linux 在 2.0 版仍然是免费的，而且仍会一直是免费的．由於 Linux 遵循 GPL 的关系，让它变成非免费是不合法的．特别注意: `免费'的部份是指不需用金钱来获得原始程式码; 散布 Linux 而收取费用是完全合法的，即使你连同原始程式一起散布．这是广义的推论; 如果你想知道细节，请阅读 GPL．

Linux 可在具 ISA, EISA, PCI 及 VLB 汇流排的 386/486/Pentium 机器上执行． MCA (IBM 专利的汇流排)在 2.0.x 及更早的版本上还未完全支援，但目前发展中的核心 2.1.x 已经加入支援了．如果你有兴趣，请看 http://glycerine.itsmm.uni.edu/mca．

有一个移植到多重 Motorola 680x0 平台(目前在一些 Amigas, Ataris, 及 VME 机器上执行)的版本，运作得相当良好．它需要具 MMU 的 68020, 68030, 68040, 或是一 68060, 而且也需要一个 FPU. 网路及 X 视窗目前都可运作．请见 news:comp.os.linux.m68k．

Linux 在 DEC's Alpha CPU 上执行得很好，目前支援 "Jensen", "NoName", "Cabriolet", "Universal Desktop Box" (以 Multia 较知名)，及许多其它的平台．想了解更多资讯，参见 http://www.azstarnet.com/~axplinux/FAQ.html．

Linux 也在 Sun SPARCs 上执行得很好; 许多 sun4c 及 sun4m 机器现在执行 Linux，而 sun4 及 sun4u 的支援正在发展中． Red Hat Linux 是(在本文写作时)是唯一可在 SPARCs 上执行的 Linux 套件; 参见 http://www.redhat.com/support/docs/rhl-sparc/．

Linux 正被移植到 PowerPC 架构上，包括 PowerMac (Nubus 及 PCI), Motorola, IBM 及 Be 机器．参见 http://www.cs.nmt.edu/~linuxppc/ 以及 http://www.linuxppc.org/．

移植到其它的机器，包括 MIPS 及 ARM, 正在计画中而且已有许多的进展．别期望太高，但如果你有兴趣而且想尽一份力，你将会发现其它的发展者愿意与你共同工作．

Linux 自 1994 年三月十四号发表第一版以来已不再认为是在 beta 测试阶段．系统中仍有错误，而且新的错误将持续出现并随时间进行而被修正．因为 Linux 遵循了``开放发展模型(open development model)''，所有新的版本都将被公开发表，不论它们是否被认为具有``产品品质''．然而，为了帮助人们分辨他们是否取得一稳定的版本，如下的方案被采用: 版本 1.x.y, 其中 x 是一偶数，是稳定的版本，而且当 y 增加时只有错误修正会加进去．因此从 1.2.2 到 1.2.3, 其中只有错误修正，而没有新的特性．版本 1.x.y, 其中 x 是奇数，是给发展者 beta 性质的发表，而且可能不稳定而可能当掉，还有随时可能有新的特性加入．随著时间进展，目前发展的核心逐渐稳定，它将被冻结为新的``稳定''核心，而发展将会在一新版本的核心继续下去．

目前稳定的核心是 2.0.31 (这将会在新的驱动程式加入及错误修正中继续改变)，而发展已经在实验的 2.1.x 核心下开始．如果 2.0.x 对你来说太新，你也许想停留在 1.2.13．然而，最新的发行版 2.0 已经被证明是相当稳定的．请注意为了从 1.2 升级到 2.0, 你也同时需要升级一些工具程式; 你也许会想升级到你的 Linux 套件的最新版本以获得这些工具． Linux 核心的原始程式码中也包含了一个档案, Documentation/Changes, 解释这些改变及更多．

大部份的 Linux 版本，不论是否为 beta 版，都相当的稳定，而且如果它能符合你的需要你仍可继续使用下去而不必感到难过(? on the bleeding edge)．有一个站台执行 0.97p1 (从 1992 年夏天起)超过 136 天而没有一样错误或当掉．(它还可持续更久如果不是因为助理操作员操作电源失当...) 其它人还报告过超过一年的开机时间的．最近一项报告有一个站台执行 Linux 0.99p15s 超过 600 天的．

有一件值得注意的事是 Linux 是以开放且分散模式发展的，而非像许多其它的软体的封闭且集中模式．这表示目前发展的版本总是公开的(最多有一星期到两星期的延迟)因此任何人皆可使用．这结果是每当一具有新功能的版本发表时，它几乎总是包含有错误的，但它也导致一非常快速的发展因而错误很快地被发现且修正，通常在数小时内，因为许多入努力去修正它们．

相对地，封闭而集中的模式意指只有一个人或一团队为此计画工作，而它们只发表他们认为运作得很好的软体．通常这会导致较长的发展周期，较长等待的错误修正，还有较慢的发展．如此软体最後公开发表的版本有时会有更好的品质，但发展的速度一般来说是慢许多的．

在 1997 十月二十四号，目前 Linux 的稳定版本是 2.0.31, 而最新发展中的版本是 2.1.59.


New Page 1

标题： ■ Linux Information Sheet 中译版 : Linux 的特性
姓名 ：Michael K. Johnson
Email：johnsonm@redhat.com
地址 ：
转摘 ：http://member.netease.com/

返回

2. Linux 的特性

多工: 数个程式可同时执行．
多使用者: 数位使用者可同时在相同机器上(而且没有双使用者授权!)．
多平台: 可在许多不同 CPUs 上执行，不只是 Intel.
多处理器: SMP 支援在 Intel 及 SPARC 平台上可用(其它平台正发展中)，而且 Linux 也使用在数个疏结的(loosely-coupled) MP 应用程式，包括 Beowulf 系统上(见 http://cesdis.gsfc.nasa.gov/linux-web/beowulf/beowulf.html) 及 Fujitsu AP1000+ SPARC-based 超级电脑上．
在 386 上以保护模式执行．
具行程间记忆体保护，因此一个程式不会让整个系统当掉．
依需求载入执行档: Linux 只从磁碟机上读入一个程式真正需要的部份．
执行档的共享式写入时拷贝(copy-on-write)分页机制．这就是说多行程可以使用相同的记忆体来执行．如果其中之一尝式写入那块记忆体，那一页(4KB 的记忆体)会被拷贝到其它地方去．写入时拷贝有两项好处: 增加速度及降低记忆体使用量．
虚拟记忆体使用分页写入磁碟(而非整个行程交换至磁碟): 至一独立的分割区或档案系统上的一个档案，或两者皆可，而且在执行时期可以增加交换区(是的，它们仍叫做交换区，swapping areas)．总共十六个 128MB 的交换区可以同时被使用，理论上可达共 2GB 的可用交换空间．如果需要增加的话，只要改几行程式码就行．
使用者程式及磁碟快取使用统一的记忆体池(memory pool)，因此所有未使用的记忆体可用来当做快取之用，而快取量在执行大程式时可以减少．
动态连结程式库(DLL's)，当然，也有静态程式库．
可做 core dumps 以为事後的分析，不仅允许在一程式执行时使用侦错器(debugger)，也可在它当掉之後．
与 POSIX, System V, 及 BSD 在原始程式码层次上大部份相容．
经由 iBCS2-compliant 模拟模组，能与 SCO, SVR3, 及 SVR4 在二进位执行档上大部份相容．
所有的原始程式码都可取得，包括整个核心及所有的驱动程式，发展工具及所有使用者程式; 还有，所有这些都可自由地散布．大量的商业程式也提供给 Linux 而没有程式码，但所有已经是免费的东西，包括整个基本的作业系统，仍然是免费的．
POSIX 工作控制．
pseudoterminals (pty's).
核心的 387 模拟，因此程式不需要自行做数学运算模拟．每一部执行 Linux 的机器看起来都有数学辅助处理器．当然，如果你的电脑已经包含一个 FPU, 它会被使用而不用模拟的，而你甚至可以编译核心将数学运算模拟拿掉以减少记忆体的使用．
支援许多国际或自订的键盘，而且很容易动态地加入新的．
多重虚拟主控台: 数个经由主控台独立的签入(login)程序，你可以按下热键来切换(与视讯硬体无关)．这些可以动态地增加; 你最多可用 64 个．
支援数种普通的档案系统，包括了 minix, Xenix, 及所有普通的 System V 档案系统，而且自己有一个先进的档案系统，提供最多达 4 TB 的档案系统，以及至多可到 255 个字元长的档名．
经由一特殊的档案系统取用 MS-DOS 分割区(或 OS/2 FAT 分割区)透明化: 你不需要任何特别的指令来使用 MS-DOS 分割区，它看起来就像是一普通的 Unix 档案系统(除了可笑的档名限制，及权限等等)． MS-DOS 6 的压缩分割区目前没有修补(dmsdosfs)的情况下无法使用．VFAT(Windows 95) 在 Linux 2.0 已开始支援．
特殊的档案系统叫 UMSDOS 可以让 Linux 安装在一 DOS 的档案系统里．
唯读的 HPFS-2 支援 for OS/2 2.1
HFS (Macintosh) 档案系统支援可以单独的模组使用．
CD-ROM 档案系统可读取所有标准格式的 CD-ROMs.
TCP/IP 网路，包含 ftp, telnet, NFS, 等等．
Appletalk 伺服器
Netware 客户端及伺服器
Lan Manager (SMB) 客户端及伺服器
许多网路协定: 在最新发展的核心中包含的基本协定有 TCP, IPv4, IPv6, AX.25, X.25, IPX, DDP (Appletalk), NetBEUI, Netrom, 及其它的．稳定的核心中目前包含的稳定的网路协定有 TCP, IPv4, IPX, DDP, and AX.25.


New Page 1

标题： ■ Linux Information Sheet 中译版 : Hardware 需求
姓名 ：Michael K. Johnson
Email：johnsonm@redhat.com
地址 ：
转摘 ：http://member.netease.com/

返回

3. Hardware 需求
3.1. 最小配置
下面可能是让 Linux 运作所需最小的配置: 386SX/16, 1 MB RAM, 1.44 MB or 1.2 MB floppy, 任何支援的显示卡(当然加上键盘，显示器等)．这个应该可以让你启动与测试它是否能在那部机器上运作，但你无法做任何有用的事情． Linux 的最小配置可参见 http://rsphy1.anu.edu.au/~gpg109/mem.html．

为了能做一些事情，你会想要一些硬碟空间，5 到 10 MB 应该足够一最小的安装(只包含最重要的指令及或许一个到两个小的应用程式，例如，终端机程式)．这仍然是非常，非常受限的，而且非常不舒服的，因为它未留下足够的空间来做任何事，除非你的应用程式相当有限．一般来说并不建议如此，除了测试它是否能运作，以及当然可以拿来夸口说只需要这麽小的资源．

3.2. 可用配置
如果你想拿来跑需大量计算的程式，例如 gcc, X 及 TeX, 你应该会想要一个比 386SX/16 更快的处理器，但即使是 386SX/16 如果你有耐心的话它也应该够用了．

实际上，如果你不用 X 的话你会至少想要 4 MB 的记忆体，而若要跑 X 的话至少要 8 MB. 还有，如果你想同时有好几个使用者，或同时执行好几个大型程式(例如编译)，你可能会想要超过 4 MB 的记忆体．它在更少的记忆体上仍可运作(应该甚至可在 2 MB 上运作)，但它会使用虚拟记忆体(使用硬碟作为慢的记忆体)而那会变得太慢而难以使用．如果你一次使用许多程式，16 MB 将会降低大量的磁碟交换．如果你不想在正常负载下让交换可被查觉，32 MB 将会足够了．当然，如果你执行消耗大量记忆体的应用程式，你也许会需要更多．

你需要的硬碟容量视你想要安装什麽软体而定．基本的 Unix 工具，shells 及它管理程式应该少於 10 MB, 还要有一部份的空间给使用者档案．一个完整的系统，取用 Red Hat, Debian, 或其它的套件，你可能会需要 60 到 300 MB, 看你选择安装什麽以及你取得什麽套件而定．再加上你要保留给使用者的空间．在今日的硬碟价格下，如果你要买一新的系统，没有理由买一个太小的硬碟．至少买 500 MB, 最好 1 GB 或更多的，而你将不会後悔．

加上更多的记忆体，更多的硬碟，一个更快的处理器及其它的东西视你的需要而定，希望及预算要远超过仅仅可用的程度．一般来说，一项 DOS 与 Linux 相当大的差异是 Linux 增大记忆体会有很大的不同，而在 DOS 上更多的记忆体并没有太大的不同．这当然是由於 DOS 的 640 KB 限制，这在 Linux 上是完全不存在的．

3.3. 支援的硬体

CPU:
任何可执行 386 保护模式程式的东西(386, 486, 586 及 686 所有的型号都应能运作．286 及更旧的也许有一天可在一较小的核心称为 ELKS(Embeddable Linux Kernel Subset) 下被支援，但别期望会有相同的能力．) 给 680x0 CPU 的版本(其中 x = 2 要有外部 MMU, 3, 4, 及 6)可在 Amigas 及 Ataris 上执行的可在 tsx-11.mit.edu 的 680x0 目录下找到．许多 DEC Alphas, SPARCs 及 PowerPC 机器都被支援．移植到 ARM, StrongARM 及 MIPS 架构上正在进行中．更多的细节可在别处找到．

架构:
ISA 或 EISA 汇流排． MCA(mostly true blue PS/2's) 的支援还不完整但正改善中(见下述)． Linux 对硬体的要求比 DOS, Windows, 以及事实上大部份其它的作业系统还要高．这表示说某些在执行其它要求较低的作业系统不会有问题的最低硬体可能在跑 Linux 时会失败．Linux 是相当好的记忆体测试器...

RAM:
在 Intel 平台上至多可到 1 GB; 在 64-bit 的平台上可有更多．某些人(包括 Linus 本人)已经注意到增加 RAM 而不同时增加更多的快取记忆体会使他们的机器变得很慢，因此如果你增加了记忆体而发现你的机器变慢了，试著加上更多的快取记忆体．某些机器只能快取某些数量的记忆体，不论安装了多少的 RAM (64 MB 是最多晶片能快取的)．超过 64 MB 的记忆体将需要启动时期的参数，因 BIOS 不能报告超过 64 MB 的记忆体，这是因为它``设计不良(broken as designed)''．

资料储存设备:
一般的 AT 磁碟 (EIDE, IDE, 16 bit HD controllers with MFM or RLL, or ESDI) 是支援的，SCSI 硬碟及光碟机也都支援，只要有一被支援的 SCSI 卡．一般的 XT 控制器 (8 bit controllers with MFM or RLL) 也都支援．支援的 SCSI 卡有: Advansys, Adaptec 1542, 1522, 1740, 27xx, and 29xx 系列(有些例外), Buslogic MultiMaster and Flashpoint, NCR53c8xx-based controllers, DPT controllers, Qlogic ISP and FAS controllers, Seagate ST-01 and ST-02, Future Domain TMC-88x series (or any board based on the TMC950 chip) and TMC1660/1680, Ultrastor 14F, 24F and 34F, Western Digital wd7000, and others. SCSI, QIC-02, 及一些 QIC-80 tapes 也支援．好几种 CD-ROM 装置也都支援，包括 Matsushita/Panasonic, Mitsumi, Sony, Soundblaster, Toshiba, ATAPI (EIDE), SCSI, 及其它的．想了解确实的型号，查阅 Hardware compatibility HOWTO．

视讯:
VGA, EGA, CGA, 或 Hercules (及相容的)可在文字模式运作．图型模式及 X 视窗，支援的有(至少)普通的 VGA, 某些 super-VGA 卡(大部份用 ET3000, ET4000, Paradise, 及某些 Trident 晶片的卡), S3, 8514/A, ATI MACH8/32/64, 及 hercules. (Linux 使用 XFree86 X server, 因此这决定了什麽卡被支援．单单完整已支援晶片的列表就超过了一页．)

网路:
乙太网路卡支援包括 3COM 503/509/579/589/595/905 (501/505/507 也支援但不建议使用)， AT&T GIS (neé NCR) WaveLAN, most WD8390-based cards, most WD80x3-based cards, NE1000/2000 及大部份的仿制品, AC3200, Apricot 82596, AT1700, ATP, DE425/434/435/500, D-Link DE-600/620, DEPCA, DE100/101, DE200/201/202 Turbo, DE210, DE422, Cabletron E2100 (不建议), Intel EtherExpress (不建议), DEC EtherWORKS 3, HP LAN, HP PCLAN/plus, most AMD LANCE-based cards, NI5210, ni6510, SMC Ultra, DEC 21040 (tulip), Zenith Z-Note ethernet, 所有 Zircom 卡及所有 Cabletron 的卡除了 E2100 之外都不支援，因为制造商不愿意免费的公开程式写作的资讯．

FDDI 目前支援包括来自 DEC 的 DEFxx 卡．

点对点网路支援包括了 PPP, SLIP, CSLIP, and PLIP.

有限的 Token Ring 支援已可取得．

串列装置:
大部份 16450 及 16550 UART-based 板，包括 AST Fourport, the Usenet Serial Card II, 及其它的．智慧型串列板支援包括 Cyclades Cyclom 系列 (由制造商支援), Comtrol Rocketport 系列 (由制造商支援), Stallion (大部份; 由制造商支援), 以及 Digi (某些版; 由制造商支援)．某些 ISDN, frame relay, 及专线硬体也支援．

其它的硬体:
SoundBlaster, ProAudio Spectrum 16, Gravis Ultrasound, 大部份其它的音效卡，大部份(全部?)流行的汇流排滑鼠(Microsoft, Logitech, PS/2), 等等．


New Page 1

您现在的位置：网上学校 >> 网上交流 >> LINUX 应用与技巧

标题： ■ Linux Information Sheet 中译版 : 移植程式及其它软体的不完整列表
姓名 ：Michael K. Johnson
Email：johnsonm@redhat.com
地址 ：
转摘 ：http://member.netease.com/

4. 移植程式及其它软体的不完整列表
大部份一般的 Unix 工具及程式已经被移植到 Linux 上，包括了几乎所有 GNU 的东西及许多不同来源的 X 客户端程式．实际上，所谓的移植通常只是一句话，因为许多程式可直接在 Linux 机器上编译而不需要修改，或只需要很小的修改，因为 Linux 非常遵循 POSIX．不幸地，没有像我们所期望那麽多的末端使用者(end-user)应用程式，但这正很快地改变．和你喜欢的商业 Unix 应用程式的供应者联系询问他们是否将它移植到 Linux 上．

这里有份已知能在 Linux 上运作软体的不完整列表:

基本的 Unix 指令:
ls, tr, sed, awk 等等(你能说得出名字的，Linux 大概就有)．

发展工具:
gcc, gdb, make, bison, flex, perl, rcs, cvs, prof.

语言及环境:
C, C++, Objective C, Java, Modula-3, Modula-2, Oberon, Ada95, Pascal, Fortran, ML, scheme, Tcl/tk, Perl, Python, Common Lisp, 及许多其它的．

图形环境:
X11R5 (XFree86 2.x), X11R6 (XFree86 3.x), MGR.

编辑器:
GNU Emacs, XEmacs, MicroEmacs, jove, ez, epoch, elvis (GNU vi), vim, vile, joe, pico, jed, 及其它的．

Shells:
bash (POSIX sh-compatible), zsh (包含 ksh 相容模式), pdksh, tcsh, csh, rc, es, ash (大部份 sh-相容的 shell 在 BSD 上当做 /bin/sh 来用), 还有更多．

通讯程式:
Taylor (BNU-compatible) UUCP, SLIP, CSLIP, PPP, kermit, szrz, minicom, pcomm, xcomm, term (runs multiple shells, redirects network activity, and allows remote X, all over one modem line), Seyon (popular X-windows communications program), 以及数个传真及声音邮件(使用 ZyXEL 及其它数据机)套件都有．当然，远端串列签入也支援．

新闻及邮件软体:
C-news, innd, trn, nn, tin, smail, elm, mh, pine, 等等．

文字处理软体:
TeX, groff, doc, ez, LyX, Lout, Linuxdoc-SGML, 及其它的．

游戏:
Nethack, 数个 Muds 及 X 游戏，以及大量其它的游戏．所有游戏可自 tsx-11 及 sunsite 取得．

套件(Suites):
AUIS, the Andrew User Interface System. ez is part of this suite.

所有这些程式都可免费取得(而这些还不及所有的百分之一)．商业软体愈来愈多; 询问你喜爱的商业软体供应者他们是否支援 Linux.

［关闭此窗口］


New Page 1

标题： ■ Linux Information Sheet 中译版 : 谁使用 Linux?
姓名 ：Michael K. Johnson
Email：johnsonm@redhat.com
地址 ：
转摘 ：http://member.netease.com/

返回

5. 谁使用 Linux?
Linux 可免费取得，而没有人需要将他们的拷贝向任何中央当局注册，因此很难知道有多少人在使用 Linux. 数家公司目前单独提供贩卖及支援 Linux (而相当少的 Linux 使用者从那些公司购买产品)，而 Linux 新闻群组是网际网路某些非常大量被阅读的群组之一，因此这个数目大概在百万之谱，但实际的数字很难估计．

然而，有个勇敢的家伙，Harald T. Alvestrand <Harald.T.Alvestrand@uninett.no> 决定要试一试．如果你想被计算为一个 Linux 的使用者，请使用 http://counter.li.org/ 上的 web forms 注册．除此之外，你还可以送一讯息到 linux-counter@uninett.no，标题是下列其中之一: `I use Linux at home', `I use Linux at work', 或 `I use Linux at home and at work'．他也接受`第三者(third-party)'的注册; 向他询问详情．

他每个月将他的计数放到 news:comp.os.linux.misc; 也可从 http://counter.li.org/ 取得．


New Page 1

标题： ■ Linux Information Sheet 中译版 : 开始
姓名 ：Michael K. Johnson
Email：johnsonm@redhat.com
地址 ：
转摘 ：http://member.netease.com/

返回

7. 开始
就像一开始所提的，Linux 并不是集中管理的．由於如此，没有所谓的``正式''发行版本让人可以指出，说``这就是 Linux''．相对的，有许多的不同的``套件''，或多或少收集了一些设定好的软体及套件让人们可以用来安装一个 Linux 系统．

因此你应该做的第一件事是从其中一个 FTP 站台或使用一般的 Usenet FAQ 档案保存处(例如 rtfm.mit.edu)取得并阅读常见问题解答(FAQ)列表．这份文件有大量的指示如何开始，你需要什麽档案，及如何解决最常见的问题等(在安装或其它过程)．


New Page 1

标题： ■ Java CGI HOWTO 中译版 : 简介
姓名 ：David H. Silber
Email：dhs@orbits.com
地址 ：
转摘 ：http://member.netease.com/

返回

1. 简介
由於 Java 的设计方式程式设计师没有简易的方法可以取得系统的环境变数．由於 Java 发展工具 (JDK) 建立的方式，呼叫一个程式必须使用多重表徵(tokens)，这和标准的 HTML forms/CGI 运作方式不易配合．有一些办法可以克服这些限制，而我就实作了其中一种．详情请见下述．

1.1. 预备知识
我假定你有 HTML 与 CGI 概念的一般知识，而且了解关於你的 HTTP 伺服器的最基本知识．你也应该知道如何写 Java 程式，否则这些都没有意义．

1.2. 这份文件
本文的最新版本可以从此找到: http://www.orbits.com/software/Java_CGI.html.

1.3. 软体套件
本文所提到的软体套件的最新版本可由匿名 FTP 取得ftp://ftp.orbits.com/pub/software/java_cgi-0.4.tgz. 这套件包含本文的 SGML 原始档．

这些套件的散布必须依据 GNU Library General Public License. 本文可依 Linux HOWTO 的版权声明散布．

如果你使用本软体，请将某些参考指向 http://www.orbits.com/software/Java_CGI.html，以便让其它人能找到 Java CGI 的类别．

1.4. 广告一下
本文是由 Stellar Orbits Technology Services 所提供．(请到 http://www.orbits.com/ 以了解我们是做什麽的．)


New Page 1

标题： ■ Java CGI HOWTO 中译版 : 设定伺服器以执行 Java CGI 程式 (解释篇)
姓名 ：David H. Silber
Email：dhs@orbits.com
地址 ：
转摘 ：http://member.netease.com/

返回

2. 设定伺服器以执行 Java CGI 程式 (解释篇)
这一节教你安装我的 Java CGI 套件，以及大量的解释，让你能够了解你的行为会导致什麽结果．如果你只想安装程式而不想了解为什麽，直接跳到 设定伺服器以执行 Java CGI 程式 (简略篇)．

2.1. 系统需求
本软体应该能在已安装 Java 程式发展工具的任何类 UNIX 的 web 伺服器上安装．我将它装在执行 apache 伺服器的 Debian Linux 系统上．如果你发觉它无法在你的伺服器上运作，请与我联络: dhs@orbits.com.

不幸的是，Java 执行时期解译器似乎是吃记忆体的怪物 -- 如果你将使用许多 Java CGI 程式的话你可能要再丢数 MB 的 RAM 到你的伺服器里．

2.2. Java CGI 辅助软体
我写的辅助软体就叫做 Java CGI．你可从 ftp://www.orbits.com/pub/software/java_cgi-0.4.tgz 取得(版本号码可能会改变)．

2.3. 解开原始档
找一个合适的目录将套件解开． (如果你还没有标准放置软体的地方，我建议你放在 /usr/local/src．) 用这个指令解开套件:

gzip -dc java_cgi-0.4.tgz | tar -xvf -

Java CGI HOWTO 中译版 : 设定伺服器以执行 Java CGI 程式 (解释篇)
Previous: 简介
Next: 设定伺服器以执行 Java CGI 程式 (简略篇)
--------------------------------------------------------------------------------

2. 设定伺服器以执行 Java CGI 程式 (解释篇)
这一节教你安装我的 Java CGI 套件，以及大量的解释，让你能够了解你的行为会导致什麽结果．如果你只想安装程式而不想了解为什麽，直接跳到 设定伺服器以执行 Java CGI 程式 (简略篇)．

2.1. 系统需求
本软体应该能在已安装 Java 程式发展工具的任何类 UNIX 的 web 伺服器上安装．我将它装在执行 apache 伺服器的 Debian Linux 系统上．如果你发觉它无法在你的伺服器上运作，请与我联络: dhs@orbits.com.

不幸的是，Java 执行时期解译器似乎是吃记忆体的怪物 -- 如果你将使用许多 Java CGI 程式的话你可能要再丢数 MB 的 RAM 到你的伺服器里．

2.2. Java CGI 辅助软体
我写的辅助软体就叫做 Java CGI．你可从 ftp://www.orbits.com/pub/software/java_cgi-0.4.tgz 取得(版本号码可能会改变)．

2.3. 解开原始档
找一个合适的目录将套件解开． (如果你还没有标准放置软体的地方，我建议你放在 /usr/local/src．) 用这个指令解开套件:

gzip -dc java_cgi-0.4.tgz | tar -xvf -

这会产生一个叫 java_cgi-0.4 的目录．在那里你可以找到本文其它地方提到的档案． (如果版本号码改变了，就改用那套件里的．)

2.4. 决定你的本地目录策略
你必须决定让你的 Java CGI 程式住在那里．一般来说，你会希望放在和你的 cgi-bin 平行的目录．我的 apache 伺服器设定使用 /var/web/cgi-bin 为 cgi-bin 目录，因此我用 /var/web/javacgi 作为放置 Java CGI 程式的地方．你可能不会想让将你的 Java CGI 程式放进某一已存在的 CLASSPATH 目录．编辑 Makefile 来反应你的系统配置．确定你用 root 签入然後执行 make install．这将编译 Java 程式，修改 java.cgi 指令稿以符合你的系统，并且将程式安装进适当的位置．如果你希望拥有本文的 HTML 版本以及一份 HTML 测试文件，改用 make all．

2.5. 测试你的安装
由本套件安装的 HTML 文件叫做 javacgitest.html, javaemailtest.html 以及 javahtmltest.html．如果你在前节使用 make all，它们会放在你於 Makefile 中指定的 WEBDIR 目录中．如果不是，你可以执行 make test 从 javacgitest.html-dist, javaemailtest.html-dist 以及 javahtmltest.html-dist 来建立它们．

当你确定你的安装可以正确运作後，你可能希望从你的 JAVACGI 目录移除 CGI_Test, Email_Test 以及 HTML_Test 类别，还有从 WEBDIR 目录移除 javacgitest.html, javaemailtest.html 以及javahtmltest.html，因为它们会显示应该只有伺服器管理者才看得到的使用者资讯．


New Page 1

标题： ■ Java CGI HOWTO 中译版 : 设定伺服器以执行 Java CGI 程式 (简略篇)
姓名 ：David H. Silber
Email：dhs@orbits.com
地址 ：
转摘 ：http://member.netease.com/

返回

3. 设定伺服器以执行 Java CGI 程式 (简略篇)

从ftp://www.orbits.com/pub/software/java_cgi-0.4.tgz. 取回 Java CGI 套件．(版本号码可能会改变．)
用这个指令解开套件:
gzip -dc java_cgi-0.4.tgz | tar -xvf -

(如果版本号码改变了，就改用那套件里的．)
修改在新产生的 java_cgi-0.4 目录里的 Makefile 以符合你的系统．
以 root 身份，执行 make install．这将编译 Java 程式，加上你系统特定的资讯并安装许多档案．如果你希望拥有本文的 HTML 版本以及一份 HTML 测试文件，改用 make all．
然後应该就可以用了．


New Page 1

标题： ■ Java CGI HOWTO 中译版 : 执行一个 Java CGI 程式
姓名 ：David H. Silber
Email：dhs@orbits.com
地址 ：
转摘 ：http://member.netease.com/

返回

4. 执行一个 Java CGI 程式
4.1. 以 CGI 模式执行 Java 程式的障碍
从 web 伺服器执行 Java 程式有两个主要的问题:

4.1.1. 你不能像一般执行档一样执行 Java 程式
你必需执行 Java 的执行时刻(run-time)解译器并且以命令列的方式提供初始类别(程式执行所需)．在一个 HTML form 里面没有办法提供命令列给 web 伺服器．

4.1.2. Java 程式没有一般的方法可以取得环境变数
Java 程式所需的每个环境变数都必需被传入． (在 Java 程式中)没有类似 C 语言的 getenv() 函数．

4.2. 执行 Java CGI 解决问题
为了处理这些困难，我写了一个 CGI 指令稿程式，提供 Java 解译器所需的资讯．

4.2.1. java.cgi 指令稿
这个指令稿管理 HTTP 伺服器与你希望使用的 Java CGI 程式之间的互动．它从 server 端提供的资料中取出你想要执行程式的名称．它将所有的环境变数资料将髹到一个暂存档里．然後，它将这个档案以及程式名称加命令列中，执行 Java 的执行时刻解译器．

java.cgi 指令稿的设定与安装在 决定你的本地目录策略 一节说明．

4.2.2. 从 HTML form 中引发 java.cgi
使用 Java CGI 程式的 HTML form 以下面的方式指定其行为:

<form action="/cgi-bin/java.cgi/CGI_Test" method="POST">

其中 /cgi-bin/ 是你本地端的 CGI 二进位执行档目录， java.cgi 是允许我们从 web 上执行 Java 程式的前端，而 CGI_Test 是一个欲执行的 Java 程式名称的例子．


New Page 1

标题： ■ Java CGI HOWTO 中译版 : 使用 Java CGI 类别
姓名 ：David H. Silber
Email：dhs@orbits.com
地址 ：
转摘 ：http://member.netease.com/

返回

5. 使用 Java CGI 类别
目前为止支援三个主要类别 -- CGI, Email 以及 HTML．我正在考虑分别加上处理 MIME 格式输入与输出的类别 -- MIMEin & MIMEout．

也有一些用来支援和测试的类别． CGI_Test, Email_Test 以及 HTML_Test 是拿来测试你的安装用的．你也可拿来当做你自己程式中使用这些类别库的起点． Text 类别是 Email 与 HTML 的基底类别．

5.1. CGI
5.1.1. 类别语法
public class CGI

5.1.2. 类别描述
CGI 类别持有的「CGI 资讯」 -- web 伺服器所设定的环境变数以及按下 submit 时由 form 所传送来的名称/数值．所有的资讯都被存放在类别物件 Properties 中．

这个类别位於 ``Orbits.net'' 包装(package)中．

5.1.3. 成员摘要

--------------------------------------------------------------------------------

CGI() // 建构子
getNames() // 取得名称的串列
getValue() // 取得指定名称的值

--------------------------------------------------------------------------------

5.1.4. 请参阅
CGI_Test.

5.1.5. CGI()

目的
建构一包含可用 CGI 资料的物件

语法
public CGI()

描述
当一 CGI 物件被建立时，所有可用的 CGI 资料被存放在新物件的局部储存空间中．

5.1.6. getNames()

目的
列出已定义对应值的名称．

语法
public Enumeration getNames ()

描述
提供所有已定义对应值的名称的完整列表．

返回
所有名称的 Enumeration 物件．

5.1.7. getValue()

目的
取回所指定对应於 name 的 value．

语法
public String getValue ( String name )

描述
这个方法提供由 HTML form 送入的 names 与 values 之间的对应．

参数

name
所选择的键值．

返回
一个包含对应值的 String 物件．

5.2. CGI_Test
这个类别提供两个功能，一个如何使用 CGI 类别的例子以及一个用来确定 Java CGI 套件运作正常的测试程式．

5.2.1. 成员摘要

--------------------------------------------------------------------------------

main() // Program main().

--------------------------------------------------------------------------------

5.2.2. 请参阅
CGI.

5.2.3. main()

目的
提供 main() 方法．

语法
public static void main( String argv[] )

描述
这是 CGI 程式的入口，只不过返回可用的名称/数值对与其现值的列表．

参数

argv[]
由 java.cgi 指令稿传入的参数．目前未使用．

5.3. Email
5.3.1. 类别语法
public class Email extends Text

5.3.2. 类别描述
讯息由 Text 类别的 add*() 方法所建立，加入电子邮件专用的方法．完成後，讯息被送到它的目的地．

这个类别位於 ``Orbits.net'' 包装中．

5.3.3. 成员摘要

--------------------------------------------------------------------------------

Email() // 建构子
send() // 送出电子邮件讯息
sendTo() // 增加讯息的目的地
subject() // 设定讯息的主题

--------------------------------------------------------------------------------

5.3.4. 请参阅
Email_Test, Text.

5.3.5. Email()

目的
建立一包含电子邮件讯息的物件．

语法
public Email()

描述
建立一空的讯息以利由此类别方法加以完成．

请参阅
Text.

5.3.6. send()

目的
送出电子邮件讯息．

语法
public void send ()

描述
本方法编排并送出讯息．如果目的位址还未设定，将不会有动作发生．

5.3.7. sendTo()

目的
增加本讯息的目的地．

语法
public String sendTo ( String address )

描述
将 address 加入到目的地列表中．一份电子邮件目的地的数目是没有限制的．不过我相信如果你建了过大的列表，你将可能会超过你的邮件传送代理程式(MTA) 所能接受的大小或用光你的记忆体．

参数

address
本讯息欲送达的一个目的地．

5.3.8. subject()

目的
设定本讯息的主题．

语法
public void subject ( String subject )

描述
本方法设定电子邮件的 Subject: 栏位．如果呼叫超过一次以上，会使用最後一次呼叫的结果．

参数

subject
Subject: 栏位的文字．

5.4. Email_Test
这个类别提供一个如何使用 Email 类别的例子以及一个用来确定 Java CGI 套件运作正常的测试程式．

5.4.1. 成员摘要

--------------------------------------------------------------------------------

main() // Program main().

--------------------------------------------------------------------------------

5.4.2. 请参阅
Email.

5.4.3. main()

目的
提供 main() 方法．

语法
public static void main( String argv[] )

描述
这是 CGI 程式的入口，返回可用的名称/数值对与其现值的列表．它也将列表送到由 Email 变数所指定的位址．

参数

argv[]
由 java.cgi 指令稿传入的参数．目前未使用．

5.5. HTML
5.5.1. 类别语法
public class HTML extends Text

5.5.2. 类别描述
讯息由 Text 类别的 add*() 方法所建立，并加入 HTML 专用的方法．完成後，讯息被送到它的目的地．

目前，还没有错误检查机制以确保列表建立的方法被以正确的顺序使用．因此程式设计者必须自行确定没有违反 HTML 的语法．

这个类别位於 ``Orbits.net'' 包装中．

5.5.3. 成员摘要

--------------------------------------------------------------------------------

HTML() // 建构子
author() // 设定文件作者的名字
definitionList() // 起始一定义列表
definitionListTerm() // 在定义列表中增加一项目
endList() // 结束列表
listItem() // 在列表中增加一项目
send() // 送出此 HTML 讯息
title() // 设定文件标题的文字

--------------------------------------------------------------------------------

5.5.4. 请参阅
HTML_Test, Text.

5.5.5. HTML()

目的
建立一包含 HTML 讯息的物件．

语法
public HTML()

描述
建立一空的讯息以利由 HTML 方法加以完成．

请参阅
Text.

5.5.6. author()

目的
设定文件作者的名字．

语法
public void author ( String author )

描述
将文件的作者名字设定为 author．

参数

author
用来作为此讯息作者的文字．

请参阅
title().

5.5.7. definitionList()

目的
起始一定义列表．

语法
public void definitionList ()

描述
起始一定义列表．一个定义列表是一种特别的列表，列表中的每一项是由 项目 其後跟著定义的 文字 所形成的．一定义列表的起始应跟著(至少)一项目/文字配对以及一个 endList() 方法的呼叫． 请注意，目前列表不能是巢状的．

请参阅
definitionListTerm(), endList(), listItem().

5.5.8. definitionListTerm()

目的
在定义列表中增加一项目．

语法
public void definitionListTerm ()

描述
在定义列表中增加一项目．目前列表的项目部份的文字应该在此方法被呼叫後并且在对应的 listItem 方法被呼叫前加入．

请参阅
definitionList(), listItem().

5.5.9. endList()

目的
结束一列表．

语法
public void endList ()

描述
本方法结束一列表．注意，目前列表不能是巢状的．

请参阅
definitionList().

5.5.10. listItem()

目的
在列表中增加一项目．

语法
public void listItem ()

public void listItem ( String item )

public boolean listItem ( String term, String item )

描述
在列表中增加一项目．如果使用第一种形式，目前列表项目的文字应在此方法被叫後并在任何其它列表方法被呼叫前加入．在第二及第三种形式中，item 文字被指定为方法的参数而不是在其後被加入．第三种形式是定义列表专用并且同时指定列表的项目与定义文字部份．

参数

item
此列表项目的文字．

term
此定义列表的项目部份的文字．

请参阅
definitionList(), definitionListTerm(), endList().

5.5.11. send()

目的
送出此 HTML 讯息．

语法
public void send ()

描述
送出此 HTML 讯息．

5.5.12. title()

目的
设定文件标题的文字．

语法
public void title ( String title )

描述
设定此文件的标题文字．

参数

title
此文件标题的文字．

请参阅
author().

5.6. HTML_Test
这个类别提供一个如何使用 HTML 类别的例子以及一个用来确定 Java CGI 套件运作正常的测试程式．

5.6.1. 成员摘要

--------------------------------------------------------------------------------

main() // Program main().

--------------------------------------------------------------------------------

5.6.2. 请参阅
HTML.

5.6.3. main()

目的
提供 main() 方法．

语法
public static void main( String argv[] )

描述
这是 CGI 程式的入口，返回在一 HTML 文件中可用的名称/数值配对与其现值的列表，并将每一名称/数值配对显示在一定义列表的元素里．

参数

argv[]
由 java.cgi 指令稿传入的参数．目前未使用．

5.7. Text
5.7.1. 类别语法
public abstract class Text

5.7.2. 类别描述
本类别为 Email 与 HTML 的基础类别．讯息以此类别的方法建立，并以衍生类别的方法完成并编排．

这个类别位於 ``Orbits.net'' 包装中．

5.7.3. 成员摘要

--------------------------------------------------------------------------------

Text() // 建构子
add() // 加入文字到此物件
addLineBreak() // 加入分行符号
addParagraph() // 加入分段符号

--------------------------------------------------------------------------------

5.7.4. 请参阅
Email, HTML.

5.7.5. add()

目的
在此项目中加入文字．

语法
public void add ( char addition )

public void add ( String addition )

public void add ( StringBuffer addition )

描述
在这个文字项目的内容中加入 addition．

参数

addition
加入此文字项目的文字．

请参阅
addLineBreak(), addParagraph().

5.7.6. addLineBreak()

目的
强迫在目前文字位置分行．

语法
public void addLineBreak ()

描述
在目前位置加入一分行符号．

请参阅
add(), addParagraph().

5.7.7. addParagraph()

目的
起始一新的段落．

语法
public void add ()

描述
在目前的文字位置起始一新的段落．

请参阅
add(), addLineBreak().


New Page 1

标题： ■ Java CGI HOWTO 中译版 : 未来的计画
姓名 ：David H. Silber
Email：dhs@orbits.com
地址 ：
转摘 ：http://member.netease.com/

返回

6. 未来的计画

Email 类别的扩充:
Email( int capacity )
用来当我们知道需多少空间来储存讯息时．

sendTo( String [] address )
增加原始电子邮件目的地的列表．

sendCc( String address )
增加一个复制电子邮件目的地．

sendCc( String [] address )
增加复制电子邮件目的地的列表．

sendBcc( String address )
增加一个 Blind Carbon-Copy 的电子邮件目的地．

sendBcc( String [] address )
增加 Blind Carbon-Copy 的电子邮件目的地列表

HTML 类别的扩充:
HTML( int capacity )
用来当我们知道需多少空间来储存讯息时．

public void unorderedList()
起始一无序列表．

public void orderedList()
起始一有序列表．

public void directoryList()
起始一目录列表．

public void menuList()
起始一选单列表．

void anchor( String anchorName )
指定一锚(anchor)．

void link( String url, String text )
指定一连结．

void applet( String url, String altText )
指定一 applet 连结．

允许巢状的 HTML 列表．
增加错误检查码以强迫修正 HTML 列表格式码的顺序．
环境变数资料的档案位置应能由 Makefile 设定．
除去在处理 GET 方法的资料传送时出现之假的空名称/数值对．
考虑让 CGI 实作 java.util.Enumeration 界面以依序地提供变数名称．
加入一 Test 类别，使用本套件中的每个方法．
说明 CGI_Test, Email_Test 与 HTML_Test 如何相互建立以提供侦错目的用的渐进测试．
说明如何测试使用本套件的每一个特徵．


New Page 1

标题： ■ Java CGI HOWTO 中译版 : 版本修改记录
姓名 ：David H. Silber
Email：dhs@orbits.com
地址 ：
转摘 ：http://member.netease.com/

返回

7. 版本修改记录
7.1. 由 0.3 到 0.4 的修改

增添 HTML 类别提供的基本功能．
增加 HTML_Test 类别与 javahtmltest.html-dist．
增加 HTML 方法来处理定义列表．

7.2. 由 0.2 到 0.3 的修改

加入 Text 与 Email 类别． HTML 也被加入，但此时只是一小部份而已．
将不同的类别放入包装中．主要的类别在 Orbits.net.*，支援用的类别 Text 放在 Orbits.text.Text．
将 CGItest 改为 CGI_Test．
增加 Email_Test 类别．

7.3. 由 0.1 到 0.2 的修改

环境变数被放入一暂存档中而不是勉强挤入 Java 解译器的命令列里． CGI 类别与 java.cgi 已被修改．
将 javacgitest.html 文件加入成为套件的一部份．
安装时由 make 所修改的档案全都以结尾 -dist 来命名．


New Page 1

标题： ■ Kernel HOWTO 中译版 : 简介
姓名 ：Brian Ward
Email：bri@blah.math.tu-graz.ac.at
地址 ：
转摘 ：http://member.netease.com/

返回

1. 简介
你是否需要阅读这份文件? 如果你有下列任何症状之一的话，是的：

``哎呀！这套 wizzo-46.5.6 软体说它需要 1.8.193 版的核心，而我却仍然只有 1.0.9 版！''
比较新的核心之一□面有你正好需要的一个设备驱动程式．
你对於如何编译核心真的一无所知．
``在 README 档案里面真的就是全部的资料了吗?''
你来，你试，它还是不动．
你需要某事给予一直要求你为他们安装核心的人们．

1.1. 请先看此!
这份文件中的某些□例假设你有 GNU tar，find 以及 xargs．这些是 Linux 套件里的标准工具，应该不是问题．文件中也假设你知道你系统的档案系统架构，如果你并不知道，最好赶快写下一份 mount 指令在系统正常运作下，所显示的结果作为参考(或者是一份 /etc/fstab 的列表，如果你能够看得懂)．这些资讯很重要，而且，除非你重新分割或加入新的磁碟，重新安装你的系统以及做诸如此类的操作，否则它们不会变动．

本文写作时最新``产品''的核心版本号码是 2.0.30，也就是说本文的参考及例子是对应於该版本的．虽然我尝试让这篇文章尽量跟版本无关，核心却不断地在发展中．因此如果你取得一新的版本，它不可避免地会有一些不同．当然，这应该不会造成大问题，但它可能会制造一些混淆．

有两种版本的 Linux 核心原始码，``产品'' 与 ``发展中'' 的．产品版本从 1.0.x 开始而且目前是以偶数编号发表的; 1.0.x 是产品，1.2.x 是产品， 2.0.x 也是．这些版本应该比较稳定，在发表时是没有臭□(bug)的版本．发展中的核心 (1.1.x, 1.3.x 等等) 是作为测试用的，给那些想要测试最新而且可能有许多臭□的人用的．已经警告过你了．

1.2. 文章风格说明
看起来像这样 text 的文字或者是某样将出现你的萤幕上的东西，一个档名，或是某样可被直接键入的东西，像是命令，或命令的选项(如果你看的是纯文字档案，它看起来没什麽不同)．命令与其它的输入经常被框起来(用` ')，这经常引起典型的标点符号问题: 如果这样的项目出现在句子的最後面，人们时常会在命令後面加上一句号 `.'，因为美国人的引号习惯将句号放入引号里面．即使用常识(而不幸的是，这假设了拥有此``常识''的人是习惯於美国式的引号)想也知道应先将这标点去掉，但很多人总是忘记．所以在此情形下我将句号放在引号外头．换句话说，当我叫你要打 ``make config'' 时，我会写 `make config'，而不是 `make config.'．


New Page 1

标题： ■ Kernel HOWTO 中译版 : 重要问题与解答
姓名 ：Brian Ward
Email：bri@blah.math.tu-graz.ac.at
地址 ：
转摘 ：http://member.netease.com/

返回

2. 重要问题与解答
2.1. 不管怎麽样，核心到底是做什麽的?
在 Unix 系统中，像是你的程式与硬体的一个仲裁者．首先，它为所有执行中的程式(程序)做记忆体管理，并且确保它们都能够平均(或不平均，如果你愿意)的分享处理机的运算资源．此外，它还提供了一个良好的介面让刚刚提到的程式能透过它与你的硬体沟通．

其实核心所处理的工作比这还要更复杂一些，不过这些基本的功能是最必要知道的．

2.2. 我为什麽要更新核心?
比较新的核心一般来说会提供更强的能力来与更多种奇奇怪怪的硬体沟通(也就是说，它们拥有更多的设备驱动程式)，它们能够有更好的行程管理，它们能够执行的比旧的版本更有效率，它们可能比旧的版本来的更稳定，而且它们修正了旧版里的一些错误．大部分的人是因为他们需要那些新的设备驱动程式以及错误修正的部份而更新核心．

2.3. 较新的核心支援那些硬体?
请看 Hardware-HOWTO 文件．另一个方法是，你可以查看 Linux 原始程式码中的 `config.in' 档，或者就在当你试著去 `make config' 时找出来． `make config' 将会让你看到标准的核心原始程式码支援的所有硬体，但这并不是 Linux 所支援的全部硬体；许多普通的设备驱动程式(像是 PCMCIA 驱动程式以及某些磁带机的驱动程式)是个别维护及发行的可载入模组．

2.4. 我需要那个版本的 gcc 或是 libc ?
Linus 对这个问题的建议放在 Linux 原始程式的 README 档案□头．如果你没有该版本或是更新的版本，新版的 gcc 应该会告诉你是否需要更新 libc 的版本．这两个操作都不会有什麽问题，只要照著说明做就可以了．

2.5. 什麽是可载入模组?
它们是核心的一部分(通常是设备驱动程式)，但是并没有编译到核心里面去．它们被分别编译，然後几乎可以在任何时候将它们插入运作中的核心或从中取出．由於它的便利性，这已经成为一种增加东西到核心里去的较好方式．许多常用的设备驱动程式，例如 PCMCIA 驱动程式以及 QIC-80/40 磁带机的驱动程式就是可载入模组．

2.6. 我需要多大的磁碟空间?
这与你系统的特殊配置有关．首先，压缩过後的 Linux 原始程式码在 2.0.10 版时约占 6 MB．许多站台在解压缩後仍会保留一份．解压缩以後这将占掉约 24 MB．但这还不是全部 — 你将会需要更多的磁碟空间来实际编译这些东西．这与你配置多少东西到你的核心里头去有关．例如，在某部机器上，我有网路，3Com 3C503 的驱动程式，并且配置了三种档案系统，而这全部共需要 30 MB．加上压缩过的 linux 原始程式码，这个配置大概需要用掉你 36MB ．在另外一个系统上，不需要支援网路设备(但仍然需要支援网路)，加上音效卡，结果吃掉更多空间．还有，一个新版本的核心几乎总是比旧版本的占更大的空间．所以，一般来说，如果你有许多种硬体设备的话，确定你有足够的硬碟空间来容纳这个配置． (以今日的价格来说，对於储存空间的问题我不能不建议你再买一台磁碟机．)

2.7. 这需要多久的时间?
对大部份的人而言，答案是``很久''．你的处理机速度有多快，以及你拥有的记忆体数量有多少将是决定所需时间的主要因素，但是，在把多少东西配置到核心里头去这方面还是可以做点努力．在一台有 16 MB 记忆体的 486DX4-100 电脑上，一个有五种档案系统、支援网路、以及音效卡驱动程式的 1.2 版核心可以在二十分钟以内完成．类似的配置，在一台 386DX/40(8 MB 记忆体)上大约需要要 1.5 个小时．在编译核心时通常一些好的建议是去喝一点咖啡，看点电视，织些毛线，或任何你喜欢的事．如果你的机器真的很慢的话你也该换台较快的机器．


New Page 1

标题： ■ Kernel HOWTO 中译版 : 如何真正进行核心的配置?
姓名 ：Brian Ward
Email：bri@blah.math.tu-graz.ac.at
地址 ：
转摘 ：http://member.netease.com/

返回

3. 如何真正进行核心的配置?
3.1. 取得原始程式码
你可以经由匿名 ftp 站从 ftp.funet.fi 的 /pub/Linux/PEOPLE/Linus，或是其它 MIRROR 站取得．([译注] 台湾可从 ftp.edu.tw 取得．) 档案名称一般是以标记成 linux-x.y.z.tar.gz 为代表，其中的 x.y.z 是版本编号．较新的(更好的?)版本以及修补档一般是放在类似 `v1.1' 以及 `v1.2' 这样的子目录下．数字最大的是最新的版本，而且通常是``测试版''，也就是说如果你对 beta 或 alpha 版感到不安的话，你应该停留在主要的发行版本上．

强烈建议你去找 mirror 的 ftp 节点，而不要直接到 ftp.funet.fi 去! 底下是一些 mirrors 以及其他节点的简要列表:

USA: sunsite.unc.edu:/pub/Linux/kernel

USA: tsx-11.mit.edu:/pub/linux/sources/system

UK: sunsite.doc.ic.ac.uk:/pub/unix/Linux/sunsite.unc-mirror/kernel

Austria: ftp.univie.ac.at:/systems/linux/sunsite/kernel

Germany: ftp.Germany.EU.net:/pub/os/Linux/Local.EUnet/Kernel/Linus

Germany: sunsite.informatik.rwth-aachen.de:/pub/Linux/PEOPLE/Linus

France: ftp.ibp.fr:/pub/linux/sources/system/patches

Australia: sunsite.anu.edu.au:/pub/linux/kernel

一般来说，sunsite.unc.edu 的 mirror 站是很好找的．档案 /pub/Linux/MIRRORS 包含了已知的 mirror 节点．如果你没有办法上 ftp ，有个存放 linux 的 BBS 系统列表会定期刊登在 comp.os.linux.announce 上，试著到那边去找一下．

如果你想寻找一般的 Linux 资讯与套件，去 http://www.linux.org/．

3.2. 解开原始程式码的包装
确定你是以`root'的身份签入，然後 cd 到 /usr/src． 如果你安装 Linux 时已经安装了核心原始程式码，在这个目录底下应该已经存在一个叫做 `linux' 的子目录．这是旧版的 linux 原始程式码．如果你还有磁碟空间而且想要玩得安全一点，那麽你会想要保留这个子目录的．有个好主意是根据你目前使用的核心版本来修改这个子目录的名称． `uname -r' 这个指令将会告诉你目前的核心版本．所以，如果 `uname -r' 显示 `1.0.9'，你就可以把 `linux' 改名(用 `mv')为 `linux-1.0.9'．如果你是个鲁莽型的人，那就直接把这个子目录清除掉．无论是哪一种情况，反正只要确定在解开全部的原始程式码之前，/usr/src 目录下没有 `linux' 这个子目录就对了．

在 /usr/src 目录下，用 `tar zxpvf linux-x.y.z.tar.gz' 来解开原始程式码的包装 (如果你拿到的是 .tar 的档案，後面没有加上 .gz，那就用 `tar xpvf linux-x.y.z.tar')．你将会看到原始程式的内容飞逝而过．当它完成以後，在 /usr/src 将会出现一个新的 `linux' 子目录． cd 到 linux 目录下然後查看 README 档，里面应该会有一段标题为 `INSTALLING the kernel' 或类似的文字．如果适当的话，先依照说明里的指示 — 建立该有的符号链结，移除过时的 .o 档案等等等诸如此类的工作．

3.3. 配置核心
注意：这部份内容有些是重覆 Linus 的 README 档案中的相应章节或加以修订．

在 /usr/src/linux 下执行 `make config' 这个命令将会启始一个指令稿，而这个指令稿会问你各种问题．它需要 bash ，所以要确定 bash 是 /bin/bash，/bin/sh 或 $BASH．

还有其它种 `make config' 的方式你可能会觉得更容易使用．对那些执行 X Window 的人你如果有装 Tk 的话可以试著用 `make xconfig'． `make menuconfig' 是给那些有装 (n)curses 而且喜欢文字模式选单的人用的．这些界面有个明显的好处: 如果在配置过程中你不小心犯了错，可以简单地回去修正．

你现在该准备好回答这些问题，通常用 `y' 或 `n' 就可以了．设备驱动程式通常会有一个 `m' 选项．这表示``模组(module)''，表示说系统将会编译它，但不会直接放进核心里，而是做为一可载入模组．一个有趣的说法是表示``maybe''．有一些很明显或是不重要的选项将不会在此加以说明．请见`` 其它配置选项''一节对其中的简短说明．

在 2.0.x 或以後的版本中有一个 `?' 选项，提供了这个配置参数的简短描述．这些资讯应该都是最新的．

3.3.1. Kernel math emulation (核心的数学运算模拟)
如果你没有数学辅助运算处理机(你只有一台单纯的 386 或 486SX)，那麽你在这里要回答 `y'．如果你已经有数学辅助运算处理机却还回答 `y'，那也不必太担心 — linux 还是会去使用它而忽略掉核心的模拟程式．唯一的影响是编译出来的核心变大了(用掉更多的记忆体)．我听说数学运简模拟很慢; 虽然和本节无太大关系，还是应该注意这对 X Window 系统的效率会有很大影响．

3.3.2. Normal (MFM/RLL) disk and IDE disk/cdrom support (标准硬碟支援)
你在这里差不多都得回答 `y'．它代表的意思是核心将会支援标准的 PC 硬碟，例如大多数人使用的 IDE 界面硬碟．这不包括 SCSI 设备的支援; 这将在後面设定．

然後你会被问到关於 ``old disk-only'' 与 ``new IDE'' 驱动程式的事．你应该两者选一; 主要的差别是旧的驱动程式只支援单一界面两部磁碟机，而新的驱动程式支援第二界面及 IDE/ATAPI 光碟机．新的驱动程式比旧的大约多 4K，而且应该是``改良的''，也就是说除了可能包含些许错误之外，它应该会改善你的磁碟效率，特别是如果你有较新的 EIDE 硬体的话．

3.3.3. Networking support (网路支援)
原则上，如果你有连接网路，譬如说，你有 Internet 连线，或是你将使用 SLIP，PPP，term 或其它方式拨接到 Internet 上的话，回答 `y'． 然而，某些软体套件(例如 X Window 系统)需要网路支援，即使你的机器并不真正连接到网路上．这情形你也应该回答 `y'． 然後，你会被问到是否需要支援 TCP/IP 网路，如果你不十分确定，就回答 `y'．

3.3.4. Limit memory to low 16MB (制记忆体在 16 MB)
可能会有一些不良的 386 DMA 控制器无法正确地定址到 16 MB 以上的记忆体位址； 如果你的机器刚好有这种(罕见)情况时，那麽你也就只好回答″ y ″了．

3.3.5. System V IPC
一个 IPC (行程内通讯，Interprocess Communication) 的定义就在 Perl 书中的注解． 这并不大奇怪，一些 Perl 程式设计者用它来让行程之间互相沟通，就像许多其它套件(最著名如 DOOM)一样． 因此除非你完全了解你在做什麽，不然最好别回答 n．

3.3.6. Processor type (386, 486, Pentium, PPro) (微处理机种类)
(在较旧版本的核心中为: Use -m486 flag for 486-specific optimizations，使用 -m486 旗标针对 486 做最佳化)

按照惯例地，这是对一特别的微处理机做某种最佳化; 核心仍可在其它晶片上跑得很好，但可能会比较大些． 不过，在较新版本的核心上，已经不是这个样子了．因此你应该正确地回答你要编译的微处理机种类． ``386'' 的核心可以在所有的机器上工作．

3.3.7. SCSI support (SCSI 的支援)
如果你有 SCSI 设备，那麽就回答 `y'． 接著会有提示要求更进一步的资讯，像是你是否要支援光碟机，磁碟机，还有你使用的是那一种 SCSI 介面卡． 这部份请参阅 SCSI-HOWTO，有更详细的说明．

3.3.8. Network device support (网路设备支援)
如果你有网路卡，或者你想要使用 SLIP，PPP，或是并列埠界面卡，那就回答 `y'． 接著会有提示问你使用的是那一种网路卡，或要使用那一种通讯协定．

3.3.9. Filesystems (档案系统)
这将会有提示要你回答所要支援的档案系统种类，计有：

Standard (minix) — 新的套件不再建立 minix 档案系统，而且很多人不使用它，但是把它配置在核心里仍然是个好主意． 某些``急救磁片''程式会用到它，而且仍然有许多软碟磁片可能用 minix 档案系统，因为 minix 档案系统对於处理软碟片方面较无问题．

Extended fs — 这是扩充档案系统的第一版，现在已经不再使用．使用的时机是，如果你有需要，你就会知道的．如果你觉得怀疑，你就不需要它．

Second extended — 这是现在新发行的套件所广泛采用的档案系统，你可能会有其中一种，所以必须回答 `y'．

xiafs filesystem — 这个档案系统曾经一度很普遍，但是在写这份文件时，我已经不知道有任何人在使用它了．

msdos — 如果你想要在 linux 下使用你硬碟中的 MS-DOS 分割区，或是想将用 MS-DOS 格式化的软碟片挂进来的话，回答 `y'．

ums-dos — 这种档案系统能使 MS-DOS 档案系统拥有更多像 Unix 的特性，像是长档名等等．这对那些不使用 MS-DOS 的人(像我)并不是很有用．

/proc — 另一种神奇的东西(我猜这个概念是无耻地从贝尔实验室里偷过来的)． 它不是你硬碟分割区里的任何东西，而是核心与程序之间的档案系统介面．许多程序工具(像 `ps')都会用到它． 有时可以试著用 `cat /proc/meminfo' 或 `cat /proc/devices'． 某些 shell (特别像是 rc) 使用了 /proc/self/fd (在其它系统里叫做 /dev/fd) 来做输出输入动作． 你几乎应该回答 `y'; 许多重要的 Linux 工具都依赖它来运作的．

NFS — 如果你在网路环境下而且想要由 NFS 来使用其它机器的档案系统，回答 `y'．

ISO9660 — 绝大部分的光碟片都使用这个档案系统．如果你有光碟机而且想在 Linux 下使用，回答 `y'．

OS/2 HPFS — 在编写这份文件的时候，这个档案系统还只支援到 OS/2 HPFS 的读取．

System V and Coherent — 这是为 System V 以及 Coherent 系统的分割区而设的(它们是另一种在 PC 上的 Unix 系统)．

3.3.9.1. 但是我不知道我需要那些档案系统!
好吧，键入 `mount'．它看起来会像这样：

blah# mount

/dev/hda1 on / type ext2 (defaults)

/dev/hda3 on /usr type ext2 (defaults)

none on /proc type proc (defaults)

/dev/fd0 on /mnt type msdos (defaults)

仔细看看每一行；在 `type' 後面的那个字就是档案系统的格式． 在这个例子中，我的 / 和 /usr 分割区是 second extended 格式， 我使用了 /proc ，而且挂有一张以 msdos (bleah) 为档案系统格式的磁片．

如果你有使用 /proc，可以试试 `cat /proc/filesystems'． 它会给你一份目前使用的核心所支援的档案系统列表．

这配置并不常使用．不重要的档案系统会使核心显得臃肿; 参见可载入模组一节的说明以避免此情况，以及`` 陷阱''一节说明为何臃肿的核心不好．

3.3.10. Character devices (字元设备)
在这里，你将会发现许多设备名称，用来设定你的印表机，汇流排滑鼠，PS/2 滑鼠(大部分笔记型电脑使用内建的 PS/2 滑鼠)， 以及一些磁带机驱动程式，以及其它的``字元''设备．当有合适的选项时，回答 `y'．

注意：Selection 这个程式使你可以在 X window 之外使用滑鼠在各个虚拟控制台间做剪贴的动作． 如果你有串列滑鼠的话，这真的很棒，因为它与 X window 之间的沟通良好， 不过如果你用其它种类的滑鼠就需要点技巧了．Selection 曾经一度是选择的配置配项，不过现在已经是标准了．

注意二: Selection 现在已经过时了．现在新的程式名叫 ``gpm''． 它能做更神奇的事，像是转换滑鼠协定，处理多重滑鼠等……

3.3.11. Sound card (音效卡)
如果你想听到 biff 程式大叫的话，回答 `y'． 然後等一下会编译另一个配置程式并详细询问你所有关於音效卡的问题． (注意: 当它问你是否安装完整版本的驱动程式时，你可以回答 `n' 以减少你核心记忆体并只选用你真正需要的．) 如果你有音效卡我强烈建议看一下 Sound-HOWTO 以知道更多的细节．

3.3.12. 其它配置选项
没有将所有的选项都列出来，因为有些经常改变，或是相当自明的(例如 3Com 3C509 support 就是编译这种特别乙太网路卡的驱动程式)， 有一个十分容易理解的所有选项列表(包括将它们放到 Configure 指令稿的方法)可在这个 URL 找到(由 Axel Boldt axel@uni-paderborn.de 所收集):

http://math-www.uni-paderborn.de/~axel/config_help.html
或经由匿名 FTP 站:
ftp://sunsite.unc.edu/pub/Linux/kernel/config/krnl_cnfg_hlp.x.yz.tgz
其中 x.yz 是版本号码．

其後来的核心中(2.0.x 及其後的)，这已被整合到原始程式码中．

3.3.13. Kernel hacking
>这是从 Linus 的 README 里摘录的：

``kernel hacking'' 配置的细节通常会产生一个更大或是更慢的核心(或者是又大又慢)， 而且可能因为将一些常式配置成很活跃地去尝试中断一些不良的程式码以便找出核心里的问题（ kmalloc() ）， 而使得核心变得比较不稳定．所以要产生一个核心``产品''的话，你在这里应该回答 `n'．

3.4. 现在呢? (The Makefile)
在你完成 make config 之後，应该会有一个讯息告诉你核心已经配置好了， 以及要你去``check the top-level Makefile for additional configuration'' 等等讯息．

所以查看一下 Makefile．你应该不必改变它，但是看看无妨． 一旦新核心完成，你也可以用 `rdev' 指令来改变其中的选项．


New Page 1

标题： ■ Kernel HOWTO 中译版 : 编译核心
姓名 ：Brian Ward
Email：bri@blah.math.tu-graz.ac.at
地址 ：
转摘 ：http://member.netease.com/

返回

4. 编译核心
4.1. 清除与确认
当用来进行配置的指令稿执行完成时，它会告诉你去 `make dep' 以及 `clean'． 所以要执行`make dep'．这将确保所有的相依关系，例如 include files 都没问题． 除非你的电脑真的很慢，否则它不会花太久时间的． 完成後，在较旧版本的核心中你还应该做 `make clean'． 这会清除核心编译的所有目的档以及其它东西．在重建一个核心之前不要忘记这个步骤．

4.2. 编译时期
在完成 `make dep' 及 `make clean' 工作之後，你现在可以执行 `make zImage' 或 `make zdisk' (这部份需要长时间)． `make zImage' 将会编译核心，并且在 arch/i386/boot 留给你一个叫做 `zImage' 的档案．这就是新的压缩核心． `make zdisk' 做的事也一样，但是它会把核心放到你所希望的磁片去，只要把这张磁片放在 ``A:''． `zdisk'对於测试新核心很方便；如果它当掉(或工作不正常)，只要把磁片拿掉再用旧的核心启动即可． 如果你意外地删除了核心或是什麽的，它也是个方便的启动办法． 当你把一台磁碟的内容倾倒到另外一台去时，你也可以用它来安装新的系统(除了这些之外还有更多用途！)

所有近来的核心都是压缩过的，所以有个 `z' 在名字前面．压缩过的核心执行的时候会自动将自己解压缩．

4.3. 其他可以``make''的东西
`make mrproper' 将会做更广泛的 `清除' 工作． 这个动作有时候是必须的，所以你可能会希望在每次修补的时候执行它． `make mrproper' 还会将你的配置档案杀掉，所以如果你认为它重要的话应该先做一备份(在 .config)．

`make oldconfig' 会尝试由一旧的配置档案来配置你的核心．它会为你执行 `make config'． 如果你还未曾编译过核心或没有旧的配置档案，那麽你可能不该做这个，因为你几乎确定会更改预设的配置．

参见可载入模组一节对 `make modules' 的说明．

4.4. 安装核心
在你已经获得一个看起来能够照你希望运作的新核心之後，现在是安装它的时候了． 大部份的人使用 LILO (Linux Loader) 来做这件事． `make zlilo' 将会安装核心，然後对它执行 LILO，使你完成所有开机的准备， 但是这只有在 LILO 已经以下列这种方式配置好的时候才可以：核心为 /vmlinuz ， lilo 在 /sbin 下，而且与你的 LILO 配置(/etc/lilo.conf)一致．

另一方面，你可能需要直接使用 LILO．这是一个相当容易安装的软体，然而，它的配置档常使人困扰． 查看配置档(不是旧版的 /etc/lilo/config 就是新版的 /etc/lilo.conf)，看看里面有些什麽． 它看起来像这样子的东西：

image = /vmlinuz

label = Linux

root = /dev/hda1

...

首先，`image =' 设定为已经安装的核心．大部份的人似乎都用 /vmlinuz． `label' 则是给 lilo 用来决定现在要启动的是那个核心或作业系统， 而 `root' 则是这个特别的作业系统的根目录 /． 备份一份旧的核心，然後将你做的 zImage 拷贝进去(例如，如果你用 `/vmlinuz' 的话，就像这样 `cp zImage /vmlinuz')． 然後，执行 `lilo'，但是在较旧的系统上，你可能必须执行 /etc/lilo/install 或甚至是 /etc/lilo/lilo -C /etc/lilo/config．

如果你想知道更多有关於 LILO 的配置，或是你并没有 LILO 但是你想要安装的话， 从你喜欢的 ftp 节点取得最新的版本然後依说明行事．

要能够从硬碟启动你的旧核心其中之一的话(这是另一个在新核心出状况的情况下保护你自己的方法)， 把 LILO 配置档中所有的(包括) `image = xxx' 拷贝到档案的最底端， 然後把 `image = xxx' 改成 `image = yyy' 其中的 `yyy' 是你备份旧核心所存档的名字． 接著，把 `label = zzz' 改成像是 `label = linux-backup' 然後重新执行 lilo． 你可能得要加上一行 `delay=x'，其中的 x 是以十分之一秒为单位的时间， 这是告诉 LILO 在启动前先等一下，所以你可以中断它的执行(例如用 shift 键)． 然後键入所备份的启动映像之 label (在发生了某些令人不愉快的事情的情况下)．


New Page 1

标题： ■ Kernel HOWTO 中译版 : 修补核心
姓名 ：Brian Ward
Email：bri@blah.math.tu-graz.ac.at
地址 ：
转摘 ：http://member.netease.com/

返回

5. 修补核心
5.1. 使用修补档
核心的小幅更新是以修补档的方式发行．例如，如果你的版本是 1.1.45 ， 而且你注意到出现了一个 `patch46.gz' 可以用来升级它， 这代表你可以藉由使用这个修补档将版本升级到 1.1.46． 你也许会想要先备份原始程式码(`make clean' 然後 `cd /usr/src; tar zcvf old-tree.tar.gz linux' 将会为你造出一份 tar 压缩档，里面就是整个原始程式码与其档案架构)．

现在接著继续上面的例子，假设你已经取得了 `patch46.gz' 并放在 /usr/src 下． cd 到 /usr/src 然後执行 `zcat patch46.gz | patch -p0' (如果并不是压缩过的修补档，那麽就执行 `patch -p0 < patch46')， 你将会看到许多东西飞逝而过(或是慢慢跳过，如果你的电脑真的很慢的话)告诉你它正试著修补程式，以及是否成功． 通常，这个过程快得无法仔细看清楚它的动作，所以你会无法确定它到底有没有成功地执行． 所以你可能会想在 patch 指令中加上 -s 选项，告诉 patch 程式只报告错误讯息就好． (这样你就不会得到许多``嗨! 我的电脑正在做某些改变!''的感觉，不过你可能宁愿这样…) 那麽就得找找看一些可能不是那麽顺利的事．cd 到 /usr/src/linux 并找寻档名结尾为 .rej 的档案． 某些版本的 patch（比较旧的版本，它们可能是在比较早期的档案系统上编译的）会把这些没有成功的操作记录在档名有 # 的档案里． 你可以用 `find' 来替你找；

find . -name '*.rej' -print

会将现行目录及子目录下所有具 .rej 结尾的档名印到标准输出．

如果一切正确无误的话，执行第三节跟第四节所讨论的 `make clean'，`config' 以及 `dep'．

关於 patch 指令另外还有一些选项．如前所述，patch -s 将会抑制除了错误以外的所有其他讯息． 如果你把核心原始程式码放在 /usr/src/linux 以外的地方，在该目录下用 patch -p1 也可以乾净俐落的执行修补任务． 其它的 patch 选项在线上手册(man page)里都有很详细的描述．

5.2. 如果有错误发生
(注意: 本节提到的大部份是指旧版的核心)

通常最常发生的问题是当 patch 修改一个叫做 `config.in' 的档案时，这个档案看起来不怎麽对劲， 因为你修改了一些选项来配合你的机器．这个问题已经小心的注意过了，但还是可能有人会在较旧的版本上遭遇这个问题． 要修正这个问题的话，查看 config.in.rej 这个档案里留下些什麽讯息． 有修改过的部份正常来说会在每一行开始的地方标上 `+' 和 `-'． 查看有标记的附近几行，然後记得它们是设成 `y' 或是 `n'． 现在编辑 config.in 档，然後在适当的地 方把 `y' 改成 `n' 以及 `n' 改成 `y'．执行

patch -p0 < config.in.rej

如果成功的话(没有错误)，那麽你就可以继续配置与编译的工作． 这个 config.in.rej 档还是会留在那里，但是你可以砍掉它．

如果你仍然遭遇其它问题，那麽可能是你安装了一份损坏的修补档． 如果 patch 显示 `previously applied patch detected: Assume -R?'， 你可能使用了一些比你目前的版本编号还低的修补档; 如果你回答 `y'，它会尝试将你的程式码降级，而且几乎一定会失败; 如此，你就需要重新取得一份新的原始程式码．

要还原到修补前的状态的话，在原先的修补档上执行 `patch -R'．

当修补档真的失败的时候，最好的办法是从一个乾净的原始程式码(例如从 linux-x.x.x.tar.gz 档案其中之一)开始，再重新执行．

5.3. 砍掉 .orig 档案
只要做过几次修补以後，那些 .orig 的档案将会开始堆积． 例如，我的一个 1.1.51 版的程式码最後一次做清扫是在 1.1.48 版（我想是吧）． 删除这些 .orig 档案会节省许多的磁碟空间．

find . -name '*.orig' -exec rm -f {} ';'

将会替你照料这件事．某些版本的 patch 会用 ~ 来代替 .orig．

有其它更好的的办法可砍掉这些 .orig 档，就是利用 GNU 的 xargs:

find . -name '*.orig' | xargs rm

或是更安全但有些罗嗦的方法:

find . -name '*.orig' -print0 | xargs --null rm --

5.4. 其它的修补档
有一些并不是由 Linus 发行的其它修补档出现(我将称之为``非标准的'')． 如果你使用了它们，Linus 的修补档可能会而无法正确地执行， 那麽你不是得将它们还原就是得因此而去修改原始程式码或是修补档．这个工作对初学者通常是很讨厌， 所以如果你不想去修改原始程式码(结果通常不大好)，在使用 Linus 的修补档之前先还原这些非标准的修补档，或重新安装新的程式码． 然後试试这非标准的修补档能不能用．如果不能的话，那麽要不你就继续使用旧的核心， 试著修改修补档使其能用，要不就等待(可能是乞求)新版非标准修补档出现．

非标准的修补档有多普遍? 你有可能曾经听过它们．我使用 Bill Paul 的不闪烁修补档来修改我的虚拟控制台，因为我讨厌会闪烁的游标(这个修补档经常为新版核心而更新)． 由於大部份较新的设备驱动程式都已经被发展成可载入模组形式，因此许多非标准的修补档的重要性已逐渐降低．


New Page 1

标题： ■ Kernel HOWTO 中译版 : 附加的套件
姓名 ：Brian Ward
Email：bri@blah.math.tu-graz.ac.at
地址 ：
转摘 ：http://member.netease.com/

返回

6. 附加的套件
你的 Linux 核心有许多在原始程式码本身里面并没有说明的特性； 这些特性一般是经由外来的软体来利用，在这里列出一部分最普遍的：

6.1. kbd
Linux 的控制台有著比你所能吃惊更多的特色．这包括切换字型，重新对映你的键盘，切换显示模式(较新版的核心)的能力等等． kbd 这套软体里有能够让使用者做这些动作的支援程式，还加上一大堆的字型以及几乎足以适用任何键盘的一些键盘对映表． 它可在放置核心原始码的同一站台找到．

6.2. util-linux
Rik Faith (faith@cs.unc.edu) 收集了一大堆 Linux 的工具，叫做 util-linux． 现在是由 Nicolai Langfeldt (util-linux@math.uio.no) 所维护． 可从 sunsite.unc.edu 的 /pub/Linux/system/misc 取得． 它包括了像 setterm，rdev 以及 ctrlaltdel 与核心有关的工具． 就像 Rik 所说的，不要想都不想就把它装上去! 你不需要安装此套件中的每一个东西，而且如果你这样做的话可能会引起严重的问题．

6.3. hdparm
像很多软体一样，这曾经是一个核心修补档及其支援程式． 这些修补档被放入商业核心中，而用来最佳化以及调适你硬碟的支援程式一般是分开发行的．

6.4. gpm
gpm 是 general purpose mouse 的简写． 这个程式可以让你使用不同种类的滑鼠在虚拟控制台之间剪贴，以及做一些其它的事情．


New Page 1

标题： ■ Kernel HOWTO 中译版 : 一些陷阱
姓名 ：Brian Ward
Email：bri@blah.math.tu-graz.ac.at
地址 ：
转摘 ：http://member.netease.com/

返回

7. 一些陷阱
7.1. make clean
如果你的新核心会做一些真的很奇怪的事，有可能是因为在编译核心前你忘了做清除 make clean． 症状从你的核心不正常地崩溃到奇怪的输出入问题，一直到可怜的执行效率等等不一而足，可以是任何事． 最好也要确定你有做 make dep．

7.2. 巨大或缓慢的核心
如果你的核心占用了大量的记忆体，或者它真的是很大很大，也或者是即使用你全新的 786DX6/440 来编译却都还像是永远编译不完的话， 那麽有可能是因为你配置了太多不必要的东西(设备驱动程式，档案系统等等)． 如果你不会用到某些东西，那就不要配置它，因为它真的会占用记忆体． 核心过於臃肿最明显的症状就是发生记忆体与磁碟之间异常大量的资料交换． 如果你不是用那种声音听起来好像是喷射机降落的旧型 Fujitsu Eagles 硬碟，检查一下你的核心配置．

你可以找出你机器上全部记忆体的数量，然後减掉 /proc/meminfo 里面的 ``total mem'' 或 `free' 指令所得的记忆体数量来得知核心使用了多少记忆体． 你也可以执行 `dmesg' (或者也可以查看核心的记录档，它一定在会你的系统里)．看起来就像这一行：

Memory: 15124k/16384k available (552k kernel code, 384k reserved, 324k data)

我的 386 (配置很少垃圾)显示如下：

Memory: 7000k/8192k available (496k kernel code, 384k reserved, 312k data)

如果你`必须'得到一大型核心但系统却不让你做，你可以试试 `make bzimage'． 你可能必须安装新版的 LILO 来做这件事．

7.3. 核心无法编译
如果它没有被编译，那麽可能是有个修补档失败了，或者是你从某个地方拿到的原始程式码有问题． 也有可能是因为你的 gcc 版本不正确或坏掉了(例如含入档有错误)． 确定 Linus 在 README 里所描述的符号链结都有正确建立． 一般说来，如果核心没能编译，这表示在某些地方有严重的错误，重新安装某些工具可能是必须的．

或者可能你用 ELF 编译器 (gcc 2.6.3 或以後的) 来编译 1.2.x 的核心． 如果编译过程中你得到一大堆的 xxxx undefined 的讯息，这可能是你的问题． 修正的方法大部份都很简单．将这几行加到 arch/i386/Makefile 的顶端: arch/i386/Makefile:

AS=/usr/i486-linuxaout/bin/as

LD=/usr/i486-linuxaout/bin/ld -m i386linux

CC=gcc -b i486-linuxaout -D__KERNEL__ -I$(TOPDIR)/include

然後重新执行 make dep 与 zImage．

在少数情况下，gcc 可能会由於硬体问题而当掉．错误讯息会像 ``xxx exited with signal 15'' 之类的，而且会看起来很奇怪． 我本来不想提这点的，不过在我身上也发生过一次 - 我有一些坏的 cache 记忆体，编译器时常会随机地当掉． 如果你有此问题的话先试著重新安装 gcc．如果你将外部 cache 关掉，减少一些 RAM 之後核心就编译成功了，你大概只会觉得可疑．

告诉人们他的硬体有问题常会使人困扰．不过，这不是我发明的． 这是一个 FAQ -- 可以在 http://www.bitwizard.nl/sig11/ 找到．

7.4. 新版的核心似乎不能启动
你没有执行 LILO ，或是没有正确的配置它．有一次我曾经碰到的问题是出在配置档里， 我用了 `boot = /dev/hda1' 而不是 `boot = /dev/hda' (这在刚开始时真的是很讨厌，但是一旦你有了一个可以用的配置档，应该不需要去再去改变它)．

7.5. 你忘了执行 LILO，或系统根本不能启动
噢！现在最好的办法是用磁片启动，并且准备另一张可以启动的磁片(像是`make zdisk'时做的磁片)． 你得知道你的根目录(/)所在的分割区以及它的格式(second extended, minix 等等)． 在下面的例子中，你也得知道你的 /usr/src/linux 原始程式码在那个分割区，它的格式，以及它一般会挂在那儿．

在这个例子中， 根目录 / 是 /dev/hda1，而持有 /usr/src/linux 的分割区是 /dev/hda3，一般会挂在 /usr 下． 它们都是 second extended 档案系统．可以运作的核心映像叫做 zImage ，放在 /usr/src/linux/arch/i386/boot 底下．

这个主意是这样的，假若有一个可以运作的核心映像叫做 zImage，可能可以把它用在新的磁片上． 另外一个不一定会更好的变通办法(这跟你的系统怎麽组成的有关)在说明这个例子之後会讨论到．

首先，从 boot/root 磁片或者是急救磁片开机，然後将持有可运作核心的分割区挂上来：

mkdir /mnt

mount -t ext2 /dev/hda3 /mnt

如果 mkdir 指令显示该目录已经存在，忽略掉不必理会它． 现在，cd 到持有可运作核心的地方．注意:

/mnt + /usr/src/linux/arch/i386/boot - /usr = /mnt/src/linux/arch/i386/boot

把一张格式化过的磁片放进 ``A:'' 磁碟机(确定不是你的 boot/root 磁片!)， 把映像档倾倒到磁片里去，然後配置你的根目录分割区:

cd /mnt/src/linux/arch/i386/boot

dd if=zImage of=/dev/fd0

rdev /dev/fd0 /dev/hda1

cd 到根目录 / 并且卸下标准 /usr 分割区:

cd /

umount /mnt

你现在应该可以从这张磁片正常的开机了．在这次开机後不要忘记执行 lilo (或是其它你曾经做错的什麽事)!

如同前面曾经提过的，还有另外一种很普遍的变通方式． 如果情况是你有一个可以运作的核心在放在 / (例如 /vmlinuz)，你也可以使用它． 假定所有的条件都跟上面的例子一样，而我的核心映像是 /vmlinuz，只要对上面的例子做这些改变: 把 /dev/hda3 改成 /dev/hda1 (/ 分割区)， 把 /mnt/src/linux 改成 /mnt，并且把 if=zImage 改成 if=vmlinuz． 至於前面有关注意如何推导出 /mnt/src/linux/arch/i386/boot 的那个部分可以忽略．

将 LILO 使用在大的硬碟上(超过 1024 磁柱)可能会有问题． 请参见 LILO mini-HOWTO 或其它文件的说明．

7.6. 系统表示 `warning: bdflush not running'
这可以算是一个相当严重的问题．从 1.0 版以後的核心开始(大概是在 1994 年四月二十日左右)， 有个会周期性地更新档案系统缓冲区的程式叫做 `update' 被升级或取代掉了． 取得 `bdflush' 的原始程式码(你应该可以从你取得核心的地方找到)， 然後编译它(你可能会希望在旧版的核心下执行编译及安装)． 它会以 `update' 为名安装它自己并且在重开机以後，新核心应该会运作良好．

7.7. 系统说 undefined symbols 而且无法编译
你可能有一 ELF 编译器(gcc 2.6.3 或以後的)而且是 1.2.x (或更早的)核心原始码． 一般修正的方法是将这几行加到 arch/i386/Makefile 的顶端:

AS=/usr/i486-linuxaout/bin/as

LD=/usr/i486-linuxaout/bin/ld -m i386linux

CC=gcc -b i486-linuxaout -D__KERNEL__ -I$(TOPDIR)/include

这会以 a.out 程式库来编译 1.2.x 核心．

7.8. 无法让我的 IDE/ATAPI CD-ROM 正常工作
很奇怪，一大堆人无法让他们的 ATAPI 光碟机工作，可能是因为有太多事容易出错．

你的光碟机是在一特别 IDE 界面上的唯一设备，它必须被调整为 ``master'' 或 ``single''． 这可能是最常见的错误．

Creative Labs 现在将 IDE 界面放到他们音效卡里． 然而，这将导致一个有趣的问题，虽然有些人只有一个 IDE 界面，许多人在主机板上有两个内建的 IDE 界面(通常在 IRQ15)， 因此一解决的办法是将声霸卡的界面调成第三个 IDE (有人告诉我是 IRQ11)．

这在 1.2.x 的 Linux 核心上会有问题，因为它不支援第三个 IDE 界面(从 1.3.x 系列已开始支援，但它还在发展中，而且不会自动侦测)． 要解决此问题，你有一些选择．

如果你已经有第二个 IDE 埠，如果你没用它或没有两部设备在上面的话就有机会． 将 ATAPI 光碟机从音效卡上拿下来并放到第二个界面上．然後你可以关掉音效卡上的界面，这就可以省下一个 IRQ．

如果你没有第二个 IDE 界面，调整音效卡的界面(不是音效卡的音效部份)到第二界面用的 IRQ15，这样应该会动．

如果因为某些理由非得使用``第三个''界面不可，或是有其它问题， 取得 1.3.x 的核心(例如 1.3.57 就有)，阅读 drivers/block/README.ide 档案． 那里有更多的资讯说明．

7.9. 系统显示关於 obsolete routing requests 的奇怪讯息
取得新版的 route 程式及其它与 route 有关的程式． /usr/include/linux/route.h (这是 /usr/src/linux 下的一个档案)已经做了修改．

7.10. 防火墙功能无法在 1.2.0 上工作
至少升级到 1.2.1 版．

7.11. ``Not a compressed kernel Image file'' (非压缩核心映像档)
不要用在 /usr/src/linux 产生的 vmlinux 做为你的启动核心映像; [..]/arch/i386/boot/zImage 才是正确的．

7.12. 升级至 1.3.x 後在控制台终端机上的问题
将控制台设定档 /etc/termcap 中的 dumb 改为 linux． 你可能会必须增加一项 terminfo．

7.13. 核心升级後似乎无法编译东西
Linux 的核心原始程式码包含了许多的含入档(就是用 .h 结尾的档案)必须为标准的 /usr/include 所参考． 它们通常用这种方法被参考(其中 xyzzy.h 是在 /usr/include/linux 下):

#include <linux/xyzzy.h>

正常情况下，在 /usr/include 下会有一叫做 linux 的连结到你的核心原始码的 include/linux 目录(一般系统在 /usr/src/linux/include/linux)． 如果这个连结没有了，或指到错误的地方，大部份的东西都将无法编译． 如果你觉得核心原始码占了太多的空间而砍掉它，这显然会引发问题． 另一个可能的错误是它的档案权限; 如果你的 root 预设不让其它使用者看到他的档案， 而且你解开核心原始码时没有加上 p (保留档案模式)选项，其它使用者也会无法使用 C 编译器． 虽然你可以用 chmod 指令来修正，不过更容易的方法是重新解开含入档． 你可以一开始你解开整个原始码的同样方法，不过多加了一个参数:

blah# tar zxvpf linux.x.y.z.tar.gz linux/include

请注意: 如果 /usr/src/linux 连结不在的话 ``make config'' 会重建之．

7.14. 增加上限
下面一些□例指令告诉你如何增加核心提供的上限:

echo 4096 > /proc/sys/kernel/file-max

echo 12288 > /proc/sys/kernel/inode-max

echo 300 400 500 > /proc/sys/vm/freepages


New Page 1

标题： ■ Kernel HOWTO 中译版
姓名 ：Brian Ward
Email：bri@blah.math.tu-graz.ac.at
地址 ：
转摘 ：http://member.netease.com/

返回

8. 升级至 2.0.x 的注意事项
核心 2.0.x 版在安装上引入了许多的改变． 在原始程式码里的 Documentation/Changes 档案包含了升级至 2.0.x 版所应知道的资讯． 你可能还需要升级一些关键的套件，例如 gcc，libc 与 SysVInit，并改变一些系统档案．不过，也别紧张．

--------------------------------------------------------------------------------
9. 可载入模组
可载入模组能够节省记忆体，而且很容易设定． 模组的□围已经包含了档案系统，乙太网路卡驱动程式，磁带机，印表机驱动程式，还有更多．

9.1. 安装模组工具
模组工具可以从你取得核心的地方找到，如 modules-x.y.z.tar.gz; 选择与你目前核心版本相等或稍低的最接近的 x.y.z． 用 `tar zxvf modules-x.y.z.tar.gz' 解开． cd 到它产生的目录(modules-x.y.z)，看一下 README，然後按照安装指示执行 (通常很简单，就像 make install 之类的)． 然後你在 /sbin 应该会有这些程式 insmod, rmmod, ksyms, lsmod, genksyms, modprobe, 以及 depmod． 如果你想的话，可以用 insmod 里的□例驱动程式``hw''来测试这些工具; 参见 INSTALL 档里的细节说明．

insmod 指令将一个模组插入运行中的核心．模组通会以 .o 为结尾; 上面提到的□例程式就叫做 drv_hello.o，因此要插入此模组，就用 `insmod drv_hello.o'． 要了解目前核心正在使用的模组，用 lsmod 指令．输出看起来像这样:

blah# lsmod

Module: #pages: Used by:

drv_hello 1

`drv_hello' 是这模组的名称，它用了一页 (4K) 的记忆体，而且目前没有其它的核心模组依赖於它． 要移除此模组，用 `rmmod drv_hello'．注意 rmmod 需要的是模组名称，而不是档案名称; 就是你从 lsmod 指令列出来的．其馀工具的作用在线上手册中都有说明．

9.2. 与核心发行的模组
在 2.0.30 版中，几乎所有的东西都可以变成可载入模组． 要使用可载入模组，首先确定你没有将其配置到正常的核心里，也就是说，在 `make config' 时不是回答 y． 编译新核心并用它来开机．然後，再次 cd 到 /usr/src/linux，然後执行 `make modules'． 这将编译所有你未指定在核心配置里的模组，并将其连结到 /usr/src/linux/modules． 你可以直接由此目录使用，或是执行 `make modules_install' 将其安装到 /lib/modules/x.y.z，其中 x.y.z 是核心版本．

这对处理档案系统上特别便利．你可能并不经常使用 minix 或 MS-DOS 的档案系统． 例如，如果我遇到一 MS-DOS 的软碟片，我会用 insmod /usr/src/linux/modules/msdos.o，并在使用完成後用 rmmod msdos 指令将其去掉． 此过程大约可以节省核心 50K 左右的记忆体．对於 minix 档案系统有一点要注意的就是， 为了要使用``急救磁片''，你应该总是直接将它配置到核心中．

10. 其它配置选项
本节包括了在配置一节中未列出的核心配置选项(在 make config 时)． 大部份的设备驱动程式并未列出．

10.1. General setup (一般设定)
Normal floppy disk support (一般软碟支援) - 就是这个． 你可能会想看一下 drivers/block/README.fd 这个档案; 对 IBM Thinkpad 的使用者来说特别重要．

XT harddisk support (XT 硬碟支援) - 如果你想用老古董的八位元 XT 控制器的话．

PCI bios support (PCI bios 的支援) - 如果你有 PCI，你可能会想打开此选项． 但要小心，某些旧的 PCI 主机板在此选项下可能会当掉．更多关於 PCI 汇流排在 Linux 下使用的资讯可以在 PCI-HOWTO 里找到．

Kernel support for ELF binaries (核心支援 ELF 执行档) - ELF 是一种新的二进位执行档． Linux 似乎正朝此方向前进，所以你可能会要这个．

Set version information on all symbols for modules - 在过去，核心模组与每个新核心一起被编译． 如果你回答 y，它可能让你使用不同 patchlevel 下编译的模组． 参见 README.modules 中的详细说明．

10.2. Networking options (网路选项)
网路选项在 NET-3-HOWTO (或是 NET-什麽-HOWTO)中描述．

11. □诀和技巧
11.1. 重导 make 或是 patch 指令的输出
如果你想要记录这些 `make' 或是 `patch' 指令到底做了些什麽， 你可以把萤幕的输出重导到一个档案去．首先，要知道你用的是是那一种 shell： `grep root /etc/passwd' 然後寻找看起来像 `/bin/csh' 一类的东西．

如果你使用的是 sh 或是 bash，

(command) 2>&1 | tee (output file)

将会把一份 (command) 的输出放到 `(output file)' 这个档案去．

如果是 csh 或 tcsh，用

(command) |& tee (output file)

这个语法．

如果是 rc (注意：你应该不会是用 rc)，语法是

(command) >[2=1] | tee (output file)

11.2. 条件式的核心安装
除了使用软碟片，还有数种在不动旧核心的情况下测试新核心的方法． 不像其它的 Unix 系统，LILO 具有从任何地方启动核心的能力． (不过如果你有大的硬碟，超过 500 MB 的，请参考 LILO 的文件说明将可能引起的问题．) 因此，如果你在 LILO 配置档案中用像这样的

image = /usr/src/linux/arch/i386/boot/zImage

label = new_kernel

你可以在不动旧核心 /vmlinuz 的情况下选择执行新编译的核心(当然，在执行完 lilo 後)． 叫 LILO 启动新核心最简单的方法就是在启动时按下 shift 键(当你在萤幕只看到 LILO 时)， 这会给你一提示符号．此时你可以键入 `new_kernel' 来启动新核心．

如果你想在系统中同时保有数种不同的核心原始程式码(小心，这会用掉大量的硬碟空间)， 最普通的方法就是将其命名为 /usr/src/linux-x.y.z，其中 x.y.z 是核心版本． 然後你可以用符号连结来``选择''一份原始码; 例如，用 `ln -sf linux-1.2.2 /usr/src/linux' 会让 1.2.2 成为目前的核心树． 但在建立符号连结之前，先确定 ln 指令最後一个参数不是一个真正的目录(旧的符号连结没有关系); 否则结果可能不会是你所预期的．

11.3. 核心更新
Russell Nelson (nelson@crynwr.com) 总结了新版核心的改变． 这些是简短的，而且你在升级前可能应该先看一下．可以从匿名 FTP 站 ftp.emlist.com 的 pub/kchanges，

--------------------------------------------------------------------------------
12. 其它可能相关有用的 HOWTOs

Sound-HOWTO: 音效卡与工具
SCSI-HOWTO: 所有关於 SCSI 控制卡与设备的资讯
NET-2-HOWTO: 网路
PPP-HOWTO: 特别关於 PPP 网路的
PCMCIA-HOWTO: 笔记型电脑的驱动程式
ELF-HOWTO: 什麽是 ELF，如何转换等…
Hardware-HOWTO: 支援硬体的概要
Module-HOWTO: 更多与核心模组有关的
Kerneld mini-HOWTO: 关於 kerneld
BogoMips mini-HOWTO: 你可能会有兴趣的

13. 杂项
13.1. 作者
Linux Kernel-HOWTO 的作者及维护人是 Brian Ward (bri@blah.math.tu-graz.ac.at)． 请将任何评论，补充与更正寄给我(更正对我来说是特别重要的)．

你可以从这些 URL 找到我的网页:

http://www.math.psu.edu/ward/
http://blah.math.tu-graz.ac.at/~bri/

虽然我尽可能地去处理电子邮件，但请记住我每天都收到大量的信件，所以可能要花一点时间才会回覆你． 特别是寄信来问我问题的，请尽量非常清楚与详尽地描述你的讯息． 如果你说的是某个无法运作的硬体(或类似的)，我需要知道你的硬体配置是什麽． 如果你要回报错误，不要只是说``我这样试但它给我会错误讯息''; 我需要知道这个错误讯息是什麽． 我可能也想知道你的核心，gcc，libc 的版本是什麽，如果你只是告诉我你用的是这个或那个套件，那没什麽用． 我不介意你问我简单的问题; 请记住，如果你不问，你将永远不会得到解答． 我要感谢每个给我回馈的人们．

如果你写信给我但在一段合理的时间内没有得到回应(三星期或更久)，那麽可能我不小心砍掉了你的信件或诸如此类的(抱歉)． 请再试一次．

我收到许多信件是关於硬体问题的．这没问题，但请了解我并不是熟悉世界上所有硬体的人而且我也不知道我能帮多少忙． 我个人使用的机器有 IDE 与 SCSI 硬碟，SCSI 光碟机，3Com 与 WD 的乙太网路卡，串列滑鼠， PCI 主机板，NCR 810 SCSI 控制器，AMD 386DX40 w/Cyrix 辅助处理器，AMD 5x86，AMD 486DX4 与 Intel 486DX4 处理器 (这只是我在使用而且熟悉的硬体摘要，并不是建议，但如果你想要用，欢迎来询问 :-) )．

0.1 版完成於 1994 年十月三日．本文件可以 SGML, PostScript, TeX, roff 与纯文字格式取得．

13.2. 预定目标
``□诀和技巧'' 一节太少了．我希望能用从别人得到的建议来扩充．

``附加的套件'' 一节也是．

还需要更多的侦错/当机回复资讯．

13.3. 贡献者
包含了一小部份 Linus 的 README 档案 (kernel hacking 选项)．感谢 Linus!

uc@brian.lunetix.de (Ulrich Callmeier): patch -s and xargs.

quinlan@yggdrasil.com (Daniel Quinlan): corrections and additions in many sections.

nat@nat@nataa.fr.eu.org (Nat Makarevitch): mrproper, tar -p, many other things

boldt@math.ucsb.edu (Axel Boldt): collected descriptions of kernel configuration options on the net; then provided me with the list

lembark@wrkhors.psyber.com (Steve Lembark): multiple boot suggestion

kbriggs@earwax.pd.uwa.edu.au (Keith Briggs): some corrections and suggestions

rmcguire@freenet.columbus.oh.us (Ryan McGuire): makeables additions

dumas@excalibur.ibp.fr (Eric Dumas): French translation

simazaki@ab11.yamanashi.ac.jp (Yasutada Shimazaki): Japanese translation

jjamor@lml.ls.fi.upm.es (Juan Jose Amor Iglesias): Spanish translation

mva@sbbs.se (Martin Wahlen): Swedish translation

jzp1218@stud.u-szeged.hu (Zoltan Vamosi): Hungarian translation

bart@mat.uni.torun.pl (Bartosz Maruszewski): Polish translation

donahue@tiber.nist.gov (Michael J Donahue): typos, winner of the ``sliced bread competition''

rms@gnu.ai.mit.edu (Richard Stallman): ``free'' documentation concept/distribution notice

dak@Pool.Informatik.RWTH-Aachen.DE (David Kastrup): NFS thing

esr@snark.thyrsus.com (Eric Raymond): various tidbits

曾寄信给我问问题的人也有很大帮助．

13.4. 版权声明，许可，诸如此类的
Copyright © Brian Ward, 1994-1997.

Permission is granted to make and distribute copies of this manual provided the copyright notice and this permission notice are preserved on all copies.

Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the derived work is distributed under the terms of a permission notice identical to this one. Translations fall under the catagory of ``modified versions.''

Warranty: None.

Recommendations: Commercial redistribution is allowed and encouraged; however, it is strongly recommended that the redistributor contact the author before the redistribution, in the interest of keeping things up-to-date (you could send me a copy of the thing you're making while you're at it). Translators are also advised to contact the author before translating. The printed version looks nicer. Recycle.


New Page 1

标题： ■ Linux Meta-FAQ 中译版 : 简介
姓名 ：Michael K. Johnson
Email：johnsonm@redhat.com
地址 ：
转摘 ：http://member.netease.com/

返回

1. 简介

什麽是 Linux?
Linux 是一个 POSIX 作业系统的独立实作，有著 SYSV 及 BSD 扩充，是从无到有整个写出来的(这表示它看起来及运作上就像 Unix)．它里面没有专利独占的程式码．Linux 在 GNU Public License 下可自由地散布．

它可在 IBM PC 相容机器，有著 ISA 或 EISA(包含了 local bus 的变种 VLB 及 PCI)及 386 或更高级的微处理器上运作．除此之外，它也能在具有 MMU 的某些 Amiga 及 Atari 电脑上执行．这是说具有外部 MMU 的 68020, 68030, 68040, 或 68060． Digital Alpha 的支援现已经很稳定．Red Hat 及 Craftworks 有 Alpha 版的 Linux 套件． Sparc 的支援现也很稳定．Red Hat 有 Sparc 版的 Linux 套件． PowerPC 的支援现在发展多平台版，包括了 Nubus 及 PCI Macintosh, Motorola Powerstack, IBM 830 和 850, 以及其它平台． ARM, StrongARM 及 MIPS 的支援现已完成许多阶段，但仍不实用(hold your breath)．请见 comp.os.linux.announce．

这些平台支援的更多技术资讯请参见 Linux INFO-SHEET，确实的硬体需求参见 Hardware Compatibility HOWTO．

Linux 的核心是由 Linus Torvalds <Linus.Torvalds@.Helsinki.FI> 以及其它志愿者所撰写．大部份在 Linux 上执行的程式是一般 Unix 的免费软体，许多是由 GNU 计画来的．

The Linux INFO-SHEET
上面有 Linux 更多的技术资讯．包括不同平台上的资讯指引，特徵列表，如何取得 Linux，及更多的资讯．

The Linux HOWTOs
有点像 FAQ，然而不是回答常见的问题，而是解释如何做一般的工作，像是整理一份 Linux 的发行版本，建立 Linux 的列印服务，建立基本的 UUCP □送等等．所有 HOWTOs 的最新版本可见 http://sunsite.unc.edu/LDP/HOWTO/HOWTO-INDEX.html 或 ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/．其它具有即时拷贝的 HOWTOs 文件站台有 ftp.cc.gatech.edu 及 tsx-11.mit.edu．

除此之外，还有一些短的，任意格式的文件叫 "mini-HOWTOs"．这些文件涵盖了较特殊的主题，像是 BogoMIPS 或 Color-ls．它们可从 ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/mini/ 及 http://sunsite.unc.edu/LDP/HOWTO/HOWTO-INDEX.html 取得．

Linux 新闻群组
有许多给 Linux 的专门新闻群组．如果你使用 Linux，经常注意 comp.os.linux.announce 是个好主意． comp.os.linux.announce 现由 Lars Wirzenius 所管理．要在此讨论区上陈述意见，写信到 linux-announce@news.ornl.gov．你也可以将 comp.os.linux.announce 的问题直接向 Lars Wirzenius 陈述，地址是 wirzeniu@kruuna.helsinki.fi．

comp.os.linux.announce 是一个受管制的新闻群组，用来发布关於 Linux 的消息(新程式，错误修正等等)．

comp.os.linux.answers 是一个受管制的新闻群组，用来发表 Linux FAQ, HOWTO 文件及其它的文件用的．

comp.os.linux.setup 是一个未管制的新闻群组，用来讨论建立 Linux 系统所遭遇的问题．

comp.os.linux.admin 是一个未管制的新闻群组，用来讨论 Linux 系统的管理．

comp.os.linux.development.system 是一个未管制的新闻群组，专门用来讨论 Linux 的核心发展．唯一可以在那里讨论的应用程式发展问题是与核心密切相关的．所有其它的发展问题多半是一般的 Unix 发展问题而应被放到 comp.unix group，除非它们是与 Linux 有关的应用程式问题，这种情形的话问题应放到 comp.os.linux.development.apps．

comp.os.linux.development.apps 是一个未管制的新闻群组，专门用来讨论 Linux 相关的应用程式发展．它不是用来讨论如何取得 Linux 的应用程式的，也不是用来给那些想看看 Linux 应用程式的人的讨论场所．

comp.os.linux.hardware 是给 Linux 相关的硬体问题用的．

comp.os.linux.networking 是给 Linux 相关的网路发展及建立的问题．

comp.os.linux.x 是给与 Linux 有关的 X Windows 的问题．

comp.os.linux.misc 是一个未管制的新闻群组，用来给不属於任何其它方面的 Linux 讨论．

一般来说，不要在 Linux 新闻群组上重复发表(crosspost)文章． 唯一适合重复发表的是偶而发布在一未管制的群组及 comp.os.linux.announce 的文章．将 comp.os.linux 分割为许多群组的主要原因是为了降低每一群组的文章流量．不遵守这项规则的话将会遭致他人毫不留情的抨击…

其它的新闻群组
不要假设你所有的问题都适合於 Linux 新闻群组只因为你在跑 Linux．你的问题其实是关於任何 Unix 或类 Unix 的 shell 程式写作吗? 那麽试著到 comp.unix.shell 上去问．它是关於 GNU Emacs 的吗? 那麽试著到 gnu.emacs.help 去问．还有，如果你不知还有那些其它的群组可问，只是认为应该是这里了，用有礼的态度试问是否还有更适合你问题的讨论群组．至少这些群组 comp.unix.{questions,shell,programming,bsd,admin}，以及 comp.windows.x.i386unix 应该是对 Linux 使用者有帮助的．

全球资讯网
Greg Hankins, gregh@cc.gatech.edu, 维护 Linux 计画的全球资讯网页．它的 URL 是 http://sunsite.unc.edu/LDP/

Linux Journal
有一本叫 Linux Journal 的杂志在好几年前就发行了．它包含的文章几乎涵盖所有的技术层面，而且几乎对所有的 Linux 使用者都有帮助．在美国订阅是 $22 元，在加拿大及墨西哥是 $27 元，而世界其它的地方都是 $32 元，都是以美金计算．订阅查询可寄电子邮件到 subs@ssc.com 或传真到(美国) 1-206-782-7191，或寄信到 Linux Journal, PO Box 85867, Seattle, WA 98145-1867 USA． SSC 还有一个 PGP public key，如果你想将信用卡号码以编码电子邮件寄出，试试: finger info@ssc.com．

The Linux Software Map
关於 Linux 的免费软体的资讯可在 Linux Software Map(LSM)上取得，可从 http://www.execpc.com/~lsm/ 找到．


New Page 1

标题： ■ Linux Meta-FAQ 中译版
姓名 ：Michael K. Johnson
Email：johnsonm@redhat.com
地址 ：
转摘 ：http://member.netease.com/

返回

2. 取得 Linux
2.1. Linux FTP 站台
最完整的 Linux FTP 站台列表是在 Linux INFO-SHEET，可从 http://sunsite.unc.edu/LDP/HOWTO/INFO-SHEET.html 取得．最重要的站台列在这里; 请看 INFO-SHEET 寻找离你最近的站台(有许多的映射站)．

textual name numeric addr Linux directory
======================= ============== ===============
tsx-11.mit.edu 18.86.0.44 /pub/linux
sunsite.unc.edu 152.2.22.81 /pub/Linux
ftp.kernel.org 206.184.214.34 /pub/linux

这些站是大部份上传档案的``主''站台．有许多的映射站; 请使用离你最近(网路上的距离)的站台．

2.2. 物质媒体上的 Linux
Linux 也以物质媒体形式散布，主要是由一些厂商制作的 CD-ROM．请参阅定期发布在 comp.os.linux.announce 的 Distribution HOWTO，也可从 http://sunsite.unc.edu/LDP/HOWTO/Distribution-HOWTO.html 取得．

2.3. AFS
Linux 可挂上 sipb.mit.edu 的目录 project.linux 由 AFS 取得．

2.4. 商业网路
Compu$erve 有一些 Linux 档案．

2.5. 电子邮件伺服器等
Sunsite 提供 ftp-mail 服务 --- 寄电子邮件到 <ftpmail@sunsite.unc.edu>．

--------------------------------------------------------------------------------
3. Linux 套件
由 Linux 作者散布的仅仅是一个核心而己．其它人将其组合成可用的``套件(distributions)''．这些套件配上由作者发表的核心及软体而成为一完整可运作的套件．大部份的套件包含了系统软体及应用程式，提供``一次买足''的服务．

有好几种的 Linux 套件，可从许多不同的站台取得． Sunsite 几乎映射了所有的套件於 ftp://sunsite.unc.edu/pub/Linux/distributions/．最常被推荐的免费套件是 Red Hat http://www.redhat.com, Debian http://www.debian.org, 以及 Slackware．它们在网际网路上到处都能找到，而且也以 CD-ROM 的形式贩售．

还有其它的 Linux 套件．大部份的商业套件会出现在 Linux Journal 的广告上．

4. Linux 电子邮递列表
最常用来在新特色的发展者或是发表前版本的测试者之间的讨论．参看 FAQ 里的地址．用 help 为信件内容寄到 majordomo@vger.rutgers.edu，你会得到一份说明如何订阅在那里的许多 Linux 电子邮递列表．保留这封信，因为它会告诉你如何自列表上取消订阅，而如果你发出令人生气的抱怨信件到列表上说无法退出列表(因为你没有依照指示且存下这封教你如何取消订阅的信件)，你很可能会因为浪费网路频宽及金钱而惹火大家．

--------------------------------------------------------------------------------
5. 不同程式的文件
许多程式都有随附的文件，通常是一个叫做 README 或类似的档案．小心地阅读它们是个非常好的主意．通常看到已经在文件上被回答过的问题(及解答)是令人厌烦的事情．许多程式也有``线上手册(man pages)''; 用这个指令 man programname 可以得到关於 programname 程式的文件．想知道如何使用 man 指令，用 man man．

大部份的套件将其它关於程式的文件放在 /usr/doc 目录中; 你使用的套件应该包含了如何取用这些文件的说明．

6. 更多的文件
Linux 文件计画(Linux Documentation Project, LDP)正在撰写大量的文件．已经有超过 3000 页的书籍形式的文件公开发行，并有 2000 页左右的线上手册也已经发表了，而且还会有更多．在 http://sunsite.unc.edu/LDP/ 可查看 LDP 所写的文件．

7. 保持最新版本
重要的版本发表，程式以及移植通常会发布在 comp.os.linux.announce．
8. 关於本文件
本文件的最新版本应可从 http://sunsite.unc.edu/LDP/HOWTO/META-FAQ.html 取得．

--------------------------------------------------------------------------------

9. 法律声明
所有商标是属於它们的拥有者．不保证满意．本文无任何保证．

本文的内容是公开的，但如果你引用它们，请保持礼节并说明来源．

Lars Wirzenius <wirzeniu@iki.fi>; 撰写这份文件的第一版，而目前是由 Michael K. Johnson <johnsonm@redhat.com> 所维护的．如果你对於这份文件有任何问题请告诉我．

如果您对中译版有任何问题请与 C.W.Huang <cwhuang@phys.ntu.edu.tw> 联系．

原文

Trademarks are owned by their owners. Satisfaction not guaranteed. No warranties about this document. Void where prohibited.

The content of this document is placed in the public domain, but if you quote it, please be polite and attribute your source.

Lars Wirzenius <wirzeniu@iki.fi> wrote the first version of this document; it is now maintained by Michael K. Johnson <johnsonm@redhat.com>. Mail me if you have any questions about this document.


New Page 1

标题： ■ 中文版 The Linux News HOWTO : 介绍
姓名 ：Vince Skahan
Email：vince@halcyon.com
地址 ：
转摘 ：http://member.netease.com/

返回

1. 介绍
本文件的目的是要解答一些有关於 Linux 系统上 USENET News上看来符合所谓「时常被询问的问题」，以及 Linux Slackware 版本上的特定问题。

本文件及相关的 Mail 及 UUCP "HOWTO"文件将取代原来张贴在 comp.os.linux.announce 上的 UUCP-NEWS-MAIL-FAQ。

1.1. 有关於本文件的更新版本
文件的新版本将定期的张贴在 comp.os.linux.announce, comp.answers及news.answers 上。同时也会出现在有 mirror ftp://sunsite.unc.edu:/pub/Linux/docs/HOWTO的 anonymous ftp sites 上；

同时您也可以在 Linux的全球资讯网（WWW）http://sunsite.unc.edu/mdw/linux.html上面取得。

1.2. 意见回馈
欢迎您使用电子邮件来表示您对本文件的意见（不管是正面或是负面的意见）。如果您发现错误或是明显欠缺什麽的话一定要与我联系。

所有收到的电子邮件我都会看，但是不一定会有反应。对於要求增加内容的要求也许在时机恰当、有意义的需求，还有每天的血压值都合适的情况下会加以考虑。（译注：恐怕还要在这些条件上再加上一个「到那时如果我还记得的话」；至於中文版的部份如果您觉得有任何意见的话，请 mailto:smhu@ish.chna.edu.tw。）

flames 的话，会安静的到 /de/null 去，所以不要来烦我。

有一点比较特殊的是 Linux 的档案系统内并没有所谓的标准的路径，在本份文件内的路径是指在撰写文件时的标准或是我私人曾见过的。请您和您使用的版本之提供者询它们的路径。

您如果对於本份文件的格式有意见的话，请和 HOWTO 的维护者 - Greg Hankins (gregh@sunsite.unc.edu)联系。

1.3. 版权告示
News-HOWTO 的版权是属於 Vince Skahan 的。（译注：当然啦，中文版的版权就是属於我的啦! ）

允许照原文逐字的复制、重制及散播到任何实体或是电子媒体，而不需要再通知作者。如果译者提到是由谁转译的，则翻译亦同样的被允许。

简短的引用不需再知会原作者，衍生的工作或是特殊的散播 News-HOWTO 必需跟随著本份文件的原文，或是指出原文的出处。

同时允许及鼓励商业性的传播；不管如何，有关於此类的散播作者将很乐意於被知会（如果您再赠送一份给原作者的话）。（译注：我是不用那麽麻烦啦！如果是商业性质的传播的话，请将每个字新台币一元的打字费以 Linux 的名义捐给消费者文教基金会就可以了！）

事实上，我们希望能透过各种管道来推广这些资讯，但是，我们还是希望能够保留 HOWTO 文件的版权。

我们更希望在 HOWTOS 里面所有的文件被广为宣传。如果您有问题，请与 Linux HOWTO 的管理者 -- Greg Hankins 连络，他的电子邮件信箱为 gregh@sunsite.unc.edu

1.4. 除外责任
当然啦，我不对使用本文件所引申的後果负任何保证责任。您使用其中的观念、例子、及其他的任何部份之风险由您自行承担。

1.5. 其他资讯的来源
1.5.1. USENET

news.admin.misc 网路新闻伺服器管理者的一般话题。
news.admin.policy USENET 所发布的一些政策。
news.admin.technical 维护网路新闻伺服器(moderated)。
news.software.b 讨论一些与 B-news 相容的软体。
news.software.nn 讨论有关於新闻读取程式 "nn"。
news.software.nntp 网路新闻传输协定。
news.software.readers 一些用来读取网路新闻的软体。
news.sysadmin 对於系统管理者的评论。
news.announce.newusers 一些张贴给新使用者的布告(moderated)。
news.newsuers.questions 对於 USENET 新手的问题与解答

1.5.2. 书籍
列的书籍可能对您会有所帮助。

"Managing UUCP and USENET" 由 O'Reilly+Associates 所出版。依我的意见这是一本有关於 USENET 的程式及协定之最好书籍。
"Unix Communications" 由 Waite Group 所出版。它对於各个单元及它们如何结合一起有很好的描述。
"Practical Unix Security" 由 O'Reilly+Associates 所出版。对於 UUCP 的安全有很好的讨论。
"The Internet Complete Reference" 自 Osborne 是一本很好的参考书籍，它说明各种在国际网路上不同的服务，包含 news、mail 及其他国际网路上的资源。
"The Linux Networking Administrators' Guide" 来自 Olaf Kirch 的 Linux DOC而至少有 O'Reilly 及 SSC 出版。它一次就把所有关於UNIX 网路的东西应该知道的东西全告诉您。（译注：好厚喔，um... 当枕头保证不舒服！）

1.6. 那些地方不适合请求协助
在 Linux 下设定及执行USENET 的 news 并没有什麽特殊的地方，所以请不要将与 news 有关的问题张贴到 comp.os.linux.* 的新闻讨论群。（译注：在 tw.bbs.comp.linux 上好像比较没有这种禁忌吧！也许是因为大部份的问题也只是「如何安装」啦，「如何设定」或是「如何找到...」这类的问题吧！）

除非您的问题恰好是真的只有 Linux 才有的（例如：请告诉我在 SLS v1.03 上使用 bash1.12 要去执行 INN 的话，需要那些补丁(patch)）这类的问题。则您可以在相关的网路新闻群询问。

让我再重复一次

一般来说，没有理由在 comp.os.linux 相关的新闻群张贴与 news 有关的文章。已经有 news.* 的新闻群可以去处理您所有的问题。（译注：在本地，news 相关的讨论在 tw.bbs.netnews；不过那个版有些大老级的存在，所以要张贴前请再三思，在那儿闹笑话可是一点都不好笑；想想看，一部 News Server 的管理者竟也会问出这样子的问题，如果让您的 feeder 知道了，我看啦！他只要一想到与您互相转信的话，睡到半夜都会惊醒喔！ -- 那天他的 news server 也许就被您无意识的行为给搞死了也说不定！）

如果您将不是与 Linux 有特定关系的文章张贴到 comp.os.linux.* ，那您绝对是找错地方寻求协助了。 USENET news 的老手们不见得会去看 Linux 相关的新闻讨论群（一般他们很少是跑 Linux 的作业系统的）。

与其张贴不单只是 Linux 才会有的主题到 Linux 的新闻讨论群是在浪费您自己及其他人的的时间，并且它时常延误对您所提问题所需要的答覆。2. 硬体需求
在 Linux 下跑 USENET News 对没有特别的要求。只要有足以储存软体及线绪(thread)资料库以及其网路新闻内容之任何型态的储存媒体就可以了。对於一个刚开始者最小的需求量是硬碟里有 10 MB的空间。 （译注：别听他的，这种大概就是那种「证明说我也能够...」的那种安装法啦！单单一个 tw.bbs.* 一天就有 10 MB 了，只要您的 feeder 一开始□送，您总不能每天 expire 个两、三次吧！如果您希望文章能够保留个两周的话，那 10 * 14 = 140 MB 就跑不掉了，加上一些有的没有的，大概要 200 MB，如果又有那个没水准的逼逼也死站设定个不好而资料回留的话，保证您的 INND 马上就「挂」了！）

--------------------------------------------------------------------------------3. 取得 USENET news 的软体
本"HOWTO"内的软体都可以由阈际网路上的 anonymous ftp site 取得。

到 ftp.uu.net 的 /networking/news 内寻找，一般来说是一个好的开始。

newspak-2.4.tar.z 内含有在 Linux 系统下针对建立 uucp、news 及 mail 软体的相关设定档(config file)及读我的档案(readme)。这些都是免费的。您可以在 sunsite.unc.edu:/pub/Linux/system/Mail/news 内找到它。如果您在上述地方没有办法找到的话，请给我一个 email，我将会确定您可以得到一个复本。译注：比较新的版本可以在以下地点取得： ftp://mail.ncku.edu.tw/pub/os/Linux/Unofficial/sunsite-incoming/newspak-2.5.tar.gz ftp://ftp.ccu.edu.tw/pub1/unix/Linux/system/news/newspak-2.5.tar.gz

4. 新闻传送软体
在现在，UNIX 系统下有两大新闻传送软体，一个是 Cnews 以及 INN。而旧版的 Bnews 已正式的宣布「死亡」了，而且原作者也不再对其支援了。

在这里所说的新闻传送软体是指其在幕後处理，以使得张贴的文章得以传递及使得新闻阅读软体可以去存取的软体。

您可以设定您的路□到任何您喜欢的地方，只要 UUCP 的绝对路径可以抓到 rnew 的许可档(Permission file)，以及您设定了您的网路新闻阅读软体，使得它可以去找到 "inews" 及 "mail"。 （译注：目前在台湾使用 UUCP 最具代表性的大概是曾瑞源先生当年建立的 UUserv 了！谢谢 cthuang@UUserv.NET.tw 所提供以下的讯息！

>您在 <4p3h97$8jj@ish.chna.edu.tw> 文章内提到: >: 可以去找到 "inews" 及 "mail"。 （译注：现在还有人在用 UUCP吗） >当然有呀。UUserv 社区网路是台湾少数提供 UUCP 的地方喔。 >而且也是台湾最大的 UUCP 集散中心呢。 um...注完了 ）

注意：如果您尝试同时安装 Cnews 及 INN ，那您一定是在自寻苦恼；只能选这个或是另外一个。可以加入 NNTP 的 "reference Release" 到 Cnews ，因为本来它们就打算「你侬我侬」的。

4.1. Cnews Cleanup Release
目前在网路新闻上标准的版本应该是 Cnews 了。它已经出来好多年了，我是在1988年第一次看到它的。目前的版本叫做 Cnews Cleanup Release，它是由 CR.G 做补丁的。

Cnews 主要的好处是它的成熟度。您会发现它可以在各种的 *nix 系统执行，目前在全世界已有数以千计的系统是使用 Cnews 的。

它主要的缺点则是它好像是要给那些利用 uucp 及 modem 连接两点之间所使用的。因此在管理网际网路及时系统的□送及读取时，需要额外的 NNTP 软体。

尽管如此，对於一个新的 USENET 管理者首先最好是选择使用 Cnews。因为它是如此的稳定，有良好的文件及好几千个有经验的管理者可以回答您的问题。

'Cleanup Release'表示了包含了对 Overview 的支援，而且比过去的还要快。结果呢就是您现在可以直接使用 Cnews NOV 所提供的功能，而不需另外再利用其他的软体来支援网路新闻读取程式如 nn、 tin、及 trn。

我并没有完整的说明如何去安装及设定这个软体，原因是我在家里好久以前就转换到 INN了。如果有任何人要提供我此方面的线索，请送个电子邮件给我。

在 sunsite 的 newspak 含有在 Linux 系统上跑 Cnews Cleanup Release 的设定档。而您如果要使用 bash1.12 的话则您需要做一些补丁的工作。

基本上您跑新的 'quiz' 脚本并且采用预设值。您必须参考您的 /usr/include 来回答一连串的问题，但是您也不必担心，那些都是很明确的。

4.1.1. 安装 Cnews
安装 Cnews Cleanup Release 绝对是非常单纯的工作；只要取得原始程式，解开它们，然後按照指示去作就好了。

在 newspak 内的 quiz.def 是当您第一次执行 quiz 时所产生的。而您只要查看在 /usr/include 内的档案就可以得到正确的答案。

您需要最近版本的 bash 才可以使 Cnews 通过自我测试。您可以利用 'bash -version'来知道您现在使用的 bash 的版本。 1.14.2 的版本绝对是不怎麽的高明。在我写这个文件的时候，看起来 1.14.5 好像有比较好些。

Steve Robbins 已确定最近的版本之 'Cnews Cleanup Release' 发现与 GNU 的shellutils-1.9 结合时有一只□！我记得 Steve 有将其补丁放到 sunsite。

4.1.2. 设定 Cnews
至少您需要去编辑或是看一下底下的一些档案，它们都放在 /usr/local/lib/news。

active - active 档案。（译注：就是存放您要收的网路新闻讨论群的名字）
batchparms - 批次作业的参数。
explist - 设定文章存活的时间。
mailname - mail replies 时在 header 的名字。
mailpaths - 要张贴文章到 moderated 时 mail 的路□。
organization - 您的公司名称。
sys - 控制那些是您要接收或是□送的。
whoami - 在 Path: 那行您的主机名称。

4.1.3. 维护 Cnews
首先，最重要的原则就是不要手动去弄乱那些本来有公用程式去设定的档案。特别是不要手动去设定 newsfeed （您可以跑 addfeed）及弄乱您的 active 档案（您可以跑 addgroup）。当您有疑问的时候，读...再读附在原始程式内的文件。

每件事都可以利用 cron 来做。 我的 crontab 内有关於 news 的部份如下：

# take the compressed batches that came in from other systems
# also, post (locally) articles that originated here
20 * * * * /usenet/sw/news/bin/input/newsrun

# batch 'em up to go out
0 * * * * /usenet/sw/news/bin/batch/sendbatches myfeedsite

# expire C-news
59 0 * * * /usenet/sw/news/bin/expire/doexpire

# monitor stuff and report if needed
10 5 * * * /usenet/sw/news/bin/newsdaily
00 5 * * * /usenet/sw/new/bin/newswatch

# turn processing of incoming news batches off 6:30AM - 4:00 PM
30 6 * * * /usenet/sw/news/bin/input/newsrunning off
00 16 * * * /usenet/sw/news/bin/input/newsrunning on

4.2. InterNetNews (INN)
INN 是新跃上舞台者，但是由於它的完整性使得它获得欢迎。它主要的好处是它的 速度以及包含了完整的 nntp 的包装。它主要的缺点是它是属於比较新而尚未在许多标准的 *nix 系统上安装及没有瑕疵的跑过。另外，它需要有个守护神（daemon）一直在执行（innd）及再加上一个 overchan 的 daemon 去处理线绪(threading)。它的标帜看来就是可观的记忆体及较快的速度。

我曾经在一台 8MB 386-33（没有跑 Xwindows）的主机上用 INN 以 UUCP 的形式透过14.4 kb modem 而有过一个晚上最高 5 MB 新闻□送量的记录，并且没有任何的问题。

尽管它在 Linux 下是快速而且相当的稳定，但是由於它对於刚开始的新闻伺服器管理者而言并没有完整的文件（虽然真实的情形是如果您□解以後，跑它是相当的容易的）。所以新的 USENET管理者最好是先用 Bnews 或是 Cnews ，直到您对网路新闻有了相当的程度後再去使用 INN。（译注：别听他的，在台湾是一百台新闻伺服器主机至少有九十五台是安装 INN 的，文件少是真的，不过在 Linux 上安装并不是很困难，文件现在有 News FAQ part 1-9以及相当完整的manual page，只是您所需要的只是多做点功课就是啦！尤其是有位 C.S.Chen ；免惊啦）

INN 的 permission 是很特别的，别把它们弄混了。

INN 对於标准的 TCP/IP 的要求也很特殊， Linux 在这方面并不是很合乎条件，因此您最好是去一般 Linux 的 archie site 抓特定给 Linux 用的 INN 来用可能比较妥当。（译注：这一方面在 Linux 1.3.67 以上的版本其 TCP/IP 己经符合其要求了，目前最 smart 的是kernel 1.3.70以上再加上 inn1.4unoff4 um...据说 unoff5 都出来了！ 使用 redhat 3.0.3 的可以到他们公司的 ftp site 下载 newspak-unoff3~5.rpm 违是一个 binary distribution）

4.2.1. 安装 INN
( 以下来自 Arjan de Vet - devet@info.win.tue.nl )

我为了要使 INN 1.4 可以在 Linux 上跑，於是做了必要补丁及设定档，您可以在以下的地方取得它：

ftp.win.tue.nl:/pub/linux/ports/inn-1.4-linux.tar.gz

INN 需要一个良好的 /bin/sh。我使用 bash 1.13 beta版（您可以在各个 ftp site 找到它）。 bash 1.12 有一些小问题，有些网路新闻群它并不能正确的掌控（也许还有其他的问题，不过我不记得了）。

4.2.2. 设定 INN
基本上只要您按照 Arjan's 的指引，就可以把它设定完成。这里是一些须要做些什麽的摘要。

在 config.data，确定您已将 HAVE_UNIX_DOMAIN 设定成 DONT。（译注：在使用新的 kernel及 inn-1.4unoff4 时，您可以设定成 DO）
将您跑 innd 的那台主机名称加入 hosts.nntp，如果您只使用 uucp 的话，就填入您的 sitename。
确定您的 /etc/inetd.conf 内那行 nntp 已经用"#"号将它 comment 掉了。（译注：如果用暴力一点的方式，就乾脆将它 kill 掉）
如果您有安装 Taylor UUCP的话，则还要将 config.data 内的 HAVE_UUSTAT 设成 DO。如果您在此设定错误的话，会导致没有办法将 news 外送。
如果您跑 INN，您务必记得要去修改 syslog.conf，这对您有很大很大的帮助。
INN 有个很特别的 FAQ，每个月都会定期的张贴到 news.software.nntp, news.software.b,news.answers。您也可以在 rtfm.mit.edu:/pub/usenet-by-hierarchy/news 下取得。您将会很高兴您做了！

4.2.3. 维护 INN
我发现 Linux 的 INN site 除了设定一些 cron 外，它几乎不须什麽照顾的。基本上您需要一些像以下的 crontab：

# daily maint, also expire the .overview database and articles
1 0 * * * /usenet/sw/inn/bin/news.daily expireover delayrm < /dev/null

# send 'em out
5 * * * * /usenet/sw/inn/lib/send-uucp

（如果您已经改用 bash 1.13 则 "< /dev/null" 就不需要了）

4.3. 一些其他的网路新闻传送软体
以下列出一些在 Linux 上确认也可以跑的网路新闻传送软体：

dynafeed
nntp1.5.11
slurp1.05

4.4. 译者的话
翻译了老半天，结果是愈翻愈火大。还好是当初我在安装 INN 的时候，还没有看到这个HOWTO，否则看了老半天，能不能安装的起来，我看还是个大问题！以下是利用 Slackware Linux （我忘了那一个版本了啦！但不是 3.0 的喔 :-( 照样来段声明：如果您要利用 3.0以上的版本来安装，发生一切意外，其後果由您自行承担，不过我很怀疑难道 Slackware 的安装会改了吗？如果您利用 3.0 安装後有了结果，请 email 告诉我）

首先呢就是您要有 Slackware Linux 啦，要怎麽取得您就自己设法吧！看是要用 hopenet 的光碟，还是要利用网路安装，或是要买正式版本的 Slackware 我都没有意见啦！

您可以利用 pkgtool 来安装 N 系列里面的 innd。它会帮您安装的差不多；但是，只是差不多而已喔，并不是帮您安装的好好的呢！您还是需要再去做一些设定的啦！

有一点要提醒各位的是， Slackware 的 inn 是安装到 /usr/lib/news 去，而不是一般的/usr/local/lib/news 喔。

然後您就 cd /usr/lib/news/tools.linux ，这个里面有好多的宝藏呢，首先您先把有个叫INSTALL.linux 的给印了出来，然後您就按照上面的步骤一步一步的做下去大概就接近完成了。我在下边所附的是从那儿翻译过来的文件，但还是强烈的建议您最好还是看原始的。

--------------------------------------------------------------------- 系统需求：

ld.so
libc.so.4 -> libc.so.4.5.19
smail 或是 sendmail

安装步骤：

利用您套装的工具解开程式组，在 Slackware Linux 则是利用其公用程式 pkgtool。
确定您的系统内有个使用者及群组名称叫 news 的。
/etc/passwd
news:*:9:13:news:/usr/lib/news:
| | |____ GID 13 !
| |_______ UID 9 !
|_________ 这个原文写错了，如果您是用news::9:13
的话，任何人都可以使用 news 的身份并且不需要 password 就可以 login
了，如果您们是这样子设定，请告诉我，那天去坐坐..... ^_^

/etc/group
news::13:news
|_______GID 13!

因为有一些 script 会寄信给 usenet，所以必须设定一个 mail 的 alias，把它放在 /etc/aliases。内容如下：
/etc/aliases:
news: root
usenet: root

然後再利用 newaliases 命令重建 alias 的资料库。
到 /etc/rc.d/rc.local 加入 inn 起动的 script "rc.news"
# start inn
/usr/lib/news/etc/rc.news

将在 /usr/lib/news/tools. 里面有个叫做 crontab-news 的档案复制到 /usr/spool/cron/crontabs/news去，并且将它做适当的修改。将它里面有个名字改成□送网路新闻给您的主机名称。
您现在的 news LIBDIR 是在 /usr/lib/news。但因为有很多的新闻读取程式会到 /usr/local/lib/news 去读取相关的设定，因此您需要做一个符号的连结：
ln -s /usr/lib/news /usr/local/lib/news

如果您在以前曾经安装过 Cnews 的话，那就已经存在个 /usr/local/lib/news了，因此您需要先利用 rm 将它拿掉！
news 的 spool 目录在 /var/spool/news。如果在您的系统内已经有在不同目录下的 news 文章时，而您又已经有 /var/spool/news 的目录时，先移除/var/spool/news 目录，然後再将您的 news spool 目录做个符号连结（例如说，如果您原有的在 /news 的话）

ln -s /news /var/spool/news

修改在 /usr/lib/news 下的 config 档：在以下的档案内容里面如果有看到 manlobbi ，这表示是个新闻伺服器主机，而 knobel 是我的网路新闻器客户端。您必须去浏览在 /usr/lib/news 内的以下档案。

expire.ctl hosts.nntp inn.conf moderators newsfeeds
nnrp.access nntpsend.ctl passwd.nntp

以上一定要修改的有 inn.conf, hosts.nntp, newsfeeds, nnrp.access 其他的 ... um.. 就看著办好了。如果您是用 nntpsend 的话，那您就需要去改 nntpsend.ctl

建立一个空的history database 及 log

:>/usr/lib/news/history
:>/usr/lib/news/history.dir
:>/usr/lib/news/history.pag
:>/usr/lib/news/errlog
:>/usr/lib/news/log
chmod 664 /usr/lib/news/{history*,log,errlog}
chown news.news /usr/lib/news/{history*,log,errlog}

以 root 的身份执行 makedirs.sh
利用 man news-recovery 去读 news-recovery。它包含当您已将您的 news 系统升级到 INN 时如何去回复它。
确认您的 uucp permission file 允许 uux 去跑 rnews 及 grnews。 um... 懒得再翻下去了，这个真得是国情不同，你要用 uucp 吗？顺便提一下，如果您对外的频宽低於 28.8k 的话，那我看就算了，不要再装什麽 news server 了；前些日子□得无聊算了一下下，如果只接tw.bbs.*的话，一天会吃掉一条 14.4k 的频宽。
这条有点儿问题，如果没有记错的话，在 News FAQ 里面建议的改法可能会好一些！

就是在 /etc/syslog.conf 内加入

*.=info;*.=notice;news.none /usr/adm/messages
^^^^^^^^^^
加上去
news.crit /var/log/news/news.crit
news.err /var/log/news/news.err
news.notice;news.info /var/log/news/news.notice

这三个档，news.daily 在每天执行的时候，会将它们压缩起来，然後放到/var/log/news/OLD 里面去，预设值是存七天，名字好像就是 news.err.gz.1这种样子，直到 .7 为止代表七天前的一些 log 。

我曾经看过很多人的都是放到 /usr/adm/messages 及 /usr/adm/syslog 里面去，这样子做的缺点是 messages 会一直长大，而 news.daily 并不会去处理 messages 这个档，到了有一天，您也没有什麽工具程式可以看它或是去编辑它，就只有把它给删除掉这一条路而已。可是您知道那样子可能有些重要的讯息就被您给...了。

um...果然是年纪大了，常常忘东忘西的，您还要利用 ps 找到 syslogd 的 pid，然後利用 kill -HUP pid 重新起动它才有用喔！

修改 /etc/inetd.conf 的内容。将里面有一行 nntp 的把它给删除掉！或是在那行的前面加上一个 "#" 号。这个目的是在 Cnews 里面是利用 inetd 去监听 port 119 如果有 connect 到这个 port 的话， inetd 就叫用 nntp 啦。但是 INN 的作法不太一样，它是利用 innd 这个 daemon 去监听这个 port 的，所以如果这个 port 被使用了， innd 被不能再利用它了。 对了，先利用 ps ax 查看 inetd 的 pid ，然後利用 kill -HUP pid 重新起动 inetd。
利用下述的命令起动 innd，记得要以 root 的身份喔！

/usr/lib/news/etc/rc.news

---------------------------------------------------------------------

现在您的 innd 应该已经起动了，您可以利用 ps 的指令看到它。如果没有看到的话大概是去报到了，到 /var/log/news 看一下 news.err 及 news.crit 吧！看看错误讯息是什麽！然後就去翻 NEWS FAQ part 3:Reasons why INN isn't start。看看您的情况是不是在 FAQ里面有提到；如果没有提到的话，再翻 NEWS FAQ part 5:Other error messages and what they mean。如果还是没有的话，就只好 NEWS FAQ 由part 1到 part 9 都看一次了！看看有没有什麽灵感，如果还是没有的话，建议您再看一次；如果仍没有的话，再读一次，顺便把它成中文。真的，我不是开玩笑的，您读了，与动手去把它翻成中文这中间，认知上的意境还是有相当程度的差别的。如果连这样都还是有问题，那您可以找同意□送资料给您的 news server 管理者，我相信他们都会拨个空帮您看看的，可能有那个地方有问题，也许这个问题会危及与您互相□送的 news server 也说不定。如果连他也没有办法解决的话，将您的问题 post 到 tw.bbs.netnews，或是您要 smart 一下 post 到 news.software.nntp 也不错啦！不过 post 之前再想一下，如果能私下解决的问题，就私下解决吧！同样是把问题解决了，可是 tw.bbs.netnews 上有好几位 news 的管理者也在看呢！所以太那个的问题，有时还会被拿去当教材说！另外就是其他人也会觉得怕怕的，因为 news 的特点就是 server 与 server 相连的，今天多了一个不是很称职的管理者就算我都会耽心，那天就这样被摆了一下子也说不定呢！

对了，忘记提一点，在 /usr/lib/news/etc/rc.news 内有一行是用来设定 innwatch 是否要起动的， default 值是 false 建议改成 true ；如果您定成 true 的话，在起动 innd 的同时，它也会起动 innwatch。而 innwatch 的功能就是监视 innd 是不是死掉了啦！（innd 也是会死掉的，并且是莫名其妙的死掉，而且还是死得无声无息的，您都不知道咧！不过话说回来，如果死的有声有色的话，那可实在太可怕了啦！）如果有 innwatch 的话，他会寄封信给 root。还有就是系统的 load 太高啦，或是硬碟的空间不够了，它会把 innd 先停住（有时您还会气的想把它给停掉呢！明明没怎麽嘛！这时候您需要去调整 innwatch.ctl 里面的一些参数值）。尤其是硬碟的空间如果用光的话，再接著下来，您要是能够无伤的重新起动 innd 的话，那还真的是您的造化呢。

另外记得一点，以後要修改设定啦，或是加入新的 feed site ，还是新的 newsgroup 等等，反正除了起动 rc.news 之外的一切与 news 相关的，您都要用 news 的身份去作（su news)。

在开始网路传送之前，您可以先看 INN FAQ Part 4: The debugging tutorial (setup of feeds etc.)。并参照上面的建议，先试试看您的设定是否都是正确的。如果这一关您也通过了的话，再执行个 /usr/lib/news/bin/inncheck -v，看看有没有错误的讯息，如果也没有的话，这时候应该就可以通知您的feeder 开始□送相关的网路新闻讨论群给您了！
5. News Readers
这里所谓的 News Readers 是泛称许多架构在 Linux 上用以阅读 news的特定软体。 而一般来说，最容易自 Linux 和 newspak 中取得的版本是"tin"，"rn"，"trn"。

基本上，当选择一个 news reader 时，其标准不外是使用简单，与容易设定(易於选择有兴趣想阅读的news，并筛除掉不想阅读的文章)。

您可以设定路径到任何你高兴的地方，只要全部的新闻读取程式可以从你安装的INN或Cnews找得到 "inews"及"mail"程式以送信去回覆张贴布告。 ( 译注: 如果您使用的是 Slackware Linux，在安装时也有选择安装 N系列，那麽系统就会自动帮您正确安装好 INN 与 C-News ，您所须要作的就只是跟著 /usr/lib/news/tools.linux目录中的 INSTALL.linux档案所说明的调整一些设定档而已。 )

本章接下来将会简短地提及 news reader 中几个较受欢迎且常见的软体。不要你问，我有很多理由去用"nn"。

5.1. Tin
Tin 是一个相当适於新手使用的「讨论串式新闻读取程式」。它可支援删除档案与 NOV 串列方式。如果您使用的是 INN ，那麽 Tin 预设为读取 NOV.overlay 的档案，而不写索引档。

如您想要在 Linux 的环境下编绎 Tin ，基本上只需在 makefile 中设定其软体所在位置 ( 尤其是 inews 所在的位置 ) ，然後输入 "make linux" 的命令即可。 对於在 Linux 下操作的 news 而言，并不需要特别的补丁码。

至於讨论串式的阅读，您可以输入 "tin -u" 来 update 索引档。

为了确保可以使用 NNTP 协定来阅读 news ，在编绎的过程中， 您必须设定 "NNTP_ABLE"，这个参数的设定在使用 local host 读取的情况下会生成 "tin" ；而以 NNTP 方式读取 news 时，则会产生 "rtin" 的档案。键入"tin -r"将可得到与键入"rtin"相同的功能。

Iain Lea 先生建议在 crontab 中加入以下的叙述，并键入 "make daemon" 来 make "tind" 。

# thread the database
35 * * * * /usenet/bin/tind -u

我曾在 SLIP 协定下把 tin 当成 NNTP-based 的 newsreader 使用过。如果您所要接上的系统接受全部的新闻群组时，则您就必须花很多时间在等待系统载入 "active"这个档案。

5.2. Trn/Mthreads
trn 软体的前身是 "rn" ，而两者间的不同则在於前者可以提供讨论串式的阅读。 trn3.2 或者更新的版本可以选择使用 "mthreads" 方式 ( trn 的内定 ) 或是 NOV 方式 ( INN ) 来做串列式的阅读。

想要编译本软体，只需执行 Configure ，并接受其所评估过的内定值。还有就是你的系统中至少要有 lib4.4.1 和 bash-1.13 (现在在很多的Linux archive sites已经有beat版本) 才能使Configure 成功的执行。你可能同时需要bash1.13和libs4.4.1以使得新的Configure可以正确的执行。

在 sunsite 的 newspak 包含有在 Linux 下给 trn 用的可以工作之config 档案。

一般来说去修改 trn 的 config.sh 档案并不是聪明的举动，除非说只是一些非常单纯如修改路径以符合你的工作之类的动作。如果您想这样做的话，也最好在执行"make depend"、 "make"、 "make install" 之前先执行"Configure -S"。

尽管在 Linux 上以 bash1.12 执行 "configure" 失败，但 "Configure -S" 却工作的很好，因此如果你以 newspak 的 config.sh 作为一个起点，那你就很接近了。

编译使用 NNTP 读取的 trn 也只是当 Configure 问你是不是要去做时简单的回答"yes"而已， ( 假设 Configure 可以正常作动 ) 。未来的新版也将会把 NNTP 读取的 config.sh 包含进来 -- 一如在 local host 读取者的 config.sh 。

我曾在 SLIP 协定下把 trn 当成 NNTP-based 的 newsreader 使用过。如果您所要接上的系统接受全部的新闻群组时，则您就必须花很多时间在等待系统载入 "active"这个档案。

trn 有相当多的命令列指令可供使用， 您可以轻易地自其 man page 中取得您所需要的资讯细节。至於我则使用另一个有方便的方法来设定trn ：

把所有的参数设定写在 ~/.trnrc
执行以下命令 export TRNINIT="~/.trnrc"

在目前的 newspak 中都会有一个 .trnrc 档可做为例子，您可以参照看看。

trn3.2 及更新的版本可以自由选择使用支援 NOV 或 mthreads 的串列阅读方式。因此，我个人建议设定 trn 软体，使之两种格式都可阅读 (可在 Configure中设定 ) ，然後在启动 trn 时再选择其中一种来使用，例如： 您可以用 "trn -Zo"选择 NOV 格式；或者 "trn -Zt" 使用mthreads ，而且您可以在 alias 中写入上述命令，这会使您的使用更方便。

为了要建立使用 mthreads 串列式阅读的资料库， 您尚须在 news crontab 中输入以下叙述。

# thread the trn database
35 * * * * /usenet/bin/mthreads all

5.3. NN
您可以在 sunsite 上取得这一套软体，且其中亦包含安装 nn6.4.18 时完整可使用的组态档 (working configure file)，您只需取得此软体， 并在 Linux 下键入 "make" 便可自行编绎，还有就是此组态档在nn6.5b3( nn6.5 的 beta 版 ) 亦可使用。

编绎完成後，进行下列步骤：

- 执行 "inst" 命令以安装全部的东西。
- 初始化资料库。
- 执行 nnmaster

有关的细节，您必须再详读随nn而来的文件档。除了您必须把nnmaster设定在crontab中执行而不是当成在背景执行的守护者(daemon)外，在 Linux 中编绎，设定与执行 nn 和在其他 *nix 系统并无不同。此外如果您尝试把 nnmaster 直接丢到背景来执行，那麽它也无法正确的被驱动。

设定 nn 的执行是相当简单的，您只需在 crontab 中加入以下叙述：

# run nnmaster to collect "nn" stuff
# (not needed if you use NOV from INN in nn-6.5beta3)
25 * * * * /usenet/sw/nn/lib/nnmaster

# expire the nn database
# (not needed if you use NOV from INN in nn-6.5beta3)
0 4 * * * /usenet/sw/nn/bin/nnadmin =EYW

# stash a copy of the active file for "nngoback" and keep last 7
0 3 * * * /usenet/sw/nn/lib/back_act 7

我曾试著在 SLIP 协定下把 nn 当成 NNTP-based 的 newsreader 使用过。在这种情况下对 config.h 档案稍做修改仍是必要的，而您可以在该档案的注解文字中得到更细节的资讯。把 nn 当成 NNTP-based 的newsreader 使用时， nn 会在己端 (local) 执行 nnmaster保有一份串列式阅读的资料库，因此，在己端选择文章的动作会比其他软体快许多。 ( 当然，如果您是使用 modem 上 silp ，一些合理的等待时间仍是无可避免的。 )

新版的 nn (6.5.x) 当然也支援 INN 的 NOV 资料库格式，且当您使用此功能时，您就可以不必执行 nnmaster 了，我个人强烈推荐使用此功能，因为如此您就可以不用浪费 cpu 的时间去执行 nnmaster 与取得串列式阅读的资料库，至於真正的 news 文章在此功能下则是非同步的取得。

5.4. 其他的新闻读取程式
下列是一些亦可在 Linux 下使用，但未提及的 newsreader。

tass
xrn
gnus

7. 关於 USENET 经常被询问的问题
7.1. 为什麽我不能在 moderated 的网路新闻群组张贴布告
在准备张贴时，您的 newsreader 会启动 /bin/mail 来递送邮件，如果您的 mail 程式版本过於陈旧，那麽 newsreader 有可能不会作动而导致此一结果。如果是这样的话，解决之道就是更换较新的版本使用，例如较新版 Slackware 中的 mailx-5.5.tar.z，且您可以用 Slackware中的 pkgtool 命令来安装并设定之。

另一个可能性则是虽然在您的系统中此一 newsgroup 是定成没有管制者(moderator)，但在□送您系统的上游却将此 newsgroup 定成有所管制的，那麽也许您的文章在管制者 ( 为一系统软体，并不是一个真正的人) 处就被删除了。您可以在收到由 news.admin 送达的文件之後，执行 checkgroup 命令来确认。

7.2. 为何我会有与 permission 有关的问题？
因为本来就那样 :-)

检查您的 permission 是否正确；检查在您是否在 /etc/passwd 定义有一个叫 news 的使用者；是否在 /etc/group 中定有一个叫 news 的群组，上述的定义并不是 Linux 的标准帐号，所以您必须自行注意。

除了 /usr/local/lib/news/setnewside 的 uid 必须是 root 外，所有在 /usr/local/lib/news 子目录下档案的拥有者 (uid) 和所属群体 (gid) 都必须是 news ( 即 news.news) 。

您可以用任何数值作为 "news" 的 UID 与 GID。

( 译注: 在您 install Slackware 时， 系统会自动帮您内定一些 GID与 UID ，一般来说，没有特殊的理由，很少有入会去修改这些内定值。)

7.3. 为何我张贴的布告在本地可以看得见， 但是在其□送的下游却没有出现？
也许是因为您未在 cron 中设定执行 newsrun 程式；也许因为您自行手动修改系统档案，以致系统乱掉；也许是您少掉了 /usr/spool/news/out.going这个子目录或是什麽的，或者有可能您所取得的是 "Performance" 或 "Cleanup" 版本的 cnews ，而它需要在 cron 中设定执行 newsrun 来做批次处理，分送 news 至其他站台，或是在已端显示文件。

千万不要尝试手动去修改加入 active 档案或系统档案，正确的方法是使用在 /usr/local/lib/news/bin/maint 下的公用程式来完成这些动作。

7.4. 为什麽我的可执行版本内没有 nntp ？
为了要在 Linux 系统下支援 plug-n-play ，并且避免 SLS 的 news 系统因要同时具有 nntp 和 non-nntp 版本的 newsreader 与传输程式 (news transport programs) 而导致整个系统的过大。

7.5. 在做 expire 时，为什麽明明还有很多的储存空间，可是它竟然告诉我说「空间不足」呢？
因为系统读不到 /etc/mtab 档。记得把该档的 mode 定成 644 。这种情况常会发生在您以root的身份去 umount一个filesystem时(umask)，这个命令会导致属於 root 的档案无法被其他使用者读取而产生此错误。 ( 译注: 现在另一个最常发生的情况则是 inode 数不足，建议的解决之道是在架构系统时选择较多的 inode ，如 1024bytes/inode 。尤其是 /var/spool/news/tw/bbs时，*sign*)

7.6. 为什麽每样都看起来很正常，可是却不能张贴布告呢？
好像旧版的 Linux 在装设 cnews 时都很容易有此一问题 (blow up) 。尤其是当您在一较旧版的 SLS 上装设时，您一定要检查 /bin 和/usr/bin ，确认您只有一套最新版的 news 。

因为在 1993 年二月 "Performance Release" 以前的版本，您都必须在cron 里周期性地启动 newsrun以执行某些程序。而这正是很多人常常不知道的。

7.7. 我可以将新的 news overview( NOV) 放进 trn/tin/nn 内，以代替各种不同的资料库吗？
是的，trn, tin 及 nn 的 beta 版现在都已经支援这项功能了。

您可以把新的 news overview(NOV) 放入 "Performance Release" "Cleanup Release"的 cnews ，或是其他的新闻读取程式。我现在手上有的 nn6.5的 beta 版也支援 NOV 格式，而且在 Linux 下也工作的很好，它现在可以被执行而无须再跑 nnmaster 。您可以在 uniwa.uwa.edu.au 找到这个版本的 nn 。

7.8. 为何没有可执行版本的 NNTP ？
因为您必须定义许多在己端系统所独有的资讯， 而这些设定是无法在执行时由程式自动帮您设定的。如果你要做这种事，请用INN而不要用Cnews 加 NNTP。

7.9. 如何设定 NNTP，可以允许透过网路去读或张贴布告，而在本地不要储存任何的文章或是资料库？
( mdw@sunsite.unc.edu (Matt Welsh) )

1) 取得nntp 的"reference implementation" 和 rn软体您可以到 ftp.uu.net:/networking/news/nntp下取得 nntp.1.5.11.tar.Z
2) 编绎 nntp 如下:
拷贝 common/conf.h.dist 到 common/conf.h。

修改 common/conf.h 以设定下列参数: 以下为我所设定的:

DOMAIN: 不定义它(就是将那行改为 #undef DOMAIN).

REALDOMAIN: 须定义，它会利用libraries搜寻domain。

SERVER_FILE: 设定为定义有您 news 伺服器 ( 就是您读或贴 news 的那一台主机 ) 主机名称 (hostname) 的档案名称，我使用的路径名和档案名为 "/usr/local/lib/news/server"

PASSFILE: 如果您的news伺服器需要被授权(某种username/password) 才能张贴布告，那麽把此项参数设为含有该username/password 的档案，我使用的路径名和档案名为 "/usr/local/lib/news/nntppass" 。

如果您决定要把所有 news 有关的档案置於 /usr/local/liib/news的目录下，将其他需要定到路径名称的地方(ACTIVE_FILE, NEWSGROUPS_FILE... etc) 全定成 /usr/local/lib/news 。 这其中有很多是设定给 NNTP server 用的 ( 非 client) ，但为了安全计， 我把它们全部改变指向正确的位置，您当然可以使用内定的路径名，不过要先确定您有该对应的子目录。

3) 建立一个使用者叫 "usenet" 。 inews 的软体会需要以这个 user来执行。不过您也只需要这一个 userid ，您不需要配给该 userid 如子目录 (homedirectory) 或是其他的东西。 在此项中，所有您必需作的就是在 /etc/passwd 的档案下加入下列这一行

usenet:*:13:1::/:

确定您的 userid 是唯一的 ( 上述是 13) 。 group 可以定成是其他的东西，在这里我定成 "daemon"(gid 1) 。

4) 建立上述的SERVER_FILE，例如说我的news伺服器名称为 "wonton.tc.cornell.edu" ， 那麽我就必须在 /usr/local/lib/news/server 中加入下行:
wonton.tc.cornell.edu

5) 建立PASSFILE。格式如下:
<server name> <username> <password>

再举例说明，如果您的news伺服器名称为 shoop.vpizza.com，而在此机器上张贴布告必需要被授权为 news(password=floof)才可以，那麽您就必须在 /usr/local/lib/news/nntppass 下加入:
shoop.vpizza.com news floof

6) inews 是以 "usenet" 的 id 在执行的，所以为了安全应把 news 的目录和 nntppass 档案等的所有者定成是 usenet 。
chown usenet /usr/local/lib/news
chmod 755 /usr/local/lib/news
chown usenet /usr/local/lib/news/nntppass
chmod 600 /usr/local/lib/news/nntppass

如果这样作，就没有人能读到这些档案了吗?不!在档案中的密码并未被编密。
7) 回到 nntp1.5.11 的目录中，下达 "make client" 的命令， 然後您就可以得到 NNTP 版的 inews，这是 NNTP client 上可使用的唯一软体。 当我建 inews 时，我发现函式库中有一个错误会使得在 uname.c 中的函式 uname() 会不停地自己呼叫自已。如果您发现您的 inews 看起来好像当机了，且您的系统明显地变慢，那麽您最好编辑一下 uname.c 档， 把 uname() 改成像 my_uname() 之类的名字， 并且把 inews.c 中呼叫的部份也改成 my_uname() 。如果您也遇到如样的问题 的话，请您寄一封 mail 给我 (Matt) 。
8) 下达命令 "make install_client" 。这样安装 inews 的档案到您的系统中。并且连结/usr/local/lib/news/inews到 /usr/local/bin/inews 然後您应该就可以开始张贴布告了(手动)，您可以试试下述的:
$ inews -h << EOF
Newsgroups: misc.test
From: me@foo.bar.com
Subject: Testing
Reply-To: my-real-address@wherever.edu

This is a test.
EOF

如果成功， inews 会把文章贴上。而且您会知道，因为 misc.test的 test-responders 会回信到上述的 Reply-To 的位址。请不要在其他的板面上张贴测试的文章(例如American On Line)。


New Page 1

标题： ■ PPP HOWTO 中译版
姓名 ：Robert Hart
Email：hartr@interweft.com.au
地址 ：
转摘 ：http://member.netease.com/

返回

作者: Robert Hart hartr@interweft.com.au
译者: Asd L. Chen & C.W.Huang
v3.0, 31 March 1997. 翻译日期: 25 August - 9 October 1997

--------------------------------------------------------------------------------
这份文件展示如何把你的 Linux PC 连接到一台 PPP 伺服器上，如何使用 PPP 把区域网路连结在一起并且提供一种把你的 Linux 电脑设定为 PPP 伺服器的方法．本文同时提供帮助侦错无法正常运作的 PPP 连结．
--------------------------------------------------------------------------------

版权声明

本文件的散布必须依据 GPL (GNU Public License)．

散布

一旦这份文件有新的版本产生就会贴到 comp.os.linux.answer 讨论群．也可以在此取得 HTML 格式的文件:

Linux Howto Index
PPP-HOWTO

其它格式(SGML, ASCII, postscript, DVI)的文件可以从这里取得: Howtos - other formats.

因为 sunsite.unc.edu 的负载非常地重，请使用最靠近你的适当映射(mirror)节点．

感谢

不断地有许多人提供我写作此文件的协助．特别感谢 Al Longyear 对 PPP 本身的指导(如果这里有任何错误，那是我的而不是他的)， Greg Hankins(Linux HOWTOs 的维护人)以及 Debi Tackett (MaximumAccess.com) 许多在形式，内容顺序，逻辑与解释清晰度的有用建议．

最後，对於许多以电子邮件提供我意见的人，感谢您．就像所有 HOWTO 的作者一样，帮助他人所获得的满足感就是我们所收到的报酬，而这已足够．经由写作这份 HOWTO 文件我偿还一小部份人情债，这是我，以及所有其馀 Linux 的使用者，所积欠给为我们撰写与维护这个作业系统的人的．

1. 简介
1.1. 客户端以及伺服端
1.2. 不同 Linux 套件间的差异
1.3. 套件相关的 PPP 配置工具
2. IP 号码
3. 这份文件的目的
3.1. 设立 PPP 客户端
3.2. 使用 PPP 连结两个区域网路或连结一个区域网路到网际网路上
3.3. 设立 PPP 伺服器
3.4. 使用 PPP 於直接缆线(direct null modem)连结
3.5. 这份文件目前尚未涵盖的...
4. 涵盖的软体版本
5. 其它有用的／重要的文件
5.1. 有用的 Linux 电子邮递列表
6. 将 PPP 设定为客户端的工作概要
6.1. 取得/安装软体
6.2. 编译核心加入 PPP 支援
6.3. 从你的 ISP 取得资讯
6.4. 设定你的数据机及串列埠
6.5. 建立名称到位址解析(DNS)
6.6. PPP 与 root 权限
6.7. 检查你的 PPP 套件档案及设定 PPP 选项
6.8. 如果你的 PPP 伺服器使用 PAP 认证(Password Authentication Protocol)
6.9. 以手动方式连接至 PPP 伺服器
6.10. 使你的 PPP 连结自动化
6.11. 结束连结
6.12. 如果你遭遇问题
6.13. 建立连结之後
6.14. 动态 IP 连接提供标准 IP 服务的问题
7. 配置你的 Linux 核心
7.1. 安装 Linux 核心原始程式码
7.2. □解你的硬体
7.3. 编译核心 － Linux 1.2.13 核心
7.4. 编译核心 - Linux 1.3.x 及 2.0.x 核心
7.5. PPP-2.2 与 /proc/net/dev 的注意事项
7.6. 配置核心的一般考量
8. 取得你所需的 PPP 伺服器资讯
9. 设定你的数据机及串列埠
9.1. 串列埠与速度相容性的注意事项
9.2. 串列埠名称
9.3. 配置你的数据机
9.4. 串列流量控制注意事项
9.5. 测试你的数据机的拨出功能
10. 建立名称到位址解析(DNS)
10.1. /etc/resolv.conf 档案
10.2. /etc/host.conf 档案
11. 使用 PPP 与 root 权限
12. 设定 PPP 连接档案
12.1. 替代的 options.tpl 档案
12.2. 我应该使用什麽选项? (无 PAP/CHAP)
13. 如果你的 PPP 伺服器使用 PAP 认证(Password Authentication Protocol)
13.1. 使用 MSCHAP
13.2. PAP/CHAP 密码档案
13.3. PAP 密码档
13.4. CHAP 密码档
13.5. 处理多重 PAP 认证连接
14. 以手动方式建立 PPP 连结
15. 使你的连结自动化 - 创造连结指令稿
15.1. 以使用者名称／密码认证的指令稿
15.2. ppp-on 指令稿
15.3. 编辑这里所提供的起始指令稿
15.4. 一份 chat 指令稿其中的含意...
15.5. 使用於 PAP/CHAP 验认连线的 chat 指令稿
15.6. pppd 的 debug 与 file option_file 选项
16. 测试你的连线指令稿
17. 结束 PPP 连结
18. 侦错
18.1. 我把 PPP 编译进去但是 Linux 说我没有...
18.2. 我的数据机连上了但 PPP 并未启动
18.3. 系统记录说 ``serial line is not 8 bit clean...''
18.4. 不能设立预设递送路径
18.5. 其它问题
19. 当完全陷於胶著时如何取得帮助
20. 连结运作之後的普遍问题
20.1. 我无法看见我连线的 PPP 伺服器以外的世界
20.2. 我可以寄送电子邮件，但不能接收
20.3. 为什麽人们不能来我的机器 finger, WWW, gopher, talk 等等?
21. 以动态 IP 提供网际网路服务
21.1. 设定电子邮件
21.2. 设定本地的名称伺服器
22. 使用 PPP 连结两个网路
22.1. 设定 IP 号码
22.2. 设定递送路径
22.3. 网路安全
23. 建立连结之後 - /etc/ppp/ip-up 指令稿
23.1. 特殊递送路径
23.2. 处理电子邮件伫列
23.3. 一个 /etc/ppp/ip-up 指令稿的例子
23.4. 处理电子邮件
24. 使用 /etc/ppp/ip-down
25. 区域网路上的递送问题
25.1. 安全上的注意事项
26. 建立 PPP 伺服器
26.1. 编译核心
26.2. 伺服器系统的概观
26.3. 所需的全部软体
26.4. 设定标准的拨接(shell access)
26.5. 设立 PPP 选项档案
26.6. 设定 pppd 以便让使用者（成功地）执行它
26.7. 为 pppd 设定一个全域的别名(alias)
27. 在 null modem (直接连线)上使用 PPP


New Page 1

标题： ■ PPP HOWTO 中译版: 简介
姓名 ：Robert Hart
Email：hartr@interweft.com.au
地址 ：
转摘 ：http://member.netease.com/

返回

1. 简介
PPP （点对点协定）是在串列连结上跑 IP （网际网路协定）以及其它网路协定的一种机制，串列连结可以是直接的串列连接（使用 null-modem 缆线）或是使用数据机以及电话线路所造出的连结 (当然也包括如 ISDN 的数位线路)．

使用 PPP, 你可以把你的 Linux PC 连接到一台 PPP 伺服器上并存取该伺服器所连接的网路资源（几乎）就如同你是直接连接在该网路上一般．

你也可以把你的 Linux PC 设为一台 PPP 伺服器，这样一来其它电脑就可以拨入你的电脑并且存取在你区域网路里的资源．

因为 PPP 是一种点对点 (peer-to-peer) 的系统，因此你也可以使用两台 Linux PC 上的 PPP 把网路连结在一起（或是把区域网路连结到网际网路上）．

最主要的差异当然是速度 － 标准的乙太网路连线是以 10 Mbps（每秒百万位元）这个理论上的最大贯通量在动作，而在数据机这方面最大是以 56 kbps（每秒千位元）的速度在动作．

同时，依据 PPP 连线的型态，某些应用以及服务在使用上可能会有些限制．

1.1. 客户端以及伺服端
PPP 是一种完完全全是点对点的协定；拨接的机器以及接受拨接的机器之间（在技术上）并没有差异．然而，为了清楚明白的缘故，以伺服端与客户端的方式来思考是很有用的．

当你拨入一个节点要建立 PPP 连线时，你是客户端．你所连线的那台机器是伺服端．

当你在设定一台 Linux 机器使其接收并处理拨入的 PPP 连线时，你正在设立一台 PPP 伺服端．

任何 Linux PC 都可以是 PPP 伺服端以及客户端 － 甚至於如果你有一个以上的串列埠（以及数据机，如果有必要）的话还可以同时扮演这两种角色．如同前面所说的，就 PPP 而言，一旦连线建立那麽客户端与伺服端之间并不真的有什麽差异．

为了清楚明白的关系，这份文件把启始呼叫（即 "拨入"）的那台机器称作客户端，而把回应电话，核对拨入请求之验认（利用使用者代号，密码以及其它可能的机制）的那台机器称作伺服端．

使用 PPP 做为客户端把某个地方的一台或多台机器连结到网际网路上可能是大部份人都感兴趣的一点 - 这是将他们的 Linux 机器作为一客户端．

在这份文件中所描述的程序将会让你能够建立并自动化你的网际网路连线．

这份文件也将在把你的 Linux PC 设为 PPP 伺服器以及使用 PPP 来连结两个区域网路（有完整的递送设定）这些方面给你指引（这常常被称作建立广域网路连结）．

1.2. 不同 Linux 套件间的差异
有这多不同的 Linux 套件，他们有自己的特质与行为模式．

特别地，Linux (以及 Unix)电脑有两种不同的起始方式，界面设定等等．

这两种分别是 BSD system initialisation 与 System V system initialisation．如果你进入某些 Unix 的新闻讨论群，你会发现经常有双方支持者的战争．如果你觉得有趣，就加入这个浪费网路频宽的行列!

最普遍使用的套件可能是

Slackware
使用 BSD 形式的系统起始
Red Hat (and its former associate Caldera)
使用 SysV 系统起始(有些许的修改)
Debian
使用 SysV 系统起始

BSD 形式的系统起始通常将它的启动档案放在 /etc/...，这些档案是:

--------------------------------------------------------------------------------

/etc/rc
/etc/rc.local
/etc/rc.serial
(也可能有其它档案)

--------------------------------------------------------------------------------

最近，一些 BSD 系统的起始模式将使用 /etc/rc.d... 做为启动档案的存放目录，而不是将所有的东西都丢到 /etc 下．

System V 起始模式将启动档案存放在 /etc/... 或 /etc/rc.d/... 及其下的一堆子目录中:

--------------------------------------------------------------------------------

drwxr-xr-x 2 root root 1024 Jul 6 15:12 init.d
-rwxr-xr-x 1 root root 1776 Feb 9 05:01 rc
-rwxr-xr-x 1 root root 820 Jan 2 1996 rc.local
-rwxr-xr-x 1 root root 2567 Jul 5 20:30 rc.sysinit
drwxr-xr-x 2 root root 1024 Jul 6 15:12 rc0.d
drwxr-xr-x 2 root root 1024 Jul 6 15:12 rc1.d
drwxr-xr-x 2 root root 1024 Jul 6 15:12 rc2.d
drwxr-xr-x 2 root root 1024 Jul 18 18:07 rc3.d
drwxr-xr-x 2 root root 1024 May 27 1995 rc4.d
drwxr-xr-x 2 root root 1024 Jul 6 15:12 rc5.d
drwxr-xr-x 2 root root 1024 Jul 6 15:12 rc6.d

--------------------------------------------------------------------------------

如果你尝试寻找你的乙太网路卡及网路递送设定真正的配置地方，你需要追踪到这些档案里找出配置指令的所在．

1.3. 套件相关的 PPP 配置工具
在某些安装套件(如 Red Hat 与 Caldera)，有一个以 X window 设定的 PPP 拨接系统．这份 HOWTO 并未包含这种与最件相关的工具．如果你在使用上有问题，直接和套件的发行人询问．

对於 Red Hat 4.x 的使用者，可以在 Linux 的资源区找到 Red Hat PPP-TIP，也可在支援区找到 Red Hat Software．


New Page 1

标题： ■ PPP HOWTO 中译版: IP 号码
姓名 ：Robert Hart
Email：hartr@interweft.com.au
地址 ：
转摘 ：http://member.netease.com/

返回

2. IP 号码
每一个连上网际网路的设备都必须拥有它们自己的，唯一的 IP 号码．这些是由每个国家的有关单位集中指定的．

如果你要把区域网路连上网际网路，在你的区域网路里你所拥有的所有电脑及设备都必须使用从指定给你的网路□围里分配的 IP 号码．即使连接另一个区域网路（在网际网路之外）你也绝不能凭空取用 IP 号码．如果你'偷来'的 IP 号码开始干扰其它已经使用这个 IP 的电脑的话，最糟时不仅不会动，还将会引起全体性的大破坏．

请注意在这整份文件里所使用的 IP 号码（有一些个例外）都是从保留给没有（不曾）连上网际网路的网路所使用的‘未连线网路号码’系列来的．

有一些特别留给不连接网际网路的网路使用的 IP 号码．这些 IP 号码依序是:

1 个 A-等级 的位址
10.0.0.0 (netmask 255.0.0.0)
16 个 B-等级 的位址
172.16.0.0 - 172.31.0.0 (netmask 255.255.0.0)
256 个 C-等级 的位址
192.168.0.0 - 192.168.255.0 (netmask 255.255.255.0)

如果你的网路还没从你国家的权责单位分配到 IP 号码，那麽你的机器应该使用前面所列这些网路号码中的一个．

这些号码永远不该使用在网际网路上．

然而，它们仍可使用在一部连接在网际网路的机器上的内部乙太网路卡上．因为 IP 号码是分配给网路界面，而不是电脑本身的．因此虽然你的乙太网路界面使用 10.0.0.1 (例如)，当你以 PPP 连上网际网路时，你的 PPP 界面将由伺服器分配给另一个(合法的) IP 号码．你的 PC 将有网际网路的连接能力，但其它区域网路内的电脑则没有．

不过，使用 Linux 以及 ipfwadm 软体的 IP 伪装能力(也叫做 NAT - Network address Translation 网路位置转换)，你就可以把你的区域网路上不具合法 IP 号码的机器连上网际网路（提供的服务会有些限制）．

想得到更多资讯请参考 Linux IP Masquerade mini HOWTO．

对於大部分的使用者，经由 PPP 连接单一机器到网际网路服务提供者(Internet Service Providers: ISP)，取得一个 IP 号码（或更正确的说，一个网路号码）是没有必要的．

如果你希望连接一个小型的区域网路到网际网路上，许多网际网路服务提供者可以从他们已有的 IP 位址空间中提供给你一个次网路（特定的一段 IP 号码）．或者，使用 IP 伪装能力．

对於经由 ISP 连接单一 PC 到网际网路上的使用者，大部分的提供者使用动态的 IP 指定．这是说，连线程序的一部份中，你所联系的 PPP 服务将会告诉你的机器这次连线的期间里该 PPP 界面应该使用什麽 IP 号码．每次你连上 ISP 所得到的号码不会一样．

使用动态的 IP 号码，你每次的连线不会都取得相同的 IP 号码．这对在你 Linux 机器上的伺服型态应用程式像是 sendmail, ftpd, httpd 以及诸如此类的软体而言会产生问题．这些服务根基於这部提供服务的电脑能以同样的 IP 号码取用．

由於动态的 IP 号码指定而有所限制的服务（以及解决的方法，可能的话）稍後会在这份文件中讨论．


New Page 1

标题： ■ PPP HOWTO 中译版: 这份文件的目的
姓名 ：Robert Hart
Email：hartr@interweft.com.au
地址 ：
转摘 ：http://member.netease.com/

返回

3. 这份文件的目的
3.1. 设立 PPP 客户端
这份文件提供想要使用 Linux 以及 PPP 拨接到某一台 PPP 伺服器并且使用 PPP 设立 IP 连线的人们一些指引．文件中假设 PPP 已经编译好并且安装在你的 Linux 机器上(但简短地涵盖重新配置／重新编译你的核心以便包含 PPP 支援的部份)．

虽然 DIP（建立 SLIP 连线的标准方式）可以用来创造 PPP 连线，但 DIP 指令稿一般都相当地复杂．因为这个缘故，这份文件并不涵盖使用 DIP 来建立 PPP 连线的部份．

取而代之的是，这份文件描述标准的 Linux PPP 软体(chat/pppd)．

3.2. 使用 PPP 连结两个区域网路或连结一个区域网路到网际网路上
这份文件提供关於连结两个区域网路或连结一个区域网路到网际网路上的（基本）资讯．

3.3. 设立 PPP 伺服器
这份文件提供如何配置你的 Linux PC 做为 PPP 伺服器的指引（允许其他人拨接到你的 Linux PC 并且建立 PPP 连线）．

你应该注意的是设定 Linux 作为 PPP 伺服器的方法有无数种．这份文件（目前）给你一种方式 － 作者用来它设立一台小型 PPP 伺服器（共有 16 台数据机）．

这个方式已知运作良好．不过，它不一定是最好的方式．

3.4. 使用 PPP 於直接缆线(direct null modem)连结
本文件提供使用 PPP 连结於两部 Linux PCs 於 null modem 缆线的简短描述．以此法连结其它作业系统於 Linux 也是可能的．如果要这样做，你必须参考你要连结的作业系统的文件．

3.5. 这份文件目前尚未涵盖的...

编译 PPP 软体
参见随附你使用的 pppd 版本而来的文件．
连接以及配置数据机到 Linux 上(细节)
请参阅 Serial-HOWTO，以及数据机相关的起始设定，参阅 Modem Setup Information 里的资讯可能对你设定数据机有所帮助．
使用 DIP 创造 PPP 连线
使用 chat 取代...
使用 socks 或是 IP Masquerade
已经有涵盖这两个套件的绝佳文件．
使用 diald 以建立自动连线
请参阅 diald 文件里的资讯．
使用 EQL 将两部数据机合成单一 PPP 连结．
与套件相关的 PPP 连线方法(例如 Red Hat 4.x 网路设定工具)
请参阅该套件中的文件．
不断增加的自动建立 PPP 工具
请参阅适当的文件．


New Page 1

标题： ■ PPP HOWTO 中译版4,5
姓名 ：Robert Hart
Email：hartr@interweft.com.au
地址 ：
转摘 ：http://member.netease.com/

返回

4. 涵盖的软体版本
这份使用说明假设你使用 Linux 1.2.x 核心配合 PPP 2.1.2 软体或 Linux 1.3.X/2.0.x 以及 PPP 2.2 版．

在本文件撰写之时，Linux 的 PPP 软体最新正式版本是 ppp-2.2f．最新的版本(ppp-2.3)还在 beta 阶段．

使用 PPP 2.2.0 配合核心 1.2.13 是有可能的．然而，要这样做需要核心修补．建议核心 1.2.13 版本的使用者升级到 ppp-2.2 因为它包含了许多错误修正及功能加强．

还有，你应特别注意不能将 PPP 2.1.2 与 Linux 核心 2.0.X 合用．

请注意这份文件不包括使用 Linux 核心 2.0.x 的可载入模组所引起的问题．请参阅 kerneld mini-HOWTO 以及核心／模组 2.0.x 的文件（在 Linux 2.0.x 的原始程式目录 /usr/src/linux/Documentation/... 里）．

因为这份文件是设计来协助新手的，强烈建议你使用已知能稳定地共同运作的 Linux 版本及适当的 PPP 版本．

--------------------------------------------------------------------------------5. 其它有用的／重要的文件
鼓励使用者阅读:-

随附於 PPP 套件的文件;
pppd 以及 chat 的线上使用手册;
(使用 man chat 以及 man pppd 来阅读)
Linux 网路管理指引 (NAG);
参阅 The Network Administrators' Guide
Net-2/3 HOWTO;
参阅 Linux NET-2/3-HOWTO
在 /usr/src/linux/Documentation 里的 Linux 核心文件;
数据机设定资讯 - 参阅 Modem Setup Information
由 O'Reilly and Associates 出版的最佳 Unix/Linux 书籍（参阅 O'Reilly and Associates On-Line Catalogue 里的目录）．如果你是 Unix/Linux 的新手，立刻跑（不要用走的）到离你最近的电脑书店去投资几样这些资料．
由 Al Longyear 所维护的 PPP-FAQ，可在 Linux PPP-FAQ 取得．
里面包括了大量有用的资讯以问答的形式出现，在试图找出为何 PPP 不能(正常)工作时相当有用．
不断新增由不同出版社与作者出品的书籍;
鼓励你去查阅这些流通的书籍．Linux 的发展与套件的演进相当快速，而书籍的改版速度(一般来说)相当的慢! 买一本已经过期的好书(现在有许多)可能使得新使用者感到困惑与失望．

Linux 文件的最佳起点就是 The Linux Documentation Project Home Page. HOWTOs 倾向於定期地更新．

虽然即使不必阅读这些资料中的任何一份你也可以使用这份文件来建立你的 PPP 连结，但是如果你去阅读这些文件那麽你对於你所做的究竟发生了些什麽将会了解更多! 你将能够精确的提出自己的问题(或至少在 comp.os.linux... 新闻讨论群或 Linux mailing lists 中问出较有深度的问题)．

这些文件（与各种其它文件，包括相关的 RFCs 等）提供额外的以及比这份使用说明所能包含的更多细节解释．

如果你要使用 PPP 连接区域网路到网际网路上，那麽你将得知道一些关於 TCP/IP 网路运作的知识．补充一点这份文件前面提到的资料，你将会发现 O'Reilly 出版的 "TCP/IP Network Administration" 以及 "Building Internet Firewalls" 很有好处!

5.1. 有用的 Linux 电子邮递列表
有许多在不同使用者等级之间流通的电子邮递列表(mailing lists)．选择你有兴趣以及对你专业知识及观点有所帮助的列表来订阅．

一些忠告: 有些列表是给那些"专家级"使用者或是特殊主题的．虽然没有人会抱怨你"潜伏"(订阅但不发表文章)在里面，不过如果你在不适合的列表中提出"新手"的问题你可能会收到一些愤怒的意见．

这并不是因为专家级的使用者讨厌新进的使用者，而是因为这些列表是用来处理具有一定困难度的特殊主题的．

加入那些可以公开订阅的列表，但请局限你的意见於列表的相关主题上面．

Linux 电子邮递列表一个很好的起点是 Linux Mailing List Directory．


New Page 1

标题： ■ PPP HOWTO 中译版: 将 PPP 设定为客户端的工作概要
姓名 ：Robert Hart
Email：hartr@interweft.com.au
地址 ：
转摘 ：http://member.netease.com/

返回

6. 将 PPP 设定为客户端的工作概要
这份文件包含了许多资讯 - 而且每次改版又不断增加!

因此，本节的目的在於提供一简短的概要说明要将你的 Linux 系统作为客户端连接到 PPP 伺服器所需的工作．

6.1. 取得/安装软体
如果你的 Linux 套件并未包含 PPP 软体，你可从此取得: the Linux PPP daemon.

这是本文件撰写的时候最新正式版本．然而，尽量从该站取的最新的版本(本文件撰写时 ppp-2.3 尚在 beta 阶段而且应该很快会发行)．

这份 PPP 套件包含了如何编译及安装所需的指引，因此本文并不包含此部份!

6.2. 编译核心加入 PPP 支援
Linux 的 PPP 运作包含两部份

上面提到的 PPP daemon
PPP 的核心支援

许多套件似乎在它们预设的安装核心中提供 PPP 的支援，但其馀则否．

如果在启动时核心报告这样的讯息

--------------------------------------------------------------------------------

PPP Dynamic channel allocation code copyright 1995 Caldera, Inc.
PPP line discipline registered.

--------------------------------------------------------------------------------

你的核心已编译 PPP 支援在内．

那就是说，不论你使用什麽套件你可能希望自行编译核心以在你的特定硬体配置之下得到最有效的系统资源利用．请记住核心不能被置换出记忆体因此尽量让核心保持最小在记忆体有限的机器上相当有用．

本文件在 配置你的 Linux 核心 一节提供了重新编译核心的最少说明．

细节部份请参阅 The Linux Kernel HOWTO．

6.3. 从你的 ISP 取得资讯
几乎有无数种设定 PPP 伺服器的方法．为了连上你的 ISP, 你必须取得 PPP 伺服器如何运作的资讯．

因为你用的是 Linux, 在一些仅知道 MS Windows 客户端的 ISP 谘询部门可能会遭遇困难．

然而，愈来愈多的 ISP 使用 Linux 提供服务 - 而且 Linux 也渗入公司环境，如果你真的遇到问题你也可能会很幸运．

取得你所需的 PPP 伺服器资讯 一节告诉你需要知道你连接的 PPP 伺服器的什麽资讯 - 以及如何找出这些资讯．

6.4. 设定你的数据机及串列埠
为了连上 PPP 伺服器并取得最佳的资料传输速率，你的数据机必须设定正确．

同样地，连接数据机及电脑的串列埠也必须正确地设定．

设定你的数据机及串列埠 一节提供这方面的资讯．

6.5. 建立名称到位址解析(DNS)
除了执行 PPP 及自动签入 PPP 伺服器的档案之外，还有一些文字配置档案必须设定，以便让你的电脑能将像这样的名称 www.interweft.com.au 解析为 IP 位址以便真正与那台电脑连线．这些档案是:-

/etc/resolv.conf
/etc/host.conf

建立名称到位址解析 一节提供这方面的设定细节．

特别地，你并不需要在你的 Linux PC 上执行名称伺服器以连接到网际网路上(虽然或许你会想这麽做)．你所需的只是知道至少一部你能使用的名称伺服器 IP 位址(最好是你的 ISP 所提供的)．

6.6. PPP 与 root 权限
因为在你的 Linux 电脑与另一个 PPP 伺服器建立连结需要操作网路界面(PPP 界面是一个网路界面)与核心的路由表，pppd 需要使用 root 的权限．

细节部份，参阅 使用 PPP 与 root 权限 一节．

6.7. 检查你的 PPP 套件档案及设定 PPP 选项
有好几个配置及拨号档案需要建立以便让 PPP 运作．在 PPP 套件中有一些□例，而本节告诉你应有的这些档案是什麽:-

--------------------------------------------------------------------------------

/etc/ppp/options
/etc/ppp/scripts/ppp-on
/etc/ppp/scripts/ppp-on-dialer
/etc/ppp/options.tpl

--------------------------------------------------------------------------------

看你想用 PPP 达到的目标是什麽你可能需要一些额外的档案:-

--------------------------------------------------------------------------------

/etc/ppp/options.ttyXX
/etc/ppp/ip-up
/etc/ppp/pap-secrets
/etc/ppp/chap-secrets

--------------------------------------------------------------------------------

除此之外，PPP daemon 有大量的线上选项，正确地使用是很重要的; 因此本节带你看这些标准 PPP 选项并帮助你选择你应使用的选项．

细节部份，请参阅 设定 PPP 连接档案 一节．

6.8. 如果你的 PPP 伺服器使用 PAP 认证(Password Authentication Protocol)
许多 ISP 设立 PPP 伺服器使用 PAP 认证．如果你的伺服器并不使用 PAP (如果你可以用手动签入并收到标准的使用者名称/密码提示符号那麽它并未使用 PAP)，那麽你可以跳过此节．

取代在进入伺服器时出现提示符号输入使用者名称及密码的是，使用 PAP 的 PPP 伺服器并不需要文字模式的签入方式．

使用者认证是连接控制协定(link control protocol, LCP)的一部份，在建立 PPP 连线之初期交换的资讯．

如果你的 PPP 伺服器使用 PAP 认证(Password Authentication Protocol) 一节提供你使用 PAP 建立 PPP 连结所需档案的资讯．

6.9. 以手动方式连接至 PPP 伺服器
已经建立完基本的档案之後，透过手动(使用 minicom 或 seyon)的方式连接及启动你 Linux PC 的 pppd 来测试是个不错的主意．

参见 以手动方式建立 PPP 连结 说明设定的细节部份．

6.10. 使你的 PPP 连结自动化
一旦你成功地用手动方式签入，你可以试著建立一指令稿以自动建立此连结．

使你的连结自动化 - 创造连结指令稿 一节包含了建立所需的指令稿，以及相当多的注意力集中在 chat 命令於 PPP 伺服器的签入过程．

这节也讨论了使用指令稿於 PAP/CHAP 认证的伺服器上．

6.11. 结束连结
一旦你的连结能够建立并正常正作，你必需能够结束连结．

这在 结束 PPP 连结 一节说明．

6.12. 如果你遭遇问题
许多人无法让 PPP 正常地工作．PPP 伺服器的种类以及和它们建立连线的方法有非常多种．类似地，PPP 有许多的选项 - 而有些选项是不能一起用的．

除了签入并起始 PPP 服务的问题之外，数据机本身及电话线路也可能会有问题．

解决问题 一节提供一般错误的基本资讯，以及如何分离并解决的方法．

这里提供的不过是基本的资讯．Al Longyear 所维护的 PPP-FAQ 包含了更多这一方面的资讯!

6.13. 建立连结之後
一旦 PPP 连结可以运作了(特别地，一旦 IP 层可以运作)，Linux 的 PPP 可以自动执行(以 root 身份)一指令稿完成任何你想达成的功能．

建立连结之後 一节提供 /etc/ppp/ip-up 指令稿的资讯，它如何接收 PPP 传来的参数以及如何利用它来做一些像自 ISP 取回你的电子邮件，送出在你机器伫列中存放的邮件等等工作．

6.14. 动态 IP 连接提供标准 IP 服务的问题
就像在简介一节里指出的，动态 IP 号码影响你的 Linux PC 作为网际网路伺服器的能力．

动态 IP 连接提供标准 IP 服务的问题 一节提供(主要)受影响的服务以及你所能做(如果有的话)的克服办法．


New Page 1

标题： ■ PPP HOWTO 中译版: 7,8,9
姓名 ：Robert Hart
Email：hartr@interweft.com.au
地址 ：
转摘 ：http://member.netease.com/

返回

7. 配置你的 Linux 核心
为了要能够使用 PPP，你编译的 Linux 核心必须包含 PPP 的支援．如果你还没有 Linux 的原始程式码请先取得 － 在 Linux 的档案系统标准中它是放在 /usr/src/linux 里面．

检查这个目录 - 许多的 Linux 套件会在安装过程中安装此原始程式码(档案及次目录)．

在启动时，你的 Linux 核心会印出大量的讯息．如果核心支援 PPP 的话会包含此一讯息．要观看这些讯息的话，看看你的系统记录档或用 dmesg | less 指令将这些讯息显示在萤幕上．如果核心支援 PPP 的话你将会看到像这样的几行 8. 取得你所需的 PPP 伺服器资讯
在你可以建立到某台伺服器的 PPP 连线之前，你需要取得下列的资讯（从 PPP 伺服器的系统管理／使用者支援人员取得）:-

拨接服务的电话号码
如果你是在私用交换机(PABX)系统下，你还需要拨出外线信号的私用交换机号码 － 通常是 0 或 9．
伺服器使用动态或静态的 IP 号码?
如果伺服器使用静态的 IP 号码，那麽你需要知道在 PPP 连线中你这端要使用哪个 IP 号码．如果你的 ISP 提供你一合法 IP 号码的次网路，你需要知道你能使用的 IP 号码及网路遮罩．
大部分的网际网路服务提供者都使用动态的 IP 号码．如前述，这对於你可以使用的服务会有些限制．
然而，即使你使用静态的 IP 号码，大部份的 PPP 伺服器也不允许(为了安全理由)客户端自行指定 IP 号码，因为这有安全风险．你仍然必须知道这些资讯．
ISP 的领域名称伺服器 IP 号码是什麽?
虽然只需要一个但最少应该得要有两个．
这里可能会有一个问题．微软的 Windows 95 PPP 设定允许让 DNS 的地址在连线过程中传到客户端．因此你的 ISP (或公司的谘询室)可能会告诉你不需要知道 DNS 伺服器的 IP 位址．
对於 Linux 来说，你必须至少知道一个 DNS 的位址．目前 Linux 的 PPP 实作中不允许在连立连线之时动态地指定 DNS 的 IP 号码 - 很可能将来也不会．
注意: 虽然，Linux (作为 PPP 的客户端)不能从伺服器中接受 DNS 的位址，然而，作为 PPP 伺服器时，它可以用 pppd 的选项 dns-addr 为客户端指定这个资讯．
该伺服器是否需要使用 PAP/CHAP?
如果是这样你需要知道你用来连线 "id" 以及 "secret" ．（这大概会是你的在这个 ISP 的使用者名称以及密码）．
伺服器会自动起动 PPP 或者在一旦你签入之後需要发出任何指令来起动伺服端的 PPP?
如果你必须下某个指令来起动 PPP 的话，它是什麽?
如果伺服器是微软的 Windows NT 系统，它是否使用微软的 PAP/CHAP 系统?
许多公司的区域网路似乎是使用 Windows NT 的系统以增加安全性．

仔细地注意这些资讯 － 你马上要使用它们!

9. 设定你的数据机及串列埠
你应该确认你的数据机设定正确而且你知道它连接到哪个串列埠．

谨记:-

DOS com1: = Linux /dev/cua0 (and /dev/ttyS0)
DOS com2: = Linux /dev/cua1 (and /dev/ttyS1)
等等

还要提醒你就是如果你有四个串列埠，标准 PC 上让 com1 与 com3 共用 IRQ4 且让 com2 与 com4 共用 IRQ3．

如果你有其它机装置和串列埠共用一个 IRQ 的话可能会有问题．你必须确定你的数据机串列埠拥有它自己，唯一的一个 IRQ．许多现在的串列埠卡(与品质较佳的主机板上的串列埠)允许你将串列埠上的 IRQ 移开．

如果你在用 Linux 2.0.X 核心，你可以用 cat /proc/interrupts 检查使用中的 IRQ，你会看到像这样的输出结果

--------------------------------------------------------------------------------

0: 6766283 timer
1: 91545 keyboard
2: 0 cascade
4: 156944 + serial
7: 101764 WD8013
10: 134365 + BusLogic BT-958
13: 1 math error
15: 3671702 + serial

--------------------------------------------------------------------------------

这里显示了一个串列埠在 IRQ4 (一个滑鼠)与一个串列埠在 IRQ15． (也有一串列埠在 com2, IRQ3 与 com4 是在 IRQ14，但并未使用，没有显示出来)．

请小心 - 如果你要调你的 IRQ 的话你要确实知道你在做些什麽! 你不只需要打开你的电脑外壳，将界面卡拔下并调整 jumper，你还需要知道那个占用什麽 IRQ．以我的例子来说，这完全是以 SCSI 为主的 PC，因此我将主机板上的通常会占用 IRQ14 与 15 的 IDE 界面关掉．

你还需要注意如果你的 PC 还跑了其它的作业系统，更动 IRQ 的位址可能使那个作业系统启动不正常，或根本开不了机!

如果真的将串列埠移到了非标准的 IRQ，那麽你需要告诉 Linux 每一个埠所用的 IRQ 位址．这可以用 setserial 指令达成，而且最好将它放到 rc.local，或在 SysV 系统中由 rc.local 所呼叫的 rc.serial 里面成为开机过程的一部份．以我上面所列的机器来说，用这样的指令

--------------------------------------------------------------------------------

/bin/setserial -b /dev/ttyS2 IRQ 11
/bin/setserial -b /dev/ttyS3 IRQ 15

--------------------------------------------------------------------------------

然而，如果你使用由 kerneld 行程所负责的动态载入串列模组，你不能像这样每次开机时设定一次 IRQ 後就把它忘了．这是因为如果串列模组被移除，Linux 就会忘了这些特殊的设定．

因此，如果你以动态方式载入串列模组，你必须要在每入载入模组时重新设定 IRQ 才行．

9.1. 串列埠与速度相容性的注意事项
如果你使用高速(外接式)数据机(14,400 baud 或更高)，你的串列埠速度必须能够处理这种数据机所产生的资料量，特在是当数据机在压缩资料时．

你的串列埠需要一种新型的 UART (Universal Asynchronous Receiver Transmitter)，像是 16550(A)．如果你在使用一部旧的机器(或旧的串列卡)，很可能串列埠上只有旧的 8250 UART，这在你使用高速数据机时可能会发生问题．

使用这个指令

setserial -a /dev/ttySx

让 Linux 回报你使用的 UART 类型．如果你没有 16550A 型的 UART，去买一块新的串列卡(不到 $50)．当你买一块新卡时，确定你能调整上面的 IRQ!

注意: 最早版本的 16550 UART 晶片上有瑕疵．这点很快就被发现了而且也发行了新版的晶片 - 16550A UART．但仍有少部份有瑕疵的晶片流入了市面．虽然不太可能刚好就让你买到，但你还是应该看一下晶片类型是不是 16550A，特别是在一些较早期的串列卡上．

9.2. 串列埠名称
以前，Linux 用 cuaX 表示拨出的串列埠名而 ttySx 表示拨入的名称．

自核心 2.0.X 之後这样的要求已经改变了，所以你应该可以用 ttySx 同时表示拨入及拨出的名称．据我了解 cuaX 的装置名称在未来版本的核心中可能会取消．

9.3. 配置你的数据机
为使用 PPP 你将得正确地配置你的数据机 － 要完成这件工作请阅读你的数据机使用手册! 大部分的数据机都有 PPP 所需求的的出厂预设选项．最基本的配置是:-

硬体流量控制 (RTS/CTS) (&K3 在许多采用 Hayes 指令集的数据机)

你应该要研究的其它设定（使用标准 Hayes 指令）是:

E1 开启指令的本地回应 (chat 运作所需)
Q0 回报执行结果代码 (chat 运作所需)
S0=0 关闭自动回应 (除非你想让你的数据机接听电话)
&C1 只在连线之後侦测载波
&S0 Data Set Ready (DSR)永远设为开启
(看情况) Data Terminal Ready

有一个站台提供你不断增加的数据机款式的设定，可能会对你有所帮助，在 Modem setup information．

在你的电脑与数据机之间的数据机串列面界面如何运作也值得研究了解．大部分现代的数据机都允许你以固定的速度使用串列界面，即使电话线路界面切换到最高的速度它跟远端数据机都能够处理．

这称为 split speed operation．如果你的数据机能支援这项功能，把数据机的串列界面锁定在它的最高速度（通常是 115,200 baud ，但对 14,400 数据机来说可能是 38,400 baud）．

使用你的通讯软体（例如 minicom）找出关於你数据机的配置资讯并且设为 PPP 所需的设定．许多数据机会在 AT&V 指令的回应中回报它们目前的设定状况，但是你应该查看一下你的数据机使用手册．

如果你把设定全都弄乱了，那麽你可以藉由发出 AT&F 指令回到稳定状态（通常可以） － 回到出厂设定．（在我遇过的大部分现代数据机中，出厂的设定包含所有使用 PPP 所需的设定 － 但是你应该做个检查）．

一旦你找出了必要的设定字串就把它写下来．然後你必须做个决定: 你可以将这些设定值存在数据机上的非挥发性记忆体中这样可以用适当的 AT 指令就可叫出．另一个做法是将这些正确的设定在 PPP 的拨号过程中传入．

如果你只从 Linux 下使用数据机连接到 ISP 伺服器，最简单的做法就是将这些设定值存入数据机上的非挥发性记忆体(non-volatile RAM)．

另一方面，如果你要还在其它的应用程式或作业系统上使用数据机，最保险的做法是在每次拨号时才将这些资讯传入，如此可以确保在每次拨号时数据机总是在正确的状态．(记下这些设定字串还有个好处就是在数据机遗失了记忆体的内容时，这确实可能发生)．

9.4. 串列流量控制注意事项
当资料在串列通讯线路上流动的时候，可能会发生资料到达的比电脑能处理的还要快这种情况（电脑可能忙著做其它的事 － 记得，Linux 是一个多使用者，多工的作业系统）．为了确保资料不会漏失（在缓冲区中的资料不会超载而因此漏失掉），需要某些控制资料流量的方法．

有两种方法可以在串列线路上达成这个目的:-

使用硬体信号(Clear To Send/Request to Send - CTS/RTS)
使用软体信号(control S and control Q, also known as XON/XOFF).

虽然後者用在终端机（文字）连结上可能很好，但是在 PPP 上的资料使用整个 8 bits 编码空间 － 而且在资料中的某个地方相当可能存在会被转成 control S 以及 control Q 的位元组．所以，如果数据机设成使用软体流量控制的话，那麽传输很容易被扰乱!

对於使用 PPP 的高速连结（使用 8 bits 资料编码）来说硬体流量控制是很重要的，因此你必须使用硬体流量控制．

9.5. 测试你的数据机的拨出功能
在你完成了串列埠与数据机的设定之时试著拨到你的 ISP 上看看能否连上以确定设定是否有误．

使用你的终端机通讯软体（像是 minicom），拨到你想使用 PPP 连线的那台 PPP 伺服器．

（注意: 在这个阶段我们并不尝试建立 PPP 连线 － 只是要证实我们拥有正确的电话号码以及为了签入并且起动 PPP 而确实地找出伺服器究竟传送给我们什麽讯息）．

在这个过程中，可以截取（记录到一个档案里）整个签入的过程或者是小心地（非常小心地）确实写下远端伺服器所给你提示输入你的使用者名称以及密码的讯息（以及任何建立 PPP 连线需要下达的指令）．

如果你的伺服器使用 PAP，你可能不会看见签入的提示符号，而是(以文字表示的)连结通讯协定(看起来像是垃圾)出现在你的萤幕上．

一些警告:-

某些伺服器相当聪明: 你可以用文字模式的使用者名称/密码方式或使用 PAP 签入．因此如果你的 ISP 或公司站台使用 PAP 但你没有立刻在萤幕上看到垃圾，也并不表示你做错了．
某些站台要求你先输入一些起始的文字然後才启动标准的 PAP 程序．
某些 PPP 伺服器是被动的 - 它们就坐在那里等待而不送出任何资料，直到客户端拨入并送出合法的连结控制协定．如果你要连接的 PPP 伺服器是被动模式的，你将不会看到任何垃圾!
某些伺服器在你按下 ENTER 前不会启动 PPP - 因此如果你正确签入但未看到垃圾的话可以试试!

这最少值得拨接两次 － 某些伺服器会在每次你签入时改变提示（例如依时间改变!）．你的 Linux 机器在每次你拨入的时候要能够辨认的两个主要的提示是:-

要求你输入使用者名称的提示;
要求你输入密码的提示;

如果你必须发出某个指令来起动伺服端的 PPP，那麽你也需要找出一旦你签入之後伺服器所给你输入指令以启动 PPP 的提示．

如果你的伺服器自动起动 PPP 的话，一旦你签入完成，你将开始见到萤幕上出现垃圾 － 这是 PPP 伺服端传送给你的机器以起动并且配置 PPP 连线的资讯．

这看起来应该会是像这样的东西:-

--------------------------------------------------------------------------------

~y}#.!}!}!} }8}!}$}%U}"}&} } } } }%}& ...}'}"}(}"} .~~y}

--------------------------------------------------------------------------------

(而且它还会一直进来! )

在某些系统中 PPP 必须在伺服端上明确地加以起动．这通常是因为该伺服器被设定成允许使用相同使用者名称／密码配对来做 PPP 签入及一般使用界面(shell) 的签入．如果是这样，一旦你签入就发出该指令．再一次，你将会见到 PPP 连线伺服端起动的垃圾资讯 － 所以现在你可以挂断了．

如果你没有在连上时立即在萤幕上看到这些垃圾(如果必要的话先签入并启动 PPP 伺服器)，按下 Enter 试试能否启动 PPP 伺服器...

这个时候，你就可以挂断你的数据机（通常是，快速地键入 +++ 一旦你的数据机回应 OK 然後接著下 ATHO 指令）．

如果你不能使你的数据机运作的话，阅读你的数据机使用手册，你通讯软体的线上使用手册以及 Serial HOWTO! 一旦你解决该问题，继续进行前面所说的．


New Page 1

标题： ■ PPP HOWTO 中译版: 10,11,12
姓名 ：Robert Hart
Email：hartr@interweft.com.au
地址 ：
转摘 ：http://member.netease.com/

返回

10. 建立名称到位址解析(DNS)
虽然我们人类喜欢给事物取个名称，电脑喜欢数字．在 TCP/IP 网路上（这也就是网际网路），我们藉由特定的名称呼叫某台机器，而且每台机器都存在於一个特定的领域标记里面．举例而言，我的 Linux 工作站称为 archenland 而它是存在於 interweft.com.au 这个领域里．所以它在人们心目中的位址就是 archenland.hedland.edu.au． (称为 FQDN - fully qualified domain name．)

然而，为了使网际网路上的其它电脑找的到这台机器，事实上电脑在网际网路上沟通时它是藉由其 IP 号码来认知的．

把机器（以及领域）的名称转译（解析）成为在网际网路上所实际使用的 IP 号码是提供领域名称服务之机器的工作．

它是这样子运作的:-

你的机器需要知道某部特定电脑的 IP 位址．需要这项资讯的应用程式向你的 Linux PC 上的'名称解析器'询问此资讯;
名称解析器查询机器内部的主机名称档案(可能是 /etc/hosts 以及/或是知道这项资讯的领域名称伺服器，而名称解析器实际的行为由 /etc/host.conf 档案决定);
如果答案在主机名称档案中，就以此答案回答;
如果是在指定的领域名称伺服器中，你的 PC 就向该机器询问;
如果这部领域名称伺服器已经知道被询问名称的 IP 号码，就以此回答．否则，它会透过网际网路向其它的名称伺服器找寻资讯．最後这部名称伺服器会将资讯传回给原来询问的名称解析器，然後传给要求此资讯的应用程式．

当你创造出 PPP 连线时，你需要告诉你的 Linux 机器它可以在哪里找到主机名称对照到 IP 号码（位址解析）的资讯，如此你就可以使用机器的名称而你的电脑可以把这些名称转译成它运作所需的 IP 号码．

一个方法是输入所有你想联络的主机到 /etc/hosts 档案里（如果你是连上网际网路的话这真的是完全不可能的事）；另一个方法是使用相对於机器名称的 IP 号码（要记得全部的 IP 位址是不可能的除非在最小的区域网路上）．

最好的方法是设定你的 Linux 使它知道该到哪取得这项名称到号码的资讯 － 自动地．这项服务是由领域名称伺服器系统所提供．需要做的全部工作是把 IP 号码输入到你的 /etc/resov.conf 档案里．

10.1. /etc/resolv.conf 档案
你的 PPP 伺服器系统管理／使用者支援人员应该要提供给你两个 DNS 的 IP 号码（只需要一个 － 但是两个在出问题时可以多些帮助）．

如前所述，Linux 不能以像 MS Windows 95 一样的方式来设定它的名称伺服器的 IP 号码．所以你必须(有礼貌地)坚持你的 ISP 提供你这项资讯!

你的 /etc/resolv.conf 看起来应该会像这样:

--------------------------------------------------------------------------------

domain your.isp.domain.name
nameserver 10.25.0.1
nameserver 10.25.1.2

--------------------------------------------------------------------------------

编辑这个档案（如果没有的话就建一个新的）以呈现你的 ISP 提供的资讯．它的拥有者以及权限应该像下面这样:-

-rw-r--r-- 1 root root 73 Feb 19 01:46 /etc/resolv.conf

如果你因为本来就在区域网路上所以已经设立 /etc/resolv.conf 档案的话，只要简单的把 PPP 连线的 DNS 伺服器 IP 号码加到你已有的档案里即可．

10.2. /etc/host.conf 档案
你也应该检查你的 /etc/host.conf 档案是否设定正确．它看起来应该像这样

--------------------------------------------------------------------------------

order hosts,bind
multi on

--------------------------------------------------------------------------------

它告诉你的名称解析器在向名称伺服器询问之前先使用主机名称档案中的资讯．

11. 使用 PPP 与 root 权限
因为 PPP 需要设定网路设备，变更核心递送表格以及诸如此类的动作，所以它需要以 root 的权限来做这些事．

如果 root 以外的使用者要能建立 PPP 连线，那麽 pppd 程式应该设为以 root 的身分执行(setuid):-

-rwsr-xr-x 1 root root 95225 Jul 11 00:27 /usr/sbin/pppd

如果 /usr/sbin/ppd 不是设定为这样，那麽以 root 的身分下这个指令:

chmod u+s /usr/sbin/pppd

这样是让 pppd 以 root 的权限执行，即使是由一般使用者所执行的．这能让一般使用者执行的 pppd 具有必要的权限建立网路界面及核心递送表格．

以 root 的身分执行的程式在安全上是潜在的漏洞，所以你对於设定为 'setuid' 的程式必须非常地小心．许多地程式(包括 pppd)已经被小心地撰写以将用 root 的身分执行的危险降到最低，所以这样做应该是安全地(不过不保证)．

根据你希望你的系统如何运作而定，特别是如果你希望你系统里的任何使用者都能启始 PPP 连结，你应该把你的 ppp-on/off 指令稿设定为全部的人都可以读取／执行．（如果你的 PC 只由你使用那麽这样大概不错）．

然而，如果你不希望任何人都能起始 PPP 连线（例如，你的孩子在你的 Linux PC 上有帐号而你不希望他们在没有你的监督下连上网际网路），你将得建立一个 PPP 群组（编辑 /etc/group 档案）并且:

将 pppd 设定为以 root 的权限执行，拥有者是 root 而群组是 PPP，而其它的权限都关闭．它看起来应该像这样
-rwsr-x--- 1 root PPP 95225 Jul 11 00:27 /usr/sbin/pppd

使 ppp-on/off 指令稿由使用者 root 以及群组 PPP 所拥有
使 ppp-of/off 指令稿能由群组 PPP 读取／执行
-rwxr-x--- 1 root PPP 587 Mar 14 1995 /usr/sbin/ppp-on
-rwxr-x--- 1 root PPP 631 Mar 14 1995 /usr/sbin/ppp-off

关闭其它的存取权限
把能够起动 PPP 的使用者加入 /etc/group 档案的 PPP 群组里

即使如此，一般使用者仍然无法以软体的方式中止连结．执行 ppp-off 指令稿需要 root 的权限．然何，任何使用者都可以关掉数据机(或将电话线由内接式数据机拔下)．

另外一种(更好的)办法，允许使用者使用 sudo 来起动 ppp 连结．这样可以提供更佳的安全性并且可以让你设定让任何(可信任的)使用者使用指令稿来启动/结束连结．使用 sudo 可以让一位可信任的使用者乾净而安全地启动/结束 PPP 连结．

12. 设定 PPP 连接档案
你必须以 root 身份签入来建立这些目录并且编辑这些设立 PPP 连线所需的档案，即使你想让所有的使用者都能使用 PPP．

PPP 使用几个档案来建立并设定 PPP 连结．这些档案在 PPP 2.1.2 与 2.2 中的名称与位置都不同．

在 PPP 2.1.2 中这些档案是:-

--------------------------------------------------------------------------------

/usr/sbin/pppd # PPP 执行档
/usr/sbin/ppp-on # 拨号/连线指令稿
/usr/sbin/ppp-off # 断线指令稿
/etc/ppp/options # 所有连线所使用的选项
/etc/ppp/options.ttyXX # 给某一特定通讯埠使用的选项

--------------------------------------------------------------------------------

在 PPP 2.2 中这些档案是:-

--------------------------------------------------------------------------------

/usr/sbin/pppd # PPP 执行档
/etc/ppp/scripts/ppp-on # 拨号/连线指令稿
/etc/ppp/scripts/ppp-on-dialer # 拨号的 chat 指令稿部份
/etc/ppp/scripts/ppp-off # 断线指令稿
/etc/ppp/options # 所有连线所使用的选项
/etc/ppp/options.ttyXX # 给某一特定通讯埠使用的选项

--------------------------------------------------------------------------------

Red Hat Linux 的使用者应注意标准的 Red Hat 4.X 安装将这些指令稿放在 /usr/doc/ppp-2.2.0f-2/scripts．

在你的 /etc 目录里应该要有个目录:

drwxrwxr-x 2 root root 1024 Oct 9 11:01 ppp

如果它不存在的话 － 以这样的权限建立它．

如果这个目录已经存在，它应该会包含一个称为 options.tpl 的选项档案样板．这个档案包括在下面．

因为它包含所有 PPP 选项的解释所以请你把它印出来（配合 pppd 的线上使用手册来阅读将会是很有用的）．虽然你可以使用这个档案作为 /etc/ppp/options 档案的基础，但是建立你自己的，没有包含所有在这个样板里的指令的选项档案可能会更好 － 它会短得多而且比较容易阅读／维护．

如果你有多个串列线路／数据机（典型的例子是 PPP 伺服器），那麽建立一个一般化的 /etc/ppp/options 档案，其中包含每个你提供支援拨入的串列埠所使用的共同选项并且为每一个需要个别设定以建立 PPP 连线的串列线路设立个别的选项档案．

这些档案名为 options.ttyx1, options.ttyx2 依此类推（其中 x 是你串列埠的适当代码）．

然而，对於单一 PPP 连线，你可以直接使用 /etc/ppp/options 这个档案．另外一种办法，你可以把所有的选项放进 pppd 指令作为参数．

使用 /etc/ppp/options.ttySx 档案的设定方式会比较容易加以维护．如果你使用 PPP 来连线到好几个不同的节点去的话，那麽你就可以在 /etc/ppp/options.site 里面为每个节点建立选项档案然後在你连线时指定选项档案作为 PPP 指令的参数． (使用 file option-file 参数於 pppd 的指令列)．

12.1. 替代的 options.tpl 档案
某些个 PPP 的发行套件似乎漏失了 options.tpl 这个档案，所以在这里有个完整的档案．我建议你不要直接编辑这个档案来建立你自己的 /etc/ppp/options．把它拷贝到一个新的档案然後编辑该档案比较好．如果你弄乱了你编辑的档案，你可以回头从原始档案再度开始．

--------------------------------------------------------------------------------

# /etc/ppp/options -*- sh -*- general options for pppd
# created 13-Jul-1995 jmk
# autodate: 01-Aug-1995
# autotime: 19:45

# Use the executable or shell command specified to set up the serial
# line. This script would typically use the "chat" program to dial the
# modem and start the remote ppp session.
#connect "echo You need to install a connect command."

# Run the executable or shell command specified after pppd has
# terminated the link. This script could, for example, issue commands
# to the modem to cause it to hang up if hardware modem control signals
# were not available.
#disconnect "chat -- \d+++\d\c OK ath0 OK"

# async character map -- 32-bit hex; each bit is a character
# that needs to be escaped for pppd to receive it. 0x00000001
# represents '\x01', and 0x80000000 represents '\x1f'.
#asyncmap 0

# Require the peer to authenticate itself before allowing network
# packets to be sent or received.
#auth

# Use hardware flow control (i.e. RTS/CTS) to control the flow of data
# on the serial port.
#crtscts

# Use software flow control (i.e. XON/XOFF) to control the flow of data
# on the serial port.
#xonxoff

# Add a default route to the system routing tables, using the peer as
# the gateway, when IPCP negotiation is successfully completed. This
# entry is removed when the PPP connection is broken.
#defaultroute

# Specifies that certain characters should be escaped on transmission
# (regardless of whether the peer requests them to be escaped with its
# async control character map). The characters to be escaped are
# specified as a list of hex numbers separated by commas. Note that
# almost any character can be specified for the escape option, unlike
# the asyncmap option which only allows control characters to be
# specified. The characters which may not be escaped are those with hex
# values 0x20 - 0x3f or 0x5e.
#escape 11,13,ff

# Don't use the modem control lines.
#local

# Specifies that pppd should use a UUCP-style lock on the serial device
# to ensure exclusive access to the device.
#lock

# Use the modem control lines. On Ultrix, this option implies hardware
# flow control, as for the crtscts option. (This option is not fully
# implemented.)
#modem

# Set the MRU [Maximum Receive Unit] value to <n> for negotiation. pppd
# will ask the peer to send packets of no more than <n> bytes. The
# minimum MRU value is 128. The default MRU value is 1500. A value of
# 296 is recommended for slow links (40 bytes for TCP/IP header + 256
# bytes of data).
#mru 542

# Set the interface netmask to <n>, a 32 bit netmask in "decimal dot"
# notation (e.g. 255.255.255.0).
#netmask 255.255.255.0

# Disables the default behaviour when no local IP address is specified,
# which is to determine (if possible) the local IP address from the
# hostname. With this option, the peer will have to supply the local IP
# address during IPCP negotiation (unless it specified explicitly on the
# command line or in an options file).
#noipdefault

# Enables the "passive" option in the LCP. With this option, pppd will
# attempt to initiate a connection; if no reply is received from the
# peer, pppd will then just wait passively for a valid LCP packet from
# the peer (instead of exiting, as it does without this option).
#passive

# With this option, pppd will not transmit LCP packets to initiate a
# connection until a valid LCP packet is received from the peer (as for
# the "passive" option with old versions of pppd).
#silent

# Don't request or allow negotiation of any options for LCP and IPCP
# (use default values).
#-all

# Disable Address/Control compression negotiation (use default, i.e.
# address/control field disabled).
#-ac

# Disable asyncmap negotiation (use the default asyncmap, i.e. escape
# all control characters).
#-am

# Don't fork to become a background process (otherwise pppd will do so
# if a serial device is specified).
#-detach

# Disable IP address negotiation (with this option, the remote IP
# address must be specified with an option on the command line or in an
# options file).
#-ip

# Disable magic number negotiation. With this option, pppd cannot
# detect a looped-back line.
#-mn

# Disable MRU [Maximum Receive Unit] negotiation (use default, i.e.
# 1500).
#-mru

# Disable protocol field compression negotiation (use default, i.e.
# protocol field compression disabled).
#-pc

# Require the peer to authenticate itself using PAP.
# This requires TWO WAY authentication - do NOT use this for a standard
# PAP authenticated link to an ISP as this will require the ISP machine
# to authenticate itself to your machine (and it will not be able to).
#+pap

# Don't agree to authenticate using PAP.
#-pap

# Require the peer to authenticate itself using CHAP [Cryptographic
# Handshake Authentication Protocol] authentication.
# This requires TWO WAY authentication - do NOT use this for a standard
# CHAP authenticated link to an ISP as this will require the ISP machine
# to authenticate itself to your machine (and it will not be able to).
#+chap

# Don't agree to authenticate using CHAP.
#-chap

# Disable negotiation of Van Jacobson style IP header compression (use
# default, i.e. no compression).
#-vj

# Increase debugging level (same as -d). If this option is given, pppd
# will log the contents of all control packets sent or received in a
# readable form. The packets are logged through syslog with facility
# daemon and level debug. This information can be directed to a file by
# setting up /etc/syslog.conf appropriately (see syslog.conf(5)). (If
# pppd is compiled with extra debugging enabled, it will log messages
# using facility local2 instead of daemon).
#debug

# Append the domain name <d> to the local host name for authentication
# purposes. For example, if gethostname() returns the name porsche,
# but the fully qualified domain name is porsche.Quotron.COM, you would
# use the domain option to set the domain name to Quotron.COM.
#domain <d>

# Enable debugging code in the kernel-level PPP driver. The argument n
# is a number which is the sum of the following values: 1 to enable
# general debug messages, 2 to request that the contents of received
# packets be printed, and 4 to request that the contents of transmitted
# packets be printed.
#kdebug n

# Set the MTU [Maximum Transmit Unit] value to <n>. Unless the peer
# requests a smaller value via MRU negotiation, pppd will request that
# the kernel networking code send data packets of no more than n bytes
# through the PPP network interface.
#mtu <n>

# Set the name of the local system for authentication purposes to <n>.
# This will probably have to be set to your ISP user name if you are
# using PAP/CHAP.
#name <n>

# Set the user name to use for authenticating this machine with the peer
# using PAP to <u>.
# Do NOT use this if you are using 'name' above!
#user <u>

# Enforce the use of the host name as the name of the local system for
# authentication purposes (overrides the name option).
#usehostname

# Set the assumed name of the remote system for authentication purposes
# to <n>.
#remotename <n>

# Add an entry to this system's ARP [Address Resolution Protocol]
# table with the IP address of the peer and the Ethernet address of this
# system.
#proxyarp

# Use the system password database for authenticating the peer using
# PAP.
#login

# If this option is given, pppd will send an LCP echo-request frame to
# the peer every n seconds. Under Linux, the echo-request is sent when
# no packets have been received from the peer for n seconds. Normally
# the peer should respond to the echo-request by sending an echo-reply.
# This option can be used with the lcp-echo-failure option to detect
# that the peer is no longer connected.
#lcp-echo-interval <n>

# If this option is given, pppd will presume the peer to be dead if n
# LCP echo-requests are sent without receiving a valid LCP echo-reply.
# If this happens, pppd will terminate the connection. Use of this
# option requires a non-zero value for the lcp-echo-interval parameter.
# This option can be used to enable pppd to terminate after the physical
# connection has been broken (e.g., the modem has hung up) in
# situations where no hardware modem control lines are available.
#lcp-echo-failure <n>

# Set the LCP restart interval (retransmission timeout) to <n> seconds
# (default 3).
#lcp-restart <n>

# Set the maximum number of LCP terminate-request transmissions to <n>
# (default 3).
#lcp-max-terminate <n>

# Set the maximum number of LCP configure-request transmissions to <n>
# (default 10).
# Some PPP servers are slow to start up. You may need to increase this
# if you keep getting 'serial line looped back' errors and your are SURE
# that you have logged in correctly and PPP should be starting on the server.
#lcp-max-configure <n>

# Set the maximum number of LCP configure-NAKs returned before starting
# to send configure-Rejects instead to <n> (default 10).
#lcp-max-failure <n>

# Set the IPCP restart interval (retransmission timeout) to <n>
# seconds (default 3).
#ipcp-restart <n>

# Set the maximum number of IPCP terminate-request transmissions to <n>
# (default 3).
#ipcp-max-terminate <n>

# Set the maximum number of IPCP configure-request transmissions to <n>
# (default 10).
#ipcp-max-configure <n>

# Set the maximum number of IPCP configure-NAKs returned before starting
# to send configure-Rejects instead to <n> (default 10).
#ipcp-max-failure <n>

# Set the PAP restart interval (retransmission timeout) to <n> seconds
# (default 3).
#pap-restart <n>

# Set the maximum number of PAP authenticate-request transmissions to
# <n> (default 10).
#pap-max-authreq <n>

# Set the CHAP restart interval (retransmission timeout for
# challenges) to <n> seconds (default 3).
#chap-restart <n>

# Set the maximum number of CHAP challenge transmissions to <n>
# (default 10).
#chap-max-challenge

# If this option is given, pppd will re-challenge the peer every <n>
# seconds.
#chap-interval <n>

# With this option, pppd will accept the peer's idea of our local IP
# address, even if the local IP address was specified in an option.
#ipcp-accept-local

# With this option, pppd will accept the peer's idea of its (remote) IP
# address, even if the remote IP address was specified in an option.
#ipcp-accept-remote

--------------------------------------------------------------------------------

12.2. 我应该使用什麽选项? (无 PAP/CHAP)
嗯，完全视情况而定（唉）．这里所提供的应该适用於大部份的伺服器．

然而，如果它无法运作的话，阅读样板档(/etc/ppp/options.tpl) 以及 pppd 的线上使用手册并且告诉你所连线之伺服器的系统管理／使用者支援人员．

你还应该注意这里所展示的连结指令稿也使用了一些给 pppd 的命令列选项以便让事情容易调整些．

--------------------------------------------------------------------------------

# /etc/ppp/options (NO PAP/CHAP)
#
# 避免 pppd 进入背景执行
-detach
#
# 使用数据机控制线
modem
# 使用 uucp 形态的锁定档以避免它人取用串列装置
lock
# 使用硬体流量控制
crtscts
# 在递送表格中将此连结建立为预设递送装置
defaultroute
# 不使用任何"逸出"控制序列
asyncmap 0
# 最大传送封包大小为 552 bytes
mtu 552
# 最大接收封包大小为 552 bytes
mru 552
#
#-------END OF SAMPLE /etc/ppp/options (no PAP/CHAP)


New Page 1

标题： ■ PPP HOWTO 中译版: 如果你的 PPP 伺服器使用 PAP 认证(Password Authentication Protocol)
姓名 ：Robert Hart
Email：hartr@interweft.com.au
地址 ：
转摘 ：http://member.netease.com/

返回

13. 如果你的 PPP 伺服器使用 PAP 认证(Password Authentication Protocol)
如果你连接的伺服器需要 PAP 或 CHAP 认证，你需要多一点的工作．

在上面的选项档案中，加上下面几行

--------------------------------------------------------------------------------

#
# 告诉 pppd 使用你的 ISP 名称做为认证过程中的"主机名称"
name <your ISP user name> # 你需要改变这一行
#
# 如果你执行 PPP *伺服器* 并且需要使用 PAP 或 CHAP 认证，适当除去下面的
# 注解．不要在你做为客户端连上伺服器时使用此选项(即使它使用 PAP 或 CHAP)
# 因为这是告诉伺服器必须为它自己在你的机器上提供认证(这几乎是不可能的，
# 所以连结会失败)．
#+chap
#+pap
#
# 如果你使用在 /etc/ppp/pap-secrets 档案中经编码的密码，除去下面一行的注解．
# 注意: 这和 Windows NT 上的远端存取服务里的微软编码密码是不同的．
#+papcrypt

--------------------------------------------------------------------------------

13.1. 使用 MSCHAP
微软的 Windows NT 远端存取服务(RAS)可以被设定为使用一种 CHAP(Challenge/Handshake Authentication Protocol) 的变种．在你的 PPP 原始程式码中，你可以找到一个叫 README.MSCHAP80 的档案讨论这件事．

你可以开启 pppd 的侦错功能判断伺服器是否要求使用此认证协定．如果伺服器使用 MS CHAP 认证，你会看到这样的一行

--------------------------------------------------------------------------------

rcvd [LCP ConfReq id=0x2 <asyncmap 0x0> <auth chap 80> <magic 0x46a3>]

--------------------------------------------------------------------------------

关键的讯息是 auth chap 80．

为了使用 MS CHAP，你必须重新编译 pppd 以支援此协定．请参见 PPP 原始程式码中的 README.MSCHAP80 说明如何编译以使用此变种协定．

你还要注意这里的程式码只是让 Linux PPP 做为客户端连接上 MS Windows NT 伺服器用的．它并不支援将 Linux 设立为让客户端使用 MSCHAP80 认证 PPP 伺服器．

13.2. PAP/CHAP 密码档案
如果你使用 PAP 或 CHAP 认证，你必须建立这些密码档案．它们是:

--------------------------------------------------------------------------------

/etc/ppp/pap-secrets
/etc/ppp/chap-secrets

--------------------------------------------------------------------------------

这些档案拥有者必须为 root，群组为 root，同时为了安全档案权限应为 740．

关於 PAP 与 CHAP 第一点要指出的是它们是设计用来认证电脑系统而不是使用者的．

"嗯? 有什麽不同呢?" 我听到你在问．

哦，一旦你的电脑建立与伺服器建立 PPP 连线，你系统上的任何使用者都可以使用此连线 - 不只是你而已．这也是为何你可以使用 PPP 将两个区域网路(LAN)连接起来建立一广域网路(WAN)的原因．

PAP (还有 CHAP 也是)需要双向认证 - 也就是每一电脑需要一个合法的名称与密码在另一电脑上．然而，这并不是大部份提供拨接式 PAP 认证连接的 PPP 伺服器运作的方式．

也就是说，你的 ISP 可能会给你一个使用者名称与密码以允许你连接到他们的系统进而连接到网际网路上．你的 ISP 对於你电脑的名称一点也不感兴趣，因此你可能必须使用你在 ISP 上的使用者名称做为你电脑的名称．

这点要使用 pppd 选项的 name user name 来达成．因此，如果你使用你 ISP 给你的使用者名称，加上这一行

--------------------------------------------------------------------------------

name your_user name_at_your_ISP

--------------------------------------------------------------------------------

到你的 /etc/ppp/options 档案中．

从技术上来说，PAP 其实应该要使用 user our_user name_at_your_ISP 这个选项，但是如果使用到 PAP 的话那麽 pppd 聪明的足以把 name 解译为 user．使用 name 这个选项的好处是这对於 CHAP 也是有效的．

因为 PAP/CHAP 是用来验认电脑的，在技术上你也需要指定远端电脑的名称．然而，大部分的人只接一家 ISP 所以你可以在密码档里的远端主机名称使用通用字元(*) ．

许多 ISP 有多个数据机拨接中心连接到不同的终端机伺服器 － 每个终端机伺服器都有不同的名称，但都从单一的（自动转线）号码拨接．在某些情形下可能因此而很不容易预先知道远端电脑的名称!

13.3. PAP 密码档
/etc/ppp/pap-secrets 这个档案看起来像

--------------------------------------------------------------------------------

# Secrets for authentication using PAP
# client server secret acceptable_local_IP_addresses

--------------------------------------------------------------------------------

这四个栏位是以空白分界而且最後一项可以是空白(如果你使用动态 IP 或由你的 ISP 所提供的静态 IP)．

假定你的 ISP 给你的使用者名称是 fred 而密码是 flintstone 的话那麽你应该在 /etc/ppp/options[.ttySx] 里设定 name fred 这个选项并且把你的 /etc/ppp/pap-secrets 档案设成下面这样

--------------------------------------------------------------------------------

# Secrets for authentication using PAP
# client server secret acceptable local IP addresses
fred * flintstone

--------------------------------------------------------------------------------

这是说对於 fred 这个本地机器名称（我们已经告诉过 pppd 使用这个名称，即使这不是我们本地机器的名称也一样）以及任何的伺服器，都使用 flintstone 这个密码（暗码）．

注意到我们并不需要指定本地的 IP 位址，除非有要求要我们使用一个特定的，固定的 IP 位址．即使你试著用一固定的 IP，这也不大可能行得通因为对於大部份的 PPP 伺服器(为了安全的理由)不允许远端系统自行指定 IP 号码．

13.4. CHAP 密码档
目前的 pppd 版本要求你要有互相验认的方法 － 这是说你必须能够让从你的机器到远端伺服器以及从远端伺服器到你的机器这两种验认都能进行．

所以，如果你的机器是 fred 而远端是 barney 的话，则在它们个别的 /etc/ppp/options.ttySx 里你的设为 name fred remotename barney 而远端机器应设为 name barney remotename fred．

fred 这台机器的 /etc/ppp/chap-secrets 档案看起来会像

--------------------------------------------------------------------------------

# Secrets for authentication using CHAP
# client server secret acceptable local IP addresses
fred barney flintstone
barney fred wilma

--------------------------------------------------------------------------------

而 barney 的是

--------------------------------------------------------------------------------

# Secrets for authentication using CHAP
# client server secret acceptable local IP addresses
barney fred flintstone
fred barney wilma

--------------------------------------------------------------------------------

特别要注意的是双方机器都必须具有双向认证的项目．这允许本地的机器向远端机器认证它自己并且让远地机器向本地机器认证它自己．

13.5. 处理多重 PAP 认证连接
一些使用者拥有多於一部使用 PAP 的伺服器可连线．如果你的使用者名称在每部你想连接的机器上都不同，这并不是问题．

然而，许多使用者在两个系统(或者甚至是全部)上具有相同的使用者名称．这在从 /etc/ppp/pap-secrets 中正确地选择适当一行时会有问题．

如你所料地，PPP 提供一种机制以克服此因难． PPP 允许你使用 remotename 选项为远端伺服器设定一个"假想名称"．

假设你连接到两部 PPP 伺服器都使用名称 fred．你以此方式建立 /etc/ppp/pap-secrets 档案

--------------------------------------------------------------------------------

fred pppserver1 barney
fred pppserver2 wilma

--------------------------------------------------------------------------------

如此，在与 pppserver1 连线时你在 pppd 选项中使用 name fred remotename pppserver1 并在连线 pppserver2 时使用 name fred remotename pppserver2．

因为你可以使用在 pppd 使用 file filename 以指定 ppp 选项，你可以建立一指令稿以连接到每部 PPP 伺服器，正确地取用选项档案并且选择正确的 remotename 选项．


New Page 1

标题： ■ PPP HOWTO 中译版: 以手动方式建立 PPP 连结
姓名 ：Robert Hart
Email：hartr@interweft.com.au
地址 ：
转摘 ：http://member.netease.com/

返回

14. 以手动方式建立 PPP 连结
现在你已经建立你的 /etc/ppp/options 以及 /etc/resolv.conf 档案（以及，如果有需要，还有 /etc/ppp/pap|chap-secrets 档案），你可以藉由手动设立 PPP 连线来测试这些设定（一旦我们使手动连线能运作，我们将会自动化该过程）．

要做这件事，你的通讯软体必须能在不重置你的数据机的情况下结束． Minicom 可以做到 － ALT Q （或者在比较旧的 minicom 版本是使用 CTRL A Q）．

确定你以 root 签入．

启动你的通讯软体（像是 minicom），拨接到 PPP 伺服器并且像平常一样的签入．如果你需要发出某个指令来起动伺服端上的 PPP，那麽就做吧．你将会看见你以前看过的垃圾．

如果你使用 PAP 或 CHAP 的话，那麽只是连线到远端系统应该就会起动在远端上的 PPP 而且你将在没有签入的情况下就见到这些垃圾（虽然这在某些伺服器上不会发生 - 试著按下 Enter 看看能否看到这些垃圾）．

现在，在不要重置数据机的情况下结束通讯软体(在 minicom 使用 ALT Q 或 CTL A Q)并且在 Linux 的提示符号下（以 root 的身分）键入

--------------------------------------------------------------------------------

pppd -d -detach /dev/ttySx 38400 &

--------------------------------------------------------------------------------

-d 这个选项开启侦错功能 － ppp 连线起动时的”交谈”将会记录到你的系统记录里去 － 如果你遇上麻烦这会很有用的．

你数据机的灯现在应该要闪烁，因为要建立 PPP 连线．PPP 连线的建立将会花点时间．

此时你可以观察 PPP 界面，藉由发出这个指令

--------------------------------------------------------------------------------

ifconfig

--------------------------------------------------------------------------------

在你所拥有的任何乙太网路以及回授设备之外，你应该会看见像这样的资讯:

--------------------------------------------------------------------------------

ppp0 Link encap:Point-Point Protocol
inet addr:10.144.153.104 P-t-P:10.144.153.51 Mask:255.255.255.0
UP POINTOPOINT RUNNING MTU:552 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0
TX packets:0 errors:0 dropped:0 overruns:0

--------------------------------------------------------------------------------

其中

inet addr:10.144.153.10 是该连结中你这端的 IP 号码．
P-t-P:10.144.153.5 是伺服端的 IP 号码．

(自然， ifconfig 不会报告这些 IP 号码，而是你的 PPP 伺服器上使用的．)

注意: ifconfig 也告诉你该连结已经起动并且正在执行!

如果没有 ppp 装置列出或得到的是像这样的资讯:

--------------------------------------------------------------------------------

ppp0 Link encap:Point-Point Protocol
inet addr:0.0.0.0 P-t-P:0.0.0.0 Mask:0.0.0.0
POINTOPOINT MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0
TX packets:0 errors:0 dropped:0 overruns:0

--------------------------------------------------------------------------------

你的 PPP 连线并没有建立... 参阅稍後有关错误排除的章节!

你还可以看到这部远端机器(及其後的)的递送路径．要做到这点，下这个指令

--------------------------------------------------------------------------------

route -n

--------------------------------------------------------------------------------

你应该看到像这样的:-

--------------------------------------------------------------------------------

Kernel routing table
Destination Gateway Genmask Flags MSS Window Use Iface
10.144.153.3 * 255.255.255.255 UH 1500 0 1 ppp0
127.0.0.0 * 255.0.0.0 U 3584 0 11 lo
10.0.0.0 * 255.0.0.0 U 1500 0 35 eth0
default 10.144.153.3 * UG 1500 0 5 ppp0

--------------------------------------------------------------------------------

特别注意这里，我们有两个项目指到我们的 ppp 装置．

第一项是主机递送(以 H 旗号表示)并且允许我们看到这部我们正在连接的主机 - 但再来就没有了．

第二项是预设递送路径(由 pppd 的 defaultroute 选项所建立的)．这份递送路径告诉我们的 Linux PC 将任何不在内部乙太网路的封包送到那里 - 到我们指定的网路 - 也就是到 PPP 伺服器本身．而 PPP 伺服器有责任为我们将封包递送到网际网路并将回应的封包送回给我们．

如果你在递送表格中没看到两个项目，有些事不对劲．特别是如果你的系统记录(syslog)显示一讯息告诉你 pppd 无法取代已存在的预设递送路径，那麽你已有一预设递送路径指向你的乙太网路界面 - 而这必须由指定的网路递送来取代: 你只能有一个预设递送路径!!!

你必须检查一下你系统的起始档案以找出预设递送是在那里建立的(这是由 route add default... 指令指定的)．将它改成像这样的 route add net...．

现在藉由 ifconfig 之输出所回报的 IP 号码来 'ping' 一下该伺服器以测试这个连结，像这样

--------------------------------------------------------------------------------

ping 10.144.153.51

--------------------------------------------------------------------------------

你应该会接收到像这样的输出

--------------------------------------------------------------------------------

PING 10.144.153.51 (10.144.153.51): 56 data bytes
64 bytes from 10.144.153.51: icmp_seq=0 ttl=255 time=328.3 ms
64 bytes from 10.144.153.51: icmp_seq=1 ttl=255 time=190.5 ms
64 bytes from 10.144.153.51: icmp_seq=2 ttl=255 time=187.5 ms
64 bytes from 10.144.153.51: icmp_seq=3 ttl=255 time=170.7 ms

--------------------------------------------------------------------------------

这将会一直列印下去 － 按下 CTRL C 终止它，那时你将会接收到更多讯息:

--------------------------------------------------------------------------------

--- 10.144.153.51 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 170.7/219.2/328.3 ms

--------------------------------------------------------------------------------

到目前都很好．

现在试著藉由名称 ping 某台主机（不是 PPP 伺服器它自己的名称，而是在另一个地方的一台你知道可能已经起动而且正在运作的主机）．例如

--------------------------------------------------------------------------------

ping sunsite.unc.edu

--------------------------------------------------------------------------------

这时会有一点停顿，因为 Linux 从你在 /etc/resolv.conf 里指定的 DNS 取得你要 'ping' 的完整主机名称所对应的 IP 位址 － 所以不要担心（但是你将会看见你的数据机灯号闪烁）．在短暂的时间後你将会接收到像这样的输出

--------------------------------------------------------------------------------

PING sunsite.unc.edu (152.2.254.81): 56 data bytes
64 bytes from 152.2.254.81: icmp_seq=0 ttl=254 time=190.1 ms
64 bytes from 152.2.254.81: icmp_seq=1 ttl=254 time=180.6 ms
64 bytes from 152.2.254.81: icmp_seq=2 ttl=254 time=169.8 ms
64 bytes from 152.2.254.81: icmp_seq=3 ttl=254 time=170.6 ms
64 bytes from 152.2.254.81: icmp_seq=4 ttl=254 time=170.6 ms

--------------------------------------------------------------------------------

再一次，藉由按下 CTRL C 终止输出并取得统计资料...

--------------------------------------------------------------------------------

--- sunsite.unc.edu ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max = 169.8/176.3/190.1 ms

--------------------------------------------------------------------------------

如果你没有收到任何回应，试著 ping 一下你的 ISP 提供的 DNS 的 IP 位址．如果你从这里得到肯定的结果，那麽看起来问题在你的 /etc/resolv.conf 档案里．

如果这样会没有结果，问题出在网路递送上，或者是你的 ISP 在将封包递送回给你时出了问题．检查上面的递送表格，如果没问题，和你的 ISP 联络．一个测试 ISP 的好方法是用另一种作业系统来连接．如果这样就可以动，那麽问题就在你这边．

如果一切正常，藉由键入这个指令终止该连线

--------------------------------------------------------------------------------

ppp-off

--------------------------------------------------------------------------------

一段短暂的停顿之後，数据机应该会自己挂断电话

如果这个指令无法动作的话，那麽不是关掉你的数据机就是起动你的通讯软体并且以 +++ 中断数据机然後当你接收到数据机的 OK 提示时以 ATH0 挂断电话．

你可能也得清除 pppd 所建立的锁定档

--------------------------------------------------------------------------------

rm -f /var/lock/LCK..ttySx


New Page 1

标题： ■ PPP HOWTO 中译版: 使你的连结自动化 - 创造连结指令稿
姓名 ：Robert Hart
Email：hartr@interweft.com.au
地址 ：
转摘 ：http://member.netease.com/

返回

15. 使你的连结自动化 - 创造连结指令稿
一旦你可以用上述的方法用手动方式签入，更好的做法是建立一些指令稿来自动为你进行这些工作．

一份 chat 指令稿可以自动化签入以及起动 PPP 的程序，因此所有你得做的（以 root 或是 ppp 群组组员的身分）只是发出单一个指令来起动你的连线．

15.1. 以使用者名称／密码认证的指令稿
如果你的 ISP 并不要求使用 PAP/CHAP 的话，这些就是为你准备的!

如果 ppp 套件安装正确，你应该会有两个□例档案．在 PPP 2.1.2 中是在 /usr/sbin 而在 PPP 2.2 里是在 /etc/ppp/scripts．这些是

在 PPP-2.1.2

ppp-on
ppp-off

而在 PPP-2.2

ppp-off
ppp-on
ppp-on-dialer

现在，如果你正在使用 PPP 2.1.2，我强烈建议你删除这些□例档案．它们有潜在的问题 - 不要告诉我它们工作得很好 - 我也用了很长一段时间(而且还在这份 HOWTO 的第一版中推荐它们)!

为了 ppp 2.1.2 使用者的权益，这里有比较好的样板档案，这些是从 ppp 2.2 发行套件里拿来的．我建议你拷贝并使用这些指令稿而不要再用旧的 PPP-2.1.2 指令稿．

15.2. ppp-on 指令稿
这是实际启动连线的一对指令稿中的第一个．

--------------------------------------------------------------------------------

#!/bin/sh
#
# Script to initiate a PPP connection. This is the first part of the
# pair of scripts. This is not a secure pair of scripts as the codes
# are visible with the 'ps' command. However, it is simple.
#
# These are the parameters. Change as needed.
TELEPHONE=555-1212 # The telephone number for the connection
ACCOUNT=george # The account name for logon (as in 'George Burns')
PASSWORD=gracie # The password for this account (and 'Gracie Allen')
LOCAL_IP=0.0.0.0 # Local IP address if known. Dynamic = 0.0.0.0
REMOTE_IP=0.0.0.0 # Remote IP address if desired. Normally 0.0.0.0
NETMASK=255.255.255.0 # The proper netmask if needed
#
# Export them so that they will be available to 'ppp-on-dialer'
export TELEPHONE ACCOUNT PASSWORD
#
# This is the location of the script which dials the phone and logs
# in. Please use the absolute file name as the $PATH variable is not
# used on the connect option. (To do so on a 'root' account would be
# a security hole so don't ask.)
#
DIALER_SCRIPT=/etc/ppp/ppp-on-dialer
#
# Initiate the connection
#
#
exec /usr/sbin/pppd debug /dev/ttySx 38400 \
$LOCAL_IP:$REMOTE_IP \
connect $DIALER_SCRIPT

--------------------------------------------------------------------------------

而这是 ppp-on-dialer 指令稿:-

--------------------------------------------------------------------------------

#!/bin/sh
#
# This is part 2 of the ppp-on script. It will perform the connection
# protocol for the desired connection.
#
/usr/sbin/chat -v \
TIMEOUT 3 \
ABORT '\nBUSY\r' \
ABORT '\nNO ANSWER\r' \
ABORT '\nRINGING\r\n\r\nRINGING\r' \
'' \rAT \
'OK-+++\c-OK' ATH0 \
TIMEOUT 30 \
OK ATDT$TELEPHONE \
CONNECT '' \
ogin:--ogin: $ACCOUNT \
assword: $PASSWORD

--------------------------------------------------------------------------------

在 PPP-2.2 中，ppp-off 指令稿看起来像:-

--------------------------------------------------------------------------------

#!/bin/sh
######################################################################
#
# Determine the device to be terminated.
#
if [ "$1" = "" ]; then
DEVICE=ppp0
else
DEVICE=$1
fi

######################################################################
#
# If the ppp0 pid file is present then the program is running. Stop it.
if [ -r /var/run/$DEVICE.pid ]; then
kill -INT `cat /var/run/$DEVICE.pid`
#
# If the kill did not work then there is no process running for this
# pid. It may also mean that the lock file will be left. You may wish
# to delete the lock file at the same time.
if [ ! "$?" = "0" ]; then
rm -f /var/run/$DEVICE.pid
echo "ERROR: Removed stale pid file"
exit 1
fi
#
# Success. Let pppd clean up its own junk.
echo "PPP link to $DEVICE terminated."
exit 0
fi
#
# The ppp process is not running for ppp0
echo "ERROR: PPP link is not active on $DEVICE"
exit 1

--------------------------------------------------------------------------------

15.3. 编辑这里所提供的起始指令稿
因为这份新的指令稿分成两部份，我们分别编辑它们．

15.3.1. ppp-on 指令稿
你将得编辑这个指令稿以反映你在 ISP 的使用者名称，你在 ISP 的密码，你 ISP 的电话号码．

每一行像是 TELEPHONE= 实际上设定了这个变数包含在等号右边的资讯 (当然不包括注解部份)．因此编辑每一行使它对你的 ISP 与连线是正确的．

而且，如果你(需要)在 /etc/ppp/options 档案里设定了 IP 号码，删除这行

--------------------------------------------------------------------------------

$LOCAL_IP:$REMOTE_IP \

--------------------------------------------------------------------------------

还有，确定变数 DIALER_SCRIPT 指向你将要使用的拨号指令稿的全部路径名称．因此，如果你移动或改变这个指令稿的名称，确定你正确地改变 ppp-on 指令稿里的这一行．

15.3.2. ppp-on-dialer 指令稿
这是第二个指令稿实际建立起我们的 PPP 连结．

注意: 一份 chat 指令稿一般全都放在同一行里．倒斜线是用来让一行可以跨过数行的实体行（便於人们阅读）而并不是指令稿本身组成的一部份．

然而，仔细地看看它的细节部份以便让我们了解它实际(假设的)要做什麽是非常有用的!

15.4. 一份 chat 指令稿其中的含意...
一份 chat 指令稿是一系列``期待字串'' ``送出字串''的配对．特别是，注意到我们总是在送出某些讯息之前先期待某些讯息出现．

如果我们在没有先接收到任何讯息的情况下要送出某些讯息的话，我们必须使用空的期待字串（藉由 ``'' 指明）而在没有送出任何讯息的情况下要期待某些讯息作法也类似! 而且，如果字串包含好几个字（例如 NO CARRIER），你必须把字串用引号括住，这样 chat 会把字串当作是单一个项目．

在我们样板里的 chat 指令行是:

--------------------------------------------------------------------------------

exec /usr/sbin/chat -v

--------------------------------------------------------------------------------

起动 chat ，-v 告诉 chat 将其所有的输出／入拷贝到系统记录里（通常是 /var/log/messages）．一旦你觉得 chat 指令稿的运作稳定而可靠，编辑这一行把 -v 移除以便减少你系统记录的混杂．

--------------------------------------------------------------------------------

TIMEOUT 3

--------------------------------------------------------------------------------
这设定接收所期待的输入逾时时限为三秒．如果你使用真的是很慢的数据机那麽你可能得要增加这个设定到五秒或是十秒!

--------------------------------------------------------------------------------

ABORT '\nBUSY\r'

--------------------------------------------------------------------------------

如果接收到 BUSY 字串，中止执行．

--------------------------------------------------------------------------------

ABORT '\nNO ANSWER\r'

--------------------------------------------------------------------------------

如果接收到 NO ANSWER 字串，中止执行．

--------------------------------------------------------------------------------

ABORT '\nRINGING\r\n\r\nRINGING\r'

--------------------------------------------------------------------------------

如果接收到（重复的）RINGRING 字串，中止执行．这是因为某人正打电话给你!

--------------------------------------------------------------------------------

`` \rAT

--------------------------------------------------------------------------------

不期待数据机传送任何讯息并且送出 AT 字串．

--------------------------------------------------------------------------------

OK-+++\c-OK ATH0

--------------------------------------------------------------------------------

这一个比较复杂一点，因为它使用了某些 chat 的错误回复功能．

它所代表的是...期待 OK ，如果没有收到（因为数据机并不在指令模式下）那麽送出 +++ （使数据机返回指令模式的标准 Hayes 相容数据机字串）并且期待 OK；接著送出 ATH0 （数据机挂断字串）．这让你的指令稿可以应付你的数据机黏在线上无法断线的情况．

--------------------------------------------------------------------------------

TIMEOUT 30

--------------------------------------------------------------------------------

设定指令稿其馀部份执行的逾时时限为 30 秒．如果你曾经因为逾时而经验过 chat 指令稿被终止的问题，把它增加为 45 秒或更久．

--------------------------------------------------------------------------------

OK ATDT$TELEPHONE

--------------------------------------------------------------------------------

期待 OK （数据机对 ATH0 指令的回应）并且拨接到我们想要呼叫的号码．

--------------------------------------------------------------------------------

CONNECT ''

--------------------------------------------------------------------------------

期待 CONNECT 字串（当远端数据机有回应时我们的数据机送出的）并且不送出任回覆讯息．

--------------------------------------------------------------------------------

ogin:--ogin: $ACCOUNT

--------------------------------------------------------------------------------

再一次，这里面我们有一些错误回复设定．期待签入提示(...ogin:)，但是如果我们在逾时前没有接收到，送出一个返回字元(return)然後再次找寻签入提示．当接收到提示时，送出使用者名称（存放在使用者界面的 $ACCOUNT 环境变数里）．

--------------------------------------------------------------------------------

assword: $PASSWORD

--------------------------------------------------------------------------------

期待密码提示并且送出密码（再一次，存放在使用者界面的一个环境变数里）．

这个 chat 指令稿有合理的错误回复功能． Chat 还有许多重要的特色，比这里所展示还要更多．更详细的资讯请参阅 chat 的线上使用手册(man 8 chat)．

15.4.1. 在伺服器端启动 PPP
虽然这份 ppp-on-dialer 指令稿对於在你签入後会自动启动 pppd 的伺服器来说非常的好用，然而某些伺服器需要你明白地在伺服器上启动 PPP．

如果你需要在伺服器上下指令以启动 PPP，你必须要编辑 ppp-on-dialer 指令稿．

在这指令稿的尾端(在 password 这行後面)加上 期待 送出 字串对 - 这是寻找你的 shell 提示符号 (特别小心对 Bourne shell 有特殊意义的字元 - 像是 $ 与 [ 或 ] 左右方括号等)．

一旦 chat 找到了 shell 提示符号，chat 必须下指令以启动你 ISP 的 PPP 伺服器．

以我的例子而言，我的 PPP 伺服器使用标准的 Linux Bash 提示符号

--------------------------------------------------------------------------------

[hartr@kepler hartr]$

--------------------------------------------------------------------------------

而且需要我打

--------------------------------------------------------------------------------

ppp

--------------------------------------------------------------------------------

以启动伺服器上的 PPP．

在此允许一点错误回复是个好主意，所以在我的例子中我用

--------------------------------------------------------------------------------

hartr--hartr ppp

--------------------------------------------------------------------------------

这就是说，如果我在逾时前没收到提示符号，送出 return 并且再次等待提示符号．

一旦收到提示符号，就送出 ppp 字串．

注意: 别忘了在前一行结束前加上 \ 以便让 chat 认为这整个指令稿是在一行里!

不幸的是，某些伺服器会产生非常多变的提示符号! 你可能必须使用 minicom 多签入几次以便了解什麽可以用来做为确定的``期待''字串．

15.5. 使用於 PAP/CHAP 验认连线的 chat 指令稿
如果你的 ISP 使用 PAP/CHAP 验认，那麽你的 chat 指令稿会简单得多．你的 chat 指令稿所要做的全部只是拨接电话，等待接上线，然後就让 pppd 去处理签入事宜!

--------------------------------------------------------------------------------

#!/bin/sh
#
# This is part 2 of the ppp-on script. It will perform the connection
# protocol for the desired connection.
#
exec /usr/sbin/chat -v \
TIMEOUT 3 \
ABORT '\nBUSY\r' \
ABORT '\nNO ANSWER\r' \
ABORT '\nRINGING\r\n\r\nRINGING\r' \
'' \rAT \
'OK-+++\c-OK' ATH0 \
TIMEOUT 30 \
OK ATDT$TELEPHONE \
CONNECT '' \

--------------------------------------------------------------------------------

15.6. pppd 的 debug 与 file option_file 选项
就像我们已经看过的，你可以对 pppd 使用 -d 选项打开侦错讯息记录． 'debug' 选项和这个是一样的．

因为我们正在使用新的指令稿建立新的连线，先放著此选项不管． (警告: 如果你的磁碟空间不大够，记录 pppd 的讯息可能会大量增加你的系统记录档大小并使你遇到麻烦 - 不过在此你必定会连线失败并尝试许久)．

一旦你高兴地认为一切工作正常，你可以除去此选项．

如果你不是从 /etc/ppp/options 或 /etc/ppp/options.ttySx 档案中叫出 ppp 选项，可以在 pppd 上用 file 选项指定档案名称 - 例如

--------------------------------------------------------------------------------

exec /usr/sbin/pppd debug file options.myserver /dev/ttyS0 38400 \


New Page 1

标题： ■ PPP HOWTO 中译版: 测试你的连线指令稿
姓名 ：Robert Hart
Email：hartr@interweft.com.au
地址 ：
转摘 ：http://member.netease.com/

返回

16. 测试你的连线指令稿
开启一个新的 Xterm（如果你在 X 底下）或开启一个新的虚拟主控台并且以 root 签入．

在这个新的阶段作业中，发出这个指令

tail -f /var/log/messages

（或是你系统记录档案的任何名称）．

在第一个视窗（或是虚拟主控台中）发出这个命令

ppp-on &

（或是任何你所编辑的 /usr/sbin/ppp-on 版本之名称）．如果你没有藉由在这个指令的尾端指定 & 使得指令稿进入背景执行的话，那麽在 ppp 结束（当连线结束时）之前你都不能回到终端机提示下

现在切换到追踪系统记录档的视窗．

你将会见到某些像下列的东西（假定你对 chat 指定 -v 并且对 pppd 指定 -d 选项）.... 这是紧跟在 pppd 起动资讯之後记录到系统记录档案里的 chat 指令稿及其回应:

--------------------------------------------------------------------------------

Oct 21 16:09:58 hwin chat[19868]: abort on (NO CARRIER)
Oct 21 16:09:59 hwin chat[19868]: abort on (BUSY)
Oct 21 16:09:59 hwin chat[19868]: send (ATZ^M)
Oct 21 16:09:59 hwin chat[19868]: expect (OK)
Oct 21 16:10:00 hwin chat[19868]: ATZ^M^M
Oct 21 16:10:00 hwin chat[19868]: OK -- got it
Oct 21 16:10:00 hwin chat[19868]: send (ATDT722298^M)
Oct 21 16:10:00 hwin chat[19868]: expect (CONNECT)
Oct 21 16:10:00 hwin chat[19868]: ^M
Oct 21 16:10:22 hwin chat[19868]: ATDT722298^M^M
Oct 21 16:10:22 hwin chat[19868]: CONNECT -- got it
Oct 21 16:10:22 hwin chat[19868]: send (^M)
Oct 21 16:10:22 hwin chat[19868]: expect (ogin:)
Oct 21 16:10:23 hwin chat[19868]: kepler login: -- got it
Oct 21 16:10:23 hwin chat[19868]: send (hartr^M)
Oct 21 16:10:23 hwin chat[19868]: expect (ssword:)
Oct 21 16:10:23 hwin chat[19868]: hartr^M
Oct 21 16:10:23 hwin chat[19868]: Password: -- got it
Oct 21 16:10:23 hwin chat[19868]: send (??????^M)
Oct 21 16:10:23 hwin chat[19868]: expect (hartr)
Oct 21 16:10:24 hwin chat[19868]: [hartr -- got it
Oct 21 16:10:24 hwin chat[19868]: send (ppp^M)
Oct 21 16:10:27 hwin pppd[19872]: pppd 2.1.2 started by root, uid 0
Oct 21 16:10:27 hwin pppd[19873]: Using interface ppp0
Oct 21 16:10:27 hwin pppd[19873]: Connect: ppp0 <--> /dev/cua1
Oct 21 16:10:27 hwin pppd[19873]: fsm_sdata(LCP): Sent code 1, id 1.
Oct 21 16:10:27 hwin pppd[19873]: LCP: sending Configure-Request, id 1
Oct 21 16:10:27 hwin pppd[19873]: fsm_rconfreq(LCP): Rcvd id 1.
Oct 21 16:10:27 hwin pppd[19873]: lcp_reqci: rcvd MRU
Oct 21 16:10:27 hwin pppd[19873]: (1500)
Oct 21 16:10:27 hwin pppd[19873]: (ACK)
Oct 21 16:10:27 hwin pppd[19873]: lcp_reqci: rcvd ASYNCMAP
Oct 21 16:10:27 hwin pppd[19873]: (0)
Oct 21 16:10:27 hwin pppd[19873]: (ACK)
Oct 21 16:10:27 hwin pppd[19873]: lcp_reqci: rcvd MAGICNUMBER
Oct 21 16:10:27 hwin pppd[19873]: (a098b898)
Oct 21 16:10:27 hwin pppd[19873]: (ACK)
Oct 21 16:10:27 hwin pppd[19873]: lcp_reqci: rcvd PCOMPRESSION
Oct 21 16:10:27 hwin pppd[19873]: (ACK)
Oct 21 16:10:27 hwin pppd[19873]: lcp_reqci: rcvd ACCOMPRESSION
Oct 21 16:10:27 hwin pppd[19873]: (ACK)
Oct 21 16:10:27 hwin pppd[19873]: lcp_reqci: returning CONFACK.
Oct 21 16:10:27 hwin pppd[19873]: fsm_sdata(LCP): Sent code 2, id 1.
Oct 21 16:10:27 hwin pppd[19873]: fsm_rconfack(LCP): Rcvd id 1.
Oct 21 16:10:27 hwin pppd[19873]: fsm_sdata(IPCP): Sent code 1, id 1.
Oct 21 16:10:27 hwin pppd[19873]: IPCP: sending Configure-Request, id 1
Oct 21 16:10:27 hwin pppd[19873]: fsm_rconfreq(IPCP): Rcvd id 1.
Oct 21 16:10:27 hwin pppd[19873]: ipcp: received ADDR
Oct 21 16:10:27 hwin pppd[19873]: (10.144.153.51)
Oct 21 16:10:27 hwin pppd[19873]: (ACK)
Oct 21 16:10:27 hwin pppd[19873]: ipcp: received COMPRESSTYPE
Oct 21 16:10:27 hwin pppd[19873]: (45)
Oct 21 16:10:27 hwin pppd[19873]: (ACK)
Oct 21 16:10:27 hwin pppd[19873]: ipcp: returning Configure-ACK
Oct 21 16:10:28 hwin pppd[19873]: fsm_sdata(IPCP): Sent code 2, id 1.
Oct 21 16:10:30 hwin pppd[19873]: fsm_sdata(IPCP): Sent code 1, id 1.
Oct 21 16:10:30 hwin pppd[19873]: IPCP: sending Configure-Request, id 1
Oct 21 16:10:30 hwin pppd[19873]: fsm_rconfreq(IPCP): Rcvd id 255.
Oct 21 16:10:31 hwin pppd[19873]: ipcp: received ADDR
Oct 21 16:10:31 hwin pppd[19873]: (10.144.153.51)
Oct 21 16:10:31 hwin pppd[19873]: (ACK)
Oct 21 16:10:31 hwin pppd[19873]: ipcp: received COMPRESSTYPE
Oct 21 16:10:31 hwin pppd[19873]: (45)
Oct 21 16:10:31 hwin pppd[19873]: (ACK)
Oct 21 16:10:31 hwin pppd[19873]: ipcp: returning Configure-ACK
Oct 21 16:10:31 hwin pppd[19873]: fsm_sdata(IPCP): Sent code 2, id 255.
Oct 21 16:10:31 hwin pppd[19873]: fsm_rconfack(IPCP): Rcvd id 1.
Oct 21 16:10:31 hwin pppd[19873]: ipcp: up
Oct 21 16:10:31 hwin pppd[19873]: local IP address 10.144.153.104
Oct 21 16:10:31 hwin pppd[19873]: remote IP address 10.144.153.51

--------------------------------------------------------------------------------

（注意 － 我使用静态的 IP 号码 － 因此我的机器送这些东西到 PPP 伺服器去 － 如果你使用动态的 IP 号码那麽你将不会看见这些．）还有，这个伺服器需要指定的命令来启动 PPP．

这看起来没什麽问题 － 所以如同前面的测试般， ping 一些 IP 号码以及主机名称．

起动你的全球资讯浏览器或是任何其它东东并且开始逛 － 你上线了!


New Page 1

标题： ■ PPP HOWTO 中译版: 17,18,19
姓名 ：Robert Hart
Email：hartr@interweft.com.au
地址 ：
转摘 ：http://member.netease.com/

返回

17. 结束 PPP 连结
当你完成 PPP 连结之後，可以使用标准的 ppp-off 指令终止它（要记得 － 你得是 root 或者是 PPP 群组的组员! ）

你将会在你的系统记录里看见一些像这样的的东西:

--------------------------------------------------------------------------------

Oct 21 16:10:45 hwin pppd[19873]: Interrupt received: terminating link
Oct 21 16:10:45 hwin pppd[19873]: ipcp: down
Oct 21 16:10:45 hwin pppd[19873]: default route ioctl(SIOCDELRT): Bad address
Oct 21 16:10:45 hwin pppd[19873]: fsm_sdata(LCP): Sent code 5, id 2.
Oct 21 16:10:46 hwin pppd[19873]: fsm_rtermack(LCP).
Oct 21 16:10:46 hwin pppd[19873]: Connection terminated.
Oct 21 16:10:46 hwin pppd[19873]: Exit.

--------------------------------------------------------------------------------

别担心那个 SIOCDELRT - 这不过是 pppd 表示要结束了而没什麽好担心的．

18. 侦错
你的连线有各种可能的原因无法运作 － chat 无法正确地完成，你的线路杂讯很大等等．所以，检查你的系统记录找寻线索．

18.1. 我把 PPP 编译进去但是 Linux 说我没有...
一个非常常见的问题是人们已经将 PPP 编译到核心之中并且尝试执行 pppd，但核心仍然抱怨说它不支援 PPP! 有许多原因可能导致此事发生．

18.1.1. 你启动的是正确的核心吗?
虽然你已经重新编译核心以支援 PPP，你却没有启动新的核心．这可能是因为你没有更新 /etc/lilo.conf 并重跑 lilo．

检查的方法是下这个指令 uname -a，将产生像这样的结果

--------------------------------------------------------------------------------

Linux archenland 2.0.28 #2 Thu Feb 13 12:31:37 EST 1997 i586

--------------------------------------------------------------------------------

它给出了核心的版本及核心编译的日期 - 这样你就知道到底发生了什麽事．

18.1.2. 你将 PPP 核心支援编译为模组吗?
如果你将 PPP 核心支援编译为模组，但却没有编译及安装模组，你就会得到这个错误．看一下 Kernel-HOWTO 以及在 /usr/src/linux 下的 README 档案!

另一个模组连结的可能问题是你期望需要的模组自动地被载入，但却没有执行 kerneld (会自动载入并移除模组的工具)．看一下 kerneld mini-HOWTO 里的资讯说明如何设定 kerneld．

18.1.3. 你是否你用正确的 PPP 版本配合你的核心?
你必须使用 ppp-2.2 以配合核心 2.0.X．你可以在核心 1.2.X 使用 ppp-2.2 (如果你修补过核心)否则你必须使用 ppp-2.1.2．

18.1.4. 你是否以 root 身份执行 pppd?
如果你不是以 root 身份执行 pppd (并且 pppd 并未设定为以 root 身份执行)，你就会收到此讯息．

18.2. 我的数据机连上了但 PPP 并未启动
同样也有许不尽的原因(参考一下 comp.os.linux...)．

一个最常见的错误是在你的指令稿里你少打了某些东西．这里唯一可做的是你将 Linux PC 与伺服器的对话记到你的系统记录中(/var/log/messages)然後一行一行地看个仔细．你可能还需要再次以手动方法拨入伺服器检查一遍．

你得要从头到尾小心地检查 － 而且心里要记得我们人类有种倾向，阅读的是我们认为我们键入的 － 而不是真的在那里的!

18.3. 系统记录说 ``serial line is not 8 bit clean...''
这也有许多的类似情形 - 像是 serial line looped back 等等，导致的原因可能是许多事情中的一件(或一系列)．

要知道到底发生了什麽，必须对 pppd 背後做了些什麽有点了解．

当 pppd 启动後，它会送出连结控制协定(link control protocol)封包到远端机器．如果它收到合法的回应才会走到下一阶段(使用 IPCP - IP 控制封包)而且只有在这协商完成之後实际的 IP 层才会建立因此你才能使用 PPP 连结．

如果当你的 PC 送出协商封包时在远端没有 PPP 伺服器在运作，这些封包在远端签入过程中将被弹回来．因为这些封包是使用 8 bits，弹回来时会将第八个位元截掉(记任，ASCII 是七位元的码)． PPP 因此而抱怨此讯息．

有许多原因会造成协商封包被弹回．

18.3.1. 你没有正确地签入伺服器
当你的 chat 指令稿完成後，你的 PC 会启动 pppd．然而，如果你并未完成在伺服器的签入过程(包括送出任何必要在伺服器上启动 PPP 的指令)，PPP 就不会开始．

因此连结控制协定封包被弹回你也因此收到这个错误．

你必须小心地检查并修正(必要的话)你的 chat 指令稿(参见上面说明)．

18.3.2. 你并未启动伺服器上的 PPP
某些 PPP 伺服器在你完成签入过程後需要你输入指令或按下 RETURN 才会在远端启动 PPP．

检查你的 chat 指令稿(参见上面说明)．

如果你以手动方式签入时发现你必须送出 RETURN 才会在远端启动 PPP，简单地在你的 chat 指令稿尾端加上空白的期待/送出字串对(空的送出字串实际上会送出 RETURN)．

18.3.3. 远端的 PPP 过程启动很慢
这有点儿技巧!

预设的情况下你的 Linux pppd 被编译成最多送出十个连线控制要求封包．如果伺服器启动有点慢，十个连线封包可能在远端 PPP 准备好接收前就全部送出了．

於是在你的机器上，pppd 看到十个封包被弹回(第八位元被截去)而结束．

有两个方法可以解决此事:-

在你的 PPP 选项中加上 lcp-max-configure 30．这增加 pppd 在放弃前送出的连线封包的最大数目．对一个真的很慢的伺服器来说，你可能还需要更多．

或者，你可以回过来用一些技巧．你或许会注意到当你以手动签入 PPP 伺服器并让 PPP 启动时，收到的垃圾的第一个字完总是 tilde(~) 字元．

利用此点我们可以在 chat 指令稿尾端加上新的期待/送出字串对，期待 tilde 字元并不送出任何东西．这看起来像这样:-

--------------------------------------------------------------------------------

\~ ''

--------------------------------------------------------------------------------

注意: 因为 tilde 字元对 shell 来说有特殊意义，必须加逸出符号(就是前面的倒斜线)．

18.4. 不能设立预设递送路径
如果 pppd 拒绝建立预设递送路径，这是因为(应该没错)它拒绝移除或取代已有的预设递送路径．

通常的原因是因为某些套件将你的乙太网路卡设为预设递送路径而不是设为指定的网路递送．

参见 Linux NAG 与 Net2/3 HOWTOs 里的资讯以正确地设定你的乙太网路卡及相关的递送．

另一可能原因是你的区域网路已使用了闸道器或路由器而且你的递送表格已设定为将预设递送路径指向这里．

要修正这种情况需要更多的网路知识而已经超出此份 HOWTO 的□围了．建议你取得一些专家的意见(经由新闻组群或你周围可以问的人)．

18.5. 其它问题
还有许多原因导致 PPP 无法连接或是无法正确运作．

现在仔细看看 PPP FAQ （这真的是一系列的问题与回答）．这是一份非常详实的文件而且答案就在里面! 以我自己（很烂）的经验，如果你的问题答案不在其中，那麽该问题就不是 PPP 的错! 以我为例我使用 ELF 核心而且没有升级适当的核心模组．在曙光出现之前我仅仅浪费了大概两天（以及一个晚上的大部分时间）诅咒去那个事实上已非常良好的 PPP 伺服器．

19. 当完全陷於胶著时如何取得帮助
如果你不能使你的 PPP 连结运作，回头重新阅读这份文件并检查每一件事 － 同时配合 "chat -v..." 以及 "pppd -d" 在你的系统记录里建立的输出作为参考．

也要参考 PPP 本身的文件以及 FAQ 并加上在此曾经提及的文件!

如果你仍然陷於胶著状态的话，那麽有些能够在 PPP 这方面帮你的人会合理的、有规律的扫描 comp.os.linux.misc 与 comp.os.linux.networking 新闻讨论群，以及 comp.protocols.ppp．

你可以尝试寄个人的电子邮件给我，但我真的有自己的工作（和生活）而且我不保证会很快地回覆（即使不完全会这样）因为这得视我目前的工作负担以及我私人的生活状态而定!

特别是 － 不要张贴剪下来的错误侦测输出到新闻讨论群上也不要藉由电子邮件寄给我 － 前者浪费大量的网路频宽而後者将转给 /dev/null (除非我特别要求将它寄给我!)


New Page 1

标题： ■ PPP HOWTO 中译版: 20,21,22
姓名 ：Robert Hart
Email：hartr@interweft.com.au
地址 ：
转摘 ：http://member.netease.com/

返回

20. 连结运作之後的普遍问题
一个问题是你将会发现许多服务提供者只支援他们给新帐号的套装连线软体．这（典型）是给微软视窗环境的 :-( － 而且许多服务提供者的支援处看来一点都不了解 Unix (or Linux)．所以要有准备，从他们那得不到太多协助!

你当然可以帮他们一个忙并且教育他们关於 Linux 的知识（任何 ISP 的协助人员在网际网路用语中都应该 "知道它" 而这意味著他们在家里应该要有台 Linux 机器 － 当然是这样）!

20.1. 我无法看见我连线的 PPP 伺服器以外的世界
好的 － 你的 PPP 连线已建立并执行中而且你可以藉由该 PPP 伺服器的 IP 号码（藉由 ifconfig ppp0 指令所显示的第二个或 "远端" 的 IP 号码） ping 该伺服器，但是你不能触及其後的任何地方．

首先，尝试 ping 你在 /etc/resolv.conf 里指定作为名称伺服器那台机器的 IP 号码．如果可以的话，那麽你就可以见到在你 PPP 伺服器之外的东西（除非这个 IP 号码跟你连线的 "远端" IP 号码相同）．所以现在来试试 ping 你的服务提供者的完整网际网路名称 － 例如

ping my.provider.net.au

如果这样无法成功，那麽你有个名称解析上的问题．这可能是因为在你的 /etc/resolv.conf 档案里有打字错误．打电话给你的服务提供者对照所得的资讯并且小心地检查这个档案．如果看起来全都没问题，再打电话给服务提供者确定你写下正确的 IP 号码〉

如果它仍然无法运作（而且你的服务提供者确认他的名称伺服器有开机并且正在执行），那麽你的问题在其它的地方 － 而且我建议你小心地从头到尾检查你安装的 Linux（特别注意档案权限）．

如果你仍然不能藉由 IP 号码 ping 你服务提供者的名称伺服器，那麽不是他们关掉机器（打个电话给他们确定一下）就是有个递送问题发生在你的服务提供者那边．再一次，打电话给他们查问看看．

有个可能是 "远端" 是一台 Linux PPP 伺服器而在其核心里没有指定 IP forwarding 选项!

一个良好的测试方法是使用大多提供给（一整套） Microsoft Windows 的软体尝试进入你的服务提供者．如果完全相同的帐号在另外一套作业系统下一切正常，那麽问题是在你的 Linux 系统上而不是在你的服务提供者那边．

20.2. 我可以寄送电子邮件，但不能接收
如果你使用动态的 IP 号码，这是很正常的．参阅下面的 " 设立服务" 一节．

20.3. 为什麽人们不能来我的机器 finger, WWW, gopher, talk 等等?
同样地，如果你使用动态的 IP 号码，这是非常正常的．参阅下面的 " 设立服务"该节．

--------------------------------------------------------------------------------21. 以动态 IP 提供网际网路服务
如果你使用动态的 IP 号码（许多服务提供者也只提供动态的 IP 号码除非你为你的连线付出更多代价），那麽你必须认识这隐含的限制．

首先，外送服务请求将不会有问题．这是说你可以使用 sendmail 送出电子邮件，从远端节点传输(ftp)档案， 调查(finger)在其它机器上的使用者，浏览全球资讯网等等．

特别是，虽然你不在线上但你可以回覆带回你机器上的电子邮件．邮件将单纯地丢在你的邮递伫列中直到你拨回你的 ISP 再行送出．

然而，你的机器并非一天 24 小时都连接在网际网路上，它每次连线也不会拥有相同的 IP 号码．所以你不可能接得到直接寄到你机器的电子邮件，并且很难设立一台全球资讯伺服器或档案传输伺服器! 因为网际网路与你的机器不存在一种唯一的，永久可以联系的关系，因为你的机器并没有唯一的 IP 号码(记住 - 其它的机器也会使用这些 IP 号码，当它们拨上线时)．

如果你设立一台 WWW（或任何其它伺服器），在网际网路上的任何人都完全不会知道除非他们知道你的机器现在正在线上以及它确实（目前）的 IP 号码．他们有许多管道可以得到这项资讯，包括由你打电话给他们，寄发电子邮件告诉他们或者是在你服务提供者的帐号上巧妙地使用 ".plan" 档案（假设你的提供者允许 shell 及 finger 存取）．

现在，对大部分的使用者而言，这不是个问题 － 大部分人们所想要做的全部只是寄送与接收电子邮件（使用在你服务提供者上的帐号）以及连线到全球资讯网，传输档案以及其它网际网路上的服务．如果你必须拥有由外往内的连线服务，你真的应该取得静态的 IP 号码．另外一种方法是研究前面提示过的方法...

21.1. 设定电子邮件
即使是动态的 IP 号码，你的确可以配置你机器上的 sendmail 来送出你在本地端写好的任何电子邮件．有关 sendmail 的配置可能会是很含糊而且很困难的 － 所以这份文件不会试图告诉你该怎麽做．然而，你可能应该配置你的 sendmail 以便你的网际网路服务提供者能授命你作为 "smart relay" 主机（在 sendmail.cf 的 DS 选项）．（更为详细的配置资讯请参阅 sendmail 的文件 － 并详阅随附於 sendmail 的 m4 配置巨集．几乎可以确定里面一定有一个能符合你的需要）．

也有一本非常好的书在讲 Sendmail(O'Reilly and Associates 称它为 '圣经')，但对大部份的使用者来说实在太过困难了!

一旦你配置好 sendmail 後，你可能想在 PPP 连线刚一起动的时候就要 sendmail 赶快送出任何待在邮件伫列里的讯息．要这麽做的话，加入这行指令

sendmail -q &

到你的 /etc/ppp/ip-up 指令稿中(参见下面说明)．

由外往内的电子邮件对动态的 IP 号码而言是个问题．处理这个问题的方法是:

配置你的使用者邮递程式让所有送出去的邮件在 "reply to" 表头中有个在你的网际网路服务提供者上的电子邮递位址．
如果可以的话，你也应该将你的 FROM 地址设为你 ISP 提供的电子邮递位址．
使用 popclient 程式从你的服务提供者那边撷取你的电子邮件．或者，如果你的 ISP 使用 IMAP，使用支援 IMAP 的使用者邮递程式(例如 pine)．

你可以藉由在 /etc/ppp/ip-up 指令稿中放入必要的指令以便在拨接时将这个过程自动化(参见下面说明)．

21.2. 设定本地的名称伺服器
虽然你大可使用在你 ISP 那里的领域名称伺服器，你也可以设立一台本地的暂存专用（次要）名称伺服器，并藉由 ip-up 指令稿启动．跑本地（暂存专用）名称伺服器的好处是如果你在连线期间常常联系相同的节点那麽它可以节省你的时间（以及频宽）．

暂存专用名称伺服器（在 named.boot 档案里使用一行 'forwarders' 指向你 ISPs 的 DNS）的名称伺服器配置比较简单． O'Reilly book (DNS and Bind) 解释所有你需要知道的东西．

也有一份 DNS-HOWTO 可以取得．

如果你有一小型区域网路经由你的 Linux PC 取用网际网路(例如使用 IP 伪装)，在本地端执行名称伺服器(使用 forwarders 导向)会是个好主意，因为它会降低由名称解析所占用的网路频宽及延迟时间．

网路作业的一个要点: 当你要在你 ISP 的领域里开始启用一台次要的，暂存专用的名称伺服器之前先询问你的 ISP 相关的权限．正确配置它，你的 DNS 一点都不会造成你 ISP 的困扰，但是如果你做错了些什麽，它可能会引起麻烦...

--------------------------------------------------------------------------------22. 使用 PPP 连结两个网路
基本上连结单一台 Linux PC 到 PPP 伺服器以及使用 PPP 连结两个区域网路没有什麽差别．记得，PPP 是一种点对点的协定．

然而，你的确得了解关於递送路径如何建立的问题．阅读 NET-2 howto 以及 Linux Network Administrator Guide (NAG)．你也将发现这本书 "TCP/IP Network Administration" (by O'Reilly and Assoc - ISBN 0-937175-82-X)会有极佳的帮助．

如果你想在连结的某一边使用一个网路号码的次网路分割，你会发现 Linux (draft) sub networking mini-howto 满有用的．这可在 Linux Sub networking mini-HOWTO 找到．

为了连结两个区域网路，你使用的必须是不同的 IP 网路编号(或是同样网路编号的次网路)而且你将得使用静态的 IP 号码 － 或使用 IP 伪装．如果你想要使用 IP 伪装的话，参阅 IP masquerade mini-howto 有关它的设定介绍．

22.1. 设定 IP 号码
与其它区域网路的网路管理者协商两端的 PPP 界面使用的 IP 号码．如果你使用静态的 IP 号码，这可能也会要求你拨接特定的电话号码．

现在编辑适当的 /etc/ppp/options[.ttyXX] 档案 － 对於此连线在你这一端使用特定的数据机及串列埠是个好主意．你可能也得要去变更你的 /etc/ppp/options 档案 － 并且也要为任何其它的连线建立适当的 options.ttyXX 档案!

在适当的选项档案里指定 PPP 连接中你这端的 IP 号码，这与前面所展示使用静态 IP 号码拨接的方式完全相同．

22.2. 设定递送路径
你必须安排你区域网路上的封包经过 PPP 连结所建立的界面递送出去．这是个两阶段的过程．

首先，你必须建立从执行 PPP 连结的机器到连结的远方网路去的递送路径．如果该连结通往网际网路，那麽这可以藉由 pppd 的选项 'defaultroute' 由它自己建立的预设递送路径来处理而你不必做任何事．

然而如果该连结只是连结两个区域网路，那麽必须加入一个指定的网路递送路径．这是在 /etc/ppp/ip-up 指令稿中使用 'route' 指令执行的（参阅连线起动之後... 该节里有关如何执行的介绍）．

你得做的第二件事是告诉在你区域网路上的其它电脑这台 Linux 电脑实际上是该 ppp 连结中通往远方网路的'闸道'．

当然，这些工作该连结另一端的网路管理者也全都得做! 然而，因为她/他必须将封包递送到你的网路，一个指定的网路递送路径是必要的，而不是预设递送路径(除非远端的区域网路是连上你去取用网际网路的)．

22.3. 网路安全
如果你使用 PPP 连结你的区域网路到网际网路上去 － 或甚至只是到一个``外面的''区域网路上去，你都必须考虑安全性的问题．我强烈鼓励你考虑设立一台防火墙!

你还应该在以此方式连到外面的区域网路或网际网路之前先告诉你的区域网路管理者．没有这样做的话可能使你惹上严重的麻烦!


New Page 1

标题： ■ PPP HOWTO 中译版 : 建立连结之後 - /etc/ppp/ip-up 指令稿
姓名 ：Robert Hart
Email：hartr@interweft.com.au
地址 ：
转摘 ：http://member.netease.com/

返回

23. 建立连结之後 - /etc/ppp/ip-up 指令稿
一旦 PPP 连结建立後， pppd 会找寻 /etc/ppp/ip-up 指令稿．如果这个指令稿存在并且可以执行的话，那麽 PPP 伺服程式就会执行这个指令稿．这允许你自动执行任何可能有必要的特殊递送路径指令及任何你想在每次 PPP 连结启动时执行的动作．

这不过就是一般普通的 shell 指令稿，可以做任何指令稿能做的事(也就是，任何你想做的事)．

例如，你可能想要 sendmail 赶快处理在邮件伫列中等待外送的讯息．

类似地，你可以在 ip-up 里插入一些指令取得（使用 POP）在你的 ISP 那边等著你的任何电子邮件．

不过在 /etc/ppp/ip-up 也有些限制:-

它以局限的环境变数以增加安全性．这也就是说你必须给出执行档的全部路径名称等．
技术上来说，/etc/ppp/ip-up 是一个程式而非指令稿．这是说它可以被直接执行 - 也因此它在第一行开始必须具有标准的 file magic (#!/bin/bash) 并且能被 root 读取及执行．

23.1. 特殊递送路径
如果你连结的是两个区域网路，你将得设立一个到 '外面的' 区域网路的指定递送路径．这可以很容易的使用 /etc/ppp/ip-up 指令稿达成．唯一的困难发生在你的机器有多个 PPP 连结时．

这是因为 /etc/ppp/ip-up 这个指令稿是由每一个起动的 ppp 连线所执行的，所以你得要小心地为每一个起动的连结执行正确的递送指令!

23.2. 处理电子邮件伫列
当两个区域网路的连结建立之後，你可能想要确定放在伫列中的电子邮件被清出 - 送到它的目的地．这可以用适当的呼叫 sendmail 来达成．

在 pppd 传递给指令稿的特定参数上使用 bash 的 `case' 叙述来完成这个工作．例如，这是我用来处理我们的广域网路连结及通往我家乙太网路的（也是由相同的 PPP 伺服器处理）/etc/ppp/ip-up 指令稿．

23.3. 一个 /etc/ppp/ip-up 指令稿的例子
下面的例子提供不同的使用□例．

--------------------------------------------------------------------------------

#!/bin/bash
#
# Script which handles the routing issues as necessary for pppd
# Only the link to Newman requires this handling.
#
# When the ppp link comes up, this script is called with the following
# parameters
# $1 the interface name used by pppd (e.g. ppp3)
# $2 the tty device name
# $3 the tty device speed
# $4 the local IP address for the interface
# $5 the remote IP address
# $6 the parameter specified by the 'ipparam' option to pppd
#
case "$5" in
# Handle the routing to the Newman Campus server
202.12.126.1)
/sbin/route add -net 202.12.126.0 gw 202.12.126.1
# and flush the mail queue to get their email there asap!
/usr/sbin/sendmail -q &
;;
139.130.177.2)
# Our Internet link
# When the link comes up, start the time server and synchronise to the world
# provided it is not already running
if [ ! -f /var/lock/subsys/xntpd ]; then
/etc/rc.d/init.d/xntpd.init start &
fi
# Start the news server (if not already running)
if [ ! -f /var/lock/subsys/news ]; then
/etc/rc.d/init.d/news start &
fi
;;
203.18.8.104)
# Get the email down to my home machine as soon as the link comes up
# No routing is required as my home Ethernet is handled by IP
# masquerade and proxyarp routing.
/usr/sbin/sendmail -q &
;;
*)
esac
exit 0

--------------------------------------------------------------------------------

起动通往我们 Newman 校园的 ppp 连结以及这个指令稿的结果，我们最後得到下面这个递送表格记录（这台机器也是我们通常用的 PPP 伺服器并且处理我们的网际网路连结）．我已经在这个输出里加入一些注解以解释每个项目是什麽:

--------------------------------------------------------------------------------

[root@kepler /root]# route -n
Kernel routing table
Destination Gateway Genmask Flags MSS Window Use Iface
# the HOST route to our remote internet gateway
139.130.177.2 * 255.255.255.255 UH 1500 0 134 ppp4
# the HOST route to our Newman campus server
202.12.126.1 * 255.255.255.255 UH 1500 0 82 ppp5
# the HOST route to my home ethernet
203.18.8.104 * 255.255.255.255 UH 1500 0 74 ppp3
# two of our general dial up PPP lines
203.18.8.64 * 255.255.255.255 UH 552 0 0 ppp2
203.18.8.62 * 255.255.255.255 UH 552 0 1 ppp1
# the specific network route to the Newman campus LAN
202.12.126.0 202.12.126.1 255.255.255.0 UG 1500 0 0 ppp5
# the route to our local Ethernet (super-netting two adjacent C classes)
203.18.8.0 * 255.255.254.0 U 1500 0 1683 eth0
# the route to the loop back device
127.0.0.0 * 255.0.0.0 U 3584 0 483 lo
# the default route to the Internet
default 139.130.177.2 * UG 1500 0 3633 ppp4

--------------------------------------------------------------------------------

23.4. 处理电子邮件
上一节提及如何处理外送的邮件 － 一旦连线建立之後简单地藉由清出邮件伫列达成．

如果你执行连往广域网路的连结，你可以跟远端区域网路的网路管理者协调请它们执行完全相同的动作．例如，在我们的广域网路连结中 Newman 校园那一端的 /etc/ppp/ip-up 指令稿看起来像:

--------------------------------------------------------------------------------

#!/bin/bash
#
# Script which handles the routing issues as necessary for pppd
# Only the link to Hedland requires this handling.
#
# When the ppp link comes up, this script is called with the following
# parameters
# $1 the interface name used by pppd (e.g. ppp3)
# $2 the tty device name
# $3 the tty device speed
# $4 the local IP address for the interface
# $5 the remote IP address
# $6 the parameter specified by the 'ipparam' option to pppd
#
case "$5" in
203.18.8.4)
/usr/sbin/sendmail -q
;;
*)
esac
exit 0

--------------------------------------------------------------------------------

然而如果你只能使用动态 IP 号码方式的 PPP 连线连往你的 ISP，你得从在你 ISP 机器上的帐号取得你的电子邮件．这通常是使用 POP(Post Office Protocol)协定来达成的．可以使用 `popclient' 程式处理这个程序 － 而 ip-up 指令稿也可以为你自动化这个程序．

简单地建立一个 /etc/ppp/ip-up 指令稿，其中包含有起动 popclient 程式的适当指令．在我执行 Red Hat Linux 的膝上型电脑上（任何旅行时我都带著它）是这样的

--------------------------------------------------------------------------------

popclient -3 -c -u hartr -p <password> kepler.hedland.edu.au |formail -s procmail

--------------------------------------------------------------------------------

你可以使用 slurp 或其它软体以相同的方式取得网路新闻，以及诸如此类的服务．记得，ip-up 这个指令稿只是个标准的 bash 指令稿因此可以用来自动化当每次适当的 PPP 连结建立时需要完成的任何功能．


New Page 1

标题： ■ PPP HOWTO 中译版 : 24,25,26,27
姓名 ：Robert Hart
Email：hartr@interweft.com.au
地址 ：
转摘 ：http://member.netease.com/

返回

24. 使用 /etc/ppp/ip-down
你可以建立一指令稿在连接一旦结束之後执行．这存放在 /etc/ppp/ip-down 里．这可以用来还原任何对应你在 /etc/ppp/ip-up 指令稿中做的特殊动作．

--------------------------------------------------------------------------------25. 区域网路上的递送问题
如果你已经连接在某个区域网路上但是仍然想要使用在你个人的 Linux 机器上的 pppd 的话，你得要应付某些递送封包的问题，从你的机器到你的区域网路（经过你的乙太网路界面）以及到远端的 PPP 伺服器和更外面的世界．

这一节并不尝试教你有关封包递送的机制 － 它只处理一个简单的，特定的递送情况（静态的）!

如果你不熟悉递送机制的话，那麽我强烈地鼓励你阅读 Linux Network Administrator Guide (NAG)．同时 O'Reilly 的书 "TCP/IP Network Administration" 也以非常容易了解的方式涵盖了这个主题．

静态递送路径的基本规则是预设递送路径应该是指向网路位址号码最多的那一个．对於其它的网路则在递送表格中输入指定递送路径．

我唯一打算在这里介绍的情况是你的 Linux 机器在一个没有连上网际网路的区域网路上 － 而你想要在仍然连接著区域网路的情况下拨接到网际网路上供自己使用．

首先，确定你的乙太网路递送路径是设往能够通过你的区域网路的指定网路位址 － 不是设往预设递送路径!

藉由发出 route 指令检查之，你应该会看见如下的讯息:

[root@hwin /root]# route -n
Kernel routing table
Destination Gateway Genmask Flags MSS Window Use Iface
loopback * 255.255.255.0 U 1936 0 50 lo
10.0.0.0 * 255.255.255.0 U 1436 0 565 eth0

如果你的乙太网路界面 (eth0) 指向预设递送路径，（在 eth0 该行的第一列上会显示 "default" 字样）那麽你得要变更你的乙太网路起始指令稿使它指向特定的网路号码而非预设递送路径（参照 Net2 HOWTO 以及 NAG）．

这将允许 pppd 设立你的预设递送路径，如下所示:

[root@hwin /root]# route -n
Kernel routing table

Destination Gateway Genmask Flags MSS Window Use Iface
10.144.153.51 * 255.255.255.255 UH 488 0 0 ppp0
127.0.0.0 * 255.255.255.0 U 1936 0 50 lo
10.1.0.0 * 255.255.255.0 U 1436 0 569 eth0
default 10.144.153.51 * UG 488 0 3 ppp0

如同你所见到的，我们拥有经由 ppp0 到 PPP 伺服器(10.144.153.51)的主机递送设定而且也拥有使用 PPP 伺服器作为闸道的预设网路递送设定．

如果你的设定得要比此更复杂 － 阅读已经提过有关递送的文件并请教在你身旁的专家!

如果你的区域网路上已经有路由器，那麽在你那里已经建立了通往宽广网路世界的闸道．你仍应把你的预设递送路径指往 PPP 界面 － 并且使其它的递送路径指定到由路由器服务的网路．

25.1. 安全上的注意事项
当你在现有的区域网路上设定一台 Linux 机器连结到网际网路上，你在不知不觉中已经对网际网路 － 以及在那里的骇客们 － 开放了你的整个区域网路．在你这样做之前，我强烈地鼓励你请教你的网路管理者并参考该处的安全策略．如果你的 PPP 连线被成功地用来攻击你的站台的话，那麽你最少也会招致同夥的使用者，网路及系统的管理者强烈的愤怒．你也可能会发现你自己置身於非常严重的麻烦!

在你连接区域网路到网际网路上去之前，甚至是动态的连线你都应该要考虑安全的隐忧 － 因此早点参考 O'Reilly 的 "Building Internet Firewalls"!

--------------------------------------------------------------------------------26. 建立 PPP 伺服器
如同前面提过的，这件工作有许多方法可以可以达成．我在这里所介绍的是我怎麽做的方法（使用 Cyclades 多埠串列卡）以及一组自动转接的电话线路．

如果你不喜欢我在这里介绍的方法，请自由地使用你自己的方法．不过，我很乐意在这份使用说明未来的版本中包含额外的方式．所以，请把你的评论跟方法寄给我!

请注意，这一节只跟如何设定 Linux 作为 PPP 伺服器有关．我不想（不曾）包含有关设定特殊终端机伺服器及这一类的资讯．

而且，我尚未实验过配合 shadow 密码使用（但应该会做）．因此目前介绍的资讯并不包含任何 shadow 需要的设定．

26.1. 编译核心
所有早先提过关於编译核心以及核心与 pppd 版本的说明都适用．这节假设你已经读过这份文件前面的章节!

对於 PPP 伺服器，你必须在你的核心中包含 IP forwarding 的功能．你也可能会希望包含其它的功能（像是 IP firewalls, accounting 等等）．

如果你使用多埠串列卡，那麽你也必须明确地在你的核心中包含必要的驱动程式!

26.2. 伺服器系统的概观
我们使用相同的使用者名称／密码配对提供拨接 PPP (and SLIP) 帐号以及 shell 帐号．这样做的好处（对我们而言）是使用者只需要一个帐号就可以使用所有种类的连线．

因为我们是教育组织，我们并不对职员以及学生的使用收费，所以不必担心计算与收费的问题．

在我们的节点与网际网路之间我们设置有一台防火墙，而这会限制某些使用者的存取，因为拨接线路是在我们的（网际网路）防火墙内（理由很明显，其他网际网路防火墙的细节也不会在此出现而且在任何情况下都没有关系）．

使用者建立连往我们节点之 PPP 连结的程序（当然是在他们拥有有效的帐号後）是:

拨入我们的自动转接拨号器（这是连结一堆数据机的单一电话号码 － 第一台空□的数据机会接起拨入的电话）．
使用一对有效的使用者名称以及密码签入．
在 shell 提示符号下，发出 ppp 指令以启动伺服器上的 PPP 程序．
启动他们机器上的 PPP（可以是执行 Windows, DOS, Linux, MAC OS 或任何作业系统的机器 － 这是他们的问题）．

这台伺服器为每个拨入的埠使用个别的 /etc/ppp/options.ttyXX 档案，而这为动态的 IP 分配设定远端的 IP 号码．伺服器为远地的客户端使用代理位址解析协定(proxyarp)来递送封包（经由适当的 pppd 选项加以设定）．这避免了使用 routed 或是 gated 的需求．

当使用者从他们那端挂断时，pppd 会侦测出来并告诉数据机要它挂断，同时停掉 PPP 连结．

26.3. 所需的全部软体
你将会需要下列的软体:-

Linux，适当地编译以包含必要的选项．
适合於你核心的 pppd 版本．
一套能够聪明地处理数据机通讯的 'getty' 程式．
在这里我们使用的是 getty_ps2.0.7h ，但积极考虑 mgetty．我了解 mgetty 可以侦测出使用 pap/chap 的呼叫（ pap 是 Windows 95 使用的标准）并自动地起动 pppd，但是我尚未研究过它．
你的拨接使用者能够存取的一台领域名称伺服器 (DNS)．
如果有可能的话你真的应该执行你自己的领域名称伺服器...

26.4. 设定标准的拨接(shell access)
在你可以设立你的 PPP 伺服器之前，你的 Linux 机器必须能够处理标准的拨接存取．

这份使用说明并不涵盖这项设定方法．请参阅你选择之 getty 的文件以及 Serial HOWTO 里有关这项设定的资讯．

26.5. 设立 PPP 选项档案
你将得为所有拨接埠设立一个全体的 /etc/ppp/options 档案，其中是通用的选项．我们使用的选项是:

--------------------------------------------------------------------------------

asyncmap 0
netmask 255.255.254.0
proxyarp
lock
crtscts
modem

--------------------------------------------------------------------------------

注意 - 我们没有使用任何(明显的)递送设定 - 特别是这里没有 defaultroute 选项．这理由是因为所有你(做为 PPP 伺服器)所要做的就是将封包从 PPP 客户端递送到你的区域网路或网际网路并且将封包由你的区域网路递送到你的客户端．

全部所需的只是到客户机器的主机递送，而使用 pppd 的 'proxyarp' 选项达成．

这个 'proxyarp' 选项设立一个代理位址解析协定的项目於 PPP 伺服器的位址解析协定(ARP)表格中，那基本上就是说 '将所有要给 PPP 客户端的封包送给我'．这是建立单一 PPP 客户端的递送路径最简单的一个方式 - 但你不能用这种方式在两个区域网路之间递送封包 - 你必须加入适当的网路递送而不能使用代理位址解析协定．

你几乎一定会希望提供动态分配的 IP 号码给你的拨接使用者．你可以藉由分配 IP 号码给每个拨接埠来达成目的．现在，为你的每个拨接埠建立一个 /etc/ppp/options.ttyXX 档案．

在这里面，只要简单地放入本地（伺服器）的 IP 号码及该埠所要使用的 IP 号码．例如

--------------------------------------------------------------------------------

kepler:slip01

--------------------------------------------------------------------------------

特别注意，在这个档案里你可以使用合法的主机名称（我发现我只记得在我网路上重要机器与设备的 IP 号码 － 名称会更有意义才对）!

26.6. 设定 pppd 以便让使用者（成功地）执行它
因为起动 ppp 连结隐含著配置核心设备（网路界面）及操控核心递送表格的动作，所以需要特别的权限 － 事实上需要完整的 root 权限．

幸运的是， pppd 已经设计成可以安全地设定为以 root 的身分执行．所以你必须

--------------------------------------------------------------------------------

chmod u+s /usr/sbin/pppd

--------------------------------------------------------------------------------

当你列出这个档案时，它应该会如同这样

--------------------------------------------------------------------------------

-rwsr-xr-x 1 root root 74224 Apr 28 07:17 /usr/sbin/pppd

--------------------------------------------------------------------------------

如果你没有这样做，使用者将不能设立他们的 PPP 连结．

26.7. 为 pppd 设定一个全域的别名(alias)
为了简化我们拨接 PPP 使用者的连线程序，我们建立一个全域的别名(放在 /etc/bashrc)如此一旦他们签入之後只要一个简单的指令就能起动伺服端的 ppp．

这看起来像

--------------------------------------------------------------------------------

alias ppp="exec /usr/sbin/pppd -detach"

--------------------------------------------------------------------------------

它所作的是

exec : 意指以这个指令所执行的程式替换正在执行的程式（在这个例子中是 shell）．
pppd -detach : 起动 pppd 并且不要把产生的程序放入背景执行．这确保当 pppd 结束时不会留下任何程序．

当一个使用者像这样签入时，他们在 'w' 的输出中看起来会像这样

--------------------------------------------------------------------------------

6:24pm up 3 days, 7:00, 4 users, load average: 0.05, 0.03, 0.00
User tty login@ idle JCPU PCPU what
hartr ttyC0 3:05am 9:14 -

--------------------------------------------------------------------------------

就这样... 我告诉过你这是一个很简单的，基本的 PPP 伺服系统!

--------------------------------------------------------------------------------27. 在 null modem (直接连线)上使用 PPP
这非常地简单 - 因为没有数据机所以事情变得更容易．

首先，选择其中一部机器做为'伺服器'，在串列埠上设立 getty 以便让你可以从'客户端'使用 minicom 去取用此串列埠以测试连接性．

一旦你成功了，你可以除去这个 getty，除非你想用使用者名称/密码来确认连线．因为你有两部机器的'实体控制权'，我假设你并不想如此做．

现在，在伺服器端除去 getty 并确认你已在两部机器上正确地使用 'setserial' 来设定串列埠．

所有你要做的就是在两个系统上启动 pppd．我假设你在两台机器上都使用 /dev/ttyS3 建立连线． 因此，在两部机器上执行指令:-

--------------------------------------------------------------------------------

pppd -detach crtscts lock <local IP>:<remote IP> /dev/ttyS3 38400 &

--------------------------------------------------------------------------------

这将会建立起连结 - 但目前为止你还未指定递送路径．你可以在每部机器上用 ping 指令来测试连结．如果这样可以的话，终止其中一个 pppd 程序以结束连结．

你需要的递送路径实际上看你究竟想做什麽而定．一般来说，其中一部机器会连上乙太网路(其及後的网路)因此所需的递送完全和 PPP 伺服器与客户端一样．

因此在具有乙太网路的机器上，pppd 的指令应该是

--------------------------------------------------------------------------------

pppd -detach crtscts lock proxyarp <local IP>:<remote IP> /dev/ttyS3 38400 &

--------------------------------------------------------------------------------

而另一部机器上是

--------------------------------------------------------------------------------

pppd -detach crtscts lock defaultroute <local IP>:<remote IP> /dev/ttyS3 38400 &

--------------------------------------------------------------------------------

如果你连接两个网路(使用串列连结!)或有更复杂的递送需求，你可以完全按照这份文件前面所提的方法来使用 /etc/ppp/ip-up．

Robert Hart
Port Hedland, Western Australia
Melbourne, Victoria, Australia August/October 1996 January/March 1997


New Page 1

标题： ■ RPM HOWTO (RPM at Idle) : Introduction
姓名 ：Donnie Barnes
Email：
地址 ：djb@redhat.com
转摘 ：http://member.netease.com/

返回

1. Introduction
RPM 指的是 Red Hat Package Manager 之缩写，虽然名称上包含著 Red Hat 的字号， 但其原始设计理念是采开收式的，用意在於让这个程式能提供给所有人使用。 透过 rpm 的管理，使用者可以将某个新软体的 source code， 重新整理包装成另一种 source 与 binary 的档案型式， 如此一来， 我们可以轻松地由 binary 型式的档案， 进行安装与套件追踪管理的工作， 而 source 型式的档案，也很方便地能够再被重新整理包装。 同时， rpm 管理著一份资料库，里头包含了所有的程式套件的档案资料， 透过这份资料库，我们可以进行程式套件之确认与查询工作。

Red Hat 公司鼓励其他协力厂商， 一同发展及使用 RPM 於它们的 distribution 当中。 RPM 相当具有弹性， 其操作非常简单， 提供系统扩充发展的基础，另一方面， 它的发展完全公开， 而且可免费取得，使用者可以回覆任何程式码上的错误与修正内容。只要在符合 GPL 的宣告条件下， 大家可以自由地使用及传播 RPM 程式。

如果您想获得有关 RPM 更详细的文件说明， 可以参考 Ed Bailey 所撰之 Maximum RPM 一书。 这本书可由 www.redhat.com 下载或购买到。


New Page 1

标题： ■ RPM HOWTO (RPM at Idle) : Overview
姓名 ：Donnie Barnes
Email：
地址 ：djb@redhat.com
转摘 ：http://member.netease.com/

返回

2. Overview
首先， 让我们先来了解 RPM 背後的设计哲学， 其设计的目的之一，便是允许使用者能够使用「纯净」的 source 档案。 关於此点，我们必须回溯至 RPP 程式， ( 这是一个早期所使用的程式套件管理系统，不过， 後来 RPM 倒没有由其衍生 )， 它所采用的 source 档案，都是经过额外的「破解处理」。 理论上， 使用者可以顺畅无误地，从一份 RPP 原始档， 完成 install 与 make 的动作。但是这样处理过的 source 档案， 已是面貌全非， 使用者可能无从得知，档案里到底哪些地方被更改过， 通常必须额外取回未经处理过的 source 档案。而 RPM 的做法， 便是让使用者取得「未经处理过的 source 档案」，同时再附上一份「patch 档案」， 可藉之完成程式编译的工作。我们很容易发现， 这样的做法带来不少好处。 怎麽说呢？举个状况为例， 在 Red Hat Linux 下， 如果某个新版的程式问世了，您可能没有必要再重头开始做 compile 动作， 先观察「patch 档案」的内容，看看是否有哪些部份才是您需要做的。 如此一来，所有内含的程式预设值便很容易看出来。

另一方面， RPM 也具有强大的查询功能， 您可以针对整个程式套件的资料库，或是某些特定的档案， 进行查询的动作， 也可以轻松地查出，某个档案是属於哪个程式套件， 或是它打从哪里来的。 RPM 档案本身是经过压缩的， 但您还是可以很容易而快速地，查询每个程式套件的内容， 因为在程式套件里， 已经加入一段特殊的 binary header， 它记录了全部查询时所需的内容， 这样的做法，使得查询功能变得相当快速。

另一项强大的功能， 便是程式套件的完整确认。如果您担心误砍某个档案， 而它正是某个程式套件的重要部份，那麽做个「确认动作」就行了。 如有任何不正常的地方， 便会通知您，这时候， 您可以视情况重新安装该程式套件， 而且所有之前的设定档，都会完好地被保存下来。

我们非常感谢来自 BOGUS distribution 的高手们， 他们提供了许多意见构想，後来也都被采用於 RPM 当中。 虽然 RPM 完全是由 Red Hat Software 所撰写，但其操作模式是根据 BOGUS (PM 与 PMS) 所写的程式码。


New Page 1

标题： ■ RPM HOWTO (RPM at Idle) : 3,4,5
姓名 ：Donnie Barnes
Email：
地址 ：djb@redhat.com
转摘 ：http://member.netease.com/

返回

3. General Information
3.1. Acquiring RPM
最好且最简单的方法， 当然就是安装 Red Hat Linux 罗，如果您抵死不从， 那麽依然可以从 FTP 站， 抓取原始程式回来安装。程式档案的位置是 ftp.redhat.com。

3.2. RPM Requirements
顺利执行 RPM 的最大条件， 就是「要有 2.4.2 版以上的 cpio 程式」。 RPM 主要是设计给 Linux 使用的， 但对於其他 Unix 系统的相容性也相当不错，事实上， 它已经顺利在 SunOS、 Solaris、 AIX、 Irix、 AmigaOS 及其他系统上完成 compile 动作。 值得注意的是， 由不同 Unix 作业平台所编译出来的 binary 程式套件， 是不能彼此相容的。

上述只是安装 RPM 的最低需求， 如果想要由 source 档案建造起，那麽您还需要 gcc， make 之类的编译工具程式，这和建造一般程式套件并无二致。

--------------------------------------------------------------------------------4. Using RPM
RPM 可以用於安装程式套件上， 最简单的操作格式如下：

rpm -i foobar-1.0-1.i386.rpm

另一个简单的操作□例， 是用於解除某一个程式套件的安装：
rpm -e foobar

接下来的指令□例较为复杂， 但它非常有用， 可以让您透过 FTP 来安装程式套件。 如果您能够连上网路， 想安装某个新的程式套件时，所需下达的指令， 便是在档案前加上适当的 URL 格式， 例如：

rpm -i ftp://ftp.pht.com/pub/linux/redhat/rh-2.0-beta/RPMS/foobar-1.0-1.i386.rpm

请特别注意， RPM 目前已允许透过 FTP 来进行查询或安装。

上述都是些简单的指令， rpm 还有许多不同的选项方式，这些可由 Usage 的说明中看出：

RPM version 2.3.9
Copyright (C) 1997 - Red Hat Software
This may be freely redistributed under the terms of the GNU Public License

usage: rpm {--help}
rpm {--version}
rpm {--initdb} [--dbpath <dir>]
rpm {--install -i} [-v] [--hash -h] [--percent] [--force] [--test]
[--replacepkgs] [--replacefiles] [--root <dir>]
[--excludedocs] [--includedocs] [--noscripts]
[--rcfile <file>] [--ignorearch] [--dbpath <dir>]
[--prefix <dir>] [--ignoreos] [--nodeps]
[--ftpproxy <host>] [--ftpport <port>]
file1.rpm ... fileN.rpm
rpm {--upgrade -U} [-v] [--hash -h] [--percent] [--force] [--test]
[--oldpackage] [--root <dir>] [--noscripts]
[--excludedocs] [--includedocs] [--rcfile <file>]
[--ignorearch] [--dbpath <dir>] [--prefix <dir>]
[--ftpproxy <host>] [--ftpport <port>]
[--ignoreos] [--nodeps] file1.rpm ... fileN.rpm
rpm {--query -q} [-afpg] [-i] [-l] [-s] [-d] [-c] [-v] [-R]
[--scripts] [--root <dir>] [--rcfile <file>]
[--whatprovides] [--whatrequires] [--requires]
[--ftpuseport] [--ftpproxy <host>] [--ftpport <port>]
[--provides] [--dump] [--dbpath <dir>] [targets]
rpm {--verify -V -y} [-afpg] [--root <dir>] [--rcfile <file>]
[--dbpath <dir>] [--nodeps] [--nofiles] [--noscripts]
[--nomd5] [targets]
rpm {--setperms} [-afpg] [target]
rpm {--setugids} [-afpg] [target]
rpm {--erase -e} [--root <dir>] [--noscripts] [--rcfile <file>]
[--dbpath <dir>] [--nodeps] [--allmatches]
package1 ... packageN
rpm {-b|t}[plciba] [-v] [--short-circuit] [--clean] [--rcfile <file>]
[--sign] [--test] [--timecheck <s>] specfile
rpm {--rebuild} [--rcfile <file>] [-v] source1.rpm ... sourceN.rpm
rpm {--recompile} [--rcfile <file>] [-v] source1.rpm ... sourceN.rpm
rpm {--resign} [--rcfile <file>] package1 package2 ... packageN
rpm {--addsign} [--rcfile <file>] package1 package2 ... packageN
rpm {--checksig -K} [--nopgp] [--nomd5] [--rcfile <file>]
package1 ... packageN
rpm {--rebuilddb} [--rcfile <file>] [--dbpath <dir>]
rpm {--querytags}

您可以在 RPM 的 man page 里， 找到这些选项的详细说明。

--------------------------------------------------------------------------------
5. Now what can I really do with RPM?
RPM 是个非常有用的工具， 而且如您所知的， 它具有许多选项功能。让您了解这些功能的最好方式， 便是实际介绍几个□例，前面我们已经提过安装与解除安装的简单例子， 底下是一些额外的□例：

假设说， 您不小心误删了几个档案， 但不确定到底是哪些档案，您想对整个系统进行确认动作， 以了解哪些部份可能已经遗损， 您可以这样做：
rpm -Va

假设说， 您碰到一个认不出来的档案，想要知道它是属於哪一个程式套件的话， 您可以这样做：
rpm -qf /usr/X11R6/bin/xjewel

其结果会得到：
xjewel-1.6-1

如果您找到一个新的 RPM 档案， 却不清楚它的内容，想要获得相关的资讯， 可以这样做：
rpm -qpi koules-1.2-2.i386.rpm

其结果会得到：
Name : koules Distribution: Red Hat Linux Colgate
Version : 1.2 Vendor: Red Hat Software
Release : 2 Build Date: Mon Sep 02 11:59:12 1996
Install date: (none) Build Host: porky.redhat.com
Group : Games Source RPM: koules-1.2-2.src.rpm
Size : 614939
Summary : SVGAlib action game with multiplayer, network, and sound support
Description :
This arcade-style game is novel in conception and excellent in execution.
No shooting, no blood, no guts, no gore. The play is simple, but you
still must develop skill to play. This version uses SVGAlib to
run on a graphics console.

如果您想了解某个 RPM 档案， 会在系统里安装哪些档案，您可以这样做：
rpm -qpl koules-1.2-2.i386.rpm

其结果会是：
/usr/doc/koules
/usr/doc/koules/ANNOUNCE
/usr/doc/koules/BUGS
/usr/doc/koules/COMPILE.OS2
/usr/doc/koules/COPYING
/usr/doc/koules/Card
/usr/doc/koules/ChangeLog
/usr/doc/koules/INSTALLATION
/usr/doc/koules/Icon.xpm
/usr/doc/koules/Icon2.xpm
/usr/doc/koules/Koules.FAQ
/usr/doc/koules/Koules.xpm
/usr/doc/koules/README
/usr/doc/koules/TODO
/usr/games/koules
/usr/games/koules.svga
/usr/games/koules.tcl
/usr/man/man6/koules.svga.6

上述只是一些□例， 当您对 RPM 愈加熟悉时，应该能想出其他更多的创意组合。


New Page 1

标题： ■ RPM HOWTO (RPM at Idle) : Building RPMs
姓名 ：Donnie Barnes
Email：
地址 ：djb@redhat.com
转摘 ：http://member.netease.com/

返回

6. Building RPMs
如果您可以自个儿取得所需的软体，那麽建造 RPM 档案也是非常简单的。

建造 RPM 档案的基本步骤如下：

确定您的 /etc/rpmrc 已经符合系统所需， 完成设定。
取回所要建造的 source code。
进行所需的 source 档案 patch 动作， 以使得我们能顺利地 build 整个程式。
为程式套件撰写一份 spec 档案。
确认每个档案都在正确的目录位置。
使用 RPM 来 build 整个程式套件。

如果一切操作正确， RPM 便能顺利 build 完成 binary 与 source 程式套件。

6.1. The rpmrc File
目前为止， RPM 系统唯一的设定档， 是透过 /etc/rpmrc 档案来管理。其内容□例如下：

require_vendor: 1
distribution: I roll my own!
require_distribution: 1
topdir: /usr/src/me
vendor: Mickiesoft
packager: Mickeysoft Packaging Account <packages@mickiesoft.com>

optflags: i386 -O2 -m486 -fno-strength-reduce
optflags: alpha -O2
optflags: sparc -O2

signature: pgp
pgp_name: Mickeysoft Packaging Account
pgp_path: /home/packages/.pgp

tmppath: /usr/tmp

档案中的 require_vendor 这一行叙述， 用以控制 RPM 是否须要找寻 vendor 那一行叙述， 而 verdor 的资讯可能来自 /etc/rpmrc 或是 spec 档案的 header 处。 如果您把上述的号码改为 0， 便能把这项寻找功能关闭。 这样的设定方式，同样适用於 require_distribution 与 require_group 的叙述上。

接下来， 我们看到 distribution 这一行， 您可以在此设定， 或是日後在 spec 档案的 header 处设定。 当我们在某个 distribution 上 build 程式套件时，就算不需要查询设定， 此行内容的设定正确， 也是能够带来许多便利。 vendor 那一行的作用， 和上述的 distribution 非常相似，但其内容并不限定 ( 例如是 Joe's Software 或 Rock Music Emporium )。

RPM 目前支援「多平台架构」的程式套件 build 功能， 我们可以在 rpmrc 档案里指定 ``optflags'' 变数， 当进行程式套件 build 动作时，便可依据所需的平台类型， 应用特定的变数内容。 我们将会在接下去的章节里，说明如何使用这些变数。

除了上述的 macro 设定外， 还有许多其他的设定方式， 您可以使用：

rpm --showrc

来查看系统的 tag 与可供使用的 flag 有哪些。

6.2. The Spec File
在此我们将讨论 spec 档案的设定。 build 一个程式套件时， 我们需要使用到 spec 档案， 其内容为该程式套件的说明， 额外还包括一些指令，用以指示整个 build 的过程， 还有一份档案列表， 用以表示程式套件中的档案，分别被安装到哪里。

spec 档案的命名方式， 最好是遵循标准的惯例， 其格式应该为 package name-dash-version number-dash-release number-dot-spec。

这里我们举一个小型的 spec 档案为例 (vim-3.0-1.spec)：

Summary: ejects ejectable media and controls auto ejection
Name: eject
Version: 1.4
Release: 3
Copyright: GPL
Group: Utilities/System
Source: sunsite.unc.edu:/pub/Linux/utils/disk-management/eject-1.4.tar.gz
Patch: eject-1.4-make.patch
Patch1: eject-1.4-jaz.patch
%description
This program allows the user to eject media that is autoejecting like
CD-ROMs, Jaz and Zip drives, and floppy drives on SPARC machines.

%prep
%setup
%patch -p1
%patch1 -p1

%build
make RPM_OPT_FLAGS="$RPM_OPT_FLAGS"

%install
install -s -m 755 -o 0 -g 0 eject /usr/bin/eject
install -m 644 -o 0 -g 0 eject.1 /usr/man/man1

%files
%doc README COPYING ChangeLog

/usr/bin/eject
/usr/man/man1/eject.1

6.3. The Header
档案 header 的部份， 有几个特定的栏位内容， 您必须加以设定完成，另外还有几点注意事项。 您必须设定完成的栏位内容如下：

Summary: 以一行长度的描述， 来说明程式套件的内容。
Name: 这个档案名称必须与您准备使用的 rpm 档名一致。
Version: 这个版本名称必须与您准备使用的 rpm 档名一致。
Release: 这个发行序号必须与您准备使用的 rpm 档名一致。 ( 也就是说， 如果我们完成一个程式套件， 但事後发现它有些小小的问题，必须重新 build 一次， 此时新的程式套件， 其发行序号便是 2 号 )。
Icon: 如果您使用了其他高阶的安装工具程式 ( 像是 Red Hat 的 ``glint'' 程式 )， 那麽这里可以指定其相对应的图示档，它必须是一个 gif 档案， 而且必须位於 SOURCES 目录。
Source: 这里指定了那些「未经处理过的 source 档案」的 HOME 目录， 当您想要重新取得 source 档案， 或是检察是否有新版本时，就需要用到这个设定。 注意事项： 这里的档名， 「务必」与您系统上的档案名称一致 ( 也就是说， 下载 source 档案後， 不要去变更其档案名称 )。同时， 您可以指定一个以上的 source 档案， 方式如下：
Source0: blah-0.tar.gz
Source1: blah-1.tar.gz
Source2: fooblah.tar.gz

这些档案都会到 SOURCES 目录底下 ( 相关的目录结构说明，会在後面的 "The Source Directory Tree" 章节里加以讨论 )。
Patch: 如果您需要重新下载 patch 档案，那麽其目录位置设定於此。注意事项： 这里的档名， 必须与您系统上使用的 patch 档案名称相符，另一方面， 和前述多个 source 档案的设定一样， 您也可以指定多个 patch 档案名称。 其格式□例如下：
Patch0: blah-0.patch
Patch1: blah-1.patch
Patch2: fooblah.patch

这些档案都会到 SOURCES 目录底下。
Copyright: 这里的设定， 用以说明程式套件采用何种版权声明。像 GPL、 BSD、 MIT、 public domain、 distributable、 commercial 等，都是您可以指定的。
BuildRoot: 您可以指定一个目录，它会被当作是 build 与 install 新程式套件的 ``root'' 目录，如果您想在实际安装之前， 先行测试程式内容， 可以善用此项设定。
Group: 这里的设定， 用於高阶的安装工具程式 ( 例如 Red Hat 的 ``glint'' 程式 ) 当中， 用以说明程式所属的群组位置。目前的群组架构， 大致如下所述：
Applications
Communications
Editors
Emacs
Engineering
Spreadsheets
Databases
Graphics
Networking
Mail
Math
News
Publishing
TeX
Base
Kernel
Utilities
Archiving
Console
File
System
Terminal
Text
Daemons
Documentation
X11
XFree86
Servers
Applications
Graphics
Networking
Games
Strategy
Video
Amusements
Utilities
Libraries
Window Managers
Libraries
Networking
Admin
Daemons
News
Utilities
Development
Debuggers
Libraries
Libc
Languages
Fortran
Tcl
Building
Version Control
Tools
Shells
Games

%description 这个并非真的是 header 项目，但您应该连同上述的项目一同填写， 每个「程式套件」或「子程式套件」，都应该有一个 description tag。 这里允许您输入多行内容，使得程式套件能够具有一份完整详尽的说明。

6.4. Prep
这里是 spec 档案的另一个段落章节， 用以设定让 source 档案就绪，以供下一步的 build 动作。 平常我们必须经过 setup， 才能实际进行 make 动作， 因此在本段落章节中， 我们将视需要进行 source 档案的 patch 与 setup。

有件事值得注意的： 接下来的段落设定， 实际上只是指明某段 shell scripts 的位置， 您可以将 shell scripts 的内容， 另外以 sh script 的方式加以存档， 并将 script 程式名称置於 %prep tag 之後，用以执行 source 档案的 unpack 与 patch 动作。 当然， 以原有之 macro 型式来做， 应该是方便许多的。

第一个要说明的 macro 是 %setup。如果我们采用其最简单的格式 ( 即不加任何命令列参数的情况 )，它会单纯地将 source 档案加以 unpack， 并 cd 进入 source 档案的目录。除此之外， 您还可以使用下列的选项：

-n name 这个选项设定会把 build 的目录设为 name，原预设值为 $NAME-$VERSION， 其他可能目录名称包括 $NAME， ${NAME}${VERSION}， 或是 tar 档案本身所用的目录。 ( 请注意到， 上述的 ``$'' 变数，并不是 spec 档案里的变数， 它们在这里只是用来代表一个□例名称，您必须在程式套件里， 使用实际的档案名称与版本名称 )。
-c 在进行 untar 动作之前，会先建立一个目录， 并 cd 进入该目录。
-b # 在 cd 进入该目录之前，会先将 Source# 进行 untar 动作 ( 这个选项与 -c 选项并存时，是没有意义的， 所以应避免同时使用 )， 而且这个选项，仅适用於多个 source 档案的场合。
-a # 在 cd 进入该目录之後，再将 Source# 进行 untar 动作。
-T 这个选项会盖过原本预设的 untar 动作，同时需要一个 -b 0 或是 -a 0 的选项来配合，当您使用到两个以上的 source 档案时， 便需要此项功能。
-D 在解开程式套件之前， 不要删除该目录。这个选项仅适用於使用两个以上 setup macro 之场合，而且只能用於第一个 setup macro 之後 ( 千万别用於第一个之内 )。

接下来要说明的 macro 是 %patch。它是用来协助自动处理 source 档案更新的动作， 其相关的选项很多， 列表说明如下：

# 会引用 Patch# 当作其所需之更新档。
-p # 有时 patch(1) 指令需配合指定 strip 的目录数目，你可以在此选项中加以设定。
-P 其预设之动作是引用 Patch ( 或 Patch0 )，当您使用两个以上的 %patch macro， 并且需要与第一个 macro 不同之 patch number 时， 这个选项显得相当有用。它会盖过原本的预设动作， 并且需要配合一个 0，以使得主要的 source 档案得以进行 untar 动作。
您也可以使用 %patch#，而不必使用这样的指令： %patch # -P

这些应该就是全部所需要知道之 macro 说明， 了解它们之後，您也可以透过 sh 之 script 格式， 设定不同的 setup 方法，在 %build macro ( 在下一章节中会提及 ) 之前，您所设定之所有选项， 都是经由 sh 来执行，您可以再参考一下前述的□例， 或许可以适用於您的需要。

6.5. Build
这个章节里， 所述及的并非真正的 macro。 当您把 source 档案 untar，并且 patch 完成， cd 进入目录之後， 开始准备 build 动作时，便是在这里设定那些控制 build 动作的指令。 而这些指令都还是传给 sh，所以任何 sh 之指令， 都可以在此指定 ( 包括 comments 在内 )。 在 spec 档案里的每一段落章节设定中， 您的目前所在目录位置，都会被重新设定为 source directory 的最上层， 所以请牢记在心，必要时， 您可以 cd 进入相关的子目录。

6.6. Install
这里所设定的， 同样也不是 macro， 基本上， 您只须要在此设定一些 install 所需之指令。 如果您打算在程式套件里， 提供完整的 make install 指令设定， 那麽请在本段落设定中完成， 不然，您也可以更改 makefile 档案里， 有关 make install 的部份，然後仅在本段落设定中指定 make install。 或是， 也可以把整个 install 的指令交给 sh 来做。 记住， 您的目前所在目录位置，应该已被重新设定为 source directory 的最上层。

6.7. Optional pre and post Install/Uninstall Scripts
程式套件在安装与解除安装之前後，您可以指定 script， 使其视情况加以执行。 进行此项动作的主要原因之一，便是遇到如下的场合， 譬如说， 我们在安装或解除安装一些含有 shared library 的程式套件时， 需要执行 ldconfig。各式 script 所需之 macro 名称如下：

%pre 执行 pre-install scripts 的 macro。
%post 执行 post-install scripts 的 macro。
%preun 执行 pre-uninstall scripts 的 macro。
%postun 执行 post-uninstall scripts 的 macro。

这些段落设定的内容， 可以是任何 sh 型式之 script，不过， 您无须指定关键叙述 #!/bin/sh。

6.8. Files
本段落设定当中， 您必须列出程式套件内之所属档案名称。 RPM 本身并无从得知， 执行 make install 之後， 到底有哪些 binary 档案被安装进去， 目前并无他法可以直接解决此问题。有些人建议在 install 程式套件的前後， 使用 find 指令来处理，不过在一个多使用者的系统下， 这应该是不可行的， 因为在程式套件 build 的过程中， 可能有其他与程式套件本身无关的档案被产生。

另外还有一些 macro， 它们可用来做一些特殊的工作，兹将其列述於下：

%doc 用以标示在 install 程式套件时，您所想要安装之 source 档案里的说明文件是哪些，而这些说明文件会被安装在 /usr/doc/$NAME-$VERSION-$RELEASE。您可以在命令列上， 以此 macro 同时指定好几个说明文件名称，或是以此 macro， 各别为它们一一完成指定。
%config 用以标示程式套件里的设定档案是哪些，这包括像 sendmail.cf、 passwd 之类的档案。如果您事後 uninstall 了某个程式套件， 而且它含有设定档案，那麽所有没有改变的档案会被移除， 而所有已经改变的档案，会在原档案名称之後， 加上 .rpmsave 的延伸名称。同样的， 您可以在此同时列出多个档案名称。
%dir 在档案列表中， 标明某一个特定的目录，用以说明该目录为某程式套件所拥有。 如果您在档案列表中指定一个目录名称，但却没有在前面加上%dir macro， 那麽该目录内， 所有档案目录都会被包含在档案列表当中， 并在稍後，被当作是程式套件的一部份而全被安装进去。
%files -f <filename> 允许您引用 source 之 build 目录里， 某份档案清单的内容。 当您遇到某一个程式套件，它可以建立自己的档案清单时， 这个选项便显得相当不错，您只须要引用该份档案清单， 不必再自行辛苦地列出。

在档案列表里， 有个最大的注意事项， 便是目录的设定。如果您不小心将 /usr/bin 列入， 那麽您的程式套件，将会包括系统里 /usr/bin 底下的所有档案。

6.9. Building It
6.9.1. The Source Directory Tree
第一件事， 您必须选定一个适当的 build tree，此项设定可在 /etc/rpmrc 档案里完成，而大多数人会直接使用 /usr/src。

您可能还需要建立下列的目录， 使得 build tree 的设定能够完成：

BUILD 此目录便是 RPM 进行所有 build 动作的工作目录。您不必特别地在哪个目录进行测试性的 build 动作。
SOURCES 此目录存放著您的「起始」 (original) 原始 tar 档案、 与相关的 patch 档案， RPM 预设会寻找本目录。
SPECS 此目录存放所有之 spec 档案。
RPMS 此目录存放所有 build 产生之 binary 格式 RPM 档案。
SRPMS 此目录存放所有 source 格式 RPM 档案。

6.9.2. Test Building
首先， 您大概会想要取回 source 档案， 在没有使用 RPM 的情况下，进行一次「纯净的」 build 动作。 其步骤便是， 解开 source 档案，将该目录名称改为 $NAME.org， 然後再次解开 source 档案，我们需要使用此一 source 来进行 build 动作。进入此一 source 目录， 按照指示来进行 build，如果您必须编辑任何东西， 您会需要一份 patch，一旦您完成 build 工作， 便可清除 source 目录里的内容。请确定将 configure script 里， 所有产生之档案加以清除，然後再 cd 回到 source 目录之上层， 接著便可执行这样的动作：

diff -uNr dirname.orig dirname > ../SOURCES/dirname-linux.patch

上述指令会产生一份 patch， 您在 spec 档案可以使用到它。注意到上面的 ''linux'' 名称， 它只是一个提示作用，或许您可以使用其他名称， 诸如 ''config'' 或 ''bugs'' 之类的提示名称，用以说明您何以制作此一 patch 档案。同时， 您最好也在使用 patch 档案之前， 先观察里头的内容，确定是否无意间包含了其他的 binary 档案。

6.9.3. Generating the File List
现在， 您已经有了一份可以拿来 build 的 source 档案，而且您也知道如何完成其相关的动作， 如 build 与 install 等。观察 install 时， 依序产生的结果， 我们将由此结果，在 spec 档案中建立一份档案列表。通常我们会在进行上述步骤的同时， 一起建立 spec 档案，您可以先完成档案的起始部分， 和几个简单的部分，然後再把其他部分的步骤加以完成。

6.9.4. Building the Package with RPM
一旦您有了一份 spec 档案， 一切便已就绪， 您可以准备 build 的测试动作。最好的方式， 就是使用类似下列的指令：

rpm -ba foobar-1.0.spec

配合 -b 选项， 我们还可以使用其他有用的选项：

p 指的是只执行 spec 档案之 prep 部份。
l 针对 %files 进行档案列表的比对检查动作。
c 执行 prep 与 compile 的动作。 当您不确定 source 档案是否能够 build 时， 此选项显得相当有用。或许您会觉得它并没有多大用处， 因为您可能想要继续修改 source 档案本身， 直到 build 後再开始使用 RPM， 但一旦您熟悉 RPM 的用法後，会发现它的便利之处。
i 执行 prep、 compile、 与 install。
b 执行 prep、 compile、 install、 并只 build 出一份 binary 程式套件。
a 执行所有的 build 动作 ( 包括 source 与 binary 的程式套件 )。
配合 -b 选项， 另外还有一些细项选项可供使用， 它们分别是：
--short-circuit 会直接跳至某个特定的阶段 ( 仅可配合 c 与 i 选项来使用 )。
--clean 当执行完毕时， 移除相关的 build tree。
--keep-temps 会把所有的 temp 与 scripts 档案，都保留在 /tmp 目录， 您可以使用 -v 选项， 实际观察有哪些档案被产生。
--test 并不实际执行任何阶段的动作， 但有执行 keep-temp 的部份。

6.10. Testing It
一旦有了 source 与 binary 的 rpm 档案， 您必须进行测试工作。最简单且最好的方式， 就是使用另一台机器来测试，也就是进行 build 动作之外的机器。 毕竟， 您刚在您的机器上，完成一大堆的 make install 动作， 若在原机器上做测试，当然会显得相当顺利罗。

您可以执行 rpm -u packagename 来进行测试，但这样做还是有造假的可能， 因为在 build 的过程中，您做了 make install 的动作， 如果您在档案列表中遗漏了某些东西，那麽它不会被解除安装， 然後您再 reinstall 这份 binary 程式套件，便会发现整个系统还是完整而运作正常的， 但实际上的 rpm 档案还是有问题。因此请特别记住， 由於您执行的是 rpm -ba package， 而大多数的人，会只以 rpm -i package 方式， 来安装您的程式套件。当 binary 档案独自被安装时， 您必须确定在 build 或 install 的段落设定中， 并没有相关的部份对其有影响。

6.11. What to do with your new RPMs
一旦您作出了一份自己的 RPM 档案 ( 假定这份档案， 之前并未以 RPM 方式制作过 )， 您可以将您的作品贡献给别人 ( 此时假定您制作的 RPM 档案， 是可以自由传布的 )。 您可以考虑把它上传至 ftp.redhat.com。

6.12. What Now?
请回顾上述的章节， 在「Testing」和「What to do with new RPMs」里，我们希望所有的 RPM 档案都能被提供出来， 而且我们希望它们都会是好的 RPM 档案。 因此， 请多花一点时间好好地测试它们， 然後再花点时间将它们上传，以造福普罗大众。 同时， 请确定您只上传可供自由传布的软体。商业软体与共享软体是不应该被上传的， 除非它们有份许可声明在上面。这样的软体， 包括有 Netscape software、 ssh、 pgp 等。


New Page 1

标题： ■ RPM HOWTO (RPM at Idle) : . Multi-architectural RPM Building
姓名 ：Donnie Barnes
Email：
地址 ：djb@redhat.com
转摘 ：http://member.netease.com/

返回

7. Multi-architectural RPM Building
RPM 目前可用於 build 各式作业平台之程式套件， 如 Intel i386、安装 Linux 之 Digital Alpha、 与 Sparc 机器，而且有人测试报告， 说明它也可以在 SGI 与 HP 工作站上使用。 RPM 有许多特色， 使得它能够轻松地支援在各式作业平台上 build 程式套件， 第一个特色便是在 /etc/rpmrc 档案里的 ``optflags'' 设定项目， 当我们在 build 软体套件时，它可用於指定平台架构的相关设定值。 另一个特色是 spec 档案里的 ``arch'' macro 项目， 根据所要进行 build 的平台架构，您可以指定它们执行不同的工作。另一个特色是在档案 header 处的 ``Exclude'' 设定项目。

7.1. Sample spec File
下列以 ``fileutils'' 程式套件为例， 其 spec 档案的部份内容，可用来在 Alpha 与 Intel 平台架构上， 进行 build 的工作。

Summary: GNU File Utilities
Name: fileutils
Version: 3.16
Release: 1
Copyright: GPL
Group: Utilities/File
Source0: prep.ai.mit.edu:/pub/gnu/fileutils-3.16.tar.gz
Source1: DIR_COLORS
Patch: fileutils-3.16-mktime.patch

%description
These are the GNU file management utilities. It includes programs
to copy, move, list, etc, files.

The ls program in this package now incorporates color ls!

%prep
%setup

%ifarch alpha
%patch -p1
autoconf
%endif
%build
configure --prefix=/usr --exec-prefix=/
make CFLAGS="$RPM_OPT_FLAGS" LDFLAGS=-s

%install
rm -f /usr/info/fileutils*
make install
gzip -9nf /usr/info/fileutils*

.
.
.

7.2. Optflags
在此一□例中， 您可以发现 ``optflags'' 设定项目，是如何由 /etc/rpmrc 档案中发挥作用。首先决定您所进行 build 动作的机器， 是哪一种平台架构，请将其正确之设定值， 指定到 RPM_OPT_FLAGS。您必须针对程式套件之 Makefile 档案， 进行 patch 的动作，将一些通用的变数设定值， 加以改变以适用於您的环境 ( 如 -m486 与 -O2 )。您可以 install 这份 source 套件， 接著解开 source 并检查其 Makefile 档案，以进一步找出更好的设定方式， 然後观察 Makefile 的 patch 内容，以了解我们必须做哪些改变。

7.3. Macros
%ifarch 此一 macro 设定项目是非常重要的， 在许多场合，您须要只针对某一特定平台架构， 进行一两个 patch 工作，这种情况下， RPM 能够让您仅针对某一平台架构， 采用必要的 patch。

在上述□例中， fileutils 有个提供给 64 bit 机器使用的 patch，很明显地， 这项 patch 仅需要由 Alpha 机器所采用， 因此，我们针对 64 bit 的 patch 部份， 增加一个 %ifarch 的 macro 设定项目， 其□例如下：

%ifarch axp
%patch1 -p1
%endif

这样能保证， 除了 Alpha 机器之外， 其他平台架构的机器并不会采用此 patch。

7.4. Excluding Architectures from Packages
您可以在一个目录内， 同时管理各式作业平台的 RPM 原始档案，这项功能使得我们在制作程式套件的时候， 不必限定於某些作业平台上。因此您可以这样下指令：

rpm --rebuild /usr/src/SRPMS/*.rpm

使得正确的程式套件能够被 build。如果您尚未移植某个应用程式至某一特定的作业平台，可以加上这样的一行内容：
ExcludeArch: axp

到 source 程式套件当中， spec 档案的 header 处，然後在原本进行 build 的作业平台上， 再做一次 rebuild 动作。此时， 您就有了一份在 Intel 机器上 build 完成的 source 程式套件，同时它也很容易便能移□至 Alpha 机器上。

7.5. Finishing Up
使用 RPM 来制作「多作业平台」的程式套件， 通常会比各别在该平台制作来得容易，而且随著您制作越多的程式套件， 其效应会更加明显， 因为，我们可以参考其他类似的原始程式套件内容， 得以处理制作时遇到的问题。

8. Copyright Notice
本说明文件及其内容， 均受版权所保护， 在原文保持完整、 未被更动的情况下，允许将其转载， 也就是说， 您仅能对原文加以重新排版、 重新列印、 或进行转录。


New Page 1

标题： ■ Linux Serial HOWTO 中译版 : 简介
姓名 ：Greg Hankins greg.
Email：hankins@cc.gatech.edu
地址 ：
转摘 ：http://member.netease.com/

返回

Previous: Linux Serial HOWTO 中译版
Next: 已经支援的串列硬体
--------------------------------------------------------------------------------

1. 简介
这是 Linux Serial HOWTO．包含关於如何在 Linux 下设定数据机以及终端机的所有细节，还有一些使用串列的诀窍，以及故障排除的资料．这份文件著重在 Intel x86 硬体上执行的 Linux，虽然在其它平台上也许也能运作．

1.1. 版权声明
本文版权是属於 Greg Hankins(copyright (C) 1993 - 1997)．本文件可以在 LDP 的版权许可下散布: http://sunsite.unc.edu/LDP/COPYRIGHT.html. 本文在未经作者许可下不得以修改的形式散布．

原文

Copyright (c) 1993 - 1997 by Greg Hankins. This document may be distributed under the terms set forth in the LDP license at http://sunsite.unc.edu/LDP/COPYRIGHT.html. This document may not be distibuted in modified form without consent of the author.

1.2. 这份文件的最新版本
新版的 Serial HOWTO 会放到
ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/Serial-HOWTO 以及映射节点．有一些其它像是 Postscript 以及 DVI 格式的版本放在 other-formats 目录里．这一份 Serial HOWTO 也可在 http://sunsite.unc.edu/LDP/HOWTO/Serial-HOWTO.html 取得．它也会每月定期的贴到 comp.os.linux.answers．

1.3. 回馈
请将任何的问题，评论，建议或补充内容寄送给我．我永远渴望听到你对这份 HOWTO 的想法．我也总是小心地注意改进! 确实地告诉我你有什麽不懂的地方，或者是有什麽地方可以写得更清楚．你可以经由这个电子邮件位址 greg.hankins@cc.gatech.edu 与我连系．所有的邮件我都会回覆，不过可能要花一个星期或更长的时间，看我多忙而定．我收到一大堆来自 root 及错误设定的站台．请以真实身份寄信给我，并且确定你的电子邮件系统是正常运作使得我能够回信给你．如果两个星期之内你还没收到我的回音，请尝试再寄一次．

也可以藉由下面的地址以迟缓的传统信件联络我:
Greg Hankins
College of Computing
801 Atlantic Drive
Atlanta, GA 30332-0280
以及经由全球资讯网到我的网页
http://www.cc.gatech.edu/staff/h/Greg.Hankins/.

撰写时请将 Serial HOWTO 文件的版本编号含入，这份是 1.11 版．

1.4. 免责声明
你的状况可能很不一样．这里的回答可能无法在所有的系统及各种设定的组合下运作．


New Page 1

标题： ■ Linux Serial HOWTO 中译版 : 已经支援的串列硬体
姓名 ：Greg Hankins greg.
Email：hankins@cc.gatech.edu
地址 ：
转摘 ：http://member.netease.com/

返回

2. 已经支援的串列硬体
以知 Linux 可以与下列的串列硬体配合运作．

2.1. 标准 PC 串列埠

标准 PC 串列埠 (COM1 - COM4)，能够让外接的串列装置(数据机，串列滑鼠等)连接的
标准 PC 内接式数据机 (COM1 - COM4)
Quickpath Systems Port-Folio 550e (可用的 IRQ 为 3, 4, 5, 9, 10, 11, 12, 及 15)

注意: 由於位址冲突，你不能同时使用 COM4 及 IBM8514 视讯卡．这是 IBM8514 视讯卡的一个 bug．

2.2. 即插即用型(PnP)数据机
即插即用型数据机能够在 Linux 上运作．然而，我不建议使用它们，因为有困难．你有好多事情要试:

试著关掉你电脑 BIOS 及数据机上的 PnP 功能．
启动 Windows 95，设定数据机，然後看看在你启动 Linux 後这些设定能否保留下来．如果不行的话，再来:
启动 Windows 95，设定数据机，然後使用暖开机启动 Linux 以便让设定能保留下来．你可以使用 loadlin 载入器来启动．
从 http://www.redhat.com/linux-info/pnp 取回 PnP 工具．
然後你就有个可用的数据机．

2.3. 一般多埠串列卡(附 8250/16450/16550A UART 晶片)

AST FourPort and clones (4 ports)
Accent Async-4 (4 ports)
Arnet Multiport-8 (8 ports)
Bell Technologies HUB6 (6 ports)
Boca BB-1004 (4 ports), BB-1008 (8 ports), BB-2016 (16 ports)
Boca IOAT66 (6 ports)
Boca 2by4 (4 serial ports, 2 parallel ports)
Computone ValuePort V4-ISA (AST FourPort compatible)
Digi PC/8 (8 ports)
GTEK BBS-550 (8 ports)
Longshine LCS-8880, Longshine LCS-8880+ (AST FourPort compatible)
Moxa C104, Moxa C104+ (AST FourPort compatible)
PC-COMM (4 ports)
Sealevel Systems COMM-2 (2 ports), COMM-4 (4 ports) and COMM-8 (8 ports)
SIIG I/O Expander 2S IO1812 (4 ports)
STB-4COM (4 ports)
Twincom ACI/550
Usenet Serial Board II (4 ports)

一般来说， Linux 能够支援所有使用 8250, 16450, 16550, 16550A（或与其相容）UART 晶片的串列卡，或者是能够摸拟上列 UARTs 之一的内接式数据机．

注意: BB-1004 以及 BB-1008，它们并不支援 DCD 及 RI 线路，因而无法让接受拨接的数据机使用．它们在其它用途上则表现正常．

2.4. 智慧型多埠串列卡

Comtrol RocketPort (36MHz ASIC; 4, 8, 16 or 32 ports)
contact: info@comtrol.com or http://www.comtrol.com
driver status: supported by Comtrol
driver location: ftp://tsx-11.mit.edu/pub/linux/packages/comtrol
Computone IntelliPort II (16MHz 80186; 4, 8, or 16 ports),
IntelliPort II EXpandable (20MHz 80186; 16 - 64 ports)
contact: Michael H. Warfield, mhw@wittsend.atl.ga.us
driver status: pre-ALPHA
Cyclades Cyclom-Y (Cirrus Logic CD1400 UARTs; 8 - 32 ports),
Cyclom-Z (25MHz MIPS R3000; 8 - 128 ports)
contact: sales@cyclades.com or http://www.cyclades.com
driver status: supported by Cyclades
driver location: ftp://ftp.cyclades.com/pub/cyclades and included in Linux kernel since version 1.1.75
Decision PCCOM8 (8 ports)
contact: pccom8@signum.se
driver location: ftp://ftp.signum.se/pub/pccom8
Digi PC/Xi (12.5MHz 80186; 4, 8, or 16 ports),
PC/Xe (12.5/16MHz 80186; 2, 4, or 8 ports),
PC/Xr (16MHz IDT3041; 4 or 8 ports),
PC/Xem (20MHz IDT3051; 8 - 64 ports)
contact: sales@dgii.com or http://www.dgii.com
driver status: supported by Digi
driver location: ftp://ftp.dgii.com/drivers/linux and included in Linux kernel since version 2.0
Digi COM/Xi (10MHz 80188; 4 or 8 ports)
contact: Simon Park, si@wimpol.demon.co.uk
driver status: ALPHA
note: Simon is often away from email for months at a time due to his job. Mark Hatle, fray@krypton.mankato.msus.edu has graciously volunteered to make the driver available if you need it. Mark is not maintaining or supporting the driver.
Equinox SuperSerial Technology (30MHz ASIC; 2 - 128 ports)
contact: sales@equinox.com or http://www.equinox.com
driver status: supported by Equinox
driver location: ftp://ftp.equinox.com/library/sst
GTEK Cyclone (16C654 UARTs; 6, 16 and 32 ports),
SmartCard (24MHz Dallas DS80C320; 8 ports),
BlackBoard-8A (16C654 UARTs; 8 ports),
PCSS (15/24MHz 8032; 8 ports)
contact: spot@gtek.com or http://www.gtek.com
driver status: supported by GTEK
driver location: ftp://ftp.gtek.com/pub
Hayes ESP (COM-bic; 1 - 8 ports)
contact: Andrew J. Robinson, arobinso@nyx.net or http://www.nyx.net/~arobinso
driver status: supported by author
driver location: http://www.nyx.net/~arobinso and included in Linux kernel since version 2.1.15
Maxpeed SS (Toshiba; 4, 8 and 16 ports)
contact: info@maxpeed.com or http://www.maxpeed.com
driver status: supported by Maxpeed
driver location: ftp://maxpeed.com/pub/ss
Moxa C218 (12MHz 80286; 8 ports),
Moxa C320 (40MHz TMS320; 8 - 32 ports)
contact: info@moxa.com.tw or http://www.moxa.com.tw
driver status: supported by Moxa
driver location: ftp://ftp.moxa.com.tw/drivers/c218-320/linux
SDL RISCom/8 (Cirrus Logic CD180; 8 ports)
contact: sales@sdlcomm.com or http://www.sdlcomm.com
driver status: supported by SDL
driver location: ftp://ftp.sdlcomm.com/pub/drivers
Specialix SIO (20MHz Zilog Z280; 4 - 32 ports),
XIO (25MHz Zilog Z280; 4 - 32 ports)
contact: Simon Allen, simonallen@cix.compulink.co.uk
driver status: BETA
driver location: ftp://sunsite.unc.edu/pub/Linux/kernel/patches/serial
Stallion EasyIO-4 (4 ports), EasyIO-8 (8 ports), and
EasyConnection (8 - 32 ports) - each with Cirrus Logic CD1400 UARTs,
Stallion (8MHz 80186 CPU; 8 or 16 ports),
Brumby (10/12 MHz 80186 CPU; 4, 8 or 16 ports),
ONboard (16MHz 80186 CPU; 4, 8, 12, 16 or 32 ports),
EasyConnection 8/64 (25MHz 80186 CPU; 8 - 64 ports)
contact: sales@stallion.com or http://www.stallion.com
driver status: supported by Stallion
driver location: ftp://ftp.stallion.com/drivers/ata5/Linux and included in linux kernel since 1.3.27

其中 Comtrol, Cyclades, Digi, 及 Stallion 的产品在 1995 年六月份的 Linux Journal 上有篇回顾文章．这篇文章可在 http://www.ssc.com/lj/issue14 找到．

2.5. 不支援的串列硬体
宣称``Winmodems''的数据机，例如 USR Sportster Winmodem 及 IBM Aptiva MWAVE， 无法在 Linux 上使用．这些数据机具有专门的设计需要特别的 Windows 驱动程式．避免使用这样的数据机．除此之外，基於相同理由也别使用需要 Rockwell RPI 驱动程式的数据机．

没有 Linux 所需驱动程式的智慧型串列埠也不能使用．


New Page 1

标题： ■ Linux Serial HOWTO 中译版 : 串列埠的名称是什麽?
姓名 ：Greg Hankins greg.
Email：hankins@cc.gatech.edu
地址 ：
转摘 ：http://member.netease.com/

返回

3. 串列埠的名称是什麽?
一个输出/入(I/O)埠是用来将资料送入电脑及从电脑取出的通路．有许多种类的输出/入埠，例如串列埠，平行埠，磁碟控制器，乙太网路卡等等．我们要处理的是串列埠，因为数据机及终端机是串列装置．每一个串列埠必须有一个输出/入位址，以及一个插断号码(IRQ)．有四个串列设备对应到 COM1 - COM4:

ttyS0 (COM1) address 0x3f8 IRQ 4
ttyS1 (COM2) address 0x2f8 IRQ 3
ttyS2 (COM3) address 0x3e8 IRQ 4
ttyS3 (COM4) address 0x2e8 IRQ 3

如果 Linux 启动时没有侦测到任何串列装置，请确定在编译核心时有加入串列支援．在这份文件中，我是以 ttyS0 参照 COM1，ttyS1 参照 COM2，以 ttyS2 参照 COM3 ，而以 ttyS3 参照 COM4．注意这些装置预设的 IRQ 是重叠的．你无法由这些预设值使用所有的串列埠，你必须重新指定不同的 IRQ．参见 我能使用超过两个的串列装置吗? 一节说明如何设定 IRQ．

某些安装方式会建立两个额外的设备，给你数据机使用的 /dev/modem 以及给你滑鼠使用的 /dev/mouse．它们都是链结到你在安装时所指定适当 /dev 里的设备的符号链结（除非你用的是汇流排滑鼠(bus mouse) ，那麽 /dev/mouse 将会指到汇流排滑鼠这个设备）．

已经有些关於使用 /dev/mouse 以及 /dev/modem 优缺点的讨论．我强烈地反对使用这些链结，如果你打算用你的数据机接受拨接的话，要是你使用了 /dev/modem 那麽你将会因为锁定档案(lock files)无法正确运作而遭遇到困难．如果你喜欢它们的话就用吧，但是要确定它们指向正确的设备．然而，如果你改变或除去这个连结，某些应用程式(例如 minicom)可能要重新设定．

3.1. 在 /dev 里的串列设备及主要和次要号码

/dev/ttyS0 major 4, minor 64 /dev/cua0 major 5, minor 64
/dev/ttyS1 major 4, minor 65 /dev/cua1 major 5, minor 65
/dev/ttyS2 major 4, minor 66 /dev/cua2 major 5, minor 66
/dev/ttyS3 major 4, minor 67 /dev/cua3 major 5, minor 67

要注意到所有的发行套件都应该已经正确地建立了这些设备．你可以用下法检查:
linux% ls -l /dev/cua*
linux% ls -l /dev/ttyS*

3.1.1. 在 /dev 中建立设备
如果你没有其中的一个设备，你必须自己用 mknod 指令建立它．例如，假定你需要建立 ttyS0 设备：

linux# mknod -m 666 /dev/cua0 c 5 64
linux# mknod -m 666 /dev/ttyS0 c 4 64

你也可以使用 MAKEDEV 这个指令稿，在 /dev 下应该会有．这简化了设备的建立．例如，如果你需要建立 ttyS0 设备则应该输入：
linux# cd /dev
linux# ./MAKEDEV ttyS0

这将会处理关於连线进来以及连线出去的设备之建立，并设定正确的权限．

3.2. 一般多埠板的注意事项
你的多埠板所使用的设备视你使用那一种多埠板而定．这些细节详细列在随附於 setserial 程式的 rc.serial 里面．如果你尝试使用多埠板的话我强烈建议你取得最新版本的 setserial．你可能会需要建立这些设备．无论是用 mknod 指令或是 MAKEDEV 指令稿都可以．多埠板所用设备是以加上 ``64 + 埠号'' 来建立的．所以，如果你想为 ttyS17 建立设备，你应该输入：

linux# mknod -m 666 /dev/cua17 c 5 81
linux# mknod -m 666 /dev/ttyS17 c 4 81

要注意到 ''64 + 17 = 81''．使用 MAKEDEV 指令稿的话，你应该输入：
linux# cd /dev
linux# ./MAKEDEV ttyS17

注意: SIIG 的 IO1812 手册上列出的 COM5-COM8 是错的．它们应该是 COM5=0x250, COM6=0x258, COM7=0x260, 以及 COM8=0x268．

注意: Digi PC/8 Interrupt Status Register 是 0x140．

注意: 对於 AST Fourport，你必须在 rc.serial 中指定 skip_test．

3.3. 智慧型多埠板的注意事项
阅读随附驱动程式而来的资讯．这些板使用了特殊的装置，而非标准的．这些资讯视你的硬体而定．


New Page 1

标题： ■ Linux Serial HOWTO 中译版 : 你应知道的有趣程式
姓名 ：Greg Hankins greg.
Email：hankins@cc.gatech.edu
地址 ：
转摘 ：http://member.netease.com/

返回

4. 你应知道的有趣程式
4.1. 什麽是 getty?
getty 是在你签入 Unix 机器的时候处理签入程序的一支程式．如果你希望你的 Linux 机器能够使用数据机拨入的话你会需要 getty．如果你只需要用数据机拨出的话你不需要用 getty．有三种经常配合 Linux 使用的版本: getty_ps, mgetty 以及 agetty．这些程式的语法是不同的，所以不论你用什麽 getty 请确定你使用了正确的语法．

4.1.1. 关於 getty_ps
大部分 Linux 安装套件都安装了 getty_ps 套件．它包含了两个程式: getty 是由主控台，以及终端机设备所使用，而 uugetty 则是由数据机所使用的．因为我本身是使用这个版本的 getty，所以在这份文件中我将会著重於此套件．

4.1.2. 关於 mgetty
mgetty 是一个在数据机上使用的 getty 版本．除了能够允许签入之外， mgetty 也提供传真(FAX)支援及自动 PPP 侦测．这套 mgetty 的文件写得相当地好，因而不需要再补充什麽．请参考它的安装说明．你也可以在 http://www.leo.org/~doering/mgetty/ 找到 mgetty 的最新资讯．

4.1.3. 关於 agetty
agetty 是第三种 getty 变型．它是 getty 一个简单的，完整的功能实作，适合用在虚拟主控台或终端机而非数据机上．

4.2. 什麽是 setserial?
setserial 是一支可以让你查看并修改串列设备各种属性的程式，包括它们所使用的埠位址，中断，以及其它串列埠选项．你可以藉由执行不加参数的 setserial 来获取版本讯息．

在你的 Linux 系统启动时，只有 ttyS{0-3} 会以预设的 IRQ 4 以及 3 来进行配置．所以，如果你有任何由其它界面卡提供的串列埠或是 ttyS{0-3} 使用非标准的硬体中断(IRQ)的话，你必须用这支程式来配置这些串列埠．要知道所有的选项请参考线上手册．


New Page 1

标题： ■ Linux Serial HOWTO 中译版 : 我怎麽用数据机拨号出去?
姓名 ：Greg Hankins greg.
Email：hankins@cc.gatech.edu
地址 ：
转摘 ：http://member.netease.com/

返回

5. 我怎麽用数据机拨号出去?
5.1. 硬体需求
首先，要确定你拥有正确的连接线．你的数据机需要一条直接的 (straight through) 连接线，没有任何跳线 (no pins crossed)．任何一家电脑商店都有．要确定接头的形式是对的．如果你使用的是 DB25 串列埠，它应该是公的 DB25 接头．把你的数据机接到其中一个串列埠上．如果你需要关於这个动作的辅助说明请参考你的数据机手册．

5.1.1. 内接式数据机注意事项
对於内接式数据机而言，你不需要连接线．内接式数据机不需要串列埠，它自己有内建一个．你只要配置一个没有被使用的硬体中断给它，并且配置该埠的输出入位址．如果你卡在某个问题上请参考你的数据机手册．同样，如果你需要关於选择中断以及位址上的帮助，参阅 我能使用超过两个的串列装置吗? 一节的说明．

在某些主机板上你必须关掉被数据机取代的串列埠以避免冲突．这可经由跳线或 BIOS 的设定来办到，视你的主机板而定．查阅你的主机板手册．

由於 IBM8514 视讯卡的一个错误，如果你想要将你的内接式数据机设在 ttyS3 的话可能会遭遇一些问题．如果 Linux 没有侦测到你设在 ttyS3 上的内接式数据机，你可以使用 setserial 程式来设定然後数据机将会正常运作．设在 ttyS{0-2} 上的内接式数据机在侦测上应该不会有任何问题．由於此视讯卡的错误 Linux 在 ttyS3 没有任何自动侦测的动作．

5.2. 与你的数据机交谈
在你使用复杂的通讯程式如 SLIP 或 PPP 之前先以 kermit 或其它简单的通讯程式来测试这些设定．你可以从 http://www.columbia.edu/kermit/ 以及映射节点上找到最新的 kermit 版本．例如，要是你的数据机设在 ttyS3 上，而且可以接受 115200 bps 的话，你可以这样做:

linux# kermit
C-Kermit 6.0.192, 6 Sep 96, for Linux
Copyright (C) 1985, 1996,
Trustees of Columbia University in the City of New York.
Default file-transfer mode is BINARY
Type ? or HELP for help.
C-Kermit>set line /dev/ttyS3
C-Kermit>set carrier-watch off
C-Kermit>set speed 115200
/dev/ttyS3, 115200 bps
C-Kermit>c
Connecting to /dev/ttyS3, speed 115200.
The escape character is Ctrl-\ (ASCII 28, FS)
Type the escape character followed by C to get back,
or followed by ? to see other options.
ATE1Q0V1 ; 这是你键入的并按下 Enter 键
OK ; 数据机应该回应这个

如果你的数据机对 AT 指令群有回应，那麽你可以假定你的数据机在 Linux 这一端能正确运作．现在试著拨给另一台数据机:

ATDT7654321

其中 7654321 是一个电话号码．如果你的是脉冲线路(pulse line)的话用 ATDP 而不是 ATDT．如果可以拨得出去，你的数据机就可正常运作．

回到 kermit 的提示符号下，按住 Ctrl 键，按下 \ (backslash) 录，然後放开 Ctrl 录，再按下 C 键:

Ctrl-\-C
(Back at linux)
C-Kermit>quit
linux#

这个不过是用"手动"方式的拨号测试．正常的方法是让 kermit 用它内建的数据机资料库自动为你拨号，例如，使用 US Robotics (USR) modem:

linux# kermit
C-Kermit 6.0.192, 6 Sep 1997, for Linux
Copyright (C) 1985, 1996,
Trustees of Columbia University in the City of New York.
Default file-transfer mode is BINARY
Type ? or HELP for help
C-Kermit>set modem type usr ; 选择数据机型式
C-Kermit>set line /dev/ttyS3 ; 选择通讯装置
C-Kermit>set speed 115200 ; 设定通讯速度
C-Kermit>dial 7654321 ; 拨号
Number: 7654321
Device=/dev/ttyS3, modem=usr, speed=115200
Call completed.<BEEP>
Connecting to /dev/ttyS3, speed 115200
The escape character is Ctrl-\ (ASCII 28, FS).
Type the escape character followed by C to get back,
or followed by ? to see other options.

Welcome to ...

login:

如果你需要一些指引，查阅有关 通讯软体 一节说明．

当你用你的数据机拨号出去时，将你的数据机设到它所能支援的最高速度． Linux 的 libc 5.x 版以上已经支援到 115200 bps． libc 通常放在 /lib，因此到那里看一下你用什麽版本．如果 Linux 无法认得 57600 或 115200 bps，那麽你必须用 setserial 程式来将你的串列埠设到更高的速度．关於要怎麽设定参阅 如何将我的串列埠设定为更高速度? 该节说明．然後在通讯程式里将速度设到 38400 bps．

5.3. 拨出用的数据机配置
只要拨号出去的话，你可以任意以你想要的方式配置你的数据机．如果你计画用你的数据机来接受拨接，那麽你必须将你的数据机配置成与你想要执行的 getty 在相同速度设定下．所以，如果你想要在 38400 bps 的速度下执行 getty 的话，在配置你数据机的时候将速度设成 38400 bps．这样做是为了避免你的电脑与数据机之间的速度无法配合．一般来说，开启错误校正及硬体流量控制的出厂设定值是最适合拨出用的数据机，这些设定值可查阅你的数据机手册．

5.4. 硬体流量控制
如果你的数据机支援硬体流量控制(RTS/CTS)的话， 我强烈地建议你去使用它．这对於支援资料压缩的数据机将格外重要．首先，你必须在串列埠本身上面启动 RTS/CTS 流量控制功能．这最好是在启动系统的时候做，像是放在 /etc/rc.d/rc.local 或是 /etc/rc.d/rc.serial 里面．要确定这些档案会被主要的 rc.sysinit 档案执行！你需要对每一个你想要启动硬体流量控制的串列埠执行下列操作：

stty crtscts < /dev/ttyS3

你也必须在你的数据机上启动 RTC/CTS 流量控制．要怎麽做请参考你的数据机手册，因为这在不同的数据机制造商之间是不同的．如果你的数据机支援设定储存的话则要确定将配置存入你的数据机．


New Page 1

标题： ■ Linux Serial HOWTO 中译版 : 我要怎麽样用数据机以 getty_ps 拨入及拨出?
姓名 ：Greg Hankins greg.
Email：hankins@cc.gatech.edu
地址 ：
转摘 ：http://member.netease.com/

返回

6. 我要怎麽样用数据机以 getty_ps 拨入及拨出?
让你的数据机能够正确地拨号出去．如果你还没有读过 我怎麽用数据机拨号出去 一节的话现在去读！它包含有非常重要的设定资讯．如果你只想用数据机来拨出的话你不需要读此节．

6.1. 拨入及拨出的数据机配置
要用来接受拨接以及拨号出去的话，那麽你必须确实地设定你的数据机（再一次对你的数据机使用 AT 指令群）：

E1 本地回应指令
Q0 回报结果回应
V1 开启冗长模式
S0=0 不要接听 (uugetty 以 WAITFOR 选项来处理)

如果你没有正确地设定，放在你配置档里的起始(INIT)字串可能会失败，因而停住整个程序．但是，下面有更多配置档的选项...
&C1 DCD 只有在连线以後才开启
&S0 DSR 永远为开启
DTR 开启/关闭 重置数据机（是数据机制造商而定 - RTFM)

这些会影响你数据机有关开始以及结束拨号的动作．

如果你的数据机不支援储存设定，你可以透过在你配置档里的起始字串来设定这些东西．参阅下面所述．有一些数据机是以 DIP 开关来影响暂存器的设定，也要确定这些设定是正确的．

我已经开始著手收集不同种类数据机的设定．到目前为止，我还只有它们的一小部分，如果你想要寄送给我你目前所用配置，非常欢迎! 你可以从这些取得设些设定: ftp://ftp.cc.gatech.edu/pub/people/gregh/modem-configs．

注意: 为了让我的 USR Courier V.34 数据机在 DTR 讯号掉下去後正常地重置，我必须设定 &D2 及 S13=1(这是设定暂存器 S13 的 bit 0)．这确定能在 USR Sportster V.34 上运作正常．

注意: 某些 Supra 数据机处理 DCD 讯号的方式异於其它的数据机．如果你在用 Supra 数据机，试著设定为 &C0 而不是 &C1．你也必须设定 &D2 使之正常地处理 DTR 讯号．

6.2. 安装 getty_ps
从 ftp://sunsite.unc.edu/pub/Linux/system/serial 最新的版本．特别地，如果你想使用高速通讯(57600 或 115200 bps)，你必须取得 2.0.7j 或以後的版本．你也必须有 libc 5.x 或之後的版本．

依照预设值，getty_ps 将会照 Linux 的档案系统标准(FSSTND, File System Standard)来配置，这个意思是二进位码将会放在 /sbin 下，而配置档将会以 /etc/conf.{uu}getty.ttySN 来命名．这点并不能从文件叙述中找到！它也会假定 lock files 将得要放到 /var/lock 目录里．要确定你有 /var/lock 这个目录．

如果你不想依照 FSSTND 的话，二进位码将会放到 /etc 里面，而配置档将会放到 /etc/default/{uu}getty.ttySN 里面，而 lock files 则将会放到 /usr/spool/uucp 里面．如果你有使用 UUCP 的话那麽我建议这样做，因为如果你把 lock files 搬到 UUCP 无法找到的地方去那麽它将会出问题的．

getty_ps 也可使用 syslogd 来记录讯息．如果你目前没有执行它的话，参阅 syslogd(1) 以及 syslog.conf(5) 的线上手册来设定 syslogd．讯息会优先以 LOG_AUTH 记录，错误使用 LOG_ERR 记录，而除错使用 LOG_DEBUG．如果你不想使用 syslogd 的话那麽你可以编辑在 getty_ps 原始档案里的 tune.h 用一个记录档来取代，预设档名为 /var/adm/getty.log．

决定好是否要依照 FSSTND 以及使用 syslog．你也可以选择两者的组合．编辑 Makefile，tune.h 以及 config.h 来反应你所作的决定．然後，根据套件里的说明编译及安装．

从现在起，所有谈到 getty 的地方都是指 getty_ps 而言．谈到 uugetty 则是指 getty_ps 套件里的 uugetty 而言．这些指令在 mgetty 或 agetty 上将不能运作．

6.3. 设定 uugetty
为了要能从你的数据机拨入及拨出，我们想要用 uugetty．uugetty 执行很重要的 lock file 检查．如果没有的话更新 /etc/gettydefs 以便为数据机增加项目(注意到这里的项目互相参考，它们并非固定速度 - 每个项目之间的空白行是必要的):

# Modem entries
115200# B115200 CS8 # B115200 SANE -ISTRIP HUPCL #@S @L @B login: #57600

57600# B57600 CS8 # B57600 SANE -ISTRIP HUPCL #@S @L @B login: #38400

38400# B38400 CS8 # B38400 SANE -ISTRIP HUPCL #@S @L @B login: #19200

19200# B19200 CS8 # B19200 SANE -ISTRIP HUPCL #@S @L @B login: #9600

9600# B9600 CS8 # B9600 SANE -ISTRIP HUPCL #@S @L @B login: #2400

2400# B2400 CS8 # B2400 SANE -ISTRIP HUPCL #@S @L @B login: #115200

如果你有 9600 bps 或更快且具资料压缩功能的数据机，你可以锁定你的串列埠速度而让数据机去处理传输的其它速度．然後，不像上面在 /etc/gettydefs 里的一连串列表，只需为数据机加上一行，例如:

# 115200 fixed speed
F115200# B115200 CS8 # B115200 SANE -ISTRIP HUPCL #@S @L @B login: #F115200

如果你将你的数据机设成 RTS/CTS 执行硬体流量控制的话，那麽你可以将 CRTSCTS 加到这些项目里：

# 115200 fixed speed with hardware flow control
F115200# B115200 CS8 CRTSCTS # B115200 SANE -ISTRIP HUPCL CRTSCTS #@S @L @B login: #F115200

如果你要的话，你可以让 uugetty 在签入时的标题上印出些有趣的东西．在我的例子里，我印出系统名称，串列线路，以及目前的每秒位元传输率．你可以加入其它的东西：

@B 目前的每秒位元传输率(bps, 在看到 @B 时估计的)．
@D 现在日期, 格式 MM/DD/YY．
@L getty 所连接的串列线路．
@S 系统名称．
@T 现在时间，格式 HH:MM:SS (24 小时制)．
@U 目前签入的使用者．这是在 /etc/utmp 档中非空 ut_name 栏位项目的计数值．
@V 版本值，在预设档中给定的．
如果要显示 '@' 符号的话，用 '\@' 或 '@@'．

接下来，确定你数据机所接的串列埠有输出及输入的设备．如果你的数据机设在 ttyS3 的话你将会需要 /dev/cua3，以及 /dev/ttyS3 这两个设备．如果你没有正确的设备，参阅 在 /dev 中建立设备 该节说明如何建立设备，并且建立这些设备．如果你希望在你的 uugetty 正在监视这个串列埠是否有人签入时还能够用数据机拨出的话，用 /dev/cuaN 设备而不要用 /dev/ttySN．

当你正在编辑 /etc/gettydefs 时，你可以这样来检查它的语法是否正确:

linux# getty -c /etc/gettydefs

6.4. 自订 uugetty
你有许多参数可以用来改变你所拥有的每一个埠．这些是以分别对每一个埠使用不同配置档的方式来实作的．这个 /etc/conf.uugetty 档案会被所有的 uugetty 行程所使用，而 /etc/conf.uugetty.ttySN 只由那个埠使用．预设的配置档□例可以在 getty_ps 的原始档案里找到，这在绝大部分的 Linux 发行套件里面都会有．因为篇幅的考量，没有把它们列在这里．要注意的是如果你用的是比较旧的 getty 版本(比 2.0.7e 版还旧)，或者是你没有依照 FSSTND 的话，那麽预设的档案将会是 /etc/default/uugetty.ttySN．我的 /etc/conf.uugetty.ttyS3 看起来像这样:

# sample uugetty configuration file for a Hayes compatible modem to allow
# incoming modem connections
#
# alternate lock file to check... if this lock file exists, then uugetty is
# restarted so that the modem is re-initialized
ALTLOCK=cua3
ALTLINE=cua3
# line to initialize
INITLINE=cua3
# timeout to disconnect if idle...
TIMEOUT=60
# modem initialization string...
# format: <expect> <send> ... (chat sequence)
INIT="" AT\r OK\r\n
WAITFOR=RING
CONNECT="" ATA\r CONNECT\s\A
# this line sets the time to delay before sending the login banner
DELAY=1
#DEBUG=010

将下面那一行加到你的 /etc/inittab 里去，那麽 uugetty 就会在你的串列埠上执行(用你环境的正确资讯来取代 - 配置档的位置，串列埠名，速度，及预设终端机形式):

S3:456:respawn:/sbin/uugetty -d /etc/default/uugetty.ttyS3 ttyS3 F115200 vt100

重新启动 init:
linux# init q

对於在你 /etc/inittab 里面的速度参数，你会希望使用你数据机所能支援的最高每秒位元传输率．

现在 Linux 将会随时监视你的串列埠是否有连线．从别的地方拨号并签入你的 Linux 机器．

uugetty 还有更多的选项，参阅 getty (lm) 线上手册获得更完整的叙述．别的不提它还有排程(scheduling)的功能，以及回拨的能力．


New Page 1

标题： ■ Linux Serial HOWTO 中译版 : 我怎麽设定终端机连线到我的 PC 上?
姓名 ：Greg Hankins greg.
Email：hankins@cc.gatech.edu
地址 ：
转摘 ：http://member.netease.com/

返回

7. 我怎麽设定终端机连线到我的 PC 上?
本节的指示能让终端机及其它电脑连上你的 Linux 机器的串列埠．

7.1. 硬体需求
要确定你有一条正确的连接线．在电脑商店买的 null modem 连接线就可以胜任．但是它一定得要是一条 null modem 线！许多的电脑站将这类的连接线说成是串列印表接线．确定你是使用你的串列埠，公的 DB25 或是 DB9 接头，而不是你的并列埠(母的 DB25 或 centronics)．

对 DB-25 接头而言，至少你得要有:

PC male DB25 Terminal DB25
TxD Transmit Data 2 --> 3 RxD Receive Data
RxD Receive Data 3 <-- 2 TxD Transmit Data
SG Signal Ground 7 --- 7 SG Signal Ground

如果你想要拥有流量控制以及硬体连线协商(handshaking)的话，你必须要有一条完整的 null modem 接线：

PC male DB25 Terminal DB25
TxD Transmit Data 2 --> 3 RxD Receive Data
RxD Receive Data 3 <-- 2 TxD Transmit Data
RTS Request To Send 4 --> 5 CTS Clear To Send
CTS Clear To Send 5 <-- 4 RTS Request To Send
DSR Data Set Ready 6
|
DCD Carrier Detect 8 <-- 20 DTR Data Terminal Ready
SG Signal Ground 7 --- 7 SG Signal Ground
6 DSR Data Set Ready
|
DTR Data Terminal Ready 20 --> 8 DCD Carrier Detect

如果你的串列埠上有一个 DB9 的接头，试试看下面这个:

PC DB9 Terminal DB25
RxD Receive Data 2 <-- 2 TxD Transmit Data
TxD Transmit Data 3 --> 3 RxD Receive Data
SG Signal Ground 5 --- 7 SG Signal Ground

或者，一条完整的 DB9 对 DB25 null modem 连接线：

PC DB9 Terminal DB25
RxD Receive Data 2 <-- 2 TxD Transmit Data
TxD Transmit Data 3 --> 3 RxD Receive Data
6 DSR Data Set Ready
|
DTR Data Terminal Ready 4 --> 8 DCD Carrier Detect
GND Signal Ground 5 --- 7 GND Signal Ground
DCD Carrier Detect 1
|
DSR Data Set Ready 6 <-- 20 DTR Data Terminal Ready
RTS Request To Send 7 --> 5 CTS Clear To Send
CTS Clear To Send 8 <-- 4 RTS Request To Send
(RI Ring Indicator 9 not needed)

(没错! 第二支及第三支脚在 DB9 连接头上确实和 DB25 接头意义相反!)

如果使用的并不是完整的 null modem 连接线的话，你可能得要做下面这个欺骗的技巧: 在你电脑这边的接头上，把 RTS 跟 CTS 接在一起，而且也把 DSR, DCD 以及 DTR 接在一起．用这个方法，当电脑要求一个正确的硬体连线协商信号时，它就可以得到(从它自己发出的)．

现在你已经有正确的连接线，把你的终端机连接到你的电脑上．如果你可以的话，告诉你的终端机忽略数据机控制信号．试试看用 9600 bps, 8 data bits, 1 stop bit, no parity bits 来设定终端机．

7.2. 设定 getty
在 /etc/gettydefs 里面增加一个给 getty 用来连接你终端机项目，如果还没有这项的话:

# 38400 bps Dumb Terminal entry
DT38400# B38400 CS8 CLOCAL # B38400 SANE -ISTRIP CLOCAL #@S @L login: #DT38400

# 19200 bps Dumb Terminal entry
DT19200# B19200 CS8 CLOCAL # B19200 SANE -ISTRIP CLOCAL #@S @L login: #DT19200

# 9600 bps Dumb Terminal entry
DT9600# B9600 CS8 CLOCAL # B9600 SANE -ISTRIP CLOCAL #@S @L login: #DT9600

如果你要的话，你可以让 getty 在签入的标题上印出一些有趣的东西．在我的例子里，我印出系统名称以及串列线路．你可以加入其它的东西:

@B 目前的每秒位元传输率(bps, 在看到 @B 时估计的)．
@D 现在日期, 格式 MM/DD/YY．
@L getty 所连接的串列线路．
@S 系统名称．
@T 现在时间，格式 HH:MM:SS (24 小时制)．
@U 目前签入的使用者．这是在 /etc/utmp 档中非空 ut_name 栏位项目的计数值．
@V 版本值，在预设档中给定的．
如果要显示 '@' 符号的话，用 '\@' 或 '@@'．

当你正在编辑 /etc/gettydefs 时，你可以这样来检查它的语法是否正确:

linux# getty -c /etc/gettydefs

确定没有 getty 或 uugetty 的设定档(/etc/default/{uu}getty.ttySN 或 /etc/conf.{uu}getty.ttySN)在你的终端机连接的串列埠上，因为这也许会干扰到在终端机上执行的 getty．如果有的话请移除它．

编辑你的 /etc/inittab 让 getty 在你的串列埠上执行(用你环境的正确资讯来取代 - 配置档的位置，串列埠名，速度，及预设终端机形式):

S1:456:respawn:/sbin/getty ttyS1 DT9600 vt100

重新起始 init:
linux# init q

现在你应该会在你的终端机上看到签入提示．也许你得按返回键(return)几次让终端机注意到．

7.3. 将 PC 设定成终端机的注意事项
许多人将其它 PC 设定成终端机连接到 Linux 机器上．例如，旧的 8088 或是 286 PC 非常适合这个用途．你需要的只是一张包含适合让你的终端机-个人电脑 (Terminal-PC) 使用的 DOS 磁片，以及让你的终端机-个人电脑执行的通讯程式． kermit 在这个用途上表现得非常好．你可以在这台机器 http://www.columbia.edu/kermit/ 上找到几乎可以让任何现存的作业系统使用的已编译的 kermit 版本．其它流行的 DOS 通讯程式像是 telix 以及 procomm 也将会有一样好的表现．要确定输入正确的串列埠资讯到你终端机-个人电脑的通讯设定里去．


New Page 1

标题： ■ Linux Serial HOWTO 中译版 : 8,9,10
姓名 ：Greg Hankins greg.
Email：hankins@cc.gatech.edu
地址 ：
转摘 ：http://member.netease.com/

返回

8. 我能使用超过两个的串列装置吗?
你不需要阅读这一节，除非你想要使用三个或更多的串列设备...(假定你没有多埠卡的话)．

假如你有另一个多馀的串列埠，是的，你可以．你可以使用的串列埠数目受限於我们必须使用的硬体中断要求以及埠输出入位址的数目．这并不是 Linux 的限制，而是 PC 汇流排的限制．必须指定中断跟位址给每一个串列设备．串列设备可以是串列埠，内接式数据机或是多埠卡．

多埠卡是为了拥有许多个串列埠来分享卡上所有串列埠所使用的相同 IRQ 而特别设计的． Linux 对卡上的每一个埠使用不同的输出入位址以便从它们获取资料．

8.1. 选择串列设备的中断位址
你的 PC 一般会将 ttyS0 以及 ttyS2 设在 IRQ 4 而将 ttyS1 以及 ttyS3 设在 IRQ 3．经由检视 /proc/interrupts 你可以知道那些 IRQs 正被使用．要使用两个以上的串列设备的话，你必须重新指定一个中断．一个好选择是从你的并列埠那边重新指定一个中断．你的 PC 一般会设定 IRQ5 或是 IRQ7 当你的并列埠，但是很少人会使用两个并列埠．你可以重新指定其中一个中断给串列设备，并而仍然能顺利地使用一个并列埠．你将会需要用到 setserial 程式来做这件事．此外，你必须调整你板子上的跳接设定(Jumpers)，查看你主机板的说明文件．跳接你想要给每个埠使用的 IRQ．

你将得要做些设定让每个串列设备都有一个，并且是唯一的一个中断．这里是我在 /etc/rc.d/rc.local 里所用的设定 - 你应该在启动系统时的某个地方做这件事．

/sbin/setserial /dev/ttyS0 irq 3 # my serial mouse
/sbin/setserial /dev/ttyS1 irq 4 # my Wyse dumb terminal
/sbin/setserial /dev/ttyS2 irq 5 # my Zoom modem
/sbin/setserial /dev/ttyS3 irq 9 # my USR modem

标准的 IRQ 指定:

IRQ 0 Timer channel 0
IRQ 1 Keyboard
IRQ 2 Cascade for controller 2
IRQ 3 Serial port 2
IRQ 4 Serial port 1
IRQ 5 Parallel port 2
IRQ 6 Floppy diskette
IRQ 7 Parallel port 1
IRQ 8 Real-time clock
IRQ 9 Redirected to IRQ2
IRQ 10 not assigned
IRQ 11 not assigned
IRQ 12 not assigned
IRQ 13 Math coprocessor
IRQ 14 Hard disk controller 1
IRQ 15 Hard disk controller 2

在选择中断时真的没有什麽正确的．只要确定它不是已经被主机板，或是其它界面卡所使用． 2, 3, 4, 5 或是 7 是好选择．``not assigned''的意思是目前并没有什麽东西在标准情况下会固定使用这些硬体中断要求．也要注意到 IRQ 2 跟 IRQ 9 是一样的．你可以称它为 2 或 9，串列驱动程式非常了解这一点．如果你有一块 16-bit 汇流排连接头的串列卡，你也可以使用 IRQ 10, 11, 12 或 15．

只要确定你使用的并非是 IRQ 0, 1, 6, 8, 13 或是 14! 它们是由你的主机板所使用的．如果你拿走她的 IRQs 的话，会使得她很不高兴．完成之後，再次检查 /proc/interrupts 以确定没有冲突发生．

8.2. 设定串列设备的位址
接下来，你必须设埠位址．查看你主机板手册的跳接设定．就像中断，每个位址只能有一个串列设备．你的埠通常会配置成像下面这样：

ttyS0 address 0x3f8
ttyS1 address 0x2f8
ttyS2 address 0x3e8
ttyS3 address 0x2e8

选择你想要给每一个串列设备使用的位址并且依此来设定跳接．我将我的数据机设在 ttyS3 ，我的滑鼠在 ttyS0，而我的终端机在 ttyS2．

当你重新启动时， Linux 应该会在你所设定的位址看到你的串列埠． Linux 所看到的 IRQ 可能不会跟你跳接设定的相符．不必担心这一点． Linux 在它启动的时候并没有做任何的 IRQ 侦测，因为 IRQ 侦测是危险并且有可能被欺骗的．使用 setserial 来告诉 Linux 那个埠使用那个 IRQ．你也可以检查 /proc/ioports 来看看在 Linux 启动後那些输出输入埠位址被使用．

--------------------------------------------------------------------------------9. 我怎样将我的串列埠设到较高的速度? 我的数据机又应该使用什麽样的速度?
这一节应该可以帮你找出当你透过通讯程式，或是 getty 程式使用你的数据机时应该使用什麽速度．

如果你所有的是比 9600 bps (V.32) 数据机还要慢的东西，将你的速度设到你的数据机所能支援的最高速度．例如 300 (V.21/Bell 103), 1200 (V.22/Bell 212A), 或 2400 bps (V.22bis)．
如果你有 9600 bps (V.32) 的数据机，并且支援 V.42bis 资料压缩，使用 38400 来当作你的速度． V.42bis 压缩具有 4:1 的理论值，也就是``4 * 9600 = 38400''．
如果你有 14400 bps (V.32bis) 的数据机，并且支援 V.42bis 资料压缩功能的话，使用 setserial 程式，加上 spd_hi 旗标将你的串列埠配置成使用 57600 bps (4 * 14400 = 57600) 的速度．
如果你有 28800 或 33600 bps (V.FC 或是 V.34) 的数据机则使用 spd_vhi 旗标 (4 * 28800 = 115200)．

然後，在你的通讯程式，或是 /etc/inittab 里使用 38400 当作速度设定．这是现在你能设的最高速度．要确定你有 16550A 通用非同步接收转换器(UART)．

如果你的 libc 版本至少是 5.x，那麽会有叫做 57600 及 115200 的速度． libc 放在 /lib，所以在那里看一下你用的版本是什麽．如果你的应用程式已经编译以取用此优点，你可以直接使用它们(不必用 setserial)，许多的套件都已经有了，因此如果你有最近版本的 Linux 套件，最好的方法就是尝试使用这些更高的速度．

先在命令列下用 setserial 指令测试，然後在你确定它们可以运作後，将你所作的修改放进 /etc/rc.d/rc.serial 或 /etc/rc.d/rc.local 以便在系统启动执行它们．在我的 /etc/rc.d/rc.local 里，我是这样设定我的 ttyS3 到 115200 bps 的:

/sbin/setserial /dev/ttyS3 spd_vhi

确定你以合法的路径使用 setserial，以及合法的装置名称．你可以下法检查一个串列埠的设定:

setserial -a /dev/ttyS3

10. 通讯程式及工具
这里有一个通讯程式的列表，如果你所使用的发行套件里头并没有的话，这些都可以在一般的 FTP 站找到．

ecu - 一套通讯程式
C-Kermit - 可携的，可程序化的串列及 TCP/IP 通讯程式，包含传档及字完转换功能
minicom - 类似 telix 的通讯程式
procomm - 包含 zmodem，类似 procomm 的通讯程式
seyon - 以 X 为基础环境的通讯程式
xc - xcomm 通讯套件
其它有用的程式是 term 及 SLiRP．它们提供使用 shell 帐号的 TCP/IP 功能．
screen 是另一个多区段作业(multi-session)的程式．这个程式就像的动作就像虚拟控制台．
callback 这支程式会使你的数据机回拨给你．
mgetty+fax 处理传真事务，并且提供一个不同的 getty．
ZyXEL 是 ZyXEL U-1496 数据机的控制程式．它处理接受拨接，拨号，回拨保密，传真，以及语音信箱功能．
SLIP 及 PPP 的软体可在 ftp://sunsite.unc.edu/pub/Linux/system/network/serial 找到．
其它东西可以在 ftp://sunsite.unc.edu/pub/Linux/system/serial 以及 ftp://sunsite.unc.edu/pub/Linux/apps/serialcomm 或许多的映射节点之一找到．这些是保留所有串列程式的目录．


New Page 1

标题： ■ Linux Serial HOWTO 中译版 : 11,12
姓名 ：Greg Hankins greg.
Email：hankins@cc.gatech.edu
地址 ：
转摘 ：http://member.netease.com/

返回

11. 串列使用秘诀
这里有一些你可能发现很有用的串列□诀...

11.1. kermit 以及 zmodem
要在 kermit 下使用 zmodem 的话，将下列内容加到你的 .kermrc 里去:

define rz !rz < /dev/ttyS3 > /dev/ttyS3
define sz !sz \%0 > /dev/ttyS3 < /dev/ttyS3

要确定正确地放入你数据所在的串列埠．然後，要使用的话，只要在 kermit 的提示符号下键入 rz 或 sz <档名> 即可．

11.2. 自动设定终端机型式
要在当你签入的时候自动设定你的终端机形式的话，把终端机的形式加到 /etc/inittab 的项目里去．如果我有一台 vt100 终端机在 ttyS1 上 ，我要对 getty 指令加上 ``vt100'':

S1:456:respawn:/sbin/getty ttyS1 DT9600 vt100

你也可以使用 tset，可以在你签入的时候建立终端机的特性，而且不需要依赖任何的预设值．

11.3. 在串列连线下的彩色 ls
如果 ls 因为彩色特性而扰乱了你的终端机模拟，把它关掉． ls --color 以及 ls --colour 都使用彩色特性．有些安装方式使得 ls 预设为使用彩色．检查 /etc/profile 以及 /etc/csh.cshrc 里的 ls 别名．如果你不想修改系统预设值的话，你也可以设给 ls 别名 ls --no-color．

11.4. 从终端机所连接的印表机进行列印
有一个叫做 vtprint 的程式可以做得到，在 ftp://ftp.sdsu.edu/pub/vtprint 及 http://www.sdsu.edu/~garrett 可取得．

另外一支叫 xprt 的程式也能做到．它可在 ftp://sunsite.unc.edu/pub/Linux/system/printing 找到．

11.5. Linux 能不能够自动地配置串列设备?
可以．要让 Linux 在启动的时候自动地侦测并且设定串列设备的话，把这一行:

/sbin/setserial /dev/ttyS3 auto_irq skip_test autoconfig

加到你的 /etc/rc.d/rc.local 或是 /etc/rc.d/rc.serial 档案里面．对每一个你希望自动配置的串列埠都要做．要确定所给的是一个真正存在於你电脑上的设备名称．

11.5.1. 多埠卡的注意事项
对於卡的位址，以及 IRQs 查阅 setserial 程式随附的 rc.serial．它有很多关於多埠卡的细节，包括输出入位址以及设备名称．

11.6. 使用串列控制台
在第三十六期的 Linux Journal 在 http://www.ssc.com/lj/issue36/index.html 有篇文章解释如何使用串列控制台(serial console)．不幸的是，寄电子邮件给作者都被退回．我希望这篇文章会很快地上述 URL 的 Linux Journal 网站中．

11.7. 更高的串列流量
如果在一部使用 (E)IDE 磁碟机的系统上你发现流量很慢而且串列埠常溢满，你可以取得 hdparm．这是一个可以修改 (E)IDE 参数，包含让一磁碟 IRQ 动作期间其它 IRQs 仍可工作．这会改善反应速度并帮助消除溢满．确定小心地读过了线上手册，因为某些磁碟/控制卡组合不喜欢它并且可能损毁档案系统．

也可以看一下一个叫 irqtune 的工具，可以改变一个装置 IRQ 的优先顺序，例如你数据机所在的串列埠．这也可能改善你系统的串列流量． irqtune 的常见问题解答(FAQ)可在 http://www.best.com/~cae/irqtune 找到．

12. 更进一步...
这一节并不需要阅读，但是可能带给你一些对於 Unix 以及电子通讯世界更进一步的了解．

12.1. 什麽是锁定档案(lock files)?
Lock files 只是单纯的一个档案用来表示某个特定的设备正在使用中．它们保存在 /usr/spool/uucp 或是 /var/lock 里面． Linux 的 lock files 名字都是 LCK..name，其中的 name 不是设备名称就是一个 UUCP 节点名称．有些程序建立这些 locks 以便让它们自己可以独占该设备的存取权．例如如果你从你的数据机拨号出去，将会出现一个 lock 告诉其它程序现在已经有人正在使用数据机． Lock files 里面主要是包含锁住该设备的程序的行程号码(PID)．大部份的程式会查阅 lock，然後检查行程表(process table)中锁定该设备的行程来试著决定这个 lock 是否仍然有效．如果发现这个 lock 是有效的话，这个程式(应该)要结束．如果不是，某些程式会删除过时的 lock，然後使用该设备，并在行程执行时建立他们自己的 lock．其它的程式就只好结束并告诉你该设备正在使用中．

12.2. ``baud'' 对 ``bps''
``baud'' 跟 ``bps'' 可能是电脑/电子通讯这个领域里最常被错用的术语之一．当它们事实上并不相同的时候，很多人仍交替使用这些术语．

鲍率(baud)
鲍率是每秒钟数据机(调变解调器，modulator-demodulator)送出多少次讯号改变的度量．例如，鲍率为 1200 的含意是信号每隔 833 微秒(microsecond)即改变一次．普遍的鲍率有 50, 75, 110, 300, 600, 1200 以及 2400．大部份的高速数据机所使用的鲍率为 2400．因为语音级(voice-grade)电话线路的频宽限制，超过 2400 的鲍率很难达的到，而只能在非常纯净的电话线品质下才能运作． ``baud''一词在 Emile Baudot 之後才有，他是非同步电报印表机(asynchronous telegraph printer)的发明者．

每秒传输位元(bps)
每秒位元传输率是每秒钟传输多少位元的度量．普遍每秒位元传输率有 50, 75, 110, 300, 1200, 2400, 4800, 9600, ... 115200．在使用 V.42bis 压缩(压缩最大率 4:1)的数据机下，理论上每秒位元传输率可以高达 115200．这是许多人在错用 ``baud'' 这个字时所指的意思．

所以，如果高速数据机以 2400 baud 运作，它们如何能够传送 14400 bps? 数据机对每个 baud 编码来表示某一数量的位元而使得 bps 能大於 baud．这样一来，当二个或更多位元编码成一个 baud 的时候，bps 就会超越 baud．如果你的数据机是以 14400 bps 连线的话，它将会以 2400 baud 的速度每个 baud 传送六个位元．

这个混淆是怎麽样开始的? 嗯，回到今天的低速数据机还是昨天的高速数据机那个时代，每秒位元传输率跟信号改变率实际上是完全相等的．每个 bit 编码成一个 baud．人们交替使用 bps 以及 baud 是因为它们的数字相同．例如一台 300 bps 的数据机其信号改变率也是 300．当高速数据机普及後一切都改变了，而且每秒位元传输率超过了信号改变率．

12.3. 什麽是 UARTs? 它们如何影响效能?
UARTs (通用非同步接收转换器，Universal Asyncronous Receiver Transmitter)是你 PC 串列卡上的晶片．它们的功用是把资料转成位元，将这些位元送上串列线路，然後在另一端重新建立资料． UARTs 是以位元组为单位处理资料，很方便地也是美国标准交换码(ASCII)的字元大小．

假定是你有一台连接到你 PC 的终端机．当你键入一个字元时，终端机把它交给它的转换器(也是 UART 的一种)．该转换器以指定的速率把这个位元组送到串列线路上，每次一个位元．在 PC 这一端，接收位元的 UART 拿走所有的位元，然後重新组成位元组并且放到缓冲区里去．

有两种不同的 UARTs 类型．你可能有听过愚蠢的(dumb)UARTs - 8250 还有 16450，以及先进先出式 UARTs - 16550A．要了解它们的不同，首先让我们来检验当 UART 送出或接收一个位元组时所发生的事．

这 UART 本身并不能对资料做什麽处理，它只是送出以及接收它．每次送出或接收一个位元组时，CPU 都会从串列设备接到一个中断．然後 CPU 就把接收到的位元组从 UARTs 的缓冲区搬到记忆体的某处，或是提供另一个位元组给 UART 传送． 8250 以及 16450 UARTs 只有一个位元组的缓冲区．这个意思是，每送出或接收一个位元组就会中断 CPU 一次．在低速的情况下这样没有问题．但是在高速的传输率下，CPU 会忙於处理 UART 而没有时间照料其它工作．在某些情况下，CPU 没有足够的馀裕及时处理中断服务，该位元组将因资料如此快速地传入而被覆写．

这就是 16550A UARTs 有用的地方．这些晶片具有 16 个位元组的先进先出伫列．这个意思是它在必须中断 CPU 之前可以接收或转换达 16 个位元组．它不仅是能等，而且 CPU 现在也可以同时传送全部 16 个位元组的资料．虽然中断界限(threshold)很少有设到 16 的，这对於其它只有一个位元组缓冲区的 UARTs 而言仍然是一个重要的优点． CPU 收到较少的中断，因此可以自由地做其它事情．资料不会漏失，每个人都很高兴． (也有 16550 这个 UART，但是它跟 16450 一样因为它有问题．)

一般来说， 8250 以及 16450 UARTs 应该能够胜任高达 38400 bps 的工作速率．在高於 38400 bps 的速率下，你可能开始见到资料漏失．其它的 PC 作业系统(这里的定义很宽松)，像 DOS 并非是多工的，所以它们有可能可以用 8250 或 16450s 却应付的更好．这就是为什麽有些人并没有看到资料漏失，直到他们改用 Linux 才发生．

无-UART(Non-UART)以及智慧型多埠卡使用数位处理机(DSP)晶片来处理额外的缓冲以及控制，如此更能减轻 CPU 的负担．例如，Cyclades Cyclom 及 Stallion EasyIO 这些卡使用 Cirrus Logic CD-1400 RISC 晶片，还有许多卡使用 80186 CPU 或更特别的 RISC CPU 来处理串列输出入．

心里要记得，这些愚蠢型的 UART 并非是坏的，只是它们不适合做高速传输．当你将终端机或滑鼠连接到这些 UARTs 时应该不会遭遇困难．但是对高速数据机而言，16550A 可以说是必须的．

你可以花多一点点的钱购买有 16550A UARTs 的串列卡，只要询问电脑商该卡所使用的是什麽型号的 UARTs 即可．或者你想升级你现在的卡，你可以只要简单地购买 16550A 晶片并且置换你现在的 16450 UARTs 晶片．它们的脚位相容(pin-to-pin compatible)．有些卡有 UARTs 插槽来作这个用途使用．如果不是的话你可以焊接．注意，如果你有钱，买一张新卡将可能会省掉你许多麻烦，它们在 $50 元美金以下．


New Page 1

标题： ■ Linux Serial HOWTO 中译版 : 13,14
姓名 ：Greg Hankins greg.
Email：hankins@cc.gatech.edu
地址 ：
转摘 ：http://member.netease.com/

返回

13. 故障排除
13.1. 我不断地收到 ``line NNN of inittab invalid''
要确定你对你的 init 版本使用正确的文法．这里所没有的一些 init 会在 /etc/inittab 档案里使用不同的文法．要确定你对你的 getty 版本使用正确的文法．

13.2. 当我试著拨号时，它说 ``/dev/cuaN: Device or resource busy''
这个问题可能发生在 DCD 或 DTR 没有设定正确的时候． DCD 应该只在真的有连线时(像是有人拨接进来)才被设定，而不是在 getty 持续监看该埠的时候．检查并确定你的数据机正确地配置成只在真正连线时才设定 DCD． DTR 应该在任何东西使用或监看线路时设定，像是 getty, kermit, 或其它通讯程式．

另一个引起 ``device busy'' 错误的普遍原因是你设定你的串列埠使用一个已经被某种其它东西使用的中断．在每一个设备初始化的时後，它会要求 Linux 允许它使用它的硬体中断． Linux 持续追踪那个中断被指定给谁，而如果你的中断已经被占用，你的设备将不能适当地初始化．该设备真的并没有什麽办法告诉你发生的这件事，除了当你尝试去使用它的时候，它会回应 ``device-busy'' 错误讯息．检查你所有的卡(串列，乙太网路，SCSI 界面等等)．找寻硬体中断冲突的地方．

13.3. 我持续接到 ``Id SN respawning too fast: disabled for 5 minutes''
确定你的数据机有正确的配置．查看暂存器 E 和 Q．这可能发生在你的数据机跟 getty 沟通的时候．

确定你正确地从 /etc/inittab 呼叫 getty．使用错误的文法或设备名称将会引起严重的问题．

以下法检查你的 /etc/gettydefs 文法是否正确:

linux# getty -c /etc/gettydefs

这也可能发生在 uugetty 初使化失败时．参阅 getty 或 uugetty 仍然无法运作 一节．

13.4. 串列设备很慢或是串列设备只能单向传送
你的硬体中断可能有冲突．确定没有硬体中断是被分享的．检查你所有的卡(串列卡, 乙太网路卡, SCSI 等等)确定你串列设备配的跳接设定以及 setserial 参数是正确的．同时检查 /proc/ioports 及 /proc/interrups 以确定是否有冲突发生．

13.5. 我的数据机在某人断线後瘫痪或是 uugetty 并没有重新执行
这在 DTR 讯号掉下而你的数据机没有重置时会发生．这个问题在我身上发生的时候我看到我的 RD 跟 SD LEDs 疯狂地闪烁．你需要让你的数据机重置．大部份的 Hayes 相容数据机使用 &D3 来做这件事，但是在我的 USR Courier 上，我得要设 &D2 以及 S13=1．查阅你的数据机手册．

13.6. 我将我的终端机连到我的 PC 上，但是在我输入签入名称之後，它就锁住不动

如果你使用 getty: 在你的 /etc/gettydefs 项目里可能没有设 CLOCAL 给终端机，而且可能你用的并不是完整的 null modem 连接线．你需要 CLOCAL 来告诉 Linux 忽略数据机控制信号．它看起来像这里这样:
# 38400 bps Dumb Terminal entry
DT38400# B38400 CS8 CLOCAL # B38400 SANE -ISTRIP CLOCAL #@S @L login: #DT38400

# 19200 bps Dumb Terminal entry
DT19200# B19200 CS8 CLOCAL # B19200 SANE -ISTRIP CLOCAL #@S @L login: #DT19200

# 9600 bps Dumb Terminal entry
DT9600# B9600 CS8 CLOCAL # B9600 SANE -ISTRIP CLOCAL #@S @L login: #DT9600

接下来，用 kill 砍掉该 getty 行程这样新行程会以新的项目产生．
如果你使用 agetty: 加上 -L 旗标到你的 /etc/initab 中的 agetty 那行．这会使得它忽略数据机控制信号．然後键入 init q 以重新执行 init．这个项目看起来像这样:
s1:345:respawn:/sbin/agetty -L 9600 ttyS1 vt100

13.7. 在高速下，我的数据机漏失资料
如果你尝试在大於 38400 bps 的速率下使用你的数据机，而你并没有 16550A UARTs 的话，你应该要将它们升级．有关 UARTs 的说明参阅 什麽是 UARTs? 一节．

13.8. 在系统启动时，Linux 没有依照我的配置回报串列设备．
这是事实．Linux 在系统启动时并没有做任何的 IRQ 侦测，它只做串列设备侦测．所以，不要理会它所显示有关硬体中断的部份，因为它只是假定使用标准的硬体中断．这是因为硬体中断侦测不可靠，而且可能被瞒骗而这样做的．

所以即使我的 ttyS2 设在 IRQ5，我仍然看到

Jan 23 22:25:28 misfits vmunix: tty02 at 0x03e8 (irq = 4) is a 16550A

在 Linux 启动时，你必须使用 setserial 来告诉 Linux 你所使用的硬体中断． Linux 启动後，你可以查看 /proc/interrupts 档以了解真正被配置的 IRQ 是什麽．

13.9. 当我使用我的数据机叫用 Linux 机器时 rz 以及/或是 sz 不动
如果 Linux 在你尝试传送档案时会寻找 /dev/modem 的话，查看 /etc/profile 以及 /etc/csh.cshrc．某些发行套件会在这些地方定义一些别名，最著名的是 Slackware．这些别名扰乱了 zmodem 程式．把它们拿掉或是更正它们．

13.10. 我的萤幕印出看起来很好玩的字元
这在当你把二进位资料送往萤幕的时候会发生在虚拟控制台上，或者有时候会发生在串列连线上．修复这个问题的方法是输入 echo ^v^[c．因为控制字元之故，它是:

linux% echo <ctrl>v<esc>c

13.11. getty 或 uugetty 仍然无法运作
getty_ps 上有个 DEBUG 选项．编辑你的 /etc/conf.{uu}getty.ttySN 配置档并加上 DEBUG=NNN．其中 NNN 是下列的数字组合之一，根据你想要侦测什麽错误而定:

D_OPT 001 option settings
D_DEF 002 defaults file processing
D_UTMP 004 utmp/wtmp processing
D_INIT 010 line initialization (INIT)
D_GTAB 020 gettytab file processing
D_RUN 040 other runtime diagnostics
D_RB 100 ringback debugging
D_LOCK 200 uugetty lockfile processing
D_SCH 400 schedule processing
D_ALL 777 everything

设定 DEBUG=010 是个开始的好地方．

如果你正在执行 syslogd 的话，侦错资讯将会出现在你的记录档里．如果你没有执行 syslogd 那麽 getty 的资讯将会出现在 /tmp/getty:ttySN 里而 uugetty 的资讯则会出现在 /tmp/uugetty:ttySN 里，而且它们也会被放到 /var/adm/getty.log 里去．查看侦错资讯看看发生了什麽．最可能的是，你将得要调整一些你配置档里的参数，并且重新配置你的数据机．

你应该也去试试 mgetty．有些人在使用它时更为幸运．

14. 其它的资讯来源

下列指令的线上手册(man pages): agetty(8), getty(1m), gettydefs(5), init(1), login(1), mgetty(8), setserial(8)
你的数据机手册
NET-3 HOWTO: 所有关於网路的东西，包括了 SLIP, CSLIP, 以及 PPP
PPP HOWTO: 有助於使用 PPP
Printing HOWTO: 如何设定串列印表机
Term HOWTO: 所有你想知道关於 term 程式的事情
UPS HOWTO: 设定连上你的串列埠的 UPS
UUCP HOWTO: 建立 UUCP 的资讯
Usenet 新闻群组:
comp.os.linux.answers
关於 Linux 的 FAQs, How-To's, READMEs 等等．
comp.os.linux.hardware
Linux 作业系统的硬体相容性．
comp.os.linux.networking
Linux 的网路及通讯．
comp.os.linux.setup
Linux 的安装及系统管理．

Linux 串列电子邮件列表(mailing list)．要加入的话，寄电子邮件到 majordomo@vger.rutgers.edu，文章内容写 ``subscribe linux-serial''．如果你在内容上写 ``help''，你会得到一份辅助说明．这个伺服器还提供许多其它的 Linux 列表．送出 ``lists'' 指令可以得到所有电子邮件列表的列表．
讨论串列通讯及多埠串列卡的白皮书可自 Cyclades 的 http://www.cyclades.com 取得．
Modem FAQs:
Navas 28800 Modem FAQ
Curt's High Speed Modem Page
串列程式写作: Advanced Programming in the UNIX Environment, by W. Richard Stevens (ISBN 0-201-56317-7; Addison-Wesley)
POSIX Programmer's Guide, by Donald Lewine (ISBN 0-937175-73-0; O'Reilly)


New Page 1

标题： ■ SMB HOWTO:介绍
姓名 ：David Wood
Email：dwood@plugged.net.au
地址 ：
转摘 ：http://member.netease.com/

返回

1. 介绍
这是 SMB HOWTO {如何使用 SMB} . 这文件描述在 Linux 上如何使用 Session Message Block (SMB) protocol, 也叫做 NetBIOS 或 LanManager protocol.

本文件的维护者是 David Wood (dwood@plugged.net.au). 再者,修改或修正可以寄到那,以便下一版包涵进去.

SMB protocol 被使用在 Microsoft Windows 3.11, NT 和 95 用来分享磁碟及印机. 使用 Andrew Tridgell 所做的 Samba 工具套件, UNIX (包含 Linux) 机器能分享磁碟与印表机给 Windows 主机.

吾人使用 Samba 有四样东西可以做:

分享 linux 磁碟给 Windows 机器.
分享 Windows 磁碟给 linux 机器.
分享 linux 印表机给 Windows 机器.
分享 Windows 印表机给 linux 机器.

这些东西都已包含在本文件中.

Disclaimer: procedures 和 script 要嘛对作者是可以正常运作的,或要嘛由那些(procedures和script)的提供者报告可以正常运作. 以在这□的资讯做不同的设定可能会不能正常运作.如果你遭遇类似的困境,你可以 e-mail 给作者,提出建议来改进本文件, 但作者并不作任何保证.你预期什麽呢? 作者毕竟只是个顾问.....


New Page 1

标题： ■ SMB HOWTO:2,3,4
姓名 ：David Wood
Email：dwood@plugged.net.au
地址 ：
转摘 ：http://member.netease.com/

返回

2. 进一步资讯
这个 HOWTO 设法去解释如何设定基本的 SMB档以及列印服务在 linux 机器上. Samba 是个非常复杂且完整的包装. 在这个地方没有要设法去复制所有的 Samba 文件.

进一步资讯,请看以下文件:

Samba 文件, 可取得於 Samba 发行套件{distribution}的部分. 此发行套件可取得在: ftp://nimbus.anu.edu.au/pub/tridge/samba/
The linux Printing HOWTO.
The Print2Win Mini-HOWTO.

--------------------------------------------------------------------------------
3. 安装
最新 Samba 的原始程式可以取得自:

ftp://nimbus.anu.edu.au/pub/tridge/samba/

然而,如果已安装 linux 的 Redhat 版本,你可以使用软体套件{package} 来安装它.有些其他版本也包含 Samba 的binaries{二元档程式}.

以下两个 daemon{管理精灵} 对 Samba 软体套件 是必要的. 它们一般是被安装在 /usr/sbin ,而可在开机时,从系统起动的 scripts或inetd来执行. script的例子被展示在 执行 Daemons.

--------------------------------------------------------------------------------

smbd (The SMB daemon)
nmbd (提供 NetBIOS nameserver 的支援给 clients)

--------------------------------------------------------------------------------

一般而言,以下的 Samba 的 binaries 被安装在 /usr/bin, 虽然说它的位置是可选择性.

--------------------------------------------------------------------------------

smbclient (一种供给 UNIX 机器用的 SMB client{程式})
smbprint (一种 script 用在列印於 SMB 主机{host}上的列表机)
smbprint.sysv (同上, 但是提供给 SVR4 UNIX 机器用的)
smbstatus (列出对当地主机之目前 SMB 连结情况)
smbrun (一种 'glue' script 用来简易地执行应用程式於 SMB 主机)

--------------------------------------------------------------------------------

再者,一种叫 'print' 的 script 被包函在本 HOWTO 之中, 其用来当作一种有用的 front end{前端介面} 给 smbprint script用.

Samba 软体套件是简易安装的.简单地从上述的位址取得原始码, 且阅读在发行套件中的 README 档案. 在发行套件中也有一个 docs/INSTALL.txt 档提供一个简单的逐步安装指示.

接著安装後, 把 daemons 放到 /usr/sbin 而 binaries 放到 /usr/bin. 而 man pages{手册页} 摆在 /usr/local/man.

当你在做 Samba 软体套件, 你在 Makefile 中会有记载组态档,smb.conf,的位置. 这一般是在 /etc下, 但可以把它摆到你喜欢摆的任意位置. 对於这些使用方法{directions}, 我们将假设你记载组载档位置成 /etc/smb.conf, log 档位置为 log file = /var/log/samba-log.%m ,而 lock 目录为 lock directory = /var/lock/samba.

安装组态{configuration}档, smb.conf. 去 Samba 所在的的目录. 看一下在其子目录 example/simple 而且读一下 README 档. 复制在那个目录下的 smb.conf 档到 /etc 下. 注意! 如果你有一 linux 发行套件已安装好 Samba, 你也许已有 Samba 组态档在 /etc 下. 或许你应该从那个档开始.

如果你不想把组态档放在 /etc 目录下,可以把它摆在你想要摆的地方,然後在 /etc 下做一下 symlink{符号连结}:

--------------------------------------------------------------------------------

ln -s /path/to/smb.conf /etc/smb.conf

--------------------------------------------------------------------------------
4. 执行这两个 daemon
这两个 daemon 是 /usr/sbin/smbd 和 /usr/sbin/nmbd.

你可以执行 Samba daemon 从 inetd 或当成单独的程序. 如果你正设定一个永久档案伺服器,你应该从 inetd 来执行,所以如果他们死掉,那将重新开始.如果你只是偶尔想要使用 SMB 伺服器,或者用系统管理来辅助,当你需要时,你可以藉由使用 /etc/rc.d/init.d script,或甚至直接手动的.

要从 inetd 来执行 daemon , 请放以下几行在 inetd 组态档, /etc/inetd.conf:

--------------------------------------------------------------------------------

# SAMBA NetBIOS services (for PC file and print sharing)
netbios-ssn stream tcp nowait root /usr/sbin/smbd smbd
netbios-ns dgram udp wait root /usr/sbin/nmbd nmbd

--------------------------------------------------------------------------------

然後下指令以便重新启动 inetd daemon :

--------------------------------------------------------------------------------

kill -HUP 1

--------------------------------------------------------------------------------

要从系统启动的 script 来执行 daemon, 请把以下的 script 置於一个叫做 /etc/rc.d/init.d/smb 档, 而且 symbolically link 到注释{comments}所说明的档案:

--------------------------------------------------------------------------------

#!/bin/sh

#
# /etc/rc.d/init.d/smb - starts and stops SMB services.
#
# The following files should be synbolic links to this file:
# symlinks: /etc/rc.d/rc1.d/K35smb (Kills SMB services on shutdown)
# /etc/rc.d/rc3.d/S91smb (Starts SMB services in multiuser mode)
# /etc/rc.d/rc6.d/K35smb (Kills SMB services on reboot)
#

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0

# See how we were called.
case "$1" in
start)
echo -n "Starting SMB services: "
daemon smbd -D
daemon nmbd -D
echo
touch /var/lock/subsys/smb
;;
stop)
echo -n "Shutting down SMB services: "
killproc smbd
killproc nmbd
rm -f /var/lock/subsys/smb
echo ""
;;
*)
echo "Usage: smb {start|stop}"
exit 1
esac


New Page 1

标题： ■ SMB HOWTO:5,6,7,8,9,10
姓名 ：David Wood
Email：dwood@plugged.net.au
地址 ：
转摘 ：http://member.netease.com/

返回

5. 一般组态设定 (/etc/smb.conf)
在 linux (或其他 UNIX机器)上的 Samba 组态设定是被单一档案, /etc/smb.conf ,所控制. 这个档决定你想要哪个系统资源分享给外面世界以及你想对他们做什麽限制.

因为以下章节将会处理分享 linux 磁碟与印表机给 Windows 机器, 本小节所展示的 smb.conf 档尽量是你所能取得较简单的, 它只是以介绍性为目的.

目前还不要担心细节部分. 後面的章节将会介绍主要的概念.

在档案中的每的段落{section}会有个段落标头开始, 其标头像是 [global], [homes], [printers] 等等.

[global] 段落定义一些变数, 而 Samba 将用来定义於所有资源之分享.

[homes] 段落允许远端使用者来存取在当地(linux)机器上之他们的(且只有他们的) home directories{家目录}. 也就是, 如果一个 Windows 使用者从他们的 Windows 机器要设法连接到这个分享, 他们将是连接到他们自己个人的 home directiory. 要做这样事情,所要注意的是,他们必须在linux box上有个帐号.

以下的 smb.conf 档案样本允许远端使用者来用当地机器上他们的 home directories 而且写到一个暂存的目录. 对一个 Windows 使用者,要想看到这些分享, linux box 必须是在区域网路{local network}内. 然後,使用者简单地从 Windows File Manager 或 Windows Explorer 连接到网路磁碟.

在以下段落要注意的是, 对这个档之额外项目将会用来允许更多资源被分享.

--------------------------------------------------------------------------------

; /etc/smb.conf
;
; Make sure and restart the server after making changes to this file, ex:
; /etc/rc.d/init.d/smb stop
; /etc/rc.d/init.d/smb start

[global]
; Uncomment this if you want a guest account
; guest account = nobody
log file = /var/log/samba-log.%m
lock directory = /var/lock/samba
share modes = yes

[homes]
comment = Home Directories
browseable = no
read only = no
create mode = 0750

[tmp]
comment = Temporary file space
path = /tmp
read only = no
public = yes

--------------------------------------------------------------------------------

6. 分享 Linux 磁碟给 Windows 机器
以上所展示的 smb.conf 样本档, 分享 linux 磁碟给 Windows 使用者是很容易的. 然而, 像 Samba 其他的东西, 你可以控制到很大的程度. 以下有些例子 :

为了分享目录给大家使用, 就建立个类似上述 [tmp] 段落, 亦即加入像这个的东西到 smb.conf:

--------------------------------------------------------------------------------

[public]
comment = Public Stuff
path = /home/public
public = yes
writable = yes
printable = yes

--------------------------------------------------------------------------------

为了使以上目录供大众可读取,但只有群组成员{group staff}可写入,请修改其项目像这样:

--------------------------------------------------------------------------------

[public]
comment = Public Stuff
path = /home/public
public = yes
writable = yes
printable = no
write list = @staff

--------------------------------------------------------------------------------

其他玩磁碟分享的技巧,请看 Samba 文件或 man pages.

--------------------------------------------------------------------------------
7. 分享 Windows 磁碟给 Linux 机器
一种给 UNIX 机器用的 SMB client 程式被包含在 Samba 发行套件之中.它提供一种在命令列下的像ftp的介面.

想要看在给定的主机上有哪些分享可取得, 执行:

--------------------------------------------------------------------------------

/usr/sbin/smbclient -L host

--------------------------------------------------------------------------------

这□的 'host' 是你想要浏览的机器名子. 这将会回应一串 'service' 的名称 - 也就是, 它所分享给你的磁碟或印表机的名称. 除非 SMB 伺服器没有安全上的设定, 否则它将要求你输入密码. 给它 'guest' 帐号的密码或是你个人在那台机器上帐号的密码.

举个例子:

--------------------------------------------------------------------------------

smbclient -L zimmerman

--------------------------------------------------------------------------------

这个指令的输出应该看起来像是这样:

--------------------------------------------------------------------------------

Server time is Sat Aug 10 15:58:27 1996
Timezone is UTC+10.0
Password:
Domain=[WORKGROUP] OS=[Windows NT 3.51] Server=[NT LAN Manager 3.51]

Server=[ZIMMERMAN] User=[] Workgroup=[WORKGROUP] Domain=[]

Sharename Type Comment
--------- ---- -------
ADMIN$ Disk Remote Admin
public Disk Public
C$ Disk Default share
IPC$ IPC Remote IPC
OReilly Printer OReilly
print$ Disk Printer Drivers

This machine has a browse list:

Server Comment
--------- -------
HOPPER Samba 1.9.15p8
KERNIGAN Samba 1.9.15p8
LOVELACE Samba 1.9.15p8
RITCHIE Samba 1.9.15p8
ZIMMERMAN

--------------------------------------------------------------------------------

这个 browse list 列出其他有资源分享给网路的 SMB 伺服器.

要使用此 client, 请执行:

--------------------------------------------------------------------------------

/usr/sbin/smbclient service <password>

--------------------------------------------------------------------------------

这□的 'service' 是一台机器和分享名称. 举例而言,如果你设法连到一台叫做 zimmerman 的机器上之以 'public' 为分享名称的目录 ,此 service 要叫做 \\zimmerman\public. 然而,因为 shell 限制, 你会需要脱离 backslashes, 所以你要像这样的结束:

--------------------------------------------------------------------------------

/usr/sbin/smbclient \\\\zimmerman\\public mypasswd

--------------------------------------------------------------------------------

这样的 'mypasswd' 是你的密码之文字串{literal string}.

你将会有 smbclient 的提示符号{prompt}出现:

--------------------------------------------------------------------------------

Server time is Sat Aug 10 15:58:44 1996
Timezone is UTC+10.0
Domain=[WORKGROUP] OS=[Windows NT 3.51] Server=[NT LAN Manager 3.51]
smb: \>

--------------------------------------------------------------------------------

键入 'h' 取得关於使用 smbclient 的 help:

--------------------------------------------------------------------------------

smb: \> h
ls dir lcd cd pwd
get mget put mput rename
more mask del rm mkdir
md rmdir rd prompt recurse
translate lowercase print printmode queue
cancel stat quit q exit
newer archive tar blocksize tarmode
setmode help ? !
smb: \>

--------------------------------------------------------------------------------

如果你能使用ftp,你应该不需要查询 smbclient 的 man pages.

--------------------------------------------------------------------------------
8. 分享 Linux 印表机给 Windows 机器
为了分享 Linux 印表机给 Windows 机器, 你必须确定你的印表机已经装设好. 如果你能从 linux 上列印,设定 SMB 的印表机分享将会很直接.

请见 Printing HOWTO 来设定当地的列印.

因为作者使用被连接到 Windows NT 机器的印表机, 这小节不应该被视为很完整的,而只是建议.任何有详细资料可分享出来的人, 请将这些资料寄到 dwood@plugged.net.au 使得这小节能够完成.

加入列印设定到你的 smb.conf:

--------------------------------------------------------------------------------

[global]
printing = bsd
printcap name = /etc/printcap
load printers = yes
log file = /var/log/samba-log.%m
lock directory = /var/lock/samba

[printers]
comment = All Printers
security = server
path = /var/spool/lpd/lp
browseable = no
printable = yes
public = yes
writable = no
create mode = 0700

[ljet]
security = server
path = /var/spool/lpd/lp
printer name = lp
writable = yes
public = yes
printable = yes
print command = lpr -r -h -P %p %s

--------------------------------------------------------------------------------

确认印表机的路径(本例子中是在[ljet]下)要与 /etc/printcap中的 spool 目录相符合!

注意: 使用 Samba 来分享 UNIX boxes 上的印表机给 Windows NT 机器有一些问题. 其中一个问题是使用 NT 适当地看到分享的印表机. 想要修正这个问题, 请看 Samba 发行套件上的说明, 即 docs/WinNT.txt 档案.其他是处理密码的问题. 对於这扰人问题的了解与不能成功的修正,请看相同文件上的说明.

--------------------------------------------------------------------------------
9. 分享 Windows 印表机给 Linux 机器
为了分享 Windows 机器上的印表机, 你必须做以下步骤:

a) 你必须在 /etc/printcap 内有适当的记录,而且他们必须与当地目录结构 (像 spool 目录等) 相符合.

b) 你必须有 script 档 /usr/bin/smbprint. 这会随附在 Samba source, 但不是随附於所有 Samba binary 发行套件. 一个稍微修改版本在以下讨论.

c) 如果你想要转换 ASCII 档到 Postscript,你必须有netscript,或与其等效的. netscipt 是一种 Postscript 转换器而且一般是安装在 /usr/bin.

d) 你可以希望藉由有易於使用的 frond end 来使 Samba 列印更容易. 一种用於处理 ASCII, Postscript 或建立 Postscript 的简单 perl script 在下面给定.

以下 /etc/printcap 项目用在 Windows NT 主机上 HP 5MP 印表机. 这些项目如下:

--------------------------------------------------------------------------------

cm - comment
{说明}
lp - device name to open for output
{为了输出,而要开启的设备名称}
sd - the printer's spool directory (on the local machine)
{印表机的 spool 目录 (在当地的机器上)}
af - the accounting file
{帐号档案}
mx - the maximum file size (zero is unlimited)
{最大档案大小 (零表示没限制)}
if - name of the input filter (script)
{输入过滤之名称 (script)}

--------------------------------------------------------------------------------

要取得更多资讯,请看 Printing HOWTO 或者关於 printcap 的 man page.

--------------------------------------------------------------------------------

# /etc/printcap
#
# //zimmerman/oreilly via smbprint
#
lp:\
:cm=HP 5MP Postscript OReilly on zimmerman:\
:lp=/dev/lp1:\
:sd=/var/spool/lpd/lp:\
:af=/var/spool/lpd/lp/acct:\
:mx#0:\
:if=/usr/bin/smbprint:

--------------------------------------------------------------------------------

请确定 spool 和 accounting{帐号} 的目录存在且可写入. 请确信某行有适当的路径指到 smbprint script (在下面会给) 而且确定适当的设备被指到 ( /dev 下某个档).

下个是 smbprint script 本身. 它通常被摆在 /usr/bin 而且是因为 Andrew Tridgell 的缘故,而据我所知是他创造了 Samba. 它随附在 Samba source 发行套件, 但在某些 binary 发行套件并没有, 所以在这我再造一个.

你可以希望仔细地看这个. 有某些较小的修改已经证明它们是很有用的.

--------------------------------------------------------------------------------

#!/bin/sh -x

# This script is an input filter for printcap printing on a unix machine. It
# uses the smbclient program to print the file to the specified smb-based
# server and service.
# For example you could have a printcap entry like this
#
# smb:lp=/dev/null:sd=/usr/spool/smb:sh:if=/usr/local/samba/smbprint
#
# which would create a unix printer called "smb" that will print via this
# script. You will need to create the spool directory /usr/spool/smb with
# appropriate permissions and ownerships for your system.

# Set these to the server and service you wish to print to
# In this example I have a WfWg PC called "lapland" that has a printer
# exported called "printer" with no password.

#
# Script further altered by hamiltom@ecnz.co.nz (Michael Hamilton)
# so that the server, service, and password can be read from
# a /usr/var/spool/lpd/PRINTNAME/.config file.
#
# In order for this to work the /etc/printcap entry must include an
# accounting file (af=...):
#
# cdcolour:\
# :cm=CD IBM Colorjet on 6th:\
# :sd=/var/spool/lpd/cdcolour:\
# :af=/var/spool/lpd/cdcolour/acct:\
# :if=/usr/local/etc/smbprint:\
# :mx=0:\
# :lp=/dev/null:
#
# The /usr/var/spool/lpd/PRINTNAME/.config file should contain:
# server=PC_SERVER
# service=PR_SHARENAME
# password="password"
#
# E.g.
# server=PAULS_PC
# service=CJET_371
# password=""

#
# Debugging log file, change to /dev/null if you like.
#
logfile=/tmp/smb-print.log
# logfile=/dev/null

#
# The last parameter to the filter is the accounting file name.
#
spool_dir=/var/spool/lpd/lp
config_file=$spool_dir/.config

# Should read the following variables set in the config file:
# server
# service
# password
# user
eval `cat $config_file`

#
# Some debugging help, change the >> to > if you want to same space.
#
echo "server $server, service $service" >> $logfile

(
# NOTE You may wish to add the line `echo translate' if you want automatic
# CR/LF translation when printing.
echo translate
echo "print -"
cat
) | /usr/bin/smbclient "\\\\$server\\$service" $password -U $user -N -P >> $logfile

--------------------------------------------------------------------------------

大部分 linux 发行套件随附 nenscript 其用来转换 ASCII 文件成 Postscript. 以下 perl script 经由 smbprint 使更容易提供一种简单介面给 linux 的列印.

--------------------------------------------------------------------------------

Usage: print [-a|c|p] <filename>
-a prints <filename> as ASCII
-c prints <filename> formatted as source code
-p prints <filename> as Postscript
If no switch is given, print attempts to
guess the file type and print appropriately.

--------------------------------------------------------------------------------

使用 smbprint 来列印 ASCII 档案便於截断过长的行. 如果可能的话,这个 script 截断长行於空白键处(取代在字的中间).

格式化过的原始码是被 nenscript 处理过. 它处理 ASCII 档而且用个特选的标头(像 date,filename等)格式化成两栏. 它也可计算行数. 使用这当作例子, 其他格式型态可以达成的.

Postscript 文件已经适当地格式化了,所以它们直接通过.

--------------------------------------------------------------------------------

#!/usr/bin/perl

# Script: print
# Authors: Brad Marshall, David Wood
# Plugged In Communications
# Date: 960808
#
# Script to print to oreilly which is currently on zimmerman
# Purpose: Takes files of various types as arguments and
# processes them appropriately for piping to a Samba print script.
#
# Currently supported file types:
#
# ASCII - ensures that lines longer than $line_length characters wrap on
# whitespace.
# Postscript - Takes no action.
# Code - Formats in Postscript (using nenscript) to display
# properly (landscape, font, etc).
#

# Set the maximum allowable length for each line of ASCII text.
$line_length = 76;

# Set the path and name of the Samba print script
$print_prog = "/usr/bin/smbprint";

# Set the path and name to nenscript (the ASCII-->Postscript converter)
$nenscript = "/usr/bin/nenscript";

unless ( -f $print_prog ) {
die "Can't find $print_prog!";
}
unless ( -f $nenscript ) {
die "Can't find $nenscript!";
}

&ParseCmdLine(@ARGV);

# DBG
print "filetype is $filetype\n";

if ($filetype eq "ASCII") {
&wrap($line_length);
} elsif ($filetype eq "code") {
&codeformat;
} elsif ($filetype eq "ps") {
&createarray;
} else {
print "Sorry..no known file type.\n";
exit 0;
}
# Pipe the array to smbprint
open(PRINTER, "|$print_prog") || die "Can't open $print_prog: $!\n";
foreach $line (@newlines) {
print PRINTER $line;
}
# Send an extra linefeed in case a file has an incomplete last line.
print PRINTER "\n";
close(PRINTER);
print "Completed\n";
exit 0;

# --------------------------------------------------- #
# Everything below here is a subroutine #
# --------------------------------------------------- #

sub ParseCmdLine {
# Parses the command line, finding out what file type the file is

# Gets $arg and $file to be the arguments (if the exists)
# and the filename
if ($#_ < 0) {
&usage;
}
# DBG
# foreach $element (@_) {
# print "*$element* \n";
# }

$arg = shift(@_);
if ($arg =~ /\-./) {
$cmd = $arg;
# DBG
# print "\$cmd found.\n";

$file = shift(@_);
} else {
$file = $arg;
}

# Defining the file type
unless ($cmd) {
# We have no arguments

if ($file =~ /\.ps$/) {
$filetype = "ps";
} elsif ($file =~ /\.java$|\.c$|\.h$|\.pl$|\.sh$|\.csh$|\.m4$|\.inc$|\.html$|\.htm$/) {
$filetype = "code";
} else {
$filetype = "ASCII";
}

# Process $file for what type is it and return $filetype
} else {
# We have what type it is in $arg
if ($cmd =~ /^-p$/) {
$filetype = "ps";
} elsif ($cmd =~ /^-c$/) {
$filetype = "code";
} elsif ($cmd =~ /^-a$/) {
$filetype = "ASCII"
}
}
}

sub usage {
print "
Usage: print [-a|c|p] <filename>
-a prints <filename> as ASCII
-c prints <filename> formatted as source code
-p prints <filename> as Postscript
If no switch is given, print attempts to
guess the file type and print appropriately.\n
";
exit(0);
}

sub wrap {
# Create an array of file lines, where each line is < the
# number of characters specified, and wrapped only on whitespace

# Get the number of characters to limit the line to.
$limit = pop(@_);

# DBG
#print "Entering subroutine wrap\n";
#print "The line length limit is $limit\n";

# Read in the file, parse and put into an array.
open(FILE, "<$file") || die "Can't open $file: $!\n";
while(<FILE>) {
$line = $_;

# DBG
#print "The line is:\n$line\n";

# Wrap the line if it is over the limit.
while ( length($line) > $limit ) {

# DBG
#print "Wrapping...";

# Get the first $limit +1 characters.
$part = substr($line,0,$limit +1);

# DBG
#print "The partial line is:\n$part\n";

# Check to see if the last character is a space.
$last_char = substr($part,-1, 1);
if ( " " eq $last_char ) {
# If it is, print the rest.

# DBG
#print "The last character was a space\n";

substr($line,0,$limit + 1) = "";
substr($part,-1,1) = "";
push(@newlines,"$part\n");
} else {
# If it is not, find the last space in the
# sub-line and print up to there.

# DBG
#print "The last character was not a space\n";

# Remove the character past $limit
substr($part,-1,1) = "";
# Reverse the line to make it easy to find
# the last space.
$revpart = reverse($part);
$index = index($revpart," ");
if ( $index > 0 ) {
substr($line,0,$limit-$index) = "";
push(@newlines,substr($part,0,$limit-$index)
. "\n");
} else {
# There was no space in the line, so
# print it up to $limit.
substr($line,0,$limit) = "";
push(@newlines,substr($part,0,$limit)
. "\n");
}
}
}
push(@newlines,$line);
}
close(FILE);
}

sub codeformat {
# Call subroutine wrap then filter through nenscript
&wrap($line_length);

# Pipe the results through nenscript to create a Postscript
# file that adheres to some decent format for printing
# source code (landscape, Courier font, line numbers).
# Print this to a temporary file first.
$tmpfile = "/tmp/nenscript$$";
open(FILE, "|$nenscript -2G -i$file -N -p$tmpfile -r") ||
die "Can't open nenscript: $!\n";
foreach $line (@newlines) {
print FILE $line;
}
close(FILE);

# Read the temporary file back into an array so it can be
# passed to the Samba print script.
@newlines = ("");
open(FILE, "<$tmpfile") || die "Can't open $file: $!\n";
while(<FILE>) {
push(@newlines,$_);
}
close(FILE);
system("rm $tmpfile");
}

sub createarray {
# Create the array for postscript
open(FILE, "<$file") || die "Can't open $file: $!\n";
while(<FILE>) {
push(@newlines,$_);
}
close(FILE);
}

--------------------------------------------------------------------------------

10. 版权
1996 年的 HOWTO 版权是属於 David Wood. 它可以用任何型式的再重覆产生以及自由的散播,只要这个档原封不动,包含这段叙述.


New Page 1

标题： ■ The Linux Sound HOWTO -- Linux 音效指引
姓名 ：Jeff_Tranter,
Email：jeff_tranter@pobox.com
地址 ：
转摘 ：http://member.netease.com/

返回

1. 概论
这是Linux Sound HOWTO文件. 它的主要目标是提供一切安装及建置Linux音效支援所需知识的快速参考资料. 我们一方面回答关於Linux下关於音效的常见问题, 另一方面也指出关於电脑音效/音乐方面种种主题的参考资料的来源.

我们只关心适合Linux用的音效卡方面. 对於音效卡及电脑音效/音乐原理的资料, 请参阅参考资料那节列出的文件.

1.1. 铭谢状
这份文件很多来自音效驱动程式程式码所附的文件(由Hannu Savolainen( hannu@voxware.pp.fi)撰写). 谢谢Hannu及开发Linux核心音效驱动程式, 以及音效公用程式的许许多多其他人.

由於有 SGML Tools 套件,使得本文件可以由一个原始档产生出几种不同格式.

1.2. 英文版版本沿革

1.1版
第一版; 只在Linux开发者通信论坛的SOUND频道张贴.

1.2版
次要的更动; 公开放在档案库的第一版.

1.3版
转换为SGML; 使用Matt Welsh的Linuxdoc-SGML工具转换而有多种格式; 由於新格式而改变了外观结构, 内容仅有小改变.

1.4版
SGML的次要改动; 增加了PAS16及Adaptec 1542A SCSI卡不相容问题的解答.

1.5版
在1.1版核心中出现了2.5a版的音效驱动程式; 提到支援了GUS-MAX; 其它次要更动

1.6版
增加了关於错误``no space on device''的资讯. 提到 Hacker's Guide 放在"隐藏''的目录. 增加了双工模式问题; 关於错误``device busy'' 的资讯; 其它次要改变.

1.7版
增加关於ASP及AWE32的资讯; VoxWare 2.9出来了; 回答了使用到IRQ2的问题; 参考到 Sound及SCSI HOWTO.

1.8版
增加了DOS下出现错误的问题; 进行许多次要改变, 以配合2.90版的音效驱动程式; DOOM的资讯; 如何减低杂音的问题.

1.9版
录音及相容卡的问题.

1.10版
本HOWTO上了Web, 还有印刷本和翻译本; 关於和QIC磁带驱动程式的DMA冲突的资讯; 还有银河魔声卡(Sound Galaxy NX Pro)及罗技 BusMouse 的资讯.

1.11版
迟来好久的更新(我那时很忙); 将文件置於GPL执照规定下; 跟上3.0版音效驱动程式; 增加许多新支援的音效卡驱动程式资讯; 更多关於建置及解决问题的资讯; 加入了很多HTML连结; 采用和CDROM-HOWTO一样的格式.

1.12版
在1.3.34版核心又有了新的音效驱动程式; 新的设备档档名; 1542的位址修正为334(而非 333); 阐明Creative Labs Emu及ASP的状态; 加入 Creative Labs 及 MediaTrix 的网址.

1.13版
提醒 VoxWare 的名称(有问题); 更新以反应最新支援的卡及建置选项; 随插即用(PnP)方面的支援问题; 区块大小(block size)方面的问题; 新的 xconfig 及 menuconfig 选项; mudutils 有音效设备支援了; vger通讯论坛拜拜了; 强调作者的网站; 其它的次要修订.

1.14版
Audio Excell DSP16目前尚未支援(应该几个月後就可以了); 设置程式改了; 义大利译本出来了; 在载入音效模组时, 给一个设定混音器增益的小技巧; 最新稳定核心改为2.0; 新的音效驱动程式名称; 音效设备档的root权限问题.

1.15版
除去太旧过时的问题; 作者有了新E-mail地址; 修正一些套装软体的连结指标; 增加多媒体那本书的更多资讯; 拼法及语法的小改变.

1.16版
Hannu Savolainen给予了很多修订及校正; 增加六个月的``最佳参考期''期限 ; 书本的网页之新URL; 增加西班牙译本的连结; 拼法及文法的小改变.

1.17版
中译本出来了; 多了选择性的 GUS 驱动程式; 封包无线数据机(packet radio modem); Linux Multimedia Guide 现已有法文及日文译本. 参考许多相关的 mini-HOWTO; IBM ThinkPad的指标器.

1.18版
韩文译版出来了; 对MIPS平台上的音效支援有了更多资讯; 更新多片音效卡支援的资讯;要以root身份执行fuser.

1.3. 本中文版版本沿革

1.15版
最初的译本, 但并没有来得及公开.

1.16版
第一个公开的译版, 以试译方式进行.

1.17版
首次改为SGML格式.

1.18版
和上一版差没几天; 修正了上一版的几个编排错误; 第一次加上本中文版沿革.

1.4. 最新版本何处寻?
本文件之最新版本将定期张贴於 comp.os.linux.answers 新闻组; 它也会放到很多保存这类资讯的匿名ftp站,诸如 ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/

本文件及其它HOWTO文件的超文字版也放在很多WWW站台上,包括http://sunsite.unc.edu/mdw/mdw.html 很多Linux的CD-ROM也内含HOWTO文件,通常放在/usr/doc/目录下. 有时在CD-ROM 上的, 或列印的, 或在ftp站里的会是过时的版本. 如果在本 HOWTO 上的日期已距今超过六个月, 那麽在Internet上可能已经有新版了.

本文的法文译本在 ftp://ftp.ibp.fr/pub2/linux/french/docs/HOWTO/

本文的日文译本在 http://yebisu.ics.es.osaka-u.ac.jp/linux/

本文的义大利文译本在 http://www.psico.unipd.it/ildp/docs/HOWTO/Sound-HOWTO.html

本文的西班牙文译本在 http://www.insflug.nova.es/howtos/online/sonido/sonido-COMO.html

本文的中译本在 http://linux.ntcic.edu.tw/~yorkwu/linux/howto/sound/

本文的韩文译本在http://members.iWorld.net/mangchi/HOWTO/Sound-HOWTO.html

多数本文件及其它的 Linux HOWTO 的翻译版也可以在 http://sunsite.unc.edu/pub/Linux/docs/HOWTO/translations/ 以及 ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/translations/找到.

如果你将本文件翻做其它语言, 请告诉我, 我会在这里替它做个连结.

1.5. 回馈
这份HOWTO文件, 需要各位读者帮助, 才能越来越好用. 如果您有任何建议, 修正, 或意见 , 请将它回给我,jeff_tranter@pobox.com. 我将会在下一版中试著加入这些意见.

(译注 : 对本中文版的意见, 请告诉译者yorkwu@ms4.hinet.net.)

我也很乐意尽我能力回答关於音效卡及Linux的一般问题. 但在这之前, 请先耐心读完这整篇 HOWTO, 然後再给我和这问题相关的所有细节资讯. 请不要问我在非Linux作业系统下关於音效卡的问题.

如果您在唯读光碟上或以硬拷贝形式发行此文件, 欢迎附送一份过来. 请寄到我的收信地址. 也请考虑一下对 Linux 文件计画作点奉献, 以支持 Linux 的免费文件. 请和Linux HOWTO 协调人 Greg Hankings ( gregh@sunsite.unc.edu )联络以得到更多资讯.

1.6. 散布时的注意事项
原作版权为 Jeff Tranter (1995-1997) 所有.

中文版版权为伍永康及 Jeff Tranter (1997) 所有.

这份 HOWTO 是免费文件; 你可以在合於 FSF (自由软体基金会)出版的 GNU GPL (一般公开授权)之规定下重新散播及/或修改它; 您可以自由决定适用 GPL 2.0 或之後的任何版本.

这份文件我们希望对您有用, 但我们不提供任何保证, 即使是商业上 或合於某特殊用途的隐含保证亦然. 详情请看 GNU 一般公开授权书.

要取得 GNU 一般公开授权书(英文版), 您可以寄信到 Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,USA.


New Page 1

标题： ■ The Linux Sound HOWTO -- Linux 音效指引:2,3
姓名 ：Jeff_Tranter,
Email：jeff_tranter@pobox.com
地址 ：
转摘 ：http://member.netease.com/

返回

2. 音效卡技术
为了有助於你对本文後面讲到的有些了解, 这一节简略地提一下电脑音效技术的概要. 如果想进一部了解, 请找数位音讯或数位信号处理的相关书籍.

声音是一种类比的现象; 它可能是在连续□围内的任意值. 然而电脑却是数位的, 只能对付□围中的几个点. 为了让声音能存进记忆体, 音效卡用了一种叫类比/数位转换器(A/D或ADC), 将声波信号(以电压表示)转换成数字以供储存. 另外也用一个数位/类比转换器(D/A或DAC)将数字反过来转换成电压, 送进喇叭, 发出声音.

由类比转换成数位的过程, 叫作取样, 会产生一些误差. 有两个因素决定转换过的声音转得多好. 其一是取样率, 是在单位时间内, 硬体对声音作几次取样(通常用每秒几次或赫兹为单位). 较低的取样率取出的声音就比较不准确. 其二是样本大小, 是每一次取样的有效□围, 通常用bit表示. 有效□围越大, 就能取出较准确的数位化声音.

音效卡一般用8或16 bit取样, 取样率则在4000-44000Hz之间. 取样也分为单声道(单音) 或双声道(立体声).

FM合成是产生声音的旧方法. 它把不同的波型(正弦波,方波,三角波等)组合起来产生声讯. FM合成硬体上比较简单, 但是较难程式化, 也较没弹性. 很多音效卡仍提供FM 合成以和过去的音效卡及软体相容. 通常会提供几组独立的声音产生器及语音.

波型表合成集合了D/A转换的弹性及FM合成的多频道能力. 用这种方法, 数位语音可以下载到专用的记忆体内, 在不太需要CPU负载的情况下播放, 合并及修改. 最新锐的音效卡都支援波型表合成.

多数音效卡提供混音能力, 可将不同讯号来源的声音加以合并, 并控制增益强度.

MIDI是指乐器数位介面(Musical Instrument Digital Interface), 是一种可以让乐器彼此沟通的软硬体介面. 在MIDI bus上传送的事件可以存成MIDI档, 供日後修改及重播. 很多音效卡提供MIDI介面, 即使没有, 靠音效卡本身的能力, 仍然可以播放MIDI档.

MOD档是电脑产生歌曲常用的格式. 除了记录音符外, 档案也记录了乐器(或语音 )的数位取样. MOD档是由Amiga电脑来的, 但只要有适当的软体, 在包括Linux的其它系统上也能播放.

--------------------------------------------------------------------------------3. 支援的硬体
这一节列出目前Linux支援的音效卡及音效介面, 以撰写时最新的Linux核心为基准.

音效驱动程式有它自己的版本号码. 最新的稳定版Linux核心是2.0.31版, 使用 3.5.4-960630版音效驱动程式.

音效驱动程式作者, Hannu Savolainen, 经常在送出标准Linux核心的驱动程式前先推出更新的beta版驱动程式. 最新的支援列表在 http://www.4front-tech.com/ossfree/new_cards.html(美国) 或http://personal.eunet.fi/pp/voxware/new_cards.html(欧洲). 它们会告诉你哪种卡要哪一版以上的驱动程式, 或支援还在进行中. 包含在核心中的档案 /usr/src/linux/drivers/sound/Readme.cards也会列出支援的卡, 不过它不见得是最新的.

在这份HOWTO里的资讯对Intel平台的Linux有效.

这个音效驱动程式应该也对多数Alpha平台上的音效卡有效. 然而, 有些卡虽然在i386机器上用的好好的, 偏偏就和Alpha上的其它设备I/O位址相冲. 所以除非亲自尝试过, 不然也不能确定一片音效卡能不能用.

在撰写这篇时, 这驱动程式尚不支援PowerPC版的Linux, 不过将来应该会支援.

在MIPS平台的Linux可以将音效驱动程式挂进核心, 有部份MIPS机器有EISA插槽, 或者内建的发音硬体. Linux的MIPS group告诉我,在将来他们很有兴趣加入对音效的支援.

Linux 核心也为 Atari 及 Amiga 平台的 Linux 提供了和 Intel 平台相容, 但使用这些机器本身内建音效硬体的驱动程式 (译注: 这段可能和原文意思有出入)

SPARC平台的Linux目前还没有支援音效. (如同Amiga及Atari, SPARC机器有内建的音效硬体, 所以写个新驱动程式就可以了)

3.1. 音效卡
以下音效卡为Linux核心驱动程式支援:

ATI Stereo F/X (停产)
AdLib (停产)
Ensoniq SoundScape (及由Reveal和Spea生产的相容卡)
Gravis Ultrasound
Gravis Ultrasound ACE
Gravis Ultrasound Max
Gravis Ultrasound with 16 bit sampling option
Logitech Sound Man 16
Logitech SoundMan Games
Logitech SoundMan Wave
MAD16 Pro (OPTi 82C928, 82C929, 82C930, 82C924 晶片)
Media Vision Jazz16
MediaTriX AudioTriX Pro
Microsoft Windows Sound System (MSS/WSS)
Mozart (OAK OTI-601)
Orchid SW32
Personal Sound System (PSS)
Pro Audio Spectrum 16
Pro Audio Studio 16
Pro Sonic 16
Roland MPU-401 MIDI interface
Sound Blaster 1.0
Sound Blaster 16
Sound Blaster 16ASP
Sound Blaster 2.0
Sound Blaster AWE32
Sound Blaster Pro
TI TM4000M notebook
ThunderBoard
Turtle Beach Tropez ("classic"但非Plus)
Turtle Beach Maui
Yamaha FM synthesizers (OPL2, OPL3 and OPL4)
6850 UART MIDI Interface

要注意的是随插即用(PnP)音效卡并不完全和较旧的, 非PnP的同型卡相容. 例如说, SoundBlaster16 PnP就就没有和原来的SoundBlaster16完全相容. 同理可证 Soundscape PnP及GUS PnP的情况也一样. 在後面我们会提到关於随插即用的更进一步资讯.

以下的卡没有支援, 原因不外乎它们太旧或厂商不给写驱动程式所需的程式设计资讯.

Pro Audio Spectrum (原始版)
Pro Audio Spectrum+
Diamond 制的早期音效卡 (使用 Sierra Aria)

Other sound cards that are claimed to be compatible with one of the supported sound cards may work if they are hardware (i.e. register level) compatible.

其它宣称和有支援的卡相容的卡, 如果是硬体(暂存器等级)相容的话, 可能 也能用.

虽然大多数音效卡号称``和声霸卡相容'', 但能用Linux的声霸卡驱动程式的卡少之又少. 这些卡如果用MSS/WSS或MAD16驱动程式通常会更好. 只有真正由Creative Labs做的声霸卡(用Creative的晶片, 如SoundBlaster16 Vibra), 或 MV Jaz16 及 ESS688/1688 的卡才能无问题的用声霸卡驱动程式. 在所谓``声霸卡相容的16位元音效卡''上用声霸卡驱动程式只是浪费时间罢了.

Linux核心也支援在音效卡上的SCSI介面(ProAudioSpectrum 16)及专属光碟机介面(如声霸卡Pro). 请看LinuxSCSI HOWTO及CDROM HOWTO文件以作更深入了解.

在音效卡上常见的摇□介面, 也有个核心可载入模组支援.

注意这里提到的SCSI,CD-ROM,摇□及音效驱动程式彼此是无关的.

想对音效驱动程式进一步了解, 请翻到``参考资料''节, 找Hannu Savolainen 的网站.

3.2. 选择性的音效驱动程式
除了核心内建的以外, 还有些不包括在核心中, ``非正式''的音效驱动程式, 它们可以拿来取代标准核心内的驱动程式.

4Front Technologies有卖商业版的Linux音效驱动程式. 它提供了比Linux核心中的免费版还多不少的功能. 请上http://www.4front-tech.com/ 4Front Technologies的网站看看.

Markus Mummert (mum@mmk.e-technik.tu-muenchen.de写了给 Turtle Beach MultiSound(classic) , Tahiti, 及Monterey音效卡用的驱动程式, 文件中提到:

"It is designed for high quality hard disk recording/playback without losing sync even on a busy system. Other features such as wave synthesis, MIDI and digital signal processor (DSP) cannot be used. Also, recording and playback at the same time is not possible. It currently replaces VoxWare and was tested on several kernel versions ranging from 1.0.9 to 1.2.1. Also, it is installable on UN*X SysV386R3.2 systems."
(它是为高品质硬碟录放音设计, 即使系统负载大, 也不会走音. 其它如波形合成, MIDI及数位信号处理器(DSP)则不能使用. 也不能同时录放音. 它目前可取代VoxWare , 并在1.0.9到1.2.1版核心测试过. 它也可以装在UN*X SysV386R3.2系统上.)

可在http://www.cs.colorado.edu/~mccreary/tbeach找到.

Kim Burgaard (burgaard@daimi.aau.dk 写了给MPU-401用的驱动程式及公用程式. Linux LSM 给予如下的介绍:

"A device driver for true Roland MPU-401 compatible MIDI interfaces (including Roland SCC-1 and RAP-10/ATW-10). Comes with a useful collection of utilities including a Standard MIDI File player and recorder.
(一个给和MPU-401完全相容的MIDI介面(包括Roland SCC-1及RAP-10/ATW-10)用的驱动程式. 也附带了好用的公用程式, 包括标准的MIDI档播放器及录制程式.)

Numerous improvements have been made since version 0.11a. Among other things, the driver now features IRQ sharing policy and complies with the new kernel module interface. Metronome functionality, possibility for synchronizing e.g. graphics on a per beat basis without losing precision, advanced replay/record/overdub interface and much, much more."
(从0.11a版起, 又进行了多项改进. 其中包括了IRQ共用, 还有可编译为核心模组. 节拍器功能可达到每一拍都同步而不丧失准度, 改良的重播/录音及overdub(?) 介面及很多很多.)

可在ftp://sunsite.unc.edu/pub/Linux/kernel/sound/mpu401-0.2.tar.gz 找到.

Jaroslav Kysela及其他人为Gravis UltraSound音效卡写了可选的驱动程式. 可以从 http://romeo.pf.jcu.cz/~perex/ultra, Linux UltraSound计画的网页找到相关资讯.

音效卡在Linux下还有一个新奇用途 -- 当作业馀无线电. 最近的 2.1.x 版核心包含了一个可用声霸卡及Windows Sound System相容卡来实作1200 bps AFSK 及 9600 bps FSK 封包协定的驱动程式. 详情请见 Linux AX25 HOWTO. (我(作者)也是个火腿族, 台呼 VE3ICH)

3.3. PC喇叭
另外还有一个不要额外硬体的驱动程式, 它利用PC喇叭. 它和音效驱动程式软体上大体相容, 但可以想见的, 它的音质差多了, CPU负担也高多了. 它产生的结果视各别喇叭的特性而有很大差别. 请看内附的文件以更深的了解.

目前版本是1.1, 可在 ftp://ftp.infomatik.hu-berlin.de/pub/os/linux/hu-sound/找到.

3.4. 平行(印表机)埠
还有个选择, 就是用平行埠加上一些东西做数位/类比转换. 它的音质比PC喇叭好, 但CPU 负载仍嫌高. 前一小节提到的喇叭驱动程式有支援, 它还包含了制造所需硬体的说明.


New Page 1

标题： ■ The Linux Sound HOWTO -- Linux 音效指引:安装
姓名 ：Jeff_Tranter,
Email：jeff_tranter@pobox.com
地址 ：
转摘 ：http://member.netease.com/

返回

4. 要在Linux下享用音效, 必须先进行以下步骤:

安装音效卡
建造核心, 使之支援音效
建造设备档
启动Linux核心, 并测试

底下我们将对每一步作详细解说.

4.1. 安装音效卡
按照说明书的指示, 安装硬体, 或是请厂商来装.

旧的音效卡通常有开关或跳线, 以设定IRQ, DMA通道等, 请把这些设定记下来. 如果你不确定要怎麽调, 就照出厂值. 可能的话, 避免和其它设备(如网路卡, SCSI卡, 平行及串列埠)相冲.

若你在DOS下有使用音效卡, 通常应该设成和DOS下一样. 不过有些情况下(特别是PnP的卡)也可能要设成和DOS不一样的值. 这时可能要实验一下.

4.2. 设定核心
安装时您用的是预先编译过的核心, 它们通常是不支援音效的. 所以最好自己编译适合自己用的核心. 而且, 您也可能想要藉此来升级到更新版的核心, 或是缩小核心体积, 增加可用的记忆体.

在如何建造核心方面, 您应该参考 Linux Kernel HOWTO. 我在这里只提和音效卡相关的部份.

如果您还没有编译核心, 加入音效支援的经验, 先读一下核心驱动程式里的Readme 档(特别是关於您的音效卡的部份)是个不错的主意. 以下档案可以在核心音效驱动程式的目录中找到, 通常放在/usr/src/linux/drivers/sound:

CHANGELOG - 简介每一版中的变更
COPYING - 拷贝及版权限制
Readme - 最新, 最重要的消息
Readme.aedsp16 - 关於 Audio Excel DSP 16 音效卡的资讯
Readme.cards - 设定音效卡的说明
Readme.linux - 安装核心以外散布的驱动程式之注意事项
Readme.modules - 如何作成可载入模组
Readme.v30 - 3.0 版的新功能介绍
experimental.txt - 讲一些实验中的功能

照一般造核心的程序来就好. 目前设定核心有三种介面可选择. 用 ``make xconfig '' 可叫出在X11下的图形设定介面; 用 ``make menuconfig'' 则是文字模式的选单介面; 最原始的方法, 则是用 ``make config'', 提供了简单的文字问答介面.

当用``make xconfig''或``make menuconfig''时, 所有Yes/No问题都要特别小心确认. 这些命令给的预设答案都是No, 这并不见得就是正确的选择. 特别是 ``/dev/dsp and /dev/audio support'' (CONFIG_AUDIO) 选项通常是要打开的.

在这篇文件中, 我假设你用传统的命令行式 ``make config''来做. 虽然说其实别的方式也差不多.

设定音效的方法也有二则. 其一, ``老''方法(在2.0.0板以前的核心只能用这方法), 使用一个内附的设定程式. 这种方法对多数音效卡有用, 除了少数需要额外``低阶''驱动程式的(如miroSOUND, AWE32, 及AEDSP16)以外.

第二种是``新''方法, 它和设定核心的其它部份用的选单介面有较佳的整合性. 这方法对要韧体下载档的音效卡无效. 这些卡包括PSS, SM Wave, AudioTrix Pro 及 TurtleBeach Tropez/Maui卡, 对付它们你只好用老方法了.

``make xconfig''一定用``新''方法. 在``make menuconfig'' 中, 你可以在音效子画面中选择用``老''方法或``新''方法. "make config"的情况, 预设是用``老''方法, 不过如果你已经用过一次``新''方法了, 那麽它也会改成用新方法. 之後你仍可以在"make menuconfig"中切换回老方法.

我们建议用``make menuconfig''加``老''方法. 很多设定问题都 (至少一部份是)由於误用了新方法所致.

也可以把音效驱动程式做成核心可载入模组. 我建议一开始先不要做成模组, 等测试过可用後, 再试试把它做程模组.

执行``make config''时, 以``y''回答下列问题, 以起动音效支援.

Sound card support (CONFIG_SOUND) [M/n/y/?]

这问题答完後, 音效设定程式会被编译, 执行. 它会问你要那些装置及选项. 回答这些问题时要小心, 前面回答错误可能後面的问题就不会问了. 例如说, 如果你没有PAS16音效卡, 第一个问题(PAS16)就不要答``yes''. 不要加入比你会用上的卡还多的驱动程式, 这只会浪费记忆体. 有些驱动程式(像MPU-401)可能会和你的SCSI卡相冲, 结果开不了机.

作者在此简短的叙述各个设定选项的意义. 对每一个问题请以``y''(yes)或 ``n''(no)作答. 里面会显示预定答案, 如``[Y/n/?]''表示预定``y'' 而``[N/y/?]''表示预定是``n''. 你可以直接按Enter选预定的答案, 但记住预定答案不一定是对的.

输入问号(``?'')会给你对此选项的简短的描述.

也注意一下不见得每个问题都会问, 设定程式可能会依据前面的选择而自动取消或设定某些选项.

Old configuration exists in /etc/soundconf. Use it [Y/n/?]
如果你以前有设定过音效驱动程式, 您的设定会被存起来. 如果您想直接用上次的设定, 回答``y''. 如果您想作些改变或换了新版核心, 您应该回答 ``n'' 并继续下面的设定程序.

ProAudioSpectrum 16 support [Y/n/?]
只有当您有ProAudio Spectrum 16, ProAudio Studio 16或罗技 SoundMan 16 时, 答'y'. 如果您有其它Media Vision或罗技的卡, 还是请回答'n', 因为它们并不和 PAS16相容.

SoundBlaster support [Y/n/?]
如果您有真正由Creative Labs制的声霸卡或100%硬体相容(如 Thunderboard 或 SM Games )卡, 回答'y'. 如果您的卡在支援之列, 请先看Readme.cards中和卡相关的指示再回答. 对完全不知道的卡, 如果它坚称是和声霸卡相容, 你可以回答'y'.

Gravis Ultrasound support [Y/n/?]
如果您有GUS或GUS Max,回答'y'. 不然就回答'n', 这个驱动程式吃记忆体吃得凶.

MPU-401 support (NOT for SB16) [Y/n/?]
这问题要小心. 几乎所有的卡都支援MPU-401 MIDI介面, 然而, 有些卡需要专属的驱动程式. 在这种卡上开启这个驱动程式会造成冲突. 在没有MPU-401的电脑上使用这个驱动程式也会造成麻烦. 如果你的卡在支援之列, 看Readme.cards档中的指示. 如果你有真正的MPU-401 MIDI介面卡, 那就可以放心回答'y'.

6850 UART Midi support [Y/n/?]
最好回答'n'. 6850 UART 介面甚少被用到.

PSS (ECHO-ADI2111) support [Y/n/?]
如果你有Orchid SW32, Cardinal DSP16或其它用PSS晶片组(AD1848 编解码器 + ADSP-2115 DSP晶片 + Echo ESC614 ASIC晶片)的卡, 答'y', 不然答'n'.

16 bit sampling option of GUS (not GUS MAX) [Y/n/?]
如果您的GUS上有装16 bit取样子卡, 回答'y'. 如果您有GUS MAX, 回答 'n'. 启动这个就会关闭GUS MAX.

GUS MAX support [Y/n/?]
除非你有GUS Max, 不然回答'n'吧!

Microsoft Sound System support [Y/n/?]
一样请先三思再答. 如果你有微软制的原版Windows Sound System卡或Aztech SG 16 Pro (或NX16 Pro)的话, 可放心回答'y'. 如果你的音效卡不在上面所列, 也可以答'y'试试. 对VoxWare支援的卡请先看Readme.cards. 有些驱动程式有自己的一套驱动MSS的方法, 起动这个会造成冲突.

Ensoniq Soundscape support[Y/n/?]
如果你的卡用的是Ensonic Soundscape晶片, 回答'y'. 这种卡至少有Ensoniq, Spea 及 Reveal(也做别种卡)在制造.

MediaTriX AudioTriX Pro support [Y/n/?]
如果你有AudioTrix Pro的话, 答'y'.

Support for MAD16 and/or Mozart based cards?
如果你是用莫扎特音效卡(OAK OTI-601)或MAD16(Opti 82c928或82c929)音效介面晶片. 这种晶片非常普遍, 所以一些无牌卡也许就用它. 除此之外, MAD16也被一些知名厂商像 TurtleBeach(Tropez), Reveal(几种型式), 及 Diamond(最新的)用来放在他们的卡上.

Support for Crystal CS4232 based (PnP) cards [Y/n/?]
如果你的卡用Crystal CS4232晶片, 答'y'.

Support for Turtle Beach Wave Front (Maui, Tropez) synthesizers [Y/n/?]
如果你有上面列出的卡才选'y'.

SoundBlaster Pro support [Y/n/?]
如果你的卡是声霸卡Pro或声霸卡16, 答'y'. 对声霸卡Pro相容的也可以用它. 回答'n'省一点记忆体, 但'y'也是安全的选择.

SoundBlaster 16 support [Y/n/?]
如果你的卡是声霸卡16(包括AWE32), 答'y'.

Audio Excel DSP 16 initialization support [Y/n/?]
如果你用Audio Excel DSP16的话, 答'y'. 请看Readme.aedsp16以获得更多资讯.

然後设定程式会问你关於高阶服务方面的问题. 建议对每一项都答'y', 除非你很明白你不会用到这功能才答'n'.

/dev/dsp and /dev/audio support (usually required) [Y/n/?]
回答'n'的话, /dev/dsp及/dev/audio(及A/D及D/A转换装置)就不能用了. 回答'y'吧!

MIDI interface support [Y/n/?]
回答'n'则会让/dev/midixx及使用/dev/sequencer和/dev/music的MIDI连接埠失效. 这选项也会影响MPU-401及General MIDI相容设备.

FM synthesizer (YM3812/OPL-3) support [Y/n/?]
在这请回答'y'.

/dev/sequencer support [Y/n/?]
回答'n'就会让/dev/sequencer及/dev/music失效.

Do you want support for the mixer of SG NX Pro ?
如果你有SoundGalaxy NX音效卡, 想支援它的延伸混音功能的话, 答'y'.

Do you want support for the MV Jazz16 (ProSonic etc.) ?
如果你有MV Jazz16(ProSonic等), 答'y'.

Do you have a Logitech SoundMan Games [Y/n/?]
如果你有罗技SoundMan Games音效卡, 答'y'.

以上问题问完後, 设定程式提示你回答和卡相关的设定问题. 通常只问I/O位址, IRQ及DMA 号码. 对某些卡会要你用一些启始时需要的档案. 这是用在一些必须载入程式(微码)以起动的DSP晶片或微处理器. 有时这写在.h档里, 在编译时加入驱动程式里. 同样, 读Readme.cards中关於你的卡的部份以便了解更多.

最後它会说:

The sound driver is now configured.
Save copy of this configuration to /etc/soundconf [Y/n/?]
(音效驱动程式已经设定完毕.
要不要将设定存到/etc/soundconf [Y/n/?])

正常状况下你会答'y', 这样一来, 今後你重编译核心的话, 可以直接用上次的音效驱动程式设定.

如果你由旧版的音效驱动程式升级, 确定/usr/include/sys/soundcard.h及 /usr/include/sys/ultrasound.h以符号连结连到/usr/include/linux 下的同名档案, 或是它们分别包含#include <linux/soundcard.h>及#include <linux/ultrasound.h>

你现在已准备好, 可以编译及安装新核心了.

4.3. 建立设备档
为了正常的操作, 必须为各音效设备建立设备档. 通常在你装Linux时就已经建好了, 可以用下列的命令快速检查一下. 如果输出结果和下面很像(日期不一样没关系), 那麽设备档差不多是设定正确了.

% ls -l /dev/sdnstat
crw-rw-rw- 1 root root 14, 6 Apr 25 1995 /dev/sndstat

译注: 作者打错了, 是ls -l /dev/sndstat才对

注意有了正确的设备档并不保证一切完美了. 在设备能用以前, 还是要先载入或加进核心驱动程式(稍後再详述).

如果您觉得设备档设错了, 您可以以root身份执行在/usr/src/linux/drivers/sound目录里的Readme.linux档尾部, 那个很短的shell script来重建它们. 另外, 多数Linux套件也提供/dev/MAKEDEV script, 可以作这种用途.

如果您用PC喇叭驱动程式, 请读内附文件, 以决定是否需要建立设备档.

4.4. 起动Linux及测试
您至此应该可以准备起动新核心, 测试驱动程式了. 照著您平时安装及重启动新核心的步骤去做(当然, 保留一份旧核心以防万一).

在起动中, 检查一下有没有类似以下的讯息:(如果讯息卷动太快, 您可以用dmesg 命令回过来查看.)

Sound initialization started
<Sound Blaster 16 (4.13)> at 0x220 irq 5 dma 1,5
<Sound Blaster 16> at 0x330 irq 5 dma 0
<Yamaha OPL3 FM> at 0x388
Sound initialization complete

这应该和您的音效卡及跳线设定(如果有的话)一致.

如果您用可载入模组, 以上讯息就不会显示出来(除非您载入它时, 用``insmod sound trace_init=1 '')

当音效驱动程式载入核心中时, 应该会显示``Sound initialization started ''及``Sound initialization complete''讯息. 如果没有, 表示音效驱动程式没有载入, 这时您应该检查一下目前起动的核心有没有加入音效驱动程式支援.

如果在``Sound initialization started''及``Sound initialization complete ''间没有印出什麽东西, 那表示没有侦测到音效设备. 这最可能的原因是您没有使用正确的驱动程式, 卡没被支援, I/O位址不对或您用了还没有设定过的PnP卡.

驱动程式起动中亦可能印出错误及警告讯息. 在设定完驱动程式後, 重启动时, 注意这些讯息.

再来是检查/dev/sndstat设备档. 读取这个状态档可以得知额外的资讯, 或是音效卡驱动程式是不是正确启动了. 输出□例如下:

% cat /dev/sndstat
Sound Driver:3.5.4-960630 (Sat Jan 4 23:56:57 EST 1997 root,
Linux fizzbin 2.0.27 #48 Thu Dec 5 18:24:45 EST 1996 i586)
Kernel: Linux fizzbin 2.0.27 #48 Thu Dec 5 18:24:45 EST 1996 i586
Config options: 0

Installed drivers:
Type 1: OPL-2/OPL-3 FM
Type 2: Sound Blaster
Type 7: SB MPU-401

Card config:
Sound Blaster at 0x220 irq 5 drq 1,5
SB MPU-401 at 0x330 irq 5 drq 0
OPL-2/OPL-3 FM at 0x388 drq 0

Audio devices:
0: Sound Blaster 16 (4.13)

Synth devices:
0: Yamaha OPL-3

Midi devices:
0: Sound Blaster 16

Timers:
0: System clock

Mixers:
0: Sound Blaster

以上的命令也可能回报错误讯息. ``No such file or directory'' 表示您还没建设备档(参考4.3节). ``No such device'' 表示音效程式没有载入, 或没有连结进核心里. 请回到4.2节以修正之.

如果/dev/sndstat档中, 在``Card config:''段的几行写在括号里 (就像`` (SoundBlaster at 0x220 irq 5 drq 1,5)''), 它表示设备已经设定了, 但是没有侦测到.

现在您应该可以试试放简单的音效档了. 抓□例音效档, 把它丢到设备档来检查.

% cat endoftheworld >/dev/dsp
% cat crash.au >/dev/audio

(确定您没有省略掉大於符号)

注意, 在平时用cat不是放音效档的贴切方法, 这只是为了检查罢了. 去抓合适的放音程式可以做得更好.

只有在/dev/sndstat内的audio devices这段至少列出一个设备的情形下, 以上命令才会有效. 如果这段没列出什麽, 您应该检查一下为何设备没侦测到.

如果以上命令回报``I/O error'', 您可以用``dmesg''命令检查核心讯息的尾部, 在那很可能会有印出错误讯息, 而且经常是 ``Sound: DMA (output) timed out - IRQ/DRQ config error?'' 这个讯息是指驱动程式没有从音效卡得到应该发生的中断. 最有可能的原因是, IRQ和DMA的设定没有作用. 解决这问题的最好方法就是土法炼钢, 把所有这张卡能设到的DMA和IRQ搭配都试试看.

另一种可能原因是驱动程式和卡不相容. 这几乎一定是所谓``声霸卡(Pro/16)相容卡 ''和声霸卡驱动程式搭不起来. 这种状况下您要找出和您的卡能搭配的驱动程式才行.(例如, 可以投书到comp.os.linux.hardware讨论区问问)

一些音效□例档可在 ftp://tsx-11.mit.edu/pub/linux/packages/sound/snd-data-0.1.tar.Z 抓到.

现在您可以试试录音了. 如果您的卡有录音能力, 您可以用以下命令来快速测试一下:

# 从麦克风录进 4 秒声音
EDT% dd bs=8k count=4 < /dev/audio >sample.au
4+0 records in
4+0 records out
# 把刚刚录的放出来
% cat sample.au > /dev/audio

显然您必需要有连接音效卡的麦克风, 还要对著它讲话, 才能试出有没有效. 您也许也需要弄到一个混音程式, 设定麦克风为输入装置, 并设定其录音的增益.

如果以上测试都通过了, 您就有理由相信音效D/A及A/D硬体和软体都很正常. 如果您碰到问题, 参考下一小节.

4.5. 问题与解决
如果您进行了以上部骤, 仍然有问题, 那麽可以检查几个地方. 这些检查由简单到复杂依序排列, 如果检查出问题, 先解决, 再进行下一道检查.

4.5.1. 第一步: 确定您用您自己编译的核心起动.
您可以用核心的日期戳记来识别是不是您编译的那个有支援音效的核心. 您可以用 uname命令来作:

% uname -a
Linux fizzbin 2.0.0 #1 Tue Jun 4 16:57:55 EDT 1996 i386

或显示/proc/version档内容:

% cat /proc/version
Linux version 2.0.0 (root@fizzbin) (gcc version 2.7.0) #1 Tue Jun 4 16:57:55 EDT 1996

如果日期戳记不是您编译核心的时间, 那您用了旧的核心. 您真的重开机了吗? 如果您用 LILO, 是不是有重装呢(平常用/etc/lilo/install)? 如果是软碟起动, 您真的做了新开机片, 并用它开机吗?

4.5.2. 第二步: 确定核心音效驱动程式有编进去.
最简单的方法就是前面提过的, 检查``/dev/sndstat''的输出. 如果有地方不对, 那麽核心设定或建立一定有问题. 再重新设定及建立, 安装新核心的程序.

4.5.3. 第三步: 核心起动时有侦测到您的音效卡吗?
确定核心启动时您的卡有被侦测到. 您应该看过开机讯息了, 如果它卷得过快, 您通常可用dmesg命令叫回来:

% dmesg

或
% tail /var/adm/messages

如果您的卡没侦测到, 就是某一处出问题. 确定那张卡真的装了. 如果那张卡在DOS下工作得很好, 那你就有理由相信硬体是正常的. 不是您把音效卡设错型式, 下错参数, 就是您的音效卡和核心音效驱动程式不相容.

一种可能就是需要特殊DOS驱动程式来驱动的``相容''卡. 试著起动DOS, 载入厂商给的驱动程式, 然後按Control-Alt-Delete暖开机进Linux. 确定卡的I/O位址, DMA及IRQ设定都和DOS一样. 读在音效驱动程式原始码中的Readme.cards档以得到关於设定您的这型卡的提示讯息.

如果您的卡并没有在本文件中列出, 可能是Linux驱动程式没支援的关系. 您可以参考本文末的参考资料来求助.

4.5.4. 第四步: 您能从dsp设备读出资料吗?
试试用前面提过的``dd''命令读取/dev/audio. 这个命令应该不会有错误才对.

如果不行, 那可能是IRQ/DMA冲到, 或某种硬体不相容(设备不为Linux支援, 或用错驱动程式).

还有一个少见的可能是不良的硬体. 可能的话, 在DOS下测试一下, 消去这种可能性.

4.5.5. 要是这些都没用呢?
如果您还是有问题, 这里提供最後几招试试:

小心重读这份HOWTO文件
读本文件後列的参考资料, 特别是Hannu Savolainen的网站, 及相关的核心原始码 Readme档.
到comp.os.linux或其它Usenet讨论区(comp.os.linux.hardware 是个好地方; 因为这儿水量多, 最好在标题栏注明 "sound", 这样适合的专家才会找到它.)
用Web/Usenet搜寻引擎, 智慧型搜寻, 很快就能找到很好的结果. 一个好选择是 http://www.altavista.com.
用最新的Linux核心.(但是只在最後关头才用, 最新的发展用核心可能很不稳)
发封信给音效驱动程式作者
发封信给Sound HOWTO的作者
叫出emacs, 输入Esc-x doctor :-)


New Page 1

标题： ■ The Linux Sound HOWTO -- Linux 音效指引:支援音效的应用软体及常见问题与解答
姓名 ：Jeff_Tranter,
Email：jeff_tranter@pobox.com
地址 ：
转摘 ：http://member.netease.com/

返回

5. 支援音效的应用软体
如果你在Linux下能用音效卡, 我在这里提出一些你可能会想要的应用软体. 你可以查一下Linux Software Map, 网际网路档案库, 或是你的Linux CD-ROM 以找出最新资讯.

你最少会想要以下的音效软体:

音效档档案格式转换软体 (如 Sox)
混音程式 (如 aumix 或 xmix)
音效档播放软体 (如 play 或 wavplay)
MOD 档案播放软体 (如 tracker)
MIDI 档案播放软体 (如 playmidi)

这类工具有文字型式的, 也有GUI型式的. 也有一些比较诡异一点的(像语音分析及辨识), 你可能会想玩玩看.

6. 常见问题与解答
这一节回答经常在Usenet讨论区及通信论坛常被问到的问题.

可以在OSS音效驱动程式的网站看到更多问题的解答.

6.1. 这一堆音效设备档各代表什麽?
以下是最``标准''的设备档档名, 虽然有些Linux套件可能用不太一样的名称.

/dev/audio
一般是连到 /dev/audio0

/dev/audio0
和Sun工作站相容的声讯设备 (只作了部份, 并不支援Sun的ioctl 介面, 只有u-law编码)

/dev/audio1
第二个音讯设备 (如果音效卡支援, 或不只有一张音效卡的话)

/dev/dsp
一般连到 /dev/dsp0

/dev/dsp0
第壹数位取样设备

/dev/dsp1
第贰数位取样设备

/dev/mixer
通常连结到 /dev/mixer0

/dev/mixer0
第壹混音器

/dev/mixer1
第贰混音器

/dev/music
高阶编曲器介面

/dev/sequencer
低阶MIDI, FM, 及GUS存取用

/dev/sequencer2
通常连结到 /dev/music

/dev/midi00
第壹原生(raw)MIDI埠

/dev/midi01
第贰原生MIDI埠

/dev/midi02
第参原生MIDI埠

/dev/midi03
第肆原生MIDI埠

/dev/sndstat
读取时, 显示音效驱动程式的状态

PC喇叭驱动程式提供以下设备:

/dev/pcaudio
和/dev/audio同样

/dev/pcsp
和/dev/dsp一样

/dev/pcmixer
和/dev/mixer一样

6.2. 怎样播放音效档案?
Sun工作站的音效档(.au)可以丢到/dev/audio来放出, 原始取样档可以丢到 /dev/dsp, 虽然这样一般来说会产生很差的输出. 使用像play这样的程式比较好, 而且还能辨别音效档格式, 设定正确的取样率等.

像wavplay或vplay(在snd-util套件中)的程式, 给它WAV档会产生最佳结果. 然而它们无法辨识Microsoft ADPCM压缩过的WAV档. 同时, 旧版的play(在Lsox套件中)对16位元的WAV档处理并不好.

在snd-util中的splay命令如果以手动输入适切的参数, 可以用来播放多数音效档.

6.3. 怎样录制音效档?
可以从/dev/audio或/dev/dsp中读取取样过的资料, 可以转向到档案去. 像vrec这样的程式可以较简单地控制取样率及时间等. 你也需要混音器, 以便选择想要的输入来源.

6.4. 我可以有不只一片音效卡吗?
现在的音效驱动程式允许你装好几片声霸卡, 声霸卡Pro, 声霸卡16, MPU-401 或MSS卡. 装两片声霸卡是可能的, 不过要手动编辑 local.h, 定义SB2_BASE, SB2_IRQ, SB2_DMA 及 SB2_DMA2(有些情形下才要). 也可以同时装一片声霸卡及一片PAS16.

若是你用make config来设定较新的2.0.x版核心的音效的话, 你应该编辑/usr/include/linux/autoconf.h而非local.h. 你会看到几行:

#define SBC_BASE 0x220#define SBC_IRQ (5)#define SBC_DMA (1)#define SB_DMA2 (6)#define SB_MPU_BASE 0x0#define SB_MPU_IRQ (-1)

在它们後面加入几行(数值依照你的系统设定)
#define SB2_BASE 0x330#define SB2_IRQ (7)#define SB2_DMA (2)#define SB2_DMA2 (2)

以下驱动程式不准你装两片卡:

GUS (驱动程式限制)
MAD16 (硬体限制)
AudioTrix Pro (硬体限制)
CS4232 (硬体限制)

6.5. 错误: No such file or directory for sound devices
要建立设备档啊! 请参见前面建立设备档的部份. 如果你确实有设备档, 检查主编号及次编号是否正确. (一些旧一点的CD-ROM Linux套餐可能不会在安装时建立正确的设备档)

6.6. 错误: No such device for sound devices
你的核心并不支援音效驱动程式, 或是I/O位址设定和硬体不一致. 检查你是否用新造的核心开机, 并确认其设定和硬体是一致的.

6.7. 错误: No space left on device for sound devices
如果你没有建立必要的设备档, 然後把音效档朝/dev/audio或/dev/dsp丢, 就会发生这种情况. 这时这些``设备档''其实只是普通档案, 而且把你的磁碟塞满了. 你必须照本文件中建立设备档这一小节的指引去执行那个script.

在Linux 2.0或之後, 当设备开启, 系统却没有足够的RAM时亦会发生. 对每个DMA通道, 音效驱动程式至少需要两页(8K)连续记忆体区块. 这种情型在不足16M的RAM或已经启动很久的系统上可能发生. 要清出一些RAM, 在再开启设备档以前, 先编译及执行以下的C程式也许可行.

main() {
int i;
char mem[500000];
for (i = 0; i < 500000; i++)
mem[i] = 0;
exit(0);
}

6.8. 错误: Device busy for sound devices
一个音效设备一次只能给一个程序用. 问题中, 最可能就是有别的程序正在使用这个设备. 确定的方法之一是用fuser命令:

% fuser -v /dev/dsp
/dev/dsp: USER PID ACCESS COMMAND
tranter 265 f.... tracker

在上例中, fuser命令显示265号程序开启了该设备. 可以选择等它做完或把它砍掉, 这样它就又能使用了. 你应该以root身份执行fuser命令, 这样才会列出除了你以外的使用者.

6.9. 还是逃不了'device busy'的错误!
根据Brian Gough的说法, 使用一号DMA通道的声霸卡会和同样也占用DMA 1的QIC-02磁带机驱动程式相冲, 造成``device busy''错误. 如果您使用FTAPE, 您可能有加进这个驱动程式. 根据FTAPE-HOWTO, QIC-02驱动程式在使用FTAPE上不是必要的; 只有 QIC-117才必要. 重造核心, 使用QIC-117驱动程式, 取消QIC-02, 这样FTAPE及音效驱动程式就能共存了.

6.10. 音效档放到一半就停了
这种症状, 通常是先播放一秒左右, 然後完全停止, 或印出``missing IRQ'' 或``DMA timeout''讯息. 八成是您的IRQ或DMA设错了. 核对一下, 您在核心中的设定是不是和硬体跳线的一样, 而且并没有和别的卡相冲.

另一种症状是声音一直重覆. 这通常导因於IRQ冲突.

6.11. 播放MOD档断断续续
要播放MOD档, 需要可观的CPU能力. 您可能跑太多程式导致系统反应过慢, 无法及时放音. 有下面几种解法:

用较低的取样率, 或只放单声道
把其它执行中程式干掉
买更快的电脑
买更强的音效卡(像 Gravis UltraSound)

如果您有用Gravis UltraSound音效卡, 您应该使用专为GUS设计的MOD播放程式 (如 gmod)

6.12. 编译音效软体时出错
1.0c版以後和以前的音效驱动程式用完全不同且不相容的ioctl()方式. 抓新版的原始码, 或做必要改变, 把它移执到适合新版驱动程式用. 详见音效驱动程式的 Readme档.

也请确定编译应用程式时, 您使用最新的soundcard.h及ultrasound.h. 请见本文开头处里的安装指引.

6.13. 以前跑很好的软体, 却出现SEGV错误
这和上个问题可能是一样的.

6.14. 音效驱动程式有何已知的限制及bug?
看音效程式里附的Readme及CHANGELOG档.

6.15. 关於音效驱动程式的ioctl等, 哪里有记载?
它们有一部份放在现在以草案型式存在的Hacker's Guide to VoxWare. 最新版是第二草案, 可在ftp://nic.funet.fi/pub/OS/Linux/ALPHA/sound 中找到. 注意这目录是``隐藏的'', 不会在目录列表出现. 如果您``cd'' 进去再``dir''就可以发现这些档案.

在写这篇时, 新文件已经可以在4Front Techonlogies的网站上看到了.

另一个来源就是Linux Multimedia Guide, 在参考资料那节有讲.

6.16. 要完全平顺地录放音, 需要多强的CPU才能办到?
这问题不好回答, 它取决於:

使用PCM取样还是FM合成
取样率及样本大小
用哪个程式录放音
音效卡硬体
磁碟传输速率, CPU时脉频率, 快取大小等

一般来说, 任何386机器应该都可以在8位元音效卡上播放音效, 或用FM合成放音乐.

然而, 放MOD档需要可观的CPU资源. 一些实验性的测量显示, 要以44KHz播放,要消耗一颗 486/50 CPU的 40% 能力; 386/25几乎不可能放比22KHz 更高的取样率.(以8位元音效卡, 如声霸卡, 所测得)一些像Gravis UltraSound的卡硬体提供更多功能, 需要的CPU资源就较少.

这些是假设电脑没有在跑其它耗CPU能力的工作.

如果您的电脑有数学辅助处理器(或CPU内部有FPU), 用像sox这样的程式做音效转换或增加效果会快不少. 虽然核心驱动程式本身是没有用到浮点运算啦.

6.17. PAS16和Adaptec 1542 SCSI卡的搭配问题
(以下解释由seeker@indirect.com提供)

Linux只能认出在330(预设值)或334位址上的1542, 而PAS只能将MPU-401模拟设在 330. 即使你用软体消去MPU-401, 如果有东西还在这个预设位址上, 仍然会和1542 相冲. 把1542移到334就什麽都解决了.

另外, 1542和PAS-16都有用到16位元DMA, 所以如果你一面以16位元, 44KHz立体声录音, 一面将档案存到挂在1542上的硬碟的话, 麻烦就来了. DMA会重叠, 导致RAM没有时间充电, 然後就会出现 "PARITY ERROR - SYSTEM HALTED" 的讯息, 您甚至还来不及知道怎麽当的. 更糟糕的是有些QIC-117磁带的协力厂商建议设定汇流排开/关时间, 使1542占汇流排更久. 从Adaptec的BBS或Internet的其它地方抓 SCSISEL.EXE 程式, 减少BUS ON时间或增加BUS OFF时间, 直到这问题完全消失. SCSISEL 会改变 EEPROM 的设定, 所以比在CONFIG.SYS中载入的DOS驱动程式效力更持久, 开机就直接进Linux也有效(不像DOS修补). 又解决了一个问题.

最後一个问题 - 旧的Symphony晶片组剧烈地降低I/O周期时间, 加快汇流排存取. 我所玩过的各种卡中, 除了PAS-16以外, 没有一片卡有出现过任何问题. Media Vision的BBS有个SYMPFIX.EXE可以将Symphony的汇流排控制器的诊断位元调整, 治好这种证状, 但这并不能算有力的保证. 您也许要:

找主机板经销商, 换掉旧版的晶片
换主机板, 或
买别牌的音效卡.

Young Microsystems愿意以$30(美金)的代价为他们制的板子升级; 如果您能讲出谁制的或谁进口的板子, 别的厂商也可能会这样(祝你好运). 据我所知这问题出於ProAudio的汇流排介面晶片; 没有人会花$120买音效卡, 然後把它插在6MHz的AT上. 多数人会升级到25-40MHz的386/486, 而如果设计正确, 至少能承受12MHz以上的汇流排频率. 讲完了, 下台一鞠躬.

第一个问题和你的主机板晶片组, 汇流排速率, 及其它BIOS设定, 还有月亮的圆缺有关.(?) 第二个问题牵涉到您的记忆体充电方式 (隐藏式或同步式), 1542 DMA 频率及汇流排I/O速率(可能有关). 第三个问题, 可以打电话到Media Vision, 问他们哪些Symphony晶片组的慢速设计和他们的卡不相容. 在此警告一下, 我问过的四位``工程师''中, 就有三个头壳坏去. 听他们讲别人的硬体讲得啥一样, 其实他们甚至连自己的都搞不清楚.

译注: 这一段可能和原文意思差很多, 有建议请不吝提供.

6.18. 可不可以同时录放音?
受限於硬体, 在多数音效卡上是不可能的. 一些新卡能支援这功能. 请看在 Hacker's Guide to Voxware中的"bidirectional mode"这一节.

6.19. 我的声霸卡16是设IRQ 2, 可是驱动程式不准我设这个值
在'286及以後的机器, IRQ2中断连接了第二个中断控制器. 它等同於IRQ 9.

6.20. 声霸卡AWE32及声霸卡16ASP有支援吗?
在过去, Creative Labs很不愿意为这些卡出版程式设计资讯. 现在他们已经改变策略, 而在2.1.x核心中也包含了AWE驱动程式了.

6.21. 我离开Linux, 起动DOS, 然後有些软体发声不正常
这在暖开机进DOS後发生. 有时错误讯息会误导您, 以为是CONFIG.SYS档哪里写错了.

多数现在的音效卡有软体设定的IRQ及DMA设定. 如果您的卡在Linux下及MSDOS/Windows 下设定值不一样的话, 可能会造成问题. 有些音效卡不准设新参数, 除非完全 reset. (如把电源关掉再打开, 或使用硬体上的reset钮)

简单对付方法就是按下reset键, 或把开关关了再开, 不要用暖开机(即 Ctrl-Alt-Del).

正解则是确保您在MS-DOS及Linux下都用同样的IRQ及DMA设定 (或乾脆不要用DOS :-).

6.22. 在Linux下跑DOOM出问题
想玩ID software出的DOOM游戏之Linux版的玩家们, 可能对这个有兴趣.

要正确的音效输出, 您必需使用2.90版或以後的音效驱动程式; 它支援了即时的 ``DOOM模式''.

音效样本是16 bit. 如果您用8 bit音效卡, 您仍然可以用一些可在 ftp://sunsite.unc/edu/pub/Linux/games/doom中找到的一些程式, 让声音出现.

如果DOOM动作不流畅, 把音效取消(把sndserver档改名)会有一些改进.

DOOM预设不支援音乐(如同DOS版). musserver程式将增加Linux下的音乐支援. 它可以在ftp://pandora.st.hmc.edu/pub/linux/musserver.tgz 中找到.

6.23. 怎样降低音效卡产生的杂音?
用高品质的屏蔽电缆, 换个插槽插, 可能有助於减低杂音. 如果音效卡有音量调整钮, 您可以试试不同的设定(通常最大声最好)

您可以用混音程式, 将不想要的输入(如麦克风)调成无增益

有些音效卡偷工减料, 没有好的遮蔽及接地, 容易产生杂音

最後, 在我的电脑上, 我发现核心命令列有个选项no-hlt可以降低杂讯. 这个选项叫核心在跑□置回圈时不要用HLT指令. 您可以开机时手动试试, 或在LILO设定档中加上 append="no-hlt"

6.24. 能放音, 不能录音
如果您能放音, 却不能录音, 试试:

使用混音程式选择适当来源(如麦克风)
使用混音程式将该来源的增益调到最大
可以的话, 在MS-DOS下测试, 看看是不是硬体方面的问题

有时录音及放音用的DMA通道是不同的. 这种情况下八成是录音用DMA设定不对.

6.25. 必须先进DOS跑驱动程式, 不然我的"相容卡"没法用
多数情况下, ``声霸卡相容''卡在Linux下若舍声霸卡驱动程式不用而改用别的驱动程式, 会更好用. 多数号称相容(如``16位元SB Pro相容''或SB相容的 ``16位元'')的卡, 它的声霸卡相容模式是提供DOS游戏的相容性所做的. 多数卡有可能被最近的Linux(2.0.1以後)支援的, 自身的16位元模式.

只有一些(通常很旧)的卡必须尝试用声霸卡模式运作. 新卡中只有一个例外, 那就是用 Mwave为主的卡.

6.26. 我的16位元声霸卡相容卡在Linux下只能用8位元模式
号称和声霸卡相容的16位元音效卡其实只和8位元的声霸卡Pro相容而已. 它们有和声霸卡 16不相容的16位元模式, 和Linux音效驱动程式不相容.

也许改用MAD16或MSS/WSS驱动程式後, 您就能用16位元模式了.

6.27. 在哪里找得到Linux的音效软体?
这里有一些好的档案库, 可以搜寻Linux专用的音效应用软体:

ftp://sunsite.unc.edu:/pub/Linux/kernel/sound/
ftp://sunsite.unc.edu:/pub/Linux/apps/sound/
ftp://tsx-11.mit.edu:/pub/linux/packages/sound/
ftp://nic.funet.fi:/pub/OS/Linux/util/sound/
ftp://nic.funet.fi:/pub/OS/Linux/xtra/snd-kit/
ftp://nic.funet.fi:/pub/OS/Linux/ALPHA/sound/

6.28. 音效驱动程式可不可以编译成可载入模组?
最新的核心里的音效驱动程式可以做成可载入模组.

详情请参考:/usr/src/linux/drivers/sound/Readme.modules及/usr/src/linux/Documentation/modules.txt(或/usr/src/linux/README)

6.29. 我能把主控台的哔哔声改用音效卡发出吗?
试试oplbeep程式, 可在 ftp://sunsite.unc.edu/pub/Linux/apps/sound/oplbeep-alpha.tar.gz 中找到.

另一个变种, 叫beep程式, 可在 ftp://sunsite.unc.edu/pub/Linux/kernel/patches/misc/modreq_beep.tgz 中找到.

modutils套件有个□例程式及核心修补, 支援在核心要求时, 执行外部程式, 产生声音.

另外在一些音效卡上, 您可以将PC喇叭输出到音效卡上, 这样所有声音就都由音效卡发出来了.

6.30. VoxWare是什麽?
支援很多Intel为基台的Unix相容作业系统的核心音效驱动程式, 也可以以独立於 Linux核心的套件取得. 在1996年二月以前, 作者称这软体为 ``VoxWare''. 然而不幸的, 这名称已成了VoxWare Incorporated的注册商标, 不能再被使用了. 现在这个驱动程式的新名称叫OSS/Free.

Open Sound System(OSS)是给很多Unix系统用的, 商业版核心音效驱动程式, 由 4Front Technologies出售. 叫做 OSS/Free 的免费版本将继续在Linux系统上以免费型式存在.

更多资讯可在4Front Technologies网站(在http://www.4front-tech.com/) 上看到.

同一个东西, 您可能有听过的名称还有TASD(暂时的无名音效驱动程式)及USS (Unix音效系统)

欲取得更多资讯, 请见4Front Technologies的网页, 在http://www.4front-tech.com/. 我在1997年六月的Linux Journal有写过OSS/Linux的评论文章.

6.31. 有支援随插即用音效卡吗?
到了Linux 2.1版後应该能完全支援随插即用. 现在要让随插即用音效卡能用, 还有不少要做的.

如果您用有Plug and Play BIOS的新Pentium机器, 要小心设定您的卡. 确定您将核心音效驱动程式的I/O位址, IRQ及DMA等设得和BIOS给的一样.

给Linux用, 可用来设定这种卡的随插即用工具是存在的. 您可以在Red Hat的网站 http://www.redhat.com/找到. 它也可能包含在您的Linux套餐中.

如果您在 Windows95 下使用这种卡, 可以用设备管理员来设定卡, 然後用LOADLIN 暖启动进Linux. 确定 Windows95 及 Linux 使用相同的设定参数.

如果您在DOS下用这种卡, 您可以使用声霸卡16PnP卡附的icu公用程式, 在DOS 下设定. 然後用LOADLIN暖开机进Linux. 一样, 确定 DOS 及 Linux 用相同的设定参数.

商业版的OSS音效驱动程式支援声霸卡16PnP, 您可以向 4Front Technologies 购买.

6.32. Sox/Play/Vplay 回报 "invalid block size 1024"
在1.3.67版核心中的改变让(错误的)检查SNDCTL_DSP_GETBLKSIZE ioctl是否传回大於4096的放音软体失效. 在最新的snd-util-3.x.tar.gz套件(在 ftp://ftp.4front-tech.com/ossfree 中的公用程式现已能处理这种状况了. 最新的驱动程式也已修正, 避免配置小於4096 bytes的碎块, 解决了旧公用程式的问题.

6.33. 音效驱动程式为何要用自己的设定程式?
音效驱动程式支援很多不同的设定参数. 驱动程式中的configure 会检查各参数间的相依性. 而核心的设定工具就没有提供这样的功能.

这就是说, 最新的核心部份地允许音效驱动程式使用标准核心设定工具(参见前面 ``设定核心''那一小节.)

6.34. 我载入音效驱动程式模组後,混音设定就被重设了
您可以将音效驱动程式做成可载入模组, 并使用kerneld自动载入及除去. 然而这造成了一个问题 - 当模组重新载入时, 混音器设定又回归预定的值. 对有些音效卡来说, 这会太大声(如声霸卡16)或太小声. Markus Gutschke (gutschk@uni-muenster.de)发现了这问题的解决之道, 在您的 /etc/conf.modules档中加入如下的一行:

options sound dma_buffsize=65536 && /usr/bin/setmixer igain 0 ogain 0 vol 75

这会在音效驱动程式载入後立刻执行您的混音程式(在□例中是用setmixer). dma_buffsize参数没有意义, 但是是必需的, 因为这个命令需要一些命令列的选项. 把上面那行改成您想要的混音及增益设定值.

如果您将音效驱动程式连进核心, 而想在开机後就自动设定音量, 您可以在开机自动执行档/etc/rc.d/rc.local中将混音程式加进去.

6.35. 只有root能录音
在Readme.linux中的script, 会将音效设备档设成仅有root可读, 这是为了填补安全上的漏洞. 在网路环境里, 外面的使用者可以远端连进有音效卡及麦克风的Linux系统并窃听. 如果您不担心这个, 您可以改变这个script中的权限.

在预设的安装法, 一般使用者仍然可以播放音效档. 这不会造成安全上的负担, 反而可以省掉很多麻烦.

6.36. 在IBM ThinkPad上的音效硬体可以支援吗?
关於如何在Linux下使用IBM ThinkPad上的mwave音效卡之资讯, 可在http://www.screamin.demon.co.uk/查到.


New Page 1

标题： ■ The Linux Sound Playing HOWTO 中译版 : 介绍
姓名 ：Yoo C. Chung,
Email：wacko@laplace.snu.ac.kr
地址 ：
转摘 ：http://member.netease.com/

返回

1. 介绍
这份文件是 Sound Playing HOWTO (如何播放声音). 它列出很多声音格式以及用来播放它们的应用程式. 它也列出一些使用在这程式应用程式的工作[hacks]和设备. 还有一些其他与声音有关,但与播放没有直接有关的应用程式. 然而,此文件就 没有 描述如何架设支援声音的 Linux 系统. 请参考 Linux Sound HOWTO 於 Jeff Tranter 取得安装支援声音的 Linux 系统之步骤以及所支援的硬体.

在这儿只处理正常使用者的声音应用程式.换话说, 它只关心一般使用者在声音的应用上所需要知道的事情, 而非奇特的要素像是语音合成,或在 Sound HOWTO 所处理的硬体要素.

1.1. 本文件的版权
只要版权宣告保留下,本文件是可以自由地散播与修改 (如果任何的修改都能通我的话,我会很感激的.) 然而,它不得被摆在任何更进一步的限制下, 而且,修改的文件必须是跟这篇一样的版权. 再者,作者及提供者的来源的附注也必须明确的指出. [Also, credit must be given where due.]

1.2. 所列出应用程式的版权
如果没有任何版权的提及, 那麽该应用程式是在 GNU General Public License 的保护下.

1.3. 哪□可以取得本文件
本文件最近的官方版本可取得在 Linux Documentation Project. 本文件最近的非官方版本可取得在 http://laplace.snu.ac.kr/~wacko/howto/.

本文件(已经过时)的韩文版可取得在 http://laplace.snu.ac.kr/~wacko/howto/Sound-Playing-HOWTO.ks.

本文件的日文版可取得在 http://jf.gee.kyoto-u.ac.jp/JF/JF-ftp/euc/Sound-Playing-HOWTO.euc.

1.4. 回函
我不是无所不知的,而且在此我并没有使用过所有这些应该程式 (有些甚至我还没试) 所以若有些错误是免不了的.再者程式通常持续在发展中, 因此,文件很容易就会过时. 因此,如果你发现任何错误,请来信寄到 我的信箱 指正. 建议或其他与本文件有关事情也都很欢迎.

1.5. 感谢
在这HOWTO文件中提及的所有应用程式作者,还有, 提供声音驱动程式的Hannu Savolainen , 及提供作业系统最根本的Linus Torvalds.

我还要感谢 Raymond Nijssen (raymond@es.ele.tue.nl), Jeroen Rutten (jeroen@es.ele.tue.nl), Antonio Perez (aperez@arrakis.es), Ian Jackson (ijackson@gnu.org), 以及 Peter Amstutz (amstpi@freenet.tlh.fl.us) 所提供的资讯及协助.


New Page 1

标题： ■ The Linux Sound Playing HOWTO 中译版 : 播放各种声音格式
姓名 ：Yoo C. Chung,
Email：wacko@laplace.snu.ac.kr
地址 ：
转摘 ：http://member.netease.com/

返回

2. 播放各种声音格式
声音格式有很多种(WAV,MIDI, MPEG 等). 以下我们列出各种格式与可播放其格式的应用程式.

2.1. MIDI
MIDI 就是 Musical Instrument Device Interface的缩写. MIDI档案通常有延伸档名 .mid. 它们包含编排的讯息, 也就是何时用什麽乐器以何种方式来播放...等的讯息. 根据你的硬体(也许与你用来播放的软体也有关), 播放出来的声音可能很震撼,也可能彻底令人失望.

2.1.1. The adagio package
此包装包含 mp (命令列下的MIDI档播放程式)和 xmp (XView 介面下的 MIDI 档播放程式), 不要与所谓的模组[module]播放程式混淆 xmp). 你将需要 SlingShot 延伸来使用 xmp). 它包含其他程式来播放慢板乐谱.

如果你有 GUS, mp 能够播放MOD档 ( 看章节 Modules , 得到更多与模组有关的资讯).

有些扰人的臭□[bug](当 0.5 版在些硬体上)是声音中断在终端. 也就是,没有照原本 MIDI 档记录的中断声音方式, 而是中断播放音符在最後音符还有一段音程之前. 它已不阻止我使用 mp, 它可能阻止某人使用它在 '即时'[real]工作. 它的安装也相对地较慢.

这包装中并没有提到版权(至少我没找到), 所以我假设它能够自由的再散布与修改. (藉由著作权法的严格解释, 没有东西可以给一个人有权利去做这样的事情, 但我有点疑惑这会是原作者的用意吗.)

它是由 Greg Lee 将 CMU MIDI Toolkit 移植到 Linux 的. (though there was enough added to make this questionable) (lee@uhunix.uhcc.hawaii.edu).

它可以取於 anonymous FTP 在 tsx-11.mit.edu 上的 /pub/linux/packages/sound/adagio05.tar.gz. 这样所包含的二元档是以 a.out 格式 (连结到以前的程式函式库), 而在二元码的档 xmp 设定在 X11R6 环境 (XFree86 3.1.1, libc 4.7.2). mp 的二元码的档在 a.out 环境可以工作很好.

你将需要费点牛力来编译它. 事实上,那也不需要费太多力气啦. 你所要作的就是在 Makefile 内的 SHROBJ 和 XMPOBJ 的尾端加上 -lfl. 这是连结到 flex 程式函式库, 其并不是预先就连结的.然後照安装步骤作.若你想编译 xmp, 不要忘了要有安装 XView 和 SlingShot extensions .

2.1.2. TiMidity
有些人建议这种 实验性的 程式,因为有好的音质 (这是真的,在 Sound Blaster 16上,它比起 mp 好多了, 而且大概不会与具有波形合成器[wavetable]的音效卡像是 GUS 相差太多.) 然而它面临高 CPU 负载. 它播放 MIDI 是藉由将 MIDI 转换成 WAV, 然後再播放 WAV (你也能够转换 MIDI 档成 WAV 档,而不播放它, 如果你想要的话.) 这就是 CPU 如此重要的理由. 它也有可选择性的 ncurses, SLang, TclTk or Motif 介面.

你需要有 Gravis Ultrasound patch files 来使用这个程式. 检视 TiMidity 包含的 FAQ , 获取更多资讯.

作者是 Tuukka Toivonen (tt@cgs.fi).

最新的 TiMidity 版本可取得在 TiMidity home page. 此首页也有连结到小程式库的地方含有 GUS patches.

2.1.3. playmidi
这是一个 MIDI 播放程式,可用来播放 FM, GUS, 及外接 MIDI. 与其它 MIDI 播放程相较下,它应该有较快的安装时间. 它也能够播放 Creative Music Files 格式, Microsoft RIFF files格式, 以及从像 Ultima 7 游戏来的较大之档案.

它有 X 介面和 SVGA 介面. 它也有选项即时播放藉由追纵每个通道 [channel]的所有附注以及目前播放的时刻 (自动的被内含在 xplaymidi 和 splaymidi).

你应该做以下动作

$ splaymidi foo.mid; stty sane

若你要使用 SVGA 介面时. 因为它不适当地重置[reset]终端 tty 模式. SVGA 介面在不久将来可能会被去除.

它的作者是 Nathan Laredo (laredo@gnu.org 或 laredo@ix.netcom.com).

它可取於 anonymous FTP 在 sunsite.unc.edu 上的 /pub/Linux/apps/sound/players/playmidi-2.3.tar.gz.

2.2. Modules
Modules (在电脑音乐中)是数位音乐档, 由一组样本及序列资讯组成, 告知何时播放样本(乐器)在哪个轨调什麽音,可自由选择地表现效果, 举例像是 振动音[vibrato].

它超越 MIDI 的好处是它几乎能包含任何声音(包括人类的语音). 另一好处是它在各平台上听起来都一样,因为取样是在模组中. 缺点是跟 MIDI 比起来档案较大.另一缺点是它没有真正的标准格式 (唯一的真正标准是 ProTracker,而又很多模组并不与其相容). 它起源在 Amiga.

最普通的格式是有副档名为 .mod. 还有很多其它种副档名, 与它们所属的格式有关.

2.2.1. tracker
这是可携带程式(它已经被移植[port]到各种平台) 播放音轨[Soundtracker]和前轨[Protracker]音乐模组. 它使用 16 bit 的立体输出[stereo],而我认为音质很棒. 若你需要一个简单方式减少 CPU 负担,可使用 -mono 选项.

这是可作为礼物的[giftware]程式(引用自原作者). 作者为 Marc Espie (Marc.Espie@ens.fr).

含 Makefile 档的版本已经用力转[tweaked]到 Linux, 它可取於 anonymous FTP 在 sunsite.unc.edu 上的 /pub/Linux/apps/sound/players/tracker-4.3-linux.tar.gz.

2.2.2. gmod
这是 Gravis Ultrasound 卡的音乐模组播放程式. 4/6/8 channel MOD, 8 channel 669, MultiTracker ScreamTracker III (S3M) 都是被支援的格式.

它要求 3.0 版以後的声音驱动程式. 而且当然是 GUS. 你可以需要修改核心来使音量控制成为你所要的.

这是 X 介面.它使用 QT toolkit (需要 0.99 版以後). 查询一下 QT toolkit homepage 取得更多有关 QT 的资讯.

这是可以自由的散布. 它是由 Hannu Savolainen 所作, 和目前维护是由 Andrew J. Robinson (robinson@cnj.digex.net).

它可取於 anonymous FTP 在 sunsite.unc.edu 上的 /pub/Linux/apps/sound/players/gmod-3.1.tar.gz.

2.2.3. MikMod
这个可携带模组播放程式可以播放 XM, ULT, STM, S3M, MTM, MOD 和UNI 格式.( UNI 格式是被 MikMod 的内部格式.) 它有支援 尖啸声[zipped]的模组档. 它使用 16 bit 立体声音输出. 若你要减低 CPU 负担,可加上 -m 选项(单端输出).

Unix 版本使用 ncurses 或 Tcl/Tk 作为其介面. 它可能使用成程式函式库[library],不仅是独立程式而已.

它的原始作者是 Jean-Paul Mikkers (mikmak@via.nl). 它目前是由 Jake Stine (dracoirs@epix.net)来维护. 这是共享软体, 如果你要使用在商业上,那麽你必须注册. 你也必须取得允许才可在商业上的再散布 (非商业上的再散布不需要取得允许).

这可以取得在 MikMod home page.

2.2.4. xmp
这是个 模组播放程式 (不要与 Adagio's xmp 目混淆), 它可以播放 MOD, S3M, STM, 669, 和 XM 模组 (其他格式也被支援,但仍在实验阶段或未完成) 在具有波形合成器[wavetable synthesis]的音效卡 (GUS 或 SoundBloaster 32AWE)上或在具有 SoftOSS (驱动程式可做软体混音)的系统上. 不久的将来,一般的 DSP 输出也将会被支援.

xmp 的 X 前端程式也可以取得了.

作者是 Claudio Matsuoka (claudio@brasil.enemy.org) 和 H. Carraro Jr.

这可取得在 xmp home page.

2.2.5. s3mod
这程式播放 4/6/8 轨的模组和 Scream Tracker 3 模组. 它藉由内定的 22000 Hz 取样频率的使用 8 bit 单端输出[mono]. 你可以使用 -s 选项来驱动立体音[stereo], -b 来驱动 16 bit 输出, 和 -f 来设定取频率.然而,声音输出比 tracker 糟 (有点杂讯), 所以我建议使用 tracker 取代 s3mod 来播放原始 MOD 档 (除非你有不够力的机器).它相较於 tracker 有远小於 CPU 负载.

该版权为Daniel Marks 和 David Jeske (jeske@uiuc.edu) 所有, 但你能对它做任何处理 (除了你不能宣称你所写外).

它可取於anonymous FTP 在 sunsite.unc.edu 上的 /pub/Linux/apps/sound/players/s3mod-v1.09.tar.gz.

2.2.6. mod
这个 beta 程式播放 MODs (15/31-乐器,到 32 种声音), MTMs, ULTs 和 S3Ms 在 Gravis Ultrasound 卡上.它也能用来包装模组, 若你有安装 gzip, lharc, unzip, 和 unarj . 它不能播放 Powerpacked 模组或某些 Amiga 作曲者包装的模组 ["PACK" signature].

这要求至少 3.0 版的声音驱动程式. 它在 2.90-2 版以前的声音驱动程式 不会 正常工作. 文字介面要求 ncurses. 还有包含使用 Tcl/Tk 的 X 介面.

作者是 Mikael Nordqvist (mech@df.lth.se or d91mn@efd.lth.se).

它可取於 anonymous FTP 在 sunsite.unc.edu 上的 /pub/Linux/apps/sound/players/mod-v0.81.tgz.

2.2.7. nspmod
这是 alpha 模组播放程式,它可以播放 MTM, S3M, 和 MOD 模组. 它是企图成为模组播放程式在音效卡上没有 DSP 下. (不要与 Creative Labs 公司宣称的 DSP 相混淆.) 它稍微占用 CPU 负担, 和 tracker 比较起来相似.

它有项特色是可让你自己想要的模组重覆[modules loop]. 重覆次数能够藉由使用 -l 选项来限制. 它只使用 8 bit 声音输出(当在 0.1 版时).

作者是 This was written by Toru Egashira (toru@jms.jeton.or.jp).

它可取於 anonymous FTP 在 sunsite.unc.edu 上的 /pub/Linux/apps/sound/players/nspmod-0.1.tar.gz.

2.2.8. yampmod
这个 alpha 程式是被设计使用最小 CPU 资源,来播放 4-channel 模组. 它 不是 被设计产生高音质. 所以产生的唯一声音输出是 22 kHz 单端输出[mono]. 再者,这输出并未达它应有的清淅程度,表现出它是 alpha 版.

作者是 David Groves (djg@djghome.demon.co.uk).

这可取於 anonymous FTP 在 sunsite.unc.edu 上的 /pub/Linux/apps/sound/players/yampmod-0.1.tar.gz.

2.3. MPEG 音流
MPEG 是标准解读在数位储存设备上之影像及相关声音编码. MPEG 通常就会联想到影像,而该标准的声音部分可被分开来使用. 该标准的声音部分定义成三种层次, layer I, II, 与 III. 能够解码较高层次的播放程式也能解码较低层次. (举例,layer III 的播放程式能够播放 layer II的档. 而 layer I MPEG 声音档通常有副档名 .mpg (所以若有一个档是这样的副档名,其不能被 MPEG 影像播放程式来播映, 它大概是音流[audio stream].), layer II 通常有副档名 .mp2, 而 layer III 通常有副档名 .mp3. 这种声音压缩非常好. 一个 2 megabytes 的 layer II MPEG 声音档大概能绷紧自一个 25 megabytes 的自然 PCM 取样档, 且保有一样的品质.

2.3.1. mpg123
这个 beta 程式是播放 MPEG 音流很有效率, 它支援 layers I, II, and III.它是从很多原始程式所建立的程式码. 它可以直接播放及时的由 HTTP 读到的音流. (换句话说,某人可以直接透过全球资讯网来播放 MPEG 音流.)

主要作者是 Michael Hipp (Michael.Hipp@student.uni-tuebingen.de). 它的未修改的形式可以免费的使用,散布於非商业用余. 包含免费软体的收录 (像 FTP 伺服器的 CD-ROM 档案资料拷贝[images] 明确地的允许.

它的最新版本可取於 Oliver Fromme's mpg123 page.

2.3.2. maplay 1.2
此 MPEG 声音流播放程式只支援 layer I 和 layer II 音流, 而缺少支援 layer III 音流. 在 Linux,它只支援 16 bit 的音效.

它很强烈要好的 CPU, 它花了 55% 的 CPU time 在 60MHz Pentium. 在 66MHz 486上,它的输出会令人无法忍受的,因为 CPU 无法赶上声音. 若这发生在你那,你设法播放以只用音流的单边播放 (使用 -l 或 -r 选项)取代内定的立体音质.

为了要顺利编译,在其档案中有些改变是需要的. 换句话说,你需要加以下几行到 configuration.sh 所起始的档案中.

#! /bin/sh

作者是 Tobias Bading (bading@cs.tu-berlin.de). maplay 1.2 可取於 anonymous FTP 在 ftp.cs.tu-berlin.de 上的 /pub/multimedia/maplay1.2/maplay1_2.tar.

2.3.3. maplay 1.3b
这是非官方版版本(换句话说,不是原作者所作的 maplay 1.2, 所以它能跑比较低 CPU 负载. 它主要藉由使用事实上工作在 SPARC 以外的其他平台上的 u-law output 来达成. 注意的是它内定使用 u-law output, 所以声音品质是比较差的.

此改修改版是 Orlando Andico 所作 (orly@gibson.eee.upd.edu.ph).

这可取於 anonymous FTP 在 sunsite.unc.edu 上的 /pub/Linux/apps/sound/players/maplay-1.3b-Linux.tar.gz.

2.3.4. maplay3
这播放程式是从 maplay 1.2 改编来的. 它加入支援 MPEG Layer 3 声音流.目前它似乎有些臭□在播放时 (你可以听到一些刺耳的杂讯). 你可以调整[twid.dle]选项来解决这个问题.

此修改版是 Timo Jantunen 所作. (timo.jantunen@hut.fi 或 jeti@cc.hut.fi). 它是可以免费的使用,但用来赚钱则不被允许. 然而,我完全不确定这版权的有效性,因为原有的 maplay 是在 GNU General Public License 下,而 GNU General Public License 是不许改编版本能有不同的版权宣告.

它可取於 anonymous FTP 在 sunsite.unc.edu 上的 /pub/Linux/apps/sound/players/maplay3.tar.gz.

2.3.5. splay
这 beta 播放程式是另一个从 maplay 1.2 改编来的 (事实上,它是 maplay 1.2+ 所改编的. 而 maplay 1.2+ 是从 maplay 改编到 MS Windows 上唯一的版本.) 它加入支援 MPEG Layer 3 音流. 它也能够播放 WAV 档. 它还能够跨过 HTTP 连线接收来播放音流.

splay 的另一项特色是它能被使用成一程式函数库 (在LGPL下), 所以它可以让其他程式使用. 它也设法改善表现,藉由使用绪[threading](如果你需要 pthread 来使用这个特色) 和一些协调整合[inline assembly].

splay 使用命令列介面和选择性的 X 介面 (它使用 QT).

若在编译後,它没有正常工作 (e.g. 它发生 segmentation faults), 试著不用绪来编译它.

作者是 Jung Woo-jae (jwj95@eve.kaist.ac.kr).

它可取得在 splay's home page.

2.3.6. Sajber Jukebox
这个程式是 MPEG 图形介面的声音播放程式.它是建设在 splay 上, 它包含支援 MPEG audio layers 到 III. 它也能播放及时从 HTTP 上读取的 MPEG 声音流.它也很容易设定.

它使用 QT toolkit (至少 1.2版以上是需要的). 它也使用LinuxThreads 程式函数库 (此二元码档[binary]只正常工作在 0.5版).

作者是 Joel Lindholm (wizball@kewl.campus.luth.se).

最新版可取之於 anonymous FTP 在 kewl.campus.luth.se 上之 /pub/jukebox.

2.3.7. amp
此 beta MPEG 声音播放程式只支援 MPEG Layer 3 音流. 它能够直接播放在音效卡上,而且它能输出到自然的 PCM 或 WAV 档. 这也占相当大的 CPU 负载 (大约在 133MHz Pentium 上要 60% ).

作者是 Tomislav Uzelac (tuzelac@rasip.fer.hr). 它可以免费的使用,散布, 只要它不要在未经允许下商业上贩售(虽然如此, 将其包含在含有免费软的 CD-ROM 上,明确的被允许的).

它可取於 anonymous FTP 在 ftp.rasip.fer.hr 上的 /pub/mpeg/amp-0.7.3.tgz.

2.3.8. XAudio
这个 alpha 程式函式库是被写成快速完成 MPEG 音流解码程式函式库到各种 GUI 前端程式. 它支援 MPEG audio layers I, II, 和 III.它能够随机存取位元流[bitstreams]. 命令列介面被涵括进来. 而 Motif (Lesstif) 前端程式也被涵括在 Linux 的版本中.

这是由 Gilles Boccon-Gibod, Alain Jobart 和其他人所作的. 连接到此函式库的前端程式也可免费的下载. 而函式库本身必须要被授权使用 (原始码和二元码程式的授权是可以取得的).

连接到此函式库的前端程式可以取得在 XAudio home page.

2.3.9. Layer 3 Shareware Encoder/Decoder
事实上,这是种转换器,它能转换 MPEG Layer 3 音流到 WAV, AIFF, SND, AIFC, 或是自然的 PCM 取样档. Linux版本并没有直接输出声音到音效卡上. 某人必须先将其转成其他格式.

然而,当你设法去播放使用 sox 的转换档,你大概将会有杂讯, 因为在 PCM取样上,字的顺序并不正确 (至少在 Intel 平台上是这样). 你必须给予 sox 这个选项 -x 来解决这个问题. 但有些播放程式无法被告知字顺序是错的,所以你可能不必去担心这个问题.

若你有比较快的电脑 (大概至少要 100Mhz Pentium), 那麽你能试试直接播放 MPEG Layer 3 音流, 而不需要先转成其他格式声音档,像以下例子(这例子假设你正使用 sox 且播放 44.1kHz 立体取样.)

$ l3dec foo.mp3 -sto | play -t raw -x -u -w -c 2 -r 44100 -

-r 之後的数字是音流的取样率,而在 -c 之後数字则是与它是 mono 或 stereo (甚至或 quad)有关. 若这看起来太复杂,你能够使用像 shell script 或 alias 的东西.

这是共享软体,版权属於 Fraunhofer-IIS. 在 x86 系统的Linux上之展示版可取之於 anonymous FTP 在 ftp.fhg.de 上的 /pub/layer3. 展示版只能转换 layer III 音流.

2.4. WAV
从 sox 手册页上引述:

这出现非常相似 IFF档,但不完全一样. 它们是原生的 Windows 3.1 上音乐档. 明显地, Windows 3.1 是如此令人难以相信它的重要性, 对於电脑工业上,它明确的必须要有它自己拥有的声音格式.

它通常有副档名 .wav.

也请看章节 sox 和 bplay 以取得更多除了这样所列之外的 WAV 播放程式.

2.4.1. wavplay
这程式支援播放和录制 WAV 格式. 它使用锁定[locking]所以一次中只能有一声音被播放. 它的锁定能力也能够使用在分离於声音声音的播放能力.

除了 command-line 介面,它也有 Motif 介面,其可与 Lesstif 来配合使用.

原始作者是 Andre Fuechsel (af1@irz.inf.tu-dresden.de), 但再被发展至成形的作者 Warren W. Gay (bx249@freenet.toronto.on.ca or wwg@ica.net).

它可取於 anonymous FTP 在 sunsite.unc.edu 的 /pub/Linux/apps/sound/players/wavplay-1.0.tar.gz.

2.5. 其它东西
这节列出播放声音格式的东西,其不值得各自独立成一节 (换句话说,唯一播放程式可取得的格式), 或是一个播放程式就能播放比较多的格式.

2.5.1. sox
这程式事实上是个转换器,也就是它转换一种声音格式到另一种. 然而有些版本的 sox, 当采用 play, 来播放声音 ( 在 Sound HOWTO 中的 play 应用程式大概会参照到这). 它支援自然[raw]的 (没有标头的)二元吗及文字的资料, IRCAM Sound Files, Sound Blaster .voc, SPARC .au (w/header), Mac HCOM, PC/DOS .sou, Sndtool, 和 Sounder, NeXT .snd, Windows 3.1 RIFF/WAV, Turtle Beach .smp, CD-R, 以及 Apple/SGI AIFF 和 8SVX 格式.

在1.3.6x kernels的某些地方, 你可能必须做一些改变在某个档中, 使得它能直接播放声音.换句话说,你必须改变 sbdsp.c 的 179 行,从

if (abuf_size < 4096 || abuf_size > 65536) {

变到

if (abuf_size < 1 || abuf_size > 65536) {

但然後再做一次.你可以不必这样做.这样做将不会断掉任何东西.

著作与版权属很多人, 而且可用在各种用途.

它可取於 anonymous FTP 在 sunsite.unc.edu 上的 /pub/Linux/apps/sound/convert/Lsox-linux.tar.gz.

较近的版本是由 Chris Bagwell 所作 (tt/cbagwell@sprynet.com/) (建立在原始 sox 的最新 gamma 版本, 而且包含以上修正) 可取於 anonymous FTP 在 sunsite.unc.edu 上的 /pub/Linux/apps/sound/convert/sox-11gamma-cb3.tar.gz.

2.5.2. bplay
这是 beta 程式可以播放自然的[raw]声音, WAV, and VOC 档. 它也可以录制这些档.它使用各种技巧以取得尽可能的最高速, 使得既使在慢机器上能让吾人尚可接受的执行. 其中一项技巧是要求安装的程式是setuid root. 偏执狂的希望使用这程式可以想去使用 Ian Jackson (ijackson@gnu.ai.mit.edu)所做的 Debian package , 其关闭需要设 setuid bit 的这种特色.

作者为 David Monro (davidm@gh.cs.usyd.edu.au).

它可取於 anonymous FTP 在 sunsite.unc.edu 上的 /pub/Linux/apps/sound/players/bplay-0.96.tar.gz.

2.5.3. SIDPLAY
这程式模拟 Commodore 64 的声音介面设备晶片 [Sound Interface Device chip] (MOS 6581,一般叫它 SID) 和 微处理器单元 (MOS 6510). 所以它可以载入与执行 C64 机械码的程式,它产生音乐或声音. 一般而言,这些是独立码和资料片断,它已经是从游戏和宣传程式抓取[ripped] 下来的,和已经被直接从 C64 转过来的.

它内定使用命令列介面. 也有 Tk 和 QT 介面可分别取得在主要的包装[package]内.

它是由 Michael Schwendt (sidplay@geocities.com) 所维护.

它可以取得在 SIDPLAY's home page.

2.5.4. RealAudio Player
这程式让你听到一种专有格式的声音,其能够即时跨过网际网路, 而不需要先下传整首声音档.它能够单独使用, 但它事实上是想要搭配浏览器(最清楚支援的是 Mosaic 和 Netscape)使用. 在没有 X 下,它不能使用(你不能用它来搭配文字操作模式下的 Lynx 使用).

这程式是由 Progressive Networks, Inc. 所作. 它不可以再散布,修改...等. 看一下其版权,就会正确详尽知道你能做什麽. 它可以免费被取得在 RealAudio home page.

2.5.5. cat
某人也许会想说 cat ,有点滥用的连结工具,是怎麽处理播放声音. 我将透通一个例子,来展示它的用途.

$ cat sample.voc > /dev/dsp
$ cat sample.wav > /dev/dsp
$ cat sample.au > /dev/audio

处理一个 .au 档的 cat 到 /dev/audio 通常将会正常工作,而且若够幸运的使一个档(在你的平台上) 有正确的位元组顺序...等,使用 PCM 取样(像是 .wav or .voc) 到 /dev/dsp 之声音档的 cat 甚至可能听起来正确.

那不是 cat 的完全没什用的用途.它可能是有用的,举例来说, 如果有一个声音档,而你的所有程式没有一个认得它,而你知道它使用 PCM 取样,那麽你也许能得到一个非常接近的想法在其听起来像是这种方式 (如果你很幸运的话).


New Page 1

标题： ■ The Linux Sound Playing HOWTO 中译版 : 其他实用处理声音的应用工具
姓名 ：Yoo C. Chung,
Email：wacko@laplace.snu.ac.kr
地址 ：
转摘 ：http://member.netease.com/

返回

3. 其他实用处理声音的应用工具
这节并没有实际处理播放声音档的事.而是,收集一些处理声音的工具, 你将会发现蛮有用的.

3.1. volume
这是一个简单命令列介面来控制音量(它还能做什麽?) 在包装中,它还有一个分开的程式,拥有 Tcl/Tk 介面, 来控制音量和播放 .au 声音档. 一个非常简单的 Tcl/Tk CD 播放程式也包含进去.

这是免费软体,是 Sam Lantinga 所写的. (slouken@cs.ucdavis.edu).

它能取於 anonymous FTP 在 sunsite.unc.edu 上的 /pub/Linux/apps/sound/soundcard/volume-2.1.tar.gz.

3.2. Sound Studio
这是 Tcl/Tk 写的应用程式,可支援播放,录制, 以及编辑使用 sox 的数位声音.它在发行版本中就包含有 sox 避免相容性的问题.

作者为 Paul Sharpe and N. J. Bailey (N.J.Bailey@leeds.ac.uk). 它可以免费使用及再散布,若你有寄张明信卡的话.

它可在 Sound Studio's home page 找到.

3.3. Tickle Music
这 beta Tcl/Tk 程式是一个音乐档浏览程式, 它允许你播放各种声音格式,只要你系统中有适当程式可以播放的. 内定的 gmod 是用来播放 MOD 档,及 mp 则是播放 MIDI 档 (你可以改变程式原始码来使用其他程式).

作者及版权归属是 Shannon Hendrix (shendrix@pcs.cnu.edu or shendrix@escape.widomaker.com).

它可取於 anonymous FTP 在 sunsite.unc.edu 上的 /pub/Linux/apps/sound/players/tmusic-1.0.tar.gz.


New Page 1

标题： ■ 中文 UPS Howto : 简介
姓名 ：Harvey J. Stein,
Email：abel@netvision.net.il,
地址 ：Berger Financial Research, Ltd.
转摘 ：http://member.netease.com/

返回

1. 简介
本 HOWTO 文件包含了如何连接 UPS 到执行 Linux 的电脑上。其想法是以适当的方式将二者相连接，使得 Linux 可以在电源断电以及 UPS 的电池耗光前安全地关机。

其中还包括了一些可帮助您建立上述连线的软体，以及详述该连线的运作方式。假如您能找到一个已设定好可以使用您的 UPS 的软体，则後者的说明对您来说通常是不需要的。否则的话，您必须仔细地阅读它。

在相当的程度上本文件已比起我在三年前所撰写的原文多出了很多内容。所有的基本资料都可以在 SysVinit 中的 powerd man page □找到。尽管在三年前有人可能无法在一般的 Linux 套件中找到这篇 man page ，但我不相信今後还会再发生这样的情况。

除此之外，当我第一次撰写这篇 Howto ，除了 powerd.c 以外并没有其他的软体可以做为 Linux/UPS 之间的沟通与控制。而今日我们则可以在 Sunsite's UPS directory 下找到一大堆 UPS 控制软体。

然而，受到 RedHat 即将重新印制 Dr. Linux 的激励，我也开始重写这篇 UPS Hotwo 。为什麽呢? 嗯 ....

我想，额外的一般性概观将能有助於了解如何将 Linux 系统连上 UPS ，即使它只是另一份内容相同的文件。
这篇 HOWTO 算是各种特殊 UPS 资料的储藏库 --- 在这儿有许多尚未被整合入一般软体套件中的 UPS 资讯。
这篇 HOWTO 包含了一些在其他文件中找不到的额外详细资料。
一些可以在 Sunsite's UPS directory 找得到的 UPS 软体似乎说明文件都少得可怜。您也许需要先阅□本文以了解如何使用他们。
现在这件事似乎已有了自己的生命了。当一篇 HOWTO 文件因而诞生时事实就更加明显了。另一个比较不明显的事实是当它必须上床睡觉时。 (译注: 这一句笑话我看不懂啦! 唉! 翻得好烂 ....)

1.1. 有贡献的人们
我永远都会感激那些曾经给我帮助、给我建议、以及给我特殊的 UPS 资料的人们。其中包括了:

Hennus Bergman (hennus@sky.owl.nl)
Charli (mefistos@impsat1.com.ar)
Ciro Cattuto (Ciro Cattuto)
Nick Christenson (npc@minotaur.jpl.nasa.gov)
Lam Dang (angit@netcom.com)
Markus Eiden (Markus@eiden.de)
Dan Fandrich (dan@fch.wimsey.bc.ca)
Ben Galliart (bgallia@orion.it.luc.edu)
Danny ter Haar (dth@cistron.nl)
Christian G. Holtje (docwhat@uiuc.edu)
Raymond A. Ingles (inglesra@frc.com)
Peter Kammer (pkammer@ics.uci.edu)
Marek Michalkiewicz (ind43@sun1000.ci.pwr.wroc.pl)
Jim Ockers (ockers@umr.edu)
Evgeny Stambulchik (fnevgeny@plasma-gate.weizmann.ac.il)
Clive A. Stubbings (cas@vjet.demon.co.uk)
Miquel van Smoorenburg (miquels@cistron.nl)
Slavik Terletsky (ts@polynet.lviv.ua)
Tom Webster (webster@kaiwan.com)

请注意下方的 email 地址是自电子信件中节录下来的，它们也许会过期。而上方的 email 地址可能也会过期，但有些是比起下方还要新的。

除此之外，如果因我的疏忽而在上表中漏掉任何一位有贡献者的话，我真的很抱歉。请您 email 给我，我会将您的名字加上去。

1.2. 请特别注意
我真的无法保证这些东东对您会有效。连结 UPS 到电脑上是一件相当有技巧的工作。其中之一或二者都有可能会烧掉、爆炸、著火、或者是引发第三次世界大战。除此之外，我只有对 Advice 1200 A UPS，以及 5kva Best Ferrups 有直接的经验，而且我也不需要自己做一条讯号线。所以，请注意! 尽可能地收集您的 UPS 的所有资讯。请先考虑清楚，不要随便相信任何您在本文中或其他地方所读到的内容。

另一方面，我正尽可能地收集所有使我的 UPS 可以工作的方法，其中有很多不是来自制造商的资讯，所幸也没有烧掉任何东西，所以这些都是可能的。

1.3. 其他的文件
本文并没有包含所有 UPS 的一般特性与能力。如您需要这类型的资讯，你可以看看 The UPS FAQ。这篇文件同时也可以在 ftp://rtfm.mit.edu/pub/usenet-by-hierarchy/comp/answers/UPS-faq 中找到。它是由 Nick Christenson (npc@minotaur.jpl.nasa.gov) 所维护的，但看起来好像自从 1995 年以後就没有再重写了。如果您要 email 给他，他希望您可以在信件的 Subject 那一行放入 UPS 或 UPS FAQ 或其他相关的词句。

有许许多多的 UPS 制造商在网路中萌芽。其中有些确实在他们的网页中提供了有用的资讯。您可以在 The UPS Directory 中找到这些 UPS 制造商的网页简表。该网站也包含了 UPS FAQ 这篇文件。


New Page 1

标题： ■ 中文 UPS Howto : 请注意已过时的资讯
姓名 ：Harvey J. Stein,
Email：abel@netvision.net.il,
地址 ：Berger Financial Research, Ltd.
转摘 ：http://member.netease.com/

返回

2. 请注意已过时的资讯
我刚刚发现底下有一些资料已经过时了。其中来自 the latest sysvinit package 的 init daemon 比起我所能描述的还要简陋。尽管看起来目前的版本与该程式完成时的版本相容，但当中仍然有一些对 UPS 相当重要 的支援没有文件说明。

底下所简述的控制机制只能让 powerd 送给 init powerfail 或 powerok 这两个讯息之一而已。init 接到 powerfail 讯息时执行一个命令，而当它接到 powerok 时则执行另一个命令。这将导至 powerd 在处理低电力讯号及其他特殊状况时产生逻辑上的复杂性。

较新版本的 init (像是 2.58 版) 就比较精良了。它可以在接到讯号时选择 三个 script 中之一来执行。如此一来， init 可以在接到电源断电讯号时执行 powerfail script ，可以执行一个 powerfailnow script 做立即的关机 ，以及一个 powerok script 来停止任何正在进行的关机动作。这样比起要我们自行处理这些机制要简单多了。

尽管这□大部分的讨论仍假设使用旧的 init 通讯方式，我已加入了两个新的章节来描述新的连线方法。这两个章节是 Trust Energy Protector 400/650 及 APC Smart-UPS 700。其中前者特别详细。二者都包含了一个 powerd.c 档，它可以在收到低电力讯号时送讯号给 init 以进行紧急关机，就像是 /etc/inittab 档中那几行所写的一样。其馀的，我所能告诉您的就只有请您看看 init 的原始码了。

就我所知的，在以下所列的 UPS 软体套件中有许多也采用了新式的连线方式。


New Page 1

标题： ■ 中文 UPS Howto : 聪明的与单调的 UPS
姓名 ：Harvey J. Stein,
Email：abel@netvision.net.il,
地址 ：Berger Financial Research, Ltd.
转摘 ：http://member.netease.com/

返回

3. 聪明的与单调的 UPS
UPS 大至分为两类，我分别叫它们 ``聪明的 (Smart)''与 ``单调的 (Dumb)''。二者之间的差异在於我们能自 UPS 获得多少的讯息以及我们能够对 UPS 下达多少命令。

单调的 UPS

藉由序列阜 (serial port) 与电脑相连。
使用 modem 控制线与电脑相通讯。
可以在电力是否消失时给电脑送讯号。
也许可以在 UPS 的电力是否偏低时通知电脑。
电脑通常可以送讯号给 UPS 让它将自己关闭。

聪明的 UPS

藉由序列阜 (serial port) 与电脑相连。
以一般的资料传输线经序列阜与电脑沟通。
多半有一组命令语言可以让电脑自 UPS 那得知各式各样的资讯，以设定各种运作参数给 UPS，同时也操作 UPS (像是将它关掉)

通常聪明的 UPS 都可以在单调的模式下操作。这是很有用的，因为就我所知，最常见的聪明 UPS (像是 APC) 制造商只愿意透露他们的 UPS 通讯协定给那些签署了绝不□露机密同意书的人们。

就我所知，只有 BEST 公司所制作的 UPS 可以很容易地在 Linux 下运作。除此之外， BEST 公司还有完整的文件说明了他们的 UPS 的聪明模式 (以及单调模式)。 BEST 公司也提供了可以与他们的 UPS 沟通的程式的原始码。

所有列在 软体 章节的软体皆可在单调模式下与 UPS 沟通。这些都是您真正需要的。有些软体则宣称说可以在聪明模式下操作 ARC UPS ，但我不知道他们是如何获准而做到的。一个完整的程式运作会跳出一个视窗，□头包含了有趣的度量表，代表著各式各样的 UPS 统计资料，像是负载程度、内部温度、断电记录、输入电压、及输出电压 ...... 等等。看起来似乎 smupsd-0.7-1.i386.rpm 程式 (见 软体一节) 可以做到这些。对於其他的软体我则不敢确定。

以下的内容我将尽量□限於如何调整您的系统使其能与单调模式下的 UPS 一起工作。而对聪明模式的 UPS 而言，基本想法是一样的，但需要什麽样的 powerd 参与工作以及您需要什麽样的讯号缆线是随著 UPS 而有不同的。


New Page 1

标题： ■ 中文 UPS Howto : 软体
姓名 ：Harvey J. Stein,
Email：abel@netvision.net.il,
地址 ：Berger Financial Research, Ltd.
转摘 ：http://member.netease.com/

返回

4. 软体
基本上，您所需的就是一个可以工作 powerd 程式档，通常您可以在 /sbin/powerd 下找到它。它通常是属於 SysVinit 系统的一部分。就我所知，所有近期版本的 Linux 系统都包含了一个较新版的 SysVinit 。但在非常旧的版本则不包含 powerd。

唯一的问题是您的讯号缆线可能不能与您的 powerd 设定相配合，在这情况下您必须重新做一条讯号缆线，或者是找来一份 powerd.c 档并修改它使得它能配合您的讯号缆线工作。或者是，您可以使用以下所列的软体，大部分的软体允许您做适当的设定以配合您的讯号缆线。

就像刚刚所提到的，除了使用 SysVinit 的 powerd 之外您也可以拿现有的任何一种 UPS 软体来用。目前有许多软体可以帮助您建立电脑与 UPS 之间的连线。在我第一次写这篇 HOWTO 时都还没有这些软体，而这也是为什麽我要写这篇 HOWTO 。事实上，您也可以从中选一个软体来用，而完全忽略这篇 HOWTO 的内容。

在 1997 年 3 月 15 日左右， Sunsite 的 UPS 目录 下可以找到一大堆的软体可用。而在其他的网站似乎也有 UPS 控制软体可以找到。以下是我目前所找到的 (除了其中两个以外，其他都是在 sunsite 找到的):

Enhanced_APC_BackUPS.tar.gz
这是一个可以控制 APC 聪明模式的 UPS 。看起来基本上是依据 BUPS Howto (包含了这一篇) ，但也好像有一些低电力警告的支援。

Enhanced_APC_UPSD-v1.4.tar.gz
在 .lsm 档中提到它从前就是上一个所提到的软体，但事实上它正是将上一个软体的 .tar.gz 档包装在它的 tar.gz 档之内。那篇文件说明有问题，看起来它似乎同时支援 APC UPS 的聪明与单调模式，但我不敢确定。

apcd-0.5.tar.gz
这是另一个可以控制 APC UPS 於聪明模式下运作的软体。看起来似乎可以支援主/从模式 (也就是说，当停电时可以由一台机器送讯号给另一台机器叫它关机) 。看起来似乎是使用了 UPS 的聪明模式，不像是经由 modem 的讯号线来控制。

smupsd directory
又是另一个控制 APC UPS 的软体。看起来可以在非常聪明 (tm) 模式下操作 UPS 。举例来说，它包含了一个 Java 图形介面的 UPS 监控工具程式。该目录下包含了已编译好的 RPM 形式的软体 (ftp://cms180.cmsnet.com/pub/smupsd/smupsd-0.7-1.i386.rpm) ，一个原始码 RPM 格式档 (ftp://cms180.cmsnet.com/pub/smupsd/smupsd-0.7-1.src.rpm) ，以及一个□我档案 (ftp://cms180.cmsnet.com/pub/smupsd/smupsd-0.7-1.README) 。

genpower-1.0.1.tgz
一个一般化的 UPS 控制软体。它包含了很多种 UPS 的设定 --- 两种 TrippLite 的设定，以及三种 APC 的设定。同时也包含了很好的说明文件。物超所值。

powerd-2.0.tar.gz
一个 SysVinit 的 powerd 程式的替代品。与它的说明文件所提到的相反，它似乎没有整合到 SysVinit 2.62 版中。它的优点在於它可以做为在其他机器上执行的 powerd 的伺服端 (假如您的机器有连上网路且只有一个 UPS 的话) ，而且它可以用设定档来进行设定 ---- 故其原始码不需修改及重新编译。

upsd-1.0.tgz
另一个 powerd 的替代品。看起来似乎与 powerd-2.0.tar.gz 有许多相似的特色。

checkups.tar
这个软体是用来控制 Best UPS 的。它是直接来自 Best 公司的网页的。它包含了多种 unix 的可执行档，但更重要的是，它还包含了原始码，故您可以在 Linux 下测试它，而且假如它无法工作，您也可以试著修改它。此原始码同时包含了在单调模式下控制 UPS 的 "基本检测" 指令，以及一些更精巧的 "先进检测" 指令 --- 当 UPS 回报说它只剩 X 分钟的电力时即发出关机的讯号，而不是等到 X 分钟後电力都用光了才开始关机。此先进检测程式也会在 UPS 发出像是周围环境温度过高、接近低电力、低交流电输出、或者是使用者测试等警告时关闭机器。

bestups-0.9.tar.gz
可能在您读到这篇文章时，此在 sunsite 可以找得到的软体已发展得很好了。它是一对可以相互通讯的模组，用以控制 Best Ferrups UPS。它可以在聪明模式下控制 UPS 。它可以与 powerd-2.0 合作操控 --- 这一点在当您有一个大型的 Best Ferrups UPS 支援连接在网路上机器的电力时格外有用。

请注意我只是快速地浏览过这些软体。我并没有用它们，除了那个我们才开始使用的 bestups-0.9.tar.gz 以及 powerd-2.0.tar.gz ，其中 ``才开始'' 意思是说我们才在上个星期四开使做测试。


New Page 1

标题： ■ 中文 UPS Howto :自己动手指南
姓名 ：Harvey J. Stein,
Email：abel@netvision.net.il,
地址 ：Berger Financial Research, Ltd.
转摘 ：http://member.netease.com/

返回

5. 自己动手指南
这□的讨论是针对单调模式的 UPS 控制而写就的。然而，大部分的过程对单调的 UPS 与聪明的 UPS 几乎是一样的。最大的不同在於 UPS 监控程式 (基本上是 powerd) 如何与 UPS 沟通。

在开始之前，我建议以下的工作流程:

略读这篇文件。
下载并审查所有看起来特别适合您的 UPS 的软体。
下载并审查所有更一般化的软体。请注意有些较一般化的软体事实上更为强大、有更好的说明文件、且比起那些较特殊的软体更容易使用。
如果您依然无法让 UPS 工作，或是您的方向依旧不清楚，请您仔细阅读本文，并试试做 hack 的工作 ....

5.1. 您所需的工作 (总结)

将您的电脑接上 UPS 。
用特殊的讯号缆线将您的电脑的的串列阜与 UPS 连接在一起。
在您的电脑上跑 powerd (或其他类似的软体) 。
设定您的 init 程式使它能在 powerfail 及 powerok 事件发生时做适当的处理 (例如分别启动 shutdown 程序及停止正在执行的 shutdown 程序)。

5.2. 这应该是做什麽工作的?

UPS 的工作
当电力消失时， UPS 持续供应电脑所需的电力，并以送出重置讯号或是在它的控制阜上打开连接讯号以通知电脑电力消失了。

讯号缆线的工作
讯号缆线是设计为当 UPS 送出重置讯号时，会使得特殊的序列阜控制接脚 (基本上是 DCD) 出现高电位。

Powerd 的工作
powerd 程式负责监视序列阜。它保持著 UPS 所需而升高 / 降低序列阜控制接脚的高 / 低电位 (基本上， DTR 接脚必须保持在高电位且关闭 UPS 的接脚必须保持在低电位) 。当 powerd 发觉控制接脚变成高电位，它会在 /etc/powerfail 档中写入 FAIL 这个字并送 SIGPWR 讯号给 init 行程。当控制接脚再次变回低电位时，它会在 /etc/powerfail 档中写入 OK 这个字并送 SIGPWR 讯号给 init 。

Init 的工作 (除上述之外它负责所有的工作)
当它接到了 SIGPWR 讯号，它会检查 /etc/powerfail 档。如果□头是 FAIL 这个字眼它会执行 /etc/inittab 档中 powerfail 那一行的指令。如果□头是 OK 这个字它则执行 inittab 档中 powerokwait 那一行的指令。

5.3. 如何设定好所有的工作
以下我们假设您有一条可以和 powerd 正常工作的讯号缆线。如果您不确定您的讯号缆线是否可以工作 (或它如何工作)，请参考 讯号缆线反向分析及修改 power.c 一节，那儿有关於少见的讯号缆线处理及重新设定 powerd.c 的资讯。序列阜接脚的指定 及有关读写 RS232 这两节也将对您有帮助。

如果您需要制作一条讯号缆线，请见 如何制作讯号缆线 的详细说明，以及 UPS 资料节选 一节中有关您的 UPS 的小节。後者可能也包含了制造商所提供的讯号缆线的相关资讯。或许您应至少将 UPS 资料节选 中所有的小节浏览过一遍，因为每一小节都会有一些额外的一般性资料能对您有帮助。

修改 /etc/inittab 档。写入像以下的内容:
# What to do when power fails (Halt system & drain battery :):
pf::powerfail:/etc/powerfailscript +5

# If power is back before shutdown, cancel the running shutdown.
pg:0123456:powerokwait:/etc/powerokscript

写 /etc/powerfailscript 及 /etc/powerokscript 这两个 script 档分别在五分钟 (或其他您喜欢的时间) 之内进行关机及停止任何存在的 shutdown 程序。依您所用的 shutdown 程式版本的不同，它可能会相当单简以至於您根本不需使用 script 档，或者是一行 bash 的 script 档像是以下这一行:
kill `ps -aux | grep "shutdown" | grep -v grep | awk '{print $2}'`

(为了避免您弄错，上一行中第一个单引号是反向单引号，第二及第三个是单引号，而最後一个则为反向单引号。)
用以下的命令告诉 init 重新读取 inittab 档中的设定:
telinit q

编□ rc.local 档在开机时执行 powerd 。其语法如下:
powerd <line>

其中，请您自行将 <line> 这个字替换成 modem 所连接的序列阜名，像是 /dev/cua1。
将电脑的序列阜与 UPS 的讯号缆线相连。请先不要将电脑的电源直接接到 UPS 上。
将一个光源 (如灯泡) 接到 UPS 上。
执行 powerd。
依照以下的步骤进行测试:
拔掉 UPS 的插头。
检查该灯泡是否仍然亮著。
检查 /etc/powerfailscript 是否已开始执行。
检查 shutdown 是否正在执行。
接回 UPS 的插头。
检查该灯泡是否仍然亮著。
检查 /etc/powerokscript 是否已开始执行。
检查 /etc/powerfailscript 是否已停止执行。
检查 shutdown 是否已停止执行。
再次拔掉 UPS 的插头。放著不去管它并确定电脑在一段时间後可以正常关机。
危险步骤。 在所有的步骤看起来都正常之後，将电脑电源关闭并将电脑的电源接到 UPS 上。请执行一个 script 大约每秒钟做一次 sync 硬碟资料回存的动作，同时也跑另一个 script 持续以 find 指令搜寻整颗硬碟。其中第一个 script 是为了确保安全，而第二个则是助长电力的消耗。现在，将 UPS 的插头拔出，再次检查 shutdown 是否已在运作，并等待一段时间。确定电脑在 UPS 的电力用完前完全地关机。此一步骤是很危险的，因为如果 UPS 的电力在电脑完成关机之前先用完了，您的档案系统将会受损，且您将可能丢失一些档案。您可能在进行这项测试之前会想要备份您所有的档案，并将开始关机的时间设短一点以开始这项测试。

恭喜您! 您的 Linux 系统现在已在 UPS 的保护下，且它将会在电力耗尽之前安全地关机了。

5.4. 进一步的改善

修改 powerd.c 使它在监视 UPS 的讯号线时能得知电池电力已弱。当电力微弱时，马上进行紧急关机程序。
修改关机程序使它在 powerfail 情况下关机时，能够在完成所有工作之後将 UPS 关掉。


New Page 1

标题： ■ Linux XFree86 HOWTO 中译版 : 介绍
姓名 ：Eric S. Raymond
Email：esr@snark.thyrsus.com
地址 ：
转摘 ：http://member.netease.com/

返回

1. 介绍
X Window System 是 UNIX 系统上强大的 (有些人可能会说极庞大而且非常复杂的) 图形化作业环境. 原本的 X Window System 程式码是 MIT 所发展的; 从那时起商业贩售者就已经使 X 成为UNIX 平台上的工业标准. 实际上, 在世界上每台 UNIX 工作站可以跑 X Window system 的各版本.

一个 MIT X Window System version 11, release 6 (X11R6) 在 80386/80486/Pentium UNIX systems 上免费,可重发行的移植版本已经在发展, 由原本 David Wexelblat <dwex@XFree86.org> 所领导的程式设计师团队. 这个版本,叫作 XFree86, 可以取得给 System V/386, 386BSD, 和其他 x86 UNIX 实作,包括 Linux. 它包含所有需要的 binaries, 搭配档案, libraries, 以及工具.

XFree86 的完整资料是可以取得在 XFree86 的网站, http://www.XFree86.org.

在本文件, 我们将一步步的描述如何在 Linux 安装和设定 XFree86, 但你自己将必须靠读 XFree86 本身公开的文件(这些文件以下会讨论) 来充实某些细节. 然而, 使用和定制[using and customizing] 该 X Window System 是远超出本文件□围 --- 基於这个目的,你应该在众多讨论使用 X Window System 的好书中,取一本来看.

1.1. 其他资讯来源
如果你以前从未听过 Linux, 那□面有一些关於这系统[X Window System]的基本资料. 要找到这些资料的最好地方是在 Linux Documentation Project 的 home page 即 http://sunsite.unc.edu/LDP. 你能在那找到该文件之最新,跟上时代的[up-to-date]版本,它在 http://sunsite.unc.edu/LDP/HOWTO/XFree86-HOWTO.html

1.2. 这文件的新版本
Linux XFree86 HOWTO 的新版本将会定期性地张贴在 comp.os.linux.help 和 news:comp.os.linux.announce 以及 news.answers. 他们也将会更新到各种 Linux WWW 和 FTP 站,包括 LDP home page.

你总是能见到本文件的最新版本在全球资讯网[World Wide Web], 藉由这个 URL http://sunsite.unc.edu/LDP/HOWTO/XFree86-HOWTO.html.

1.3. 回函与订正
如果你对这文件有问题或评论, 请自在的寄封信给 Eric S. Raymond, esr@thyrsus.com. 我很欢迎任何建议或批评. 如果你在文件中找到错误. 请让我知道,使得我能够在下个版本修正它. 谢谢.

请 不要 寄信给我, 问些如何使你的显示卡和显示器能在 X 下, 正常运作的问题. 这个 HOWTO 的意图是快速,轻易的指引给 一般 安装, 它使用新的互动式设定器[interactive configurator]. 如果你发生问题,浏览一下 XFree86 Video Timings HOWTO, http://sunsite.unc.edu/LDP/HOWTO/XFree86-Video-Timings-HOWTO.html. 这是 XFree86's `Videomodes.doc' 档案之最新的 HTML 版本.) 那文件记录我所知道, 关於解决设定上困难的事情. 如果它不能帮得上你,那我也帮不上.


New Page 1

标题： ■ Linux XFree86 HOWTO 中译版 : 硬体需求
姓名 ：Eric S. Raymond
Email：esr@snark.thyrsus.com
地址 ：
转摘 ：http://member.netease.com/

返回

2. 硬体需求
在 XFree86 3.3版, 以下的显示晶片组是被支援的. 这文件包括你的显示介面卡应该说明所使用的晶片组. 如果你在市场上拿到很新的显示卡, 或买一台新机器而附有显示卡, 应要求贩售商正确的指出该显示卡是哪家制造,型号, 及晶片组. 这可以要求贩售商为你去打技术支援电话; 一般贩售商会乐意这麽做. 大部分 PC 硬体贩售商会说这个显示卡是 ``标准 SVGA 卡'', 它 ''应该能正常运作'' 在你的系统上. 解释一下你的软体 (提到 Linux 和 XFree86!) 并没有支援所有显示晶片组, 所以你必须要有详细的资料.

你也能得知你的显示卡藉由执行 SuperProbe 程式, 它包含於 XFree86 发行套件[distribution]. 这在以下会有更详尽的说明.

以下标准 SVGA 晶片组有被支援:

Tseng ET3000, ET4000AX, ET4000/W32, ET6000
Western Digital/Paradise PVGA1
Western Digital WD90C00, WD90C10, WD90C11, WD90C24, WD90C30, WD90C31, WD90C33
Genoa GVGA
Trident TVGA8800CS, TVGA8900B, TVGA8900C, TVGA8900CL, TVGA9000, TVGA9000i, TVGA9100B, TVGA9200CX, TVGA9320, TVGA9400CX, TVGA9420, TGUI9420DGi, TGUI9430DGi, TGUI9440AGi, TGUI9660XGi, TGUI9680
ATI 18800, 18800-1, 28800-2, 28800-4, 28800-5, 28800-6, 68800-3, 68800-6, 68800AX, 68800LX, 88800GX-C, 88800GX-D, 88800GX-E, 88800GX-F, 88800CX, 264CT, 264ET, 264VT, 264VT2, 264GT
NCR 77C22, 77C22E, 77C22E+
Cirrus Logic CLGD5420, CLGD5422, CLGD5424, CLGD5426, CLGD5428, CLGD5429, CLGD5430, CLGD5434, CLGD5436, CLGD5440, CLGD5446, CLGD5462, CLGD5464, CLGD6205, CLGD6215, CLGD6225, CLGD6235, CLGD6410, CLGD6412, CLGD6420, CLGD6440
OAK OTI067, OTI077, OTI087
Avance Logic ALG2101, ALG2228, ALG2301, ALG2302, ALG2308, ALG2401
Chips & Technologies 65520, 65530, 65540, 65545, 65520, 65530, 65540, 65545, 65546, 65548, 65550, 65554
MX MX68000, MX680010
Video 7/Headland Technologies HT216-32
SiS 86C201, 86C202, 86C205
ARK Logic ARK1000PV, ARK1000VL, ARK2000PV, ARK2000MT
RealTek RTG3106
Alliance AP6422
Matrox MGA2064W and Mystique cards
NVidia/SGS Thomson NV1, STG2000

以下具有加速特性的 SVGA 晶片组也被支援:

8514/A (and true clones)
ATI Mach8, Mach32, Mach64
Cirrus CLGD5420, CLGD5422, CLGD5424, CLGD5426, CLGD5428, CLGD5429, CLGD5430, CLGD5434, CLGD5436, CLGD5440, CGLD5446, CLGD5462, CLGD5464.
S3 86C911, 86C924, 86C801, 86C805, 86C805i, 86C928, 86C864, 86C964, 86C732, 86C764, 86C765, 86C868, 86C968, 86C325, 86C988
Western Digital WD90C31, WD90C33, WD90C24A
Weitek P9000
IIT AGX-014, AGX-015, AGX-016
IBM XGA-2
Tseng ET4000/W32, ET4000/W32i, ET4000/W32p, ET6000
Ark Logic ARK1000PV, ARK1000VL, ARK2000PV, ARK2000MT
MGA2064W

使用这些晶片组的显示卡有被支援所有汇流排型式[bus type],包括 VLB 和 PCI.

除了 Avance Logic, MX 和 Video 7 晶片组只有支援 256 色模式, 以上其他全都同时有支援 256 色和 单色模式. 若你的显示卡装有足够的 DRAM, 以上晶片组很多都有支援每单位像素[pixel] 16 及 32 位元[bits] 模式 (特别是一些 Mach32, P9000, S3 和 Cirrus boards). 通常的设定是每单位像素 8 位元 (亦即 256 色).

单色的伺服程式[monochrome server]也支援 generic VGA cards, Hercules monochrome card, Hyundai HGC1280, Sigma LaserView, 和 Apollo monochrome cards. 在 Compaq AVGA 的部分, 只有 64k 显示记忆体是有支援给单色伺服程式, 而 GVGA 还未对超过 64k 做测试.

这列表毫无疑问地将会随时间而扩增. XFree86 目前版本的 release notes 应该会包含完整所支援显示晶片组的列表.

XFree86 发展者所面临的一个问题是, 某些显示卡制造商为能定出驱动该卡所使用的时脉频率,而使用非标准机制. 这些制造商中,有些要嘛就没有公开,如何程式设计这张卡的规格; 要嘛他们就是要求发展者签一张决不可□露的声明书,以取得该资料. 这明显地限制 XFree86 软体的自由散布, 有些事是 XFree86 发展团队所不乐意去做的. 有好长的一段时间,这是个问题发生在 Diamond 所制造的某些显示卡上, 但当 XFree86 的 3.1 版时, Diamond 已经开始与这个发展团队合作,而释出免费的驱动程式给这些卡.

在 Linux 下 XFree86 所建议架设是一台 486 或更好, 而且至少搭配 8 megabytes RAM, 和具有上述所列出晶片组的显示卡. 为了最好的表现, 我们建议使用加速卡, 像是张 S3-chipset card. 你应该检查对於 XFree86 的文件, 而且在决定冒险一试的心态下,购买昂贵的硬体之前,请先检查你的特定卡是有支援的.

Farrel McKay 收集各种显示卡在 XFree86 下的量测等级比较[benchmark ratings comparisons]. 这些照往常地会张贴到 USENET newsgroups comp.windows.x.i386unix, comp.os.linux.x, comp.benchmarks, comp.sys.ibm.pc.hardware.video. 它们可取得於网站 http://www.goof.com/xbench.

一方面值得一提的是, Matt Welsh (这个 FAQ 的发起人) 的个人 Linux system 是一台 486DX2-66, 20 megabytes RAM, 装配有 2 megabytes DRAM 的 VLB S3-864 chipset card. 他在该机器上跑 X benchmarks ,也有在 Sun Sparc IPX workstations 上跑. Linux system 大略是比 Sparc IPX 快 7 倍 (好奇的窥探, 在 Linux 下而用该显示卡的 XFree86-3.1 大约跑出 171,000 xstones; Sparc IPX 则大约是 24,000). 一般而言, 在使用加速 SVGA 卡的 Linux system 下的 XFree86 比起建立在商业上的 UNIX workstations (它通常采用简单的 framebuffers 来图形显示[graphics]) 会有较佳的表现.

你的机器至少需要 4 megabytes 的 physical RAM, 和 16 megabytes 的 virtual RAM (举例而言, 8 megs physical 和 8 megs swap). 记住你有的 physical RAM 越多,系统当发生记忆体短缺而要交换[swap]存取硬碟机会越少. 因为交换[swapping]本质上是慢的(磁碟相较记忆体是蛮慢的), 要流畅地跑 XFree86 的话, 有 8 megabytes RAM 或更多是必要的. 16 megabytes 更好. 具有 4 megabytes 的 physical RAM 的系统可能比跑 8 megs 或更多的系统慢 许多 (甚至可高达 10 倍).


New Page 1

标题： ■ Linux XFree86 HOWTO 中译版 : 安装 XFree86
姓名 ：Eric S. Raymond
Email：esr@snark.thyrsus.com
地址 ：
转摘 ：http://member.netease.com/

返回

3. 安装 XFree86
很有可能,你取得的 XFree86 是 Linux distribution[发行套件] 的一部分, 在那种情形, 分开下载该软体是没有必要的. 在那情形下,你可以略过这一节.

XFree86 的 Linux binary distribution 可以在许多 FTP 站找到. 在 XFree86 站, 它是在 ftp://ftp.xfree86.org/pub/XFree86/current/binaries/Linux-ix86 ( 当笔者在写的时候, 目前的版本是 3.2A; 最新版本则定期地释出).

在做任何其它东西之前,首先下载且执行 `preinst.sh' 的 shell script. 这可以告诉你,在你继续你的安装之前,你需要在妥当位置有关的先决要素.

如果你直接下载 XFree86, 这个列表列出在 XFree86-3.3 软体套件中的档案.

以下 server 之一是必需的:

X338514.tgz
Server for 8514-based boards.

X33AGX.tgz
Server for AGX-based boards.

X33I128.tgz
Server for the Number Nine Imagine 128.

X33Mach32.tgz
Server for Mach32-based boards.

X33Mach64.tgz
Server for Mach64-based boards.

X33Mach8.tgz
Server for Mach8-based boards.

X33Mono.tgz
Server for monochrome video modes.

X33P9K.tgz
Server for P9000-based boards.

X33S3.tgz
Server for S3-based boards.

X33S3V.tgz
Server for the S3 ViRGE and ViRGE/VX (considered beta)

X33SVGA.tgz
Server for Super VGA-based boards.

X33W32.tgz
Server for ET4000/W32-based boards.

如果你不知道要取哪一个,就取 VGA16 server,X33VGA16.tgz. 不管怎样,你都要下载这一个,因为你将需要它在下个步骤去执行自动设定工具.

以下全部档案都是必须的:

preinst.sh
Pre-installation script

postinst.sh
Post-installation script

X33bin.tgz
The rest of the X11R6 binaries.

X33cfg.tgz
Config files for xdm, xinit and fs.

X33doc.tgz
Documentation.

X33man.tgz
Manual pages.

X33fnts.tgz
75dpi, misc and PEX fonts

X33lib.tgz
Shared X libraries and support files.

X33set.tgz
XF86Setup utility

X33VG16.tgz
Server for VGA/EGA-based boards.

以下档案是选择性的:

X33f100.tgz
100dpi fonts

X33fcyr.tgz
Cyrillic fonts

X33fnon.tgz
Other fonts (Chinese, Japanese, Korean, Hebrew)

X33fscl.tgz
Scalable fonts (Speedo and Type1)

X33fsrv.tgz
Font server and config files

X33prog.tgz
X header files, config files and compile-time libs

X33lkit.tgz
X server LinkKit

X33lk98.tgz
PC98 X server LinkKit

X33nest.tgz
Nested X server

X33prt.tgz
X print server

X33vfb.tgz
Virtual framebuffer X server

X33ps.tgz
PostScript version of the documentation

X33html.tgz
HTML version of the documentation

那个 XFree86 目录应该包含有目前版本的 release notes 在 RELNOTES. 对於安装细节,可查阅於该文件[RELNOTES].

所要安装 XFree86 的工作的是取得以上档案, (以 root 身分) 建立 /usr/X11R6 目录, 和从 /usr/X11R6 解开那些档案如下列指令:

gzip -dc X33bin.tgz | tar xfB -

记住这些 tar 档案是相对於 /usr/X11R6 目录所包装起来的, 所以很重要的是要在那□解包包装.

你需要确定 /usr/X11R6/bin 是有设在你的 path 中. 这可以藉由编辑你系统内定的 /etc/profile 或 /etc/csh.login (此乃根据你,或在你系统中的其他使用者,所使用的 shell 而定). 或者你可以简单地修改 /etc/.bashrc 或 /etc/.cshrc (视你的 shell 而定) 来把该目录加入你个人的 path .

你也需要确定 /usr/X11R6/lib 能被 runtime linker ld.so 找到. 为了这样,加这行

/usr/X11R6/lib

到这个档 /etc/ld.so.conf, 和以 root 身分去执行 /sbin/ldconfig,


New Page 1

标题： ■ Linux XFree86 HOWTO 中译版 : 设定 XFree86
姓名 ：Eric S. Raymond
Email：esr@snark.thyrsus.com
地址 ：
转摘 ：http://member.netease.com/

返回

4. 设定 XFree86
4.1. 一般设定
以前,要设定好 XFree86 以便能使用你的滑鼠, 键盘, 显示器, 和显示卡, 是辛苦的差事, 需要大量的亲自动手去设定和□试调整[hand-hacking] 一个很复杂的设定档案[configuration file], 那可说是一种不可言传的艺术. 现在不再需要了; 3.2/3.3版的发行後,使这个过程几乎没什意义了. 你所要做的是开启 XF86Setup 程式.

这程式乃依赖现今所有新出货而且搭配具 EGA/VGA 能力之显示器的PC硬体情况而定. 它采用 SVGA16 server 而且利用它以最低阶共通性 640x480 模式来开启 X. 然後它执行互动式程式,它带你经过连续五个设定面板 -- mouse, keyboard, (video) card, monitor, 和 `other' (各式各样的 server 选项). 全部过程相当简单.

有一小点要记住的是,如果你像大多数人使用目前的PC, 你的键盘实际上是 XF86Setup 所呼叫的 `Generic 102-key PC (intl)' 而不是预定的 `Generic 101-key PC'. 如果你选择预定的(101), 在你键盘[keyboard]的极右边(数字及其相关 [numeric keypad and friends])上的按键群[key cluster]可能会没有作用.

如果你不确定你显示器的型式[monitor type],你可以连续试试它所列出的型式. 就依你的习惯由上往下试(较上面的选项所包含的是较低 dot-clock 速度, 而且对硬体要求也比较低). 如果发生了混乱或严重地扭曲变形[distorted]的图形时, 请往回试[Back off]. 小部分的扭曲变形 (图形稍太大,稍太小,或稍偏离中心) 不是什麽大问题; 你是可以马上藉由微调[fine-tuning]此 mode 来修正.

再者, 当程式打开 xvidtune 允许你去调整[tweak]你的显示模式[video mode], 别让初始的警告视窗[warning box]使你感到紧张. 现在多频显示器[multisync monitors] (不像他们以前是用定频的) 不会因为用这方式而就轻易损坏.

4.2. 解决困难
当你刚开始开启 X server, 有些项目偶尔会没有设定很正确. 这总是几乎会由你的设定档案中的一些问题所引起的. 通常在是显示器的 timing values 不正确, 或显示卡的 dot clocks 设定不正确. 少数问题可以藉由 xvidtune 来解决; 当萤幕上实在是混乱不清楚时,通常是表示你需要回到 XF86Setup 而选择功能比较低的显示器型式[monitor type].

如果你的显示好像卷曲[roll], 或边边模糊不清[fuzzy], 这很清楚地表示显示器的 timing values 或 dot clocks 是错的. 再者, 要确定你是正确地指出你的显示卡晶片组, 在 XF86Config 中的 Device 段落之其它项目也是如此. 绝对要确定你是使用正确的 X server ,而且 /usr/X11R6/bin/X 有符号连结 [symbolic link]到这个 server.

如果发生其它所有失败的情况, 试试 ''赤裸地[bare]'' 开启 X; 也就是, 使用像这样的指令:

X > /tmp/x.out 2>&1

然後你可以砍去 X server (使用 ctrl-alt-backspace 键的组合) 而且检查 /tmp/x.out 的内容. X server 会报告任何警告及错误---举例, 如果你的显示卡没有一个 dot clock 可相符合你显示器所支援的模式.

记住你可以使用 ctrl-alt-numeric + 和 ctrl-alt-numeric - 来切换在 XF86Config 中的 Screen 段落的 Modes 行所列出的显示模式. 若最高解析度模式不能看起来很适当,试试切到较低的解析度. 这至少会让你知道你的 X 设定这部分是正确的运作.

再者, 检查一下你显示器上的垂直与水平之大小/对准旋纽. 在很多情况下,当 X 刚开启时, 这些是需要调整的. 举个例子, 如果显示器好像有点偏一边时, 通常你能够使用显示器的控制来修正这个.

USENET 的 newsgroup comp.windows.x.i386unix 主要是在讨论有关 XFree86, comp.os.linux.x 也是. 看一下 newsgroup 那些与你的显示卡有关的文章也许是个好主意---你也许刚好看到某些人跟你有相同的问题.

4.3. 自定设定
如果你的显示器能支援 1600x1200 -- 而用 XF86Setup 来安装之最高所能够支援的解析度是 1280x1024, 那麽你会需要亲自动手去尝试调整[hand-hack]你的 X 之设定,以便取得最佳化的表现.

如果基於这个理由或其它理由, 而你想要亲自动手去尝试调整[hand-hack]你的显示设定, 去看一下 LDP 的 XFree86 Video Timings HOWTO, http://sunsite.unc.edu/LDP/HOWTO/video-modes.html. (这就是 XFree86 的 `Videomodes.doc' 档案之最新的 HTML 版本.)

4.4. 使用 16-位元 的颜色
根据内定的, X 使用 8-位元 色深[color depth]而有256色. 为避开这种限制, 很多应用程式配置他们自己的色彩对应图[colormap],导致瞬间颜色转换, 当游标在两个各拥有自己的色彩对应图之视窗移动时. Arena WWW 浏览器就是这样子.

如果你想要使用先进的图形化的应用程式,256色也许不足够. 你可以简单地使用 16-位元 的色深而有 65K 色, 藉由开启 X 时,用以下指令

--------------------------------------------------------------------------------

startx -- -bpp 16

--------------------------------------------------------------------------------

或者将下列这行

--------------------------------------------------------------------------------

exec X :0 -bpp 16

--------------------------------------------------------------------------------

摆进你的 .xserverrc 档案内. 但要注意的是,不是所有的应用程式都能用 16-bit 颜色来正常运作.

较多颜色要你的显示卡在相同的时间内能转换成更多资料. 如果你的显示卡不能应付, 那麽就是解析度[resolution]或是更新率[refresh rate]必须要降低. XFree 内定的是降低解析度. 如果你要保持解析度而降低更新率, 你必须新加入一行适当的 Modeline 到你的 XF86Config 档案中, 其定义具有最低更新率下的解析度.举个例子, 取代旧值

Modeline "1024x768" 75 1024 1048 1184 1328 768 771 777 806 -hsync -vsync

换成
Modeline "1024x768" 65 1024 1032 1176 1344 768 771 777 806 -hsync -vsync.

这□的魔术数字 75 和 65 是各个时脉率[clock rates], 那些是你找到 X 记录在你的 .X.err 档案□的. 查询一下在 XF86 文件的 monitors 档案,有关在 16 位元色深下最适合你的显示卡能够传送最大时脉率的 Modelines.


New Page 1

标题： ■ Linux XFree86 HOWTO 中译版 : 执行 XFree86
姓名 ：Eric S. Raymond
Email：esr@snark.thyrsus.com
地址 ：
转摘 ：http://member.netease.com/

返回

5. 执行 XFree86
当你的 XF86Config 已设定, 你准备开启 X server 试用一下, 请确定 /usr/X11R6/bin 有设在你的 path 中.

开启 XFree86 的指令是

startx
这是 xinit 的 front-end[前端介面] (在其他 UNIX 系统,你会习惯使用 xinit).

这指令将会开始 X server 而且执行在你根目录[home directory]下之 .xinitrc 档案内所找到的指令. .xinitrc 只是个包含所要执行 X clients 的 shell script. 如果这个档案不存在, 那麽系统内定的 /usr/X11R6/lib/X11/xinit/xinitrc 将会被使用.

一个标准 .xinitrc 档案看起像这样:

#!/bin/sh

xterm -fn 7x13bold -geometry 80x32+10+50 &
xterm -fn 9x15bold -geometry 80x34+30-10 &
oclock -geometry 70x70-7+7 &
xsetroot -solid midnightblue &

exec twm

这个 script 将开启两个 xterm clients, 一个 oclock, 而且设定根视窗[root window](背景)的颜色成 深蓝色[midnightblue]. 然後它开启视窗管理程式 twm. 注意 twm 是用 shell 的 exec 述句[statement]所执行的; 这造成 xinit 程序[process]被 twm 取代. 一旦 twm 程序离开, X server 将关毕. 你可以使用 root 表单[menus] 来使 twm 离开: 在桌面背景上放开 mouse 的第一个按键---这将出现下拉表单,那将让你可以离开 Exit Twm.

确定在 .xinitrc 中的最後面的指令是以 exec为开头的, 而那不会被放在背景执行的 (而在那行後头,没有再接著[ampersand]什麽动作). 否则, X server 关毕瞬间, 将会再去执行 .xinitrc 档案中的 client.

此外, 你亦可以按 ctrl-alt-backspace 之组合键而离开 X. 这会直接砍掉 X server, 离开视窗系统.

以上是非常,非常简单的桌面设定. 要跑许多好程式及设定是可以在你的 .xinitrc 档案中稍加修改即可做到. 举例而言, fvwm 视窗管理程式会提供虚拟桌面, 而你可以依你喜好而定制颜色,字型,视窗大小及位置等等.

如果你是新接触 X Window System 作业环境; 我们强烈建议你选一本像 The X Window System: A User's Guide 的好书. 使用与设定 X 实在是比较深入所以很难能涵盖在这. 看一下 xterm, oclock, 和 twm 的 man pages, 就从这资料开始吧.

5.1. 使用的条件
本文件 1996 年的版权归属於 Eric S. Raymond. 你可以自由地使用, 散布, 与复制, 只要你:

没有略过或变更这个版权注明.
没有略过或变更这个版本序号及日期.
没有略过或变更本文件所指到的目前 WWW 版本.
清楚地标上任何浓缩, 变更, 或版本编号.

这限制目的是保障一些潜在的读者, 避免看到的是旧有的或损坏的版本. 如果你认为你有例外的情况, 可以向我询问一下.

5.2. 感谢
This document was originated by Matt Welsh in the dim and backward abysm of time. Thanks, Matt!