FreeBSD kernel 編譯大法(三)編kernel失敗的處理
2024-07-26 00:29:12
供稿:網(wǎng)友
第一課、安裝OpenBSD 2.8
如果您的電腦不支持光盤啟動(dòng),請首先在DOS下進(jìn)行以下的步驟,制作啟動(dòng)軟盤,然后從軟盤
啟動(dòng)電腦。(其中e:是光盤所在盤符)
e:/2.8/tools/fdimage e:/2.8/i386/floppy28.fs a:
如果您的電腦支持光盤啟動(dòng),直接從光盤啟動(dòng)后,按照提示一步一步完成安裝,以下是安裝
過程的簡略描述:
第一節(jié)、建立分區(qū)
啟動(dòng)電腦直到出現(xiàn)以下的提示:
(I)nstall, (U)pgrade or (S)hell?
其中(I)代表安裝一個(gè)全新的系統(tǒng),(U)代表升級原有的OpenBSD舊版本,(S)代表退出到命令行狀態(tài)。
我們要安裝一個(gè)全新的系統(tǒng),所以輸入I并回車。
在一屏歡迎辭之后,系統(tǒng)詢問使用什么終端類型:
Specify terminal type [pcvt25]:
不用理會它,直接回車,繼續(xù)以后的步驟。系統(tǒng)將檢測到可用的硬盤,并詢問對那個(gè)硬盤進(jìn)行處理:
Available disks are:
wd0
Which disk is the root disk? [wd0]
上面的提示表明,電腦只有一個(gè)IDE硬盤,如果是SCSI硬盤,將顯示成sd0。因?yàn)橄到y(tǒng)只有一個(gè)硬盤,
所以安裝程序已經(jīng)幫我們選擇了硬盤,如果系統(tǒng)有多個(gè)硬盤,那就必須輸入硬盤的名稱,如wd1。現(xiàn)
在直接回車進(jìn)入下一步。
系統(tǒng)詢問是否把整個(gè)硬盤給OpenBSD使用:
Do you want to use the *entire* disk for OpenBSD? [no]
默認(rèn)是no,不過手冊是要做服務(wù)器,所以輸入yes并回車吧!不過首先要確認(rèn)這個(gè)硬盤上面沒有重要
的數(shù)據(jù)啊!
現(xiàn)在系統(tǒng)會進(jìn)入fdisk(一個(gè)分區(qū)程序,輸入?并回車可以獲得使用幫助)。首先用d命令刪除原有的
分區(qū)(注意,c分區(qū)被OpenBSD系統(tǒng)保留使用,不能夠刪除或變更),然后用a命令新建分區(qū),您將得
到和下面類似的信息:
offset: [xxxxxx]
size: [xxxxxxxxxx]
Rounding to nearest cylinder: xxxxxxxx
FS type: [4.2BSD]
mount point: [none]
其中,offset是指每一個(gè)分區(qū)的偏移地址。不用理會,直接回車即可,系統(tǒng)會自動(dòng)處理。size是分區(qū)
的大小,括號里面是剩余的可用磁盤空間大小。可以直接用80m這樣的輸入來表示分區(qū)的大小為80Mb。
Rounding to nearest cylinder由系統(tǒng)返回,是轉(zhuǎn)換成柱頭數(shù),不必理會。FS type是文件系統(tǒng)類型,
只有4.2BSD和swap兩個(gè)可選項(xiàng)。默認(rèn)情況下,b分區(qū)會使用swap選項(xiàng)。swap分區(qū)建議大小為內(nèi)存大小
的2倍。mount point相當(dāng)于DOS系統(tǒng)的目錄,系統(tǒng)必須有且只有一個(gè)根目錄“/”,swap分區(qū)無需
mount point。
可以簡單的把swap分區(qū)以外的全部磁盤空間定義為“/”,但是不建議這么做,因?yàn)橐坏┐疟P出現(xiàn)問題,
就難于根據(jù)分區(qū)進(jìn)行修復(fù)了。如果您有一個(gè)15Gb的硬盤,并且有128Mb的內(nèi)存,那么建議劃分如下:
a 80m 4.2BSD / ;根目錄
b 300m swap ;交換分區(qū)
d 80m 4.2BSD /tmp ;臨時(shí)文件目錄
e 800m 4.2BSD /usr ;應(yīng)用程序目錄
f 2000m 4.2BSD /var ;應(yīng)用數(shù)據(jù)目錄
g 剩余空間 4.2BSD /home ;用戶目錄
如果安裝MySQL數(shù)據(jù)庫服務(wù),且要求方便管理的話,那么可以把/var/mysql單獨(dú)出來一個(gè)分區(qū)(會在后
面提及)。
劃分好分區(qū)之后用w命令保存分區(qū)信息,q命令退出fdisk程序。
The following partitions will be used for the root filesystem and swap:
wd0a /
wd0b swap
Mount point for wd0d (size=98967k) [/tmp, RET, none, or done]?
系統(tǒng)會再次確認(rèn)目錄分配,可以給粗心大意的人一個(gè)修正的機(jī)會,如果確定沒有錯(cuò)誤的話,輸入done并
回車即可。
系統(tǒng)會提示是否對其他硬盤進(jìn)行處理,如果沒有其他硬盤或者不需要處理,輸入done并回車?yán)^續(xù)下一個(gè)
步驟,如果配置其他硬盤,按照上面的步驟進(jìn)行即可。注意千萬不要對已經(jīng)配置過的硬盤進(jìn)行再配置。
系統(tǒng)詢問是否進(jìn)行格式化:
The next step will overwrite any existing data on:
wd0a wd0d wd0e wd0f wd0g
Are you really sure that you're ready to PRoceed? [n]
當(dāng)然輸入y并回車了,做了這么多,難道不繼續(xù)嗎?
第二節(jié)、配置網(wǎng)絡(luò)
經(jīng)過硬盤格式化之后,系統(tǒng)將詢問是否配置網(wǎng)絡(luò):
Configure the network [y]
既然是做服務(wù)器,當(dāng)然要網(wǎng)絡(luò)支持的,回車開始配置網(wǎng)絡(luò)。
Enter system hostname (short form): []
Enter DNS domain name: []
輸入hostname(主機(jī)名)和domain name(域名),如果有合法的國際域名的話,就使用國際域名。先假
設(shè)hostname為moo,domain name為01tech.nat(避免和國際域名沖突)。
系統(tǒng)提示配置網(wǎng)卡,手冊例子使用的是DE-530TX 10/100Mbps自適應(yīng)網(wǎng)卡,在OpenBSD下面的設(shè)備名為vr0,
如果是NE2000兼容網(wǎng)卡,可能顯示為ne0,系統(tǒng)會自動(dòng)檢測并列出來:
You may configure the following network interfaces (the interfaces
marked with [X] have been succesfully configured):
[ ] vr0
Configure which interface? (or, enter 'done') [vr0]
在本例中,系統(tǒng)只有一個(gè)網(wǎng)卡,且已經(jīng)選定,直接回車開始配置,如果沒有選定,請輸入設(shè)備名并回車
進(jìn)行配置。
ip address (or 'dhcp') ? []
Symbolic (host) name? [moo]
Netmask ? [255.255.255.0]
在IP address中輸入dhcp并回車將會使用動(dòng)態(tài)分配的IP地址,作為服務(wù)器應(yīng)該有固定的IP地址,所以這
里應(yīng)該輸入192.168.32.1并回車(關(guān)于IP地址和掩碼的知識請參考其他文章)。Symbolic (host) name其
實(shí)就是hostname啦!系統(tǒng)會自動(dòng)使用剛才輸入的hostname,直接回車就可以了。Netmask(掩碼)默認(rèn)
是255.255.255.0,就用這個(gè)吧,回車?yán)^續(xù)。
Your use of the network interface may require non-default
media directives. The default media is:
media: Ethernet autoselect (100baseTX full-duplex)
This is a list of supported media:
media autoselect
media 100baseTX mediaopt full-duplex
media 100baseTX
media 10baseT mediaopt full-duplex
media 10baseT
If the default is not satisfactory, and you wish to use another
media, copy that line from above (e.g. "media 100baseTX")
Media directives? []
別看這么多信息,其實(shí)就做一個(gè)事,選擇網(wǎng)卡的接入網(wǎng)絡(luò)方式,最簡單的方式就是選擇media autoselect
并回車。
系統(tǒng)會詢問是否配置其他的網(wǎng)卡,如果系統(tǒng)只有一個(gè)網(wǎng)卡的話,會自動(dòng)選定done,只需要回車即可進(jìn)入下
一個(gè)步驟。其他網(wǎng)卡的配置象上面一樣配置就可以了。
Enter IP address of default route: [none]
Enter IP address of primary nameserver: [none]
Would you like to use the nameserver now? [y]
路由route不需要輸入,除非要鏈接到不同域的機(jī)器。因?yàn)橐谶@臺服務(wù)器上提供域名解釋服務(wù),所以
nameserver就指向自己吧,也就是輸入192.168.32.1就可以了。至于是否現(xiàn)在啟動(dòng)nameserver就沒所謂了。
回車?yán)^續(xù)。
第三節(jié)、設(shè)置管理員口令
Please enter the initial passWord that the root account will have.
系統(tǒng)要求輸入管理員口令,并確認(rèn)一次,千萬要記住啊,不然電腦重新啟動(dòng)之后進(jìn)入不了系統(tǒng)進(jìn)行管理。
這里假設(shè)口令為123456,在實(shí)際的應(yīng)用中千萬不要使用這樣的口令,而應(yīng)該采用字母、字符和數(shù)字混合
的口令。
第四節(jié)、安裝應(yīng)用程序
然后安裝程序詢問是否會運(yùn)行X Window:
Do you expect to run the X Window System? [y]
當(dāng)然不會,輸入n并回車?yán)^續(xù)下一步。選擇安裝媒體介質(zhì)。
Install from (f)tp, (h)ttp, (t)ape, (C)D-ROM, (N)FS or local (d)isk?
有多種方式安裝系統(tǒng),我們只選擇(C),通過CD-ROM安裝。
The following CD-ROM devices are installed on your system;
please make
sure the CD is in the CD-ROM drive and select the device containing
the CD with the installation sets:
cd0
Which CD-ROM contains the installation media? [cd0]
系統(tǒng)將檢測可用的CD-ROM,并給予選定,這里是只有一個(gè)CD-ROM的狀態(tài),如果多于一個(gè)CD-ROM的狀況,
請選擇正確的放有安裝光盤的CD-ROM,否則安裝程序會Halt在那里,無法繼續(xù)。
Enter the directory relative to the mount point that
contains the file. [/2.8/i386]
確認(rèn)安裝文件所在目錄,如果您使用01TECH上面提供的光盤,回車確認(rèn)即可。
The following sets are available for extraction.
Enter filename, `list', `all', or `done'.
You may de-select a set by prepending a '-' to its name.
[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
File name? []
因?yàn)榘惭b服務(wù)器,我們只需要上面已經(jīng)打“X”的的程序包,另外,因?yàn)橛胁糠殖绦虮仨氂稍闯绦蚓幾g
獲得,所以必須選擇comp28.tgz。也就是說要有base28.tgz、etc28.tgz、comp28.tgz、man28.tgz以
及bsd。
確認(rèn)這五個(gè)項(xiàng)前面都打“X”后,輸入done并回車,詢問:
Ready to extract selected file sets? [y]
當(dāng)然要解包,這個(gè)問題實(shí)在有點(diǎn)弱智啊!
Extract more sets? [n]
嗯?上帝說,再給你一個(gè)懺悔的機(jī)會?別管他,回車?yán)^續(xù)吧!
第五節(jié)、設(shè)定時(shí)區(qū)
然后就是選擇時(shí)區(qū):
What timezone are you in? [`?' for list] [GMT]
可以用?查看一下有什么可以選擇的時(shí)區(qū),不過確定沒有北京時(shí)間,選香港的吧,輸入Hongkong并回車。
系統(tǒng)一番自動(dòng)處理之后,終于出現(xiàn)了命令行模式的提示符“#”。恭喜,OpenBSD 2.8到此安裝完畢。
輸入reboot回車,重新啟動(dòng)電腦吧!記住改為硬盤啟動(dòng)啊!現(xiàn)在可以歇一歇了。
重新啟動(dòng)電腦之后,用root作為用戶名,123456作為密碼就可以登錄您的OpenBSD 2.8系統(tǒng)了。
第二課、設(shè)置域名解釋服務(wù)
首先解釋一下域名服務(wù)(DNS-Domain Name Server)的作用。其實(shí),鏈接到網(wǎng)絡(luò)的電腦,只需要知
道IP地址就可以實(shí)現(xiàn)訪問。但是誰會去記住129.128.5.191這個(gè)IP地址是代表OpenBSD的服務(wù)器呢?當(dāng)然
是www.openbsd.org容易記憶得多了。域名服務(wù)所實(shí)現(xiàn)的作用,就是把www.openbsd.org這樣的名字轉(zhuǎn)換
成電腦可以識別的129.128.5.191這樣的IP地址。
所以域名解釋服務(wù)應(yīng)當(dāng)包含兩種轉(zhuǎn)換過程:從名字到IP地址(正向解釋);從IP地址到名字(反向
解釋)。理解了這些基本感念,配置域名解釋服務(wù)得時(shí)候就會比較容易了。
第一節(jié)、設(shè)置named.boot文件
OpenBSD 2.8系統(tǒng)在安裝完成后就已經(jīng)有域名解釋服務(wù)程序named 4.9.7-REL,只是需要人工設(shè)定啟
動(dòng)。named的配置文件在/var/named目錄里面,文件名是named.boot。一個(gè)簡單的,可以使用的(當(dāng)然是
和手冊的例子聯(lián)系起來啦!)的named.boot的文件內(nèi)容如下:
directory /namedb
cache . root.cache
primary 0.0.127.IN-ADDR.ARPA localhost.rev
primary 32.168.192.IN-ADDR.ARPA 01tech.rev
primary 01tech.nat 01tech
可以用vi工具來編輯這個(gè)文件(vi的使用方法請參考『附錄4』)。解釋一下這個(gè)文件各行的含義:
第一行用于指定域名解釋文件所在目錄,其實(shí)真正的域名解釋文件是放在/var/named/namedb目錄里
面,因?yàn)槲覀儗⒉捎胏hroot的方式(執(zhí)行程序的時(shí)候切換到程序需要的用戶,并以改用戶的根目錄作為
根目錄的方式)執(zhí)行named,所以這里是/namedb。
第二行指定了緩存文件,對于曾經(jīng)訪問過的域名,將會記錄在緩存文件里面,以后查詢的時(shí)候就會
快很多。緩存文件的文件名是root.cache。
第三行指定了對于本機(jī)的域名反解文件。0.0.127.IN-ADDR.ARPA的寫法其實(shí)就是說要反過來求
127.0.0.x(x的范圍是1~255)的對應(yīng)名稱。相關(guān)的解釋文件是localhost.rev
第四行和第三行同理,就是要求192.168.32.x的對應(yīng)名稱。相關(guān)的解釋文件是01tech.rev
第五行是正解,指定凡是域名為01tech.nat的名稱都交給01tech文件進(jìn)行解釋。
第二節(jié)、配置域名解釋文件
然后,我們看看/var/namedb目錄里面的文件的內(nèi)容,在系統(tǒng)沒有配置域名解釋服務(wù)的時(shí)候,默認(rèn)
只有兩個(gè)文件:localhost.rev和root.cache,其中的localhost.rev并非我們需要的內(nèi)容,要自行改寫,
改寫后的內(nèi)容如下:
@ IN SOA moo.01tech.nat. root.moo.01tech.nat. (
14 ;Serial
3600 ;Refresh
900 ;Retry
3600000 ;Expire
3600) ;Minimum
IN NS moo.01tech.nat.
1 IN PTR localhost.
解釋一下這個(gè)文件的構(gòu)成吧!其實(shí)這個(gè)文件由三個(gè)RR(Resource record)構(gòu)成,或者我們用表格的
方式來分析,會比較容易理解吧:
[ name ] [ ttl ] [ class ] type data
@ 省略 IN SOA ……
省略 省略 IN NS ……
1 省略 IN PTR ……
Name必須為主機(jī)名或者域名,當(dāng)使用@時(shí)代表縮寫,就是和named.boot文件中指定的一樣,在這里就代
表127.0.0.x了。
ttl是指此條數(shù)據(jù)的有效保存期限,通常都忽略掉,采用默認(rèn)的ttl值。
class指定網(wǎng)絡(luò)類型,IN代表Internet,基本上都不會使用別的類型。
type常見的有SOA、NS、A、PTR、MX、CNAME等。
SOA(Start Of Authority)后面跟負(fù)責(zé)這個(gè)域的主機(jī),管理員郵箱,序列號,副解釋域更新間隔,副解
釋域更新失敗重試間隔,主解釋域失敗時(shí)副解釋域提供數(shù)據(jù)的有效期限,其他域名解釋服務(wù)器保留本域
名解釋服務(wù)器的時(shí)間。需要注意的是,在主機(jī)和管理員郵箱后一定不能缺少“.”否則系統(tǒng)會自動(dòng)加上
完整的域名,例如只寫moo的話,系統(tǒng)會添加為moo.01tech.nat。所以也可以簡單的把SOA語句寫
作SOA moo root.moo (……)。
NS(Name Server)后面跟指定的提供域名解釋服務(wù)的主機(jī)名
PTR(Pointer)后面是對應(yīng)于前面IP地址的名稱。
A(Address)后面是對應(yīng)于前面的名稱的IP地址。需要注意正解的A和反解的PTR的記錄必須相符,否則會
造成DNS查詢不正常,系統(tǒng)變慢。
CNAME用于建立別名,這樣訪問別名的時(shí)候,就會轉(zhuǎn)為訪問正式的名稱。
MX記錄的是一串目的地址列表,用于告訴郵件服務(wù)器傳送信件的優(yōu)先順序。
對于A、CNAME、MX的使用方法將會在后面的正解文件中看到,以后將不再作出解釋。
01tech.rev的文件內(nèi)容和localhost.rev文件基本相同,如下:
@ IN SOA moo.01tech.nat. root.moo.01tech.nat. (
14 ;Serial
3600 ;Refresh
900 ;Retry
3600000 ;Expire
3600) ;Minimum
IN NS moo.01tech.nat.
1 IN PTR moo.01tech.nat.
01tech的內(nèi)容如下:
@ IN SOA moo.01tech.nat. root.moo.01tech.nat. (
14 ;Serial
3600 ;Refresh
900 ;Retry
3600000 ;Expire
3600) ;Minimum
IN NS moo.01tech.nat.
IN MX 5 pop.01tech.nat.
moo IN A 192.168.32.1
www IN CNAME moo
pop IN CNAME moo
smtp IN CNAME moo
localhost. IN CNAME moo
01tech.nat. IN CNAME moo
第三節(jié)、測試DNS
好了,說了一大堆的東西,需要好好消化,不過我們還是看看我們的DNS是否正常吧,通過以下
的命令啟動(dòng)named:
named –t /var/named
然后用nslookup來檢查DNS是否正常。以下是nslookup運(yùn)行的結(jié)果,任何時(shí)候如果域名不能解釋,
通過按Ctrl+C可以中斷查詢。
nslookup
Default Server: moo.01tech.nat
Address: 192.168.32.1
>pop
Server: moo.01tech.nat
Address: 192.168.32.1
Name: moo.01tech.nat
Address: 192.168.32.1
Aliases: pop.01tech.nat
>exit
如果您完全按照手冊的例子來配置您的DNS,但是查詢卻沒有這樣的結(jié)果,那么您需要重新再來,
好好吃透上面的說明了。
第四節(jié)、在啟動(dòng)系統(tǒng)的時(shí)候自動(dòng)啟動(dòng)DNS
要使系統(tǒng)在啟動(dòng)時(shí)自動(dòng)啟動(dòng)DNS服務(wù)非常簡單,修改/etc/rc.conf文件里面的相關(guān)項(xiàng)就可以了
named_flags=NO 改為 named_flags=””
第三課、配置數(shù)據(jù)庫服務(wù)
如果您不需要數(shù)據(jù)庫服務(wù)可以略過本課,但是后面的課程中相當(dāng)部分和本課有關(guān),所以即使不打算
配置數(shù)據(jù)庫服務(wù),也應(yīng)該看看本課的內(nèi)容。
MySQL數(shù)據(jù)庫是目前最受歡迎的免費(fèi)數(shù)據(jù)庫,由于具有優(yōu)異的效率和簡潔的控制方式,所以被眾多
的服務(wù)商采用。盡管它還有一些不足,例如不支持事務(wù)和子選擇,但這些缺陷可以通過編程解決。
在本手冊開始寫作的時(shí)候,MySQL的最新穩(wěn)定版本是3.23.32,還沒有OpenBSD的port(OpenBSD中的
每一個(gè)應(yīng)用都是一個(gè)port),所以我們在手冊光盤中包含了它的源代碼包,并寫作了本課以教導(dǎo)您如何
在OpenBSD下面編譯并安裝MySQL。
第一節(jié)、展開MySQL源代碼包
首先需要讓系統(tǒng)可以讀取光盤(因?yàn)樵创a包在光盤里面啊!),方法非常簡單,只需執(zhí)行以下
的命令即可:
mount /dev/cd0c /mnt
然后轉(zhuǎn)入/usr/src目錄,把MySQL-3.23.32的源代碼包解壓
cd /usr/src
tar zxvf /mnt/packages/mysql-3.23.32.tar.gz
這樣,在/usr/src目錄下面就會有一個(gè)名為mysql-3.23.32的目錄,里面就是MySQL-3.23.32的源
代碼。為了繼續(xù)后面的工作,我們需要進(jìn)入該目錄。
cd mysql-3.23.32
第二節(jié)、為MySQL服務(wù)程序建立所需的組和用戶
要正確編譯和安裝MySQL數(shù)據(jù)庫服務(wù)程序,需要建立mysql組和屬于mysql組的mysql用戶。在以后
運(yùn)行MySQL數(shù)據(jù)庫服務(wù)程序的時(shí)候同樣需要它們,建立的方法如下:
groupadd mysql
useradd –g mysql mysql
第三節(jié)、運(yùn)行配置程序
因?yàn)橐幾g源代碼必須先獲得和系統(tǒng)相關(guān)的信息,包括編譯器版本,系統(tǒng)支持的線程方式
(OpenBSD是一個(gè)支持多線程的系統(tǒng))等。因此需要運(yùn)行配置程序以獲取這些信息。
./configure --prefix=/usr/local /
--localstatedir=/var/mysql /
--with-low-memory /
--without-bench /
--without-debug
我們解釋一下配置程序里面各行的含義。./configure就是要執(zhí)行的配置程序了;--prefix=/usr/local
表示,編譯后的MySQL數(shù)據(jù)庫服務(wù)程序?qū)惭b到/usr/local/bin目錄當(dāng)中,而庫文件會安裝到
/usr/local/lib/mysql目錄中,頭文件將安裝到/usr/local/include目錄中;--localstatedir=/var/mysql
表示數(shù)據(jù)庫所用到的數(shù)據(jù)將會安裝到/var/mysql目錄中(我們在安裝OpenBSD的時(shí)候提到如果需要,
可以為/var/mysql建立一個(gè)獨(dú)立的分區(qū)就是這個(gè)原因,這樣可以方便管理);--with-low-memory這一
句至關(guān)重要,沒有了它,基本上就不要指望在您的機(jī)器上面通過編譯,除非您擁有超過1Gb的內(nèi)存,這句
會指導(dǎo)編譯程序使用交換分區(qū)作為虛擬內(nèi)存;--without-bench和—without-debug告訴編譯器和安裝腳本
不需要測試程序和調(diào)試信息。
好了,解釋得夠清楚嗎?
第四節(jié)、編譯和安裝MySQL
這個(gè)步驟非常簡單,只需要執(zhí)行下面的命令即可,其他得事情由電腦來完成。因?yàn)榫幾g的過程非常久,
可以喝杯水歇一歇。
make
make install
make init-db
第五節(jié)、測試MySQL
對不起,本節(jié)的標(biāo)題有點(diǎn)含糊。這里的測試是指測試MySQL的編譯和安裝是否正常。為了測試MySQL
是否被正確編譯和安裝,需要執(zhí)行以下的命令:
/usr/local/bin/safe_mysqld > /dev/null &
/usr/local/bin/mysqladmin –u root password ‘123456’
如果第二條命令無聲無息地結(jié)束了,那么就證明MySQL可以正常使用了。對了,第二條命令其實(shí)是更
改系統(tǒng)管理員的口令啊!那么您知道以后使用MySQL程序的時(shí)候需要的口令了嗎?
第六節(jié)、讓MySQL在系統(tǒng)啟動(dòng)的時(shí)候自動(dòng)啟動(dòng)
我們需要做一些工作來讓MySQL在系統(tǒng)啟動(dòng)的時(shí)候自動(dòng)啟動(dòng)。首先我們修改/etc/rc.conf文件,添加
以下的行:
mysqld_flags=””
然后,需要修改/etc/rc文件,找到啟動(dòng)named的代碼(第171行),添加以下的代碼:
if [ “X${mysqld_flags}” != X”NO” ]; then
echo ‘starting mysqld’
/usr/local/bin/safe_mysqld > /dev/null &
fi
另外,為了讓其他需要用到MySQL的程序編譯可以順利通過,就需要在/etc/rc.local文件中添加以
下的代碼:
if [ “X${mysqld_flags}” != X”NO” ]; then
/sbin/ldconfig –m /usr/local/lib/mysql
fi
第四課、配置郵件服務(wù)
其實(shí)OpenBSD 2.8在系統(tǒng)安裝完成之后,就已經(jīng)安裝且啟動(dòng)了郵件服務(wù)sendmail。我們在這里需要為
OpenBSD找一個(gè)比sendmail更加安全、更加容易使用和高效能的郵件服務(wù)程序,我們選擇了qmail(利用
qmail加上vpopmail可以把系統(tǒng)用戶和郵件用戶分離,并且使用虛擬郵件域。再加上MySQL就可以實(shí)現(xiàn)郵件
用戶的數(shù)據(jù)庫口令校驗(yàn),這是我選擇qmail的原因)。
第一節(jié)、關(guān)閉sendmail
因?yàn)閝mail作為sendmail的替代服務(wù)程序,不能和sendmail一起工作,所以必須先關(guān)閉sendmail程序。
執(zhí)行以下的命令關(guān)閉正在執(zhí)行的sendmail程序。
Kill –9 `cat /var/run/sendmail.pid`
同時(shí),必須把sendmail相關(guān)的鏈接刪除,并把senmail更名
chmod 0 /usr/sbin/sendmail /usr/sbin/sendmail.old
最后還必須修改/etc/rc.conf文件,更改sendmail_flags以避免系統(tǒng)重新啟動(dòng)時(shí)sendmail自動(dòng)啟動(dòng)。
sendmail_flags=”-q 30m” 改為 sendmail_flags=NO
第二節(jié)、安裝qmail
如果一直按照手冊的例子進(jìn)行練習(xí),那么現(xiàn)在應(yīng)該可以訪問CD-ROM,如果系統(tǒng)曾經(jīng)重新啟動(dòng),那么
請按照第三課、第一節(jié)的內(nèi)容來訪問CD-ROM。
進(jìn)入/mnt/packages目錄并安裝qmail執(zhí)行代碼包:
cd /mnt/packages
pkg_add qmail-1.03.tgz
安裝的過程中會詢問是否添加一些組和用戶,默認(rèn)選擇Y,不用改變,直接回車?yán)^續(xù)就可以了。一定
要記錄qmaild的uid和nofiles的gid,因?yàn)樵谝院蟮恼n程中啟動(dòng)smtp和pop的時(shí)候需要它們(例如qmaild的
uid是2850,nofiles的gid是32750)。Qmail被安裝到/var/qmail目錄。
第三節(jié)、配置qmail
要配置和運(yùn)行需要DNS正確運(yùn)行,如果還沒有配置DNS服務(wù),請按照第二課的內(nèi)容進(jìn)行配置。
首先執(zhí)行以下的命令建立新的sendmail鏈接,以實(shí)現(xiàn)和sendmail的兼容:
ln –s /var/qmail/bin/sendmail /usr/sbin/sendmail
然后建立基礎(chǔ)的域信息,使用下面的命令來完成:
/var/qmail/setup/config-fast 01tech.nat
當(dāng)然,也可以通過/var/qmail/setup/config來設(shè)置基礎(chǔ)域信息,不過既然DNS正常,為什么不使用更
快捷的方法呢?config的用法請參考/var/qmail/doc里面的文檔。
復(fù)制rc文件,并對其進(jìn)行修改,讓它和sendmail兼容:
cp /var/qmail/boot/home /var/qmail/rc
qmail默認(rèn)使用Mailbox,而sendmail默認(rèn)使用Maildir,很多的程序都根據(jù)sendmail規(guī)則來編寫,需
要使用Maildir,所以需要更改rc文件,作出以下的更改:
Mailbox 改為 Maildir
第四節(jié)、測試qmail
安裝和配置完成之后當(dāng)然要測試一下qmail的運(yùn)作是否正常了,執(zhí)行以下的命令啟動(dòng)qmail服務(wù):
csh –cf ‘/var/qmail/rc &’ > /dev/null &
然后使用以下的命令查看是否存在qmail-lspawn ./Maildir。如果已經(jīng)存在,則證明qmail服務(wù)已經(jīng)
正常啟動(dòng),如果沒有找到,就需要按照第三節(jié)的內(nèi)容重新配置。
ps -x
第五節(jié)、啟動(dòng)系統(tǒng)時(shí)自動(dòng)運(yùn)行qmail服務(wù)
首先修改/etc/rc.conf文件,添加以下的內(nèi)容:
qmail_flags=””
然后修改/etc/rc文件,找到sendmail的啟動(dòng)代碼,在后面添加以下的代碼:
if [ “X${qmail_flags}” != X”NO” ]; then
echo –n ‘ qmail’; csh –cf ‘/var/qmail/rc &’ > /dev/null &
fi
第五課、分離系統(tǒng)用戶和郵件用戶
我們使用vpopmail來分離系統(tǒng)用戶和郵件用戶,這樣可以提高系統(tǒng)的安全性。而且vpopmail還可以
使用虛擬域名,也就是同一個(gè)IP的不同域名的郵箱。
第一節(jié)、展開源代碼包
進(jìn)入/usr/src目錄,并解壓vpopmail-4.9.8源代碼包,然后進(jìn)入vpopmail-4.9.8目錄:
cd /usr/src
tar zxvf /mnt/packages/vpopmail-4.9.8.tar.gz
cd vpopmail-4.9.8
第二節(jié)、使用MySQL支持
如果您的系統(tǒng)沒有提供MySQL支持,請?zhí)^這一步。
修改vmysql.h文件,找到其中的一行內(nèi)容為:
#define MYSQL_PASSWORD “gipgap”
把里面的gipgap替換成為可以訪問MySQL的系統(tǒng)管理員口令123456:
#define MYSQL_PASSWORD “123456”
第三節(jié)、添加組和用戶
編譯和運(yùn)行vpopmail,需要vchkpw組和屬于vchkpw組的vpopmail用戶。使用以下的命令添加組和用戶:
groupadd vchkpw
useradd –g vchkpw vpopmail
第四節(jié)、準(zhǔn)備/etc/tcp.smtp文件
要編譯vpopmail需要有tcp.smtp文件,默認(rèn)的存放路徑是/etc目錄,通過下面的命令產(chǎn)生該文件:
echo ‘127.0.0.:allow,RELAYCLIENT=””’ > /etc/tcp.smtp
第五節(jié)、運(yùn)行配置程序
運(yùn)行配置程序configure,獲取編譯所需的編譯器,外部環(huán)境等信息:
./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
解釋一下各項(xiàng)的含義:--enable-default-domain=01tech.nat指定默認(rèn)的郵件域是
01tech.nat;--enable-admin-email=zenz-hu@01tech.nat說明管理員的郵箱;--enable-mysql=y告訴編
譯器要使用MySQL數(shù)據(jù)庫作口令檢查服務(wù);--enable-sqlincdir=/usr/local和—enable-sqllibdir=/usr/local
告訴編譯器到哪里尋找MySQL的頭文件和庫文件;--enable-large-site=y用于把域信息保存到MySQL數(shù)據(jù)庫中,
但是如果有太多的虛擬域則不適宜采用本項(xiàng);--enable-passwd=n告訴系統(tǒng)不在/etc/passwd口令文件中
查找郵箱用戶的口令;--enable-hardquota=8000000限制每個(gè)用戶的郵箱大小為8Mb。
第六節(jié)、編譯并安裝vpopmail
只需要簡單的命令,即可編譯并安裝vpopmail:
make
make install-strip
安裝后的vpopmail在/home/vpopmail目錄下。
第七節(jié)、添加郵件域和更改postmaster口令
現(xiàn)在的vpopmail還沒有郵件域,即使在編譯的時(shí)候指定了默認(rèn)的郵件域也一樣需要通過執(zhí)行以下的
程序來添加郵件域:
/home/vpopmail/bin/vadddomain 01tech.nat
系統(tǒng)會詢問屬于這個(gè)域的postmaster的口令并要求確認(rèn),輸入123456作為口令吧(記住,這里使用的
任何口令都不應(yīng)該在實(shí)際應(yīng)用中出現(xiàn),否則您的系統(tǒng)會有很大的安全問題)!
如果在這個(gè)步驟出現(xiàn)錯(cuò)誤提示,那么您很可能需要重新進(jìn)行本課的練習(xí)了。
第八節(jié)、啟動(dòng)smtp和pop3服務(wù)
要用戶可以用smtp方式發(fā)送郵件以及使用pop3方式接受郵件,需要修改/etc/rc文件,在qmail啟動(dòng)代
碼后面添加以下的代碼:
if [ -x /home/vpopmail/bin/vchkpw ]; then
echo –n ‘ smtpd’
/usr/local/bin/tcpserver –u2850 –g32750 0 smtp /
/var/qmail/bin/qmail-smtpd 2>&1 > /dev/null &
echo –n ‘ popd’
/usr/local/bin/tcpserver 0 pop3 /
/var/qmail/bin/qmail-popup pop.01tech.nat /
/home/vpopmail/bin/vchkpw /
/var/qmail/bin/qmail-pop3d Maildir &
fi
經(jīng)過上面的修改,系統(tǒng)在每次重新啟動(dòng)之后,都會自動(dòng)啟動(dòng)smtp和pop3服務(wù)了。
vpopmail的管理手冊在/home/vpopmail/doc目錄中。