Main | December 2005 »

November 30, 2005

yabm,另一个带宽计量软件

yabm, Yet Another Bandwidth Meter,使用图形化png文件的方式显示当前网卡的带宽使用情况。可在FreeBSD 4.10以上版本运行。在FreeBSD 4.10 ,4.11,5.3和6.0上测试过。

使用ports安装:
#make
#make install

安装了脚本 /usr/local/etc/rc.d/yabm.sh

如果要监测端口fxp0和ip地址192.168.0.1,就在/etc/rc.conf文件中加入:
yabm_enable="YES"

yabm_if0="fxp0"
yabm_if0_output="/usr/local/www/bw-fxp0.png"
yabm_if0_flags="-m 512k -t" //这里的-m 参数表示显示的最大端口速率,默认是使用端口的实际最大速率,如果网卡是100Mbps,则很多时候网卡数据流量很小,图示数据会很不明显。

yabm_alias0="192.168.0.1"
yabm_alias0_output="/usr/local/www/bw-ip.png"
yabm_alias0_flags=""

使用/usr/local/etc/rc.d/yabm.sh start启动,/usr/local/etc/rc.d/yabm.sh stop停止运行。

监测结果如下图:

bw-xl0.png

网络监测工具zabbix

zabbix1.pngZabbix是一整套网络监测工具。可运行在AIX, FreeBSD, HP-UX, Linux, MacOS X, NetBSD, OpenBSD, Solaris, Tru64/OSF等平台。它可以使用SNMP v1 v2 v3进行监测,也可使用zabbix agent进行监测。zabbix agent可运行在windows平台。它使用SQL数据库存储配置、数据信息等。使用web方式进行管理和展现,可实现无处不在的管理(即只要把管理平台放在互联网上,就可在任何联网的地点进行管理)。

zabbix具有丰富的图表表现能力,可以展示历史数据、趋势分析等等。可进行服务器性能监测、网络监测,并集成故障管理和性能管理功能。

从ports安装
#cd /usr/ports/net/zabbix
#make
#make install

安装过程中会自动编译安装依赖的软件包。

创建数据库
#/usr/local/share/zabbix/create/dbsetup.sh -u root -p
输入mysql的root密码

将/usr/local/etc/zabbix/下面的sample配置文件复制为相应的配置文件。
如果mysql数据库登陆密码不是空的话,修改每个配置文件中的数据库登陆密码。

如果使用zabbix_agentd,注意修改zabbix_agentd.conf中
Server=127.0.0.1 这里定义的是哪些IP可以来查询zabbix提供的信息。用逗号来分割
如:
Server=127.0.0.1,192.168.1.1
注意zabbix_sucker.conf 中FpingLocation 指出的fping的位置。

从src中将php文件复制到apache data目录中,并修改include目录下面的db.inc.php文件,添加mysql登陆密码。
php脚本中,report1.php用来检查zabbix的工作状态,其中调用了ps来检查zabbix后台进程zabbix_suckerd和 zabbix_trapperd的状态。使用的参数是-ef。但对于FreeBSD和Linux来说,应该使用参数-ax。根据需要进行修改!!


将/usr/local/etc/rc.d/zabbix.sh.sample复制为zabbix.sh 并修改其中的
%PREFIX% 和 %LOCALBASE%
都设为/usr/local

November 28, 2005

Awstats日志分析工具

awstats早已进入FreeBSD ports,通过ports安装非常方便。
#cd /usr/ports/www/awstats
#make
#make install
安装结束提示信息有:

Please add the following to your apache config, and restart.
#
# Directives to allow use of AWStats as a CGI
#
Alias /awstatsclasses "/usr/local/www/awstats/classes/"
Alias /awstatscss "/usr/local/www/awstats/css/"
Alias /awstatsicons "/usr/local/www/awstats/icons/"
ScriptAlias /awstats/ "/usr/local/www/awstats/cgi-bin/"
#
# This is to permit URL access to scripts/files in AWStats directory.
#
<Directory "/usr/local/www/awstats/">
    Options None
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

软件主要文件安装在 /usr/local/www/awstats 目录下。可按照上述提示信息,修改apache的配置文件,并修改apache的log文件格式,在httpd.conf文件中加入:
LogFormat "%h %l %u %t \"%r\" %>s b \"{Referer}i\" \"%{User-Agent}i\"" combined
并修改 CustomLog一行为:
CustomLog /var/log/httpd-access.log combined
重起httpd服务,或使用下面的方法:

这里注意FreeBSD ports安装时在/usr/local/www/awstats/ 目录下创建了6个目录:cgi-bin,classes,css,icons,js和tools,需要创建新目录wwwroot,并把除tools以外的其他五个目录移到wwwroot下。
可使用 tools目录下的awstats_configure.pl脚本创建awstats的配置文件,该脚本可自动检查apache的配置文件并进行适当修改,并创建相应的配置文件,默认存储在/etc/awstats目录下。
需要的时候需要对生成的配置文件进行修改,如修改配置文件中指定的log文件的存储路径等。

配置完成后,可执行 cgi-bin/awstats.pl -config= 来分析你的日志文件,如果执行正确无误的话,可在/etc/crontab中加入:
0 1 * * * root /usr/local/www/awstats/cgi-bin/awstats.pl -update -config=
让该命令每天周期性运行,以保持数据更新。

November 27, 2005

让每个Virtual Terminal都有鼠标

FreeBSD 3.x 缺省设置为只有ttyv0有鼠标。
要让其它vt也有鼠标,可以这样做:
修改/etc/rc.conf
allscreens_flags=""
改为:
allscreens_flags="-m on"
下次boot的时候就可以了。
如果不想reboot,则应执行rc.i386或者
手工对每一个vty执行
vidcontrol FreeBSD 4.0 默认的已经是所有Virtual Terminal都有鼠标了,就不用如此设置了。

Console中使用鼠标进行Copy-Paste

许多熟悉Linux的人都习惯了在console下用鼠标左键选中要粘贴的内容, 然后单击右键完成Copy-Paste操作,那么在FreeBSD下如何完成Copy-Paste呢?其实,FreeBSD下的 Paste操作是通过鼠标第三键完成的,那么如果只有两键鼠标怎么办,进行第三键模拟了。。
在/etc/rc.conf中加入:
moused_flags="-3"
重新启动系统后,就可以用左键选中要粘贴的内容,左右键同时按下, OK!!粘贴结束了。

FreeBSD的硬盘分隔策略

在开始安装系统以前, 必须决定要使用多大的硬盘空间来安装 FreeBSD, 而且必须决定 partition 应该如何分割. 因为一旦你安装完系统以后, 再想改变一个 partition 的大小就必须把资料备份出来再重新分区、格式化(format)。

一般情况下, 你必须准备一个 primary partition 给 FreeBSD, *BSD 传统上只能装在 primary 上。FreeBSD 经过修改可以使用逻辑分区(logical partition), 但开机区还是必须是 primary。

在FreeBSD中,分区的概念与DOS/WIN系统略有不同。FreeBSD将一块 硬盘分成最多四个slice(片段),每一个slice上又可以分成最多8个partition(分区)。也 就是说FreeBSD将DOS/Windows里的一个分区看作一个slice。在以后的叙述中,将采用FreeBSD 的概念,即slice和partition的硬盘分区术语。

FreeBSD最多可以将一个slice分成8个partition,分别称之为a,b,c,d,e,f,g,h, 传统上a,b,c,d分区有特殊的意义,a表示root分区,b表示swap分区,c表示整个slice,d表示整个硬盘 从FreeBSD-2.0.5 Release开始,FreeBSD发展了新的slice概念,只有c内定位整个slice,其他都可 自由使用,但一般还是遵循传统观念,即a:root,b:swap,efgh:其他。

下表展示了一个典型的硬盘分区情况。

wd0s1(Dos Pri-C:)

wd0s2(FreeBSD) wd0s3(Dos Extend)
wd0s2a(root) wd0s2b(swap) wd0s2e(/usr) wd0s5(D:) wd0s6(E:)

对非BSD的slice,是没有a,b,c,d等分区概念的,另外对于DOS扩展分区上的逻辑分区是定义为从s5开始编号的slice。即wd0上的dos扩展分区上的第一个逻辑分区为wd0s5,第二个逻辑分区为wd0s6。

硬盘分割策略一:
对 FreeBSD 的新使用者, 建议只把你的 BSD slice 分割成为两个区块,一个是 a, 当做 root partition 放所有文件, 另一个是 b, 用作 swap. (当然 a 要够大根据你要安装的文件的大小确定)

硬盘分割策略二:
如果有比较大的硬盘,则可以将硬盘分成多个partition,如:
partition a:100M for / (含/bin /sbin /etc /var kernel)
partition b:64M for swap
partition e:1000M for /usr
partition f:500M for /home
这样可以在重新安装系统时不损坏/home下存放的自己的文档资料。

上面的分割策略只是一个建议,你还是需要根据自己的需要决定如何进行分区,在你安装过几次系统之后就会找到自己喜欢的分区方法了。

配置SiS 6326显示卡使用X-Windows

公司的机器是联想的奔月2000,用的是SiS 6326的显示卡。配置X-Windows时,使用XF86Setup,显示器上显示的是一个个竖条条。用xf86config进行配置,选择了显示卡芯片为SiS 6326,配置完毕后,配置文件XF86Config写在了/etc下。然后startx,唉,显示器一片黑,只有几个小绿块。还是不对。只好到处查资料。在清华BBS上找到了一点线索。别人也遇到过我这种毛病,有一丝希望。。。。。。 BBS上的文章提示要在/etc/XF86Config中使用如下一些Option:
Option "no_bitblt"
Option "no_imageblt"
Option "sw_cursor"
Option "no_accel"
Option "fast_vram"
Option "pci_burst_on"
我又看了一下用xf86config配置得到的/etc/XF86Config中有关显示卡的内容,如下: Section "Device"
Identifier "SiS 6326"
VendorName "Unknown"
BoardName "Unknown"
#VideoRam 4096
# Option "no_accel" # Use this if acceleration is causing problems
# Option "fifo_moderate"
# Option "fifo_conserv"
# Option "fifo_aggresive"
# Option "fast_vram"
# Option "pci_burst_on"
# Option "xaa_benchmark" # DON'T use with "ext_eng_queue" !!!
# Option "ext_eng_queue" # Turbo-queue. This can cause drawing
# errors, but gives some accel
# Insert Clocks lines here if appropriate
EndSection 对上面的部分进行了一些修改,加入了BBS中建议的Option,最后我的/etc/XF86Config中有关显示卡的内容变成了下面的样子:
Section "Device"
Identifier "SiS 6326"
VendorName "Unknown"
BoardName "Unknown"
#VideoRam 4096
Option "no_accel" # Use this if acceleration is causing problems
# Option "fifo_moderate"
# Option "fifo_conserv"
# Option "fifo_aggresive"
Option "fast_vram"
Option "pci_burst_on"
# Option "xaa_benchmark" # DON'T use with "ext_eng_queue" !!!
# Option "ext_eng_queue" # Turbo-queue. This can cause drawing
# errors, but gives some accel
# Insert Clocks lines here if appropriate
Option "no_bitblt"
Option "no_imageblt"
Option "sw_cursor"
EndSection
修改完/etc/XF86Config后,运行startx,啊。。。呵呵,似乎正常了。但还是有些毛病,就是显示器上可以看出似乎是一条一条的。分辨率特低的样子。有些像看电视太近的样子。至于到底什么样子,也许只有你到我这儿看看才知道。或者你用的也是这个破显卡,试试看就知道了。
如果对分辨率什么的不满意,现在你就可以用XF86Setup进行一下调整了。但是一定要在X-Windows下运行 XF86Setup,在Console下运行时即使选择使用存在的XF86Config配置文件,还是会出现黑白条的屏幕。在调整时注意不要把那几个后加的Option给去掉了哦。。。

Lucent内置Modem驱动程序

一位网友(陈磊 Philor Chen)提供的Lucent内置Modem驱动程序:
INSTALL-rough-translation-en.TXT
ltmdm-0.4-freebsd42r-patch-1.txt
ltmdm-0.4-freebsd42r.tar.gz
ltmdm.ko-0.4-freebsd42r-pl-1.tar.gz

FreeBSD 中文化实践

经过二十天耐心的资料查询、反复测试,终于可以在FreeBSD上书写文档了,这篇文章就是完全在运行FreeBSD的系统上完成的,请大家与我共同分享使用FreeBSD的乐趣。

