(一、系统安装)
S`"M;%T 8fdK|l w r^?%N3 >Tld: 前言
0=8.8LnN( V\kf6E qb
^4G v5t`?+e 写本文的初衷主要是记录下我一段时间学习使用FreeBSD建设网站平台的一些经验和体会。因为本人是菜鸟,所以很多地方不够完善。本文权当给初学者提供一个具体可操作的实例。所有操作步骤都是我边做边写。避免出现遗漏或一些不必要的小错误,给初学者带来麻烦。
X!n-nms Kk~0jP_ B9 本网站平台建设全过程包括FreeBSD系统的安装,web、ftp、mail、proxy服务器、视频点播服务器等。所有过程都在FreeBSD4.7环境下测试通过。
U"xI1fg%b Z8=4cWI~; 由于写本文时参考了网上太多前辈和大侠的资料,无法一一列举。还请作者原谅。
*4^!e/ 6!i0ioZzi0 本连载文章前后关联很紧密,建议初学者一步一步来做。
%xR;8IO 3Lq?Y7#KQp 试验环境如下:
`\&qk)ZP 48n>[
FMSR 硬件环境:普通pc机,双网卡。配制不需要高,主要是稳定,并能适应长时间开机。听前辈介绍AMD k6的cpu运行FreeBSD好像有点问题。不过我没有试验。建议用intel的。
w>X33Ff]8@ AO'B p5:Q 软件环境:操作系统:FreeBSD4.7(4.8)
?|:!PF*L~z %&^F.JTt\ web服务器:Apache 1.3.27+modssl +mod_php4+mod_gzip+mod_fastcgi +mod_perl +mysql3.23
N
L]:<FG 7;n'4LIa9 ftp服务器:Proftpd1.2.7+proftpd-mod-quotatab-1.2.4+mysql
~"5WQK`@ S {z%Q mail服务器: iceblood前辈制作的qmail安装包(经过修改)+vqregister-2.5
.J~iRhVOF z1LATy proxy服务器:使用FreeBSD内置的NAT和PPP拨号+squid
cJm!3X eR8qO"%2: 视频点播服务器:Helix Universal Servevr (realserver9.01)
;sa-Bh=j^ 1H@GwQ|<= 网络环境:我用的是adsl动态拨号方式,因为动态ip所存在的一些问题,我把所有的服务都装在一台机器上,且这台机器要直接与外网相连。静态ip更方便一些。(本文两种方式都会讨论)
5jg^12EP @)m+O#a U$pHfNTH awXL}m[_! 第一步:安装系统
=5LtEgHU -?!Z/#i4 关于安装过程网上有很多文章,这里不作详述。仅提出几点建议供大家参考:
/wCee G,< ?}B9=R$Pi 1、 采用最小化安装。
a7q-*%+d5 +iwNM+K/gQ 2、 安装时启用inetd,并在编辑inetd.conf文件时,把带有“ftp”的行前面的“#”号去掉。这样作是为了以后安装软件时可以用ftp上传文件。
Gz!72H -^;G^Uq6= 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地址)。以下除系统安装部分,我都是采用终端方式操作。
/v;g v[ }{Lf 4|8 4、 分区时将/home、/usr和/var划的大一些,因为/usr为程序目录,/var要存放日志,/home是用户主目录,我的用户文件如网页、ftp上传文件等都放在这里。还有最好保留一部分空间留作以后需要的时候用。我的机器上有2块硬盘,一快18.2G SCSI硬盘,一块40G IDE硬盘。我是这样划分的。
-b(:kAwStk [/*854 128M /
|n=kYs ,_Fq*6 20G /home
i[^?24~ c Vk$zA<sw" 2G /ftp
N:clwmo KL0u:I(lWU 256M /tmp
G_[|N> *Yvfp{B 6G /usr
$Kb-mFR 788q<7E 5G /var
,+*8@>c _hMVv&$ 其中/ftp是为匿名ftp用户访问专用。剩余空间留作备用。当然如果硬盘空间少的话,做我们的试验也是够用的。
H U$:x"AW t_,iV9NrZ 关于安装方面的文章,大家也可以参考delphij写的《FreeBSD服务器的安装与优化》。
http://community.freebsdchina.org/catalog.php?forum=34 一文。
^C):yxNP q`}Q[Li 安装完系统后,要重新编译内核。目的是要系统支持Firrwall和提高运行效率。
f<WnPoV OV>T}Fq 首先确认系统是否安装了FreeBSD的内核支持。如果是最小安装,则需要运行/stand/sysinstall命令安装内核支持。方法如下:
VPn#O K~@-*8% # /stand/sysinstall
X&M4c5Li =YZp,{T 选Configure—Distributions—src—sys,内核文件将被安装在/usr/src/sys目录中。
Sd^e!?bp PQvq$|q 注意:这之后的过程在终端上操作要方便许多。SecureCRT支持在终端界面上直接拷贝和粘贴文本内容。
kzns:-a &N*S
转到内核文件目录
0wZLkU_( DZ ~|yH # cd /usr/src/sys/i386/conf
5HL JkOV5 h:# 编辑内核文件
.rG Rdb Ua V9T:)x # vi kernel_wwwx # kernel_wwwx为我的内核文件名
Nf0b?jn- /n?5J`6 我的内核文件如下:
**-%5~ tJ.LPgfZ #
/ vje='[!
O\]CfzR # GENERIC -- Generic kernel configuration file for FreeBSD/i386
p4Vw`i+DnH 'iMI&?8u #
,$vc*}yI0 4VaUa8 D # For more information on this file, please read the handbook section on
x;Dr40wD@y u/y`M]17 # Kernel Configuration Files:
<s+=v! w69`vK
#
A~I}[O~(pb %r6~5_A #
http://www.FreeBSD.org/doc/en_US.IS...fig-config.html ]v94U b ID'@}69.S #
(rZq0* w6R=r
n # The handbook is also available locally in /usr/share/doc/handbook
DWk'6;e4j {E6b/G?Q
# if you've installed the doc distribution, otherwise always see the
9eGM6qW\_ I^M3>}p # FreeBSD World Wide Web server (
http://www.FreeBSD.org/) for the
}
%S1OQC A[ /0on5r # latest information.
'4dnC2a] $hndb+6q #
HQ@X"y
n gl.P#7X # An exhaustive list of options and more detailed explanations of the
*[W! ng 4=F~^Xc` # device lines is also present in the ./LINT configuration file. If you are
N;-+)=M,rf t}nZrD # in doubt as to the purpose or necessity of a line, check first in LINT.
IH[/fd0 r]BB$^@@V #
:;{U2q+ qdZn9i # $FreeBSD: src/sys/i386/conf/GENERIC,v 1.246.2.48 2002/08/31 20:28:26 obrien Exp $
4^70r9hV9 ,UWO+B] EW#.)@- B{s[SZ machine i386
#1u4Hi(x5 X@af[J[cQ cpu I586_CPU
b%,5B A{9Hm:) cpu I686_CPU
r1ctW#\~8 B`RbXk68q ident kernel_wwwx #内核文件名,这个要和你的内核文件名一致
a/_sL(F{ ] =>vv;L maxusers 0
;?z b ( 2 ((EN&X,v C"IPCJYn 7ou2SL}k options INET #InterNETworking
|`qur5h` <T options FFS #Berkeley Fast Filesystem
%tUJ >qYU k[Uc_= options FFS_ROOT #FFS usable as root device [keep this!]
Ik;~u8j1e ,W*<e- options SOFTUPDATES #Enable FFS soft updates support
f} }Bb8 YaSwn3i/@S options UFS_DIRHASH #Improve performance on big directories
v[m/>l2[P Z9=Cw0( w? options PROCFS #Process filesystem
Lk#u^|Eq7= e
*;"$7o9 options COMPAT_43 #Compatible with BSD 4.3 [KEEP THIS!]
mtm BL2? _a15R/S options SCSI_DELAY=15000 #Delay (in ms) before probing SCSI
j]Rl1~+M m>zUwGYEu options SYSVSHM #SYSV-style shared memory
us`hR!_ JguE#ob2 options SYSVMSG #SYSV-style message queues
IO^O9IEx, oPzt1Y options SYSVSEM #SYSV-style semaphores
fcJ#\-+E wg! options P1003_1B #Posix P1003_1B real-time extensions
;EL!TzL:8 kz,Nz09}W options _KPOSIX_PRIORITY_SCHEDULING
Ms^Y:,;Hi .o|Gk
5) options ICMP_BANDLIM #Rate limit bad replies
68 - I2@& _6=6 b!hD options AHC_REG_PRETTY_PRINT # Print register bitfields in debug
x0Tb7y`
w:MfaN* # output. Adds ~128k to driver.
<ezvz..g 2!]':(8mR options AHD_REG_PRETTY_PRINT # Print register bitfields in debug
!WVF{L,/I ut-UTW # output. Adds ~215k to driver.
gyI5;il~ =x/]2+
s [2)Y0; [" [R
A=M device tun 1
!i)?j@D 3.R?=npA options IPFIREWALL #防火墙
NwT3e&u%| dVO|q9 / options IPFIREWALL_FORWARD #允许透明代理
@zd)]O]xH? *e_ /D$SC options IPFIREWALL_VERBOSE #允许防火墙日志
;zSh9H O;qS3 options IPFIREWALL_VERBOSE_LIMIT=100 #限制日志
*QjFrw3 )JuD ! options IPFIREWALL_DEFAULT_TO_ACCEPT #默认允许所有IP包
o5Pq>Y2T O^U{I?gQ options IPDIVERT #启用由ipfw divert使用的转向IP套接字
wk8XD(& ~(I\O?k>H ,a5I:V^\ WNd(X} # To make an SMP kernel, the next two are needed
5G\vV]RR& G9Xrwk<g4 #options SMP # Symmetric MultiProcessor Kernel
YdE$G>&em ]d% hU #options APIC_IO # Symmetric (APIC) I/O
s=U_tfpH YEVH?`G zJdlHa{ l)XzU&Sc~ device isa
oWx!
'K6]V ~2rZL device eisa
?LvZEiJ
93o}vy-> device pci
_4.`$n/Z f>p;Jh{2fn =P0~=UP s)ZL`S?</ mjB%"w!S WnUYZ_+e! # ATA and ATAPI devices
i'`Z$3EF) c(YNv4*X device ata
,VJ0J!@ @Cw<wrem device atadisk # ATA disk drives
,pf<"^li 6\b B#a 8b|& l4r09"S|V uv9cOd .D)'ZY # SCSI Controllers #没有SCSI设备不需要这段
X<Vko^vlj rC/m}`b device ahb # EISA AHA1742 family
]_F%{ 8| M@s2T|bQw device ahc # AHA2940 and onboard AIC7xxx devices
L
F Z +XFF@h&=t device ahd # AHA39320/29320 and onboard AIC79xx devices
uWi+F)GS^K :[\}Hn= device amd # AMD 53C974 (Tekram DC-390(T))
W~dS8B=< j6IWdqXe device isp # Qlogic family
9Z
rWG ;t"#7\ device mpt # LSI-Logic MPT/Fusion
bnUd !/; =3/||b4c device ncr # NCR/Symbios Logic
j<wg>O:s%r ` [@
F3x device sym # NCR/Symbios Logic (newer chipsets)
ur*1I/v d;;]+% options SYM_SETUP_LP_PROBE_MAP=0x40
R2t5T-8`c #Du1(R # Allow ncr to attach legacy NCR devices when
7c4\'dt# cq@8!Eu w] # both sym and ncr are configured
h7I_{v8 IY,&/MCh *>S\i7RET Td"f(&Hk& device adv0 at isa?
}2V|B4 3x'BMAA+ device adw
V><5N;w K.b-8NIUW device bt0 at isa?
"E8-76n (j}"1 device aha0 at isa?
K~v"%sG{` *4]I#N device aic0 at isa?
yv4hH4Io ldi'@^ y=5s~7] R}>Gk device ncv # NCR 53C500
;se-IDN N7}.9%EV device nsp # Workbit Ninja SCSI-3
X#gZgz =' h_x"/z& device stg # TMC 18C30/18C50
h"]v+u`!SM IqcPml{\ CKNH/[ZR, l)=Rj`M # SCSI peripherals #没有SCSI设备不需要这段
jo{GPp} RK"dPr device scbus # SCSI bus (required)
(#LV*&K%IC 2$=?;~ device da # Direct Access (disks)
}T4"#'` ##1[/D( device sa # Sequential Access (tape etc)
MP;7u%
Vk@u|6U' device cd # CD
rc9 \ 8Z F Ps/HP device pass # Passthrough device (direct SCSI access)
/Q})%j1S0 O2ety2}?f 4N*Fq!k~ l|U=(aA]h KzI$GU3 '1^\^)&q U#d",s C4TJS,!1rH # atkbdc0 controls both the keyboard and the PS/2 mouse
7cY_=X-?Y :}e*3={4 device atkbdc0 at isa? port IO_KBD
T~=NY,n 2vu"PeU9 device atkbd0 at atkbdc? irq 1 flags 0x1
) dwPD YDC[s ^d5 >L?/Ph %d r3_@ L>; device vga0 at isa?
lNls8@ zSj.Y{J nWmc Pm7,Nq)<>n mNWmp_c,1 @H1pPr # syscons is the default console driver, resembling an SCO console
l J;wl|9 L7%Dc2{^( device sc0 at isa? flags 0x100
$2 ~A^#"0 >umcpkp-h )Xl/|YD
VG q' y<8)mw E/Eny5 # Floating point support - do not disable.
HiILJyb N[){yaj device npx0 at nexus? port IO_NPX irq 13
o/2\8 `f8{^Rau gO gZ X./8
PK?& Xr6lYO _R 9 qqy( H # Serial (COM) ports
'O
\YL(j_e v9u/<w68! device sio0 at isa? port IO_COM1 flags 0x10 irq 4
~EpMO]I E9!IGci ofj7$se g@`14U/| # 我用的是8139和Dlink DFE-530TX网卡,大家可根据自己的网卡型号保留或删除
#Z98D9Pv`o DUM,dFIlvF # 使用公共的MII总线控制器代码的PCI以太网适配器
T{{J'
_s5L }i|o":-x+ # 注意:一定要保留'device miibus'以确保可用
H.v`JNs( 2JUX29rER # PCI Ethernet NICs that use the common MII bus controller code.
qs\
&C 3Ey#? # NOTE: Be sure to keep the 'device miibus' line in order to use these NICs!
Bwn9ZYu#r Tf21K9+`L device miibus # MII bus support
)p(5$AR7 \aU^c24> device fxp # Intel EtherExpress PRO/100B (82557, 82558)
J &u&G7#S
s7D_fv4e device rl # RealTek 8129/8139
C W7E2
^P$ WK:~2m&y device vr # VIA Rhine, Rhine II
3@XCP-` 9kH~+ device xl # 3Com 3c90x (``Boomerang'', ``Cyclone'')
7.hVbjy'- S%kE<M? rs=wEMq/ aVO5zR./) # Pseudo devices - the number indicates how many units to allocate.
]J~37 35] s~IOc%3 pseudo-device loop # Network loopback
OzX\s= `P)1RTVx pseudo-device ether # Ethernet support
j<R,}nmD3\ va95/( pseudo-device sl 1 # Kernel SLIP
%R7Q`!@8 b+[9)B)a? pseudo-device ppp 1 # Kernel PPP
/>FrMz8;( >O9j},X pseudo-device tun # Packet tunnel.
kIiId8l JUF[Y^C pseudo-device pty # Pseudo-ttys (telnet etc)
slDxsb /49PF:$? pseudo-device md # Memory "disks"
r*0a43mC1 /FkLZm pseudo-device gif # IPv6 and IPv4 tunneling
(|bMtT?"x }rn}r4_a pseudo-device faith 1 # IPv6-to-IPv4 relaying (translation)
Kbg`ZO* y@nWa\iG |pqLwnOu [I4K`>|Z # The `bpf' pseudo-device enables the Berkeley Packet Filter.
o!aKeM~|Es ~SUA.YuF # Be aware of the administrative consequences of enabling this!
0u'4kF!P! e\%QHoi>u pseudo-device bpf #Berkeley packet filter
y~SFlv36 O->i>d (完)
Z?ZcQ[eC b+OLmd ]^3_eHa^d \Y
Cj/tG8 我用的是8139网卡和Dlink DFE-530TX网卡,如果你用其他型号的网卡,需要察看当前目录的GENERIC 内核文件,找到描述自己的网卡型号的段并将其添加到新的内核文件里。其他的不改直接拷贝过来就可以用了。
zb?wlfT I{_St8 接下来编译安装新内核:
o%Vf#W -=Q_E^' # /usr/sbin/config kernel_wwwx #kernel_wwwx为你的内核文件名
y$r9Y!?s U^+9l?ol # cd ../../compile/kernel_wwwx
?"{+m !6@xX08z # make depend
h$f/NSct2 Mpk^e_9`< # make
wf=#w}f uZ]B ?Z%y# # make install
bhOyx 5y(irbk7 重新启动(reboot)
YRG+I GX ::j'+_9 bsuUl*l) bv\V>s 如果系统升级过源代码树,按下面方法编译内核:
xGk@BA=0< n{r+t=X # cd /usr/src
%,K |v V~Tjz%< # make kernel KERNCONF=kernel_wwwx #kernel_wwwx为你的内核文件名
:0CR=]WM dsR{
P,! 重新启动
H'q&1^w) Dr6Br<yi c~5#)AXMT ?uU0NKZA FreeBSD网站平台建设全过程(二、接入Internet并配制代理服务)
\S=!la_T@m 9(ZzwkD'> mIFS/C 7v?tSob:b 使用adsl接入Internet有两种情况,通过拨号获取动态ip或服务商直接给定静态ip。后者配制起来较容易。本文先讨论动态ip如何设置。
S82NU2L }E*d)n| 由于第一步重新编译内核时已经加进了对Firewall的支持。这里就可以通过直接编辑/etc/ppp/ppp.conf文件和/etc/rc.conf文件就可以上网并支持NAT方式透明代理了。
]N!SG@X+ r?{Vqephz # vi /etc/ppp/ppp.conf
Kp~k!6x D4
{gt\V 我的ppp.conf文件内容如下:(注意set前要留空格)
(PsA[>F
#7lkj:j4 default:
3a!/EP rHT8a^MO set log Phase tun command
66p_d'U D'fP2?3FK set ifaddr 10.0.0.1/0 10.0.0.2/0
g#9w5Q pqMvYF adsl: # 配置代号
nI2}E iBp 71x65 set device PPPoE:vr0 # vr0 改成你连接ADSL modem的网卡名
iUS379wM} F#X\}MvEU set mru 1492
L9Fx
Lw41 "'t<R}t!A set mtu 1492
u+I-!3J87 {@Diig set authname username # username是拨号用户名
gW/H#T, ,=$yvZs4[] set authkey password # password是拨号密码
_\@i&3hkx Xuh_bW&zF set dial
:Jhx4/10 k`oXo% set login
B|:{.U@ne i$"FUC~' add default HISADDR
&\<RVE B
susXW$ (完)
PO&xi9_
`c :'il? 7c
%@2
&sS k~: # vi /etc/rc.conf
_j%Rm:m;< M#<x2ojW 我的rc.conf文件内容如下:(动态ip)
Z"Et]xSU%$ 2<ef&?ljk # -- sysinstall generated deltas -- # Tue Jul 15 21:20:28 1997
/R|"/B0 _&
KaI }O # Created: Tue Jul 15 21:20:28 1997
R)<Fqa7Tm s3J T1TX # Enable network daemons for user convenience.
d57(#)` mG?a)P # Please make all changes to this file, not to /etc/defaults/rc.conf.
KOi%zE% WCR+ZXI?1 # This file now contains just the overrides from /etc/defaults/rc.conf.
elKQge nJ*NI) hostname="wwwx.3322.org" # 你的主机域名
/jj!DO# _xUhDu% ifconfig_fxp0="inet 192.168.0.1 netmask 255.255.255.0" #内网网卡ip地址,fxp0是网卡名
]"/ *7NM (/ k, q inetd_enable="YES" # 开机加载inetd
(]7@0d88 ,P auP~L kern_securelevel_enable="NO"
NA/+bgyuT> {F@;45)o linux_enable="YES"
zh/+1 Bj@&c> nfs_reserved_port_only="NO"
}Ecm l\$C)q6O sendmail_enable="NO"
QRdb~f;<hj n8:2Z> sshd_enable="YES"
.-RW lUe;, ]nfS vPb usbd_enable="NO"
"hy#L
0\t "H G:by gateway_enable="YES"
R`1$z8$ zR{TWk] firewall_enable="YES" #启用防火墙
gvcT_' nF=Ig-NX^ firewall_script="/etc/rc.firewall"
4a!L/m* jU4Ir{f firewall_type="open"
zcxG%? Q S?Eg firewall_quiet="YES"
8De
`.!Gg o,aI<5" firewall_logging_enable="YES"
e;!<3b NoKYHN^*w ppp_enable="YES" # 开机自动拨号
i^QcW!X& =A!I-@]q< ppp_mode="ddial"
57[O)5u.+ JRodYXjE ppp_nat="YES" # 启用透明代理
m|f|u3'z$ \[>Rt ppp_profile="adsl" # 配置代号
{|rwIRe dDm<'30?*v # -- sysinstall generated deltas -- # Wed Jul 16 06:52:13 1997
YDmFR,047 0hNc#x6 (完)
B"Fg`s+]U -C8awtbC G 8NSBaZe X;6X
K$" 这样重新启动后就可以拨号上网并实现透明代理了。客户端需要设置dns服务器为服务商提供的dns,网关设成代理服务器的内网卡ip地址,这里是192.168.0.1。并把IE中“internet选项”关于连接设置的所有复选框清除。
)L#I#% 97Q!Rot 如果解析不了域名,检查一下/etc/resolv.conf文件是否加入了正确的dns服务器地址。
4e%SF|(Y'h GGLVv) ~+T~}S [xE\IqwM 如果是静态ip方式,则只需要编辑/etc/rc.conf文件。
j;+nnpg OKf/[hyu 我的/etc/rc.conf文件如下:(静态ip)
ol:_2G2xQ r;Dl # -- sysinstall generated deltas -- # Tue Jul 15 21:20:28 1997
aqyXxJS8 p1|@F^Q # Created: Tue Jul 15 21:20:28 1997
H>Fy 2w ?iia # Enable network daemons for user convenience.
:^ cA\2= %*s[s0$c # Please make all changes to this file, not to /etc/defaults/rc.conf.
"arbUX~d gqC:r,a # This file now contains just the overrides from /etc/defaults/rc.conf.
Gm6^BYCk HX=`kkX hostname="wwwx.3322.org" #主机域名
_C*}14
"3 ,>~92 defaultrouter="218.10.104.1" #服务商提供的路由器地址
a{-}8f6 |bBYJ ifconfig_vr0="inet 218.10.104.188 netmask 255.255.255.0" #服务商提供的静态ip
U#Z}a
d?VX leyX:
+ ifconfig_fxp0="inet 192.168.0.1 netmask 255.255.255.0" #内部网卡ip
&