(一、系统安装)
.Xk#Cwm' Dmr3r[ 8Od7e` ^IO\J{U{"x 前言
'LC0hoV +$#ytvDy C&;m56 HEF\TH9 写本文的初衷主要是记录下我一段时间学习使用FreeBSD建设网站平台的一些经验和体会。因为本人是菜鸟,所以很多地方不够完善。本文权当给初学者提供一个具体可操作的实例。所有操作步骤都是我边做边写。避免出现遗漏或一些不必要的小错误,给初学者带来麻烦。
<STE~ZmO h=dFSK?*D 本网站平台建设全过程包括FreeBSD系统的安装,web、ftp、mail、proxy服务器、视频点播服务器等。所有过程都在FreeBSD4.7环境下测试通过。
rtz ]PH K/z2.Npn 由于写本文时参考了网上太多前辈和大侠的资料,无法一一列举。还请作者原谅。
-?vVV@W-O^ TsY
nsLQY 本连载文章前后关联很紧密,建议初学者一步一步来做。
|J:m{ x57O.WdN 试验环境如下:
WMnxN34 A5RM&y 硬件环境:普通pc机,双网卡。配制不需要高,主要是稳定,并能适应长时间开机。听前辈介绍AMD k6的cpu运行FreeBSD好像有点问题。不过我没有试验。建议用intel的。
(= Wu5H vPD%5AJN 软件环境:操作系统:FreeBSD4.7(4.8)
/g$8JL b?k6-r$j web服务器:Apache 1.3.27+modssl +mod_php4+mod_gzip+mod_fastcgi +mod_perl +mysql3.23
7towjwr .@@&q4=& ftp服务器:Proftpd1.2.7+proftpd-mod-quotatab-1.2.4+mysql
c=33O,_ AU<A\ mail服务器: iceblood前辈制作的qmail安装包(经过修改)+vqregister-2.5
r:H.VAD ICzcV };$ proxy服务器:使用FreeBSD内置的NAT和PPP拨号+squid
o':K4r; 5W(`lgVs, 视频点播服务器:Helix Universal Servevr (realserver9.01)
jfpbD
/ i&0Zli 网络环境:我用的是adsl动态拨号方式,因为动态ip所存在的一些问题,我把所有的服务都装在一台机器上,且这台机器要直接与外网相连。静态ip更方便一些。(本文两种方式都会讨论)
:"`1}Q C5~
+"#B 'SKq<X%R; &0SgEUZr 第一步:安装系统
{VKP&{~O "89L^I 关于安装过程网上有很多文章,这里不作详述。仅提出几点建议供大家参考:
UoHNKB73 zin'&G>l 1、 采用最小化安装。
X 1}U o_cAelI[! 2、 安装时启用inetd,并在编辑inetd.conf文件时,把带有“ftp”的行前面的“#”号去掉。这样作是为了以后安装软件时可以用ftp上传文件。
U3t)yr h <%S[6*6U 3、 添加一个wheel组的用户,这样在系统工作正常后可以在windows系统上通过终端登录软件(如SecureCRT)进行所有操作。FreeBSD4.7在最小安装时支持SSH终端登录,所以我们需要使用支持SSH协议的终端软件,如SecureCRT。例如我添加的用户名是ylf,隶属wheel系统组。系统产生一个用户目录/home/ylf。我可以通过SecureCRT以ylf身份登录到系统,然后通过su命令切换到root用户。同时我也可以在IE浏览器内键入
ftp://192.168.0.1 ,并输入ylf用户名和密码登录ftp将需要的文件上传到自己的用户目录里。(192.168.0.1是我的服务器连接内网的网卡ip地址)。以下除系统安装部分,我都是采用终端方式操作。
kg^5D3!2{Q i wI} 4、 分区时将/home、/usr和/var划的大一些,因为/usr为程序目录,/var要存放日志,/home是用户主目录,我的用户文件如网页、ftp上传文件等都放在这里。还有最好保留一部分空间留作以后需要的时候用。我的机器上有2块硬盘,一快18.2G SCSI硬盘,一块40G IDE硬盘。我是这样划分的。
(>`S{L
C>s HjZf3VwI 128M /
=H?^G[ y + {WZpP},v 20G /home
mX GW+ :a_MT 2G /ftp
P7*?E* $LOf2 kn 256M /tmp
[9\Mf4lh# L 7l"*w( 6G /usr
g&X
X@I8+v ;TboS-Y 5G /var
yH]w(z5Z j){0>O.V 其中/ftp是为匿名ftp用户访问专用。剩余空间留作备用。当然如果硬盘空间少的话,做我们的试验也是够用的。
0xUn#&A~ 2D4c|R@+ 关于安装方面的文章,大家也可以参考delphij写的《FreeBSD服务器的安装与优化》。
http://community.freebsdchina.org/catalog.php?forum=34 一文。
Aq_?8 Cd 9XX:_9|I 安装完系统后,要重新编译内核。目的是要系统支持Firrwall和提高运行效率。
Wo6C0Z3g} +HoCG;C{ 首先确认系统是否安装了FreeBSD的内核支持。如果是最小安装,则需要运行/stand/sysinstall命令安装内核支持。方法如下:
spTIhZ U[NQ" # /stand/sysinstall
*ch7z|wo. a<P?4tbF 选Configure—Distributions—src—sys,内核文件将被安装在/usr/src/sys目录中。
q5~"8]Dls nBzju?X)I 注意:这之后的过程在终端上操作要方便许多。SecureCRT支持在终端界面上直接拷贝和粘贴文本内容。
l|fb;Giq=D 7mnZ,gpb 转到内核文件目录
6nW]Q^N} vue=K # cd /usr/src/sys/i386/conf
LNM#\fb IQ5'4zQg= 编辑内核文件
_A6e|(.ll M)CQ|P # vi kernel_wwwx # kernel_wwwx为我的内核文件名
K.42 VM)F J['i 我的内核文件如下:
\hZye20 oFp4*<\ #
e]D TK*W~ #fq&yjl#A # GENERIC -- Generic kernel configuration file for FreeBSD/i386
7kmd.< 'y|p)r" #
=Iy khrS YeB)]$'?u` # For more information on this file, please read the handbook section on
8HL8)G6 !uAqY\Is # Kernel Configuration Files:
sNsWz.DLT# 6&6t= #
"(vm0@8>< CMU\DO #
http://www.FreeBSD.org/doc/en_US.IS...fig-config.html wPr!.:MF 2xt$w% #
Z!I#Z2X j9*5Kj # The handbook is also available locally in /usr/share/doc/handbook
)uy2,`z N==Y]Z$G # if you've installed the doc distribution, otherwise always see the
T:S[[#f{5 Vs,
& # FreeBSD World Wide Web server (
http://www.FreeBSD.org/) for the
BZk0B? tWA<OOl
# latest information.
`bjPOA(g A<[BR*n #
+%)bd FTcXjWBPF9 # An exhaustive list of options and more detailed explanations of the
InB'Ag" Dj'+,{7,u # device lines is also present in the ./LINT configuration file. If you are
Bu7aeBP ~D_Wqr # in doubt as to the purpose or necessity of a line, check first in LINT.
IV|})[n* YeVkX{y #
.CEl{fofj T49^ # $FreeBSD: src/sys/i386/conf/GENERIC,v 1.246.2.48 2002/08/31 20:28:26 obrien Exp $
+H
"j-:E@t oZw #]Q@ @@#(<[S\B A (ZtA[G machine i386
T;{"lp. Imz1"+E~ cpu I586_CPU
AO]1`b: EsjZ;D,c( cpu I686_CPU
D9higsN rWN%Tai- ident kernel_wwwx #内核文件名,这个要和你的内核文件名一致
M+Eg{^ q` KdLj1T maxusers 0
AzFS6<_ Z1R{'@Y0Z _PGS"O?j PG3,MCf: options INET #InterNETworking
pRFlmg@/} ,`ju(ac! options FFS #Berkeley Fast Filesystem
mxmj 7>xfQ options FFS_ROOT #FFS usable as root device [keep this!]
D[<~^R;* BH2JH>'X options SOFTUPDATES #Enable FFS soft updates support
YI+o:fGC5 R)'[Tt`# R options UFS_DIRHASH #Improve performance on big directories
<L:}u! |/~ISB options PROCFS #Process filesystem
"eR-(c1 X?n($z/{ options COMPAT_43 #Compatible with BSD 4.3 [KEEP THIS!]
m4RiF &6\f;T4 options SCSI_DELAY=15000 #Delay (in ms) before probing SCSI
RBV*e9P% A9ZK :i7 options SYSVSHM #SYSV-style shared memory
/ e]R0NI I$JyAj options SYSVMSG #SYSV-style message queues
j&"GE':Y iKA qM{( options SYSVSEM #SYSV-style semaphores
Gw?ueui< 6(V"xjK options P1003_1B #Posix P1003_1B real-time extensions
TJz}
8-#t ?T_bjALW options _KPOSIX_PRIORITY_SCHEDULING
H<ZXe!q(nx 30Udba+{]p options ICMP_BANDLIM #Rate limit bad replies
|!*abc\`(` o3a%u( options AHC_REG_PRETTY_PRINT # Print register bitfields in debug
W>J1JaO ?xb2jZ/0X # output. Adds ~128k to driver.
X oh@ (% #hh7fE'9 options AHD_REG_PRETTY_PRINT # Print register bitfields in debug
M
nDaag \_AoG8B # output. Adds ~215k to driver.
XrN]}S$N #s|,oIm RKwuvVI DXx),?s> device tun 1
{|R +|ow \bv JZ_ options IPFIREWALL #防火墙
15"[MX A PvVn}i options IPFIREWALL_FORWARD #允许透明代理
Rj~y#m e)A{
{wD/ options IPFIREWALL_VERBOSE #允许防火墙日志
Jb]22] ts;C:.X options IPFIREWALL_VERBOSE_LIMIT=100 #限制日志
\vp^[,SI %oiA'hz;* options IPFIREWALL_DEFAULT_TO_ACCEPT #默认允许所有IP包
K"g`,G6S uAv'%/ options IPDIVERT #启用由ipfw divert使用的转向IP套接字
!sav~dB) 1L<X+,]@ |eH*Q%M 8t1,_,2' # To make an SMP kernel, the next two are needed
iK9#{1BpML j$=MJN0 #options SMP # Symmetric MultiProcessor Kernel
yI8
/m| tnFhL& #options APIC_IO # Symmetric (APIC) I/O
<k7q9"\4 jQY^[A ~0Xx] m9Hdg^L device isa
UszR. Z onF?;>[ device eisa
w"A%@<V3Ec "Sd2VSLg device pci
*","u;& 0j2M< W# }BLT2]y0 X.JPM{] l8By2{pN x<h-F # ATA and ATAPI devices
hdurT 0A.9<&Lod device ata
* ;<>@* lZ5TDS device atadisk # ATA disk drives
%y R~dt' @-Ln* 3n [C( >e0r J)_IfbY N="H
06t $/;<~Pzi # SCSI Controllers #没有SCSI设备不需要这段
?8R
F+::UWKA device ahb # EISA AHA1742 family
M;1B}x@ 8u bb~ B; device ahc # AHA2940 and onboard AIC7xxx devices
~6Df~uN ~{BR~\D device ahd # AHA39320/29320 and onboard AIC79xx devices
]|)M /U * &*!) d" device amd # AMD 53C974 (Tekram DC-390(T))
4dUr8]BkG 7wwlZ;w device isp # Qlogic family
YOY{f:ew >d#Ks0\& device mpt # LSI-Logic MPT/Fusion
(S
k+nD a$h
zG- device ncr # NCR/Symbios Logic
9$e6?<`(Y -'Y@yIb device sym # NCR/Symbios Logic (newer chipsets)
6sl2vHzA n%}Vd
`c options SYM_SETUP_LP_PROBE_MAP=0x40
&g\?znF]H iV8O<en&i # Allow ncr to attach legacy NCR devices when
.GNl31f0 ]>k>Z#8E* # both sym and ncr are configured
Kgu#Mi~ \[;Qqn0
"xY]& N.qS;%*o{e device adv0 at isa?
e8$OV4X wNhtw'E8 device adw
L4H5#?' :} 9Lb)Yp device bt0 at isa?
7T-}oNaJA\ </7_T<He. device aha0 at isa?
Fg-4u&Ik |4A938'4j device aic0 at isa?
Ncle8=8 jq"iLgEMO %<Te&6NU' M8iI e:{ c device ncv # NCR 53C500
xlU:&=| >)`V$x device nsp # Workbit Ninja SCSI-3
FV W&)-I o? {rPFR device stg # TMC 18C30/18C50
e x`mu E -p2 =?a =pR'XF% BA cnFO # SCSI peripherals #没有SCSI设备不需要这段
3tIno!| nPo YjQi device scbus # SCSI bus (required)
@I,:(<6 lVc':,z device da # Direct Access (disks)
T|FF&|Pk sFWH*kdP? device sa # Sequential Access (tape etc)
o
9] 2 b^I(>l- device cd # CD
NamO5(1C +_E96`P device pass # Passthrough device (direct SCSI access)
l4`HuNR1 }iCcXZ&5^
*^b<CZd9 3a\.s9A" v a
j S6pvbaMZ " .:b43Z _/
Uer} # atkbdc0 controls both the keyboard and the PS/2 mouse
ww(. #_}r)q
device atkbdc0 at isa? port IO_KBD
yQM<(;\O )/2J|LxS device atkbd0 at atkbdc? irq 1 flags 0x1
Fi!XaO 4x%R4tk K{#1O=Gi ]iL>Zxex device vga0 at isa?
Kx@;LRY# r%DaBx!x8 ;]+p>p-# <.qhW^>X
#3m7`}c ui#K`.dn # syscons is the default console driver, resembling an SCO console
n:d7 Tv1Z8 5EqC.g. device sc0 at isa? flags 0x100
_onEXrM o#ajBOJ o$FYCz n ~56F<=#, 3A5:D# uEPdL':}2 # Floating point support - do not disable.
)]~;Ac^x &z"sT*3 device npx0 at nexus? port IO_NPX irq 13
'E#;`}&Ah tQ >
IJ FaUc"J >'GQB d|c>Y( Oe^oigcM # Serial (COM) ports
Sd0y=!Pj= hd E? %A device sio0 at isa? port IO_COM1 flags 0x10 irq 4
e}Xmb$ 31@m36? X g9F4nExo +,BJ4``*k # 我用的是8139和Dlink DFE-530TX网卡,大家可根据自己的网卡型号保留或删除
f<T"# G$5 YPY'[j(p`n # 使用公共的MII总线控制器代码的PCI以太网适配器
GE0,d qIIl,!&}A # 注意:一定要保留'device miibus'以确保可用
`LID*uD;_ V.k2t$@ # PCI Ethernet NICs that use the common MII bus controller code.
!e"TWO*X -P5M(Rt # NOTE: Be sure to keep the 'device miibus' line in order to use these NICs!
RU'
WHk %ut7T!Jp device miibus # MII bus support
R6KS&Ge_ lx!9KQAM* device fxp # Intel EtherExpress PRO/100B (82557, 82558)
KASw3!.W k}o*=s>M device rl # RealTek 8129/8139
$_P*Bk) Gap\~Z@L device vr # VIA Rhine, Rhine II
EN!Q]O| !ufSO9eDx" device xl # 3Com 3c90x (``Boomerang'', ``Cyclone'')
7Vd"AVn}g p*^[
~} N xep!.k x B-
VhUS # Pseudo devices - the number indicates how many units to allocate.
%bs~%6) TnvX&Y' pseudo-device loop # Network loopback
\?X'U: &xGcxFd pseudo-device ether # Ethernet support
*ydU3LG7 X+*"FKm S. pseudo-device sl 1 # Kernel SLIP
cI Byv I- Ehv*E pseudo-device ppp 1 # Kernel PPP
lVmm`q6n9 0R0j7\{ pseudo-device tun # Packet tunnel.
CAPPOh \?9{H6<= pseudo-device pty # Pseudo-ttys (telnet etc)
cG`R\$ n #|p R2 pseudo-device md # Memory "disks"
l]GUQcN= [7:(e/& pseudo-device gif # IPv6 and IPv4 tunneling
#q5
L4uM9 ~/B[;# pseudo-device faith 1 # IPv6-to-IPv4 relaying (translation)
{U,q!<@mq d&'}~C`~k 6,*o;<k[ r^$4]@Wn # The `bpf' pseudo-device enables the Berkeley Packet Filter.
Ao:<aX,= MJ)aY2 # Be aware of the administrative consequences of enabling this!
Po=@
6oB =[$zR>o*% pseudo-device bpf #Berkeley packet filter
V+M=@Pvp9 'z=QV {ni (完)
a_pNFe Z\`i~ cTR@
:sm zoU-*Rs6 我用的是8139网卡和Dlink DFE-530TX网卡,如果你用其他型号的网卡,需要察看当前目录的GENERIC 内核文件,找到描述自己的网卡型号的段并将其添加到新的内核文件里。其他的不改直接拷贝过来就可以用了。
,/qS1W( jd&kak 接下来编译安装新内核:
v$H]=y Yzr|Z7rq} # /usr/sbin/config kernel_wwwx #kernel_wwwx为你的内核文件名
XA$Z7_gu3 j;|rI`67~ # cd ../../compile/kernel_wwwx
"[*W=6m0 XSu9C zx&I # make depend
6S~lgH: 5 GP,J,J # make
3r)<:4a
u& #hOAG_a, # make install
GV5hmDzRs ?G#T6$E8 重新启动(reboot)
lP!`lhc-^ BAq@ H8*B m 8Q[+_:$H .!\NM&E 如果系统升级过源代码树,按下面方法编译内核:
%Tn0r|K },2mIit( # cd /usr/src
jtMN )TM Rr#vv # make kernel KERNCONF=kernel_wwwx #kernel_wwwx为你的内核文件名
~[por ZS-O,[ 重新启动
{hr+ENgV R9/(z\'} O=HT3gp& jH1!'1s| FreeBSD网站平台建设全过程(二、接入Internet并配制代理服务)
4mG?$kCN (>OCLmV$ Y+k)d^6r \9*,[mvC 使用adsl接入Internet有两种情况,通过拨号获取动态ip或服务商直接给定静态ip。后者配制起来较容易。本文先讨论动态ip如何设置。
em87`Hj^lo %D(%
lh2 由于第一步重新编译内核时已经加进了对Firewall的支持。这里就可以通过直接编辑/etc/ppp/ppp.conf文件和/etc/rc.conf文件就可以上网并支持NAT方式透明代理了。
v\Y362Xv G|Du/XYh # vi /etc/ppp/ppp.conf
K#B)@W?9 pN[G?A 我的ppp.conf文件内容如下:(注意set前要留空格)
%CxrXU -N')LY default:
JVzU'd;1! 8h&Ed=gi set log Phase tun command
e7j30Iy Kw%n;GFl' set ifaddr 10.0.0.1/0 10.0.0.2/0
6S;-fj Vp;^_, adsl: # 配置代号
f?iQ0wv) -! dL
< set device PPPoE:vr0 # vr0 改成你连接ADSL modem的网卡名
l3sL!D1u (W7cQ> set mru 1492
Lh%>>
Ht{ p+O2: set mtu 1492
"]%.%$ +%$'(ts set authname username # username是拨号用户名
+v 9@du (f^K\7HM set authkey password # password是拨号密码
A;t6duBDf/ k+au42:r set dial
7*e7P[LQU L}bS"=B[&W set login
-?A,N,nnX o%+8.Tx6wT add default HISADDR
.[v4'ww^ [dje!5Dc( (完)
4uW}.7R' ^K4#_H#" &></l| hY S
C8r. # vi /etc/rc.conf
s2*^ PG ;:JTb2xbb 我的rc.conf文件内容如下:(动态ip)
TSQ/{=r Z:l.{3J$ # -- sysinstall generated deltas -- # Tue Jul 15 21:20:28 1997
/( /)nYAjk E6iUa' # Created: Tue Jul 15 21:20:28 1997
\0'7p-T6 IK%fX/tDyc # Enable network daemons for user convenience.
9rr"q5[ O.n pi: a # Please make all changes to this file, not to /etc/defaults/rc.conf.
QRs!B!Fn0 b(lC7Xm # This file now contains just the overrides from /etc/defaults/rc.conf.
9/rX% RO-ABFEi( hostname="wwwx.3322.org" # 你的主机域名
#x"dWi( 8Y.25$ ifconfig_fxp0="inet 192.168.0.1 netmask 255.255.255.0" #内网网卡ip地址,fxp0是网卡名
gDP\u<2! 0hTv0#j# inetd_enable="YES" # 开机加载inetd
5*=a*nD11 [vuqH:Ln kern_securelevel_enable="NO"
V9:h4] 6e1/h@p\7 linux_enable="YES"
#!wL0p M@e&uz!Rx nfs_reserved_port_only="NO"
3YyB0BMW ]XX8l:+ sendmail_enable="NO"
*R17 KMS M<t>jM@'A# sshd_enable="YES"
'&/"_ *I0{1cST usbd_enable="NO"
;~Eb Q nwlo,[ gateway_enable="YES"
.6Swc? P
0xInW F firewall_enable="YES" #启用防火墙
gkdd#Nrk mmrx*sr= firewall_script="/etc/rc.firewall"
RW!D!~ T<*i($
[ firewall_type="open"
bP%0T++vo Dp
0
firewall_quiet="YES"
$O*rxQ} Q ^%+r"h firewall_logging_enable="YES"
uJ<sa; ,Mf@I5? ppp_enable="YES" # 开机自动拨号
_ukKzY ?MevPy`H ppp_mode="ddial"
$QQv$ =/@c9QaVB ppp_nat="YES" # 启用透明代理
5_U3Fs j_PICv*6 ppp_profile="adsl" # 配置代号
Fx']kn9 B mq7w,L. # -- sysinstall generated deltas -- # Wed Jul 16 06:52:13 1997
ShAI6j 8fzmCRFH (完)
m|<j9.iJ {s} @$rW K8y/U(@|D 0Zkb}F2- 这样重新启动后就可以拨号上网并实现透明代理了。客户端需要设置dns服务器为服务商提供的dns,网关设成代理服务器的内网卡ip地址,这里是192.168.0.1。并把IE中“internet选项”关于连接设置的所有复选框清除。
~c7}eTJd" /[YH
W] 如果解析不了域名,检查一下/etc/resolv.conf文件是否加入了正确的dns服务器地址。
KQ<pQkhv [xT2c.2__J (,eH*/~/ RG=!,#X 如果是静态ip方式,则只需要编辑/etc/rc.conf文件。
(KaP=t} Q7O8']~n 我的/etc/rc.conf文件如下:(静态ip)
M$L1!o1Xf N%{&%C 6{ # -- sysinstall generated deltas -- # Tue Jul 15 21:20:28 1997
-R
4t ;L.@4b[lP # Created: Tue Jul 15 21:20:28 1997
olzP=08aaV HVzG }r(J # Enable network daemons for user convenience.
$FEG0& +D|y))fE # Please make all changes to this file, not to /etc/defaults/rc.conf.
Rt{qbM|b& |V{'W-`
|[ # This file now contains just the overrides from /etc/defaults/rc.conf.
gCAWRNp Wd'wL"6De hostname="wwwx.3322.org" #主机域名
kK nz
F L_uliBn defaultrouter="218.10.104.1" #服务商提供的路由器地址
2`,{IHu*! jj8AV lN ifconfig_vr0="inet 218.10.104.188 netmask 255.255.255.0" #服务商提供的静态ip
?#^(QR|/ E!J;bX5 ifconfig_fxp0="inet 192.168.0.1 netmask 255.255.255.0" #内部网卡ip
IpQ51 )
'x4#5] inetd_enable="YES" #开机加载inetd
jJ-j )`]w\s
# kern_securelevel_enable="NO"
qy6zHw s
bV6} linux_enable="YES"
az3rK4g 'S<ebwRd= nfs_reserved_port_only="NO"
dE2(PQb*P {'8a'9\ sshd_enable="YES"
-?n|kSHX %\ -u&