1.让XFree86支持TrueType字体,安装SimSun字体
即使不打算使用FreeBSD做文本编辑这样的工作,安装SimSun字体也是非常必要的,XFree86自带的中文字体看起来很不习惯。 随 FreeBSD 4.7 Release 发行的 Xfree86 版本是 4.2.1 ,Xfree86 4.x已经内建支持 TrueType 字体。有两个不同的模块能够起动这个功能:freetype 和xtt。这里使用的是 xtt 模块。在 /etc/X11R6/lib/X11/XF86Config文件中加入:
Load “xtt”
安装TrueType字体管理软件ttfm,步骤如下:
#cd /usr/ports/chinese/ttfm
#make
#make install
为TrueType字体创建一个目录(/usr/X11R6/lib/X11/fonts/TrueType),把windows fonts 目录下的 simsun.ttf 文件拷贝到这个目录。 进行以下步骤:
#cd /usr/X11R6/lib/X11/fonts/TrueType
#ttfm.sh –add xttfm simsun.ttf
如果将simsun.ttf文件存放在其他目录下,执行ttfm.sh会自动创建 /usr/X11R6/lib/X11/fonts/TrueType 目录,并在这个目录下创建符号链接simsun.ttf,指向simsun.ttf的实际存储位置。执行完ttfm.sh后,在 /usr/X11R6/lib/X11/fonts/TrueType目录下创建了fonts.scale,fouts.dir和 encodings.dir文件。
在/etc/X11R6/lib/X11/XF86Config文件中加入:
FontPath “/usr/X11R6/lib/X11/fonts/TrueType”
重新起动X-windows,使用 xlsfonts -fn “*gb*” 列出系统中所有中文字体,如果包括有
-misc-simsun-medium-r-normal—0-0-0-0-c-0-gb2312.1980-0 等则表明simsun字体安装完成。然后就可以在Mozilla中欣赏一下漂亮的SimSun字体。


2.设定locale
根据一些资料,FreeBSD系统对中文的locale支持为zh_CN.EUC,而XFree86只支持zh_CN.gbk, www.freebsdchina.org提供了让XFree86支持zh_CN.EUC的方法。根据这个方法下载Xfree86 4.2.0源码,包括X420src-1.tgz,X420src-2.tgz,X420-src3.tgz三个文件和升级到4.2.1的patch包 4.2.0-4.2.1-1-freebsd.patch.gz。使用 tar 解开压缩包。 使用如下命令将源码升级到4.2.1。

gzip -d < 4.2.0-4.2.1-1-freebsd.patch.gz | patch -p0 -E
进入目录xc/nls/XI18N_OBJS,把zh文件复制一个名为zh_CN的文件,然后在这个目录中的Imakefile中加入一行:
XI18NTarget(zh_CN)
回到xc目录,重新编译安装整个X系统。

设定locale为zh_CN.EUC
c shell修改.cshrc 加入:
setenv LC_ALL zh_CN.EUC
setenv LANG zh_CN.EUC
bash修改.profile 加入:
export LC_ALL=zh_CN.EUC
export LANG=zh_CN.EUC
修改 /usr/X11R6/share/gnome/gtkrc.zh_CN
将所有的fontset设置修改为:
fontset = "-misc-SimSun-medium-r-normal--14-*-*-*-*-*-gb2312.1980-0"
修改 /usr/X11R6/share/themes/gtk/Default/gtkrc.zh_CN 如下:
style "gtk-default-zh-cn" {
fontset = "-adobe-helvetica-medium-r-normal--14-*-*-*-*-*-iso8859-1,\
-*-SimSun-medium-r-normal--14-*-*-*-*-*-gb2312.1980-0,*-r-*"
}
class "GtkWidget" style "gtk-default-zh-cn"
重新起动X-win,现在在菜单里应该可以看见中文的菜单了。
3.安装chinput3
从ftp://ftp.freebsdchina.org/pub/china-ports/下载 chinput302final.tgz,tar 解压后,进行编译。
#make
#make data
#make install
#make install-data
这个版本的源代码还有一些错误。主要如下:
src/ZWinControl/text目录下的文件zwincontrol_gb.po中有一个重复定义,删除。
安装时提示/usr/share/locale/zh_TW.Big5/LC_MESSAGES存在,备份后删除再进行安装。
需要将fonts目录下的字体安装到x-win系统中。

创建/usr/X11R6/lib/X11/fonts/chgb目录,将fonts目录下的两个文件拷贝到创建的目录下,并在/usr/X11R6/lib/X11/XF86Config配置文件中加入:
FontPath "/usr/X11R6/lib/X11/fonts/chgb/"
在用户目录下的 .xinitrc目录中加入:
export XMODIFIERS=@im=Chinput
chinput
exec gnome-session
这样在x-win执行其他程序之前起动chinput,就可以在mozilla等可以编辑文件的软件中用Ctrl+Space叫出输入法了。
将修正后的chinput3上载在 ftp://bsd.starhiway.net/pub/FreeBSD/chinput3/ 上。。。。。。

4.安装openoffice.zh_CN

从ports安装openoffice.zh_CN,编译openoffice需要有足够的硬盘空间(约4G),进入目录

/usr/ports/chinese/openoffice.zh_CN/

#cd /usr/ports/chinese/openoffice.zh_CN

#make

由于openoffice倚赖很多其他软件包,ports能够自动下载所需软件包的原文件并进行安装,在他所倚赖的软件包安装完成后,会下载 openoffice的源文件并开始编译。但openoffice所依赖的jdk的源代码由于有一些特殊的许可问题,需要手工到相应网站进行下载。 openoffice使用了mozilla 1.0.1的源文件,在编译时会出错。将/usr/ports/www/mozilla/ 目录下的所有文件拷贝到/usr/ports/chinese/openoffice.zh_CN/work/mozilla下,再回到 /usr/ports/chinese/openoffice.zh_CN下重新make,即可顺利完成编译,编译比较耗时,耐心等待编译完成吧。

完成编译后,make install安装。

然后在 x-win 环境下运行 openoffice, 按照提示一路下一步(Next), 就完成了设置。 注意这时的字体很模糊。

完成了设置后,再次运行openoffice,OK,现在开始修正字体。在菜单工具->选项 里,Openoffice.org->字体替换 选中 使用替换表,在字体里写入 Andale Sans UI,在替换为一栏选择SimSun字体,然后按绿对勾按钮添加。再在前面两个选中框中选中,确定即可。现在菜单的字体完全正常了。

在添加字体替换时,如果你找不到绿对勾按钮。可能是因为你的屏幕分辨率和字体设置问题,导致那个对话框拉的很长。可以通过设置虚拟屏幕的方式,将屏幕扩大,以便能够显示出那个按钮。

在/usr/X11R6/lib/X11/XF86Config文件中,对应的显示模式下加入

Virtual 1600 1200

如:

Section "Screen"

Identifier "Screen0"

Device "Card0"

Monitor "Monitor0"

DefaultColorDepth 16 /* 默认显示颜色深度为16位色 */

SubSection "Display"

Depth 1

EndSubSection

SubSection "Display"

Depth 4

EndSubSection

SubSection "Display"

Depth 8

EndSubSection

SubSection "Display"

Depth 15

EndSubSection

SubSection "Display"

Virtual 1600 1200 /* 设定虚拟屏幕大小为1600 * 1200 */

Depth 16

EndSubSection

SubSection "Display"

Depth 24

EndSubSection

EndSection

附相关配置文件:

/* XF86Config */

Section "ServerLayout"

Identifier "XFree86 Configured"

Screen 0 "Screen0" 0 0

InputDevice "Mouse0" "CorePointer"

InputDevice "Keyboard0" "CoreKeyboard"

EndSection

Section "Files"

RgbPath "/usr/X11R6/lib/X11/rgb"

ModulePath "/usr/X11R6/lib/modules"

FontPath "/usr/X11R6/lib/X11/fonts/TrueType/"

FontPath "/usr/X11R6/lib/X11/fonts/URW/"

FontPath "/usr/X11R6/lib/X11/fonts/TTF/"

FontPath "/usr/X11R6/lib/X11/fonts/misc/"

FontPath "/usr/X11R6/lib/X11/fonts/Speedo/"

FontPath "/usr/X11R6/lib/X11/fonts/Type1/"

FontPath "/usr/X11R6/lib/X11/fonts/75dpi/"

FontPath "/usr/X11R6/lib/X11/fonts/100dpi/"

EndSection


Section "Module"

Load "xtt"

Load "dbe"

Load "dri"

Load "extmod"

Load "glx"

Load "pex5"

Load "record"

Load "xie"

Load "xtrap"

Load "speedo"

Load "type1"

EndSection


Section "InputDevice"

Identifier "Keyboard0"

Driver "keyboard"

Option "XkbRules" "xfree86"

Option "XkbModel" "pc101"

Option "XkbLayout" "us"

EndSection


Section "InputDevice"

Identifier "Mouse0"

Driver "mouse"

Option "Protocol" "MouseSystems"

Option "Device" "/dev/sysmouse"

EndSection


Section "Monitor"

Identifier "Monitor0"

VendorName "Monitor Vendor"

ModelName "Monitor Model"

HorizSync 31.5 - 79.0

VertRefresh 50.0 - 90.0

EndSection


Section "Device"

### Available Driver options are:-

### Values: : integer, : float, : "True"/"False",

### : "String", : " Hz/kHz/MHz"

### [arg]: arg optional

#Option "NoAccel" # [ ]

#Option "HWCursor" # [ ]

#Option "SWCursor" # [ ]

#Option "ShadowFB" # [ ]

#Option "Rotate" # [ ]

#Option "UseBIOS" # [ ]

#Option "LCDClock" #
#Option "ShadowStatus" # [ ]

#Option "VideoRAM" #
Identifier "Card0"

Driver "savage"

VendorName "S3"

BoardName "Savage/IX-MV"

ChipSet "MobileSavage"

BusID "PCI:1:0:0"

EndSection


Section "Screen"

Identifier "Screen0"

Device "Card0"

Monitor "Monitor0"

DefaultColorDepth 16

SubSection "Display"

Depth 1

EndSubSection

SubSection "Display"

Depth 4

EndSubSection

SubSection "Display"

Depth 8

EndSubSection

SubSection "Display"

Depth 15

EndSubSection

SubSection "Display"

# Virtual 1600 1200

Depth 16

EndSubSection

SubSection "Display"

Depth 24

EndSubSection

EndSection


/* /usr/X11R6/lib/X11/fonts/TrueType/fonts.dir */


24

simsun.ttc -misc-SimSun-medium-r-normal--0-0-0-0-c-0-gb2312.1980-0

ai=0.3:simsun.ttc -misc-SimSun-medium-i-normal--0-0-0-0-c-0-gb2312.1980-0

ds=y:simsun.ttc -misc-SimSun-bold-r-normal--0-0-0-0-c-0-gb2312.1980-0

ds=y:ai=0.3:simsun.ttc -misc-SimSun-bold-i-normal--0-0-0-0-c-0-gb2312.1980-0

simsun.ttc -misc-SimSun-medium-r-normal--0-0-0-0-p-0-iso8859-1

ai=0.3:simsun.ttc -misc-SimSun-medium-i-normal--0-0-0-0-p-0-iso8859-1

ds=y:simsun.ttc -misc-SimSun-bold-r-normal--0-0-0-0-p-0-iso8859-1

ds=y:ai=0.3:simsun.ttc -misc-SimSun-bold-i-normal--0-0-0-0-p-0-iso8859-1

simsun.ttc -misc-SimSun-medium-r-normal--0-0-0-0-p-0-koi8-r

ai=0.3:simsun.ttc -misc-SimSun-medium-i-normal--0-0-0-0-p-0-koi8-r

ds=y:simsun.ttc -misc-SimSun-bold-r-normal--0-0-0-0-p-0-koi8-r

ds=y:ai=0.3:simsun.ttc -misc-SimSun-bold-i-normal--0-0-0-0-p-0-koi8-r

simsun.ttc -misc-SimSun-medium-r-normal--0-0-0-0-p-0-fcd8859-15

ai=0.3:simsun.ttc -misc-SimSun-medium-i-normal--0-0-0-0-p-0-fcd8859-15

ds=y:simsun.ttc -misc-SimSun-bold-r-normal--0-0-0-0-p-0-fcd8859-15

ds=y:ai=0.3:simsun.ttc -misc-SimSun-bold-i-normal--0-0-0-0-p-0-fcd8859-15

simsun.ttc -misc-SimSun-medium-r-normal--0-0-0-0-p-0-iso8859-15

ai=0.3:simsun.ttc -misc-SimSun-medium-i-normal--0-0-0-0-p-0-iso8859-15

ds=y:simsun.ttc -misc-SimSun-bold-r-normal--0-0-0-0-p-0-iso8859-15

ds=y:ai=0.3:simsun.ttc -misc-SimSun-bold-i-normal--0-0-0-0-p-0-iso8859-15

simsun.ttc -misc-SimSun-medium-r-normal--0-0-0-0-c-0-iso10646-1

