|
The FreeBSD China Community
FreeBSD China Community FAQ
--FAQ定义
用简单问答的形式解决一些FreeBSD系统安装,配置,应用等方面的典型问题.
---------------------------------------------------------------------
Q: checksum.md5是干什么用的?
A: md5的校验码, 一般用于检测下载文件是否受到损坏, 可以使用md5 filename来检验
Q: 安装ports时想查找相关ports
A: make search key=
Q: 查看系统版本信息
A: 使用uname命令
Q: 发现FreeBSD的交换空间被耗尽
A: 不追加分区, 可以通过增加交换文件的方式实现
Example 6-1. Creating a Swapfile on FreeBSD 4.X
1. Be certain that your kernel configuration includes the vnode
driver. It is not in recent versions of GENERIC.
pseudo-device vn 1 #Vnode driver (turns a file into a device)
2. create a vn-device:
# cd /dev
# sh MAKEDEV vn0
3. create a swapfile (/usr/swap0):
# dd if=/dev/zero of=/usr/swap0 bs=1024k count=64
4. set proper permissions on (/usr/swap0):
# chmod 0600 /usr/swap0
5. enable the swap file in /etc/rc.conf:
swapfile="/usr/swap0" # Set to name of swapfile if aux swapfile desired.
6. Reboot the machine or to enable the swap file immediately, type:
# vnconfig -e /dev/vn0b /usr/swap0 swap
Example 6-2. Creating a Swapfile on FreeBSD 5.X
1. Be certain that your kernel configuration includes the memory
disk driver ( md(4)). It is default in GENERIC kernel.
device md # Memory "disks"
2. create a swapfile (/usr/swap0):
# dd if=/dev/zero of=/usr/swap0 bs=1024k count=64
3. set proper permissions on (/usr/swap0):
# chmod 0600 /usr/swap0
4. enable the swap file in /etc/rc.conf:
swapfile="/usr/swap0" # Set to name of swapfile if aux swapfile desired.
5. Reboot the machine or to enable the swap file immediately, type:
# mdconfig -a -t vnode -f /usr/swap0 -u 0 && swapon /dev/md0
Q: 如何将系统迁移到新的大硬盘
A: 建议重装系统,然后将数据迁移到新硬盘, 如果真的要直接将系统迁移到新硬盘一定要使用dump和restore,不要使用tar,cpio等, 它们对根目录的操作可能会出现问题, 步骤如下
1.使用newfs新建一个分区.
2.mount上该分区.
3.cd到装载点.
4.使用dump备份旧的分区, 通过管道输出到新分区
例如, 假设要将根文件系统移动到/dev/ad1s1a, 使用/mnt作为临时装载点, 命令如下
# newfs /dev/ad1s1a
# mount /dev/ad1s1a /mnt
# cd /mnt
# dump 0af - / | restore xf -
要在新硬盘上重新安排分区稍微有点麻烦, 例如要把/var文件系统放在新硬盘分区的
根文件系统下, 首先按照上面的步骤移动根文件系统, 然后在移动/var文件系统,
命令如下
# newfs /dev/ad1s1a
# mount /dev/ad1s1a /mnt
# cd /mnt
# dump 0af - / | restore xf -
# cd var
# dump 0af - /var | restore xf -
Q: 如何升级ports安装的软件
A: 使用cvsup, 步骤如下
1.安装cvsup 以root用户到/usr/ports/net/cvsup下make all install clean
2.新建cvsup升级配置文件可以到/usr/share/example/cvsup/ports-supfile拷贝一份,修改 default host=cvsup.FreeBSDchina.org 然后使用 cvsup -gL 2 ports-supfile 升级ports
3.安装portupgrade 到/usr/ports/sysutils/portupgrade目录下 make all install clean
4.最后执行rehash 使用portupgrade -a更新所有ports安装的软件
Q: FreeBSD sshd/telnet禁止root登录的问题
A: ssh修改/etc/ssh/sshd_config更改PermitRootLogin no为PermitRootLogin yes telnet修改/etc/login.access加入+:wheel:ALL
----------------------------------------------------------------------
提交人: Kinki
来源: 台湾交大资工
备注说明: 下面由本人提交的FAQ整理自freebsd.org的官方FAQ的繁体版本.由于时间的关系,有些词可能还不是很恰当,如果你发现有什么不当的地方,或者翻译有误,请跟贴说明,我会尽快修改.如需要转载可以简单附上这个附加说明即可.欢迎转载.
---------------------------------------------------------------------
Q: 1.1. 什么是 FreeBSD?
A:简单地来说,FreeBSD 是一套可以在 i386 和 Alpha/AXP 上执行的 UN*X-like 作业系统,它是根据 U.C. Berkeley 所开发出来的 ``4.4BSD-Lite'',并加上了许多 ``4.4BSD-Lite2'' 的增强功能。它同时也间接使用了 U.C. Berkeley 所开发出来并由 William Jolitz 移植到 i386 的 ``Net/2'',也就是 ``386BSD'',不过现在 386BSD 的程式码只剩下极少数还留 存在 FreeBSD 中。您可以在 FreeBSD 首页找到有关 什么是 FreeBSD 以及它可以帮您做些什么的相关资讯。
FreeBSD 已被广泛地被世界各地的公司行号,ISP,研究人员,电脑 专家,学生,以及家庭用户所使用,用在工作,教育,以及娱乐上。您可 以在 FreeBSD Gallery 看到一些有关他们的资料。
如果想看关於 FreeBSD 更深入的资料,请看 FreeBSD 使用手册。
Q:发展 FreeBSD 的目的是什么?
A:FreeBSD 计画的目的是提供可以任意使用且没有限制的软体。我们在 程式码 (以及计昼本身) 上付出了大量心血,当然不会介意来点金钱上的 回馈,不过我们绝对不会如此坚持。我们相信我们首要的 ``任务'' 就是提供程式码给每一个使用者,不管他们打算用 来干嘛;这么一来,这些程式码才能被用在最多地方,也才能发挥它们最 大的利益。我们相信这就是自由软体最基本的目标之一,而且我们会尽全 力去支持它。
在我们 source tree 中有部份的程式码是采用所谓的GPL或是 LGPL 版权宣告,虽然这些版权宣告是用来保障而非限制使用者的权 利,毕竟是不那么自由了些。由於这些 GPL 的软体在商业使用上会引起 非常复杂的版权问题,因此只要有机会,我们会尽量以采用比较松的 FreeBSD 版权的软体来取代这些 GPL 版权宣告的软体。
Q: FreeBSD 版权有任何限制吗?
A:有的。但是这并不是限制你怎么去使用这些程式码,而是你怎么看待 FreeBSD 这个计画。如果你有版权焦虑症的话,请阅读 版权本文。简单地来说,这份版权的重点可以条列如下。
*
请勿宣称是您写了这个程式。
*
如果它出问题了,不要控告我们。
Q: FreeBSD 可以取代我现在在用的作业系统吗?
A:对大部份的人来说是这样没错,但事实上这问题并没有这么好回 答。
大部份的人并不是真正在使用一个作业系统。他们使用的是应用程式 ;而那些应用程式才是真正用到作业系统的东西。FreeBSD 是设计用来提 供一个强韧且功能完整的作业环境给应用程式来执行。它支援了多种浏览 器,办公室套件软体,电子邮件阅读软体,绘图程式,程式设计环境,网 路伺服器软体,以及几乎所有你想要的东西。大部份的程式都可以靠Ports Collection来管 理。
但是如果你想要使用的应用程式只能在某个特定的作业系统上面执行 的话,你就不能轻易地把它换掉,或者指望在 FreeBSD 上有很相似的应用 程式才有机会。如果你想要的是一个强健的办公室或是网路伺服器,或是 一部稳定的工作站,或是想在不被中断的环境下工作的话,FreeBSD 无疑 是您的最佳选择。世界各地有很多使用者,包括初学或资深的 UNIX 管理 人员都选用 FreeBSD 当他们唯一的桌上作业系统。
如果你是从其他的 UNIX 环境转换到 FreeBSD 的话,基本上是大同小 异的。但是如果你之前用的是图形界面的作业系统例如说是 Windows 或是 比较古老的 Mac OS 的话,可能就要多花一点时间来学习怎么用 UNIX 的 方法来做事。你可以从这份 FAQ 和 FreeBSD 使用手册 来入 门。
Q: 为什么要叫做 FreeBSD?
A: *
您可以免费使用它,即使是用於商业用途。
*
整个 FreeBSD 作业系统完整的原始程式都可以免费取得,而且不 管是在使用,散布或是整合进其他程式等各方面也只受到最小的限 制 (不论是否用於商业用途)。
*
任何人都可以自由地把他对系统的改良或错误修正的程式码加入 source tree 之中 (当然要符合几个先决条件)。
*
特别值得注意的是这里的 ``free'' 出现了两次,而且它们 的意思是不一样的:一种代表 ``免费'',另一种代表 ``自由''。您可以拿 FreeBSD 去做任何您想要做的事,除了一些 例外,例如您宣称 FreeBSD 是您写的。
Q: 1.6. 最新版的 FreeBSD 是那一版?
A:5.0 是目前最新的 RELEASE 版;它於 January 2003 发行。它同时也是目前最新的 STABLE 版。
简单的说,-STABLE 的主要诉求对象是对於 稳定性及低变异性的需求远胜过对最新 -CURRENT snapshot 中特别新功能的需求,例如 ISP 或公司行号的使用者。这两个 branch 都有可能会产生 release 版,但只有当你能接受 -CURRENT 远比 -STABLE 容易更动这一点,才应该用 -CURRENT。
Release 版每几个月才会发 行一次。虽然如此,有很多人和 FreeBSD 原程码同步更新(详见 FreeBSD-CURRENT 和 FreeBSD-STABLE 的相关问题),但因为原始码 是一直不断地在变动的,所以如果要这么做的话得要花上更多的精 力
Q:1.7. 什么是 FreeBSD-CURRENT?
A:
FreeBSD-CURRENT 指的是正在发展中的作业系统版本,它终将在适当的时机成为 5.0-RELEASE。它实在是只适合给系统发展者以及有毅力的业余爱好者使用 。如果想要得到有关如何使用 -CURRENT 的深入资讯,请参考 使用手册 的 相关部份。
如果您对作业系统本身并不是很熟悉,或是您没办法分辨您遇到的问 题是真的发生了问题亦或是暂时性的小状况,那么您就不应该使用 FreeBSD-CURRENT。这个分支的程式码有时候变动得很快,而且可能会因此 而使您有好几天的时间无法更新您的系统。我们假设使用 FreeBSD-CURRENT 的使用者都有能力去分析他们所遇到的问题并且只回报 真正的问题而非``小状况''。如果您在 -CURRENT mailing list 中提到类似``make world 造成一些有关 groups 的错 误''之类的问题的话,也许会被其他人轻视。
我们每天都会根据目前 -CURRENT 和 -STABLE 的状况对这两个分支各 发行一个snapshot 版。有的时候甚至还会发行可供取得的版本。发表这些 snapshot 的目的在於:
*
测试最新版的安装程式。
*
提供一个简单的方法给那些喜欢使用 -CURRENT 或是 -STABLE 但 是没有时间和频宽去每天升级的使用者。
*
为了替我们发展中的程式保留一个固定的参考点,以防止我们未 来造成不幸。(虽然一般而言 CVS 可以防止类似这种的可怕事件
*
为了确保所有需要测试的新功能都可以得到最多的测试。
我们不对 -CURRENT snapshot 做任合形式的``品质保 证''。如果你想要的是一个稳定且经过充分测试过的系统的话, 最好选择使用完整 release 的版本,或是使用 -STABLE snapshots。
您可以直接从 ftp://current.FreeBSD.org/pub/FreeBSD/ 取得 5.0-CURRENT 的 snapshot release,而从 releng4.FreeBSD.org 取得 4-STABLE 的 snapshots。在本文写作的时候 (2000 年 5 月) 就已经不再提供 3-STABLE 的 snapshots 了。
对每个有在活动的分支而言,平均每天都会产生一次 snapshots。
Q: 1.8. 什么是 FreeBSD-STABLE?
A:回溯到 FreeBSD 2.0.5 刚发表的时候,我们决定把 FreeBSD 的发展 分成两支。一支叫做 -STABLE ,我们只对它做错误修正及小幅度的修改 (这是给 ISP 和商业 公司等对实验中功能不感兴趣的单位所使用的)。另外一支叫做 -CURRENT,从 2.0 版发行以後就不间断地朝著 5.0-RELEASE (以及以後的版本) 前进 著。下面就是版本演进的示意图:
2.0
|
|
| [2.1-STABLE]
*BRANCH* 2.0.5 -> 2.1 -> 2.1.5 -> 2.1.6 -> 2.1.7.1 [2.1-STABLE ends]
| (Mar 1997)
|
|
| [2.2-STABLE]
*BRANCH* 2.2.1 -> 2.2.2-RELEASE -> 2.2.5 -> 2.2.6 -> 2.2.7 -> 2.2.8 [end]
| (Mar 1997) (Oct 97) (Apr 98) (Jul 98) (Dec 98)
|
|
3.0-SNAPs (started Q1 1997)
|
|
3.0-RELEASE (Oct 1998)
|
| [3.0-STABLE]
*BRANCH* 3.1-RELEASE (Feb 1999) -> 3.2 -> 3.3 -> 3.4 -> 3.5 -> 3.5.1
| (May 1999) (Sep 1999) (Dec 1999) (June 2000) (July 2000)
|
| [4.0-STABLE]
*BRANCH* 4.0 (Mar 2000) -> 4.1 -> 4.1.1 -> 4.2 -> 4.3 -> 4.4 -> ... future 4.x releases ...
|
| (July 2000) (Sep 2000) (Nov 2000)
\|/
+
[5.0-CURRENT continues]
2.2-STABLE 这个分支随著 2.2.8 的发表而功成身退。3-STABLE 这个 分支则是结束在 3.5.1 发表之後,它也是 3.X 的最後一次发表。之後除了 安全相关的修正之外,这两个分支就几乎没有再更动过。
4-STABLE 是目前正在发展中的 -STABLE 分支。4-STABLE 的最新的一 次发表是 January 2003 发行的 5.0-RELEASE。
5-CURRENT 的这个分支目前正以缓慢的速度 5.0-RELEASE 以及之後的 版本迈进中。如果想要知道更多关於这个分支的资讯的话,请参考 什么是 FreeBSD-CURRENT?。
Q:1.9. 新的 FreeBSD 将於什么时候推出?
A:一般而言,当 FreeBSD core team 认为已经累积了足够多的新功能 和错误修正,而且这些更动都已经完整地测试过且不会影响系统稳定度的 时候,他们才会推出新版的 FreeBSD。新版本的发表时程都会事先公告, 相关的开发人员就知道什么时候该把手边的计划完成并且测试过。虽然等 这些好东西进入 -STABLE 的时间令人有点沮丧,但是大多数的使用者都 认为这种谨慎的态度是 FreeBSD 最好的优点之一。
平均而言,我们每四个月发行一次 release。
为了满足那些需要 (或想要) 刺激的使用者,上面已经说过我们每天 都会发行 snapshots 版可供使用。
Q: 1.10. 谁负责 FreeBSD 的发展?
A:如果是一些有关 FreeBSD 计画的关键性决定,像是整个计画的走向 或是决定谁可以改 source tree 里的程式码这类的事,是由一个由 9 个 人所组成的 core team 来决定。而有另一群超过 200 个人的 commiters 有权利可以直接修改 FreeBSD 的 source tree。
无论如何,大多数的改变都会事前在 mailing lists 先讨论过,而且每个人都可以参与讨论。
Q:1.11. 我要如何取得 FreeBSD?
A:每个 FreeBSD 的重要版本都可以经由匿名 ftp 从 FreeBSD FTP site 取得:
*
如果要的是 3.X-STABLE 的最新版,也就是 3.5.1-RELEASE,请到 3.5.1-RELEASE 这个目录。
*
如果要的是 4-STABLE 的最新版,也就是 5.0-RELEASE ,请到 5.0-RELEASE 这个目录
*
4.X snapshots 通常每天都会做一份。
*
5.0 Snapshot 通常也是每天都会做一份,这是从 -CURRENT 分支做出来的,主要是为了服 务那些热心的测试者和开发人员所提供的。
FreeBSD 的 CD,DVD,还有一些其他的东西的取得法可以在 使用手册中找到解答。
Q: 我要如何报告BUG呢?
A:所有使用者的变更要求都可以经由我们网页介面的 PR submission 及 query 来查询 (或是回报) 我们的错误回报资料库。也可以利用 send-pr(1) 这个指令透过电子邮件来回报错误或是要求变更。
在回报错误之前,请先读过 如何撰写 FreeBSD 的错误回报单,这是一篇告诉你怎样才能写出一篇有用的 错误回报单。
1.13. 要怎样才能成为 FreeBSD 的网页映射站台?
有很多方法可以映射我们的网页。
*
您可以利用 net/cvsup 从 cvsup.FreeBSD.org 取得格式化过的档案。 /usr/share/examples/cvsup/www-supfile就 是一个教你怎样做网页映射的 CVSup 设定范例。
*
您可以利用您喜欢的 ftp mirror 工具从 FreeBSD 的 FTP 站台 中取得网页的原始码。但是要注意的是在你打算提供公开服务之前, 记得要先利用这些原始码把网页重建起来。请从 ftp://ftp.FreeBSD.org/pub/FreeBSD/FreeBSD-current/www 开始抓取。
Q:1.14.有其他的资讯来源吗?
A:详见 FreeBSD http://www.freebsd.org/ 网站上的 http://www.freebsd.org/docs.html 列表。
-----------------------------------------------------------------------
Q:我的硬盘有坏道时该怎么办?
A: 若是 SCSI 硬盘的话,那么磁碟机应该有能力自动作 re-mapping 的动作。然而,因为一些未知的因素,在出厂时,很多硬盘的这项 功能是关闭的...
要将其重新开启,您需要编辑装置的第一个 page 模式 (first device page mode),在 FreeBSD 上可以用下面的指令办到 (以 root身分执行)
# scsi -f /dev/rsd0c -m 1 -e -P 3
然后将 AWRE 和 ARRE 的数值从 0 变成 1:-
AWRE(Auto Write Reallocation Enbld): 1
ARRE(Auto Read Reallocation Enbld): 1
以下这段是由 Ted Mittelstaedt <tedm@toybox.placo.com>所提供:
若为 IDE 硬盘,任何的坏道通常都是麻烦的预兆。目前所有较新的 IDE 硬盘,内部都有自动 remapping 坏道的能力。目前所有 IDE 硬盘 制造商,都提供了更久的保证,而且会帮您更换出现坏道的硬盘。
如果您仍想要修复产生坏道的 IDE 硬盘,您仍可以试著去下载 IDE 硬盘制造商所提供的检测程式,并用它来检查您的硬盘。有时这些软体可 以强迫重新检查硬盘的坏道,并将它们标示出来。
对 ESDI,RLL 及 MFM 的硬盘来说,通常坏道是正常现象,也不是什 么麻烦的前兆。在 PC 上,磁碟控制卡和 BIOS 负责标示坏道的任务。这 对一些使用 BIOS来存取磁碟的作业环境(如 DOS)是没有问题的。然而, FreeBSD 的磁碟驱动程式并不经过 BIOS 来存取磁碟,所以,有个 bad144 的机制用来取代这项功能。bad144 只能用在 wd 这个磁碟驱动程式上(这 个代表了 FreeBSD 4.0 并不支援它),它也无法用在 SCSI 硬盘上。 bad144的工作方法是将所有找到的坏道资料存到一个特别的档案里。
使用 bad144 的警告 - 存著坏道资料的特别档案是放在硬盘的最后 一道上。因为这个档案储存的坏道资料中,有可能有些资料是指向硬盘最 前端所发生的坏道情形,就是可能储存 /kernel 这个档的地方,所以它 一定要能被开机程式所读取,而开机程式是透过 BIOS 来读取 kernel 档。这表示了使用 bad144 的硬盘绝不能拥有超过 1024 个 cylinder, 16 个 head 及 63 个 sector。而这使得欲使用 bad144 的硬盘的大小不 能大於 500 MB。
要使用 bad144 很简单,只要在开始安装时,在 FreeBSD fdisk 画面 把``Bad Block'' 扫瞄设为 ON 即可。在 FreeBSD 2.2.7 以 后都可以使用此方法。但这个硬盘的 cylinder 一定要在 1024 以下。使 用前,我们建议这个硬盘要至少先使用四个小时,以便热膨胀与磁道偏移 达一般状态。
如果这个硬盘拥有超过 1024 个 cylinder(像大容量的 ESDI 硬盘) ,ESDI 控制卡利用一个特别的转换模式使它能在 DOS 下工作。而如果您 在 fdisk 里的 ``set geometry'' 中输入 ``转换过'' 的 geometry,wd 这个驱动程式能了解这些转换 模式。您也绝对不能使用 dangerously dedicated 模式来建立 FreeBSD 的分割区,因为它会忽略 geometry 这个参数。此外,就算 fdisk 使用 您所输入的 geometry 参数,它依然会去读取这硬盘的真正资料,而会尝 试去建立一个过大的 FreeBSD 分割区。如果磁碟的 geometry 已经被 ``转换'' 过了,那么 这个分割区 ``必须'' 以手动输入 block 数目的方法来建立。
一个快速的小技巧是利用 ESDI 控制卡来设定大容量的 ESDI 硬盘, 用 DOS 开机片开机,再将它 format 为 DOS 的分割区。然后重开机进入 FreeBSD 安装程序,在 fdisk 画面,把DOS 分割区的 blocksize 和 block number 抄下来。然后重新设定 geometry 使其跟 DOS 使用的一样。 删除 DOS 分割区,然后使用您刚刚抄下的 blocksize 来建立一个 ``cooperative'' FreeBSD 分割区。然后设定这个分割区为可 开机,再打开坏道扫瞄。在真正的安装过程中,bad144 会在任何档案系统 被建立前先被执行。(您可以按 Alt-F2 来监看这一切)如果在建立坏道资 料档时发生了问题,您会需要设定一个较大的磁盘geometry - 这表示您 需要重开机,然后全部再重新开始(包括重新分割以及在 DOS 下重新 format)。
如果 remapping 的功能已经启动了,而您依然一直看到坏道产生, 那么考虑换一台硬盘吧。坏道的情形只会随时间增加而更为严重。
Q:为什么 FreeBSD 找不到我的 Bustek 742a EISA SCSI 卡?
A: 下面的资料是给 742a 这张卡用的,但是其他 Buslogic 的卡或许也 可以适用。(Bustek 就是 Buslogic)
742a 这张卡有两个主要的``版本''。一个是版本 A-G, 另一个是版本 H 及其以后。版本资料可以从介面卡边缘的流水号最后面 得知。742a 这张卡有两个只读晶片在它上面,一个是 BIOS 晶片,而另 一个是硬件晶片。 FreeBSD 并不在乎您卡上的 BIOS 版本,但是硬件的 版本就很重要了。如果你打电话给他们技术支持专线的话,他们会寄给 您最新的版本供您升级。 BIOS 和硬件晶片是一起送来的。 您需要将卡 上 BIOS 和硬件版本,依您卡版本的不同,升级到最新的一版。
版本 A-G 的卡最高只能将 BIOS/硬件 升级到 2.41/2.21 版,而 H 及其之后的版本,目前 BIOS/硬件的最新版本是 4.70/3.37。这两个硬件 版本间的差异在於,3.37 这版支持 ``round robin''
Buslogic 的卡上面也都有序号。如果您卡的版本较旧,您可以试著打 电话给 Buslogic 的RMA 部门,然后给他们您的序号,看能不能跟他们交 换一张较新版本的卡。如果那张卡够旧的话,他们会换给你。
FreeBSD 2.1 只支持硬件 2.21 版以后的版本。如果您硬件版本比这 个还旧的话,那么您的卡就不能被辨识出是 Buslogic 的卡。它有可能会 被辨识成 Adaptec 1540。较早的 Buslogic 卡上的硬件有一个 AHA1540 ``模拟'' 模式,这对一张 EISA 卡来说并不是件好事。
如果您有一张较旧版本的卡,而您取得 2.21 版硬件的话,您需要检 查一下 jumper W1 的位置,将它调至 B-C,原始设定是 A-B。
Q:为什么 FreeBSD 找不到我的 HP Netserver 的 SCSI 控制卡?
A: 基本上这个是一个已知的问题。在 HP Netserver 机器上的 on-board EISA 介面 SCSI 控制卡占据了定址为第 11 的 EISA 槽,因此所有的 ``真实'' EISA 槽都在它之前。可是,在 EISA 定址空间 >= 10 时,会与指定给 PCI 用的定址空间相冲突,且 FreeBSD 的 auto-configuration 无法正确的处理这个情形。
因此,现在你能做的最好事情就是在 kernel 里设定 EISA_SLOTS 这个选项为 12 ,然后当作没有这个 问题 。请依照 Handbook 中有关 kernel 的设定 里所说的方法来设定与编译 您的 kernel。
当然,在安装 FreeBSD 到这种机器上时,这是一个鸡生蛋蛋生鸡的 问题。为了解决这个问题,在 UserConfig 中有 一个特别的方法,安装时不要进入 ``visual'' 介面,相反 的,在命令列模式中,键入
eisa 12
quit
然后就如以往一样安装您的系统。不过我们建议您编译与安装一个 属於自己的 kernel,但
希望在未来的版本中能对这个问题有一个好的解决方法。
Note: 您无法在 HP Netserver 上使用 dangerously dedicated 磁碟模式。您可以参考 这份注解 以获得更多资料。
Q:CMD640 IDE 控制晶片出了什么问题?
A: 它的问题在于无法同时处理两个 channel 的指令。
现在已经有个解决方法了,而且在您的系统中有这块晶片时会自动 启动。如果需要更详尽的资讯,请查阅有关磁盘驱动程式的说明 (man 4 wd)。
如果您目前是使用 CMD640 IDE 控制晶片,加上 FreeBSD 2.2.1 或 2.2.2,而且您又想要使用到第二个 channel 时,请在您的 kernel 设 定中加入 options "CMD640" 然后重新编译一个新 的 kernel。这个 option 在 2.2.5 版以后是内定启动的。
Q:我一直看到类似 ``ed1: timeout'' 的讯息。它们是什么意思呢?
A: 这个通常是由於中断冲突(interrupt conflict)所造成的(例如, 两块卡使用到了相同的 IRQ)。 FreeBSD 在 2.0.5 版以前都容许这个 情形,就算有 IRQ 冲突情形,网路卡也应该仍可正常运作。然而,在 2.0.5 版及其以後,已不再容许有 IRQ 冲突的情形了。请於开机时使 用 -c 这个选项,然後更改 ed0/de0/..。等的设定,使其和您网路卡 本身的设定一致。
如果您是使用您网路卡上的 BNC 接头,您或许也会因不良的终端电 阻设定,而发生装置 (device) timeout 的情形。要检查是否有这种情 形,您可以在网路卡上直接接上终端电阻(不要接网路线),然後看看这 个错误讯息是不是就消失了。
有些 NE2000 的相容卡,如果它的 UTP 埠没有接网路线,或是该网 路线并没被使用的话,也会出现这个错误讯息。
Q:为什么我的 3COM 3C509 这块网路卡在没有任何明显原因下停止工作 了呢?
A: 这块卡有个不好的地方在於它常常会遗失本身的设定资料。请使用该 卡的 DOS 工具 3c5x9.exe 来更新卡上设定。
Q:我的平行印表速度破天荒的慢。我该怎么做?
A:如果唯一的问题就是速度很慢的话,试著改变您的 印表机连接埠设定 这个在手册中的 印表机设定 这个章节有加以讨论。
Q: 我的程序有时会因 ``Signal 11'' 这个错误而停止?
A:Signal 11 这个错误是因为你的 process 尝试要存取一块记忆体, 而你的作业系统并不允许它做这个动作而发生的。如果这种情形常常不 定时发生,那么你应该要开始看看是不是哪里出问题了。
这些问题可能是与下列情形有关:
1.
如果这个问题只在某一个您自己写的某个特定程式发生,那 么很有可能是您的程式码有问题。
2.
如果这个问题是在 FreeBSD 的某些系统档案发生,有可能是 因为程式有问题,但通常在我们这群读 FAQ 的使用者去跑这些有 问题的程式码前,它们早就就已经被解决了(这是 -current 在做 的事)。
尤其如果你在编译一个程式,但是每次编译器跑出来的结果都不一样 的话,这是一个无解的问题,而不是 FreeBSD 臭虫。
举例来说,假设您正在跑 ``make buildworld'', 而 compiler 在将 ls.c 编译成 ls.o 时发生错误,这时请再跑一次 ``make buildworld'',如果 compiler 依然在同样的地方发 生问题,那么就是程式码有问题--请更新原始码然後再试试看。而如果 compiler 是在其他的地方发生错误,那么几乎可以确定是硬体的问题了。
您这时应该做什么:
如果是第一种情形,可以使用一些 debugger,如:gdb,来找出程式 是在那儿会去尝试存取错误的记忆体位址,然後再修正它。
如果是第二种情形,就需要检查看看是不是硬体的问题了。
一些造成硬体不稳的原因包括:
1.
可能是硬碟过热:请检查机壳内的风扇是否运作正常,因为您 的硬碟(或者还有其他的硬体装置)过热了。
2.
处理器过热:这个有可能是因为超频,或者是处理器的风扇挂了。 不论是哪种原因,您都需要将所有的元件回复到它们原先设定的工作状 态,这样才能解决这个问题。举个例子来说:将处理器调回原先的工作 频率。
如果您还是坚持要超频的话,请谨记,与其烧坏而需要换新的一台 主机,不如将速度调慢一点!除此之外,不管你觉得它安不安全,一般 人对於您因为超频而发生的问题,是不会有什么同情心的。
3.
不稳定的记忆体:如果主机上有安装数根 SIMM/DIMM 记忆体, 试著把它们全拆下来,然後一根一根插上去做测试,藉此缩小范围, 以便找出有问题的某根记忆体或是某种记忆体组合。
4.
最佳化过头的主机板设定:在 BIOS 里或是有些主机板的 jumper 上,有时可以更改一些 timing,但在大多数的情形里,使用预设值就 已经足够了。况且有时候把 RAM 的 wait states 设太小,或是在 BIOS 里,把 ``RAM Speed: Turbo'' 这个或是其他类似 的选项打开都有可能会造成一些不正常的现象。一个解决的方法是把 BIOS 设回预设值,不过在这之前记得先记下目前的设定!
5.
供给主机板的电力不乾净或是不足。试著把系统内没有用到的 I/O 卡.硬碟或是 CDROM 暂时拆掉或是拔掉电源线,看看你的电源 供应器是不是能够在小一点的负荷下正常工作。不然就是换上另一 个新的电源供应器,最好是瓦数高一点的(打个比方来说,如果原 先的电源供应器是 250 瓦的,那么就换上 300 瓦的试试)。
请顺便参阅 SIG11 FAQ(连结在下面),虽然它是站在 Linux 的角 度写的,可是里面对这些问题有许多很棒的解说。它里面也有讨论为什么 有问题的记忆体能通过软体或硬体的测试的原因。
最後,如果上面这些原因都排除了,那么有可能是遇到了 FreeBSD 里的一只臭虫,请参阅指示做一个问题回报。
这儿有一个更详细的 FAQ - http://www.bitwizard.nl/sig11/
Q:我的系统当机时出现:``Fatal trap 12: page fault in kernel mode'',或是 ``panic:'',再加上一堆错误讯息, 我该怎么办?
A: FreeBSD 的开发者对於这些错误讯息相当的有兴趣,但是他们需要 更详细的一些细节。请把您的当机的讯息全部复制下来,接著查阅 FAQ 里 kernel panics 这节,依说明编译一个含除错码的 kernel,以取得函式 呼叫顺序(backtrace)。这个听起来很难,但实际上并不需要任何程序 设计的能力,您只需要依照指示做即可。
Q:为什么当我开机时,萤幕变黑,且不停闪动?
A: 这个问题,已知是由 ATI Mach 64 显示卡所引起的。因为这块卡 使用到 2e8 这个位址,而这与第四个序列埠 (serial port)所使用的位址相同。而在 sio(4) 这个驱动 程式里,不知道是 bug 或是功能(feature),就算您没有第四个序 列埠,或是已经将 sio3(第四个序列埠)取消了,它 依然会去尝试驱动它。
直到这个问题被解决以前,您可以使用这个方法:
1.
在看到开机提示时输入 -c (这会让 kernel 进入设定模式)。
2.
取消 sio0 , sio1 , sio2 和 sio3(全部)。 这可以让 sio 驱动程式不动作 -> 於是问题解决。
3.
输入 exit 以继续启动程序。
如果您想要使用您的序列埠,您需要修改 /usr/src/sys/i386/isa/sio.c,在该档中找出 0x2e8 这个字串,移除这个字串及它前面的逗号 (保留後面的),然後重新编译一个新的 kernel。
就算使用了上面这些方法,X Window 仍然有可能无法顺利执行。 如果发生了这种情形,请确定你用的 XFree86 的版本是最新的 XFree86 3.3.3 或是其後的版本。它们有内建支援 Mach 64 这张卡,甚至为了这 些卡还附有一个特别的 X Server
Q:为什么我的系统装有 128 MB 的 RAM,而 FreeBSD 只用了其中的 64MB?
A: 因为 FreeBSD 是使用呼叫 BIOS 来取得记忆体大小的方法,因此它 只能侦测到 16 bits 位元长度的 KByte 大小(65535 KBytes = 64MB) (或者更少..。有些 BIOS 将最高记忆体大小限为只有 16MB) 如果您拥有 64MB 以上的 RAM,FreeBSD 会尝试去侦测出它,但是有可能 会失败。
要解决这个问题,您需要使用下面所提的 kernel 设定选项。虽然有 方法可以从 BIOS 中取得记忆体的完整资讯,但是目前我们在开机区中并 没有多余的空间来做这件事。当某天开机区空间不足的情形获得解决时, 我们将会使用 BIOS 的延伸功能来取得记忆体的完整资讯...但现在我们 将它放在 kernel 设定选项中。
options "MAXMEM=n"
n 是指您的记忆体大小,以 KB 为单位。以一台有 128MB RAM 的机器来说,您可使用 131072这个数字。
Q:为什么 FreeBSD 2.0 因为 ``kmem_map too small!''这个原因而发生 panic ?
A:Note: 这个讯息也有可能是 mb_map too small!
这个 panic 的原因是表示系统用光了给网路缓冲区的所有的虚 拟记忆体(特别是 mbuf clusters)。您可以增加给 mbuf clusters 的 VM 的数量,只要加入:
options "NMBCLUSTERS=n"
在您的 kernel 设定档中,n 是一个在 512-4096 间的数字,依您想提供多少同时的 TCP 连接数目 多寡而定。我会建议试试 2048 - 这数字应该可以完全避免这个 panic 了。您可以执行: netstat -m (see netstat(1))来监看有多少 mbuf clusters 在系统上正被 配置/使用。NMBCLUSTERS 的数值内定为 512 + MAXUSERS *
16
Q:5.13. 为什么我一直看到 ``/kernel: proc: table is full'' 这个错误讯息?
A:
FreeBSD 的 kernel 只会允许一定数量的 process 在同一时间里同 时运作。而这个数目是根据 kernel 设定档里面的 MAXUSERS 值来决定的。MAXUSERS 这个值也会影响其他的 kernel 内定值,比如说网路缓冲区 (请参阅这个之前讨 论过的问题)。如果机器负荷(load)很重,您可能需要增加 MAXUSERS 这个值。这么作会一并提高系统的其他内 定值,包括最大可拥有的 process 数等。
在 FreeBSD 4.4 之後,MAXUSERS 已经变成可 以靠著更改 /boot/loader.conf 里的 kern.maxusers 这个值而调整的变数了。而在之前 的 FreeBSD 版本中,这个值只能在 kernel 设定档里调整。
如果机器负荷并不重,而您只是需要同时跑很多很多 process, 那么也可以直接用 sysctl 调整 kern.maxproc 这个值。假如这些 process 都是属於某个使用者的,那么您还需要另 外调整 kern.maxprocperuid 这个值,使它比新 的 kern.maxproc 这个值少一(一定要少一, 因为 init(8) 这个系统程式绝对要保持在运作状态)。
如果想在每次开机都要更改 sysctl 的值,而且您的 FreeBSD 是 最近的版本的话,请在 /etc/sysctl.conf 这 个档中设定,而如果是旧的版本,可以在 /etc/rc.local 中作设定。
Q: 5.14. 为什么用新 kernel 开机时,出现 ``CMAP busy'' 这个错误讯息?
A:用来侦测过时 /var/db/kvm_*.db 档案的机制偶尔会 发生问题,而使用到了一个不协调(mismatch)的档案有时就会导致 panic。
如果发生了这个问题,请重新开机,进入单使用者模式,然後执 行:
# rm /var/db/kvm_*.db
Q: 5.15. 请问这个讯息:``ahc0: brkadrint, Illegal Host Access at seqaddr 0x0'' 是什么意思?
A:这是一个和 Ultrastor SCSI 控制卡有关的冲突(conflict)。
在开机时,进入 kernel 设定选单取消 uha0,它是造成这个问题的原因。
Q: 5.16. 在开机时,我看到这个错误讯息 ``ahc0: illegal cable configuration''。 我的排线确定有接对。 是出了什么问题呢?
A:您的主机板可能不支援自动终端电阻设定。请进到 SCSI 的 BIOS 里面手动指定正确的终端电阻顺序,而不要使用自动设定。AIC7XXX 的 驱动程式并无法知道有没有这些排线侦测(以及自动终端电阻设定)的 电路(external logic)存在。如果 EEPROM 里面的设定是 "automatic termination" 时,它只会单纯假定这些电路当然是存在的。 若缺少了这个电路,驱动程式在设定终端电阻时就常常出问题。 而这种问题将导致 SCSI 汇流排的可靠性降低。
Q:5.18. 为什么执行远端机器(remote machine)的全萤幕的软体时, 有不正常的情形?
A:或许远端机器并非将您的终端机模式设为 FreeBSD console 所用的 cons25,而是设为其它模式。
这儿有几个解决这个问题的方法:
*
在 logging 进远端机器後,更改您的 shell 变数 TERM 为 ansi 或是 sco (如果远端机器支援这些模式的话)。
*
使用支援 VT100 的模拟软体,如 FreeBSD console 下的 screen 软体。 screen 提供您在一个 terminal 里同时跑好几个 session 的能力,而且它本身也是一个相当好 的软体。每个 screen 都像是一个 VT100 的终端机,所以远端机器的 TERM 变数应该设为 vt100。
*
在远端机器的终端机资料库(terminal database)中加入 cons25 的资料。加入的方法视远端机器的 作业系统不同而有所差异。请参阅远端机器给系统管理员的说明 书,应该会有所帮助。
*
启动 FreeBSD 的 X 伺服器,然後使用一些 X Window 下的 终端机模拟器来登入远端机器,例如 xterm 或 rxvt。而远端机器的 TERM 变数应该要 设为 xterm 或 vt100。
Q:5.19. 为什么我的机器一直显示 ``calcru: negative time...''?
A:跟中断(interrupt)有关的不同硬体 与/或 软体的搭配都有可能造成 这个问题。这有可能是 bug 或是某个装置本身的问题。在平行埠上使用 大的 MTU 来作 TCP/IP 传输可以重现这个问题。若是图形加速卡造成这个 问题的话,您应该先检查卡的中断设定。
这个问题的边际效应是会造成有些 process 出现 ``SIGXCPU exceeded cpu time limit'' 的讯息,而不正常 停止。
若是 FreeBSD 3.0 或是 1998 年 11 月 29 日以後其他版本,万一 这个问题一直无法以其他方法解决,就只能设定 sysctl 变数:
# sysctl -w kern.timecounter.method=1
这样会对效能有些影响,但是若考虑到这个问题带来的後果,这样做 是值得的。如果这个问题还是存在的话,让 sysctl 那个值依然设为 1, 然後增加 kernel 设定档中 NTIMECOUNTER 这个选 项的数值。如果您将 NTIMECOUNTER 增加到 20 依 然无法解决这个问题,那么您机器上的中断已经多到无法让计数器维持在 可靠的状态了。
Q: 5.20. 出现 ``pcm0 not found'' 这个讯息,或者是 我的音效卡变成了 pcm1,但在 kernel 设定 档里我是设 device pcm0 啊。这是怎么回事呢?
A:如果您在 FreeBSD 3.x 上使用 PCI 音效卡就会发生这种问题。 因为pcm0 这个 device 是内定保留给 ISA 的音效卡的,所以如果您有一张 PCI 的音效卡,您就会遇到这个问题, 而您的卡会变成 pcm1。
Note: 如果您只把 kernel 设定档中的设定改成 device pcm1 是无法除去这个警告讯息的, 这样会造成 pcm1 被保留给 ISA 音效卡, 而 PCI 音效卡则会变成 pcm2 (外加 ``pcm1 not found'' 的警告讯息)。
如果您有一张 PCI 的音效卡,您需要 make snd1 这个 device,而不是 snd0:
# cd /dev
# ./MAKEDEV snd1
这个问题在 FreeBSD 4.x 上并不会发生,因为很多人投下了许多心 力让它更PnP 导向,而且 pcm0 这个 device 也不再是只保留给 ISA 的音效卡了。
Q:5.21. 为什么在更新到 FreeBSD 4.X 後会找不到我的 PnP 卡 (或者是找成 unknown)?
A:
FreeBSD 4.X 现在已经更 PnP 导向了, 而边际效应就是会发生有些在 FreeBSD 3.X 可以用的 PnP 装置 (如音效卡或是内插式数据机)变成无法使用。
这个原因可以用一封由 Peter Wemm 发到 freebsd-questions 这个 mailing list 上的信来解释,它原本是解释为什么有一个内 插式数据机,在系统升级到 FreeBSD 4.x 後,就没法被抓到了 (在 [] 里的是另外加的注解,让内容更易懂)。
The PNP bios preconfigured it [the modem] and left it laying around in port space,so [in 3.x] the old-style ISA probes ``found'' it there.
Under 4.0,the ISA code is much more PnP-centric. It was possible [in 3.x] for an ISA probe to find a ``stray'' device and then for the PNP device id to match and then fail due to resource conflicts. So,it disables the programmable cards first so this double probing cannot happen. It also means that it needs to know the PnP id's for supported PnP hardware. Making this more user tweakable is on the TODO list.
如果要让装置能再度运作,我们需要找出它的 PnP id,然後再将它 加入一份在侦测 ISA 装置时会使用的表中。可以执行 pnpinfo(8) 来侦测这个装置,举例来说,下面是 pnpinfo(8) 抓到的一个内插 式数据机的资料:
# pnpinfo
Checking for Plug-n-Play devices...
Card assigned CSN #1
Vendor ID PMC2430 (0x3024a341),Serial Number 0xffffffff
PnP Version 1.0,Vendor Version 0
Device Description: Pace 56 Voice Internal Plug & Play Modem
Logical Device ID: PMC2430 0x3024a341 #0
Device supports I/O Range Check
TAG Start DF
I/O Range 0x3f8 .. 0x3f8,alignment 0x8,len 0x8
[16-bit addr]
IRQ: 4 - only one type (true/edge)
[more TAG lines elided]
TAG End DF
End Tag
Successfully got 31 resources,1 logical fdevs
-- card select # 0x0001
CSN PMC2430 (0x3024a341),Serial Number 0xffffffff
Logical device #0
IO: 0x03e8 0x03e8 0x03e8 0x03e8 0x03e8 0x03e8 0x03e8 0x03e8
IRQ 5 0
DMA 4 0
IO range check 0x00 activate 0x01
您所需要的资讯是一开始看到的 ``Vendor ID'' 这一行。括号中的十六位元码(这个例子中是 0x3024a341)就是 PnP id,而在这之前的字串(PMC2430)则是一个独一无二的 ASCII id。 而这些资料需要被加到 /usr/src/sys/isa/sio.c 这个档案里。
为了防止任何东西出错,您应该要先备份目前的 sio.c。而且您要 submit PR 时也需要这个 原始档案来做出 patch(您应该会将它 submit PR 吧..:)..)。 接著就编辑 sio.c 找寻下面这行
static struct isa_pnp_id sio_ids[] = {
接著往下卷动,找个正确的位置来插入您的装置资讯。您看到的就 下面这个样子,它们是照右边注解里面的 ASCII 这个 Vender ID 做排 序的,或是 pnpinfo(8) 所找到的一部分 装置描述:
{0x0f804f3f,NULL}, /* OZO800f - Zoom 2812 (56k Modem) */
{0x39804f3f,NULL}, /* OZO8039 - Zoom 56k flex */
{0x3024a341,NULL}, /* PMC2430 - Pace 56 Voice Internal Modem */
{0x1000eb49,NULL}, /* ROK0010 - Rockwell ? */
{0x5002734a,NULL}, /* RSS0250 - 5614Jx3(G) Internal Modem */
把您这个装置的十六进位的 Vender ID 加到正确的地方,存档, 然後重新编一个 kernel,再重开机。之後这个装置应该就会像在 FreeBSD 3.X 下,被侦测为 sio 装置了。
Q: 5.22. 为什么我常常在跑一些程序(例如 top 或 systat)的时候出现 ``nlist failed'' 这个错误讯息?
A:
这个问题是因为您跑的程式需要一个特别的 kernel symbol,可是 不知道什么原因而找不到;而会发生这个问题可能是因为下面两个原因:
*
您的 kernel 和 userland 的档案版本并不一致(例如说,您 编了一个新的 kernel,但是并没有执行对应的 installworld,或是其他类似情形), 因此 symbol table 的内容就和应用程式编译时的不太一样了。如 果是这种情形,请执行完整的升级步骤(请参阅 /usr/src/UPDATING 以得知正确的流 程)。
*
您没有用 /boot/loader 来载入您的 kernel,而是直接由 boot2 开机(请参阅 boot(8))。 虽然说跳过 /boot/loader 并没有什么错, 但是它在 kernel symbols 跟应用程式的沟通方面占了很重的份量。
Q: 5.23. 为什么我用 ssh 或 telnet 连到我的电脑时,会等待很长的一段时间才能连上?
A:症状:TCP 连线建立之後和询问密码之前(如果是在说 telnet(1) 的话,则是 login 提示符号跳出来之前),要等待很长的一段时 间。
问题所在:这种延迟情形常常是因为伺服软体(server software) 尝试要将客户端(client)的 IP 位址转换成主机名称。因为很多伺服 软体,包括 FreeBSD 内建的 Telnet 和 SSH,为了将主机名称写入纪 录档中以供管理者作参考,而会做这项动作。
解决方法:如果这个问题在您连接不同的伺服器时都会发生,那么 问题是在您客户端这一方;同样的,如果别人只有在连到您的伺服器上 才会发生这个情形,那么问题就是在伺服器这边了。
如果是客户端这方有问题,唯一的方法就是将 DNS 伺服器修好, 这样对方伺服器才能正确的转换名称。如果问题是在内部区域网路发 生的,这应该是伺服器有问题,请详细检查一下;相反的,如果是您 在上 Internet 时发生的,那么您需要跟您的 ISP 联络,请他们解决 这个问题。
如果是伺服器这边的问题,而且是发生在内部区域网路,那么您需 要设定这个伺服器,使它能正确将内部网路的 IP 位址转换为主机名称。 请参阅 hosts(5) 和 named(8) 的说明以获得更多资讯。如 果是在 Internet 上的伺服器发生这个问题,那么有可能是您伺服器的 转换功能出问题。您可以试试查询另一个主机名称,比如: www.yahoo.com。如果查不到,那么可以确定是您这 边出问题了。
Q: 5.24. ``stray IRQ'' 这个错误讯息是什么意思?
A:Stray IRQs 是硬体 IRQ 有点小问题的现象,大多是因为硬体本身 在发出中断需求後,又取消了它自己的中断要求。
有三个方法可以应付这个问题:
*
不理会这个警告。反正一个 irq 出现五次警告後系统就不会 再显示了。
*
把 isa_strayintr() 里的值,由 5 改成 0,这样所有的警告讯息都不会出现。
*
安装使用 irq 7 的平行埠硬体设备,以及它的 PPP 驱动程式 (这个大部分系统都有做),接著安装 ide 硬碟或是其他会使用 irq 15 的硬体设备以及它的驱动程式。
Q: 5.25. 为什么 ``file: table is full'' 这个讯息 一直在 dmesg 里重复出现?
A:这个错误讯息代表了您系统的 file descriptors 已经使用光了。 请参阅手册内 Tuning Kernel Limits 里面的 kern.maxfiles 这个章节,里面有一些讨论及解决方法。
Q:5.26. 为什么我笔记型电脑上的时钟一直显示错误的时间?
A:您的笔记型电脑里有两个以上的时钟,而 FreeBSD 选到了错的 那个。
执行 dmesg(8),检查一下有 Timecounter 字串的那几行。最後一行是 FreeBSD 选用的,通常是 TSC。
# dmesg | grep Timecounter
Timecounter "i8254" frequency 1193182 Hz
Timecounter "TSC" frequency 595573479 Hz
您可以执行 sysctl(3) 看一下 kern.timecounter.hardware 这个值做确认。
# sysctl kern.timecounter.hardware
kern.timecounter.hardware: TSC
BIOS 可能在一些情形下会更改 TSC 的时脉--有时候是因为 在使用电池工作时会更改处理器的速度,另外也有可能是进入了省电模 式,可是 FreeBSD 并不会察觉到这些调整,而会发生时间增加或是减 少的情形。
在上面的例子当中,我们看到还有 i8254 这个时钟可以选择,执行 sysctl(3) 用手动的方式将这个值写入 kern.timecounter.hardware 中。
# sysctl -w kern.timecounter.hardware=i8254
kern.timecounter.hardware: TSC -> i8254
这样您的笔记型电脑应该就可以保持正确的时间了。
如果要让这个更改的动作再每次开机时自动执行,在 /etc/sysctl.conf 里加入下面这行。
kern.timecounter.hardware=i8254
Q:5.27. 为什么我的笔记型电脑无法正确的侦测到 PC card ?
A:这个问题常常发生在灌了多个作业系统的笔记型电脑上。有些非 BSD 的作业系统会让 PC card 的硬体装置处在一个不一致的状态下 (inconsistent state)。使得 pccardd 在侦 测这片卡时,无法抓到正确的型号,而是 ``"(null)""(null)"''。
您需要移除 PC card 插槽的电源以重置这个硬体装置。一个方法是 将您的笔记型电脑关机(不是休眠模式,也不是待命模式;要完全的关 机)。等个几秒钟再重开机。这样您的 PC card 应该就正常了。
有时有些笔记型电脑虽然看起来已经关机了,但实际上并没有。 如果您发现上面那个方法没有用,请关机,移除电池,等个几秒钟, 把电池装上去然後重开机。
Q:5.28. 为什么在 BIOS 画面之後,FreeBSD 的 boot loader 显示 ``Read error'' 然后就停止不动了?
A:这是因为FreeBSD 的 boot loader 无法正确的找出硬盘的 geometry。这样的话,就需要在用 fdisk 分割或是修改 FreeBSD 的 slice 时,手动将正确的值输入进去了。
正确的硬盘 geometry 值在 BIOS 里面可以查的到。注意该硬碟的 cylinders,heads 以及 sectors 这些数值。
在执行 sysinstall(8)的 fdisk 时,按下 G 以便手动设定硬盘的 geometry。
这时会有一个对话框跳出来,询问您有关 cylinders,heads 以及 sectors 这些东西的值。请将刚刚在 BIOS 查到的数字,以 / 作分隔输 入进去。
举例来说,如果是 5000 cylinders,250 sectors 和 60 sectors 就输入 5000/250/60
输入完後请按 enter 键确认,最後按下 W 键把 新的分割区表写入硬盘当中。
Q:5.29. 另一个作业系统摧毁了我的 Boot Manager。我要怎么样才能把它还 原回来?
A:执行 sysinstall(8) 接著选 Configure,然後选 Fdisk。 再来用空白键选择原先 Boot Manager 所在的硬碟。 按下 W 键来作写入的动作。这时会跳出一个提示 讯息,询问您要安装哪一个 boot loader。请选择 Boot Manager, 这样就可以将它还原了。
Q:5.30. 这个错误讯息:``swap_pager: indefinite wait buffer:'' 是什么意思呢?
A:这个讯息是说有一个执行程序正在尝试将分页记忆体(page memory) 写入硬碟中,而这个动作尝试了 20 秒钟仍然无法成功。这个有可能是因为 硬碟有坏轨、电路或排线有问题、以及其他跟硬碟读出写入有关的硬体设备。 如果真的是硬碟坏轨的问题,您应该会在 /var/log/messages这个档案中,或是在执行 dmesg这个指令後,看到有关磁碟错误的讯息。 如果没有,那么请检查您的排线还有接头连接是否良好。
Q: 6.1. 在哪边找到给 FreeBSD 用的 Office 套件呢?
A: *
FreeBSD Mall 提供了 VistaSource 的 ApplixWare 5 的 FreeBSD 版本。
ApplixWare 是一套商业版本的 Office 套件,他提供了 文件处理、试算表、向量绘图等相关程式。
ApplixWare 同时也是 FreeBSD Mall's BSD Desktop Edition 的一部份。
*
Linux 版本的 StarOffice 可以很正常的在 FreeBSD 下执行,可以透过 FreeBSD Ports collection 来安装 Linux 版本的 StarOffice。而 open-source OpenOffice 很快得 也可以在 FreeBSD 上正常的执行。
Q:6.2. 在哪边找到给 FreeBSD 用的 Motif?
A:Open Group 释出了 Motif 2.1.30 的原始码,可以透过 open-motif package 安装,或是由 ports 自行 编译。相关的资讯,请参考 handbook 中的 ports 章节。
Note: Open Motif 只能在同样也是 open source 的作业系统或计划中使用。
另外,也是有商业版本的 Motif 存在。也许这种版本的 Motif 不是免费的,但是绝对允许用在 closed-source 的环境下。 Apps2go 提供了最便宜的 FreeBSD (包括 i386 跟 alpha)版本的 ELF Motif 2.1.20 套件。
目前提供两种不同环境的版本, ``发展用版本'' 及 ``runtime 版本'' 。这两种套件都包括:
*
OSF/Motif manager, xmbind, panner, wsm.
*
Development kit with uil, mrm, xm, xmcxx, include and Imake files.
*
Static and dynamic ELF libraries (for use with FreeBSD 3.0 and above).
*
Demonstration applets.
因为 Apps2go 也有提供 NetBSD 和 OpenBSD 的版本,所以在订购时请特别指定是要 FreeBSD 版本的 Motif! 他们目前只提供以 FTP 的方式取得这份套件。
更多资讯
Apps2go WWW page
或
<sales@apps2go.com> 或 <support@apps2go.com>
或
phone (817) 431 8775 or +1 817 431-8775
也可以联络 Metro Link 取得给 FreeBSD ELF或 a.out 版本的 Motif 2.1 套件。
这份套件包括:
*
OSF/Motif manager, xmbind, panner, wsm.
*
Development kit with uil, mrm, xm, xmcxx, include and Imake files.
*
Static and dynamic libraries (specify ELF for use with FreeBSD 3.0 and later; or a.out for use with FreeBSD 2.2.8 and earlier).
*
Demonstration applets.
*
Preformatted man pages.
由於 Metro Link 也有提供 Linux 的版本, 所以订购时要特别指明是 FreeBSD 版本的 Motif! 可以由光碟或从 FTP 来取得这个套件。
联络 Xi Graphics ,他们提供了一个 FreeBSD a.out 格式的 Motif 2.0 套件。
在这套件中包括了:
*
OSF/Motif manager, xmbind, panner, wsm.
*
Development kit with uil, mrm, xm, xmcxx, include and Imake files.
*
Static and dynamic libraries (for use with FreeBSD 2.2.8 and earlier).
*
Demonstration applets.
*
Preformatted man pages.
在你跟他们订购 Motif 时,请一定注明你要的是 FreeBSD 的版本! 因为 Xi Graphics 也同时提供了 BSDI 跟 Linux 版本的 Motif。目前发行的版本是放在四块磁片中,将来他们会将所有的 东西都放到光碟里,就像他们所发行的 CDE 一样。
Q: 6.3. 在哪边找到给 FreeBSD 用的 CDE?
A:
Xi Graphics 以前有卖 FreeBSD 用的 CDE,不过现在已经停止发售了。
KDE is an open source X11 desktop which is similar to CDE in many respects. You might also like the look and feel of xfce. KDE and xfce are both in the ports system.
Q:6.4. 有没有要钱,但是高效率的 X servers?
A:
有, Xi Graphics 和 Metro Link 都有提供给 FreeBSD(或其他 Intel 平台上)用的 X 视窗加速产品。
Metro Link 高效能 X Server 使用了 FreeBSD 内建的 package 包装方式, 因此设定十分容易,支援目前市面上各大厂牌的显示卡。 目前只提供 binary 格式档案,可以从 FTP 站相当方便地直接下载, 并且 Metro Link 这套产品的价格是非常合理的 $39。
Metro Link 同时提供 FreeBSD 上的 ELF 和 a.out 格式的 Motif (往上面看看)。
更多的资讯
Metro Link WWW page
或
<sales@metrolink.com> 或 <tech@metrolink.com>
或
phone (954) 938-0283 or +1 954 938-0283
Xi Graphics 所提供的高效能 X Server 有非常简单的设定方式, 并且支援了目前市面上当红的各大厂牌的显示卡。它只给你 Binary 档案, 是用磁片的方式发行,FreeBSD 跟 Linux 版本都相同。Xi Graphics 同时 也提供了专门给 laptop 用的高效能 X Server。
5.0 版有提供免费的 ``compatibility demo'' 版本
Xi Graphics 也有在卖 FreeBSD 用的 Motif 跟 CDE(往上面看看)。
更多的资讯
Xi Graphics WWW page
或
<sales@xig.com> 或 <support@xig.com>
或
phone (800) 946 7433 or +1 303 298-7478.
Q: 6.5. 在 FreeBSD 上有任何的资料库吗?
A:有! 请看 FreeBSD 网站上 商业软体公司 这一部份。
还有请参考 ports 中 Databases 相关的收集。
Q:6.6. 可以在 FreeBSD 上执行 Oracle 吗?
A:可以,下面这个网页会说明如何在 FreeBSD 上执行 Linux 版的 Oracle:
*
http://www.scc.nl/~marcel/howto-oracle.html
*
http://www.lf.net/lf/pi/oracle/install-linux-oracle-on-freebsd
Q: 7.1.我要在哪找到我要的程序呢?
A:请看看 ports 目录 吧。这边有份已经 port 到 FreeBSD 的软体列表。 目前有超过 8,500 个软体已经被port 到 FreeBSD 上,并且每天 都在增加中。所以有空就多看看这份列表,不然你也可以订阅 freebsd-announce 这份 mailing list,会有人将每个星期最新的软体列表贴在 上面。
大部份的 ports应该都可以在 2.2,3.0 跟 4.0 的系统上使 用,并且还有部份的 ports 可以在 2.1.x 的系统上运作。每次 当 FreeBSD release 时,都会有一份 ports tree 被放在这一个 release cd 里面的 ports/ 目录里。
我们也支援一种叫 ``package'' 的概念,基本上 就是 gzip 压缩、可用来发行的 binary 档案,但是里面藏了一 些相当有用的资讯,可以给各种自订安装来使用。使用者不必知 道某个 package 里究竟有包括哪些档案,就可`以很方便地重复将 它安装/反安装。
你可以执行 /stand/sysinstall 後, 在 post-configuration 选单下选择 package 这个安装选项;或 是对某个有兴趣的 package 档案执行 pkg_add(1) 把它装起来。Package 档案通常以 .tgz 作为延伸档名,手上有 FreeBSD CDROM 的人可以在 packages/All 这个目录下找到这类档案。 对不同的 FreeBSD 版本,也可以从下列位址由网路上取得:
给 2.2.8-release/2.2.8-stable 用的
ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/i386/packages-2.2.8/
给 3.2-release/3.2-stable 用的
ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/i386/packages-3-stable/
给 4.X-RELEASE/4-STABLE 用的
ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/i386/packages-4-current/
给 5.X-CURRENT 用的
ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/i386/packages-5-current
或是离你最近的 mirror 站。
要注意的是,因为新的 port 一直在增加中,所以并不是所有 port 都有相对应的 package。最好定时检查ftp.FreeBSD.org ,看看有哪些 package 可以用。
Q:7.2. 我可以在哪边找到 libc.so.3.0?
A:你可能在一台 2.1.x 的机器上,跑著给 2.2/3.x/4.0 的软件。 请再往上面一个章节看,正确的取得给你机器用的 port/package。
Q:7.3. 为何我得到了这个讯息 ?``Error: can't find libc.so.4.0''?
A:你不小心抓了给 4.X 及 5.X 系统用的 package,并且尝试著 去装在你的 2.X 或 3.X 的系统上面。请下载正确版本的 package。
Q: 7.4. ghostscript 在我的 386/486SX 上有点问题呢!
A:你没有浮点运算器,对吧?你必须在你的 kernel 中加入数学 运算模拟器,你可以跟著下面的步骤做,并在更改过你的 kernel 设定 档後,重新编译过一次。
options GPL_MATH_EMULATE
Note: 当你加入上一行的同时,你必须将 MATH_EMULATE 移除掉。
Q: 7.5. 为什么当我执行 SCO/iBCS2 的程式时,它在 ``socksys'' 这个地方出了问题? (FreeBSD 3.0 以及更早的版本才有此问题。)
A:你必须先修改 /etc/sysconfig (或是 /etc/rc.conf, 请读 rc.conf(5)) 这档案最後一个章节,将下面所讲到的变数设成 YES:
# Set to YES if you want ibcs2 (SCO) emulation
loaded at startup ibcs2=NO
这会在开机时将 ibcs2 这一个 kernel 模组载入。
你还要将你的 /compat/ibcs2/dev 改成下面这样:
lrwxr-xr-x 1 root wheel 9 Oct 15 22:20 X0R@ -> /dev/null
lrwxr-xr-x 1 root wheel 7 Oct 15 22:20 nfsd@ -> socksys
-rw-rw-r-- 1 root wheel 0 Oct 28 12:02 null
lrwxr-xr-x 1 root wheel 9 Oct 15 22:20 socksys@ -> /dev/null
crw-rw-rw- 1 root wheel 41, 1 Oct 15 22:14 spx
你只需要将 socksys 转向到 /dev/null (请读 null(4)) 去骗过 open & close 的动作。在 -current 里面的 ibcs2 相关程式码将会处理其余的部份,这种作法比以前的方式 乾净太多了。假如你想要使用 spx 方面的 程式,在你的核心设定档里面 加上SPX_HACK。
Q:7.6. 我要如何在我的机器上设定 INN (Internet News)?
A:
在你使用 package 或者是 port 安装完 inn 之後,Dave Barr's INN Page 是个非常好的开始,你可以在那边找到INN 的 FAQ。
Q: 7.7. 我该使用那个版本的 Microsoft FrontPage?
A:Use the Port, Luke!在 ports tree 中已经有一个包含 FrontPage 的 Apache 版本了。
Q: FreeBSD 支持 Java 吗?
A:有,请看 http://www.FreeBSD.org/java.
Q:7.9. 为什么我无法在 3.X-STABLE 机器上顺利编好这个 port?
A:如果你的 FreeBSD 版本相较 -CURRENT 或 -STABLE 之下是很古 早的话,或许你会需要一个升级 ports 的工具,在 http://www.FreeBSD.org/ports/。 ... 新却仍无用, 那么一定是某人更动之後造成 -CURRENT 才能用,-STABLE 无法用的情况。 由於 ports 内所收集的软体在 -CURRENT 或是 -STABLE 上都要能用, 所以请尽速送出关於此问题的虫报告;请使用 send-pr(1) 这个指 令来送虫报告。
Q: 7.10. 那里可以找得到 ld.so?
A:有些 a.out 格式的应用程式会需要 a.out 格式的函式库, Netscape Navigator 就是一个例子。不过用 ELF 函式库编起来 的 FreeBSD 预设并不会安装旧的 a.out 函式库,所以您可能会得 到类似找不到 /usr/libexec/ld.so 的抱怨讯 息。如果说您的系统有这安装 a.out 函式库的必要,这些函式库 (compat22) 也能够利用 sysinstall(8) 来安装。或者利用 FreeBSD 原始码来安装:
# cd /usr/src/lib/compat/compat22# make install clean
如果你希望每次 make world 时会自动更新 compat22 函式库,那么修改 /etc/make.conf, 加入 COMPAT22=YES。这些相容於古老版本的函式库 已经没什么在更新了,所以一般说来是不需要这样的。
同时也请您看一下 3.1-RELEASE 和 3.2-RELEASE 的勘误表(ERRATA)。
Q: 7.11. 我更新了系统原始码,现在我要怎样升级某个已经安装上 的 ports ?
A:FreeBSD 本身并没有自动升级 ports 的工具,但有一些可以让升级 简化一些的小程式。你也可以自己装上额外的工具来处理。
pkg_version(1) 指令可以自动产生用来达到自动升级到 ports tree 最新版本的 script。
# pkg_version -c > /tmp/myscript
一定要在手动修改一下产生出来的 script。 目前的 pkg_version(1) 在 script 最前面加入 exit(1) 强 迫你去修改它。
你应将执行 script 所产生的输出记录下来,因为里面会有记载某些 尚未升级但已经更新的 ports。不过你不一定要去升级它们。通常是因为 有某个共用的函式库已经改变版本号了,才要去重编一次那些使用到该函 式库的 ports。
如果你的硬碟空间很够,那么可以用 portupgrade 这个工具来做全自动处里。portupgrade 里面也有 一些小程式来简化 package 升级,它在 sysutils/portupgrade。 这个工具是用 Ruby 这个语言写的,所以并不适合加入到 FreeBSD 的原 始码中,不过并不会因此让某些人不用它。
如果你的系统一直都处於开机状态,可利用 periodic(8) 系统, 每个星期产生一张需要升级的清单。只要在 /etc/periodic.conf 加入 weekly_status_pkg_enable="YES" 就可以了。
Q: 7.12. 为什么 /bin/sh这么的小?为什么 FreeBSD 不改用 bash 或者是其他比较强悍的 shell?
A:因为 POSIX 说,该要有这么样的一个 shell 在才行。
比较繁琐的答案:许多人需要写可以跨很多平台的 shell script 。 这也是为何 POSIX 将 shell 以及工具命称都定义的非常详细的缘故。 大部份的 script 都适用於 Bourne shell,又因为有几个重要的 写程式所用到的程式或者函式 ( make(1) , system(3), popen(3), 还有在 Perl 或者 Tcl 里面呼叫系统程式的地方) 都指定用 Bourne shell 。那么因为 Bourne Shell 如此的广泛常用, 那么它的执行效率便很重要,快速是它决定性的要点之一,还要不占太多 记忆体。
目前的 /bin/sh 已是我们呕心沥血之作,它已 经尽量地符合标准规定。为了让它非常小,我们拿掉了一些其他 shell 有的方便功能。这也是为什么 ports 里面还有很多强悍的 shell ,像是 bash, scsh, tcsh 以及 zsh 。 (你可以自己比较一下这些 shell 执行 时所占的记忆体大小,去看看 ps -u 列出来的 ``VSZ'' 和 ``RSS'' 这两个栏位就知道了。)
Q: 7.13. 为什么 Netscape 和 Opera 要花好久的时间才能启动?
A:通常是因为你的 DNS 没有设定好。 Netscape 跟 Opera 在启动的时候 都会去检查一下 DNS。直到 DNS 有回应,或者是断定网路目前是断线之後, 它们才会显示画面出来。
Q:8.1. 我想修改kernel,这会很困难吗?
A:不会!请查阅 使用手册中的核心设定一节。
Note: 我会建议你在你让核心能正常工作後,做一个 kernel.YYMMDD 日期形式的备份,同时也备份 /module这个目录至 /modules.YYMMDD。这样下次如果你很不幸的玩 坏了设定,至少可以不需要使用最原始的 kernel.GENERIC。如你正从一个 GENERIC kernel 里面不支援的控制器里启动时,这就显得特别重要。
Q: 8.2. 我的核心因为 _hw_float遗失而编译失败。 该怎么修正呢?
A:让我猜看看,你把 npx0 (详见 npx(4)) 从你的核心设定档移除了,因为你没有数学运算器, 对吗?错了!:-) 这个 npx0是 必须要有的。就算你没有数学运算器,你还是 必须 引入 npx0 装置。
Q: 8.3. 为什么造出来的 kernel 这么大 (10MB 以上) ?
A:这很有可能是因为,你把 kernel 编成 侦错模式 了。侦错模式之下的 kernel 里面会存著侦错用的许多符号,因此会大幅 增加 kernel 的大小。如果说你的 FreeBSD 是 3.0 以後的版本,这对於 效能来说影响并不大,几乎是没有。而在系统会因某些原因 panic 时, 有个侦错模式的 kernel 在也挺有用的。
不过呢,如果你的磁碟空间很小,或者你就是不想用侦错模式的 kernel 的话,请确认以下事情:
*
kernel 设定档里面没有这一行:
makeoptions DEBUGS=-g
*
执行 config(8) 时没有加上 -g 这个选项。
以上两件事情都会让你编出一个侦错模式的 kernel。但只要避免之, 就可以编出一个正常的 kernel,而你也会注意到,kernel 明显的变小了; 大部份的 kernel 都差不多在 1.5MB 到 2MB 之间。
Q: 8.4. 为何出现了 multi-port serial code 的中断冲突?
A:
当我编译一个 multi-port serial code 的核心时,它告诉我只有 第一个被侦测到,其他的则因中断冲突而跳过了,我该怎么修正它?
这个问题是因为 FreeBSD 使用内建程式码避免因为硬体或软体冲突 导致核心程式过於肥大或无用。要修正这种情形的方法是除了一个 port 外把其他所有的 IRQ 设定都做保留。这里有一个范例:
#
# Multiport high-speed serial line - 16550 UARTS
#
device sio2 at isa? port 0x2a0 tty irq 5 flags 0x501 vector siointr
device sio3 at isa? port 0x2a8 tty flags 0x501 vector siointr
device sio4 at isa? port 0x2b0 tty flags 0x501 vector siointr
device sio5 at isa? port 0x2b8 tty flags 0x501 vector siointr
Q:8.5. 为什么我一个 kernel 都编不起来?甚至 GENERIC 也不行?
A:这有很多种可能的原因:
*
你没有用新的 make buildkernel 与 make installkernel 这两个方法来编,而正好 你的系统原始码的版本和正在执行的系统核心版本不一样 (像是, 在跑 4.0-RELEASE 的系统上尝试著编 4.3-RELEASE)。如果说你要升 级系统的话,请务必去看看 /usr/src/UPDATING 这个档案,特别注意最後面的 ``COMMON ITEMS'' 这个小节。
*
你已经用上 make buildkernel 以及 make installkernel 了,但是在 make buildworld 时失败了。可惜的是, make buildkernel 要成功,需要依赖 make buildworld 後造出来的一些档案。
*
就算是你在编 FreeBSD-STABLE, 还是有可能你抓到了正在修改中,或著因为某些缘故而根本还没改好 的原始码;虽然说 FreeBSD-STABLE 大部份的时候都是可以编的,但只有 RELEASE 才是保证可以编的。碰 到这个问题时,再次更新原始码并且再试试看。也有可能是放原始码的 伺服器出现某些问题,所以更新原始码时也试试从不同伺服器来更新看 看。
Q: 10.1. 系统起始设定在哪?
A:从 2.0.5R 到 2.2.1R,主要的设定档是 /etc/sysconfig。所有的选项都被指定在这个档, 而其他像 /etc/rc (参见 rc(8)) 和 /etc/netstart 只是引用它。
观察 /etc/sysconfig 这个档并修正其值以 适合你的系统。这个档用注解填满以表示何处该放置什么设定。
在 post-2.2.1 以後及 3.0,/etc/sysconfig 亦更名为一个更容易描述的档名叫 rc.conf(5) ,并且语法简化了些。 /etc/netstart 亦更名为 /etc/rc.network 因此所有的档案都可以用 cp /usr/src/etc/rc* /etc 来拷贝。
在 3.1 以及,/etc/rc.conf 被移到 /etc/defaults/rc.conf。 千万不要编辑这个档! 如果 /etc/defaults/rc.conf 内有想要更动的项目, 你应该将那一行的内容拷贝到 /etc/rc.conf, 然後再修改它。
例如 FreeBSD 3.1 及以後的版本内,有一个 DNS 伺服器 named, 而你想要启动它。你所需要作的事就是:
# echo named_enable="YES" >> /etc/rc.conf
想要在 FreeBSD 3.1 及以後的版本中,启动本地端服务的话,将 shell script 置於 /usr/local/etc/rc.d 目录 下。这些 shell script 应该设定成可执行,并且档名以 .sh 结束。 在 FreeBSD 3.0 及更早的版本中,你应该直接编辑 /etc/rc.local 档。
/etc/rc.serial用来初始化序列埠 (像是锁定埠的特性等)。
/etc/rc.i386 是 Intel 专用设定, 像是 iBCS2 模拟或是 PC 系统主控台设定。
Q:10.2. 我该如何简单地加入USER?
A:使用 adduser(8) 指令。如果需要更复杂的使用方式, 请用 pw(8) 这个指令。
要再次移除使用者,使用 rmuser(8) 指令。还有, pw(8) 也可以使用。
Q:10.3. 在我编辑 crontab 档案之後,为什么我老是收到这样的讯息: ``root: not found''?
A:通常都是因为编辑了系统的 crontab (/etc/crontab) 然後就用 crontab(1) 去安装它:
# crontab /etc/crontab
这样作是不对的。系统的 crontab 和 crontab(1) 所更新的使用者的 crontab 格式并不一样 ( crontab(5) 说明文件针对差异处有详细的说明)。
如果你已经用这种方法,额外多出的 crontab 只就是 /etc/crontab 的拷贝,只是格式是错误的。 可用以下的命令删除:
# crontab -r
下次你编辑 /etc/crontab 档案的时候, 你不用作任何动作去通知 cron(8) ,它自动会去侦测是否有更动。
如果你想要每天、每周、或是每月固定执行某些动作一次,也许加个 shell script 在 /usr/local/etc/periodic 目录下会更好,系统的 cron 会固定执行 periodic(8) 命令, 它可将你的程式和其它的系统周期性工作一起执行。
这个错误的真正原因,是因为系统的 crontab 有一个额外的栏位, 说明该命令要以什么使用者身份执行。在 FreeBSD 的预设系统 crontab 中,所有的项目都是 root。 当这个 crontab 被当作是 root 的使用者 crontab (它和系统的 crontab 是 不 一样的), cron(8) 会以为 root 字串是欲执行的命令的第一个字,但是实际上 并没有这样的命令存在。
Q: 10.4. 为什么我想要用 su 成为 root 时,会得到 ``you are not in the correct group to su root'' 的错误讯息?
A:这是一个安全特性。想要利用 su 成为 root (或其它有 superuser 权限的帐号),你一定要在 wheel 群组内。如果没有这个特性的话, 任何人只要在系统里有帐号,并且恰巧知道 root 的密码,就可以取得 superuser 等级的权限以存取系统。有了这个特性, 这样的情况就不会发生;如果使用者不在 wheel 群组内的话, su(1) 会让他们连试著键入密码的机会都没有。
要让某人可以利用 su 成为 root 的话, 只要把他们放入 wheel 群组内即可。
Q:10.5. 我在 rc.conf 还是某个起动档案里犯了错误, 因为档案系统变成唯读的,我无法去编辑它。我该怎么办?
A:当电脑问你 shell 完整路径名时,只要按 ENTER ,然後执行 mount / 以读写模式 重新挂载根档案系统。你也许需要执行 mount -a -t ufs ,将你惯用的文字编辑器所在的档案系统挂载上来。如果 你惯用的文字编辑器在网路档案系统上的话,你必须先手动将网路设定 起来,以便将网路档案系统挂载上来,或是使用本地端档案系统上的 编辑器,例如 ed(1)。
如果你想要使用像 vi(1) 或是 emacs(1) 等的全萤幕 文字编辑器的话,你也需要执行 export TERM=cons25 ,以便让这些编辑器能够从 termcap(5) 资料库里读取正确的资料。
当你已经完成了这些步骤後,你可以照你平常修改文法错误的方式 去编辑 /etc/rc.conf 档案。在核心 (kernel) 启动时所显示的错误讯息,能够告诉你档案中哪一行有错误。
Q: 10.6. 为什么我没办法设定我的印表机?
A:请参考一下 Handbook 中,有关列印的部份。它应该能够解决 你大部份的问题。请参考 Handbook 中的列印部份。
有些印表机需要主机支援的驱动程式 (host-based driver) 才能 执行任何列印功能。FreeBSD 本身并不支援这些所谓的 ``WinPrinters''。 如果你的印表机无法在 DOS 或 Windows NT 4.0 下执行,那它大概就是一台 WinPrinter。你唯一能使用 这样的印表机的希望,就是试试 print/pnm2ppa 支不支援它了。
Q: 10.7. 我要怎么样修正我的系统所使用的键盘对映 (keyboard mapping)?
A:请参考 Handbook 中的 using localization 章节,尤其是 console setup 章节。
Q:10.8. 为什么我在系统启动时,得到 ``unknown: <NP0303> can't assign resources'' 的讯息?
A:以下是从 freebsd-current 通信论坛的一篇文章中节录出来的。
``无法指派资源 (can't assign resources)'' 讯息表示 那些装置是传统的 ISA 装置,而核心中已经编入不认得 PNP 的驱动程 式。这些装置包括键盘控制器,可程式化岔断控制晶片,还有几个标准 设备。资源无法指派给这些装置,是因为早已有驱动程式使用那些位址 了。
--Garrett Wollman <wollman@FreeBSD.org>, 2001 年四月 24 日
Q: 10.9. 为什么我无法让 user quotas 正常工作?
A:#
不要在 / 打开 quotas,
#
把 quotas 档放在它必须强迫置入的档案系统内,举例:
档案系统 Quota 档
/usr /usr/admin/quotas
/home /home/admin/quotas
... ...
Q: 10.10. FreeBSD 支持 System V IPC 格式指令集?
A:是的,FreeBSD 支援 System V-style IPC。这包括共享记忆体, 讯息跟信号。你需要在你的核心设定档内加入下列几行以启动它们。
options SYSVSHM # enable shared memory
options SYSVSEM # enable for semaphores
options SYSVMSG # enable for messaging
Note: 在 FreeBSD 3.2 以及之後的版本,这些选项已经是 GENERIC 核心的一部份,也就是说它们已 经编进了你的系统中。
重新编译并安装。
Q: 10.11. 我该如何让 sendmail 透过 UUCP 来递送邮件?
A:跟随 FreeBSD 套装而来的 sendmail 设定是适合那些直接连上网际网路 的站台。想透过 UUCP 交换邮件的站台必须另外安装 sendmail 的设定档案。
手动修改 /etc/sendmail.cf 是绝对必要的。 第 8 版的 sendmail 提供一个全新的入口以透过一些像 m4(1) 的处理就能产生设定档,这事实上是一个高层概念等级的技巧性设定。 你应该可以在 /usr/src/usr.sbin/sendmail/cf 以下里使用它:
假如你不是用 full sources 方式安装系统,那么 sendmail 设定项目可能已经分散成好几个来源分布档在等著你,假设你已经 mount 光碟机,做以下动作:
# cd /cdrom/src
# cat scontrib.?? | tar xzf - -C /usr/src contrib/sendmail
别惊慌,这只有数十万个位元组的大小。在 cf 目录里的 README 可以提供一个 m4 设定法的基 本介绍。
以 UUCP 递送来说,建议你最好使用 mailertable 特点。建构一个资料库让 sendmail 可以使用它自己的路径决策。
首先,你必须建立自己的 .mc 档。 /usr/src/usr.sbin/sendmail/cf/cf 目录是这些 档案的家。查看一下,已经有好几个范例档,假设你已经命名自己的档叫 foo.mc,你要做的只是把它转换成一个有效的 sendmail.cf:
# cd /usr/src/usr.sbin/sendmail/cf/cf
# make foo.cf
# cp foo.cf /etc/mail/sendmail.cf
一个典型的 .mc 档看起来可能像这样:
VERSIONID(`Your version number')
OSTYPE(bsd4.4)
FEATURE(accept_unresolvable_domains)
FEATURE(nocanonify)
FEATURE(mailertable, `hash -o /etc/mail/mailertable')
define(`UUCP_RELAY', your.uucp.relay)
define(`UUCP_MAX_SIZE', 200000)
define(`confDONT_PROBE_INTERFACES')
MAILER(local)
MAILER(smtp)
MAILER(uucp)
Cw your.alias.host.name
Cw youruucpnodename.UUCP
accept_unresolvable_domains, nocanonify, 和 confDONT_PROBE_INTERFACES 特性将避免任何在 递送邮件时会用到 DNS 的机会。UUCP_RELAY 项目的出现理由很奇怪,就不要问为何了。简单的放入一个网际网路 上可以处理 .UUCP 虚拟网域位址的主机名称;通常,你只需要在这 里填入你 ISP 的信件回覆处 (mail replay)。
你已经做到这里了,你还需要这个叫 /etc/mail/mailertable。如果你只有一个用 来传递所有邮件的对外通道的话,以下的档案就足够了:
#
# makemap hash /etc/mail/mailertable.db < /etc/mail/mailertable
uucp-dom:your.uucp.relay
另一个更复杂的例子看起来像这样:
#
# makemap hash /etc/mail/mailertable.db < /etc/mail/mailertable
#
horus.interface-business.de uucp-dom:horus
interface-business.de uucp-dom:if-bus
interface-business.de uucp-dom:if-bus
heep.sax.de smtp8:%1
horus.UUCP uucp-dom:horus
if-bus.UUCP uucp-dom:if-bus
uucp-dom:
如你所见,这是某个真实档案里的一部份。首三行处理网域定址信件 不应该被送出到内定路径,而由某些 UUCP 邻居(UUCP neighbor)取代 的特殊情形,这是为了 ``缩短''递送的路径。下一行处理到 本地乙太网路网域的信件让它可以使用 SMTP 来递送。最後,UUCP 邻居提到 .UUCP 虚拟网域的记载,允许一个 uucp-neighbor !recipient 推翻 内定规则。最後一行则以一个单独的句点做结束,以 UUCP 递送到提供当 你全世界性邮件闸门的UUCP 邻居。所有在 uucp-dom: 关键字里的节点名称必须都是有效的 UUCP 邻居,你可以用 uuname 命令去确认。
提醒你这个档案在使用前必须被转换成 DBM 资料库档案,最好在 mailertable 最上面用注解写出命令列来完成这个工作。当你每次更换你 的 mailertable 後你总是需要执行这个命令。
最後提示:如果你不确定某些特定的信件路径可用,记得把 -bt 选项加到 sendmail。这会将 sendmail 启动在 address test mode;只要按下 0,接著输入你希望测试的信件路径位址。 最後一行告诉你使用内部的信件代理程式,代理程式的会通知目的主机, 以及(可能转换的)位址。要离开此模式请按 Control-D。
% sendmail -bt
ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)
Enter <ruleset> <address>
> 3,0 foo@example.com
canonify input: foo @ example . com
..
parse returns: $# uucp-dom $@ your.uucp.relay $: foo < @ example . com . >
> ^D
Q: 10.12. 当我用拨接连上网路时该怎么设定信件递送?
A:如果你已经有一个固定的 IP 数字,你不需要调整任何内定值。设好 你要指定的网路名称,其他的 sendmail 都会帮你做完。
如果你拿到的是动态配置的 IP 数字而使用拨接 ppp 连接到网际网 路,你可能已经在你的 ISP 信件主机上有一个信箱。假设你的 ISP 网域 是 example.net,你的使用者名 称是 user。亦假设你称自己的主机名称是 bsd.home 而你的 ISP 告诉你可以使用 relay.example.net 当作信件回覆处。
为了从你的信箱接收信件,你将需要安装取信程式以便从信箱取回信件。 Fetchmail 是一个不错的选择,因为它支 援许多不同的通讯协定,通常你的 ISP 会提供 POP3。如果你选择使用 user-ppp,你可以在连线到网路成功後自动抓取你的信件,只要在 /etc/ppp/ppp.linkup里面设定以下这项:
MYADDR:
!bg su user -c fetchmail
假使你正使用 sendmail (如下所示) 传送信件到非本地帐号,置入以下命令:
!bg su user -c "sendmail -q"
在上面那项命令之後。这会强迫 sendmail 在连接上网路後马上开始处理 mailqueue。
我假设你在 bsd.home 机器上有一个 user 的帐号。在 bsd.home 机器上 user 的家目录里建立一个 .fetchmailrc 的档案:
poll example.net protocol pop3 fetchall pass MySecret
无须赘言,这个档除了 user 外不应该被任 何人读取,因为它包含 MySecret 这个密码。
为了在寄信时有正确的抬头 from:,你必须告诉 sendmail 使用 user@example.net 而非 user@bsd.home。你可能会希望告诉 sendmail 从 relay.example.net 送出所有信件, 加快信件传送。
以下的 .mc 档应能满足你的要求:
VERSIONID(`bsd.home.mc version 1.0')
OSTYPE(bsd4.4)dnl
FEATURE(nouucp)dnl
MAILER(local)dnl
MAILER(smtp)dnl
Cwlocalhost
Cwbsd.home
MASQUERADE_AS(`example.net')dnl
FEATURE(allmasquerade)dnl
FEATURE(masquerade_envelope)dnl
FEATURE(nocanonify)dnl
FEATURE(nodns)dnl
define(`SMART_HOST', `relay.example.net')
Dmbsd.home
define(`confDOMAIN_NAME',`bsd.home')dnl
define(`confDELIVERY_MODE',`deferred')dnl
如何转换这个 .mc 档案到 sendmail.cf 档的详细细节,请参考上一节。 另外,在更新 sendmail.cf 以後不要忘记重新启动 sendmail。
Q: 10.13. 除了 Sendmail 外,还有哪些邮件伺服器可以使用呢?
A:
Sendmail 是 FreeBSD 预设使用的邮件伺服器,但是你还是可以很容易地以其它 邮件伺服器 (例如,从 port 安装的邮件伺服器) 取代之。
port 里有很多可供选择的邮件伺服器,像 mail/exim、 mail/postfix、 mail/qmail、 mail/zmailer 等, 就是几个很受欢迎的选择。
多样选择是好事,而且大家有许多邮件伺服器可以使用也被认为是 好事;所以请避免在通信论坛里问像 ``Sendmail 有比 Qmail 好吗?'' 这样的问题。如果你真的很想问的话,请先到通信论坛 archive 里找一下。每一个邮件伺服器的优点与缺点,以前大概就已经 讨论好几次了。
Q: 10.14. 我忘了 root 密码了!怎么办?
A:不要惊慌!只要重新启动系统,在看到 Boot: 时输入 boot -s 即可进入单使用者模式 (在 3.2-RELEASE 之前的版本请改用 -s)。 在问要使用哪个 shell 时,按下 ENTER。你会看到一个 # 的提示号,输入 mount -u / 以重新挂上(mount) 你的根档案系统可供读/写。执行 passwd root 以更换 root 密码,然後执行 exit(1) 继续启动程序。
Q: 10.15. 我该怎么让 Control-Alt-Delete 不会重新启动系统?
A:如果你是使用 FreeBSD 2.2.7-RELEASE 或之後版本的 syscons(系统内定的主控台驱动程式),把下列这行放到核心设定档内, 然後重做一个新的核心:
options SC_DISABLE_REBOOT
若是使用 FreeBSD 2.2.5-RELEASE 或之後版本的 PCVT 主控台驱动 程式,则以下列选项代替:
options PCVT_CTRL_ALT_DEL
其他更早期的 FreeBSD 版本,请修改你正在使用的主控台键盘对应, 并将所有 boot 关键字以 nop 取代。内定的键盘对应是在 /usr/share/syscons/keymaps/us.iso.kbd。 你可能需要明白的吩咐 /etc/rc.conf 去读取 这个键盘对应以确保更动生效。当然如果你正在用适合你国籍的键盘对应, 你应该编辑那一个。
Q: 10.16. 我该怎么把 DOS 文字档案重新格式化成 UNIX 的?
A:只要使用这个 perl 命令:
% perl -i.bak -npe 's/\r\n/\n/g' file ...
file 就是要处理的档案。这个修改是在内部完成,原始的档案会储存成 副档名为 .bak 的档案。
或者你可以使用 tr(1) 这个命令:
% tr -d '\r' < dos-text-file > unix-file
dos-text-file 是包含 DOS 文字的 档案,而 unix-text-file 则是包含转换 的输出结果。这比使用 perl 还要快上一点点。
Q: 10.17. 我该怎么用名称砍掉 process?
A:使用 killall(1) 。
Q: 10.18. 为何在 su 一直说我不在 root 的 ACL 里?
A:这个错误是因为 Kerberos 分散认证系统。这个问题并不是很严重 但是令人厌烦。你可以用 -K 选项去执行 su,或是像下个问题所描述的 移除 Kerberos。
Q: 10.19. 我该怎么移除 Kerberos?
A:要从系统里移除 Kerberos,重装你正在执行的 release 版本的 bin distribution。如果你有 CDROM,你可以 mount cd(假设在 /cdrom) 并执行:
# cd /cdrom/bin
# ./install.sh
或者你也可以将 /etc/make.conf 里的 "MAKE_KERBEROS" 选项全都拿掉,然後再 build world.
Q: 10.20. 我该怎么增加系统的虚拟终端机?
A:如果你有许多 telnet,ssh,X 或是 screen 使用者,你或许会用完 虚拟终端机,这能教你怎么加更多:
1.
建立并安装一个新的核心程式并且把这一行
pseudo-device pty 256
加入到设定档里。
2.
执行这个命令:
# cd /dev
# sh MAKEDEV pty{1,2,3,4,5,6,7}
会造出 256 个虚拟终端机的装置节点。
3.
编辑 /etc/ttys 并加入符合 256 个终端机的行数。它们应该符合已经存在单项的格式,举例来说, 它们看起来像:
ttyqc none network
字母设计的顺序是 tty[pqrsPQRS][0-9a-v],使用正规表示式。
4.
用新的核心程式重新启动电脑就可以了。
Q: 10.21. /dev/snd0 这个装置做不出来!
A:并没 snd 这个装置的存在。这个名字 是用来当作各个组成 FreeBSD 声音驱动程式组,诸如 mixer, sequencer,以及 dsp 的简称。
可以用以下的命令作出这些装置:
# cd /dev
# sh MAKEDEV snd0
Q: 10.22. 可以不用开机,重新读取 /etc/rc.conf、 再次启动 /etc/rc 吗?
A:先进入单人使用者模式,然後再回到多使用者模式。
在主控台执行:
# shutdown now
(Note: without -r or -h)
# return
# exit
Q: 10.23. 什么是 sandbox?
A:``Sandbox'' 是系统安全用的术语,有两个意义:
*
放在某些虚拟防护墙里的执行程序,这些防护墙是用来阻止 某些人侵入这道程序,进而出入於更大的系统中。
这道程序可以完全在防护墙里 ``动作''。也就 是说,它所执行的任何程式不可能会渗透到墙的外面。所以如果 您对它有安全上的顾虑,并不需要特别去监听它的一举一动,反 正它只能在墙内活动。
举例来说,可以用 userid 来做这道防护墙,这正是 security 和 named 说明文件中的定义。
现在就用 ntalk 这个服务作说明(见 /etc/inetd.conf)。这个服务以前的 userid 是 root,现在执行时则是用 tty。tty 这个使用者就是一个 sandbox,如果有人能够顺利用 ntalk 侵入系统,现在他就算进得来也只能用这个 userid。
*
放在某个模拟机器里的程式,这比上述来得更严密。基本上 这表示能侵入该程式的人相信他能再进入所属的机器,但事实上 只会进入模拟出来的机器,无法进一步修改任何真实的资料。
达到这个目的最常用的方法,就是在某个子目录下做出模拟的 环境,然後用 chroot 执行该程式,这样该程式的根目录便是这个 子目录,而非系统真正的根目录。
另一个常见作法是将某个档案系统 mount 成唯读,但在它 上面另外制造出程式以为可以写入的档案系统。这个程式会相信 它可以对其他档案读写,但只有它看不到这个唯读效应 - 系统 执行的一般程式都看得到。
我们试图将这类 sandbox 尽量透明化,让使用者或侵入者 无法看到他是否在某个 sandbox 里面。
UNIX 实作两种 sandbox,一个在程式层面,另一个则是由 userid 来达成。
每个 UNIX 执行程序会用防火墙将它和所有其他程序隔开,某个程序 不可以随意修改其他程序位址的资料。这和 Windows 中,程式可以轻易 修改其他位址资料,结果导致当机的情形大不相同。
每个 UNIX 程序都属於某个特定的 userid。如果该 userid 不是 root,就会将它和其他使用者的程序隔开。 Userid 同时也用於硬碟资料的存取权上。
Q: 10.24. 什么是 securelevel?
A:securelevel 是核心中所实作的一个安全机制。基本上当 securelevel 是正值时,核心会限制某些工作;即使是 superuser (也就是 root) 也无法完成那些工作。在撰写 本文时,securelevel 机制在一般的限制外,还能够限制以下的功能:
*
清除某些特定的档案旗标,例如 schg (系统唯读标旗, the system immutable flag)
*
经由 /dev/mem 与 /dev/kmem, 将资料写入至核心记忆体中
*
载入核心模组
*
更动 ipfirewall(4) 规则。
想要检查在某个运作中的系统的 securelevel 状态,只要执行以下 命令即可:
# sysctl kern.securelevel
输出的结果会包含一个 sysctl(8) 变数名称 (在这个例子中, 它是 kern.securelevel) 以及一个数字。後者即是 目前的 securelevel 值。如果它是一个正值 (也就是大於 0),表示至少 有一些 securelevel 的保护机制已经开启了。
你没有办法降低一个运作中的系统的 securelevel;如果可以的话, 就失去了这个机制的意义了。如果你要作一些需要 securelevel 为 非正值才可以的动作的话 (例如 installworld 或更动日期),你需要修改 /etc/rc.conf 内的 securelevel 设定 (找找 kern_securelevel 和 kern_securelevel_enable 变数),然後重新开机。
想要知道更多有关於 securelevel 与各个不同等级影响的细节, 请参考 init(8) 说明文件。
Warning: securelevel 可不是万灵丹;它有许多已知的缺陷,往往造成 一种安全的假象。
它一个最大的问题,就是要让这个功能完全有效的话,在 securelevel 发挥作用前的启动过程中,所有使用到的档案都 必须被保护起来。如果一个攻击者在 securelevel 有效前 (由於 有些系统在启动中所作的事情,无法在较高的 securelevel 中 正常运作,所以这会在启动过程中後期才会运作),能让他们的程式 被执行的话,securelevel 的保护就完全无效了。保护启动程序 中所有的档案在技术上是可行的,但是如果真的这样作的话,系统 维护将会变成一场梦魇。即使只是修改一个设定档,也必须将整个 系统关闭,至少也得到单人模式。
除了这点,还有许多其它的东西都在通信论坛上讨论,尤其是 freebsd-security。请到 这里 搜寻以前的 讨论。有些人希望 securelevel 能够尽快消失,由另一个更优秀的 机制取代,不过机会有点渺茫。
风险自行承担。
Q: 10.25. 我想要把我的系统升级到最新的 -STABLE,但是得到的是 -RC 或 -PRERELEASE!怎么了?
A:简单地说:那只是名字而已。RC 的意思是 ``Release Candiate, 发行候选版本'',它表示新版本快要发行了。在 FreeBSD 中, -PRERELEASE 通常是发行前的程式码冻结的代名词。(有些发行版本中, -BETA 标签跟 -PRERELEASE 是相同意思的。)
详细地说:FreeBSD 从两个地方分支出它的发行版本。主版号、 点零、release (例如 3.0-RELEASE 及 4.0-RELEASE) 的,是从发展过程 开始时分支出来的,通常称为 -CURRENT 。有副版号的版本 (例如 3.1-RELEASE 或 4.2-RELEASE),是 活跃的 -STABLE 分支中的发行版本 快照。从 4.3-RELEASE 开始,每一个发行版本有它自己的分支,可为 偏好极度保守的发展速度 (通常只会作安全方面的更新) 的人所用。
准备要制作发行版本时,其所在的分支会经过一定的程序。有一个是 程式码冻结。当程式码冻结开始时,分支名称会更名,以反映它快要成为 一个发行版本了。举个例子,如果原来的分支叫 4.5-STABLE,它的名字 会变成 4.6-PRERELEASE 以表示程式码已冻结,并且额外的发行前测试 将要开始了。臭虫更正仍可回报,以成为发行版本的一部份。当程式码 有了可成为发行版本的雏形时,它的名字就会变成 4.6-RC,以表示发行 版本快好了。进入 RC 阶段後,只有找到的最有影响的臭虫才会被修正。 当发行版本 (本例中为 4.6-RELEASE) 产生後,发行版本会有自己的分支, 原分支会被更名为 4.6-STABLE。
想要得知更多有关版本号码与各 CVS 分支的资讯,请参考 Release Engineering 一文。
Q: 10.26. 我试著要安装一个新的核心,但是无法 chflags。我该怎么解决?
A:简单地说:你的 securelevel 可能大於零。直接重新开机到 单人模式,再安装核心。
详细地说:FreeBSD 在 securelevel 大於零情况下,不允许 变更系统旗标 (system flags)。你可以用这个指令检查你的 securelevel:
# sysctl kern.securelevel
你没有办法降低 securelevel;你必须启动系统到单人模式以 安装核心,或是修改 /etc/rc.conf 内的 securelevel 再重新开机。请参考 init(8) 说明文件,以取得 更多有关 securelevel 的资讯,还有 /etc/defaults/rc.conf 和 rc.conf(5) 说明文件,以取得更多有关 rc.conf 的资讯。
Q: 10.27. 在我的系统上,我无法变更时间超过一秒以上的范围! 我该怎么办?
A:简单地讲:你系统的 securelevel 也许大於 1。直接重新开机至 单人模式,然後再修改时间。
详细地说:在 securelevel 大於 1 的情况下,FreeBSD 不允许时间 变动大於一秒。你可以用以下的命令来检查目前的 securelevel:
# sysctl kern.securelevel
你无法降低 securelevel;你必须启动电脑至单人模式下以修改时间, 或是修改 /etc/rc.conf 再重新开机。请参考 init(8) 说明文件,以取得更多有关 securelevel 的资讯,还有 /etc/defaults/rc.conf 和 rc.conf(5) 说明文件,以取得更多有关 rc.conf 的资讯。
Q: 10.28. 为什么 rpc.statd 用了 256 megabytes 的记忆体?
A:不,那不是 memory leak,而且它也不是真的用了 256 Mbyte 的记忆体。它只是喜欢 (意思就是总会这样作) 将一狗票的记忆体 映谢到它自己的位址空间,以方便作事。就技术而言,这样并没有 什么不对;这样只是会让 top(1) 和 ps(1) 吓一大跳而已。
rpc.statd(8) 会将它的状态档案 (位於 /var ) 映射至它的位址空间里;为了防止需要的时候再增大所 导致的重新映射,它一次会使用相当大的大小。从程式码来看的话就 更明显了,可以看到 mmap(2) 的长度参数为 0x10000000 ,它是 IA32 架构上的十六分之一的定址空间,也就是 256MB。
Q: 10.29. 为什么我没办法取消 schg 档案旗标?
A:你正在一个提高了 securelevel (也就是大於 0) 的系统运作。 降低 securelevel 再试试看。请参考 FAQ 中对 securelevel 的说明 和 init(8) 说明文件。
Q: 10.30. 为什么近来的新版 FreeBSD 预设无法利用 .shosts 完成 SSH 认证?
A:为什么近来新版 FreeBSD .shosts 认证预设 为取消的原因,是因为 ssh(1) 预设不安装为 suid 成 root。要 ``修正'' 这点,你可以作下列的 任何一件事:
*
要一劳永逸解决,请将 /etc/make.conf 里的 ENABLE_SUID_SSH 设成 true ,然後再重新 build ssh (或是执行 make world)。
*
只作一时的修正的话,可以 root 身份 执行 chmod 4755 /usr/bin/ssh 将 /usr/bin/ssh 设成 4555 。然後将 ENABLE_SUID_SSH= true 加入 /etc/make.conf 里,这样下次 make world 执行就会生效了。
Q: 10.31. 什么是 vnlru?
A:当系统达到上限 kern.maxvnodes 时, vnlru 会清除并释放 vnode。这个核心 执行绪大部份的时间都没事作,只有当你有很大的记忆体,而且 正在存取上万个小档案时,才会被启动。
Q: FreeBSD sshd/telnet禁止root登录的问题
A: ssh修改/etc/ssh/sshd_config更改PermitRootLogin no为PermitRootLogin yes telnet修改/etc/login.access加入+:wheel:ALL
Q: root用户收到大量系统邮件, 想让信件发送到其他地址
A: 修改/etc/mail/aliases root: me@someserver 或在/root/.forward加入me@someserver
Q: 制作FreeBSD启动画面 A: 确定你的kernel配置中有
pseudo-device splash
options VESA # support for zhcon
然后在/etc/loader.conf中加入
splash_bmp_load="YES" # For Windows .bmp files or
splash_pcx_load="YES" # For ZSoft .PCX files (one or the other)
vesa_load="YES" # If the image is greater than 320x200
bitmap_load="YES"
bitmap_name="/boot/splash.bmp" # Name of the splash image file
#bitmap_name="/boot/splash.pcx"
等到重启后, 看到
Loading /boot/defaults/loader.conf
/kernel text=0x161db8 data=0x218ac+0x223fc syms=[0x4+0x23040+0x4+0x243e4]
/modules/splash_bmp.ko text=0x10f9 data=0xc8+0x66c syms=[0x4+0x420+0x4+0x230]
/modules/vesa.ko text=0x2330 data=0xea0+ox23c syms=[0x4+0x7a0+0x4+0x585]
...
Hit [Enter] to boot immediately, or any other key for command prompt.
按下回车就可以看到画面了. 假如出现以下错误
module_register_init: MOD_LOAD (splash_bmp, c02ee62c, 0> error 19
一般来说是kernel中没有配置options VESA, 或者是图象大小不符合, 请使用8位的bmp或pcx, 图象大小只能是vidcontrol所支持的分辨率的大小. |
|