LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: probing

╭∩╮(︶︿︶)╭∩╮FreeBSD使用大全FreeBSD╭∩╮(︶︿︶)╭∩╮

[复制链接]
 楼主| 发表于 2003-2-11 19:27:35 | 显示全部楼层

FreeBSD连载(39):定义自己的名字服务

定义自己的名字服务

  缓冲形式的名字服务只能用于名字查询,但没有定义任何名字数据。如果要想让自己的网络有一个域名,并为其他计算机都提供服务,就必须使用完整配置的名字服务器。

    * 正向解析zone

  第一步要为自己的子域在/etc/namedb/named.conf文件中定义zone,并修改设置文件 named.conf。在named.conf文件中,首先要删除forward的相关设置,使服务器不仅用于转发请求,也能拥有自己的名字解析数据库。然后再增加一项新zone的定义:

zone "bsdgroup.example.org.cn" {
        type master;
        file "db.bsdgroup";
};

  这一项描述了bsdgroup.example.org.cn的zone对应的配置文件为db.bsdgroup。其中 type master表示这台DNS服务器为这个zone的主服务器,对于一个zone来讲,可以由多个DNS 服务器提供服务,以提供一定的备份能力。当为一个zone使用多个DNS服务器的时候,通常可以设置一个主服务器,而其他服务器为辅服务器,辅服务器将从主服务器上获得zone的解析数据,而本地文件只是用于万一主服务器出现故障的情况。

  更改过named.conf中的zone设置项,就能创建zone的解析数据文件db.bsdgroup,用于保存zone内的解析数据。

@           IN   SOA  ns.bsdgroup.example.org.cn. admin.example.org.cn. (
                         1999010801 ; Serial (date, 2 digits version of day)
                         86400   ; refresh (1 day)
                         7200    ; retry (2 hours)
                         8640000 ; expire (100 days)
                         86400 ) ; minimum (1 day)
            IN   NS   ns.bsdgroup.example.org.cn.
            IN   NS   ns1.bsdgroup.example.org.cn.
            IN   MX   10  ns
            IN   MX   20  ns1

ns          IN   A    192.168.4.21
ns1         IN   A    192.168.4.22
www         IN   CNAME  freebsd.example.org.cn.

  这个设置文件中首先为这个zone定义了SOA记录,接下来定义了服务于这个zone的两个名字服务器。当为一个zone定义名字服务器时,有的管理员以为将名字服务器设置的越多越能提供备份,其实并不是这样。如果定义的一台名字服务器,其named.conf(或named.boot)设置文件中并没有设置它为这个zone服务,那么该名字服务器上就没有这个zone的解析数据,这就导致一些客户从这个名字服务器中查询这个zone的数据失败。这个配置错误就是Internet中经常发生的Lame Server错误,一些老版本的named不能检测并纠正这个错误,就会导致网络上部分客户计算机不能解析这个zone。同样,多个名字服务器之间还应该保持zone数据一致,正确划分好主/辅服务器可以很好的解决这个问题。

  然后又针对这个zone定义了两个MX记录,表示对应于这个zone的邮件服务器为ns和ns1,这样在电子邮件中的地址中,就不需要使用具体的计算机名字ns.bsdgroup.example.org.cn,而可以直接使用bsdgroup.example.org.cn。其中ns的参数为10,ns1的参数为20,用于标识不同邮件服务器的优先级,一个邮件总是首先向低优先级的邮件服务器发送,只有当这个服务器出现故障时,才会尝试其他的邮件服务器。

  这个文件中还定义了几个A记录,这个记录具体定义ns和ns1的IP地址,然后定义了一个 www的计算机,但这只是freebsd.example.org.cn的一个别名。

  这个zone是对该zone中的计算机进行正向名字查询,从名字返回相应的IP地址,进一步可以配置反向查询zone,输入要查询的IP地址,返回正确的主机名字。

    * 反向解析zone

  前面提到的localhost.rev就是一个反向查询zone文件。因此要定义其他反向解析zone,就与它相似。首先在named.conf中增加一个设置语句:

zone "4.168.192.in-addr.arpa" {
        type master;
        file "bsdgroup.rev";
};

  网络地址以反方向的方式写出,并使用in-addr.arpa后缀,表示一个反向查询zone为192.168.4。然后创建反向解析数据bsdgroup.rev:

@        IN        SOA        ns.bsdgroup.example.org.cn. admin.example.org.cn.  (
                                1998012314        ; Serial
                                3600        ; Refresh
                                900        ; Retry
                                3600000        ; Expire
                                3600 )        ; Minimum
        IN        NS        ns.bsdgroup.example.org.cn.
21        IN        PTR        ns.bsdgroup.example.org.cn.
22        IN        PTR        ns1.bsdgroup.example.org.cn.

  注意,这里正向解析和反向解析位于同一台服务器上,这只是一种较简单的情况,但对 Internet上更广泛的复杂情况,并不总是如此。

    * 维护名字服务器

  当完成了这一步之后,就可以把本网络上所有计算机的解析数据,使用A记录增加到 db.bsdgroup中,使用PTR记录增加到bsdgroup.rev文件中去,并重新启动named守护进程,或者向named发送SIGHUP信号(使用kill或killall),使其重新读取设置文件。那么所有使用这台计算机作名字服务器的计算机将能正确查询相应的名字和IP。

  但是,外部的计算机并不知道有这个名字服务器的存在,因此外部计算机还无法查找到正确的结果。因此就需要将这个名字服务器,及其提供服务器的域,登记到Internet上的正式名字服务器上,以便这个名字服务器上的zone数据通过正式服务器发布到整个Internet。最方便的做法是将这个名字服务器登记到其上一级名字服务器上,如在example.org.cn的名字服务器中可以指定bsdgroup.example.org.cn子域的zone设置及名字服务器。

bsdgroup.example.org.cn.        IN        NS        192.168.4.21

  此后,外部计算机才能查找bsdgroup这个域的内容。

这个例子中使用了两个名字服务器ns和ns1,为了保持两个服务器中的数据一致,两个服务器一个需要作为主服务器,另一个必须作为辅服务器。主服务器ns在配置文件named.conf中使用 type master来说明,而辅服务器ns1使用type slave来说明:

zone "bsdgroup.example.org.cn" {
        type slave;
        file "db.bsdgroup";
};

  这使得ns1首先尝试从ns(192.168.4.21)中获得zone的配置数据,如果不能成功再从本机配置文件中获得。这样既能起到备份作用,又能保持解析数据尽量一致。

  named在启动和运行的过程中将不断向控制台打印信息,这些信息也被写入/var/log/messages 文件中。查看这些文件可以判断是否有错误发生。

Feb 15 01:26:17 roke named[6091]: starting.  named 8.1.1 Sat Feb 14 \
       00:18:20 MET 1998 ^Iwb@example.org.cn:/var/tmp/bind-8.1.1/src/bin/named
Feb 15 01:26:17 roke named[6091]: cache zone "" (IN) loaded (serial 0)
Feb 15 01:26:17 roke named[6091]: master zone "0.0.127.in-addr.arpa" \
       (IN) loaded (serial 1)
Feb 15 01:26:17 roke named[6091]: listening [127.0.0.1].53 (lo)
Feb 15 01:26:17 roke named[6091]: listening [129.240.230.92].53 (ppp0)
Feb 15 01:26:17 roke named[6091]: Forwarding source address is [0.0.0.0].1040
Feb 15 01:26:17 roke named[6092]: Ready to answer queries.

  此外,随着Internet的发展,根DNS服务器也会不断更新,因此保持自己的DNS服务器中 root.hints(或named.root)文件与Internet上的真实根文件服务器同步也是非常重要。通常可以使用dig来从一个根文件服务器上取得这个文件:

# cd /etc/namedb
# dig @rs.internic.net . ns >root.hints.new

  如果一切正常,就可以将root.hints.new复制为named.root,并重新启动named。此外还有一些常用的工具程序有nslookup,dig,dnswalk,named-xfer等,能用来分析DNS设置,帮助解决设置问题。

未完,待续。。。  
 楼主| 发表于 2003-2-11 19:29:25 | 显示全部楼层

FreeBSD连载(40):邮件服务器

