(一、系统安装)
P<&/$x6 0Its;| C1do]1VH FXSDN268 前言
&+^
# `nq qlxW@| uE|[7,D7;u -*Pt781 写本文的初衷主要是记录下我一段时间学习使用FreeBSD建设网站平台的一些经验和体会。因为本人是菜鸟,所以很多地方不够完善。本文权当给初学者提供一个具体可操作的实例。所有操作步骤都是我边做边写。避免出现遗漏或一些不必要的小错误,给初学者带来麻烦。
eS=k 48'U ?7p|
F^ 本网站平台建设全过程包括FreeBSD系统的安装,web、ftp、mail、proxy服务器、视频点播服务器等。所有过程都在FreeBSD4.7环境下测试通过。
X}=f{/\S J-f0 由于写本文时参考了网上太多前辈和大侠的资料,无法一一列举。还请作者原谅。
AP7W)S R`?^%1^N 本连载文章前后关联很紧密,建议初学者一步一步来做。
6;b 'j\jG (hV"z; rI 试验环境如下:
*Fc&DQT( $P@cS1sB 硬件环境:普通pc机,双网卡。配制不需要高,主要是稳定,并能适应长时间开机。听前辈介绍AMD k6的cpu运行FreeBSD好像有点问题。不过我没有试验。建议用intel的。
}2.}fHb2 ,Df36-74v5 软件环境:操作系统:FreeBSD4.7(4.8)
a?MtY
EK2 2&d&$Jg web服务器:Apache 1.3.27+modssl +mod_php4+mod_gzip+mod_fastcgi +mod_perl +mysql3.23
W.R'2R# Rp|&1nS ftp服务器:Proftpd1.2.7+proftpd-mod-quotatab-1.2.4+mysql
U; xWW9 yk)j;i4@ mail服务器: iceblood前辈制作的qmail安装包(经过修改)+vqregister-2.5
`;qZ$HH :&-}S>pC proxy服务器:使用FreeBSD内置的NAT和PPP拨号+squid
>y~_Hh(TSL E! <$J^ 视频点播服务器:Helix Universal Servevr (realserver9.01)
!U!E_D.O S3w?Zk3hO 网络环境:我用的是adsl动态拨号方式,因为动态ip所存在的一些问题,我把所有的服务都装在一台机器上,且这台机器要直接与外网相连。静态ip更方便一些。(本文两种方式都会讨论)
C4uR5U U:|v(U$"? zLqp@\sT Ju[`Qw`I 第一步:安装系统
}"x*xN oMe]dK 关于安装过程网上有很多文章,这里不作详述。仅提出几点建议供大家参考:
)l}wjKfgO O*v+<|0!l 1、 采用最小化安装。
T6r~OV5 ]e`_.>U 2、 安装时启用inetd,并在编辑inetd.conf文件时,把带有“ftp”的行前面的“#”号去掉。这样作是为了以后安装软件时可以用ftp上传文件。
QX=;,tr gWo~o]f 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地址)。以下除系统安装部分,我都是采用终端方式操作。
p4EItRZS M\6`2q 4、 分区时将/home、/usr和/var划的大一些,因为/usr为程序目录,/var要存放日志,/home是用户主目录,我的用户文件如网页、ftp上传文件等都放在这里。还有最好保留一部分空间留作以后需要的时候用。我的机器上有2块硬盘,一快18.2G SCSI硬盘,一块40G IDE硬盘。我是这样划分的。
gc~h!%'.I uPXqTkod 128M /
&s;^q -c?wEqa~2 20G /home
<3x#(ms!! Lx{N%;t*E 2G /ftp
@b{u/:y &FVlTo1 256M /tmp
7uxPkZbb q$rA-`jw 6G /usr
vUs7#* 5O W(] y| 5G /var
tQaCNS$= piotd, 其中/ftp是为匿名ftp用户访问专用。剩余空间留作备用。当然如果硬盘空间少的话,做我们的试验也是够用的。
hF7mJ\ PcHFj+: 关于安装方面的文章,大家也可以参考delphij写的《FreeBSD服务器的安装与优化》。
http://community.freebsdchina.org/catalog.php?forum=34 一文。
)YtL=w?L' 05 Q8` 安装完系统后,要重新编译内核。目的是要系统支持Firrwall和提高运行效率。
y;Ln ao7i ~&3"Mi&>` 首先确认系统是否安装了FreeBSD的内核支持。如果是最小安装,则需要运行/stand/sysinstall命令安装内核支持。方法如下:
8#u_+;,p U3K<@r # /stand/sysinstall
@qy*R'+ b[;3KmUB 选Configure—Distributions—src—sys,内核文件将被安装在/usr/src/sys目录中。
'aP*++^ }2A1Yt:^P 注意:这之后的过程在终端上操作要方便许多。SecureCRT支持在终端界面上直接拷贝和粘贴文本内容。
==Mi1Q#5C &:#8ol(n5b 转到内核文件目录
E}vO*ZZEw :fVMM7 # cd /usr/src/sys/i386/conf
'f7
*RSKqb ydqmuZ%2h# 编辑内核文件
]q7 LoH'S +%\j$Pv # vi kernel_wwwx # kernel_wwwx为我的内核文件名
7U`S9DDwq o>-v?Ug 我的内核文件如下:
s7i.p] cgXF|'yI&l #
Z:J.FI@ ^p zxwt # GENERIC -- Generic kernel configuration file for FreeBSD/i386
qg{<&V7fE u=}bq{ #
o[[r_v_d r{R7" # For more information on this file, please read the handbook section on
PZ(<eJ> {ah~q}(P # Kernel Configuration Files:
uEGPgYY ( GR[>mkW!M #
^MHn2Cv/~ *Yu\YjLPG #
http://www.FreeBSD.org/doc/en_US.IS...fig-config.html -yQ\3wli` ^r_lj$:+$ #
LA`VqJ [ky6E*dV` # The handbook is also available locally in /usr/share/doc/handbook
{3(.c, q@ Z;~[@7` # if you've installed the doc distribution, otherwise always see the
9Y%?)t.2 zHOE.V2Qo # FreeBSD World Wide Web server (
http://www.FreeBSD.org/) for the
HU[nN* ou^nzm # latest information.
n_n|^4w @IY?DO #
xhkWKB/7 %"[dGB$S # An exhaustive list of options and more detailed explanations of the
X/8iJ-KB ?wf+{x-dPP # device lines is also present in the ./LINT configuration file. If you are
_6UAeZ*M <I%9O:R
# in doubt as to the purpose or necessity of a line, check first in LINT.
-A%?T" H'GYJ ?U" #
km\ld&d]$ .e2A*9, # $FreeBSD: src/sys/i386/conf/GENERIC,v 1.246.2.48 2002/08/31 20:28:26 obrien Exp $
%;\G@q_p{ :6j :9lYL2 *Z]WaDw /4
LR0`A' machine i386
W_,;eyo ,ANK3n\ cpu I586_CPU
%L13Jsw l \^nC2 cpu I686_CPU
<VaMUm<2 %|(?!w7 ident kernel_wwwx #内核文件名,这个要和你的内核文件名一致
C9F+e N.{jM[\F maxusers 0
VHT@s7u0"
1.0!H.>q #xP!!.DF( !b]2q%XM options INET #InterNETworking
M=AvD(+ha U7"BlT!V\ options FFS #Berkeley Fast Filesystem
H
:
T N xeHb89GnoQ options FFS_ROOT #FFS usable as root device [keep this!]
Lubs{-5lk *Cnq2=A]A options SOFTUPDATES #Enable FFS soft updates support
^5^}MB% fcE)V#c"g options UFS_DIRHASH #Improve performance on big directories
j:e^7|. `N,Vs n" options PROCFS #Process filesystem
5{ FM#@ [Yy\> options COMPAT_43 #Compatible with BSD 4.3 [KEEP THIS!]
B80odU& W~u options SCSI_DELAY=15000 #Delay (in ms) before probing SCSI
f' '{.L &=-e`=qJ'6 options SYSVSHM #SYSV-style shared memory
]`@]<6 '>e79f-O) options SYSVMSG #SYSV-style message queues
:G`L3E&1s ^b"bRQqm options SYSVSEM #SYSV-style semaphores
1O9p YW5J q qe2,X? options P1003_1B #Posix P1003_1B real-time extensions
o3F|#op ``|gcG options _KPOSIX_PRIORITY_SCHEDULING
o'eI(@{F= G;Wkm| options ICMP_BANDLIM #Rate limit bad replies
7V=MRf&xQ EDHg'q options AHC_REG_PRETTY_PRINT # Print register bitfields in debug
F:;!)H* #H;hRl # output. Adds ~128k to driver.
W{A
#]r l w<Yv`$-` options AHD_REG_PRETTY_PRINT # Print register bitfields in debug
CzSZ>E$%U fK'.wX9 # output. Adds ~215k to driver.
x[vBK8 ~ThVap[* 7?MB8tJ5r4 5c]}G.NV device tun 1
/^'Bgnez MyH[v E^b options IPFIREWALL #防火墙
G'O/JM ?Q96,T-)
c options IPFIREWALL_FORWARD #允许透明代理
PEW4J{(W ={`CHCI options IPFIREWALL_VERBOSE #允许防火墙日志
BIV<ti$. Y$`eg|$ options IPFIREWALL_VERBOSE_LIMIT=100 #限制日志
qX5yN| A4 ;}/U+`=D? options IPFIREWALL_DEFAULT_TO_ACCEPT #默认允许所有IP包
tyEPU^PM I/On3"U% options IPDIVERT #启用由ipfw divert使用的转向IP套接字
SE^j= 1 j ,C,5l= j0iAU1~_VX 4mN].X[, # To make an SMP kernel, the next two are needed
X*!Dc,0.k =`Po<7D #options SMP # Symmetric MultiProcessor Kernel
X(k{-|9] KdT[*- #options APIC_IO # Symmetric (APIC) I/O
DH:GI1Yu>I vZ$U^>": i<T P: pWs\.::B device isa
+Qh[sGDdY F$Im9T6 device eisa
bVoU|`c
76-jMcGi device pci
{~bIA!kAFI 4^DVW*OiI XXW]0{k:y wG1y,u' ;} l T KVB0IXZC~ # ATA and ATAPI devices
w66v\x~ u8YB)kG device ata
<S1?? -<qxO device atadisk # ATA disk drives
:dP~.ZY7 SY-ez91 i;o}o*= I^~=,D l|YT[LR7 $. %L # SCSI Controllers #没有SCSI设备不需要这段
LY]nl3{E kE/`n],1U device ahb # EISA AHA1742 family
7J9l.cM3 Hm %g_Mt device ahc # AHA2940 and onboard AIC7xxx devices
nPcS3!7B# i"vawxm device ahd # AHA39320/29320 and onboard AIC79xx devices
9!9>
?Z EM=w?T device amd # AMD 53C974 (Tekram DC-390(T))
0YzsA#yv ^Q0&.hL@ device isp # Qlogic family
?Jt$a; t5.`!3EO device mpt # LSI-Logic MPT/Fusion
XrF3kz!44 pDu{e>S|: device ncr # NCR/Symbios Logic
*AZ?~ i^o v`JF\"}S device sym # NCR/Symbios Logic (newer chipsets)
N.Dhu ~V *E:x E/M!2 options SYM_SETUP_LP_PROBE_MAP=0x40
qmZ2d!)o o+nG3kRD # Allow ncr to attach legacy NCR devices when
xXX/]x> A\K,_&x1Z # both sym and ncr are configured
)^4hQ3BS ^q
;Cx7T_p FigR1/3o'6 3{"byfO#% device adv0 at isa?
XCDSmZ V vu(`9u] device adw
W9Nmx3ve CSL#s^4T device bt0 at isa?
gv#4#] Ia2(Km device aha0 at isa?
C.~j'5N $>*Yhz ` device aic0 at isa?
rH&G<o&, g\U/&.}DN wtXY:O %Rp8{.t7 device ncv # NCR 53C500
UVz/n68\k7 845
W>B device nsp # Workbit Ninja SCSI-3
?i~g,P]NK YNSyi@ device stg # TMC 18C30/18C50
P z ?m>># .NJ|p=fy 9Bz0MUbrLl <l$P&jSF3 # SCSI peripherals #没有SCSI设备不需要这段
OL'P]=U \fZiL!E^7 device scbus # SCSI bus (required)
c'Z:9?#5 B^fT>1P device da # Direct Access (disks)
t9FDU +2RNZEc device sa # Sequential Access (tape etc)
MRfb[p3Cx j!\dn!Xwt device cd # CD
?}}qu'N:N $&hN*7Ts device pass # Passthrough device (direct SCSI access)
p3c"ZPO~z %r%So_^ i|]7(z#OyI DP9LO_{ dC.bt|#Oz a(;!O}3_)( {uU 2)5i2- $ rUSKm# # atkbdc0 controls both the keyboard and the PS/2 mouse
^~$\ g] ^T6S()G device atkbdc0 at isa? port IO_KBD
gZO&r#
zI^]esX!2_ device atkbd0 at atkbdc? irq 1 flags 0x1
kA4@`YCl ,2L$G&? X32C}4-B gl{B=NN device vga0 at isa?
a 7#J2 r }#1/fok ~S*b yb2}_k.JG bFY~oa%C ba3*]01Yb # syscons is the default console driver, resembling an SCO console
LY 0]l$ Ooc\1lX device sc0 at isa? flags 0x100
tIc 7:th PT'MNH >oGiIYq O^Q,-=tA\ c6&Q^p|CF 0
Y>M=| # Floating point support - do not disable.
-fy9< B4h5[fPX device npx0 at nexus? port IO_NPX irq 13
^{F_a aI3CNeav _{4^|{>Pv fBhoGA{=g !m;H@KR{ ml6u1+v5 # Serial (COM) ports
Ag9?C* OGOND,/R?/ device sio0 at isa? port IO_COM1 flags 0x10 irq 4
[1_A8s){u Vi*e@IP/ 8R/dA<Ww 3BG>Y(v # 我用的是8139和Dlink DFE-530TX网卡,大家可根据自己的网卡型号保留或删除
E{?au]y$J t$J.+} }I # 使用公共的MII总线控制器代码的PCI以太网适配器
3B0PGvCI1 cA)[XpQ:+W # 注意:一定要保留'device miibus'以确保可用
oDn|2Sdqd TP%+.#Fu # PCI Ethernet NICs that use the common MII bus controller code.
d\]Yk]r ;Hmp f0$ # NOTE: Be sure to keep the 'device miibus' line in order to use these NICs!
L\%orLEmK 0.TaXbi device miibus # MII bus support
@WMA }\Cc k*?I>%^6#T device fxp # Intel EtherExpress PRO/100B (82557, 82558)
HCWNo &@% $2O.3 device rl # RealTek 8129/8139
Qm4o7x{q A1"SLFY device vr # VIA Rhine, Rhine II
x79Ha, CyDV r device xl # 3Com 3c90x (``Boomerang'', ``Cyclone'')
<\ `$Jx# GZip\S4Y A\fb< *.#oxcll # Pseudo devices - the number indicates how many units to allocate.
>UDd @ ~PnTaAPJ pseudo-device loop # Network loopback
Fv74bC% h[o6-f<D pseudo-device ether # Ethernet support
as*4UT3 -=`#fDvBn pseudo-device sl 1 # Kernel SLIP
0@I S F@ Swe pseudo-device ppp 1 # Kernel PPP
(wRgus 6$\jAd| pseudo-device tun # Packet tunnel.
_8,()t'" |`TgX@,#9 pseudo-device pty # Pseudo-ttys (telnet etc)
En{`@JsM 1rKy@9 pseudo-device md # Memory "disks"
8[vc?+>& @$9'@") pseudo-device gif # IPv6 and IPv4 tunneling
F$BbYf2i V#REjsf,t- pseudo-device faith 1 # IPv6-to-IPv4 relaying (translation)
#@HF<'H}mu 9KWuN:Sg ~6YMD -m
*Sq # The `bpf' pseudo-device enables the Berkeley Packet Filter.
Lk\P7w{ /!h;c$ # Be aware of the administrative consequences of enabling this!
VTy9_~q Xpe)PXb pseudo-device bpf #Berkeley packet filter
R;,g1m|] >/[GTqi (完)
ApBWuXp|u wX >*H
#$1Z k:jSbbQ 我用的是8139网卡和Dlink DFE-530TX网卡,如果你用其他型号的网卡,需要察看当前目录的GENERIC 内核文件,找到描述自己的网卡型号的段并将其添加到新的内核文件里。其他的不改直接拷贝过来就可以用了。
`F<jLU^3 G uz"wY 接下来编译安装新内核:
(T`E!A0I\? yY?b.ty # /usr/sbin/config kernel_wwwx #kernel_wwwx为你的内核文件名
Gx`L ks o1M$.* # cd ../../compile/kernel_wwwx
n3AaZp[ }\J2?Et{ # make depend
P3$Q&^? O nQdq^UB # make
.7K7h^*F iQDx{m3] # make install
{|I;YDA hGpv2>M 重新启动(reboot)
]vwW]O7 !*RqCS, DL$@?.?I :#@ = B] 如果系统升级过源代码树,按下面方法编译内核:
7}M2bH} \K ]a5 f2lE # cd /usr/src
'%q$`KDb (L^]Lk
x) # make kernel KERNCONF=kernel_wwwx #kernel_wwwx为你的内核文件名
AGLscf. [w%
qV 6 重新启动
M#(+c_(r *G*
k6.9W! 89r DyRJ; dFKM
8_jH FreeBSD网站平台建设全过程(二、接入Internet并配制代理服务)
^0/j0]O ;L']e"G ep)>X@t bv&;R 使用adsl接入Internet有两种情况,通过拨号获取动态ip或服务商直接给定静态ip。后者配制起来较容易。本文先讨论动态ip如何设置。
t+9][Adf g$b<1:8 由于第一步重新编译内核时已经加进了对Firewall的支持。这里就可以通过直接编辑/etc/ppp/ppp.conf文件和/etc/rc.conf文件就可以上网并支持NAT方式透明代理了。
dC RyOid$ 0`^&9nR # vi /etc/ppp/ppp.conf
|JQQU!x 293M\5: 我的ppp.conf文件内容如下:(注意set前要留空格)
o!)3? Y1]n^ default:
rqY`8Ry2M z11O F set log Phase tun command
h5(4*$% Hy^N!rBxfO set ifaddr 10.0.0.1/0 10.0.0.2/0
4^M y3fGWa*7e adsl: # 配置代号
hEp(A8g)bQ uD^cxD set device PPPoE:vr0 # vr0 改成你连接ADSL modem的网卡名
yU9DSY\m{ +0OLc2
)w set mru 1492
gHo?[pS%y ;qm
D50:% set mtu 1492
Y'8?.a]' "1%5, set authname username # username是拨号用户名
r,h%[JKM >r !|sC set authkey password # password是拨号密码
$m/)FnU/ "'t0h{Wr8 set dial
.>WxDQIo abyo4i5T set login
ME*LHr, >k (C add default HISADDR
N<XNTf h2XfC.f (完)
7eAX*Kgt<_ ev*k*0
]7RD"} d8c=L8~jt # vi /etc/rc.conf
R^Y
<RI |&zz,+ E 我的rc.conf文件内容如下:(动态ip)
?vbvBu{a Z'.AA OG # -- sysinstall generated deltas -- # Tue Jul 15 21:20:28 1997
;IZwTXu !S c}2jmwq
# Created: Tue Jul 15 21:20:28 1997
fTK3,s1= ?`PvL!' # Enable network daemons for user convenience.
lE4HM$p
e]zBf;9J # Please make all changes to this file, not to /etc/defaults/rc.conf.
C$XU%5qi PamO8^!G # This file now contains just the overrides from /etc/defaults/rc.conf.
Pu" P9 1pgU}sRk hostname="wwwx.3322.org" # 你的主机域名
H"
3fT 0 NgP&.39U ifconfig_fxp0="inet 192.168.0.1 netmask 255.255.255.0" #内网网卡ip地址,fxp0是网卡名
7_inJ$
2*^j inetd_enable="YES" # 开机加载inetd
xD~5UER DK:o]~n kern_securelevel_enable="NO"
q1d}{DU |xdsl, linux_enable="YES"
k@k&}N0{ `T5W}p[6 nfs_reserved_port_only="NO"
]1#e#M]# ?iWi sendmail_enable="NO"
w=T\3(%j P*3BB>FO sshd_enable="YES"
CDK5 !xo{-@@wS usbd_enable="NO"
fof TP1 d,B:kE0Y gateway_enable="YES"
sN9&,&W1 BHU6t<G
firewall_enable="YES" #启用防火墙
l~w2B>i) U@uGNMKR firewall_script="/etc/rc.firewall"
w"Gm; B4 of%Ktm5Qi firewall_type="open"
8c9*\S 3u*4o=4e firewall_quiet="YES"
Qp_isU <7/R,\Wg~ firewall_logging_enable="YES"
3TeY%5iVt vqDu(6!2 ppp_enable="YES" # 开机自动拨号
su{poQ}K <lx+/o ppp_mode="ddial"
&8Cu#^3
mwHB(7YS, ppp_nat="YES" # 启用透明代理
oAODp!_c #S!)JM|4wk ppp_profile="adsl" # 配置代号
'7hu 2i5 n|9-KTe7|* # -- sysinstall generated deltas -- # Wed Jul 16 06:52:13 1997
<Tzrj1"Q3 D9^h;
8 (完)
R3gdLa. Ezc?#<+7 e>+i>/Fn{h K*K,}W&} 这样重新启动后就可以拨号上网并实现透明代理了。客户端需要设置dns服务器为服务商提供的dns,网关设成代理服务器的内网卡ip地址,这里是192.168.0.1。并把IE中“internet选项”关于连接设置的所有复选框清除。
D#cyOrzy [+T.at 如果解析不了域名,检查一下/etc/resolv.conf文件是否加入了正确的dns服务器地址。
Lo{
E:5q 4i)1'{e .,<1%-R34q J\twZ>w~0 如果是静态ip方式,则只需要编辑/etc/rc.conf文件。
6-N?mSQU N} G[7Rp8l 我的/etc/rc.conf文件如下:(静态ip)
%*A0# F .sha& # -- sysinstall generated deltas -- # Tue Jul 15 21:20:28 1997
#rMlI3; .o(fe\KHf # Created: Tue Jul 15 21:20:28 1997
&Cr: