(一、系统安装)
v{R:F UE3#(:xA STC'j1U F-^#EkEGe 前言
b&Dc DX jY]hMQ/H uq}>5 oEqt7l[I{ 写本文的初衷主要是记录下我一段时间学习使用FreeBSD建设网站平台的一些经验和体会。因为本人是菜鸟,所以很多地方不够完善。本文权当给初学者提供一个具体可操作的实例。所有操作步骤都是我边做边写。避免出现遗漏或一些不必要的小错误,给初学者带来麻烦。
[5v[Zqud VW7
?{EL7 本网站平台建设全过程包括FreeBSD系统的安装,web、ftp、mail、proxy服务器、视频点播服务器等。所有过程都在FreeBSD4.7环境下测试通过。
;'\{T#5) (Ea)`'/ 由于写本文时参考了网上太多前辈和大侠的资料,无法一一列举。还请作者原谅。
Iw?M>'l YWfw%p?n" 本连载文章前后关联很紧密,建议初学者一步一步来做。
lC/4CPKtV x?ajTzMv 试验环境如下:
'xO^2m+N; Q(
WE.ux)< 硬件环境:普通pc机,双网卡。配制不需要高,主要是稳定,并能适应长时间开机。听前辈介绍AMD k6的cpu运行FreeBSD好像有点问题。不过我没有试验。建议用intel的。
+OUYQM mM [WOLUb 软件环境:操作系统:FreeBSD4.7(4.8)
%N"9'g> p'2ZDd=v web服务器:Apache 1.3.27+modssl +mod_php4+mod_gzip+mod_fastcgi +mod_perl +mysql3.23
l!B)1 Ib)>M`J ftp服务器:Proftpd1.2.7+proftpd-mod-quotatab-1.2.4+mysql
Ha~g8R& qlT'gUt=H mail服务器: iceblood前辈制作的qmail安装包(经过修改)+vqregister-2.5
G3j&8[ hRn[ 9B proxy服务器:使用FreeBSD内置的NAT和PPP拨号+squid
i;1EXM a r0y8>]3 视频点播服务器:Helix Universal Servevr (realserver9.01)
t"0Z=`Wi /Z:\=0` 网络环境:我用的是adsl动态拨号方式,因为动态ip所存在的一些问题,我把所有的服务都装在一台机器上,且这台机器要直接与外网相连。静态ip更方便一些。(本文两种方式都会讨论)
G/F0)M w$JG:y# BF*]l8p {r9fKA 第一步:安装系统
W_zv"c FW)G5^Tf 关于安装过程网上有很多文章,这里不作详述。仅提出几点建议供大家参考:
49o5"M( Kn]c4h}@b5 1、 采用最小化安装。
-U6" Ce DA[s k7 2、 安装时启用inetd,并在编辑inetd.conf文件时,把带有“ftp”的行前面的“#”号去掉。这样作是为了以后安装软件时可以用ftp上传文件。
?i.]|#{Z p,y(Fc~]g' 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地址)。以下除系统安装部分,我都是采用终端方式操作。
DU6AlNx !aSu;Ln 4、 分区时将/home、/usr和/var划的大一些,因为/usr为程序目录,/var要存放日志,/home是用户主目录,我的用户文件如网页、ftp上传文件等都放在这里。还有最好保留一部分空间留作以后需要的时候用。我的机器上有2块硬盘,一快18.2G SCSI硬盘,一块40G IDE硬盘。我是这样划分的。
ub|tX 'o t83n` LC 128M /
#+2|ZfCn% wvAXt*R 20G /home
>Q0HqOq
*mQOW]x% 2G /ftp
3>[_2}l Z4\$h1tl 256M /tmp
v{ F/Bifo :)GtPTD 6G /usr
\W<r`t4v JrF\7*rh9 5G /var
PvzB, 2": <y+8\m 其中/ftp是为匿名ftp用户访问专用。剩余空间留作备用。当然如果硬盘空间少的话,做我们的试验也是够用的。
S[o_$@| q?x.P2 关于安装方面的文章,大家也可以参考delphij写的《FreeBSD服务器的安装与优化》。
http://community.freebsdchina.org/catalog.php?forum=34 一文。
*QzoBpO< I'URPj:t 安装完系统后,要重新编译内核。目的是要系统支持Firrwall和提高运行效率。
-[kbHrl& b"+J8W 首先确认系统是否安装了FreeBSD的内核支持。如果是最小安装,则需要运行/stand/sysinstall命令安装内核支持。方法如下:
M1Jnn4w*d \R>!HY # /stand/sysinstall
[.}-n AN gxpGi@5 选Configure—Distributions—src—sys,内核文件将被安装在/usr/src/sys目录中。
D0?l$]aE 7`^]:t 注意:这之后的过程在终端上操作要方便许多。SecureCRT支持在终端界面上直接拷贝和粘贴文本内容。
'F'v/G~F ';buS -|6 转到内核文件目录
s=lkK/ [ $]/a/!d # cd /usr/src/sys/i386/conf
Z3K~C_0Cnu lFT_J?G$' 编辑内核文件
+zpmy3Q DkP%1Crdr # vi kernel_wwwx # kernel_wwwx为我的内核文件名
tlU&p' :@6,|2be= 我的内核文件如下:
h"S+8Y:1{k lx<]v^ #
X@u-n_ $I%75IZ # GENERIC -- Generic kernel configuration file for FreeBSD/i386
Ku{DdiTg> L]o
5=K #
?XVJ$nzW gB!K{ Io' # For more information on this file, please read the handbook section on
m:77pE&o @g*=xwve=~ # Kernel Configuration Files:
f`X#1w9 &xF 2!t` #
dU]> !BHIp7p #
http://www.FreeBSD.org/doc/en_US.IS...fig-config.html >pKu
G# Zy2@1-z6 #
Dm':D ,c:Fa)- # The handbook is also available locally in /usr/share/doc/handbook
0zg\thL yQ>
*F # if you've installed the doc distribution, otherwise always see the
>r7{e:~q c43"o # FreeBSD World Wide Web server (
http://www.FreeBSD.org/) for the
6aG/=fq _DChNX # latest information.
iP1u u Ws[[Me,= #
]p(jL7 <tZPS`c'_ # An exhaustive list of options and more detailed explanations of the
1MdVWFKXV \*#9Ry^f # device lines is also present in the ./LINT configuration file. If you are
UOrfwK jP6;~[rl # in doubt as to the purpose or necessity of a line, check first in LINT.
36D-J)-Z ;|v6^2H" #
]*+ozAG4 rIz"_r # $FreeBSD: src/sys/i386/conf/GENERIC,v 1.246.2.48 2002/08/31 20:28:26 obrien Exp $
zmI?p4, XfFZ;ul C%<[mM 2U6j?MyH2 machine i386
b'Gn)1NE %J\1W"I? cpu I586_CPU
zV {[0s
&UG7
g cpu I686_CPU
rvRtR/*?j 372ewh3' ident kernel_wwwx #内核文件名,这个要和你的内核文件名一致
jyPY]r (S+tQ2bt maxusers 0
{#CyO
b4 K /h9x9^ jp2AU,Cl AF5.gk= options INET #InterNETworking
/+G&N{)k `Nnqdc2 options FFS #Berkeley Fast Filesystem
*B(na+ Zg%SE'kK options FFS_ROOT #FFS usable as root device [keep this!]
IEV3(qzt 4.bL>Y>c options SOFTUPDATES #Enable FFS soft updates support
H".~@,-} e!}R1 options UFS_DIRHASH #Improve performance on big directories
<{.o+~k ;p%a!Im_< options PROCFS #Process filesystem
}et^'BkA( }pKHa'/\ options COMPAT_43 #Compatible with BSD 4.3 [KEEP THIS!]
DJlY~}v#_ %&9tn0B
options SCSI_DELAY=15000 #Delay (in ms) before probing SCSI
v4sc @*W,Jm3Y options SYSVSHM #SYSV-style shared memory
: g/H N9 =8 d`qS" options SYSVMSG #SYSV-style message queues
):C4"2l3 {{M?+]p,^ options SYSVSEM #SYSV-style semaphores
w}pFa76rm @)iv' options P1003_1B #Posix P1003_1B real-time extensions
P-ma~g>I :NHh`@0F options _KPOSIX_PRIORITY_SCHEDULING
$H ^hK0?' m*h
d%1D options ICMP_BANDLIM #Rate limit bad replies
|r5|IA Kx 6_Vp options AHC_REG_PRETTY_PRINT # Print register bitfields in debug
,%X~/V X\\WQxj # output. Adds ~128k to driver.
)RlaVAtM C\UD0r'p? options AHD_REG_PRETTY_PRINT # Print register bitfields in debug
mfLS</A .EGZv(rz& # output. Adds ~215k to driver.
EKf"e*|(L !G3O!] 72} MspzUt [Z0 &`qz device tun 1
yB(^t`)}N ]c8lZO> options IPFIREWALL #防火墙
d;|Pp;dc
(`gqLPx[ options IPFIREWALL_FORWARD #允许透明代理
;ej;<7+ vBQ|h
options IPFIREWALL_VERBOSE #允许防火墙日志
nGGYKI 6gfv7V2H options IPFIREWALL_VERBOSE_LIMIT=100 #限制日志
Zr'VA,v J=W"FEXTL7 options IPFIREWALL_DEFAULT_TO_ACCEPT #默认允许所有IP包
Mi.xay% NvXds;EC options IPDIVERT #启用由ipfw divert使用的转向IP套接字
VN|P(S6 R<)7,i`F YVZm^@ZVV {$ 4fRxj # To make an SMP kernel, the next two are needed
25h.u>6@{ X:+;d8rCy #options SMP # Symmetric MultiProcessor Kernel
E
N%cjvE
Aki8# #options APIC_IO # Symmetric (APIC) I/O
{[o=df/ xlkEW&N& ^_KHw -gH1`*YL device isa
%1a\"F![ f&B&!&gZ device eisa
U$6N-q w<N[K> device pci
mZJ"e,AY hT9fqH fLAOA9 JC}y{R8 jR\&2;T OOs Y{8xM # ATA and ATAPI devices
$d%m%SZxv ?%(8RQ device ata
Q/r9r*>z bl(rCbj(w device atadisk # ATA disk drives
;OTD1= ZffK];D 4&~1|B{Z Zz=+?L
v! uD]} Hb=4k)-/] # SCSI Controllers #没有SCSI设备不需要这段
*^ncb,1+i 5E?{>1 device ahb # EISA AHA1742 family
GUE3| ^KhA\MzY device ahc # AHA2940 and onboard AIC7xxx devices
wz31e!/ 6",1JH,;p device ahd # AHA39320/29320 and onboard AIC79xx devices
<i`Ipj =l&7~ device amd # AMD 53C974 (Tekram DC-390(T))
I/rq@27o >%x7-->IB device isp # Qlogic family
Xa#`VDh g:`V:kbY$ device mpt # LSI-Logic MPT/Fusion
Wcl@H @ tM <6c+ device ncr # NCR/Symbios Logic
wlKfTJrn& G+[hE|L~y device sym # NCR/Symbios Logic (newer chipsets)
Vq2d+
,fb E(*RtOC<W options SYM_SETUP_LP_PROBE_MAP=0x40
l_FttN 3i=+ [ # Allow ncr to attach legacy NCR devices when
fmY=SqQG- F#eZfj~ # both sym and ncr are configured
c?"#x-<1s 5;oWFl
IM|VGT0 i-~HT4iw device adv0 at isa?
z{Z'2 ,# 4*d$o=wa device adw
'@i/?rNi%N yNi/JM device bt0 at isa?
p)RASIB \-$wY%7 device aha0 at isa?
s6%% /| 5ycccMx0V device aic0 at isa?
,IF3VE&r g"c\ouSY Hly2{hokq ;*5$xs&=_Z device ncv # NCR 53C500
lt`(R*B% pca `nN! device nsp # Workbit Ninja SCSI-3
4\a K C%5 kL\
FY device stg # TMC 18C30/18C50
cm@q{(r
O@6iG Pp3<K649 *cz nokq6 # SCSI peripherals #没有SCSI设备不需要这段
+KgLe> -} FY+0r67] device scbus # SCSI bus (required)
w4P?2-kB .w/w]
Eq device da # Direct Access (disks)
FJomUVR . rg64f'+Eug device sa # Sequential Access (tape etc)
X*hY?'Rp YAQ]2<H device cd # CD
yaza P~`gWGC} device pass # Passthrough device (direct SCSI access)
@?lmho? ]Qm$S5tU d,AEV_ `w';}sQA7 w=H GcaLP*%>B 35;|r }7&.FV" # atkbdc0 controls both the keyboard and the PS/2 mouse
W{:^P0l 89o&KF] device atkbdc0 at isa? port IO_KBD
i#]}k PKFjM~J device atkbd0 at atkbdc? irq 1 flags 0x1
Evu`e=LaG ,|6O}E&
FFX-kS k%Dpy2uH device vga0 at isa?
nb
dm@ +A%|.; + 2v6fan 15dhr]8E Yci>'$tQ Ey96XJV # syscons is the default console driver, resembling an SCO console
F|pM$Kd` 2*;qr|h, device sc0 at isa? flags 0x100
$2uk;&"?A= @i2"+_}* /iURP-rl kT)[<`p V&)Jvx}^ v6=pV4k9 # Floating point support - do not disable.
M|8vP53=q 4FrP%|%E~ device npx0 at nexus? port IO_NPX irq 13
0%J0.USkM7 9/2VU<
K AB(WK9o =`Ii?xo Z
0&=Lw X.}i9a
6 # Serial (COM) ports
@A32|p} `|kW%L4 device sio0 at isa? port IO_COM1 flags 0x10 irq 4
?-M?{De .5$"qb
? J]G]
<) I<E~= # 我用的是8139和Dlink DFE-530TX网卡,大家可根据自己的网卡型号保留或删除
;IyA"C(i En!X}Owh # 使用公共的MII总线控制器代码的PCI以太网适配器
}@6Tcn1 D!7-(3R # 注意:一定要保留'device miibus'以确保可用
6[+@#IWx @7S*
] # PCI Ethernet NICs that use the common MII bus controller code.
qFQO1"mu bmCp:6 # NOTE: Be sure to keep the 'device miibus' line in order to use these NICs!
m8[XA!, xf2|9Tqt device miibus # MII bus support
FgwIOpqE* $[f-{B{>* device fxp # Intel EtherExpress PRO/100B (82557, 82558)
7slpj8 Cp"a,% b6u device rl # RealTek 8129/8139
7)Cn 4{B6 )+GwYt device vr # VIA Rhine, Rhine II
,f*Q3 S/I lo!^h]iE ! device xl # 3Com 3c90x (``Boomerang'', ``Cyclone'')
CcCcuxtR M'gGoH}B+q s#Ayl]8r p"@[2hK # Pseudo devices - the number indicates how many units to allocate.
f4'WT &|9K~#LVS pseudo-device loop # Network loopback
a
gkw)# KBC?SxJSJc pseudo-device ether # Ethernet support
trx y3k; ?Vre"6U pseudo-device sl 1 # Kernel SLIP
!d.bCE~ x-nO; L-2p pseudo-device ppp 1 # Kernel PPP
'`s+e#rs4{ jK^Q5iD pseudo-device tun # Packet tunnel.
X!xmto gN@|lHbU pseudo-device pty # Pseudo-ttys (telnet etc)
k~%j"%OB
wK]p`:3 pseudo-device md # Memory "disks"
{,+{,Ere bZ0{wpeK= pseudo-device gif # IPv6 and IPv4 tunneling
_DouVv> Q{[l1: pseudo-device faith 1 # IPv6-to-IPv4 relaying (translation)
6 2:FlW> !jWE^@P/B s$gR;su)g aS! If > # The `bpf' pseudo-device enables the Berkeley Packet Filter.
!i>d04u`% ]\Z8MxFD # Be aware of the administrative consequences of enabling this!
Lv&9s 'fjouO pseudo-device bpf #Berkeley packet filter
+)xjw9b <N{wFvF (完)
XCyU)[wY vSnGPLl (S~kNbIa r03%+: 我用的是8139网卡和Dlink DFE-530TX网卡,如果你用其他型号的网卡,需要察看当前目录的GENERIC 内核文件,找到描述自己的网卡型号的段并将其添加到新的内核文件里。其他的不改直接拷贝过来就可以用了。
zC,c9b X$2f)3 接下来编译安装新内核:
zJ6""38Pr OwCbv j0# # /usr/sbin/config kernel_wwwx #kernel_wwwx为你的内核文件名
y{KYR) q6PG=9d0B # cd ../../compile/kernel_wwwx
S4U}u l [H[L};%=j # make depend
KAJR.YNm R53^3"q~ # make
Xp+lpVcJ r;^%D( # make install
j7BLMTF3v VUi> ]v/e 重新启动(reboot)
\,xa_zeO H+{@VB hd*GDjmRQ/ B:Y F|k}T 如果系统升级过源代码树,按下面方法编译内核:
ds2%i
>PzZt8e # cd /usr/src
g=/!Ry= "Zfm4Nx" # make kernel KERNCONF=kernel_wwwx #kernel_wwwx为你的内核文件名
M5a&eO @O`T|7v 重新启动
uUiS:Tp] ~t<G gNI +
\]-" efNscgi FreeBSD网站平台建设全过程(二、接入Internet并配制代理服务)
7gcR/HNeF 5sANF9o! %:s+5*SKe *_Vv(H& 使用adsl接入Internet有两种情况,通过拨号获取动态ip或服务商直接给定静态ip。后者配制起来较容易。本文先讨论动态ip如何设置。
C*}PL W#+f2 RR 由于第一步重新编译内核时已经加进了对Firewall的支持。这里就可以通过直接编辑/etc/ppp/ppp.conf文件和/etc/rc.conf文件就可以上网并支持NAT方式透明代理了。
-2[#1S* eEBo:Rc9 # vi /etc/ppp/ppp.conf
~N%+ZXh&E hFo29oN 我的ppp.conf文件内容如下:(注意set前要留空格)
A`#?Bj eBH:_Ls_-^ default:
dF[|9%) hF{gN3v5 set log Phase tun command
* RyU*au L+S)hgUH set ifaddr 10.0.0.1/0 10.0.0.2/0
t`="2$NO J'ZC5Xr adsl: # 配置代号
^mg:<_p X}xf_3N
" set device PPPoE:vr0 # vr0 改成你连接ADSL modem的网卡名
k'_f?_PBu IG{lr set mru 1492
h\p!J-V dk^jv + set mtu 1492
0hhxTOp
{i+
o'Lw set authname username # username是拨号用户名
kia[d984w z#Fel/L`O set authkey password # password是拨号密码
gs3c1Qa3b ZH|q#<{l set dial
EjFn\|VK (uDAdE5 set login
QJj='+R> _|4R^*/4 add default HISADDR
O\ _ro. %Z4*;VwQ (完)
D+v?zQw m 94PFD@N ht*(@MCr< J;NIa[a # vi /etc/rc.conf
n?nzm "g v$0|\)E) 我的rc.conf文件内容如下:(动态ip)
"{r8'qn 4b[bj").A # -- sysinstall generated deltas -- # Tue Jul 15 21:20:28 1997
%L^( eTi[ h]h"-3 # Created: Tue Jul 15 21:20:28 1997
g5y`XFY Wlxmp['Bh # Enable network daemons for user convenience.
;py9,Wno @!=Ds'MJC # Please make all changes to this file, not to /etc/defaults/rc.conf.
&ocuZ-5` JRi:MWR<r # This file now contains just the overrides from /etc/defaults/rc.conf.
Pc*lHoVL S't9F hostname="wwwx.3322.org" # 你的主机域名
.hu7JM+ 9DJ&J{2W ifconfig_fxp0="inet 192.168.0.1 netmask 255.255.255.0" #内网网卡ip地址,fxp0是网卡名
zt:
!hM/Vt ZT@=d$Z&t inetd_enable="YES" # 开机加载inetd
Dm{Xd+Y o5p{ O>D[z kern_securelevel_enable="NO"
G"`
}"T0} hcj]T? linux_enable="YES"
6i-G{)=l T 5Zh2Q@ nfs_reserved_port_only="NO"
/6Q]f "o+?vx- sendmail_enable="NO"
.n1&Jsey g=[OH sshd_enable="YES"
sWo}Xq# :P}3cl_ usbd_enable="NO"
b6
%m*~
NdRcA gateway_enable="YES"
)M.s<Y d_d&su
E firewall_enable="YES" #启用防火墙
VS/M@y_./ pDZewb&cA firewall_script="/etc/rc.firewall"
m_*wqNFA6 z`IW[N7Z firewall_type="open"
:Bmn<2[Y; [:{
FR2*x firewall_quiet="YES"
8 7(t<3V& {7ji m firewall_logging_enable="YES"
".
tW5O> |J,zU6t ppp_enable="YES" # 开机自动拨号
aSvv(iV !Z tqh Xr ppp_mode="ddial"
_]OY[&R JyZuj>`
6 ppp_nat="YES" # 启用透明代理
o *J*}y #Z1-+X8P ppp_profile="adsl" # 配置代号
mA{?E9W udqrHR5 # -- sysinstall generated deltas -- # Wed Jul 16 06:52:13 1997
TG}owG]] y62f{ks_/ (完)
sJ|pR=g)! >9!J?HA mFF4qbe >2znn&gZ 这样重新启动后就可以拨号上网并实现透明代理了。客户端需要设置dns服务器为服务商提供的dns,网关设成代理服务器的内网卡ip地址,这里是192.168.0.1。并把IE中“internet选项”关于连接设置的所有复选框清除。
-DdHl8 *sOb I(& 如果解析不了域名,检查一下/etc/resolv.conf文件是否加入了正确的dns服务器地址。
3~T ~Bs ekvs3a^ B^/MwD>% EjLq&QR. 如果是静态ip方式,则只需要编辑/etc/rc.conf文件。
$KYGQP WVRIq' 我的/etc/rc.conf文件如下:(静态ip)
>t3_]n1e VKl,m ;&