电子邮件

  FreeBSD支持在Internet上收发电子邮件,也能被用作一台功能强大的邮件服务器,为众多使用不同操作系统的客户机服务。

    *
      邮件服务器

  Internet上与电子邮件相关的协议主要有SMTP、POP3和IMAP,其中SMTP是邮件传输协议,用于计算机之间交换电子邮件,POP3和IMAP是用于客户计算机远程访问邮件主机上时使用的。

  FreeBSD系统缺省即包括了sendmail程序,它按照SMTP协议在Internet上接收和发送E mail。sendmail在缺省设置下就已经能够正常工作,一般情况不需要进行改动。如果更改sendmail的配置,就需要更改sendmail的配置文件sendmail.cf,这个文件相当复杂、难于设置。因此如果希望设置邮件服务器的一些特殊属性,就需要小心更改sendmail,讨论sendmail的设置不在本书的范围之内,并且,还有其他的邮件服务器能用来代替sendmail,来完成接收和发送Internet邮件的任务。通常这些sendmail的代替者具备更高的性能、易于更改设置,并且没有sendmail中经常报告的安全漏洞,因此如果需要定制邮件服务器,推荐使用这些sendmail的代替产品,例如qmail或postfix。

  如果系统的用户经常使用其他计算机,如运行Windows9x的个人计算机,来访问自己的电子邮件,可以在服务器端安装支持POP3或IMAP4的服务程序,这样Windows9x中的电子邮件客户软件就能访问服务器中的邮件。pop3协议比较简单,因此Windows下一般的电子邮件处理软件都支持pop3协议,相对而言IMAP协议更复杂一些,对电子邮件的支持能力更强,但支持imap协议的软件就较少。比较流行的电子邮件软件可以支持这两种协议,如netscape messager、Eudro等。因此服务器可以有选择的支持这两种协议。

  如果仅需要提供POP3支持,可以使用qpopper,而要同时支持POP3和IMAP,就可以安装imap-uw(uw指 University of Washington,IMAP协议和这个服务器程序的开发者)。安装imap-uw之后,还需要更改 inetd.conf,增加以下行:

pop3        stream        tcp        nowait        root        /usr/local/libexec/ipop3d        ipop3d
imap4        stream        tcp        nowait        root        /usr/local/libexec/imapd        imapd

  重起inetd,则远程用户就能在其客户软件中处理电子邮件了。

未完,待续。。。  
 楼主| 发表于 2003-2-11 19:30:30 | 显示全部楼层

FreeBSD连载(41):在FreeBSD上查看邮件

在FreeBSD上查看邮件

  FreeBSD上的用户可以通过mail程序来查看自己的Email,mail是一个最基本的交互式Unix 命令,可以运行在任何类型的终端上,然而使用它来处理邮件也很不方便。使用者常常安装其他更为便利的电子邮件客户程序来处理自己的邮件,这些软件有elm、mutt、pine,以及只用于X下的 netscape messager、kmail等。

  虽然基于X的邮件处理软件比较方便和易于学习,然而通过网络远程直接使用这些X程序比较麻烦,不是任何计算机上都运行了X服务器的。而几乎所有的计算机系统中都支持telnet等字符终端连接软件,使用支持字符终端的邮件处理程序就使得使用者无论身在何处,只要连接到自己的主机上就能处理自己的电子邮件。

  在远端访问自己的电子邮件的另一种方式是:首先在远端的客户机上安装、配置电子邮件软件,再使用这些软件访问自己主机上的邮件。这些远程访问邮件服务器的软件使用POP3协议或者 IMAP协议,让用户查看远程计算机上的邮件。

  这两种方式的不同在于邮件处理软件的安装位置,安装在主机上的邮件处理程序基于X或字符终端,不需要改动客户计算机上的任何配置,因此适用于经常改变客户机的使用者。安装在客户机上的用户可以充分发挥客户计算机的优势,例如MS Windows的用户界面,这种方式适用于拥有固定个人用计算机的使用者。这两种方式并不相互冲突,而是相互补充的,适合不同情况的使用者。

    * 邮件处理程序pine

  由于基于字符终端的邮件软件启动快捷,能通过telnet等防真终端使用,而不需改变客户计算机的任何配置。因此Unix的使用者至少都会选择安装一种基于字符终端的邮件处理软件,以作为最基本的邮件处理软件。pine就是其中之一,它提供了简洁的字符菜单界面,功能强大且易于操作,易用性超过很多图形接口的邮件处理程序。

  在Pine的主菜单下,可以执行发送电子邮件(Compose message),查看当前文件夹的内容(Message index),选择不同的文件夹(Folder list),使用和维护地址簿(Address Book),使用S(Setup)用于设置Pine,使用Q(Quit)退出pine回到shell提示下。正常情况下,不需要对 pine进行任何设置,就能正常使用pine阅读和发送电子邮件。

  然而当使用pine来发送中文邮件时,pine会对中文进行重新编码,以适应7位传输,虽然大部分电子邮件客户都会识别这些标准的编码格式,但还是有一些电子邮件程序不能识别出这些编码,造成阅读问题。此时就可以重新设置pine直接使用8位编码。

  在主菜单下选择Setup,当出现提示时,使用Config进入配置部分。就可以搜寻包含enable-8-bits 的两个选项,配置自己使用的字符集(由于pine中不直接支持中文字符集,可以设置为ISO-8858-1),以支持8位字符。

  还可以在这里设置Pine来阅读Usenet新闻,这就要在nntp-server的选项中填写本地新闻服务器的域名,并配置news-collections选项,例如本地新闻服务器的名字为news,那么news-collections 就应设为 ”*{news/nntp}/[]”。也可以设置远程文件夹,使得Pine能访问远程主机上的邮件。

  Pine缺省支持使用IMAP协议访问远程主机上的邮箱,但它对POP3的支持未在其文档中公布,不能使用设置程序来完成。可以手工更改用户个人目录下的配置文件.pinerc中的选项incoming-folders,以支持POP3,下面为一个例子:

incoming-folders="imapfolder" {imaphost}INBOX,
         "pop3folder"        {pop3host/pop3/user=wb}INBOX

  这个例子中配置了两个远程帐户,一个为imaphost上的邮箱,使用IMAP协议进行访问,在 pine中的文件夹名为imapfolder,第二个为pop3host上的邮箱,后面使用/pop3指明使用pop3协议,/user=wb指明使用wb作帐户名,其文件夹的名字为pop3folder。使用这样的格式就能使pine来管理多个计算机上的多个邮箱。

  那么再次启动pine就能有位于不同主机上的相应incoming和nntp文件夹,用户打开相应的文件夹就能使用imap、pop3或nntp等不同协议,访问相应的邮件或新闻了。

    * 使用fetchmail管理多邮件帐户

  尽管使用pine能非常方便的管理多个POP3或IMAP邮箱,但是如果邮箱主机与当前FreeBSD系统的网络连接很慢,使用pine来阅读这些邮箱中的邮件就非常迟缓。此时更好的办法是先在后台将邮件取到回本地邮箱中,然后使用pine或其他邮件处理程序进行处理。

  fetchmail就是一个非常方便的从远程邮件主机下载邮件的应用软件,它支持pop3、imap,以及对pop3的一些扩展协议。当安装好fetchmail之后,使用者可以直接启动fetchmail,来取得邮件的方法为:

$ fetchmail -p pop3 -u wangb email.online.ha.cn
password for wangb@email.online.ha.cn:

  在输入正确的口令之后,fetchmail将使用pop3协议访问主机email.online.ha.cn,并取回用户wangb的电子邮件,取回的电子邮件将发送到本地邮箱中。也可以用更复杂的方式在后台运行 fetchmail,则需要设置个人目录下的.fetchmailrc文件。

$ cat ~/.fetchmailrc
poll email-wangb via email.online.ha.cn
        protocol pop3
        authenticate password
        username wb here is wangb there
        password "1111"
        smtphost localhost
        pass8bits
        stripcr
        fetchall