ai=0.3:simsun.ttc -misc-SimSun-medium-i-normal--0-0-0-0-c-0-iso10646-1

ds=y:simsun.ttc -misc-SimSun-bold-r-normal--0-0-0-0-c-0-iso10646-1

ds=y:ai=0.3:simsun.ttc -misc-SimSun-bold-i-normal—0-0-0-0-c-0-iso10646-1


/* /usr/X11R6/share/gnome/gtkrc.zh_CN */


# $(datadir)/gtkrc.zh_CN

#

# This file defines the fontsets for Chinese language (zh) using

# the simplified chinese standard GuoBiao as in mainland China (CN)

#

# 1999, Pablo Saratxaga

style "GnomeScores_CurrentPlayer_style"

{

fg[NORMAL] = {1.0, 0.0, 0.0}

}


style "GnomeScores_Logo_style"

{

fontset = "-misc-SimSun-medium-r-normal--14-*-*-*-*-*-gb2312.1980-0"

fg[NORMAL] = {0.0, 0.0, 1.0}

}


style "GnomeAbout_DrawingArea_style"

{

bg[NORMAL] = {1.0, 1.0, 1.0}

}


style "GnomeAbout_Title_style"

{

fontset = "-misc-SimSun-medium-r-normal--14-*-*-*-*-*-gb2312.1980-0"

}


style "GnomeAbout_Copyright_style"

{

fontset = "-misc-SimSun-medium-r-normal--14-*-*-*-*-*-gb2312.1980-0"

}


style "GnomeAbout_Author_style"

{

fontset = "-misc-SimSun-medium-r-normal--14-*-*-*-*-*-gb2312.1980-0"

}


style "GnomeAbout_Names_style"

{

fontset = "-misc-SimSun-medium-r-normal--14-*-*-*-*-*-gb2312.1980-0"

}


style "GnomeAbout_Comments_style"

{

fontset = "-misc-SimSun-medium-r-normal--14-*-*-*-*-*-gb2312.1980-0"

}


style "GnomeHRef_Label_style"

{

fg[NORMAL] = { 0.0, 0.0, 1.0 }

fg[PRELIGHT] = { 0.0, 0.0, 1.0 }

fg[INSENSITIVE] = { 0.5, 0.5, 1.0 }

fg[ACTIVE] = { 1.0, 0.0, 0.0 }

}


style "GnomeGuru_PageTitle_style"

{

fontset = "-misc-SimSun-medium-r-normal--14-*-*-*-*-*-gb2312.1980-0"

}

widget "*GnomeScores*.CurrentPlayer" style "GnomeScores_CurrentPlayer_style"

widget "*GnomeScores*.Logo" style "GnomeScores_Logo_style"

widget "*GnomeAbout*.DrawingArea" style "GnomeAbout_DrawingArea_style"

widget "*GnomeAbout*.Author" style "GnomeAbout_Author_style"

widget "*GnomeAbout*.Comments" style "GnomeAbout_Comments_style"

widget "*GnomeAbout*.Copyright" style "GnomeAbout_Copyright_style"

widget "*GnomeAbout*.Names" style "GnomeAbout_Names_style"

widget "*GnomeAbout*.Title" style "GnomeAbout_Title_style"

widget "*GnomeHRef.GtkLabel" style "GnomeHRef_Label_style"

widget "*GnomeGuru*.PageTitle" style "GnomeGuru_PageTitle_style"

/* /usr/X11R6/share/themes/Default/gtk/gtkrc.zh_CN */


# $(gtkconfigdir)/gtkrc.zh_CN

#

# This file defines the fontsets for Chinese language (zh) using

# the simplified chinese standard GuoBiao as in mainland China (CN)

#

# 1999, Pablo Saratxaga
#


style "gtk-default-zh-cn" {

fontset = "-adobe-helvetica-medium-r-normal--14-*-*-*-*-*-iso8859-1,\

-*-SimSun-medium-r-normal--14-*-*-*-*-*-gb2312.1980-0,*-r-*"

}

class "GtkWidget" style "gtk-default-zh-cn"

FreeBSD上安装qmail+vpopmail+mysql+smtp认证

本文介绍在FreeBSD下安装qmail+vpopmail+mysql,并实现smtp邮件发送认证的过程。采用MySQL数据库作为用户数据库,进行用户信息的保存和认证,稳定、高效速度快,使用vpopmail支持虚拟域名用户,简捷方便。所有的安装过程采用FreeBSD的ports进行安装 (参看FreeBSD上的软件安装方法),以下步骤在FreeBSD Release 4.4下测试通过。

1. 安装mysql
cd /usr/ports/database/mysql322-server
make
make install
cd /usr/ports/database/mysql322-client
make
make install
2. 安装qmail-1.03
cd /usr/ports/mail/qmail
make
make install
3. 安装 ucspi-tcp-0.88
cd /usr/port/sysutils/ucspi-tcp
make
make install

4. 安装 vpopmail-4.9
FreeBSD Release4.4的 ports 已经收集vpopmail,在安装vpopmail采用mysql数据库进行用户管理的时候,需要修改Makefile文件设置好连接数据库的用户和密码,为了实现发送邮件的smtp认证,这里去掉了vpopmail的roaming功能。

cd /usr/ports/mail/vpopmail/
Makefile中可以设置的参数包括:
#
# Define these to change from the default behaviour
#
# WITH_PASSWD - allow authentication off /etc/passwd
# WITH_MYSQL - allow authentitation via mysql
# WITH_APOP - allow apop authentication
# WITHOUT_ROAMING - disallow roaming users
#
# Set these to the values you'd prefer
#
# HARDQUOTA - size of hard quota, or 'n' for no hard quota
# RELAYCLEAR - time in minutes before clearing relay hole (requires roaming)
# DEFAULT_DOMAIN - default domain for non-vhost lookups
# LOGLEVEL - n - no logging, y - log all,
# e - log errors, p - log passwords in errors
# APOPFILE - location of apop secrets file
# QMAIL_DIR - location of qmail directory
# PREFIX - installation area for vpopmail (see comment below)
# WITH_MYSQL_USER - the username for connecting to the MySQL server (root)
# WITH_MYSQL_PASSWD - the password for connecting to the MySQL server (gipgap)
# WITH_MYSQL_DB - the name of the MySQL database to use (vpopmail)
# VCHKPW_GID - the group ID of the new vchkpw group (89)
# VPOPMAIL_UID - the user ID of the new vpopmail user (89)
#

在这里只需要设置WITH_MYSQL、WITH_MYSQL_USER、WITH_MYSQL_PASSWD、WITH_MYSQL_DB、WITHOUT_ROAMING其他参数可根据自己的具体需要进行设置。如下:
WITH_MYSQL?= y
WITH_MYSQL_USER?= root
WITH_MYSQL_PASSWD?=
WITHOUT_ROAMING?= y

make
make install

5. 设置smtp发送认证
qmail smtp发送认证有两个补丁,一个是http://members.elysium.pl/brush/qmail-smtpd-auth/
另一个是:http://www.nimh.org/dl/qmail-smtpd.c 第一个支持的认证方式包括:LOGIN、PLAIN和CRAM-MD5,第二个补丁只支持LOGIN的认证方式。

此外还需要密码验证程序cmd5checkpw,在http://members.elysium.pl/brush/cmd5checkpw/
可以找到。
安装cmd5checkpw
tar xzvf cmd5checkpw.tar.gz
cd cmd5checkpw-0.22
修改Makefile文件,设置软件装目录
make
make install

使用第一种qmail smtp认证补丁:
tar xzvf qmail-smtpd-auth-0.30.tar.gz
cd qmail-smtpd-auth-0.30
cp base64.c base64.h README.auth /usr/ports/mail/qmail/work/qmail-1.03
patch –d /usr/ports/mail/qmail/work/qmail-1.03 < auth.patch
这样就修改了qmail源文件中的qmail-smtpd.c,
cd /usr/ports/mail/qmail/work/qmail-1.03
make qmail-smtpd
cp /usr/ports/mail/qmail/work/qmail-1.03/qmail-smtpd /var/qmail/bin/qmail-smtpd-auth 将重新编译的qmail-smtpd拷贝到qmail运行目录。

使用第二种qmail smtp认证补丁:
将下载的qmail-smtpd.c文件直接拷贝到qmail的源文件目录下覆盖原始的qmail-smtpd.c文件,重新编译qmail-smtpd。
cp qmail-smtpd.c /usr/ports/mail/qmail/work/qmail-1.03
cd /usr/local/mail/qmail/work/qmail-1.03
make qmail-smtpd
cp ./qmail-smtpd /var/qmail/bin/qmail-smtpd-auth2 将重新编译的qmail-smtpd拷贝到qmail运行目录


6. 设置vpopmail的tcp.smtp.cdb
touch /usr/local/vpopmail/etc/tcp.smtp
echo "127.0.01.:allow,RELAYCLIENT=\"\""
cd /usr/local/vpopmail/etc/
tcprules ./tcp.smtp.cdb ./tcp.smtp.tmp < ./tcp.smtp

7. 设置 qmail 工作
cd /var/qmail/
cp boot/home rc
./rc
编辑脚本smtp-pop.sh内容如下:
/usr/local/bin/tcpserver 0 110 /var/qmail/bin/qmail-popup test.com /usr/local/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d Maildir &
/usr/local/bin/tcpserver -x /home/vpopmail/tcp.smtp.cdb -c 400 -v -u 89 -g 89 0 smtp /var/qmail/bin/qmail-smtpd-auth test.com \
/usr/local/vpopmail/bin/vchkpw /usr/bin/true /usr/bin/cmd5checkpw \
/usr/bin/true 2>&1 | /var/qmail/bin/splogger smtpd 3 &


这里要注意启动smtp服务所使用的用户id和组id都是vpopmail用户的用户id和组id,而不是qmaild用户的用户id和组id,很多文章都写的是采用qmaild的用户id和组id,再设置vchkpw的setuid和setgid,但我怎么测试也通不过。另外要注意的是各个执行程序所在的目录。

采用第二种认证补丁的时候,后面不要加主机名,否则无法认证。

参考文档: http://www.cioworld.net/linux/018.htm

http://www.linuxaid.com.cn/support/showfom.jsp?i=1703

http://www.linuxforum.net/doc/qmail-auth.html

MySQL、PostgreSQL、PHP和Apache的安装配置和使用

FreeBSD下面可以使用的数据库系统很多,比较常用的免费数据库系统就是MySQL和PosgreSQL了,这篇文章里将介绍这两个数据库系统的安装方法。另外,使用Apache辅以PHP和MySQL或PostgreSQL建设一个优秀的数据库驱动的WEB环境是很流行的,这里也一并进行介绍。
如果有了专为FreeBSD设计开发的软件包,那么使用pkg_add进行安装是最简便的方法,那么你最重要的任务可能就是找到这个包在哪里,或者在你的光盘上,或者在网络上,找到了,安装也就容易的多了。这里介绍的是使用软件源码编译安装。
安装MySQL
以mysql-3.22.32版为例,这个版本是推荐使用的稳定版本的最高版本,首先取得源码文件mysql-3.22.32.tar.gz,按以下步骤进行操作:
1.选择适当的目录,解压缩文件。
#tar xzvf mysql-3.22.32.tar.gz 。
2.#cd mysql-3.22.32
3.#./configure --with-low-memory
参考在FreeBSD 4.0上编译MySQL
4.#make
5.#make install
6.#scripts/mysql_install_db
7.#/usr/local/bin/safe_mysqld &
启动mysql后端程序。如果要在每次系统启动时就启动mysql,那么将 /usr/local/bin/safe_mysqld &加到/etc/rc.local中即可。
安装PostgreSQL
以postgresql-6.5.3为例,使用ports进行安装,取得源码 postgresql-6.5.3.tar.gz放在 /usr/ports/distfiles/目录下,然后进行如下操作:
1.#cd /usr/ports/databases/postgresql
2.make
3.make install
4./usr/local/etc/rc.d/pgsql.sh 启动postgreSQL。
编译PostgreSQL需要使用gmake-3.78.1,所以需要首先安装这个包。
如果不从ports进行安装,而直接进行编译的话,将非常繁杂,解开postgresql-6.5.3.tar.gz 这个文件,里面包括有INSTALL这个说明文件,详细讲述了进行编译安装的过程,可以进行参考。使用ports安装的方便在于ports将许多工作自动完成了。
安装PHP和Apache
PHP是服务器端执行的、跨平台的HTML嵌入式脚本语言,有着方便的数据库接口。FreeBSD的 packages中提供了多个不同编译条件下生成的Apache包,但它们可能不能完全适合你的使用。因此自己编译适合自己需要的 Apache WEB服务器时非常必要的,这里介绍编译一个支持用PHP访问MySQL和PostgreSQL数据库的Apache服务器。
首先取得php和apache的源码。这里以php-3.0.12.tar.gz和apache_1.3.12.tar.gz为例。
1. tar xzvf apache_1.3.12.tar.gz
2. tar xzvf php-3.0.12.tar.gz
3. cd apache_1.3.12
4. ./configure -prefix=/www
5. cd ../php-3.0.12
6. ./configure --with-mysql --with-pgsql --with-apache=../apache_1.3.12 --enable-track-vars
必要的时候需要指出mysql和pgsql的安装位置,使用--with-mysql=[DIR]的形式。
7. make
8. make install
9. cd ../apache_1.3.12
10. ./configure --prefix=/www --activate-module=src/modules/php3/libphp3.a
11. make
12. make install
使用这种安装方式将PHP安装成Apache的一个模块,还可以单独将PHP编译成一个解释程序,这里不再做进一步讨论了。安装结束后需要编辑apache的配置文件httpd.conf,使Apache能够正确处理PHP文件,采用上述编译过程的Apache的配置文件在/www/conf/目录下,编辑httpd.conf文件,加入:
AddType application/x-httpd-php3 .php3
使用/www/bin/apachectl restart重新启动apache服务器,这时你的Apache服务器就支持使用PHP了,编辑一个简单的php文件测试是否成功,文件名为test.php3,如下:

注意文件名一定要以php3作为扩展名,要使用其它扩展名,如php,就要在httpd.conf里加入:
AddType application/x-httpd-php3 .php
要想在系统每次启动时就启动Apache,在/etc/rc.local中加入/www/bin/apachectl start即可。

FreeBSD 4.0 Release上编译MySQL通不过的解决方法

在清华BBS上看到有些朋友在 FreeBSD 4.0 Release上编译MySQL时通不过,停留在编译sql/sql_yacc.cc文件处,很长 时间都通不过,有网友说编译了三个多小时都通不过,我真的很佩服他的耐心了。我也 遇到了同样的问题,还有过错误的判断。通过与清华BBS的网友交流,我相信找到了问题 所在。
有网友说用ports安装就没有什么问题,但并没有进一步说明 到底是因为什么。看了一下ports中对mysql-server的说明,原来用ports编译mysql需要 一个包:libtool-1.3.3。
请看FreeBSD对libtool这个包的描述
This is GNU Libtool, a generic library support script. Libtool hides the complexity of using shared libraries behind a consistent, portable interface.
To use libtool, add the new generic library building commands to your Makefile, Makefile.in, or Makefile.am.
这是GNU Libtool,通用的库支持脚本。Libtool 用一致的方便的接口隐藏了使用共享库的复杂性。(蹩脚的翻译)要使用libtool,将新的通用库 编译命令加入Makefile,Makefile.in,或Makefile。am中。
使用ports安装需要先安装libtool-1.3.3这个包,但是不用ports安装, 直接编译也需要么?实验证明是不需要的,在没有安装libtool包的情况下直接编译mysql也可以通过, 只是停留在编译sql_yacc.cc这个文件的时间非常长,一般人都会觉得编译出了问题而中断编译过程。 如果你耐心等待,并且有足够的内存和交换分区,应该是可以编译通过的。
如果在编译sql_yacc.cc的时候出现了下面的错误:
Internal Compiler error: program cc1plus got fatal signal 11或
Out of virtual memory或
virtual memory exhausted
该问题是gcc要求大量的内存编译带有嵌入函数(inline function)的sql_yacc.cc, 而系统内存和交换分区不足,那么可以使用./configure --with-low-memory重新配置,再进行编译。
如果你正在使用gcc,该选项使得将-fno-inline加到编译行,如果你正在使用 其他的编译器,则加入-O0。即使你有特别多的存储器和交换空间,也应该试一试--with-low-memory 选项。
我通过测试表明,使用--with-low-memory显著的降低了编译时间,而用ports安装时, ports中的patch将-O0加入了Makefile,不使用--with-low-memory也同样可以快速的编译完成。
其实,FreeBSD 4.0 Release的ISO安装盘中有mysql的二进制安装包, 不用编译,pkg_add就ok了,何必如此麻烦呢?

FreeBSD上的软件安装方法

安装软件有很多种方式,下面是几种常用的方式:
1. 当然使用编译好的二进制文件安装是最简单的了。取得FreeBSD的Packages,使用pkg_add就可以将软件安装好了,安装之前可以使用pkg_info来读取package的说明。FreeBSD的packages可以从一下地方取得:
ftp://ftp.freebsd.org/pub/FreeBSD/2.2.8-STABLE
ftp://ftp.freebsd.org/pub/FreeBSD/2.2.8-STABLE
ftp://ftp.freebsd.org/pub/FreeBSD/3.1-RELEASE
ftp://ftp.freebsd.org/pub/FreeBSD/3.1-STABLE
2. 利用方便的ports,如果你的计算机有网络连接的话,直接到/usr/ports下找所需安装的软件,或者到下面站点将该软件的port的整个目录抓下来。 ftp://ftp.freebsd.org/pub/FreeBSD/ports-current/。 你也可以到http://www.freebsd.org/ports/index.html看看所有FreeBSD的ports,可从那里得到软件port的详细信息。
例如:要安装播放mp3歌曲的软件mpg123。就要先抓回
ftp://ftp.freebsd.org/pub/freeBSD/ports-current/audio/mpg123(整个目录)。
放到/home/user/mpg123/下,然后make,make install。
如果你在安装系统时安装了整个ports的目录,那么就可以直接到/usr/ports/audio/mpg123/下,make,make install。make程序首先查找当前系统上是否存在需要的安装文件,如果没有的话,将根据Makefile中的设定到网络中下载需要的安装文件,而后进行编译、安装过程。 如果你的计算机没有网络连接,你就需要看一下要安装软件的Makefile文件,里面包含类似下面的内容:
MASTER_SITES= http://www-ti.informatik.uni-tuebingen.de/~hippm/mpg123/ \
ftp://ftp.tu-clausthal.de/pub/unix/audio/mpg123/ \
http://ftp.tu-clausthal.de/pub/unix/audio/mpg123/
这里是指示软件源码所在的位置。你就需要到那里去把软件源码抓下来,放置到/usr/ports/distfiles/目录下再进行编译、安装。
3. 如果你知道有一种软件是支持FreeBSD的,并且有它的源码,那么就拿来编译试试看喽,看能不能编译通过,不能的话,只好到处问问了。

调整BSD上Apache的性能

From http://www.apache.org/docs/misc/perf-bsd44.html
Cernet译

和其他操作系统一样,监听队列(listen queue)是首要限制条件。下面是Aaron Gifford 对BSDI 1.x,2.x和FreeBSD 2.0(包括旧版本)上的建议。
编辑下面两个文件:
/usr/include/sys/socket.h
/usr/src/sys/sys/socket.h
在每个文件中,搜寻:
/*
* Maximum queue length specifiable by listen.
*/
#define SOMAXCONN 5
将5修改为任何可以工作的值即可。经测试调整到32是不会有什么问题的。修改后,重新编译kernel和Apache Server然后重新启动。 FreeBSD 2.1在SOMAXCONN设置为32时工作的非常好。

附录:BSD服务器在重负载下Apache的性能调整
From Chuck Murcko

如果正运行着一个非常繁忙的BSD Apache服务器并且系统的反应很慢,那么如下工作将很有用处:
运行vmstat检查内存使用情况、page/swap利用率等
运行netstat -m检查mbuf使用情况
运行fstat检查文件描述符使用情况
这些应用提供给你该如何调整kernel的信息以及是否应该增加一些内存。下面是一个有很重负载的BSD服务器的kernel配置参数(实际是BSDI服务器,但是与FreeBSD和4.4-Lite相关),系统其他参数没有变化。

maxusers 256

maxusers对其他kernel参数产生影响:

进程的最大数目
每个用户进程的最大数目
系统打开文件数目限制
每个用户打开文件数目限制
mbuf clusters最大数目
Proc/pgrp hash表大小

这些引申参数的定义公式在/usr/src/sys/conf/param.c中。这些计算出来的参数部分会被kernel配置文建里自己定义的值覆盖:

# Network options. NMBCLUSTERS defines the number of mbuf clusters and
# defaults to 256. This machine is a server that handles lots of traffic,
# so we crank that value.
options NMBCLUSTERS=4096 # mbuf clusters at 4096

#
# Misc. options
#
options CHILD_MAX=512 # maximum number of child processes
options OPEN_MAX=512 # maximum fds (breaks RPC svcs)

在许多情况下,NMBCLUSTERS应该设置的比第一眼看上去需要设置的值大的多。这是因为如果浏览器在传输中中断了连接,与特定连接相关的socket fd要在TIME_WAIT状态等几分钟才释放,在等待时mbuf并没有释放。另外,在服务器的timeouts中,一些连接会停留在FIN_WAIT_2状态,这个状态不会超时,浏览器又不会发出最终的FIN信号。

关于mbuf clusters更多的信息(From sys/mubf.h)

/*
* Mbufs are of a single size, MSIZE (machine/machparam.h), which
* includes overhead. An mbuf may add a single "mbuf cluster" of size
* MCLBYTES (also in machine/machparam.h), which has no additional overhead
* and is used instead of the internal data area; this is done when
* at least MINCLSIZE of data must be stored.
*/

CHILD_MAX和OPEN_MAX设置成允许512个子进程(与每用户最大进程数不同)和文件描述符。这个值可以根据你的特殊配置进行修改(如果你的模块或CGI要打开许多文件时,就设置一个较大的OPEN_MAX)。如果在同一机器上除httpd外还有其他许多工作,就需要设置较大的 NPROC。该例中NPROC的值来源于maxusers。

增大listen() queue的大小,需要调整SOMAXCONN的值。SOMAXCONN不是来自于maxusers的。所以需要自己增大这个值。目前,这个值在 sys/socket.h中设置。调整这个参数最好的方式时run-time(运行时更改),这要比在头文件中修改要好。要在运行时更改,编辑 /etc/rc.local,增加:

/usr/sbin/sysctl -w kern.somaxconn=256

这里使用256,可以进行更改以适合你的需要。许多情况下,设置成128就可以了。

警告:

如果配置的kernel使用的资源超过了你可使用的系统RAM的数量,系统可能不能启动。保证任何时候有一个可以启动系统的kernel。使用一些系统工具了解一下你是否需要增加一些内存。

当OPEN_MAX大于256时,RPC服务会失败。这是由于原始的RPC库的一个函数使用1 byte保存文件描述符导致的。BSDI release 2.1解决了部分问题,但最终的解决需要等待重新设计RPC。

最后还有一个在Apache中对子进程配置的硬限制。

对Apache 1.0.5以后的版本,需要改变httpd.h中HARD_SERVER_LIMIT的定义并重新编译才能运行超过150个httpd进程。

在conf/httpd.conf-dist中:

# Limit on total number of servers running, i.e., limit on the number
# of clients who can simultaneously connect --- if this limit is ever
# reached, clients will be LOCKED OUT, so it should NOT BE SET TOO LOW.
# It is intended mainly as a brake to keep a runaway server from taking
# Unix with it as it spirals down...

MaxClients 150

在增大这个值之前,要检查一下你的系统,RAM 扩展,并调整kernel。

M. Teterin" 写到:

对kernel和经常使用的应用程序进行优化非常有用。在AMD-133(486类CPU)上重新编译FreeBSD kernel时加上
-m486 -fexpensive-optimizations -fomit-frame-pointer -O2
可以减少 "unable" errors。

采用FreeBSD IPSec Tunnel方式连接两个局域网络

原文引自:http://www.freebsddiary.org/ipsec-tunnel.php

在实际的工作中,经常遇到需要将处在不同地点的两个局域网络连接起来的要求。采用FreeBSD IPSec Tunnel方式可以方便的将两个局域网络连接起来,且具有很好的安全性。下面将用一个案例来讲述如何采用这种方式连接两个局域网络。

假设有如下的网络结构:

两台FreeBSD机器都分别配置为两个子网的防火墙,并对内核配置增加IPSec支持,相关的内核配置参数如下:

# IP security (crypto; define w/ IPSEC)

options IPSEC

options IPSEC_ESP

options IPSEC_DEBUG

# Generic tunnel interface

pseudo-device gif 4

# Berkeley packet filter used by dhcp server.

pseudo-device bpf 4

# Firewall flags

options IPFIREWALL

options IPDIVERT

options IPFILTER

options IPFILTER_LOG

重新编译内核。

为启动防火墙功能,/etc/rc.conf中加入如下的配置选项:

gateway_enable="YES"

defaultrouter="172.x.1.110" # 由接入服务商提供

firewall_enable="YES"

firewall_type="open"

