FreeBSD kernel 编译大法(三)编kernel失败的处理 (1)
第一课、安装OpenBSD2.8
假如您的电脑不支持光盘启动,请首先在DOS下进行以下的步骤,制作启动软盘,然后从软盘
启动电脑。(其中e:是光盘所在盘符)
e:\2.8\tools\fdimagee:\2.8\i386\floppy28.fsa:
假如您的电脑支持光盘启动,直接从光盘启动后,按照提示一步一步完成安装,以下是安装
过程的简略描述
第一节、建立分区
启动电脑直到出现以下的提示
(I)nstall,(U)pgradeor(S)hell?
其中(I)代表安装一个全新的系统,(U)代表升级原有的OpenBSD旧版本,(S)代表退出到命令行状态。
我们要安装一个全新的系统,所以输入I并回车。
在一屏欢迎辞之后,系统询问使用什么终端类型
Specifyterminaltype[pcvt25]:
不用理会它,直接回车,继续以后的步骤。系统将检测到可用的硬盘,并询问对那个硬盘进行处理
Availabledisksare:
wd0
Whichdiskistherootdisk?[wd0]
上面的提示表明,电脑只有一个IDE硬盘,假如是SCSI硬盘,将显示成sd0。因为系统只有一个硬盘,
所以安装程序已经帮我们选择了硬盘,假如系统有多个硬盘,那就必须输入硬盘的名称,如wd1。现
在直接回车进入下一步。
系统询问是否把整个硬盘给OpenBSD使用
Doyouwanttousethe*entire*diskforOpenBSD?[no]
默认是no,不过手册是要做服务器,所以输入yes并回车吧!不过首先要确认这个硬盘上面没有重要
的数据啊!
现在系统会进入fdisk(一个分区程序,输入?并回车可以获得使用帮助)。首先用d命令删除原有的
分区(注重,c分区被OpenBSD系统保留使用,不能够删除或变更),然后用a命令新建分区,您将得
到和下面类似的信息
offset:[xxxxxx]
size:[xxxxxxxxxx]
Roundingtonearestcylinder:xxxxxxxx
FStype:[4.2BSD]
mountpoint:[none]
其中,offset是指每一个分区的偏移地址。不用理会,直接回车即可,系统会自动处理。size是分区
的大小,括号里面是剩余的可用磁盘空间大小。可以直接用80m这样的输入来表示分区的大小为80Mb。
Roundingtonearestcylinder由系统返回,是转换成柱头数,不必理会。FStype是文件系统类型,
只有4.2BSD和swap两个可选项。默认情况下,b分区会使用swap选项。swap分区建议大小为内存大小
的2倍。mountpoint相当于DOS系统的目录,系统必须有且只有一个根目录“/”,swap分区无需
mountpoint。
可以简单的把swap分区以外的全部磁盘空间定义为“/”,但是不建议这么做,因为一旦磁盘出现问题,
就难于根据分区进行修复了。假如您有一个15Gb的硬盘,并且有128Mb的内存,那么建议划分如下
a80m4.2BSD/;根目录
b300mswap;交换分区
d80m4.2BSD/tmp;临时文件目录
e800m4.2BSD/usr;应用程序目录
f2000m4.2BSD/var;应用数据目录
g剩余空间4.2BSD/home;用户目录
假如安装MySQL数据库服务,且要求方便治理的话,那么可以把/var/mysql单独出来一个分区(会在后
面提及)。
划分好分区之后用w命令保存分区信息,q命令退出fdisk程序。
Thefollowingpartitionswillbeusedfortherootfilesystemandswap:
wd0a/
wd0bswap
Mountpointforwd0d(size=98967k)[/tmp,RET,none,ordone]?
系统会再次确认目录分配,可以给粗心大意的人一个修正的机会,假如确定没有错误的话,输入done并
回车即可。
系统会提示是否对其他硬盘进行处理,假如没有其他硬盘或者不需要处理,输入done并回车继续下一个
步骤,假如配置其他硬盘,按照上面的步骤进行即可。注重千万不要对已经配置过的硬盘进行再配置。
系统询问是否进行格式化
Thenextstepwilloverwriteanyexistingdataon:
wd0awd0dwd0ewd0fwd0g
Areyoureallysurethatyou'rereadytoproceed?[n]
当然输入y并回车了,做了这么多,难道不继续吗?
第二节、配置网络
经过硬盘格式化之后,系统将询问是否配置网络
Configurethenetwork[y]
既然是做服务器,当然要网络支持的,回车开始配置网络。
Entersystemhostname(shortform):[]
EnterDNSdomainname:[]
输入hostname(主机名)和domainname(域名),假如有合法的国际域名的话,就使用国际域名。先假
设hostname为moo,domainname为01tech.nat(避免和国际域名冲突)。
系统提示配置网卡,手册例子使用的是DE-530TX10/100Mbps自适应网卡,在OpenBSD下面的设备名为vr0,
假如是NE2000兼容网卡,可能显示为ne0,系统会自动检测并列出来
Youmayconfigurethefollowingnetworkinterfaces(theinterfaces
markedwith[X]havebeensuccesfullyconfigured):
[]vr0
Configurewhichinterface?(or,enter'done')[vr0]
在本例中,系统只有一个网卡,且已经选定,直接回车开始配置,假如没有选定,请输入设备名并回车
进行配置。
IPaddress(or'dhcp')?[]
Symbolic(host)name?[moo]
Netmask?[255.255.255.0]
在IPaddress中输入dhcp并回车将会使用动态分配的IP地址,作为服务器应该有固定的IP地址,所以这
里应该输入192.168.32.1并回车(关于IP地址和掩码的知识请参考其他文章)。Symbolic(host)name其
实就是hostname啦!系统会自动使用刚才输入的hostname,直接回车就可以了。Netmask(掩码)默认
是255.255.255.0,就用这个吧,回车继续。
Youruseofthenetworkinterfacemayrequirenon-default
mediadirectives.Thedefaultmediais:
media:Ethernetautoselect(100baseTXfull-duplex)
Thisisalistofsupportedmedia:
mediaautoselect
media100baseTXmediaoptfull-duplex
media100baseTX
media10baseTmediaoptfull-duplex
media10baseT
Ifthedefaultisnotsatisfactory,andyouwishtouseanother
media,copythatlinefromabove(e.g."media100baseTX")
Mediadirectives?[]
别看这么多信息,其实就做一个事,选择网卡的接入网络方式,最简单的方式就是选择mediaautoselect
并回车。
系统会询问是否配置其他的网卡,假如系统只有一个网卡的话,会自动选定done,只需要回车即可进入下
一个步骤。其他网卡的配置象上面一样配置就可以了。
EnterIPaddressofdefaultroute:[none]
EnterIPaddressofprimarynameserver:[none]
Wouldyouliketousethenameservernow?[y]
路由route不需要输入,除非要链接到不同域的机器。因为要在这台服务器上提供域名解释服务,所以
nameserver就指向自己吧,也就是输入192.168.32.1就可以了。至于是否现在启动nameserver就没所谓了。
回车继续。
第三节、设置治理员口令
Pleaseentertheinitialpasswordthattherootaccountwillhave.
系统要求输入治理员口令,并确认一次,千万要记住啊,不然电脑重新启动之后进入不了系统进行治理。
这里假设口令为123456,在实际的应用中千万不要使用这样的口令,而应该采用字母、字符和数字混合
的口令。
第四节、安装应用程序
然后安装程序询问是否会运行XWindow
DoyouexpecttoruntheXWindowSystem?[y]
当然不会,输入n并回车继续下一步。选择安装媒体介质。
Installfrom(f)tp,(h)ttp,(t)ape,(C)D-ROM,(N)FSorlocal(d)isk?
有多种方式安装系统,我们只选择(C),通过CD-ROM安装。
ThefollowingCD-ROMdevicesareinstalledonyoursystem;
pleasemake
suretheCDisintheCD-ROMdriveandselectthedevicecontaining
theCDwiththeinstallationsets:
cd0
WhichCD-ROMcontainstheinstallationmedia?[cd0]
系统将检测可用的CD-ROM,并给予选定,这里是只有一个CD-ROM的状态,假如多于一个CD-ROM的状况,
请选择正确的放有安装光盘的CD-ROM,否则安装程序会Halt在那里,无法继续。
Enterthedirectoryrelativetothemountpointthat
containsthefile.[/2.8/i386]
确认安装文件所在目录,假如您使用01TECH上面提供的光盘,回车确认即可。
Thefollowingsetsareavailableforextraction.
Enterfilename,`list',`all',or`done'.
Youmayde-selectasetbyprependinga'-'toitsname.
[X]base28.tgz
[X]etc28.tgz
[]misc28.tgz
[]comp28.tgz
[X]man28.tgz
[]game28.tgz
[]xbase28.tgz
[]xshare28.tgz
[]xfont28.tgz
[]xserv28.tgz
[X]bsd
Filename?[]
因为安装服务器,我们只需要上面已经打“X”的的程序包,另外,因为有部分程序必须由源程序编译
获得,所以必须选择comp28.tgz。也就是说要有base28.tgz、etc28.tgz、comp28.tgz、man28.tgz以
及bsd。
确认这五个项前面都打“X”后,输入done并回车,询问
Readytoextractselectedfilesets?[y]
当然要解包,这个问题实在有点弱智啊!
Extractmoresets?[n]
嗯?上帝说,再给你一个忏悔的机会?别管他,回车继续吧!
第五节、设定时区
然后就是选择时区
Whattimezoneareyouin?[`?'forlist][GMT]
可以用?查看一下有什么可以选择的时区,不过确定没有北京时间,选香港的吧,输入Hongkong并回车。
系统一番自动处理之后,终于出现了命令行模式的提示符“#”。恭喜,OpenBSD2.8到此安装完毕。
输入reboot回车,重新启动电脑吧!记住改为硬盘启动啊!现在可以歇一歇了。
重新启动电脑之后,用root作为用户名,123456作为密码就可以登录您的OpenBSD2.8系统了。
第二课、设置域名解释服务
首先解释一下域名服务(DNS-DomainNameServer)的作用。其实,链接到网络的电脑,只需要知
道IP地址就可以实现访问。但是谁会去记住129.128.5.191这个IP地址是代表OpenBSD的服务器呢?当然
是www.openbsd.org轻易记忆得多了。域名服务所实现的作用,就是把www.openbsd.org这样的名字转换
成电脑可以识别的129.128.5.191这样的IP地址。
所以域名解释服务应当包含两种转换过程从名字到IP地址(正向解释);从IP地址到名字(反向
解释)。理解了这些基本感念,配置域名解释服务得时候就会比较轻易了。
第一节、设置named.boot文件
OpenBSD2.8系统在安装完成后就已经有域名解释服务程序named4.9.7-REL,只是需要人工设定启
动。named的配置文件在/var/named目录里面,文件名是named.boot。一个简单的,可以使用的(当然是
和手册的例子联系起来啦!)的named.boot的文件内容如下
directory/namedb
cache.root.cache
primary0.0.127.IN-ADDR.ARPAlocalhost.rev
primary32.168.192.IN-ADDR.ARPA01tech.rev
primary01tech.nat01tech
可以用vi工具来编辑这个文件(vi的使用方法请参考『附录4』)。解释一下这个文件各行的含义
第一行用于指定域名解释文件所在目录,其实真正的域名解释文件是放在/var/named/namedb目录里
面,因为我们将采用chroot的方式(执行程序的时候切换到程序需要的用户,并以改用户的根目录作为
根目录的方式)执行named,所以这里是/namedb。
第二行指定了缓存文件,对于曾经访问过的域名,将会记录在缓存文件里面,以后查询的时候就会
快很多。缓存文件的文件名是root.cache。
第三行指定了对于本机的域名反解文件。0.0.127.IN-ADDR.ARPA的写法其实就是说要反过来求
127.0.0.x(x的范围是1~255)的对应名称。相关的解释文件是localhost.rev
第四行和第三行同理,就是要求192.168.32.x的对应名称。相关的解释文件是01tech.rev
第五行是正解,指定凡是域名为01tech.nat的名称都交给01tech文件进行解释。
第二节、配置域名解释文件
然后,我们看看/var/namedb目录里面的文件的内容,在系统没有配置域名解释服务的时候,默认
只有两个文件localhost.rev和root.cache,其中的localhost.rev并非我们需要的内容,要自行改写,
改写后的内容如下
@INSOAmoo.01tech.nat.root.moo.01tech.nat.(
14;Serial
3600;Refresh
900;Retry
3600000;Expire
3600);Minimum
INNSmoo.01tech.nat.
1INPTRlocalhost.
解释一下这个文件的构成吧!其实这个文件由三个RR(Resourcerecord)构成,或者我们用表格的
方式来分析,会比较轻易理解吧
[name][ttl][class]typedata
@省略INSOA……
省略省略INNS……
1省略INPTR……
Name必须为主机名或者域名,当使用@时代表缩写,就是和named.boot文件中指定的一样,在这里就代
表127.0.0.x了。
ttl是指此条数据的有效保存期限,通常都忽略掉,采用默认的ttl值。
class指定网络类型,IN代表Internet,基本上都不会使用别的类型。
type常见的有SOA、NS、A、PTR、MX、CNAME等。
SOA(StartOfAuthority)后面跟负责这个域的主机,治理员邮箱,序列号,副解释域更新间隔,副解
释域更新失败重试间隔,主解释域失败时副解释域提供数据的有效期限,其他域名解释服务器保留本域
名解释服务器的时间。需要注重的是,在主机和治理员邮箱后一定不能缺少“.”否则系统会自动加上
完整的域名,例如只写moo的话,系统会添加为moo.01tech.nat。所以也可以简单的把SOA语句写
作SOAmooroot.moo(……)。
NS(NameServer)后面跟指定的提供域名解释服务的主机名
PTR(Pointer)后面是对应于前面IP地址的名称。
A(Address)后面是对应于前面的名称的IP地址。需要注重正解的A和反解的PTR的记录必须相符,否则会
造成DNS查询不正常,系统变慢。
CNAME用于建立别名,这样访问别名的时候,就会转为访问正式的名称。
MX记录的是一串目的地址列表,用于告诉邮件服务器传送信件的优先顺序。
对于A、CNAME、MX的使用方法将会在后面的正解文件中看到,以后将不再作出解释。
01tech.rev的文件内容和localhost.rev文件基本相同,如下
@INSOAmoo.01tech.nat.root.moo.01tech.nat.(
14;Serial
3600;Refresh
900;Retry
3600000;Expire
3600);Minimum
INNSmoo.01tech.nat.
1INPTRmoo.01tech.nat.
01tech的内容如下
@INSOAmoo.01tech.nat.root.moo.01tech.nat.(
14;Serial
3600;Refresh
900;Retry
3600000;Expire
3600);Minimum
INNSmoo.01tech.nat.
INMX5pop.01tech.nat.
mooINA192.168.32.1
wwwINCNAMEmoo
popINCNAMEmoo
smtpINCNAMEmoo
localhost.INCNAMEmoo
01tech.nat.INCNAMEmoo
第三节、测试DNS
好了,说了一大堆的东西,需要好好消化,不过我们还是看看我们的DNS是否正常吧,通过以下
的命令启动named
named–t/var/named
然后用nslookup来检查DNS是否正常。以下是nslookup运行的结果,任何时候假如域名不能解释,
通过按Ctrl+C可以中断查询。
nslookup
DefaultServer:moo.01tech.nat
Address:192.168.32.1
%26gt;pop
Server:moo.01tech.nat
Address:192.168.32.1
Name:moo.01tech.nat
Address:192.168.32.1
Aliases:pop.01tech.nat
%26gt;exit
假如您完全按照手册的例子来配置您的DNS,但是查询却没有这样的结果,那么您需要重新再来,
好好吃透上面的说明了。
第四节、在启动系统的时候自动启动DNS
要使系统在启动时自动启动DNS服务非常简单,修改/etc/rc.conf文件里面的相关项就可以了
named_flags=NO改为named_flags=””
第三课、配置数据库服务
假如您不需要数据库服务可以略过本课,但是后面的课程中相当部分和本课有关,所以即使不打算
配置数据库服务,也应该看看本课的内容。
MySQL数据库是目前最受欢迎的免费数据库,由于具有优异的效率和简洁的控制方式,所以被众多
的服务商采用。尽管它还有一些不足,例如不支持事务和子选择,但这些缺陷可以通过编程解决。
在本手册开始写作的时候,MySQL的最新稳定版本是3.23.32,还没有OpenBSD的port(OpenBSD中的
每一个应用都是一个port),所以我们在手册光盘中包含了它的源代码包,并写作了本课以教导您如何
在OpenBSD下面编译并安装MySQL。
第一节、展开MySQL源代码包
首先需要让系统可以读取光盘(因为源代码包在光盘里面啊!),方法非常简单,只需执行以下
的命令即可
mount/dev/cd0c/mnt
然后转入/usr/src目录,把MySQL-3.23.32的源代码包解压
cd/usr/src
tarzxvf/mnt/packages/mysql-3.23.32.tar.gz
这样,在/usr/src目录下面就会有一个名为mysql-3.23.32的目录,里面就是MySQL-3.23.32的源
代码。为了继续后面的工作,我们需要进入该目录。
cdmysql-3.23.32
第二节、为MySQL服务程序建立所需的组和用户
要正确编译和安装MySQL数据库服务程序,需要建立mysql组和属于mysql组的mysql用户。在以后
运行MySQL数据库服务程序的时候同样需要它们,建立的方法如下
groupaddmysql
useradd–gmysqlmysql
第三节、运行配置程序
因为要编译源代码必须先获得和系统相关的信息,包括编译器版本,系统支持的线程方式
(OpenBSD是一个支持多线程的系统)等。因此需要运行配置程序以获取这些信息。
./configure--prefix=/usr/local\
--localstatedir=/var/mysql\
--with-low-memory\
--without-bench\
--without-debug
我们解释一下配置程序里面各行的含义。./configure就是要执行的配置程序了;--prefix=/usr/local
表示,编译后的MySQL数据库服务程序将会安装到/usr/local/bin目录当中,而库文件会安装到
/usr/local/lib/mysql目录中,头文件将安装到/usr/local/include目录中;--localstatedir=/var/mysql
表示数据库所用到的数据将会安装到/var/mysql目录中(我们在安装OpenBSD的时候提到假如需要,
可以为/var/mysql建立一个独立的分区就是这个原因,这样可以方便治理);--with-low-memory这一
句至关重要,没有了它,基本上就不要指望在您的机器上面通过编译,除非您拥有超过1Gb的内存,这句
会指导编译程序使用交换分区作为虚拟内存;--without-bench和—without-debug告诉编译器和安装脚本
不需要测试程序和调试信息。
好了,解释得够清楚吗?
第四节、编译和安装MySQL
这个步骤非常简单,只需要执行下面的命令即可,其他得事情由电脑来完成。因为编译的过程非常久,
可以喝杯水歇一歇。
make
makeinstall
makeinit-db
第五节、测试MySQL
对不起,本节的标题有点含糊。这里的测试是指测试MySQL的编译和安装是否正常。为了测试MySQL
是否被正确编译和安装,需要执行以下的命令
/usr/local/bin/safe_mysqld%26gt;/dev/null%26amp;
/usr/local/bin/mysqladmin–urootpassword‘123456’
假如第二条命令无声无息地结束了,那么就证实MySQL可以正常使用了。对了,第二条命令其实是更
改系统治理员的口令啊!那么您知道以后使用MySQL程序的时候需要的口令了吗?
第六节、让MySQL在系统启动的时候自动启动
我们需要做一些工作来让MySQL在系统启动的时候自动启动。首先我们修改/etc/rc.conf文件,添加
以下的行
mysqld_flags=””
然后,需要修改/etc/rc文件,找到启动named的代码(第171行),添加以下的代码
if[“X${mysqld_flags}”!=X”NO”];then
echo‘startingmysqld’
/usr/local/bin/safe_mysqld%26gt;/dev/null%26amp;
fi
另外,为了让其他需要用到MySQL的程序编译可以顺利通过,就需要在/etc/rc.local文件中添加以
下的代码
if[“X${mysqld_flags}”!=X”NO”];then
/sbin/ldconfig–m/usr/local/lib/mysql
fi
第四课、配置邮件服务
其实OpenBSD2.8在系统安装完成之后,就已经安装且启动了邮件服务sendmail。我们在这里需要为
OpenBSD找一个比sendmail更加安全、更加轻易使用和高效能的邮件服务程序,我们选择了qmail(利用
qmail加上vpopmail可以把系统用户和邮件用户分离,并且使用虚拟邮件域。再加上MySQL就可以实现邮件
用户的数据库口令校验,这是我选择qmail的原因)。
第一节、关闭sendmail
因为qmail作为sendmail的替代服务程序,不能和sendmail一起工作,所以必须先关闭sendmail程序。
执行以下的命令关闭正在执行的sendmail程序。
Kill–9`cat/var/run/sendmail.pid`
同时,必须把sendmail相关的链接删除,并把senmail更名
chmod0/usr/sbin/sendmail/usr/sbin/sendmail.old
最后还必须修改/etc/rc.conf文件,更改sendmail_flags以避免系统重新启动时sendmail自动启动。
sendmail_flags=”-q30m”改为sendmail_flags=NO
第二节、安装qmail
假如一直按照手册的例子进行练习,那么现在应该可以访问CD-ROM,假如系统曾经重新启动,那么
请按照第三课、第一节的内容来访问CD-ROM。
进入/mnt/packages目录并安装qmail执行代码包
cd/mnt/packages
pkg_addqmail-1.03.tgz
安装的过程中会询问是否添加一些组和用户,默认选择Y,不用改变,直接回车继续就可以了。一定
要记录qmaild的uid和nofiles的gid,因为在以后的课程中启动smtp和pop的时候需要它们(例如qmaild的
uid是2850,nofiles的gid是32750)。Qmail被安装到/var/qmail目录。
第三节、配置qmail
要配置和运行需要DNS正确运行,假如还没有配置DNS服务,请按照第二课的内容进行配置。
首先执行以下的命令建立新的sendmail链接,以实现和sendmail的兼容
ln–s/var/qmail/bin/sendmail/usr/sbin/sendmail
然后建立基础的域信息,使用下面的命令来完成
/var/qmail/setup/config-fast01tech.nat
当然,也可以通过/var/qmail/setup/config来设置基础域信息,不过既然DNS正常,为什么不使用更
快捷的方法呢?config的用法请参考/var/qmail/doc里面的文档。
复制rc文件,并对其进行修改,让它和sendmail兼容
cp/var/qmail/boot/home/var/qmail/rc
qmail默认使用Mailbox,而sendmail默认使用Maildir,很多的程序都根据sendmail规则来编写,需
要使用Maildir,所以需要更改rc文件,作出以下的更改
Mailbox改为Maildir
第四节、测试qmail
安装和配置完成之后当然要测试一下qmail的运作是否正常了,执行以下的命令启动qmail服务
csh–cf‘/var/qmail/rc%26amp;’%26gt;/dev/null%26amp;
然后使用以下的命令查看是否存在qmail-lspawn./Maildir。假如已经存在,则证实qmail服务已经
正常启动,假如没有找到,就需要按照第三节的内容重新配置。
ps-x
第五节、启动系统时自动运行qmail服务
首先修改/etc/rc.conf文件,添加以下的内容
qmail_flags=””
然后修改/etc/rc文件,找到sendmail的启动代码,在后面添加以下的代码
if[“X${qmail_flags}”!=X”NO”];then
echo–n‘qmail’;csh–cf‘/var/qmail/rc%26amp;’%26gt;/dev/null%26amp;
fi
第五课、分离系统用户和邮件用户
我们使用vpopmail来分离系统用户和邮件用户,这样可以提高系统的安全性。而且vpopmail还可以
使用虚拟域名,也就是同一个IP的不同域名的邮箱。
第一节、展开源代码包
进入/usr/src目录,并解压vpopmail-4.9.8源代码包,然后进入vpopmail-4.9.8目录
cd/usr/src
tarzxvf/mnt/packages/vpopmail-4.9.8.tar.gz
cdvpopmail-4.9.8
第二节、使用MySQL支持
假如您的系统没有提供MySQL支持,请跳过这一步。
修改vmysql.h文件,找到其中的一行内容为
#defineMYSQL_PASSWORD“gipgap”
把里面的gipgap替换成为可以访问MySQL的系统治理员口令123456:
#defineMYSQL_PASSWORD“123456”
第三节、添加组和用户
编译和运行vpopmail,需要vchkpw组和属于vchkpw组的vpopmail用户。使用以下的命令添加组和用户
groupaddvchkpw
useradd–gvchkpwvpopmail
第四节、预备/etc/tcp.smtp文件
要编译vpopmail需要有tcp.smtp文件,默认的存放路径是/etc目录,通过下面的命令产生该文件
echo‘127.0.0.:allow,RELAYCLIENT=””’%26gt;/etc/tcp.smtp
第五节、运行配置程序
运行配置程序configure,获取编译所需的编译器,外部环境等信息
./configure--enable-default-domain=01tech.nat\
--enable-admin-email=zenz-hu@01tech.nat\
--enable-mysql=y\
--enable-sqlincdir=/usr/local\
--enable-sqllibdir=/usr/local\
--enable-large-site=y\
--enable-passwd=n\
--enable-hardquota=8000000
解释一下各项的含义--enable-default-domain=01tech.nat指定默认的邮件域是
01tech.nat;--enable-admin-email=zenz-hu@01tech.nat说明治理员的邮箱;--enable-mysql=y告诉编
译器要使用MySQL数据库作口令检查服务;--enable-sqlincdir=/usr/local和—enable-sqllibdir=/usr/local
告诉编译器到哪里寻找MySQL的头文件和库文件;--enable-large-site=y用于把域信息保存到MySQL数据库中,
但是假如有太多的虚拟域则不适宜采用本项;--enable-passwd=n告诉系统不在/etc/passwd口令文件中
查找邮箱用户的口令;--enable-hardquota=8000000限制每个用户的邮箱大小为8Mb。
第六节、编译并安装vpopmail
只需要简单的命令,即可编译并安装vpopmail
make
makeinstall-strip
安装后的vpopmail在/home/vpopmail目录下。
第七节、添加邮件域和更改postmaster口令
现在的vpopmail还没有邮件域,即使在编译的时候指定了默认的邮件域也一样需要通过执行以下的
程序来添加邮件域
/home/vpopmail/bin/vadddomain01tech.nat
系统会询问属于这个域的postmaster的口令并要求确认,输入123456作为口令吧(记住,这里使用的
任何口令都不应该在实际应用中出现,否则您的系统会有很大的安全问题)!
假如在这个步骤出现错误提示,那么您很可能需要重新进行本课的练习了。
第八节、启动smtp和pop3服务
要用户可以用smtp方式发送邮件以及使用pop3方式接受邮件,需要修改/etc/rc文件,在qmail启动代
码后面添加以下的代码
if[-x/home/vpopmail/bin/vchkpw];then
echo–n‘smtpd’
/usr/local/bin/tcpserver–u2850–g327500smtp\
/var/qmail/bin/qmail-smtpd2%26gt;%26amp;1%26gt;/dev/null%26amp;
echo–n‘popd’
/usr/local/bin/tcpserver0pop3\
/var/qmail/bin/qmail-popuppop.01tech.nat\
/home/vpopmail/bin/vchkpw\
/var/qmail/bin/qmail-pop3dMaildir%26amp;
fi
经过上面的修改,系统在每次重新启动之后,都会自动启动smtp和pop3服务了。
vpopmail的治理手册在/home/vpopmail/doc目录中。
假如您的电脑不支持光盘启动,请首先在DOS下进行以下的步骤,制作启动软盘,然后从软盘
启动电脑。(其中e:是光盘所在盘符)
e:\2.8\tools\fdimagee:\2.8\i386\floppy28.fsa:
假如您的电脑支持光盘启动,直接从光盘启动后,按照提示一步一步完成安装,以下是安装
过程的简略描述
第一节、建立分区
启动电脑直到出现以下的提示
(I)nstall,(U)pgradeor(S)hell?
其中(I)代表安装一个全新的系统,(U)代表升级原有的OpenBSD旧版本,(S)代表退出到命令行状态。
我们要安装一个全新的系统,所以输入I并回车。
在一屏欢迎辞之后,系统询问使用什么终端类型
Specifyterminaltype[pcvt25]:
不用理会它,直接回车,继续以后的步骤。系统将检测到可用的硬盘,并询问对那个硬盘进行处理
Availabledisksare:
wd0
Whichdiskistherootdisk?[wd0]
上面的提示表明,电脑只有一个IDE硬盘,假如是SCSI硬盘,将显示成sd0。因为系统只有一个硬盘,
所以安装程序已经帮我们选择了硬盘,假如系统有多个硬盘,那就必须输入硬盘的名称,如wd1。现
在直接回车进入下一步。
系统询问是否把整个硬盘给OpenBSD使用
Doyouwanttousethe*entire*diskforOpenBSD?[no]
默认是no,不过手册是要做服务器,所以输入yes并回车吧!不过首先要确认这个硬盘上面没有重要
的数据啊!
现在系统会进入fdisk(一个分区程序,输入?并回车可以获得使用帮助)。首先用d命令删除原有的
分区(注重,c分区被OpenBSD系统保留使用,不能够删除或变更),然后用a命令新建分区,您将得
到和下面类似的信息
offset:[xxxxxx]
size:[xxxxxxxxxx]
Roundingtonearestcylinder:xxxxxxxx
FStype:[4.2BSD]
mountpoint:[none]
其中,offset是指每一个分区的偏移地址。不用理会,直接回车即可,系统会自动处理。size是分区
的大小,括号里面是剩余的可用磁盘空间大小。可以直接用80m这样的输入来表示分区的大小为80Mb。
Roundingtonearestcylinder由系统返回,是转换成柱头数,不必理会。FStype是文件系统类型,
只有4.2BSD和swap两个可选项。默认情况下,b分区会使用swap选项。swap分区建议大小为内存大小
的2倍。mountpoint相当于DOS系统的目录,系统必须有且只有一个根目录“/”,swap分区无需
mountpoint。
可以简单的把swap分区以外的全部磁盘空间定义为“/”,但是不建议这么做,因为一旦磁盘出现问题,
就难于根据分区进行修复了。假如您有一个15Gb的硬盘,并且有128Mb的内存,那么建议划分如下
a80m4.2BSD/;根目录
b300mswap;交换分区
d80m4.2BSD/tmp;临时文件目录
e800m4.2BSD/usr;应用程序目录
f2000m4.2BSD/var;应用数据目录
g剩余空间4.2BSD/home;用户目录
假如安装MySQL数据库服务,且要求方便治理的话,那么可以把/var/mysql单独出来一个分区(会在后
面提及)。
划分好分区之后用w命令保存分区信息,q命令退出fdisk程序。
Thefollowingpartitionswillbeusedfortherootfilesystemandswap:
wd0a/
wd0bswap
Mountpointforwd0d(size=98967k)[/tmp,RET,none,ordone]?
系统会再次确认目录分配,可以给粗心大意的人一个修正的机会,假如确定没有错误的话,输入done并
回车即可。
系统会提示是否对其他硬盘进行处理,假如没有其他硬盘或者不需要处理,输入done并回车继续下一个
步骤,假如配置其他硬盘,按照上面的步骤进行即可。注重千万不要对已经配置过的硬盘进行再配置。
系统询问是否进行格式化
Thenextstepwilloverwriteanyexistingdataon:
wd0awd0dwd0ewd0fwd0g
Areyoureallysurethatyou'rereadytoproceed?[n]
当然输入y并回车了,做了这么多,难道不继续吗?
第二节、配置网络
经过硬盘格式化之后,系统将询问是否配置网络
Configurethenetwork[y]
既然是做服务器,当然要网络支持的,回车开始配置网络。
Entersystemhostname(shortform):[]
EnterDNSdomainname:[]
输入hostname(主机名)和domainname(域名),假如有合法的国际域名的话,就使用国际域名。先假
设hostname为moo,domainname为01tech.nat(避免和国际域名冲突)。
系统提示配置网卡,手册例子使用的是DE-530TX10/100Mbps自适应网卡,在OpenBSD下面的设备名为vr0,
假如是NE2000兼容网卡,可能显示为ne0,系统会自动检测并列出来
Youmayconfigurethefollowingnetworkinterfaces(theinterfaces
markedwith[X]havebeensuccesfullyconfigured):
[]vr0
Configurewhichinterface?(or,enter'done')[vr0]
在本例中,系统只有一个网卡,且已经选定,直接回车开始配置,假如没有选定,请输入设备名并回车
进行配置。
IPaddress(or'dhcp')?[]
Symbolic(host)name?[moo]
Netmask?[255.255.255.0]
在IPaddress中输入dhcp并回车将会使用动态分配的IP地址,作为服务器应该有固定的IP地址,所以这
里应该输入192.168.32.1并回车(关于IP地址和掩码的知识请参考其他文章)。Symbolic(host)name其
实就是hostname啦!系统会自动使用刚才输入的hostname,直接回车就可以了。Netmask(掩码)默认
是255.255.255.0,就用这个吧,回车继续。
Youruseofthenetworkinterfacemayrequirenon-default
mediadirectives.Thedefaultmediais:
media:Ethernetautoselect(100baseTXfull-duplex)
Thisisalistofsupportedmedia:
mediaautoselect
media100baseTXmediaoptfull-duplex
media100baseTX
media10baseTmediaoptfull-duplex
media10baseT
Ifthedefaultisnotsatisfactory,andyouwishtouseanother
media,copythatlinefromabove(e.g."media100baseTX")
Mediadirectives?[]
别看这么多信息,其实就做一个事,选择网卡的接入网络方式,最简单的方式就是选择mediaautoselect
并回车。
系统会询问是否配置其他的网卡,假如系统只有一个网卡的话,会自动选定done,只需要回车即可进入下
一个步骤。其他网卡的配置象上面一样配置就可以了。
EnterIPaddressofdefaultroute:[none]
EnterIPaddressofprimarynameserver:[none]
Wouldyouliketousethenameservernow?[y]
路由route不需要输入,除非要链接到不同域的机器。因为要在这台服务器上提供域名解释服务,所以
nameserver就指向自己吧,也就是输入192.168.32.1就可以了。至于是否现在启动nameserver就没所谓了。
回车继续。
第三节、设置治理员口令
Pleaseentertheinitialpasswordthattherootaccountwillhave.
系统要求输入治理员口令,并确认一次,千万要记住啊,不然电脑重新启动之后进入不了系统进行治理。
这里假设口令为123456,在实际的应用中千万不要使用这样的口令,而应该采用字母、字符和数字混合
的口令。
第四节、安装应用程序
然后安装程序询问是否会运行XWindow
DoyouexpecttoruntheXWindowSystem?[y]
当然不会,输入n并回车继续下一步。选择安装媒体介质。
Installfrom(f)tp,(h)ttp,(t)ape,(C)D-ROM,(N)FSorlocal(d)isk?
有多种方式安装系统,我们只选择(C),通过CD-ROM安装。
ThefollowingCD-ROMdevicesareinstalledonyoursystem;
pleasemake
suretheCDisintheCD-ROMdriveandselectthedevicecontaining
theCDwiththeinstallationsets:
cd0
WhichCD-ROMcontainstheinstallationmedia?[cd0]
系统将检测可用的CD-ROM,并给予选定,这里是只有一个CD-ROM的状态,假如多于一个CD-ROM的状况,
请选择正确的放有安装光盘的CD-ROM,否则安装程序会Halt在那里,无法继续。
Enterthedirectoryrelativetothemountpointthat
containsthefile.[/2.8/i386]
确认安装文件所在目录,假如您使用01TECH上面提供的光盘,回车确认即可。
Thefollowingsetsareavailableforextraction.
Enterfilename,`list',`all',or`done'.
Youmayde-selectasetbyprependinga'-'toitsname.
[X]base28.tgz
[X]etc28.tgz
[]misc28.tgz
[]comp28.tgz
[X]man28.tgz
[]game28.tgz
[]xbase28.tgz
[]xshare28.tgz
[]xfont28.tgz
[]xserv28.tgz
[X]bsd
Filename?[]
因为安装服务器,我们只需要上面已经打“X”的的程序包,另外,因为有部分程序必须由源程序编译
获得,所以必须选择comp28.tgz。也就是说要有base28.tgz、etc28.tgz、comp28.tgz、man28.tgz以
及bsd。
确认这五个项前面都打“X”后,输入done并回车,询问
Readytoextractselectedfilesets?[y]
当然要解包,这个问题实在有点弱智啊!
Extractmoresets?[n]
嗯?上帝说,再给你一个忏悔的机会?别管他,回车继续吧!
第五节、设定时区
然后就是选择时区
Whattimezoneareyouin?[`?'forlist][GMT]
可以用?查看一下有什么可以选择的时区,不过确定没有北京时间,选香港的吧,输入Hongkong并回车。
系统一番自动处理之后,终于出现了命令行模式的提示符“#”。恭喜,OpenBSD2.8到此安装完毕。
输入reboot回车,重新启动电脑吧!记住改为硬盘启动啊!现在可以歇一歇了。
重新启动电脑之后,用root作为用户名,123456作为密码就可以登录您的OpenBSD2.8系统了。
第二课、设置域名解释服务
首先解释一下域名服务(DNS-DomainNameServer)的作用。其实,链接到网络的电脑,只需要知
道IP地址就可以实现访问。但是谁会去记住129.128.5.191这个IP地址是代表OpenBSD的服务器呢?当然
是www.openbsd.org轻易记忆得多了。域名服务所实现的作用,就是把www.openbsd.org这样的名字转换
成电脑可以识别的129.128.5.191这样的IP地址。
所以域名解释服务应当包含两种转换过程从名字到IP地址(正向解释);从IP地址到名字(反向
解释)。理解了这些基本感念,配置域名解释服务得时候就会比较轻易了。
第一节、设置named.boot文件
OpenBSD2.8系统在安装完成后就已经有域名解释服务程序named4.9.7-REL,只是需要人工设定启
动。named的配置文件在/var/named目录里面,文件名是named.boot。一个简单的,可以使用的(当然是
和手册的例子联系起来啦!)的named.boot的文件内容如下
directory/namedb
cache.root.cache
primary0.0.127.IN-ADDR.ARPAlocalhost.rev
primary32.168.192.IN-ADDR.ARPA01tech.rev
primary01tech.nat01tech
可以用vi工具来编辑这个文件(vi的使用方法请参考『附录4』)。解释一下这个文件各行的含义
第一行用于指定域名解释文件所在目录,其实真正的域名解释文件是放在/var/named/namedb目录里
面,因为我们将采用chroot的方式(执行程序的时候切换到程序需要的用户,并以改用户的根目录作为
根目录的方式)执行named,所以这里是/namedb。
第二行指定了缓存文件,对于曾经访问过的域名,将会记录在缓存文件里面,以后查询的时候就会
快很多。缓存文件的文件名是root.cache。
第三行指定了对于本机的域名反解文件。0.0.127.IN-ADDR.ARPA的写法其实就是说要反过来求
127.0.0.x(x的范围是1~255)的对应名称。相关的解释文件是localhost.rev
第四行和第三行同理,就是要求192.168.32.x的对应名称。相关的解释文件是01tech.rev
第五行是正解,指定凡是域名为01tech.nat的名称都交给01tech文件进行解释。
第二节、配置域名解释文件
然后,我们看看/var/namedb目录里面的文件的内容,在系统没有配置域名解释服务的时候,默认
只有两个文件localhost.rev和root.cache,其中的localhost.rev并非我们需要的内容,要自行改写,
改写后的内容如下
@INSOAmoo.01tech.nat.root.moo.01tech.nat.(
14;Serial
3600;Refresh
900;Retry
3600000;Expire
3600);Minimum
INNSmoo.01tech.nat.
1INPTRlocalhost.
解释一下这个文件的构成吧!其实这个文件由三个RR(Resourcerecord)构成,或者我们用表格的
方式来分析,会比较轻易理解吧
[name][ttl][class]typedata
@省略INSOA……
省略省略INNS……
1省略INPTR……
Name必须为主机名或者域名,当使用@时代表缩写,就是和named.boot文件中指定的一样,在这里就代
表127.0.0.x了。
ttl是指此条数据的有效保存期限,通常都忽略掉,采用默认的ttl值。
class指定网络类型,IN代表Internet,基本上都不会使用别的类型。
type常见的有SOA、NS、A、PTR、MX、CNAME等。
SOA(StartOfAuthority)后面跟负责这个域的主机,治理员邮箱,序列号,副解释域更新间隔,副解
释域更新失败重试间隔,主解释域失败时副解释域提供数据的有效期限,其他域名解释服务器保留本域
名解释服务器的时间。需要注重的是,在主机和治理员邮箱后一定不能缺少“.”否则系统会自动加上
完整的域名,例如只写moo的话,系统会添加为moo.01tech.nat。所以也可以简单的把SOA语句写
作SOAmooroot.moo(……)。
NS(NameServer)后面跟指定的提供域名解释服务的主机名
PTR(Pointer)后面是对应于前面IP地址的名称。
A(Address)后面是对应于前面的名称的IP地址。需要注重正解的A和反解的PTR的记录必须相符,否则会
造成DNS查询不正常,系统变慢。
CNAME用于建立别名,这样访问别名的时候,就会转为访问正式的名称。
MX记录的是一串目的地址列表,用于告诉邮件服务器传送信件的优先顺序。
对于A、CNAME、MX的使用方法将会在后面的正解文件中看到,以后将不再作出解释。
01tech.rev的文件内容和localhost.rev文件基本相同,如下
@INSOAmoo.01tech.nat.root.moo.01tech.nat.(
14;Serial
3600;Refresh
900;Retry
3600000;Expire
3600);Minimum
INNSmoo.01tech.nat.
1INPTRmoo.01tech.nat.
01tech的内容如下
@INSOAmoo.01tech.nat.root.moo.01tech.nat.(
14;Serial
3600;Refresh
900;Retry
3600000;Expire
3600);Minimum
INNSmoo.01tech.nat.
INMX5pop.01tech.nat.
mooINA192.168.32.1
wwwINCNAMEmoo
popINCNAMEmoo
smtpINCNAMEmoo
localhost.INCNAMEmoo
01tech.nat.INCNAMEmoo
第三节、测试DNS
好了,说了一大堆的东西,需要好好消化,不过我们还是看看我们的DNS是否正常吧,通过以下
的命令启动named
named–t/var/named
然后用nslookup来检查DNS是否正常。以下是nslookup运行的结果,任何时候假如域名不能解释,
通过按Ctrl+C可以中断查询。
nslookup
DefaultServer:moo.01tech.nat
Address:192.168.32.1
%26gt;pop
Server:moo.01tech.nat
Address:192.168.32.1
Name:moo.01tech.nat
Address:192.168.32.1
Aliases:pop.01tech.nat
%26gt;exit
假如您完全按照手册的例子来配置您的DNS,但是查询却没有这样的结果,那么您需要重新再来,
好好吃透上面的说明了。
第四节、在启动系统的时候自动启动DNS
要使系统在启动时自动启动DNS服务非常简单,修改/etc/rc.conf文件里面的相关项就可以了
named_flags=NO改为named_flags=””
第三课、配置数据库服务
假如您不需要数据库服务可以略过本课,但是后面的课程中相当部分和本课有关,所以即使不打算
配置数据库服务,也应该看看本课的内容。
MySQL数据库是目前最受欢迎的免费数据库,由于具有优异的效率和简洁的控制方式,所以被众多
的服务商采用。尽管它还有一些不足,例如不支持事务和子选择,但这些缺陷可以通过编程解决。
在本手册开始写作的时候,MySQL的最新稳定版本是3.23.32,还没有OpenBSD的port(OpenBSD中的
每一个应用都是一个port),所以我们在手册光盘中包含了它的源代码包,并写作了本课以教导您如何
在OpenBSD下面编译并安装MySQL。
第一节、展开MySQL源代码包
首先需要让系统可以读取光盘(因为源代码包在光盘里面啊!),方法非常简单,只需执行以下
的命令即可
mount/dev/cd0c/mnt
然后转入/usr/src目录,把MySQL-3.23.32的源代码包解压
cd/usr/src
tarzxvf/mnt/packages/mysql-3.23.32.tar.gz
这样,在/usr/src目录下面就会有一个名为mysql-3.23.32的目录,里面就是MySQL-3.23.32的源
代码。为了继续后面的工作,我们需要进入该目录。
cdmysql-3.23.32
第二节、为MySQL服务程序建立所需的组和用户
要正确编译和安装MySQL数据库服务程序,需要建立mysql组和属于mysql组的mysql用户。在以后
运行MySQL数据库服务程序的时候同样需要它们,建立的方法如下
groupaddmysql
useradd–gmysqlmysql
第三节、运行配置程序
因为要编译源代码必须先获得和系统相关的信息,包括编译器版本,系统支持的线程方式
(OpenBSD是一个支持多线程的系统)等。因此需要运行配置程序以获取这些信息。
./configure--prefix=/usr/local\
--localstatedir=/var/mysql\
--with-low-memory\
--without-bench\
--without-debug
我们解释一下配置程序里面各行的含义。./configure就是要执行的配置程序了;--prefix=/usr/local
表示,编译后的MySQL数据库服务程序将会安装到/usr/local/bin目录当中,而库文件会安装到
/usr/local/lib/mysql目录中,头文件将安装到/usr/local/include目录中;--localstatedir=/var/mysql
表示数据库所用到的数据将会安装到/var/mysql目录中(我们在安装OpenBSD的时候提到假如需要,
可以为/var/mysql建立一个独立的分区就是这个原因,这样可以方便治理);--with-low-memory这一
句至关重要,没有了它,基本上就不要指望在您的机器上面通过编译,除非您拥有超过1Gb的内存,这句
会指导编译程序使用交换分区作为虚拟内存;--without-bench和—without-debug告诉编译器和安装脚本
不需要测试程序和调试信息。
好了,解释得够清楚吗?
第四节、编译和安装MySQL
这个步骤非常简单,只需要执行下面的命令即可,其他得事情由电脑来完成。因为编译的过程非常久,
可以喝杯水歇一歇。
make
makeinstall
makeinit-db
第五节、测试MySQL
对不起,本节的标题有点含糊。这里的测试是指测试MySQL的编译和安装是否正常。为了测试MySQL
是否被正确编译和安装,需要执行以下的命令
/usr/local/bin/safe_mysqld%26gt;/dev/null%26amp;
/usr/local/bin/mysqladmin–urootpassword‘123456’
假如第二条命令无声无息地结束了,那么就证实MySQL可以正常使用了。对了,第二条命令其实是更
改系统治理员的口令啊!那么您知道以后使用MySQL程序的时候需要的口令了吗?
第六节、让MySQL在系统启动的时候自动启动
我们需要做一些工作来让MySQL在系统启动的时候自动启动。首先我们修改/etc/rc.conf文件,添加
以下的行
mysqld_flags=””
然后,需要修改/etc/rc文件,找到启动named的代码(第171行),添加以下的代码
if[“X${mysqld_flags}”!=X”NO”];then
echo‘startingmysqld’
/usr/local/bin/safe_mysqld%26gt;/dev/null%26amp;
fi
另外,为了让其他需要用到MySQL的程序编译可以顺利通过,就需要在/etc/rc.local文件中添加以
下的代码
if[“X${mysqld_flags}”!=X”NO”];then
/sbin/ldconfig–m/usr/local/lib/mysql
fi
第四课、配置邮件服务
其实OpenBSD2.8在系统安装完成之后,就已经安装且启动了邮件服务sendmail。我们在这里需要为
OpenBSD找一个比sendmail更加安全、更加轻易使用和高效能的邮件服务程序,我们选择了qmail(利用
qmail加上vpopmail可以把系统用户和邮件用户分离,并且使用虚拟邮件域。再加上MySQL就可以实现邮件
用户的数据库口令校验,这是我选择qmail的原因)。
第一节、关闭sendmail
因为qmail作为sendmail的替代服务程序,不能和sendmail一起工作,所以必须先关闭sendmail程序。
执行以下的命令关闭正在执行的sendmail程序。
Kill–9`cat/var/run/sendmail.pid`
同时,必须把sendmail相关的链接删除,并把senmail更名
chmod0/usr/sbin/sendmail/usr/sbin/sendmail.old
最后还必须修改/etc/rc.conf文件,更改sendmail_flags以避免系统重新启动时sendmail自动启动。
sendmail_flags=”-q30m”改为sendmail_flags=NO
第二节、安装qmail
假如一直按照手册的例子进行练习,那么现在应该可以访问CD-ROM,假如系统曾经重新启动,那么
请按照第三课、第一节的内容来访问CD-ROM。
进入/mnt/packages目录并安装qmail执行代码包
cd/mnt/packages
pkg_addqmail-1.03.tgz
安装的过程中会询问是否添加一些组和用户,默认选择Y,不用改变,直接回车继续就可以了。一定
要记录qmaild的uid和nofiles的gid,因为在以后的课程中启动smtp和pop的时候需要它们(例如qmaild的
uid是2850,nofiles的gid是32750)。Qmail被安装到/var/qmail目录。
第三节、配置qmail
要配置和运行需要DNS正确运行,假如还没有配置DNS服务,请按照第二课的内容进行配置。
首先执行以下的命令建立新的sendmail链接,以实现和sendmail的兼容
ln–s/var/qmail/bin/sendmail/usr/sbin/sendmail
然后建立基础的域信息,使用下面的命令来完成
/var/qmail/setup/config-fast01tech.nat
当然,也可以通过/var/qmail/setup/config来设置基础域信息,不过既然DNS正常,为什么不使用更
快捷的方法呢?config的用法请参考/var/qmail/doc里面的文档。
复制rc文件,并对其进行修改,让它和sendmail兼容
cp/var/qmail/boot/home/var/qmail/rc
qmail默认使用Mailbox,而sendmail默认使用Maildir,很多的程序都根据sendmail规则来编写,需
要使用Maildir,所以需要更改rc文件,作出以下的更改
Mailbox改为Maildir
第四节、测试qmail
安装和配置完成之后当然要测试一下qmail的运作是否正常了,执行以下的命令启动qmail服务
csh–cf‘/var/qmail/rc%26amp;’%26gt;/dev/null%26amp;
然后使用以下的命令查看是否存在qmail-lspawn./Maildir。假如已经存在,则证实qmail服务已经
正常启动,假如没有找到,就需要按照第三节的内容重新配置。
ps-x
第五节、启动系统时自动运行qmail服务
首先修改/etc/rc.conf文件,添加以下的内容
qmail_flags=””
然后修改/etc/rc文件,找到sendmail的启动代码,在后面添加以下的代码
if[“X${qmail_flags}”!=X”NO”];then
echo–n‘qmail’;csh–cf‘/var/qmail/rc%26amp;’%26gt;/dev/null%26amp;
fi
第五课、分离系统用户和邮件用户
我们使用vpopmail来分离系统用户和邮件用户,这样可以提高系统的安全性。而且vpopmail还可以
使用虚拟域名,也就是同一个IP的不同域名的邮箱。
第一节、展开源代码包
进入/usr/src目录,并解压vpopmail-4.9.8源代码包,然后进入vpopmail-4.9.8目录
cd/usr/src
tarzxvf/mnt/packages/vpopmail-4.9.8.tar.gz
cdvpopmail-4.9.8
第二节、使用MySQL支持
假如您的系统没有提供MySQL支持,请跳过这一步。
修改vmysql.h文件,找到其中的一行内容为
#defineMYSQL_PASSWORD“gipgap”
把里面的gipgap替换成为可以访问MySQL的系统治理员口令123456:
#defineMYSQL_PASSWORD“123456”
第三节、添加组和用户
编译和运行vpopmail,需要vchkpw组和属于vchkpw组的vpopmail用户。使用以下的命令添加组和用户
groupaddvchkpw
useradd–gvchkpwvpopmail
第四节、预备/etc/tcp.smtp文件
要编译vpopmail需要有tcp.smtp文件,默认的存放路径是/etc目录,通过下面的命令产生该文件
echo‘127.0.0.:allow,RELAYCLIENT=””’%26gt;/etc/tcp.smtp
第五节、运行配置程序
运行配置程序configure,获取编译所需的编译器,外部环境等信息
./configure--enable-default-domain=01tech.nat\
--enable-admin-email=zenz-hu@01tech.nat\
--enable-mysql=y\
--enable-sqlincdir=/usr/local\
--enable-sqllibdir=/usr/local\
--enable-large-site=y\
--enable-passwd=n\
--enable-hardquota=8000000
解释一下各项的含义--enable-default-domain=01tech.nat指定默认的邮件域是
01tech.nat;--enable-admin-email=zenz-hu@01tech.nat说明治理员的邮箱;--enable-mysql=y告诉编
译器要使用MySQL数据库作口令检查服务;--enable-sqlincdir=/usr/local和—enable-sqllibdir=/usr/local
告诉编译器到哪里寻找MySQL的头文件和库文件;--enable-large-site=y用于把域信息保存到MySQL数据库中,
但是假如有太多的虚拟域则不适宜采用本项;--enable-passwd=n告诉系统不在/etc/passwd口令文件中
查找邮箱用户的口令;--enable-hardquota=8000000限制每个用户的邮箱大小为8Mb。
第六节、编译并安装vpopmail
只需要简单的命令,即可编译并安装vpopmail
make
makeinstall-strip
安装后的vpopmail在/home/vpopmail目录下。
第七节、添加邮件域和更改postmaster口令
现在的vpopmail还没有邮件域,即使在编译的时候指定了默认的邮件域也一样需要通过执行以下的
程序来添加邮件域
/home/vpopmail/bin/vadddomain01tech.nat
系统会询问属于这个域的postmaster的口令并要求确认,输入123456作为口令吧(记住,这里使用的
任何口令都不应该在实际应用中出现,否则您的系统会有很大的安全问题)!
假如在这个步骤出现错误提示,那么您很可能需要重新进行本课的练习了。
第八节、启动smtp和pop3服务
要用户可以用smtp方式发送邮件以及使用pop3方式接受邮件,需要修改/etc/rc文件,在qmail启动代
码后面添加以下的代码
if[-x/home/vpopmail/bin/vchkpw];then
echo–n‘smtpd’
/usr/local/bin/tcpserver–u2850–g327500smtp\
/var/qmail/bin/qmail-smtpd2%26gt;%26amp;1%26gt;/dev/null%26amp;
echo–n‘popd’
/usr/local/bin/tcpserver0pop3\
/var/qmail/bin/qmail-popuppop.01tech.nat\
/home/vpopmail/bin/vchkpw\
/var/qmail/bin/qmail-pop3dMaildir%26amp;
fi
经过上面的修改,系统在每次重新启动之后,都会自动启动smtp和pop3服务了。
vpopmail的治理手册在/home/vpopmail/doc目录中。