$ chmod 700 ~/.fetchmailrc

  设置文件中第一行poll email-wangb via email.online.ha.cn中设置了要下载邮件的邮件服务器为email.online.ha.cn,其中email-wangb为对应这一个帐号的标签名字,用于区分多个不同的邮箱。然后指定使用的协议为pop3,认证方式为标准的Unix口令认证,然后,定义了远端主机上的邮件帐户名为wangb(用there表示远端主机设置),邮件下载到本地用户wb的邮箱中(使用here 指明本地主机设置)。

  smtphost定义了fetchmail用来转发邮件时使用的smtp主机,passsword定义了远程邮件服务器中帐户的口令,在口令中使用了数字或特殊字符时,就需要使用双引号将口令括起来。pass8bits 允许下载邮件中存在8位字符,stripcr用于过滤额外回车字符,由于DOS和Unix在文本定义上的不同,这一项用于兼容一些不识别这个差异之处的Windows系统的邮件服务器,fetchall表示取回全部邮件,否则就只取回最新的邮件。

  此外,这个文件因为包括了远端服务器的口令,因此必须具备属性700,以避免其他用户能读取这个文件,否则fetchmail不会运行。

  这样,就可以不使用任何命令行参数,直接在后台运行fetchmail了。每个用户可以使用cron来运行自己的fetchmail命令,来管理自己的邮件,而拨号用户可以在拨号后,使用ppp.linkup启动fetchmail ,取回自己的邮件。

    * 使用Procmail设置邮件过滤

  由于Internet的使用者不但使用电子邮件和朋友、同事联系,而且还通过maillist与Internet 上的其他使用者讨论共同感兴趣的话题,用户收到的电子邮件越来越多,并且还会受到广告、宣传品等垃圾邮件的骚扰。使用Promail、maildrop等邮件过滤程序就能帮助使用者阻挡这些广告和宣传品,并帮助管理用户接收到的邮件。Procmail就是一个用于过滤用户接收到的电子邮件,并能对其自动分类、处理的一个应用软件。对于每天都会收到大量电子邮件的Internet使用者,这是一个非常有用的工具。

  为了使用Procmail,必须在用户接收到Email时,启动Procmail进行处理。这个任务可以使用两种不同的方式来完成,一个是将Procmail配置为系统的邮件分发代理(Mail Deliery Agent),系统的邮件服务器使用porcmail代替其本身原有的邮件分发功能,来分发用户的邮件。这种方式需要由系统管理员根据邮件服务器的不同,而进行不同的设置。

  另一种方法是使用个人目录下的.forward文件,系统邮件服务器在给某个用户分发邮件的时候,如果发现他的个人目录中存在.forward文件,那么就会按照这个文件中的内容来进行处理。因此就可以在.forward文件中启动procmail处理用户接收到的邮件,与更改系统MDA的设置方式相比,这种方式更为灵活,并且可以由每个用户来决定是否使用这个过滤处理能力。

  .forward文件可以按照需要设置三种不同的处理方式:定义存储邮件的邮箱文件名、进行转发的目的地址或者对电子邮件进行处理的外部应用程序,显然启动Procmail是应使用第三种方法。

  .forward文件应该属于这个用户(或root),并且其权限设置应该为不能被其他或同组用户可写。

$ cat ~/.forward
"|IFS=' '&&exec /usr/local/bin/procmail -f-||exit 75 wb"

  这个.forward的例子里,使用"|"字符设置括号内的参数为一个执行命令,这样 sendmail就能启动一个shell执行设置的命令,并使用管道的方式读取sendail的输出。执行命令中首先定义了IFS环境变量(用于分隔不同的域),然后执行procmail,如果procmail执行失败就执行 exit 75 wb告诉sendmail,邮件分发失败,需要更改wb为使用者自己的登录名。

  procmail使用用户个人目录下的.procmailrc文件,来设置对收到的Email进行处理的过滤规则。最简单的.procmailrc文件为:

:0c:
* ^FROM.*@freebsd.org
$HOME/mail.backup

  第一行首先使用冒号开始定义一个过滤规则,紧随其后的应该是一个数字,这个数字规定了这个规则占用的配置行数,一般使用0表示没有限制配置行,此后的c表示复制(copy),表示下面的规则只是用于处理邮件的副本,而邮件本身仍然会被其他的过滤处理规则处理。这一行最后的冒号,用于表示在处理过程中进行加锁,防止同另一个procmail进程处理同一个文件时发生冲突,通常这个机制在存储邮件文件时非常有帮助。

  第二行就开始了一个过滤规则的定义,过滤规则使用*字符开头。一个规则中使用模式匹配来匹配电子邮件信头或内容中的特定行。上面例子里的这个规则匹配所有来自于freebsd.org的电子邮件。在第三行定义了对符合上面规则的邮件的处理方法,由于给出了一个文件名mail.backup,因此将所有来自于freebsd.org的电子邮件添加到mail.backup文件中保存。如果使用!开头定义规则处理办法,表示进行转发处理,!后面就为进行转发的电子邮件的地址,或者以|开头,表示启动后面的命令进行邮件处理。

  procmail不区分大小写,它使用Unix最常用的模式匹配方式进行匹配特定的邮件。因此使用这些匹配模式和procmail规则,可以定义一个更复杂的.procmailrc:

PATH=$HOME/bin: /usr/bin: /usr/ucb: /bin: /usr/local/bin:.
SHELL=/bin/sh
MAILDIR=$HOME/mail
DEFAULT=$MAILDIR/mailbox
LOGFILE=/dev/null
SENDMAIL=/usr/lib/sendmail

:0:
* ^From.*badguy         
/dev/null/

:0c:
* ^(From|Cc|To).*freebsd.org
| gzip >> freebsdmail.gz

:0:
* ^From.*@hotmail.com
* ^Subject:.*(joke|funny)
{
   :0 c
   ! friend1@hotmail.com friend2@usa.net
   :0
   joke
}

:0
* ^Subject:.*order
* !^FROM_DAEMON
* !^X-Loop: marketing@company.com
{
   :0 h c
   | (formail -r -A"X-Loop: marketing@company.com " ; \
   cat /market/acknowlegement.txt ) | $SENDMAIL -t
   :0 c
   ! market2@company.com
   :0
   market
}

  这个配置文件的第一部分中设置了几个环境变量,用于设置procmail的运行环境,其中将 MAILDIR设置为~/mail,与pine使用的目录相同,因此这将使pine能直接读取procmail处理过的邮件。

  第二部分中为邮件定义了三个不同的过滤规则及相应的处理操作,第一个规则将来自badguy 的邮件滤掉(输出到/dev/null);第二个规则将与freebsd.org的通信使用gzip保存到freebsdmail.gz 中,用于保存相应maillist的邮件;第三个规则将某个使用hotmail帐号的朋友,并使用joke或funny标题给自己发送笑话的邮件同时转给其他几个朋友,并同时保存在joke文件夹中;最后一个规则是设置了一个自动回复邮件系统,对于使用order做标题,并且没有FROM_DAEMON行(自动邮件回复程序使用FROM_DAEMON 作标记,通常不需要回复这些的邮件,否则会造成回复循环),并且没有包括X-Loop行的邮件进行处理:

  首先将X-Loop行添加到邮件中(使用formail将它们添加到mail的信封上),以免造成对同一个邮件的循环处理,然后将文件/market/acknowlegement.txt发回给发送者;并以及转发邮件,在market中保存邮件。

  根据这些规则,使用Procmail就能完整的处理各种邮件,减轻电子邮件不断增多而造成的困扰。
 楼主| 发表于 2003-2-11 19:31:42 | 显示全部楼层

FreeBSD连载(42):NFS客户支持

网络文件系统(NFS)

  NFS是一种Unix之间通过网络共享文件的标准方式。使用NFS,就能够透明的安装和访问网络上远程主机上的文件系统,将其安装到本机的文件系统中。

    * NFS客户支持

  安装NFS服务器上的文件系统的方式与安装本机磁盘文件系统非常相似,同样是通过 mount命令:

# mount  nfssrv:/exports  /mnt

  这个命令将nfssrv主机上的/exports目录安装到本机的/mnt目录下。可以看到安装 NFS与本地磁盘文件系统的不同在于 ── 文件系统的描述方法不同。本地磁盘文件系统使用/dev下的设备文件来描述,而NFS文件系统使用远程主机名和主机上的共享目录名(中间使用:分隔)来描述。当然其执行的实质是不同的,事实上mount根据文件系统的类型,执行mount_nfs来真正安装nfs文件系统。

  /mnt应该是本地文件系统上的一个空目录,没有安装其他文件系统。如果这个目录非空,那么使用mount之后,原有的本地文件系统中的内容将不可被访问,只能看到新安装上的文件系统中的内容。

  由此来看,NFS客户不需要进行复杂的配置,只需知道NFS服务器的主机名和共享出的目录名即可。事实上,知道了NFS服务器的主机名,就可以使用showmount命令,来查看这台服务器共享出的目录名和访问限制。