natd_enable="YES"

natd_interface="rl0" # 根据机器网卡配置确定

named_enable="YES"

要进行两台FreeBSD机器之间的自动的IPSec key交换,必须安装port /usr/ports/.security/racoon,配置文件存储在 /usr/local/etc/racoon/racoon.conf,key文件存储在/usr/local/etc/racoon/psk.txt。要在系统启动时启动/usr/local/sbin/racoon。

不需要修改配置文件,只需修改key文件即可,如下:

# /usr/local/etc/racoon/psk.txt

# IPv4/v6 addresses

#

192.168.1.1 foobar

192.168.2.1 foobar

key文件必须设置存储权限为0600,否则racoon无法运行;

#chown root.wheel /usr/local/etc/racoon/psk.txt

#chmod 0600 /usr/local/etc/raccoon/psk.txt

为了在启动时建立IPSec tunnel连接并添加两个内网的路由,可使用下面的shell脚本,存储在/usr/local/etc/rc.d/tunnel.sh

#!/bin/sh

#

BSD1_IP="192.168.1.1"

BSD1_PUB_IP="172.16.1.254"

BSD1_NET="192.168.1.0/24"

BSD2_IP="192.168.2.1"

BSD2_PUB_IP="172.17.1.254"

BSD2_NET="192.168.2.0/24"

GIF0="gif0 inet"

GIFCONFIG="/usr/sbin/gifconfig"

IFCONFIG="/sbin/ifconfig"

HOSTNAME=`/bin/hostname`

NETMASK="255.255.255.0"

echo "\nStarting ipsec tunnel... "

case $HOSTNAME in

bsd1.test.com)

$GIFCONFIG $GIF0 $BSD1_PUB_IP $BSD2_PUB_IP

$IFCONFIG $GIF0 $BSD1_IP $BSD2_IP netmask $NETMASK

/usr/sbin/setkey -FP

/usr/sbin/setkey -F

/usr/sbin/setkey -c << EOF

spdadd $BSD1_NET $BSD2_NET any -P out ipsec

esp/tunnel/${BSD1_PUB_IP}-${BSD2_PUB_IP}/require;

spdadd $BSD2_NET $BSD1_NET any -P in ipsec

esp/tunnel/${BSD2_PUB_IP}-${BSD1_PUB_IP}/require;

EOF

/sbin/route add $BSD2_NET $BSD1_IP

;;

bsd2.test.com)

$GIFCONFIG $GIF0 $BSD2_PUB_IP $BSD1_PUB_IP

$IFCONFIG $GIF0 $BSD2_IP $BSD1_IP netmask $NETMASK

/usr/sbin/setkey -FP

/usr/sbin/setkey -F

/usr/sbin/setkey -c << EOF

spdadd $BSD2_NET $BSD1_NET any -P out ipsec

esp/tunnel/${BSD2_PUB_IP}-${BSD1_PUB_IP}/require;

spdadd $BSD1_NET $BSD2_NET any -P in ipsec

esp/tunnel/${BSD1_PUB_IP}-${BSD2_PUB_IP}/require;

EOF

/sbin/route add $BSD1_NET $BSD2_IP

;;

esac

基本的配置完成。这样在系统启动时,自动交换key,并建立tunnel。
 

FreeBSD完全安装手册——开始安装

开始安装
前面已经做好了准备,下面开始安装神秘的FreeBSD系统。以CD-ROM安装为例,在涉及到使用其它安装媒体时将进行补充说明。
启动安装内核程序
将FreeBSD的安装CD-ROM放入光盘驱动器,重新启动计算机,确认BIOS设定从光盘启动,一切正常的话,将装入FreeBSD的安装内核程序(如果你的系统不支持从CD-ROM启动,可以使用软盘启动方式)。启动起始阶段可以看到类似下面的信息:
/kernel text=0x14c395 data=0x180d8+0x22ec4 syms=[0x4+0x1e3c0+0x4+0x210f8]
Uncompressing kernel...done
Booting the kernel
Copyright © 1982, 1986, 1989, 1991, 1993
The Regents of the University of California.
All rights reserved.
如果使用软盘启动安装的话,先插入boot软盘,然后系统会提示插入mfsroot软盘,提示信息如下:
Please insert MFS root floppy and press enter:
按照要求插入软盘,按Enter键系统即继续引导。系统进行一系列的检测后出现UserConfig菜单:
Skip kernel configuration and continue with installation
Start kernel configuration in full-screen visual mode
Start kernel configuration in CLI mode
在这里可以进入内核配置模式,对内核进行调整以配合系统硬件。可以不进行任何调整完全采用默认内核的配置方式,或者采用全屏可视化方式进行调整或 CLI模式进行调整。在这里进行内核调整要求用户对系统所拥有的硬件有较全面的了解,如系统的硬盘接口模式,网卡等接口卡的类型和Port口、IRQ、 DMA的设置等。如果要采用网络安装,必须确定网卡能够被系统内核识别。

完成了内核配置之后,系统开始进行硬件检测,屏幕将显示内核检测系统硬件的情况,最终出现sysinstall主安装菜单。
Sysinstall主菜单包括以下部分:Usage、Novice、Express、Custom、Configure、Doc、 Keymap、Options、Fixit、Upgrade、Load Cofnig和Index。Sysinstall提供了三个安装方式:Novice、Express和Custom,从字面意思看,Novice方式提供给不熟悉FreeBSD的新用户使用,Express方式进行快速安装,而Custom方式提供用户多种定制方式进行安装。这三种方式实际上没有太大的区别,其主要的操作包括以下几部分内容:

1. 建立安装FreeBSD的硬盘分区(确切说是FreeBSD里的slice)。
2. 在FreeBSD的slice上建立FreeBSD的文件系统和交换分区。
3. 选择需要的安装内容。
4. 选择安装媒介。
5. 实际进行安装工作。

Novice方式和Express方式顺序的进行以上工作,而Custom方式在执行完一项工作后将返回到安装菜单。下面顺序的介绍以上的安装过程。
为FreeBSD准备硬盘空间
选择Novice方式和Express方式都会首先进入FDISK Partition Editor,选择Custom方式首先进行的任务也是一样。FDISK Partition Editor的菜单如下所示:
Disk name: wd0 FDISK Partition Editor
BIOS Geometry: 989 cyls/12 heads/35 sectors

Offset Size End Name PType Desc Subtype Flags
0 35 34 - 6 unused 0
35 414925 414959 wd0s1 2 fat 6 =
414690 420 415379 - 2 unused 0

The following commands are supported (in upper or lower case):
A = Use Entire Disk B = Bad Block Scan C = Create Partition
D = Delete Partition G = Set BIOS Geometry S = Set Bootable
U = Undo All Changes Q = Finish W = Write Changes
 
The currently selected partition is displayed in reverse video
Use F1 or ? to get more help, arrow keys to move.
 
Don't use the W (Write Changes) command here. It's intended for use only
once the system is up and running.
下面看以下各部分所表示的含义。Offset表示分区的起始扇区,Size表示分区所占用的扇区数,End表示分区的最后一个扇区,Name表示的是FreeBSD能够识别的分区名。Ptype表示分区的类型,其中6表示是主引导纪录(Master Boot Record),占据硬盘的第一个磁道,2表示普通的硬盘分区。Desc是对分区类型的文字描述,这里fat表示该分区是微软的DOS/Windows分区。Flag部分可以是以下一些字符:=表示分区正确分配,>表示分区结尾在第1024个柱面以后,A表示该分区是活动分区,B表示该分区有错误, C表示该分区是FreeBSD兼容分区,R表示该分区含有一个根文件系统。
菜单清楚的显示了各个命令的功能。A:将整个硬盘作为FreeBSD分区;B:进行坏块扫描;C:创建新的FreeBSD分区;D:删除分区; G:设定硬盘规格;S:设定可启动;U:恢复原始设置;Q:完成设置;W:写入改变。不要在安装时使用W命令,该命令只能在系统安装结束开始运行时使用。在上边表中可以看出该硬盘上的FAT分区占用了几乎整个硬盘,当然不足以安装FreeBSD系统。可以使用FIPS或Partition Magic等硬盘分区工具在不破坏硬盘数据的情况下对硬盘重新进行分区,如果硬盘上的数据不再需要,那么可以删除硬盘上的FAT分区,再重新分配给 FreeBSD使用。
将光标移到需要删除的硬盘分区上,按D删除该分区。硬盘分区表显示为:
0 415380 415379 - 6 unused 0
按C建立FreeBSD分区,将弹出对话框要求输入要建立的分区大小,建议值是硬盘空闲分区的大小,可以根据需要设定这个值,如果在输入值后边加上M则硬盘空间以兆字节(MegaByte)表示,否则就是表示的占用扇区数量。如果使用默认值进行分区,则分区表现是为:
0 35 34 - 6 unused 0
35 415345 415379 wd0s1 3 freebsd 165 C
完成分区设置,按Q退出FDISK Partition Editor。接着会弹出对话框选择采用的启动选择方式(也就是设置主引导记录MBR的方式),有三种选择,如下所示:

1. BootMgr:在MBR中装入FreeBSD Booteasy以便进行多重引导。
2. Standard:使用标准MBR,此时只能从活动分区引导。
3. None:不改变MBR,如果使用了其他启动管理程序,就应该选择这种方式。

至此,就完成了为FreeBSD准备硬盘空间的工作。
指定硬磁盘标签(Specifying disk labels)
下面看如何使用上面为FreeBSD准备好的硬盘空间。一般情况下,需要建立一个根目录 / ,一个 /usr目录。当选则Select Disk label时,出现下面的菜单:
FreeBSD Disklabel Editor
Disk: wd0 Partition name: wd0s1 Free: 415345 blocks (202MB)
 
Part Mount Size Newfs Part Mount Size Newfs
---- ----- ---- ----- ---- ----- ---- -----
 
The following commands are valid here (upper or lower case):
C = Create D = Delete M = Mount W = Write
N = Newfs Opts T = Newfs Toggle U = Undo Q = Finish
A = Auto Defaults for all!
 
The default target will be displayed in reverse video.
Use F1 or ? to get more help, arrow keys to move.
可以使用命令A自动划分磁盘,也可使用C命令手动划分磁盘。使用C命令,将提示你需要使用的硬盘空间的大小,输入合适的数值,在数值后加上M时表示的是以兆字节表示的值,不加M则表示占用的扇区数值。而后,将提示是建立一个文件系统还是建立一个交换分区。选择建立文件系统后,将提示把该文件系统装载到什么地方,如 / 或 /usr等。顺序的建立文件系统: / ,/usr 和交换分区后,可以看到下面的信息:
Part Mount Size Newfs Part Mount Size Newfs
---- ----- ---- ----- ---- ----- ---- -----
wd0s1a / 20MB UFS Y
wd0s1b 32MB SWAP
wd0s1e /usr 150MB UFS Y
在使用自动划分磁盘时,会建立一个/var 目录,该目录用于存储一些经常变化的信息,如mail和log文件等。在手动划分磁盘时,可以不单独为这个目录建立一个磁盘分区,而在 /usr 下虚拟一个目录。划分硬盘时,最好不要将物理硬盘分成多个部分,因为这样会造成一个分区已经用满,而另一个分区还空空如野的情况,而分配好的硬盘又不能随意重新划分。
如果在创建完文件系统后取消了安装过程,在重新安装时进行到指定磁盘标签这一步时看到的信息就会有所不同,如下所示:
Part Mount Size Newfs Part Mount Size Newfs
---- ----- ---- ----- ---- ----- ---- -----
wd0s1a 20MB *
wd0s1b 32MB SWAP
wd0s1e 150MB *
可见系统能够识别出划分的硬盘分区,但不知道如何装在这些分区。这是可以使用M命令设定应该将这些磁盘分区装载到哪些目录下。M命令完成后,会显示 UFS N 信息,除非确信该分区有效,确实需要保留该分区上的数据,否则按T指定需要创建该文件系统,信息将改变为:UFS Y。如果保持UFS N则后面进行确认以后,系统将使用fsck进行完整性检查,否则,系统将对该硬盘分区重新建立文件系统,这类似于DOS/Windows系统的格式化操作。
以上为FreeBSD的安装分配了硬盘分区,读者会提出这样的问题,为什么这样分区,为什么为根目录 / 分配了20Mbype硬盘空间,为交换分区分配了32Mbyte硬盘空间而不是更大一点或更小一点?给FreeBSD准备硬盘空间又没有什么原则?
单独为根目录 / 分配一个独立的硬盘分区是历史的原因造成的。早期的系统经常瘫痪,为重新安装系统而不至于损坏存储在硬盘上的数据,为根目录分配一个独立硬盘分区是一个非常好的主意。但现在的硬件系统和软件系统都非常稳定,系统瘫痪的事件很少发生,为根目录分配独立硬盘分区就显得不太重要了,但人们仍然习惯于这样做。一般情况下,为根目录 / 所在的分区分配50Mbyte就可以了。
如何确定交换分区(SWAP)的大小呢?一般情况将交换分区的大小设定为实际系统内存的2倍,如果你的系统内存很少,那么应该将交换分区设定的大一些,如64Mbyte、128Mbyte等。如果需要使用X-Windows,需要的交换分区会更多一些。由于在一个硬盘slice上只能建立一个交换分区,在安装系统是最好选择好它的大小。如果系统有多个物理硬盘,那么在多个物理硬盘上都建立一个FreeBSD的交换分区可以提高系统的性能。
由于许多应用程序都要安装在 /usr 目录下, /usr 所在的硬盘分区应尽可能的大些。这样才能避免在安装一些应用程序时硬盘空间不够的窘境。
如果你只能为FreeBSD分配很小的硬盘,就必须仔细划分硬盘,可能你需要多试验几次才能确定怎样分配才是最佳选择。如果你确实不知道如何分配,可以只分配一个根目录 / 所在的分区和一个交换分区,在运行一段时间以后,就可以了解如何选择合适的分区大小了。
好了,下面开始安装的下一个步骤:选择安装的内容。
选择安装内容
FreeBSD的安装程序sysinstall为用户准备了几种安装内容的组合,包括有Developer、X-Developer、Kern- Developer、User、X-User、Minimal和Custom几种。它们具体的安装内容如下表:

