(一、系统安装)
S/7D}hJ iFga==rw }5DyNfZ]+0 (Rs<'1+> 前言
\<;/)!Nmw O^sgUT1O }t"!I\C "FG6R' 写本文的初衷主要是记录下我一段时间学习使用FreeBSD建设网站平台的一些经验和体会。因为本人是菜鸟,所以很多地方不够完善。本文权当给初学者提供一个具体可操作的实例。所有操作步骤都是我边做边写。避免出现遗漏或一些不必要的小错误,给初学者带来麻烦。
VWbgusxJ )`;?%N\ 本网站平台建设全过程包括FreeBSD系统的安装,web、ftp、mail、proxy服务器、视频点播服务器等。所有过程都在FreeBSD4.7环境下测试通过。
M#
S:'WN "$
u"Py 由于写本文时参考了网上太多前辈和大侠的资料,无法一一列举。还请作者原谅。
nQ/(*d 8!:4m"Y 本连载文章前后关联很紧密,建议初学者一步一步来做。
51&wH 1v,4[;{ 试验环境如下:
b4,yLVi<T tEf-BV;\y 硬件环境:普通pc机,双网卡。配制不需要高,主要是稳定,并能适应长时间开机。听前辈介绍AMD k6的cpu运行FreeBSD好像有点问题。不过我没有试验。建议用intel的。
2R|2yAh =\oNu&Q^ 软件环境:操作系统:FreeBSD4.7(4.8)
M|Z]B<_x HHg=:>L z web服务器:Apache 1.3.27+modssl +mod_php4+mod_gzip+mod_fastcgi +mod_perl +mysql3.23
5+,&9;'Y^ S}fIZ1 ftp服务器:Proftpd1.2.7+proftpd-mod-quotatab-1.2.4+mysql
<0&];5
on _K/h/!\n mail服务器: iceblood前辈制作的qmail安装包(经过修改)+vqregister-2.5
: @YZ6?hf i,b>&V/Y$ proxy服务器:使用FreeBSD内置的NAT和PPP拨号+squid
#(XP=PUj iCz,|;w% 视频点播服务器:Helix Universal Servevr (realserver9.01)
=o+t_.)N Lqwc:%Y:_ 网络环境:我用的是adsl动态拨号方式,因为动态ip所存在的一些问题,我把所有的服务都装在一台机器上,且这台机器要直接与外网相连。静态ip更方便一些。(本文两种方式都会讨论)
+a;:7[%& Qv']*C[!z /R
F#B#9 D>LdDhNn,` 第一步:安装系统
k('2K2P [.3M>,)+- 关于安装过程网上有很多文章,这里不作详述。仅提出几点建议供大家参考:
.,tf[w 71 :5C9uW# 1、 采用最小化安装。
Lo9+#ITyx ^Z\1z!{R 2、 安装时启用inetd,并在编辑inetd.conf文件时,把带有“ftp”的行前面的“#”号去掉。这样作是为了以后安装软件时可以用ftp上传文件。
kdgQ -UN$ 3#5sj > 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地址)。以下除系统安装部分,我都是采用终端方式操作。
lC^q}Bh: VI37 4、 分区时将/home、/usr和/var划的大一些,因为/usr为程序目录,/var要存放日志,/home是用户主目录,我的用户文件如网页、ftp上传文件等都放在这里。还有最好保留一部分空间留作以后需要的时候用。我的机器上有2块硬盘,一快18.2G SCSI硬盘,一块40G IDE硬盘。我是这样划分的。
>f}rM20Vm cAIS?]1 128M /
Uv5E$Y"e10 !U=;e ?o 20G /home
y{"8VT) L88oh&M 2G /ftp
8G(wYlxi ;~xkT' 256M /tmp
KA%tVBl o2F6K*u} 6G /usr
coU`2n/ &hqGGfVsd 5G /var
L3i\06M U
.G*C 其中/ftp是为匿名ftp用户访问专用。剩余空间留作备用。当然如果硬盘空间少的话,做我们的试验也是够用的。
5RZAs63t qmJFXnf 关于安装方面的文章,大家也可以参考delphij写的《FreeBSD服务器的安装与优化》。
http://community.freebsdchina.org/catalog.php?forum=34 一文。
%o*afd X8?|5$Ey 安装完系统后,要重新编译内核。目的是要系统支持Firrwall和提高运行效率。
4sROMk=l [+ 1([# 首先确认系统是否安装了FreeBSD的内核支持。如果是最小安装,则需要运行/stand/sysinstall命令安装内核支持。方法如下:
0'aZ*ozk uXtfP?3Vy # /stand/sysinstall
&bA;>Lu#|o [(UQQa=+ 选Configure—Distributions—src—sys,内核文件将被安装在/usr/src/sys目录中。
uw;s](~E 8 rnr>Ee@ 注意:这之后的过程在终端上操作要方便许多。SecureCRT支持在终端界面上直接拷贝和粘贴文本内容。
"f5u2=7 } zBqr15 转到内核文件目录
3$WK%"%T C.(<KV{b # cd /usr/src/sys/i386/conf
,!u^E|24
#YhKAG@| 编辑内核文件
.KK"KO5k :t9(T?2 # vi kernel_wwwx # kernel_wwwx为我的内核文件名
tA'i-D& <>2QDI6_ 我的内核文件如下:
h`Y t4-Y ?Yz.tg #
Fda<cS] (Tc ~ # GENERIC -- Generic kernel configuration file for FreeBSD/i386
1!BV]&,[ yh lZdF #
scN}eg:5 Vv6xVX # For more information on this file, please read the handbook section on
4}#*M2wb J&
yDX> # Kernel Configuration Files:
];j8vts& A\k-OP] #
OJ]{FI `p'L3u5H- #
http://www.FreeBSD.org/doc/en_US.IS...fig-config.html Y5Ey%Mm6 M>1V3sM #
<}.)kg${O dk;Ed # The handbook is also available locally in /usr/share/doc/handbook
7.akp )M^;6S # if you've installed the doc distribution, otherwise always see the
b]CJf8'u =a7m^e7 # FreeBSD World Wide Web server (
http://www.FreeBSD.org/) for the
aLhTaB-va o3}12i S # latest information.
`| R8WM &[JI L=m5 #
b@5&<V;r2 aLq=%fsV) # An exhaustive list of options and more detailed explanations of the
L'z?M]
[NaU\;w\ # device lines is also present in the ./LINT configuration file. If you are
-hhE`Y mQ' ]0D S # in doubt as to the purpose or necessity of a line, check first in LINT.
7Zr jU{ 7|65;jm+ #
lm-ubzJN O(WFjmHx # $FreeBSD: src/sys/i386/conf/GENERIC,v 1.246.2.48 2002/08/31 20:28:26 obrien Exp $
r|0C G^:C Re,0RM\ ^!Bpev nE::9Yh8z machine i386
(}]74Lc "ZT=[&2 cpu I586_CPU
1NJ*EzJ~? Ya\G/R cpu I686_CPU
0fNWI KGK8;Q,O ident kernel_wwwx #内核文件名,这个要和你的内核文件名一致
_H:SoJ' (;Lz`r' maxusers 0
ux{OgFfi :UFf6T? w_A-:S
5C o)1wF
X options INET #InterNETworking
lywcT! < 1\zI#"b ^ options FFS #Berkeley Fast Filesystem
QF-.")Z 1mA)=hu options FFS_ROOT #FFS usable as root device [keep this!]
?;uzx7@F .[K{;^> options SOFTUPDATES #Enable FFS soft updates support
@0B<b7Jv F~RUb&*/< options UFS_DIRHASH #Improve performance on big directories
1Kwl_jf ho^1T3 options PROCFS #Process filesystem
0!+ab'3a dbnH#0i options COMPAT_43 #Compatible with BSD 4.3 [KEEP THIS!]
<8-I:o]mF 0ZPPt(7 options SCSI_DELAY=15000 #Delay (in ms) before probing SCSI
*4A.R&Vu I+u=H2][2 options SYSVSHM #SYSV-style shared memory
[-Q"A
6!Zd B}r@x z options SYSVMSG #SYSV-style message queues
D.$EvUSK<. /R@(yT=t options SYSVSEM #SYSV-style semaphores
<|.S~HLTQ B-M|}T options P1003_1B #Posix P1003_1B real-time extensions
hhYo9jTHW ]1D>3 options _KPOSIX_PRIORITY_SCHEDULING
7W}~c/ % i?*&1i@ options ICMP_BANDLIM #Rate limit bad replies
h1)p{5}H 1F[;
)@ options AHC_REG_PRETTY_PRINT # Print register bitfields in debug
j-yD;N r("7
X2f # output. Adds ~128k to driver.
j7"E0Wc^o_ 9(u2jbA options AHD_REG_PRETTY_PRINT # Print register bitfields in debug
'HOcK8}b #1m!,tC # output. Adds ~215k to driver.
?]5wX2G^|J _)%4NjWKk
:i:Zc~% uY'Ib[H device tun 1
;5y!,OF6 5]'iSrp options IPFIREWALL #防火墙
S0p]:r";x #9
}Oqm options IPFIREWALL_FORWARD #允许透明代理
%tQIKjsVaY Mc@p~5!M options IPFIREWALL_VERBOSE #允许防火墙日志
NK"y@)%0 D8Ni=.ALL options IPFIREWALL_VERBOSE_LIMIT=100 #限制日志
I`5MAvP K8e >sU. options IPFIREWALL_DEFAULT_TO_ACCEPT #默认允许所有IP包
fI"`[cA"] 1l1X1 options IPDIVERT #启用由ipfw divert使用的转向IP套接字
S"N@.n[ LU;ma((yy[ c}rRNS$F D:.^]o[
# To make an SMP kernel, the next two are needed
-AcQ_dS C"0gAN #options SMP # Symmetric MultiProcessor Kernel
@6t3Us~/ eb( =V* #options APIC_IO # Symmetric (APIC) I/O
0}P&G^%" !pDS*{)E +cjNA2@ u&pLF%'EQ device isa
EH4WR/x >@ EQarD device eisa
+Pa!pj/< z FK
mFjqY device pci
q8[Nr3. xES+m/?KlZ cl)MI,/> /md`tqI>i< ]=]'*Z% -,XS2[ # ATA and ATAPI devices
gb@!Co3 3&2,[G04 device ata
U?>zq!C&R V(w[`^I>~ device atadisk # ATA disk drives
faMUd#o& y{jv-&!xB [a+?z6qI\} j-A
S {w EDnmYaa)dZ !)LR41>? # SCSI Controllers #没有SCSI设备不需要这段
zb;2xTH+ 4tq>Lx^5U device ahb # EISA AHA1742 family
Tri.>@-u EH,uX{`e device ahc # AHA2940 and onboard AIC7xxx devices
/~AwX8X (&
~`!] device ahd # AHA39320/29320 and onboard AIC79xx devices
C*c=@VAa 8<_WtDg device amd # AMD 53C974 (Tekram DC-390(T))
q*'hSt@+D ^//N-?Fx device isp # Qlogic family
:mg#&MZj< Dvx"4EA{7{ device mpt # LSI-Logic MPT/Fusion
A= ,q& ef,6>xv device ncr # NCR/Symbios Logic
x/9`2X`~ TOBAh.1 device sym # NCR/Symbios Logic (newer chipsets)
AY! zXJ_$ =}Cb?C[; options SYM_SETUP_LP_PROBE_MAP=0x40
}8r+&e d628@~Ekn # Allow ncr to attach legacy NCR devices when
pw(`+x] kWoy%?|RRa # both sym and ncr are configured
<(^-o4Cl ^2=Jv.2{| ]%mg(&p4 WP}__1!%u device adv0 at isa?
4Y-9W2s {/ty{ device adw
Zr$PSp} OSSMIPr device bt0 at isa?
+}^}
<|W6 ("{AY?{{ device aha0 at isa?
_L:
/2 *$hO C%( device aic0 at isa?
>,~JQ%1 xJO[pT v 5Impv3qaZ u
|f h!- device ncv # NCR 53C500
C[x!Lf8' qv,|7yw{ device nsp # Workbit Ninja SCSI-3
y:W$~<E`p `NGCUGQ_7 device stg # TMC 18C30/18C50
}. ,xhF[ 3w^q 0/GD i\`[0dfY O %)+ w # SCSI peripherals #没有SCSI设备不需要这段
F*]AjD- $jw!DrE device scbus # SCSI bus (required)
^&cI+xZ2Y mBnC]$<R device da # Direct Access (disks)
yV`!Fq 1k DU[UGJg device sa # Sequential Access (tape etc)
D|+H!f{k \(;5YCCE device cd # CD
E^|b3G6T QY{f= device pass # Passthrough device (direct SCSI access)
b [u_r,b ?j $z[_K ,q:6[~n "3\)@ 'x!q*|zF2 9VP|a- !UgJ^v b$B5sKQ # atkbdc0 controls both the keyboard and the PS/2 mouse
52:oe1-8 S&R~* device atkbdc0 at isa? port IO_KBD
1nvs51?H S:t7U% device atkbd0 at atkbdc? irq 1 flags 0x1
jo"[$%0` VW'e&v1 . DVCc^5# k:d'aP3 device vga0 at isa?
qkR.{?x +\}]`uS: fEgZ/p!g A70_hhP (xxJ^u>QC ,ciNoP*-~% # syscons is the default console driver, resembling an SCO console
(-~tb- |1t30_ /gS device sc0 at isa? flags 0x100
Nzr zLK WM>9sJf d;'@4NX5+ w0
"h,{ m&;
t; >~ne(n4qy # Floating point support - do not disable.
j)J4[j (]iw#m{ device npx0 at nexus? port IO_NPX irq 13
h~F uuL Q[g%((DL @gTpiV2 5V%K'a( <'s1+^LC q4U?}=PD # Serial (COM) ports
fT
8"1f|w w0Us8JNGz device sio0 at isa? port IO_COM1 flags 0x10 irq 4
Gb8LW,$IT- e[{LNM{/# C\}m_`MR ty7a&>G # 我用的是8139和Dlink DFE-530TX网卡,大家可根据自己的网卡型号保留或删除
)iEK7d^- yqB{QFXO # 使用公共的MII总线控制器代码的PCI以太网适配器
op}x}Ioz }F@`A?k # 注意:一定要保留'device miibus'以确保可用
<H#D/?n5 'g ,Oi1|~ # PCI Ethernet NICs that use the common MII bus controller code.
44S<(Re M,mj{OY~x # NOTE: Be sure to keep the 'device miibus' line in order to use these NICs!
"-I> ImvkB~8N device miibus # MII bus support
5+ VdZ'@ a2x2N_\=/D device fxp # Intel EtherExpress PRO/100B (82557, 82558)
mu:Q2t^ hbN*_[ device rl # RealTek 8129/8139
nY(jN D '6K WobXm device vr # VIA Rhine, Rhine II
na/t=<{ -h.']^I
device xl # 3Com 3c90x (``Boomerang'', ``Cyclone'')
La3f{;|u5M PJb_QL!9 hJaqW'S bt~-=\ # Pseudo devices - the number indicates how many units to allocate.
|!&,etu F,4Q pseudo-device loop # Network loopback
Hm4lR{A
Tm`QZh3 pseudo-device ether # Ethernet support
g,Q!F {Y\hr+A pseudo-device sl 1 # Kernel SLIP
3+!N[6Od9 Ue-HO pseudo-device ppp 1 # Kernel PPP
:Z`4ea"w U,g!KN3P pseudo-device tun # Packet tunnel.
%f,
9 cZ o]*Gv. pseudo-device pty # Pseudo-ttys (telnet etc)
,g^Bu{? S
_# UEf pseudo-device md # Memory "disks"
lt(,/ |=GRPvvi pseudo-device gif # IPv6 and IPv4 tunneling
pY-izML 'v\!}6 pseudo-device faith 1 # IPv6-to-IPv4 relaying (translation)
Sgr<z d'b &Vl,x/ y
?Q"-o ( }S%a] # The `bpf' pseudo-device enables the Berkeley Packet Filter.
2]Y (<PC ,j2qY'wi # Be aware of the administrative consequences of enabling this!
!%5{jO1 1w\Y._jK pseudo-device bpf #Berkeley packet filter
U>X06T 62Jn8DwAT (完)
u}#rS%SF* p>R F4 mflI> J=g `DJIY_{-2 我用的是8139网卡和Dlink DFE-530TX网卡,如果你用其他型号的网卡,需要察看当前目录的GENERIC 内核文件,找到描述自己的网卡型号的段并将其添加到新的内核文件里。其他的不改直接拷贝过来就可以用了。
OE:t!66 8f29Hj+ 接下来编译安装新内核:
E1VCm[j2 ?F`lI""E # /usr/sbin/config kernel_wwwx #kernel_wwwx为你的内核文件名
H&%=>hyX =XoNk1 # cd ../../compile/kernel_wwwx
Kji}2j'a zJ &qR # make depend
+R*4`F:QJQ j*+r`CX # make
/mr&Y}7T ?k"KZxpT # make install
Up/1c:<J uw]e$,x? 重新启动(reboot)
PQf FpmG /:%^Vh3XF q^12Rj;H tkJ/h< 如果系统升级过源代码树,按下面方法编译内核:
: l]>nF4 9Z#37) # cd /usr/src
RRq*CLj
EB\z:n5 # make kernel KERNCONF=kernel_wwwx #kernel_wwwx为你的内核文件名
WqTW@-}I D P.[>x 重新启动
{uckYx-A
# &M nP0}vX)< w7%N=hL1 FreeBSD网站平台建设全过程(二、接入Internet并配制代理服务)
s/A]&!` Q/0}AQO J-X5n 3I& Vy(lyD<6 使用adsl接入Internet有两种情况,通过拨号获取动态ip或服务商直接给定静态ip。后者配制起来较容易。本文先讨论动态ip如何设置。
t`DUY3>36 sCnZ\C@u 由于第一步重新编译内核时已经加进了对Firewall的支持。这里就可以通过直接编辑/etc/ppp/ppp.conf文件和/etc/rc.conf文件就可以上网并支持NAT方式透明代理了。
EBebyQcon ([$F5
q1TR # vi /etc/ppp/ppp.conf
_I'O4s1S ClfpA?vv 我的ppp.conf文件内容如下:(注意set前要留空格)
?xeq*<qfI 2TAy'BB;) default:
4+ 4?0R X>Xpx<RY! set log Phase tun command
kfmIhHlYQ ^5GS!u" set ifaddr 10.0.0.1/0 10.0.0.2/0
t_j.@|/FZ ;$0za]x adsl: # 配置代号
Sb{S^w\m0 89 SsS b set device PPPoE:vr0 # vr0 改成你连接ADSL modem的网卡名
r
Ssv^W+ k$+& set mru 1492
G\P*zzSq SQt$-<>4\ set mtu 1492
s&fU|Jk8 s)To# set authname username # username是拨号用户名
1pz6e8p:m fc!%W#- set authkey password # password是拨号密码
B8IfE` FyY;F;4P set dial
|d:URuG~:I +rql7D0st set login
B:^U~s R bH,Jddc add default HISADDR
Je?V']lm NgH% (完)
ob*2V!" ~" $9auQtC ,fYO>l';`f f0hi70\(X # vi /etc/rc.conf
4/d#)6
7l:H~"9r 我的rc.conf文件内容如下:(动态ip)
DPe`C%Oc1 >U) ,^H( # -- sysinstall generated deltas -- # Tue Jul 15 21:20:28 1997
j5ui o/&:w z # Created: Tue Jul 15 21:20:28 1997
r[\47cG 6=H-H\iw # Enable network daemons for user convenience.
x3WY26e huR<+ =! # Please make all changes to this file, not to /etc/defaults/rc.conf.
B1p9pr tL
IE^ # This file now contains just the overrides from /etc/defaults/rc.conf.
' u0{h HX
<;=m hostname="wwwx.3322.org" # 你的主机域名
+SP5+"y@ n09|Jzv9 ifconfig_fxp0="inet 192.168.0.1 netmask 255.255.255.0" #内网网卡ip地址,fxp0是网卡名
NtT)Wl vhUuf+P* inetd_enable="YES" # 开机加载inetd
Ads^y`b Bq2}nDP kern_securelevel_enable="NO"
LLU>c]a d3 N %V.w linux_enable="YES"
5aWKyXBIx rAQ^:q nfs_reserved_port_only="NO"
''WX NuXU2w~ sendmail_enable="NO"
F,EHZ,<V 1-JWqV(#? sshd_enable="YES"
`[ne<F?e [S9n F usbd_enable="NO"
$23R%8j Y<M}'t gateway_enable="YES"
%EVg.k$ =+"XV8Fi, firewall_enable="YES" #启用防火墙
](0A/,#q6 S@*@*>s^ firewall_script="/etc/rc.firewall"
ll5Kd=3 VLOyUt~O# firewall_type="open"
Gge"`AT Uz62!) firewall_quiet="YES"
$[1 M2>[ +nqOP3 firewall_logging_enable="YES"
2
na8G H?B.Hp| ppp_enable="YES" # 开机自动拨号
JE?XZp@V h
knobk ppp_mode="ddial"
FEP\5d> ph|3M<q6 ppp_nat="YES" # 启用透明代理
)
.]Z}g& 4mPg; n ppp_profile="adsl" # 配置代号
*/S,CV Yhx~5p # -- sysinstall generated deltas -- # Wed Jul 16 06:52:13 1997
MQ,2v.
vZ. wDSU~\ (完)
=lffr?#&B c''!&;[! -BjB>Vt "oTwMU 这样重新启动后就可以拨号上网并实现透明代理了。客户端需要设置dns服务器为服务商提供的dns,网关设成代理服务器的内网卡ip地址,这里是192.168.0.1。并把IE中“internet选项”关于连接设置的所有复选框清除。
J5l:_hZUV jwE<}y
I 如果解析不了域名,检查一下/etc/resolv.conf文件是否加入了正确的dns服务器地址。
EM([N*8o
gReaFnm RZz] .Nx r<0.!j%c 如果是静态ip方式,则只需要编辑/etc/rc.conf文件。
g"#+U7O _]Hn:O"o 我的/etc/rc.conf文件如下:(静态ip)
2[:`w),. h<QXr'4+ # -- sysinstall generated deltas -- # Tue Jul 15 21:20:28 1997
$B(B Db3tI# # Created: Tue Jul 15 21:20:28 1997
Zwq_&cJK ,v^it+Jc' # Enable network daemons for user convenience.
JY_' d,O swJwy~ # Please make all changes to this file, not to /etc/defaults/rc.conf.
jbg@ CA*=C 6DExsB~@ # This file now contains just the overrides from /etc/defaults/rc.conf.
8T2$0 fY6&PuDf. hostname="wwwx.3322.org" #主机域名
&