# showmount -e nfssrv

  使用NFS文件系统只需要内核支持,而不需其他额外设置,但是同时使用nfsiod进程能够提供高效的缓冲机制,从而改善nfs文件系统的性能,应该可以在装载NFS文件系统之前执行这个守护进程。

# nfsiod -n 4

  参数-n 4用于限制nfsiod的副本数量,每一个nfsiod用于辅助处理一次I/O操作,因此如果通过NFS文件系统进行频繁的I/O操作,就要考虑增加nfsiod的副本数量。

  由于使用nfsiod能够提升系统性能,对于NFS客户计算机,就可以在系统启动时执行这个守护进程。这需要在FreeBSD的系统配置文件rc.conf中设置nfs_client_enable参数的值为"YES",系统启动时就自动执行nfsiod。

    * 使用fstab

  对于经常用到的NFS文件系统,并且提供NFS服务的Unix主机也非常可靠。那么就可以将这些系统加入/etc/fstab文件中,在系统启动时自动安装该NFS文件系统。由于NFS文件系统不在本地,因此在服务器不能提供NFS服务时就会造成故障,系统会遇到启动障碍,而不同正常启动。因此对于一台不稳定的服务器系统,最好不要使用/etc/fstab来装载NFS文件系统,或者在/etc/fstab的设置参数选项中使用noauto参数,不让系统自动装载这个文件系统。

# Device                Mountpoint      FStype  Options         Dump    Pass#
/dev/wd0s3b             none            swap    sw              0       0
/dev/wd0s3a             /               ufs     rw              1       1
/dev/wd0s3f             /usr            ufs     rw              2       2
/dev/wd0s3e             /var            ufs     rw              2       2
proc                    /proc           procfs  rw              0       0
/dev/wcd0c              /cdrom          cd9660  ro,noauto       0       0
nfssrv:/exports         /nfs            nfs     ro,noauto       0       0

  /etc/fstab文件中的第四列为安装文件系统时使用的安装参数,如果增加了noauto选项,这样系统启动时并不立即安装这个文件系统,而是直到管理员输入mount命令之后才进行安装。但是此时mount命令的参数就可以比较简单,对应前面安装nfssrv的命令,可以简化为 mount /nfs,mount会查看fstab文件寻找匹配的行,以使用正确的参数安装文件系统。

    * 自动安装守护进程AMD

  为了更方便的使用NFS,可以使用自动安装软件amd(automounter daemon,自动安装守护进程)自动维护文件系统,这就使在访问具体目录时能够立即安装该文件系统,而经过一端时间间隔内没有任何访问发生,再自动卸载这个文件系统。

  amd需要指定一个进行监视的空目录,所有要安装的文件系统与这个目录下的子目录一一对应;它还需要一个维护用的空目录,用于安装远程文件系统,而监视目录中的子目录将是正确安装的文件系统的符号连接。这些子目录和符号连接并不需要管理员创建,而是要在映射文件中指明,由amd来创建和维护。当监视子目录被访问时,amd守护进程就会安装相应的文件系统并建立正确的连接,使得目录和文件能被正常访问。

  通常使用/etc/amd.map用作amd的映射文件,这个文件就用于告诉amd子目录与文件系统的对应关系。下面是一个最简单的映射文件amd.map:

# cat /etc/amd.map
/defaults       type:=host;fs:=${autodir}/${rhost};rhost:=${key}
nfssrv                 typs:=nfs;rhost:=nfssrv;rfs:=/exports

  第一行使用/defaults定义缺省的设置,type参数用于定义维护的文件系统的类型, host类型为通过NFS安装远程服务器中直接在exports文件中输出的目录,fs参数为amd安装文件系统使用的安装位置,变量autodir为amd维护安装文件系统的目录,而rhost变量为远程计算机的名字,需要进行设置。缺省的rhost变量设置为${key}的值,当用户访问amd监视目录的子目录时,key就被设置为这个子目录的名字。通过这个缺省设置,当用户访问amd监视目录的任意一个子目录时,这个子目录名就被转换为远程NFS服务器的名字,amd就自动将这个服务器共享的目录安装到fs定义的安装位置上。

  第二行设置一个专有的映射关系,第一列也是amd设置的key值,当访问对应的子目录时就启动这个设置,这一个安装点为nfs类型,nfs类型与host略有不同,host类型只需要rhost 定义,而查询服务器上的共享出的目录来自动安装,而nfs类型则要配置者手工指定远程主机共享的目录,这就需要设置rfs参数。通常在自动维护的计算机数量较少时,使用nfs类型更明确,否则可以使用host类型以简化配置工作。

  设置好映射文件之后,就可以运行amd守护进程了。

# amd -a /net -c 1800 /host /etc/amd.map
# ls /host
# cd /host/nfssrv
# ls -l /host
nfssrv

  上面的amd的命令参数为,第一个-a参数告诉amd将真实的文件系统安装到/net这个临时目录下,在执行amd之前必须建立这个空目录,这个目录将被amd作为autodir变量设置映射关系;-c参数用于指明超时参数,经过这个时间间隔内没有访问这个文件系统上的内容,就卸载已安装的文件系统,设置为1800秒;而/host目录为amd监视用户访问的目录,访问这个目录中的子目录,就会触发amd守护进程,例如上例中使用cd /host/nfssrv访问nfssrv子目录,那么amd 就将启动,将nfssrv设置为key值,因此amd就读取/defauts设置的缺省参数和nfssrv这个key值对应的参数,然后执行自动安装过程。最后一个参数就是指定映射文件为/etc/amd.map。

  因此,amd的处理过程可以总结为:用户首先访问/host目录下的子目录,触发amd;amd 使用子目录的名字作为key值,读取相应映射文件中的设置,将文件系统安装到/net目录下的相应目录上(fs定义的目录);最后amd在/host目录下以key值建立符号连接,指向已经安装到/net 目录下的真实文件系统,使得用户访问子目录的操作能够正常完成。

  amd主要是和NFS结合使用,用于维护多台服务器的用户和文件目录的一致性,然而amd 不仅仅能用于维护NFS文件系统,同样也可以用于维护其他种类的文件系统,如CD9660、本地文件目录的连接,以及扩展到运行一个程序等方式自动安装相应的文件系统,对于这些非NFS文件系统,就需要使用不同的type参数定义不同的类型。例如可以使用amd将所有用户的个人目录维护在同一个路径下,而不是事实上分布在不同目录和主机上,等等。此时,amd.map应为:

/defaults         opts:=rw,grpid,nosuid,nodev


wb host==wb;type:=link;fs:=/home/wb

cd opts:=ro;host==wb;type:=cdfs;dev:=/dev/wcd0c

dos host==wb;type:=program;mount:="/sbin/mount_msdos mount_msdos /dev/wd0s1 ${path}"

  这个映射文件中的缺省设置中首先使用opts设置了几个安装选项,用于安装文件系统时使用。由于这个例子中维护的文件系统NFS文件系统,因此没有使用变量定义相应的参数,而且在维护的文件系统不多的条件下,可以直接定义各个自动安装所需要的各个参数。

  第一个设置为是一个link类型,它必须在主机为wb(本地主机的名字,amd将自动设置 host变量)时才有效。这个类型只是用于建立连接,因此就没有必要定义rhost和rfs,而通过 fs定义需要建立连接的目标。因此当访问/host/wb目录时,amd就自动建立一个到/home/wb的符号连接。

  第二个设置为cdfs类型,这用于访问时自动安装CDROM,它通过dev参数设置安装使用的设备文件。第三个设置为program类型,当访问/host/dos目录时,amd会自动执行后面的mount_msdos 程序,装载上dos分区,安装点被使用变量path传递给外部程序的参数。

  为了在启动时自动执行amd,需要修改rc.conf中的设置,更改其中的选项amd_enable为”YES”, amd的执行参数在amd_flags项中设置,缺省为:

amd_flags="-a /net -c 1800 -k i386 -d my.domain -l syslog /host /etc/amd.map"

  这个参数使用了另一些有用的参数,-k参数用于运行amd的计算机内核体系,-d参数用于定义计算机的domain名,修改这个参数可以帮助amd侦测计算机所在的domain名字,因此要修改为计算机实际的域名,-l参数定义审计记录文件,缺省使用syslog。amd的设置相当复杂,这里只是通过一个映射文件来提供针对一个目录的自动安装维护,实际上amd可以同时维护多个目录,这就需要设置一个配置文件,来定义多个监视目录。对于一般的目的,使用命令行指定一个映射就够用了。
 楼主| 发表于 2003-2-11 19:32:37 | 显示全部楼层

FreeBSD连载(43):NFS服务器

NFS服务器

  为了使得其他系统能使用FreeBSD上的硬盘空间,就需要运行NFS服务进程。NFS服务器使用了几个守护进程用于提供NFS服务。最基本的提供NFS服务的系统至少要运行nfsd和mountd 守护进程,nfsd用于处理NFS协议,而mountd用于处理客户的mount请求。此外,由于NFS使用RPC 远程调用,因此portmap、rpc_lockd、rpc_statd等RPC守护进程都可以用来帮助提供更高效的服务。

  这些守护进程一般应该在系统启动时载入,因此需要在rc.conf中更改相关的参数: nfs_server_enable, rpc_statd_enable, rpc_lockd.enable和portmap_enable参数将对应相应的守护进程。

  那么系统重起之后,就有了能共享文件出去的能力,余下的工作只是用来配置需要共享那些目录,以及进行何种限制以保证安全性,这些设置工作需要更改/etc/exports文件:

# cat /etc/exports
/usr/src/sys -maproot=daemon ns host2
/usr/ports -ro -network 192.168.1.0

  从这个例子中可以看出exports文件的格式,首先是定义要共享出去的文件目录,必须使用绝对路径,而不能使用是符号连接。后面就是对这个目录进行访问限制的参数,用于保证安全性。第一行设置中,将/usr/sys/src目录共享出去,但限制客户机上的root用户等价于本机上的daemon用户,以避免客户机上的root用户拥有这个服务器上的root权力,进行非法操作,此后的ns和host2参数是主机名,这就限制只有ns和host2才能共享这个/usr/sys/src目录。第二行设置共享了/usr/ports目录,但限制为只允许读取,并且也只有192.168.1.0网络上的计算机才能访问这个共享目录。

  目录的访问限制中具有多种选项,这些选项对于保证NFS的安全性相当重要。

  -ro---以只读形式输出文件系统,远程客户只能读不能写这个目录

  -maproot---将客户机上的root用户映射为服务器中的某个用户和族,也可以使用UID 和GID的形式,如maproot=root,maproot=10,或maproot=10:1。这个设置选项可以用来保护服务器上的文件系统不被客户中的使用者非法访问。

  -mapall---将客户上的所有用户都映射为本机的某个用户,使用形式与maproot相同。它同样也是用于保护服务器文件系统的安全性的。

  -alldirs---允许安装该目录下的所有子目录。

  -network---允许一定网络上的计算机可以装载这个文件系统。

  -mask---用于修订 network中的网络号使用的缺省掩码,可定义对网络的一部分开放文件系统。

  当更改了exports文件之后,需要向mountd发送SIGHUP信号,使其重读exports文件的内容。

未完,待续。。。  
 楼主| 发表于 2003-2-11 19:34:36 | 显示全部楼层

FreeBSD连载(44):X Free86的硬件要求

第5章 设置和使用X Window

  当将FreeBSD系统用作服务器的时候,其正常工作并不依赖于任何图形界面,只使用字符界面就能完成几乎的全部服务器端任务。然而,图形界面具有更大的灵活性,可以同时打开多个窗口、执行一些字符界面无法完成的任务(如图形处理)、使 FreeBSD系统更容易使用等,图形界面的处理能力是打算将FreeBSD系统用做个人工作站平台的必备能力。

  FreeBSD通过X Window系统来支持图形界面,X Window是由MIT开发的一套标准图形接口,其当前版本是X11R6.3。与MS Windows或Macintosh的图形界面不同,X Window是一套平台独立的基本图形功能调用接口,它不包括具体的硬件实现和具体的显示风格,因此X Window具备高度可配置性,有多种多样的显示风格。如果将图形界面分为涉及应用程序的显示管理能力、进行图形处理的图形接口和低层的显示硬件接口三个部分,那么X Window就是中间层和低层的一套图形处理协议。

  但是MIT发布的X Window源代码并不包括低层代码,即系统在具体显示硬件上的实现,为了使X Window能在计算机的具体硬件上运行起来,还需要开发相应的驱动程序。除了专有厂商开发了各种硬件驱动程序以提供真正可用的X Window系统之外,另一个具备多种硬件驱动程序并可以自由使用的X Window系统为XFree86。它是由很多志愿者组织的,利用X Window的源代码为各种显示硬件开发可供自由使用的X服务器,使得X Window系统能够在具体的操作系统硬件上真正运行起来。FreeBSD以及其他几种自由操作系统均使用Xfree86系统作为图形系统。

    *
      安装和设置X服务器

  FreeBSD中使用XFree86作为基本X Xindow系统,然而也有专业厂商为FreeBSD 系统制作X服务器,例如Xi Graphics公司,商业公司开发的X服务器通常能够支持更多、更新的显示硬件,并能支持新型硬件的各种特性。XFree86由于为志愿者进行开发,不能得到显示硬件生产厂商的技术支持和技术资料,因此对新硬件的支持要差一些。一般情况下,如果没有使用太新的显示硬件,XFree86即能满足建立图形系统的需要。因此这里就介绍设置和使用XFree86系统的方法。

    * X Free86的硬件要求

  当前XFree86最新发布的版本为XFree86 3.3.3,支持多种类型的显示卡。但是图形界面比文本界面需要更多的系统资源,尤其是内存空间。通常要正常运行X Window 的FreeBSD系统,至少需要8MB内存,并且还应有8MB的交换空间,以运行其他X应用程序。然而要想获得更高的性能,还应该有更好的硬件条件,如带有硬件加速能力的显示卡。

  显示卡:XFree86支持多种显示卡,从普通的VGA显示卡到专用图形加速卡。一般的个人计算机均使用某一种VGA兼容的显示卡,这就满足XFree86的最低要求。但如果XFree86支持显示卡的具体类型,就可以用256色或更高的真彩色、更大的分辨率的显示模式来运行X Window系统,否则就只能使用16色的标准VGA模式。而且使用图形加速卡的硬件功能会明显改善图形界面的显示速度。

  显示器:由于Unix的使用者和开发者用惯了专业工作站,所以他们设计的图形界面是为了大屏幕而设计的。在小显示器上使用X Window,往往会觉得按钮过大、边框过粗等等,因此显示器最好能达到1024x768的分辨率,甚至更高,才能更好的发挥X Window下的各种界面风格的优势。

  键盘:常用的Unix工作站键盘也与PC键盘的排列不太一样,但是一般的使用者更习惯PC风格的键盘。XFree86可以重新映射键盘,缺省情况下键盘的映射为PC风格的键盘,但对于更熟悉工作站键盘使用者可以重新定义键盘上的排列。

  鼠标:MS Windows使用的是2键鼠标,在X Window中更习惯使用3键鼠标,对于只有2键鼠标的计算机,XFree86能提供一种模拟第三键操作的功能。使用风格也不太相同,例如在Windows95中使用双点 “double click” 来执行程序,在X下一般只需单点即可,因为使用X Window的用户通常是长期使用计算机的专家,他们认为双点操作使得手指处于紧张的状态,长期进行双击操作会对手指造成损伤。

  安装XFree86之前,首先需要了解计算机的显示卡是否被XFree86所支持,XFree86支持大量常见的显示卡硬件,然而由于X服务器的驱动不是由硬件厂商开发的,那么一个硬件从出现到被XFree86支持需要一段时间,很多硬件厂商出于保护商业机密的考虑,没有公开他们硬件的详细资料,这就对开发对他们硬件的驱动程序提供了额外的阻碍。安装了XFree86 之后,可以查看其文档目录中的README文件(FreeBSD下这个文件的路径为/usr/X11R6/lib/X11/doc/README ),来查看Xfree86支持的显示卡芯片的种类。
 楼主| 发表于 2003-2-11 19:35:35 | 显示全部楼层

FreeBSD连载(45):安装XFree86