Developer 包括源文件、二进制文件和文档;不包括游戏
X-Developer Developer安装内容加上X-Windows系统
Kern-Developer 二进制文件、文档和内核的源文件
User 二进制文件和文档
X-User User安装内容加上X-Windows系统
Minimal 最小安装
Custom 定制安装

按照需要安装的部分进行适当的选择。如果硬盘很小,那么Minimal(最小安装)是很好的选择,而X-Developer则适合拥有较大硬盘空间,同时希望深入了解FreeBSD的用户使用了。如果你是一个FreeBSD老手,可能你喜欢Custom模式,那么安装内容就完全由自己掌握了。
以选择X-Developer为例,选择了安装X-Developer后系统会提示是否安装DES加密系统,并告诉用户根据美国的出口限制,除美国和加拿大以外的用户不应该使用DES,如果不是用DES加密系统的话,FreeBSD就是用MD5作为系统加密的手段。如果选择了安装DES,系统弹出对话框选择DES的安装内容,可以全部安装或者不安装源代码部分。
然后系统提示是否安装Ports,这里可以选择不安装然后在系统安装结束后在适当的时候再安装。也可以现在就选择安装。
随后系统弹出对话框,选择安装X-Windows部分的内容。包括有Basic、Server、Fonts等选项,可以不作更改,或根据提示作一些调整。当然如果选择Developer、Kern-Developer和User等安装选项时将不会出现选择X-Windows安装部分的对话框。至此,就完成了安装内容的选择。下一步是选择安装媒介。
选择安装媒介
前面曾经介绍,FreeBSD有多种安装媒介,包括有CD-ROM、FTP、NFS、软盘、本地硬盘分区等。用户可以根据自己的实际情况选择一种安装媒介。
使用CD-ROM安装,将FreeBSD的发布光盘放入光盘驱动器中,然后选择CD-ROM即可。
使用FTP安装,系统会弹出对话框选择FTP服务器,系统提供了一些internet上存有FreeBSD发布的FTP服务器,也可以自己输入 FTP服务器的地址,自己输入FTP服务器地址时,需要确信该FTP服务器上存在要安装的FreeBSD安装版本。例如,FTP服务器上存有 FreeBSD 3.2-Release在如下路径:ftp://ftp.freebsd.org/pub/FreeBSD/3.2-RELEASE/ 那么在输入FTP服务器地址时输入 ftp://ftp.freebsd.org/pub/FreeBSD/ 即可,安装程序就可以从该FTP服务器上安装FreeBSD 3.2-Release。注意,用户选择的安装版本和FTP服务器的目录结构一定要相互对应才能正确安装。选择完FTP服务器,系统将配置网络部分,此时要求系统内核检测到了网卡,而后对网卡进行配置,包括有主机名(host)、域(Domain)、网关(gateway)、域名服务器(Name Server)、IP地址(IP Address)、子网掩码(Netmask)等。用户按照自己的网络情况适当添入。
使用NFS安装,将提示输入NFS服务器的地址,格式为:nfs:/some/freebsd/dir,和FTP安装一样,安装版本和NFS服务器上的安装版本必须相互对应才可以正确安装,并且要求有正确的路径结构。
使用本地DOS/Windows FAT分区进行安装,需要选择FreeBSD的安装软件放置在那个FAT硬盘分区,目前只能从主分区上的FAT分区进行安装,从扩展分区上的FAT分区则不能正确安装。和FTP安装一样需要保证正确的路径结构。如要安装FreeBSD 3.2-Release,/dev/wd0s1是本地硬盘的FAT分区,则在该分区上存储FreeBSD安装版本的目录应该是3.2-RELEASE。
至此,我们完成了安装FreeBSD所作的所有准备工作,还没有进行实际的安装工作,如果此时改变主意,取消安装工作,那么硬盘的数据没有做任何改变。
确认安装
如果确认进行的选择是正确的,那么就可以进行最后一部工作了--确认安装。这是最后一次选择机会,所以还是慎重一些,确认硬盘上的数据进行了备份等。确认安装以后,安装程序执行以下操作:

1. 创建分区;
2. 在文件系统分区上创建文件系统或进行文件系统检查(根据disklabel时的选择确定)
3. 装载文件系统和交换分区。
4. 将选择的安装内容拷贝到合适的路径结构。

在装载文件系统后,系统打开另外两个虚拟终端/dev/ttyv1和/dev/ttyv3,可以分别使用ALT-F2和ALT-F4进行切换。ttyv1显示的安装所进行的具体操作,而ttyv3则提供一个交互式的shell给用户使用。
在系统拷贝文件结束后,将显示如下信息:
Remaking all devices Please wait!
Making slice entries.
Fixing permissions.
至此,就完成了所有的安装工作。

FreeBSD完全安装手册——硬盘分区

硬盘分区
那么应该将FreeBSD装在硬盘的什么位置呢?下面看看硬盘。熟悉DOS/Windows系统的用户都知道,DOS/Windows将硬盘分成主分区和扩展分区,在扩展分区上再建立逻辑分区,并给主分区和逻辑分区分配相应的盘符:C、D等。那么FreeBSD是如何处理硬盘分区的呢?
在FreeBSD中,分区的概念略有不同。FreeBSD将硬盘分成最多四个slice(片段),每一个slice上又可以分成最多8个 partition(分区)。也就是说FreeBSD将DOS/Windows里的一个分区看作一个slice。在以后的叙述中,将采用FreeBSD的概念,即slice和partition的硬盘分区术语。
FreeBSD(包括其他Unix类操作系统)可以将硬磁盘当作大量连续的数据块进行处理,这样并没有文件系统的概念,很像访问磁带机。这种访问方式称作raw访问,这样的设备称作raw device或character device。但是用户希望使用文件访问的方式,这样不用关心文件究竟存储在硬盘的什么地方,只要能够打开文件进行数据操作就可以了。采用这种访问方式需要许多其他的处理工作,将这时使用的磁盘称作block device。可以通过ls -l命令,从列出的权限属性的头一个字符区分character device和block device。"c"表示character device,而"b"表示block device。例如:

$ ls -l /dev/rwd0s1a /dev/wd0s1a
crw-r----- 1 root operator 3, 0x00010002 Oct 16 23:38 /dev/rwd0
brw-r----- 1 root operator 0, 0x00010002 Oct 16 23:38 /dev/wd0
下面介绍FreeBSD对硬盘分区的命名规则。
与其他设备一样,硬盘分区设备文件存储于/dev目录下。如果是raw device设备名的起始字符是:"r",否则不会使用这个起始字符。接下来是设备名,IDE硬盘是"wd",SCSI硬盘是"da",软盘是"fd"。接下来是一个数字,表示是第几个硬盘,如第一个IDE口上的主用硬盘(Primary IDE Master)的名字就是:/dev/rwd0和/dev/wd0,从用硬盘(Primary IDE Slave)的名字就是:/dev/rwd1和/dev/wd1,以此类推。接下来是分区信息,为表示slice在前面的名字基础上加字符"s"和数字 "1"到"4"来表示一个硬盘上的四个slice。BSD通过在slice名后面附加字符"a"到"h"来表示分区。这样可以得到如下一些设备名(以 Primary IDE上的Master硬盘为例):
/dev/rwd0, /dev/rwd0s1,/dev/rwd0s2,/dev/rwd0s3,/dev/rwd0s3,
/dev/rwd0s1a,/dev/rwd0s1b,/dev/rwd0s1c,/dev/rwd0s1d,/dev/rwd0s1e,
/dev/rwd0s1f,/dev/rwd0s1g,/dev/rwd0s1h,/dev/rwd0a,/dev/rwd0b,
/dev/rwd0c,/dev/rwd0d,/dev/rwd0e,/dev/rwd0f,
/dev/rwd0g,/dev/rwd0h和/dev/wd0, /dev/wd0s1,/dev/wd0s2,/dev/wd0s3,
/dev/wd0s4,/dev/wd0s1a,/dev/wd0s1b,/dev/wd0s1c,/dev/wd0s1d,
/dev/wd0s1e,/dev/wd0s1f,/dev/wd0s1g,/dev/wd0s1h,/dev/wd0a,
/dev/wd0b,/dev/wd0c,/dev/wd0d,/dev/wd0e,/dev/wd0f,/dev/wd0g,/dev/wd0h等。
举例来讲,/dev/rwd0s1a和/dev/wd0s1a分别表示第一个IDE接口上的Master模式硬盘上的第一个slice上的第一个分区的character device和block device,这个分区(即"a"分区通常是根目录 / ),而/dev/rwd0s1b和/dev/wd0s1b表示第一个slice上的第二个分区,这个分区通常用作swap(交换分区)。 /dev/rwd0s1c和/dev/wd0s1c则有特殊的含义,表示第一个slice这整个slice。下面是我自己的硬盘参数,用fdisk命令的输出结果:
******* Working on device /dev/rwd0 *******
parameters extracted from in-core disklabel are:
cylinders=525 heads=255 sectors/track=63 (16065 blks/cyl)

parameters to be used for BIOS calculations are:
cylinders=525 heads=255 sectors/track=63 (16065 blks/cyl)

Media sector size is 512
Warning: BIOS sector numbering starts with sector 1
Information from DOS bootblock is:
The data for partition 1 is:
sysid 6,(Primary 'big' DOS (> 32MB))
start 63, size 3084417 (1506 Meg), flag 80 (active)
beg: cyl 0/ sector 1/ head 1;
end: cyl 191/ sector 63/ head 254
The data for partition 2 is:
sysid 5,(Extended DOS)
start 3084480, size 3084480 (1506 Meg), flag 0
beg: cyl 192/ sector 1/ head 0;
end: cyl 383/ sector 63/ head 254
The data for partition 3 is:
sysid 165,(FreeBSD/NetBSD/386BSD)
start 6168960, size 2265165 (1106 Meg), flag 0
beg: cyl 384/ sector 1/ head 0;
end: cyl 524/ sector 63/ head 254
The data for partition 4 is:

用disklabel /dev/wd0s3命令可以看出FreeBSD占用的slice 3的分区情况,如下:
# /dev/wd0s3:
type: ESDI
disk: wd0s3
label:
flags:
bytes/sector: 512
sectors/track: 63
tracks/cylinder: 255
sectors/cylinder: 16065
cylinders: 141
sectors/unit: 2265165
rpm: 3600
interleave: 1
trackskew: 0
cylinderskew: 0
headswitch: 0 # milliseconds
track-to-track seek: 0 # milliseconds
drivedata: 0

8 partitions:
# size offset fstype [fsize bsize bps/cpg]
a: 307200 0 4.2BSD 1024 8192 16 # (Cyl. 0 - 19*)
b: 131072 307200 swap # (Cyl. 19*- 27*)
c: 2265165 0 unused 0 0 # (Cyl. 0 - 140)
e: 307200 438272 4.2BSD 1024 8192 16 # (Cyl. 27*- 46*)
f: 1519693 745472 4.2BSD 1024 8192 16 # (Cyl. 46*- 140*)
由以上可以清楚的看出硬盘的分区情况。对硬盘分区的详细了解有助于在安装系统时正确的选择安装位置,以免错误的删除其他操作系统占用的分区,造成不必要的损失。

FreeBSD完全安装手册——准备安装软盘

准备启动安装软盘
如果不能从CD-ROM启动,那么就需要准备两张3.5英寸的软盘:Kernel Disk和MFS Root Disk来启动安装程序。这两张软盘的映像文件存储在FreeBSD CD-ROM Disk-1上,分别是floppise/kern.flp和floppies/mfsroot.flp。这两个文件同样可以在发布FreeBSD的 ftp服务器上的相应目录找到。
下面要做的就是将这两个映像文件写到软磁盘上去。要保证软盘百分之百可读,没有坏道。在DOS/Windows环境中,可以使用FreeBSD CD-ROM Disk-1上的tools/rawrite.exe或tools/fdimage.exe来完成这个工作。例如光盘驱动器的盘符是E,进入DOS模式:
C:>E:
E:> TOOLS\RAWRITE FLOPPIES\KERN.FLP A:
换另一张软盘:
E:>TOOLS\RAWRITE FLOPPIES\MFSROOT.FLP A:
这样就创建了这两张软盘。

在Unix类的计算机上,可以用下面的方法创建这两张盘:
# dd if=/cdrom/floppies/kern.flp of=/dev/rfd0c bs=36b
换另外一张软盘,
# dd if=/cdrom/floppies/mfsroot.flp of=/dev/rfd0c bs=36b
这里假设在CD-ROM驱动器里放置了FreeBSD的光盘,并且将它装载在/cdrom目录上,并且假设软盘驱动器的设备名是/dev/rfd0c,这是FreeBSD里软盘驱动器的设备名,在Linux里,可能是/dev/fd0或/dev/fd1。

FreeBSD完全安装手册——系统安装媒介

FreeBSD系统的安装媒介
FreeBSD可以从以下几种媒介进行安装:

* CD-ROM安装,如果你拥有一套FreeBSD的光盘,这是最方便的方式。如果系统BIOS支持光盘启动,甚至完全不需要启动软盘。
* 网络安装,可以使用ftp方式或nfs方式。由于目前国内internet速度不尽如人意,直接通过internet安装令人不可接受,在局域网上可以使用这种方式。
* 从本地硬盘分区安装,FreeBSD分区和Microsoft FAT分区都可以。
* 从磁带机的tar格式文件安装。
* 从软磁盘安装。

后两种方式对国内用户来讲很少见,这里不再进行介绍。

CD-ROM安装
Walnut Creek发布的FreeBSD安装光盘有四张。

1. Disk -1包括有安装系统所需的所有内容。可以将该光盘中的内容分为系统软件包和应用软件包。系统软件包为gzipped tar文件格式,为方便软盘安装使用,将其分成了240,640 bytes大小的组。系统软件包存储在bin, catpages, compat1x, compat20, compat21, des, dict, doc, games, info, manpages和proflibs目录下。另外X-Windows系统软件存放在xf86333目录下。应用软件包在packages/All目录下,为方便查找使用,在packages下对不同功能的应用软件进行了分类,建立了众多目录,存储文件的链接信息。
2. Disk-2包括有Live File System,CVS Repository和一些WEB网叶。Live File System基本上可以看作是一个安装好的FreeBSD系统,在系统出现问题时,可以使用Live File System进行一些修复工作。CVS Repository(CVS仓库)是FreeBSD的源码树,包括所有更新信息。在www目录下有一些关于FreeBSD系统的网叶。
3. Disk -3和Disk-4:Ports Collection。Ports机制是FreeBSD的一个重要组成部分,其中包括与2000余种应用软件。Ports Collection使得向FreeBSD上安装软件自动化,只要执行一个make就可以完成软件的安装工作。Disk-3中的目录packages是 Disk-1中packages目录的继续,存储的是预编译的软件包。Disk-3和Disk-4中的distfiles目录存储的是大部分软件包的源代码。关于FreeBSD的Ports机制将在后面的章节详细介绍。

如果你的系统BIOS支持光盘启动,那么你就可以将BIOS设置成光盘启动,将FreeBSD系统光盘(第一张)放入光驱,重新启动系统。系统将启动到安装FreeBSD的部分。

网络安装
通过网络安装必须有一个快速的网络连接。基于当前的网络速度,通过internet进行安装几乎是不可能的。但网络安装完全可以在一个快速的局域网或者类似校园网这样的环境实现,而且相当方便。通过网络安装有两种方式:ftp方式和nfs方式。如果在你所拥有的网络环境中已经有FreeBSD安装系统的ftp或nfs服务器,那么你所需要就只是准备一张FreeBSD启动安装软盘。那么如果没有这样的服务器,就需要自己建立这样一个服务器。
ftp服务器可以建立在Windows 95/98、Windows NT或任何一种Unix类服务器(包括FreeBSD、Linux等)上。在ftp服务器的根目录上建立目录FreeBSD/3.2-RELEASE/,将需要的安装文件拷贝到这个目录下,设定该目录可以匿名访问。其中3.2-RELEASE是根据你的FreeBSD版本来确定的,如果是其他发行版本按照需要进行修改即可。在这里要注意的是,FreeBSD的安装光盘在Windows上所读取的目录和文件名与在FreeBSD等Unix类服务器上读得的目录略有不同,一是文件名大小写的区别,二是长文件名和8.3文件名的区别。这是由光盘格式决定的,因此建议在FreeBSD等Unix类服务器上读取光盘文件。如果你是从internet上下载安装文件就没有这个问题。
nfs服务器将在FreeBSD的网络应用部分进行介绍。

从本地硬盘分区安装
FreeBSD也可以从本地硬盘分区安装。有两种选择,从微软FAT/FAT32分区或本地的FreeBSD分区。
从微软FAT/FAT32分区安装,现在只能从主分区进行安装,不支持从扩展分区安装。在FAT/FAT32主分区上创建目录/FreeBSD,将需要的安装文件拷贝到该目录下,保持原来的目录结构。
如果在某个FreeBSD分区上有FreeBSD安装文件,就可以从这个FreeBSD分区进行安装,但必须将FreeBSD安装在这个分区上,而不能安装在其他分区上,这是目前的一个限制。

FreeBSD完全安装手册——硬件需求

在安装FreeBSD系统之前,需要了解一下你所拥有的硬件系统。FreeBSD对硬件系统的要求相当低。目前FreeBSD系统可以安装在各种 PC机系统和Alpha系统上。这里只介绍FreeBSD系统对PC机的最小硬件需求。

* CPU要求80386以上(现在都不是什么问题了吧?)
* 内存最小8MB
* 任何一种显示卡
* 80M空闲硬盘空间

当然,这样的配置只能安装装最简系统,如果想使用X-Windows等其他应用的话,就要提高系统的配置了,这也不是什么问题,因为现在绝大多数用户的配置都能够满足。下面是要安装带有X-Windows的FreeBSD系统的最小硬件需求:

* CPU要求80486DX/2-66以上
* 内存16MB以上
* SVGA显示卡,2M显存
* 鼠标
* 200MB空闲硬盘空间

在条件允许的时候,为FreeBSD准备更多的硬盘空间,笔者认为为FreeBSD准备1G到1.5G的硬盘空间比较好,这样在你准备安装一些应用程序时就不会因为你安装系统时为FreeBSD准备的硬盘太小而后悔了。 下面是Generic FreeBSD kernel支持的硬件列表,这些硬件是最常见的,一些其他不太常见的硬件没有包括在内。

Device Port IRQ DRQ IOMem Description
fdc0 3f0 6 2   Floppy disk controller
wdc0 1f0 14     IDE/MFM/RLL disk controller
wdc1 170 15     IDE/MFM/RLL disk controller
adv0         AdvanSys Narrow SCSI controllers
adw0         AdvanSys Wide SCSI controllers
ncr0         NCR PCI SCSI controller
bt0 330 dyn dyn dyn Buslogic SCSI controller
uha0 330 dyn 6 dyn Ultrastore 14f
aha0 330 dyn 5 dyn Adaptec 154x SCSI controller
ahb0 dyn dyn dyn dyn Adaptec 174x SCSI controller
ahc0 dyn dyn dyn dyn Adaptec 274x/284x/294x SCSI controller
aic0 340 11 dyn dyn Adaptec 152x/AIC-6360 SCSI controller
isp0 dyn dyn dyn dyn QLogic 10X0, 2100 SCSI/FC controllers
dpt         DPT RAID SCSI controllers.
wt0 300 5 1 dyn Wangtek and Archive QIC-02/QIC-36
psm0 60 12     PS/2 Mouse (disabled by default)
mcd0 300 10     Mitsumi CD-ROM
matcd0 230       Matsushita/Panasonic CD-ROM
scd0 230       Sony CD-ROM
sio0 3f8 4     Serial Port 0 (COM1)
sio1 2f8 3     Serial Port 1 (COM2)
ppc0 dyn 7     Parallel Port Chipset
ax0 dyn dyn   dyn ASIX AX88140A PCI based cards
de0         DEC DC21x40 PCI based cards (including 21140 100bT cards)
ed0 280 10 dyn d8000 WD & SMC 80xx; Novell NE1000 & NE2000; 3Com3C503; HP PC Lan+
eg0 310 5 dyn dyn 3Com 3C505
ep0 300 10 dyn dyn 3Com 3C509
ex0 dyn dyn dyn   Intel EtherExpress Pro/10 cards
fe0 300 dyn     Allied-Telesis AT1700, RE2000 and Fujitsu FMV-180 series cards.
fxp0 dyn dyn   dyn Intel EtherExpress Pro/100B
ie0 300 10 dyn d0000 AT&T StarLAN 10 and EN100; 3Com 3C507; NI5210
ix0 300 10 dyn d0000 Intel EtherExpress cards
ex0 dyn dyn dyn dyn Intel EtherExpress Pro/10 cards
le0 300 5 dyn d0000 Digital Equipment EtherWorks 2 and EtherWorks 3
lnc0 280 10   dyn Lance/PCnet cards (Isolan, Novell NE2100, NE32-VL)
mx0 dyn dyn   dyn Macronix 98713/15/25 PCI based cards
pn0 dyn dyn   dyn Lite-On PNIC PCI based cards
rl0 dyn dyn   dyn RealTek 8129/8139 fast ethernet
tl0 dyn dyn   dyn TI TNET100 'ThunderLAN' cards.
wb0 dyn dyn   dyn Winbond W89C840F PCI based cards.
vr0 dyn dyn   dyn VIA VT3043/VT86C100A PCI based cards.
vx0 dyn dyn   dyn 3Com 3c59x ((Fast) Etherlink III)
xl0 dyn dyn   dyn 3Com 3c900, 3c905 and 3c905B ((Fast) Etherlink XL)
cs0 0x300 dyn     Crystal Semiconductor CS89x0-based cards.
ze0 300 5   d8000 IBM/National Semiconductor PCMCIA Ethernet Controller
zp0 300 10   d8000 Com 3c589 Etherlink III PCMCIA Ethernet Controller

表中Device列是FreeBSD中对不同设备使用的不同设备名;Port列是设备使用的起始I/O地址,用16进制表示;IRQ列是设备所使用的中断号,用10进制表示;DMA列是设备所使用的DMA 通道号,用 10 进制表示;IOMEM 列是设备使用的起始内存地址,用 16 进制表示;最后一列是对硬件设备的描述。表中的 dyn 表示该项的具体值由系统内核( kernel )检测确定,空白处表示该设备不使用这个参数。

支持以上常见硬件的 Generic FreeBSD kernel 在安装系统过程中放置在系统的根目录下。在 DOS 启动映像和系统安装软盘上也使用这个 kernel 。这里补充介绍一下什么是 kernel ? kernel 是操作系统的核心程序,它驻留于内存中,启动操作系统就是把 kernel 调入内存并执行它的过程。

在 FreeBSD 的发布系统里,还包括有许多其他设备的驱动程序。可以通过定制内核来使用这些设备,关于定制内核将在以后的章节里介绍。这些 FreeBSD 支持的硬件设备的列表可以参考在 FreeBSD 发布的 CD-ROM Disk-1 上的文件 HARDWARE.TXT 或安装了系统源码的 FreeBSD 系统的 /usr/src/sys/i386/conf/LINT 文件,这里就不再列出了。

November 26, 2005

FreeBSD的文件系统--改变文件所有权

有时需要改变文件的存取权限和所有者,UNIX系统提供三个命令完成这些操作。
·chown,改变文件所有者,如要将aliases的所有者改为pcguest,使用以下命令:
%chown pcguest aliases
·chgrp,改变文件组,如要将aliases的组改为staff,使用如下命令:
%chgrp staff aliases
·chmod,改变文件存取权限,这个命令有许多种格式,可以参考在线帮助信息以全面了解如何使用这个命令。举例如下:
%chmod go+w aliases 增加组用户和其他用户的写权限
%chmod u=rwx aliases 设置所有者权限为可读、可写、可执行
%chmod o=u-x aliases 设置其他用户权限与所有者权限一致但去掉执行权限