安装XFree86

  FreeBSD将XFree86作为了操作系统的基本组件,可以在安装系统时选择安装。在安装系统时进行的组件选择时,按照对不同组件的选择,例如选择X-User 或X-Developer选项,将安装Xfree86系统。系统安装时还会提示用户立即设置 XFree86,但是由于FreeBSD的初始运行与图形界面关系并不大,因此这个设置工作可以在安装系统之后的任何时候进行,而并非必须在初始安装时进行。

  如果在初始安装时没有安装XFree86,也能够在整个安装系统安装完成之后再进行安装。此时可以从安装介质中手工安装二进制组件,或者自己从Xfree86 主页(http://www.xfree86.org)或Free ... 以使用sysinstall 或这个目录下的install.sh程序来帮助安装。

  在XFree86的较早版本中,其设置是一个十分困难的问题。因为显示卡种类很多,而且每个卡的参数种类也繁多,要正确设置XFree86,就必须对这些硬件有较深的了解。最早的时候需要手工更改配置文件,后来XFree86提供了一个交互式的命令行配置程序xf86config,来帮助使用者配置X Window。但是这个程序只是简单的提示使用者输入相关信息,并且一个选项一旦确定,就不能回溯回去进行修正。因此,如果是第一次使用xf86config来配置XFree86的话,毫无疑问将会遇到种种问题。

  幸而在后来的XFree86中,XFree86的开发者又提供了另一个配置程序: XF86Setup,它首先启动16色的标准VGA模式的X Window,再执行图形界面的设置程序,通过图形界面提供了一种更为容易的方式来设置XFree86的服务器。

  当使用sysinstall程序来设置X Window(选择Configure菜单中的Xfree86),那么它将提示使用者选择XF86Setup和xf86config这两种不同的设置方法。注意这个选项中的PC98是指日本生产的一种特殊计算机硬件类型,而非标准硬件中的主板 PC98规范,因此使用标准PC的使用者不需要使用这个设置选项。

  如果不使用sysinstall来启动设置程序,也可以手工在命令行中输入(必须是以root权限)相应的命令:

  # /usr/X11R6/bin/XF86Setup

  或

  # /usr/X11R6/bin/xf86config

  使用不同的命令将启动相应的设置程序。

未完,待续。。。  
 楼主| 发表于 2003-2-11 19:39:03 | 显示全部楼层

FreeBSD连载(46):使用XF86Setup配置X服务器

使用XF86Setup配置X服务器

  XF86Setup是在图形界面下运行的设置程序,它运行在图形界面下,如果系统没有启动 X Window系统,那么它会自动启动一个标准VGA模式的X服务器,因此这就要求FreeBSD系统内必须安装了XFree86的VGA模式的服务器XF86_VGA,XF86Setup首先使用缺省设置启动这个16色、640x480分辨率的X服务器,然后再运行XF86Setup设置程序本身。

  但如果已经启动了X服务器,使用这个设置程序进行重新设置X服务器的话,那么就会使用现有的X服务器。XF86Setup还会询问是否以现有设置为基础进行设置,如果X Window运行正常的情况下,应该以现有设置为基础进行修改,而不必完全重新进行设置。

  XF86Setup配置程序的显示如上图显示,它显示了可供操作的六个选项,设置鼠标的 Mouse选项,设置键盘的Keyboard,设置显示卡的Card选项,设置显示器的Monitor选项,设置显示模式 ── 分辨率和刷新频率的Modeseletion选项,以及设置一些其他X服务器的选项 Other,除了最后一个选项之外,每个选项都需要重新设置。

  在XF86Setup中可以使用鼠标或键盘进行操作,通常键盘都是标准键盘,因此不需要额外设置,而鼠标需要额外的检测和设置。设置程序会试图检测计算机上所使用的鼠标类型和端口,以对鼠标进行探测。如果FreeBSD系统配置并运行了moused,XF86Setup就毫无问题的检测出这个伪鼠标设备,供使用者使用鼠标进行操作。如果没有使用moused,就有检测鼠标就可能失败,使用者就只能使用键盘进行操作。

  在这个设置界面下,首先可以使用回车,首先进入鼠标选项的设置界面,这样可以首先设置鼠标,鼠标设置完毕之后就能使用鼠标进行下面的各项操作了。与大部分应用程序相同,键盘操作使用的基本键是Tab与Enter,Tab用于在各个设置选项之间切换,Enter用于选择相应的选项。

  第一次进行操作时将出现上图所显的对话框,阅读过其显示的信息之后,就可以确认,以进入各项设置的操作过程。

    * 设置鼠标

  设置X服务器的第一步就是要配置鼠标,鼠标是X Window的必需设备,如果没有设置鼠标,X服务器就不能正确启动。如果已经使用Sysinstall配置好了控制台鼠标守护进程moused ,那么鼠标就能被正确侦测到,这就能略过设置鼠标的步骤,直接进入下一个设置选项。

  moused守护进程在后台维护着/dev/sysmouse这个伪设备,将鼠标物理端口送来的鼠标移动和点击数据转化为这个伪设备上的鼠标操作数据,那么X服务器就能使用/dev/sysmouse 这个设备文件作为鼠标设备,使用SysMouse作为鼠标类型,而不必管真实的鼠标端口和类型。使用moused的一大好处就是鼠标设备由moused维护,而与X服务器无关,因此不会因为鼠标的问题造成X服务器的故障。因此一般情况下,应该使用moused来维护鼠标设备。

  如果不打算运行moused来管理鼠标设备,此时就需要根据鼠标的具体类型和连接到的具体端口,来选择对应的正确设备文件,来为X服务器设置鼠标。如果鼠标是接在第一个串行端口sio0上,那么对应的设备为/dev/ttyd0,第二个串口设备为ttyd1,而常用的串口 2键鼠标为Microsoft类型。其他设备文件包括对应PS/2鼠标的psm0,对应总线鼠标的mse0等。但是在moused正常启动的条件下,真实的物理端口就不能正常工作了。

  当没有使用moused的时候,就需要使用键盘进行操作。键盘操作就比较繁琐,但设置完毕之后,可以立即选择右边的按钮 “Apply” ,使鼠标可以立即发挥作用,此后就能使用鼠标进行其他操作了。如果鼠标设置正确,该界面上右边的鼠标图形中的按键会随鼠标按键而闪动,其位置坐标会随鼠标移动而改变。

  除了基本的鼠标类型和端口之外,鼠标选项中还有很多参数可以调整,其中一个重要的参数为 “Emulate3Button” ,因为X Window系统习惯上使用3键鼠标进行操作,很多功能用到了鼠标的第三个键。而普通个人计算机鼠标是2键鼠标,那么就需要使用2键模拟中键的功能,选择这个选项就使得在同时按下鼠标的左右2键时,X服务器将这个动作解释为按下了第三个键 ── 中键。当然如果计算机上本来就是使用3键鼠标,就不必考虑这个问题了。鼠标还有一些其他设置,如解析率、移动速率等,一般使用缺省值,不需要改动。

  注意:在使用moused的情况下,映射的sysmouse伪设备本身就为一个3键鼠标,因此 Emulate3Button选项就会失效。需要使用moused的 “-3” 参数,在moused中打开双键模拟第 3键的功能。

    * 键盘设置

  接下来就需要配置键盘,缺省设置为标准101键的PC键盘,就在标准个人计算机下正常工作,因此对于快速配置X服务器,可以略过这一步配置。当然也可以根据实际选择102键标准键盘或104键Windows95标准键盘,其他种类的键盘在个人计算机平台上很少见到。

  这个部分中的其他设置是为了与Unix工作站使用的键盘相兼容,而对键盘上的功能键Ctrl、Shift等重新映射它们的位置和定义。主要是因为专用工作站键盘中的控制键的位置与标准PC键盘不同,使用这些设置就能使标准PC键盘适合习惯于专用工作站键盘的使用者。这些设置一般根据使用者的个人习惯而定,对于习惯个人计算机键盘的使用者,一般不需要改变这些设置。

    * 设置显示卡

  对于X Server的设置来将,最重要、也最困难的一步就是设置正确的显示卡类型,当前的X服务器已经相当完善,有能力自行检测显示卡的硬件种类,因此甚至可以不配置这个选项,而留给设置系统来确定。此时就可以跳过这个设置步骤。

  然而对于个人计算机平台来讲,硬件种类过多,并且不同的号称兼容的硬件事实上存在细微兼容性问题,自动检测并不能保证百分之百检测正确,因此如果自动检测的结果不能使X服务器正常工作,就需要手工指定显示卡硬件的类型,及相应的参数。显然手工设置这些参数不是一个简单的事情,需要对自己计算机的硬件有相当了解,最好阅读README 文件(左边按钮),并进一步阅读/usr/X11R6/lib/X11/doc目录下的相关文档,以了解清楚硬件配置。

  此时,XFree86的自动检测信息也对了解硬件配置信息很有帮助,XFree86提供的程序SuperProbe可以用来来检测当前计算机使用的硬件,这个程序将探测显示卡的硬件设置,并将结果返回给用户,帮助用户设置系统。

# /usr/X11R6/bin/SuperProbe

SuperProbe Version 2.18 (22 December 1998)
        (c) Copyright 1993,1994 by David Wexelblat
        (c) Copyright 1994-1998 by The XFree86 Project, Inc

        This work is derived from the 'vgadoc2.zip' and
        'vgadoc3.zip' documentation packages produced by Finn
        Thoegersen, and released with all appropriate permissions
        having been obtained.  Additional information obtained from
        'Programmer's Guide to the EGA and VGA, 2nd ed', by Richard
        Ferraro, and from manufacturer's data books

Bug reports are welcome, and should be sent to XFree86@XFree86.org.
In particular, reports of chipsets that this program fails to
correctly detect are appreciated.

Before submitting a report, please make sure that you have the
latest version of SuperProbe (see http://www.xfree86.org/FAQ).

WARNING - THIS SOFTWARE COULD HANG YOUR MACHINE.
          READ THE SuperProbe.1 MANUAL PAGE BEFORE
          RUNNING THIS PROGRAM.

          INTERRUPT WITHIN FIVE SECONDS TO ABORT!

First video: Super-VGA
        Chipset: ATI 264GT3 (3D Rage III) (Port Probed)
        Memory:  2048 Kbytes
        RAMDAC:  ATI Mach64 integrated 15/16/24/32-bit DAC w/clock
                 (with 6-bit wide lookup tables (or in 6-bit mode))
                 (programmable for 6/8-bit wide lookup tables)
        Attached graphics coprocessor:
                Chipset: ATI Mach64
                Memory:  2048 Kbytes

  XF86Setup提供的显示卡设置界面有两种,一种是以各种具体不同的显示芯片列表的方式进行显示的,如上图所示,但显示卡上的其他硬件设置都是通过自动检测进行探测。另一种依据X服务器的种类进行划分,可以指定芯片的具体类型、显存的容量等一些参数的设置。一般可以选择Detailed Setup按钮,设置X服务器的具体参数。

  在这个Detail Setup的设置方式中,能选择不同的X服务器,并设置芯片、显存、时序等具体的硬件参数,由于X服务器能够自动探测到系统中的这些参数,一般不必设置这些值。最重要的是要在选择要使用的正确X服务器,这是因为每一种X服务器只能支持部分种类的显示芯片,如果选择的X服务器不支持实际使用显示芯片,那么肯定不能正确检测出显示硬件的各个参数。因此需要根据显示芯片来确定X服务器,而XFree86的文档中提供了那种X 服务器支持那些显示芯片的相关信息。

  必须注意的是,这里选择的X服务器一定要在安装过程中安装到系统中了,否则就找不到正确的X服务器程序,也不可能正确启动X Window系统。

    * 显示器类型

  接下来要确定显示器的类型,当前使用的显示器都为多频显示器,需要选择正确的水平和垂直同步频率范围。显示器的水平和垂直同步频率范围决定了显示器的分辨率和刷新频率能力,超过这个频率范围将使显示器不能正常工作,甚至损坏显示器。实际上显示器的分辨率和该分辨率下刷新频率这两个参数才是使用者最关心的数据,也是用来判断显示器能力的最基本参数,此外还有一些参数,如色差、辐射等,属于对显示器的更高要求,但它们对于X服务器的设置没有影响。

  一个显示器的水平和垂直同步频率范围决定显示器在某个分辨率下的最高刷新频率,反过来,一个给定的分辨率和在此分辨率下的给定刷新频率也能确定显示器的同步频率范围,因此可以在图上给出的可选的分辨率和刷新速率选项中,选择自己显示器支持的分辨率与刷新频率的最高值。选择的值太低就不能充分发挥显示器的能力,太高会造成不能正确显示的问题。因为这个设置比较重要,因此需要查看显示器手册以得到正确的参数设置(另一种方式是通过从低到高的尝试,来确认正确的设置)。

  当选定了一个显示器的类型时,就也确定了该显示器使用的显示模式,即分辨率和相应的刷新频率。因此X Window就会使用的相应显示模式,这个模式就可以用于下面的设置。然而显示器实际能支持的模式要多于这里设置的显示模式,XF86Setup中并没有提供在同步频率范围内支持的全部分辨率,只是提供了在某个同步频率范围内值得推荐使用的显示模式。虽然显示器的最小点大小和显示器本身的大小决定了一个显示器最适合的显示分辨率,例如在小显示器下使用太高的分辨率就没有太大意义(因为实质上并不能区分出两个近邻的点),但是提供更多的显示模式能适应一些特殊需要。通常对于15英寸显示器最好使用800x600或1024x768 分辨率,17”显示器可以使用1024x768或1280x1024分辨率。

  另一方面,由于一定显示器的水平和垂直同步范围一定,因此如果分辨率提高了,则刷新频率就不得不降下来,甚至降到隔行扫描的方式,这样显示器将闪烁的厉害,不适合长时间使用。当分辨率和刷新频率的设置超出水平和垂直同步频率范围,则显示器将不能正常显示。

    * 设置显示模式

  另外一个设置是选择正确的显示模式,XF86Setup从低到高列出一系列分辨率模式和多个颜色深度供选择。这一步能选择的显示分辨率模式要受上一步设置的显示器支持的显示模式的限制。在上一步设置中,有的显示器设置中同时设置了多个显示模式选项,此时就能在这里选择相应的多个显示分辨率,而有的设置仅仅支持部分显示模式,这里就只能使用对应的分辨率。同时设置多个显示模式的好处是能够动态切换显示模式,但对于正常使用并没有太大必要。选择的最大分辨率模式将决定X服务器虚屏大小的设置。

  然后可以选择运行X的颜色数,缺省为8bpp,即256色,但由于硬件的发展,显示内存一般都比较充裕,因此更常使用16bpp、24bpp等设置,使X能使用更丰富的颜色。这个颜色数主要由显示内存和显示虚屏的大小来决定,虚屏中的每个象素都占用一个颜色深度大小的显示内存(8bpp为1个字节,16bpp为2个字节等等),而虚屏的大小为该颜色深度下的最大分辨率模式的大小(可以在以后更改),那么所有虚屏上的象素占用的空间,不能操作显存的大小。一般来将,也不应该将虚屏(或颜色深度)设置的占满显存,因为硬件加速卡内部操作会使用空余显存作缓冲区,占满显存就会影响硬件加速能力。

    * 其他设置

  其他选项中主要设置一些X服务器的属性标志,如是否可以使用Ctrl-Alt-BackSpace热键退出X服务器,是否允许动态切换显示分辨率,是否捕获各种信号,是否允许从其他计算机上使用 xvidtune或类似程序改变当前显示分辨率模式,是否许可从其他计算机的X客户程序更改服务器的键盘和鼠标设置等。

  一般均使用缺省设置,如果管理员要提供更大的限制,例如不允许使用热键退出而必须使用正常的退出方式等,就应该改动缺省设置。

    * 保存设置启动X服务器

  所有的选择结束之后,就可以选择这个对话框最下端的Done按钮,XFree86将按所配置的参数重新启动相应的X服务器。如果配置正确,那么X服务器将会正确启动,进入设置好的图形系统。

  这个时候选择菜单的第一项可以运行xvidune,XF86Setup在这里提供了一个对显示模式进行微调的机会。显示器出厂设置的时候,只有最常用的显示模式才被调整到最佳设置,其他模式的设置并不位于最佳设置,在宽、窄、高、低等方面均不是最佳设置。这样在显示器的显示模式切换的时候,常常会发生显示器所显示的内容不在屏幕正中,或者高度、宽度不正常,这种问题一般可以通过调节显示器下面的按钮来纠正。然而对较早的模拟式显示器来讲,调整一个显示模式的设置,就会影响其他显示模式(例如字符模式)的显示,这样就不适合经常切换显示模式的情况。对于数字式显示器就不存在这个问题,因为显示器能记忆多个显示模式的设置数据,因此现在一般不需要使用这个调节程序,而直接使用显示器的调整按钮。

  然而xvidtune也能帮助纠正显示模式的偏差,而且无须调整显示器下的任何旋钮,这尤其对于旧式显示器就更为重要。它通过微调显示模式使用的扫描频率,直接纠正这个问题。因此就可以执行xvidtune调整显示,当一切正常之后,退出xvidtune时,设置程序将从xvidtune中获得当前使用的扫描频率,并将其保存到设置文件中。如果在设置程序之外执行xvidtune,不会自动保存调整结果,而需要手工更改设置文件。

  xvidtune能改变显示模式,也可能超出显示器支持的能力之外,早期的固定频率的显示器可能会因此造成损坏,现代多频显示器不会因为短时间的模式超范围使用,造成过于严重的后果。但仍然需要小心操作。xvidtune窗口中显示有调节参数的按钮,每点按一次改变一些参数之后,应该先使用Test来看看有无问题,再使用Apply来确认改变。一旦显示内容变的不可分辨,表示设置超出了显示器的能力,就应该迅速使用Ctrl、Alt和Backspace组合键将X杀死,以避免长时间超范围使用显示器,而对显示器造成损坏。

  使用xvidtune或数字式显示器的调节键将模式调节正确之后,然后选择第二项,将结果保存到前面指出的配置文件中,缺省为/etc/XF86Config,这就是XFree86的X服务器使用的配置文件。退出XF86Setup之后,就可以使用startx来启动X Window了。

  X服务器如果不能正确启动,说明前面的配置中出现了错误。此时可以重新进入设置程序,并重新开始进行设置。需要更仔细的修改相应的配置,以避免错误再次发生。配置错误主要发生在显示卡硬件的设置上,但也要注意显示器的设置不要超过显示器的实际显示能力。

  当确信XFree86的当前版本不支持所使用计算机的显示硬件,就只能使用16色的标准VGA模式,或者购买Xi Graphics等商业公司X服务器。一些Linux版本,具备新型显示硬件的XFree86的补丁或X服务器,FreeBSD的使用者可以从补丁出发重新编译支持新硬件的X服务器,或者直接运行Linux 的X服务器,所需要作的只是调整相应的设备文件的不同。

未完,待续。。。  
 楼主| 发表于 2003-2-11 19:40:34 | 显示全部楼层

FreeBSD连载(47):使用xf86config配置X服务器

使用xf86config配置X服务器

  除了XF86Setup之外,XFree86还提供了另一个交互式的设置程序xf86config。使用xf86config来配置X服务器是一个比较繁琐的过程,因为X的配置过程本来就比较复杂,而xf86config使用命令行交互方式,不能向后返回前一步的设置,因此一旦出现失误,就没有机会进行纠正,只能重新启动xf86config再次进行设置。正因为如此,一般情况下不必使用这个设置程序对X Window进行设置,而应该使用更容易使用的XF86Setup。只有在特定的情况下,才需要使用xf86config。

  当然进行XFree86的设置,所使用的概念是相同的,因此只要详细了解了计算机的显示硬件,并有足够的细心和耐心,使用xf86config 同样也能成功的完成设置任务。
 楼主| 发表于 2003-2-11 19:41:17 | 显示全部楼层

FreeBSD连载(48):X Window的基本概念

使用和配置X Window

  设置好X服务器之后,就可以使用startx启动图形界面,以使用其他图形界面的经验来使用X Window,但使用者常常会发现这个界面相当简单和粗糙。这是因为X Window具有很大的灵活性和可配置性,其最基本的系统只提供了最基本设置,如果要真正得到好用的界面,还需要进一步的设置。

  为了设置和使用X Window系统,首先就需要了解相关的X Window概念。

    *
      X Window的基本概念

  第一次接触X Window系统的使用者很容易混淆X Window系统中的客户机/服务器的概念,初次接触X Window的使用者会认为X Window下的客户机/服务器的概念与普通网络中的客户机/服务器的概念不太相同。通常的观念中,使用者使用客户工作站,使用远端服务器提供的文件或打印服务,而在X Window下,使用者使用X服务器进行操作,而客户程序可以运行在本地或者远端计算机上。

  如果进一步理解客户/服务器的概念,就会了解客户/服务器的概念指的是具体运行的进程,而非计算机或使用者。不是与使用者联系最密切的计算机就是客户,而是首先要明确服务资源,然后再以资源提供者和资源占用者来进行区分。在一般的客户/服务器方式的应用中,一般是客户程序直接与使用者交互,因此就容易造成错误的概念,以使用者为中心来区分客户和服务器。

  但在X Window下,服务资源为X服务器的显示处理能力,X客户程序要显示图形图象,但它不能直接控制显示硬件,只能使用由用户面前的X服务器提供的显示资源,同样它也不能接受用户输入,也只能使用X服务器控制的键盘或鼠标资源来接受输入。在这里,X服务器是硬件的控制者,X客户只是单纯的执行程序,只能使用X服务器提供的服务进行输入输出。

    * X服务器(X Server)是一个管理显示的进程,必须运行在一个有图形显示能力的计算机上。理论上,一台计算机上可以同时运行多个X服务器,每个X服务器能管理多个与之相连的显示设备。

    * X客户程序(X Client)是一个使用X服务器显示其数据的程序,它可以运行在与X服务器不同的计算机上。

    * X协议(X protocol)是X客户程序和服务器进行通信的一套协议,X协议支持网络,能在本地系统中和网络实现这个协议,支持的网络协议有TCP/IP、DECnet等。

  X的这种任务划分有几个优点:

客户程序可以在远程计算机上执行计算任务,而使用的X服务器仅负责复杂的图形显示,充分发挥X服务器在显示上的优势。

  只有X服务器与硬件打交道,所有的客户程序都是硬件无关的,很容易在不同的平台上移植。

  客户程序可以在不同的计算机上运行,从巨型机到个人计算机,充分发挥网络计算的优越性。

  尽管每个X客户程序都可以对整个屏幕范围内进行显示操作,但标准的做法是先创建一个显示窗口,此后客户程序的所有显示都相对于这个窗口进行操作。这样在同一屏幕内,就能同时显示多个独立的客户程序,通过对窗口的管理在不同的程序之间进行切换。每个窗口应该位于屏幕的哪个位置,何时显示,何时隐藏,以及窗口的标题、四周如何显示,这些都不应该由产生这个窗口的客户程序自己控制和维护,否则就不能达到简化设计的目的。X Window并没有自己实现这些任务,在X的设计原则中,这些代表 GUI风格的任务仍然是客户程序的任务,因此X将管理窗口的任务给予了一个特殊客户程序 ── 窗口管理器,使用不同的窗口管理器将使X Window的外观看起来截然不同。

  X系统只负责显示图形,并不限制显示和操作的风格,因此不同的X Window的风格并不相同,使用者可以根据自己的喜好进行选择。

  因此X Window上,所有的窗口形成了一个树状结构。X Window的窗口管理程序运行在根窗口上,所有的其他窗口为根窗口的子窗口,而其他窗口上也有相应的按钮、对话框等组件,这些是它的子窗口。

  由于X Window系统只提供了最基本的系统调用,而具体的窗口都有很多共性,因此要开发X应用程序,应该首先使用开发工具包,而没有必要直接使用最基本的X Window 的系统调用,以简化写作程序的工作量。不同的公司或组织开发了各种工具包来提供创建和管理具体窗口的构件,例如Motif套件,OpenLook套件等。每种套件都提供了菜单、按钮、对话框等图形界面的标准构件,还提供基本的窗口管理器。使用不同套件开发的程序,其显示风格也不相同,因此就在不同程序之间形成了不同的GUI风格。Motif和Openlook 就是两种不同的图形界面风格,当前Motif成为了商业X Window的一个标准,很多商业软件均基于Motif进行开发,而Openlook则没有获得更普遍的支持。

未完,待续。。。  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表