从以上例子可以看出,chmod命令用u、g、o分别表示文件的所有者、组和其他用户的权限设置,用 + 、 - 、 = 分别表示增加、删除和设置文件的权限,用r 、w 、x分别表示文件的读、写和执行权限。用户可以变通使用,也可以用man chmod获取更多的帮助信息。

此外,chmod还使用另外一种格式设置文件的存取权限。UNIX对文件的可读、可写和可执行权限设置分别用一个二进制位来表示,整个一组权限用一个八进制数值表示,如110(二进制,八进制值为6)表示rw- ,100(二进制,八进制值为4)表示r-- 。这样在设置文件的存取权限时可以这样设置:
%chmod 644 aliases
上面的命令设置aliases文件对所有者可读可写,对组用户和其他用户可读。

FreeBSD的文件系统--文件权限

FreeBSD和其他操作系统一样,将数据存储为文件,并且将文件放置在不同的目录里。也可以把目录看作一种特殊的文件。FreeBSD的文件名区分大小写字母,最长可达255个字符,可以使用除 / 以外的其他任何字符,因为 / 表示一个目录。

文件权限

FreeBSD是一个多用户、多任务的操作系统,可以供任何拥有账号的用户使用,为保护用户的数据安全,FreeBSD为每个文件设定了访问权限。

FreeBSD的每个文件(目录)有它的拥有者(owner),组(group)和一组涉及用户访问权限的标志。使用ls -l可以看到:

%ls -l /etc/
total 405
-rw-r--r-- 1 root wheel 5700 Oct 16 17:33 XF86Config
-rw-r--r-- 1 root wheel 1357 Feb 17 1999 aliases
-rw-r--r-- 1 root wheel 32768 Oct 16 23:38 aliases.db
-rw-r--r-- 1 root wheel 140 Feb 17 1999 amd.map
-rw-r--r-- 1 root wheel 253 Feb 17 1999 auth.conf
-rw-r--r-- 1 root wheel 834 Feb 17 1999 crontab
-rw-r--r-- 1 root wheel 95 Feb 17 1999 csh.cshrc
-rw-r--r-- 1 root wheel 561 Feb 17 1999 csh.login
-rw-r--r-- 1 root wheel 97 Feb 17 1999 csh.logout
drwxr-xr-x 2 root wheel 512 Oct 16 23:26 defaults

这里只列出部分系统输出信息以供参考。从以上系统输出可以看到这些文件的所有者都是root,文件的组是wheel。每一行的最前面的一组信息表示的是文件的访问权限设置,共有10个字符。第一个字符可以是 - 、 d 、 l 、 c 、 b 等, - 表示是一个普通文件, d 表示是一个目录文件, l 表示是一个连接文件, c 和 b 则用于表示设备文件。后面的9个字符三个一组,前三个表示文件所有者对该文件的存取权限,中间三个表示文件组用户对文件的存取权限,后面三个表示其他用户对该文件的存取权限。一组三个子符中,第一个字符表示读权限, r 表示可读取, - 表示不可读取;第二个字符表示写权限, w 表示可写, - 表示不可写;第三个字符表示执行权限, x 表示可执行, - 表示不可执行。

在10个字符表示的存取权限后面的数字表示的是链接数目,即链接到该文件的硬链接数目,普通文件一般是1,而目录文件一般是2。后面是文件的所有者和组,再后面是文件大小,以Byte表示。最后的信息是文件的最后修改日期和文件名。

从上面的信息可以看出,这些文件(目录)的所有者都是root用户,组为wheel,除defaults是目录文件以外都是普通文件,它们对root用户都是可读写,不可执行,对同组用户和其他用户只可读。

从这里可以看出,每个文件的权限设置里包括有执行权限,用来设置该文件是否可执行。在UNIX操作系统里,文件是否可执行与文件的扩展名没有任何关系,完全由文件的存取权限设定,这一点与DOS/Windows系统完全不同。

FreeBSD的文件系统--路径组织结构

FreeBSD和其他UNIX类操作系统一样有一套"标准"的路径组织结构。在标准两个字上加上引号是因为各种UNIX类操作系统的路径组织结构虽基本相同,但总存在一些小的差别。FreeBSD的这种路径组织结构为系统管理提供了很大的方便,用户可以方便的确定所需要的文件存储的位置。

下面简单介绍一下FreeBSD基本的路径结构:
/ 根文件系统,用于存储系统内核,启动管理和其他文件系统的装载点。
/bin 系统启动时需要的一些通用可执行程序。
/cdrom 光盘驱动器的装载点。
/compat 与系统兼容有关的内容,如系统模拟等。
/dev 设备入口点。
/etc 各种配置文件。
/mnt 软盘等其他文件系统的装载点。
/modules 内核可装载模块。
/proc 进程文件系统,存储指向当前活动进程的虚拟内存的伪文件。
/root root用户的工作目录。
/sbin 系统可执行文件。
/stand 独立执行的程序,sysinstall就在这个目录下。
/usr 第二个文件系统。
/usr/X11R6 X-Windows系统
/usr/X11R6/bin 可执行的X-Windows程序
/usr/X11R6/include X-Windows程序的头文件。
/usr/X11R6/lib X-Windows程序的库文件。
/usr/X11R6/man X-Windows程序的帮助文件。
/usr/bin 与系统启动无关的标准执行程序。
/usr/games 游戏。
/usr/include 程序需要的头文件。
/usr/lib 程序需要的库文件。
/usr/libexec 一些不由用户直接运行的执行程序。
/usr/local 不属于FreeBSD一部分的其他程序。
/usr/sbin 系统启动时不需要使用的一些系统管理程序。
/usr/share 各种只读文件,大多数是一些系统信息,包括有FreeBSD 手册等。
/var 存储经常发生变化的文件,如邮件,日志等。
/var/log 系统日志。
/var/mail 发给用户的信件。
/var/spool 缓冲数据,如打印数据等。
/var/tmp 临时文件。

以上就是FreeBSD的基本路径组织结构。了解这个路径结构将给用户使用FreeBSD系统提供很大方便。这里要提及 /var 目录,因这个目录存储邮件,日志,临时文件等经常变化的文件,有时候这些文件会很庞大,为避免影响根文件系统,可以为 /var 建一独立的分区(参考安装时的disklabel部分)或将这个目录链接到 /usr 目录下。

FreeBSD的文件系统--新文件的存取权限

那么如何确定新创建的文件的存取权限呢?对新文件错误的存取权限设置的后果是非常严重的,如果新创建的文件存取权限默认设定为rwxrwxrwx,那么所有用户对该文件都可以任意进行访问和修改。如果新创建的文件存取权限默认设定为r--------,那么就只有创建该文件的用户可以读取,并且只能进行读操作,不能修改。以上两种权限设置都不是用户所希望的设置,要得到用户希望的权限设置,必须使用chmod命令进行额外的操作。

UNIX采用umask(User Mask,用户掩码)的方式解决新创建文件的存取权限设定问题。这是一个不许可的设置,它指定哪些权限是不允许的。

前面提到可以用3个比特,即一个八进制数字表示一组文件权限设置,如果希望的文件存取权限为所有用户可读,只有所有者可写,则设置umask为022,二进制表示为000010010。那么只有对应二进制比特为0的权限设置是允许的,如下所示:

rwxrwxrwx 可能的存取权限
000010010 User Mask(用户掩码)
rwxr-xr-x 得到的存取权限

默认情况下创建的新文件没有执行权限,而目录有执行权限,因此新创建的文件权限为rw-r--r--,而新建的目录权限为rwxr-xr-x。可以使用umask命令来设置用户掩码的值。

FreeBSD的文件系统--链接文件

FreeBSD里存在两种链接文件,一种称为硬链接,一种成为符号链接或软链接。

硬链接建立了文件的一个副本,具有和原始文件同样的存储权限,删除原始文件并不破坏副本的存在。对硬链接所建立的副本所做的任何修改都反映在原始文件上,反之亦然。但硬链接文件必须建立在原始文件所在的文件系统上,不能在另一个文件系统上建立硬链接文件。

符号连接,即软链接正如它的名称一样只建立一个到原始文件的符号链接。删除原始文件将使符号连接没有正确的指向。采用符号连接可以超越文件系统的限制,符号连接只占用很少的硬盘空间,它只完成文件的重定向。

注意:前面在看文件存取权限时提到的在10位存取权限后面,文件所有者前面的数值表示的是文件硬链接数值,这里不包括符号连接的数目。

FreeBSD的文件系统--设备文件

与其他UNIX系统一样,FreeBSD用一个major number和一个minor number来确定一个FreeBSD设备。major number实际上是设备的一个目录列表,而minor number则指明具体设备。用ls -l /dev指令可以列出FreeBSD目前可以使用的设备,在创建时间前面的部分,以逗号分隔的两个数字就分别是设备的major number和minor number。

最早的UNIX系统将系统设备的major number和minor number存储在一个16比特字中,各占用8比特。4.4BSD系统将之扩展到32比特,major number存储在原来的位置,仍占用8比特,而minor number则占用其余的24比特。如下所示:

  0 1 2 3
原始的设备字 未使用 major number minor number
修改后的设备字 more minor number major number minor number

FreeBSD系统采用了上面4.4BSD系统的方案,其他一些UNIX系统的扩展方案与这个方案略有区别。

FreeBSD支持一种设备并不意味着在 /dev 目录下就存在相应的设备节点。一般情况下在安装完FreeBSD后,系统会创建大部分常用的设备节点。如果你所使用的设备在 /dev目录下没有对应的设备节点,就无法使用这个设备。这时就需要用户自己创建设备节点。

要创建一个设备节点,可以使用mknod命令或MAKEDEV脚本。一般MAKEDEV可以完成大部分的工作,而mknod的使用就显得复杂一些,但它可以处理MAKEDEV不能处理的问题。举例如下,默认情况下,FreeBSD只支持4个SCSI硬盘,如果用户安装了第五个硬盘,要创建第五个SCSI硬盘的设备节点,需要执行以下操作:

%cd /dev
%./MAKEDEV da4
%./MAKEDEV da4s0a

FreeBSD所支持的每一种设备都有对应的设备名称,参考安装系统一章FreeBSD支持的硬件。

FreeBSD支持的文件系统

FreeBSD支持许多种文件系统,主要包括有:
● ufs文件系统,最基本的FreeBSD文件系统。
● cd9660文件系统,ISO 9660 CD-ROM格式。
● nfs网络文件系统。
● FAT16、FAT32和NTFS等Microsoft Windows支持的文件系统。
● 其他一些文件系统…
要使用这些FreeBSD支持的文件系统,必须将它们正确装载到FreeBSD的文件路径结构中,例如要使用CDROM中的文件,必须将光盘放入光盘驱动器,执行如下操作:
%mount_cd9660 /dev/wcd0c /cdrom
这里 /dev/wcd0c是CD-ROM驱动器的设备名,/cdrom是CD-ROM的装载点,完成操作后,就可以访问光盘里的内容了。
系统启动时执行脚本 /etc/rc,将参考 /etc/fstab 中的内容自动装载文件系统。关于 /etc/fstab的文件格式将在系统配置里详细介绍。

服务器上键盘的使用

安装了FreeBSD的计算机一般是做为服务器使用的,很多时候并没有连接键盘。当计算机启动后,再接上键盘,这是键盘并不工作。这是为什么呢?看一下kernel配置文件:
device atkbd0 at atkbdc? irq 1 flags ox1
改为:
device atkbd0 at atkbdc? irq 1
为什么要去掉flag配置 呢?用man atkbd命令看有如下信息:
bit 0 (FAIL_IF_NO_KBD)
By default the atkbd driver will install even if a keyboard is not actually connected to the system. This option prevents the driver from being installed in this situation.
比特0 (FAIL_IF_NO_KBD)
默认情况下即使没有连接键盘也装载atkbd驱动。这个选项使在这种情况下不再装载atkbd驱动。
以上描述有些令人糊涂,我们关注的是内核kernel,不是驱动。在man帮助里,"默认"指的是驱动,而不是内核。默认情况下,即使没有连接键盘,驱动也进行装载。另一方面,GENERIC内核使用flags 0x1,在没有连接键盘的时候卸载键盘驱动。
进行如上修改后重新编译内核,这样就可以解决系统启动后再连接键盘,键盘不工作的问题了。
那么为什么GENERIC内核不是默认总装载键盘驱动呢,答案是并不希望这样做,由于syscons的限制,系统无法同时处理多个键盘输入。因此,如果atkbd没有找到键盘,那么就让USB键盘驱动去找找是否有USB键盘安装。
对USB键盘有类似的问题,但还不知道该如何处理。