本文献给和我一样初次接触FreeBSD的朋友们。
我这个人比较倔,但是一直以来自信心还可以。由于想装一个web server,多方打听知道freebsd在这方面还比较强,于是下定决心准备搞一个自己的freebsd web server出来。
以前都是玩ms的windows系列,开始搞freebsd,当然有些摸不着门,下面就是我关于freebsd的一些初步经验,希望能对后来的新新人有所帮助。我也是freebsd的菜鸟,大家共勉吧。下面的文字,对我来说也就是笔记,我害怕将来我再装FB WEB SERVER的时候,某些环节会有疏漏,故成此文,还请行家斧正。
一、基本要求
要玩好freebsd这种unix类操作系统,我觉得首先需要有下面两个基本能力,否则的确会非常艰难。
1. 良好的英文能力。freebsd虽然也有图形界面(GUI),但如果是做服务器,更多是靠命令行(如同msdos)操作,在我这里web server的例子里,几乎是纯命令行作业。所以英文能力是很重要的。
2. unix基础。基本的unix指令要知道,比如 ls、pwd、cp、man、rm、mkdir、rmdir 等。尤其要知道 man 命令的作用。还要知道当屏幕显示过多内容的时候,需要用到scroll lock和more指令。下面简单举例说明几个指令的用法。
ls (列目录,类似于msdos的dir)
ls | more (列目录,使用管道和more命令分屏显示过多的内容)
cp abc abc_bak (文件的拷贝,类似于msdos的copy)
cp -R abc abc_bak(目录的拷贝)
rm -R abc/* (子目录abc下的所有文件及子目录删除,类似于msdos的del,但允许加-R选项针对子目录操作)
man ls (查ls命令的详细说明)
mv abc ../abc_bak (移动并改名abc为父目录下的abc_bak,abc可以为文件也可以为子目录)
3. 有一本freebsd handbook,纸版的当然好,电子版的也不错: http://www.freebsd.org.cn/snap/doc/zh_CN.GB2312/books/handbook/
二、安装系统前的一些声明
首先声明,我是用的最新的FREEBSD5.2.1RELEASE iso格式光盘安装的,现在刻录机遍地都是,各位从网上下载了iso自己刻一个光盘来装FREEBSD,应该不是什么难事情。
其次,FREEBSD的完整安装升级需要一个良好的网络环境,即便你有光盘,最终很多工作还需要到互联网上进行,所以你必须有一个较快的互联网连接。
三、安装过程及安装中的注意事项
1. 操作系统的安装
虽然前面说了很多有关FREEBSD的艰难,但其实如果你有较好的英文能力,你会发现装FREEBSD的内核系统还是很简单的,总共花不了30分钟。而且FREEBSD5.2.1足够先进了,我的服务器很多新硬件没有遇到任何问题全部正确识别了。
FREEBSD5.2.1的光盘共4张,其中一张命名为BOOT,其对应下载时的ISO名为DISK1(注意不是BOOTONLY那张),BOOT光盘放进光驱,bios设置光驱启动,重启机器后,机器会从光驱启动并进入FREEBSD5.2.1的内核并自动启动光盘里的sysinstall程序。该程序是文本图形界面,也很友好。
首先,选择Standard安装,这也是推荐的安装模式。还有一种mini安装,安装出来的系统是最小的,运行效率最高,但是可能你会面临更多的调整。
A. 硬盘分区及unix分区配额分配
我作为初学者,选择了standard模式安装,随后进入了FREEBSD的fdisk程序界面,和msdos的fdisk很像,但屏幕下方的提示更多更友好。如果你有两块或更多的硬盘,那么fdisk会先问你需要在那个硬盘上做分区。由于我是做服务器,不存在双系统等问题,所以用上下箭头选择已有的分区并按d键全部删除这些已有的分区使其成为空盘,再按a自动分配为一个大分区,最后按q退出fdisk,就这么简单地分好了一个硬盘的区。
然后sysinstall会提示你的服务器是否需要使用BootMgr,如果你不需要多重引导,那么可以选Standard,我在这个地方选择的是BootMgr——允许多重引导。
随后使用Disklabel创建unix分区并分配分区空间。该画面和fdisk有些类似,你可以用上下方向键选择需要的分区,然后屏幕下方的提示按键并按照自己的要求划分分区。我在这里采用了默认的方法:选a自动划分,选q退出。特别提示:mysql安装默认会安装到/var分区,如果你不想改变mysql的默认安装,那么你在这里应该把自动划分出来的/var分区调整一下,调整的更大些。/var分区默认只有256M,稍微大的数据库就不够用了。我在下面的mysql安装中没有使用默认的安装分区/var,而是改到了/usr分区,所以我在这里不需要改动任何分区的大小。
B. 安装过程的提示选择
分区及配额完成后,随后就会出现软件包选择画面,你可以选择Developer或者是其他什么模式。作为web服务器,我觉得选Developer好些,不过我当时不太明白,什么也没选,直接选了EXIT。其实没选也不要紧,后面还有机会。
随后的画面是提示你从什么介质安装,我们这里当然是自己烧好的ISO光盘了——选CD/DVD,机器都没起来,别的介质其实也选不成。
选了介质之后,画面提示:
User Confirmation Requested
Last Chance! Are you SURE you want to continue the installation?
当你确定后,之前的分区设置即将生效,硬盘中的原有东西将会被删除,并且开始安装初始的内核系统。
初始内核的安装是很快的(10分钟),而且具有多数流行硬件,我用的FB5.2.1很顺利认出了所有硬件。
随后开始安装后的设置,首先会提问你是否采取PPP/SLIP的模式连通网络,如果不是可以选NO,我是ADSL的DHCP模式上网,所以选NO。如果你是拨号模式,根据提示操作吧。
随后是要求你输入你上网的网卡的TCPIP设置。如果是DHCP,把网线接好,机器会自动获取设置。如果是静态IP,你可以根据自己的机器情况设置IP、掩码、网关、DNS等。
随后机器会提问以下问题:
是否设置机器为网关GATEWAY——NO(我们是web server,不是网关)
是否设置机器为inetd超级服务器——NO(我们有ssh和pureftpd,不需要inetd)
是否设置为NFS SERVER/CLIENT——NO(我们不是这个用途)
是否设置为anonymous FTP——NO(我们不需要这种用途)
是否需要设置sshd——YES(我们将通过这种较为安全模式远程控制服务器)
选择时区——按照提示选择即可,会提示你北京时间缩写是"CST"
是否需要LINUX兼容性——YES(或许我会为服务器安装一些LINUX软件,例如CS SERVER )
是否需要设置system console——默认的挺好,刚开始的学的就不必改了。
是否需要配置鼠标——NO(我看不出来作为一个托管在电信的webserver有什么必要配置鼠标)
是否需要添加用户——添加一个吧,根据提示添加即可,用户组写成wheel,以便你可以用这个用户远程登录服务器后su到root进行管理。添加完这个用户之后,会问你要root的密码,输入即可。如果不添加用户,会直接让你设置root的密码。
其实,这些安装后设置,只要英文良好,按照提示做,不会有什么问题的。
C. 安装后的PACKAGE和CONTRIBUTION选择
安装后,可以进入sysinstall的configure进行最终的PACKAGE和CONTRIBUTION选择。
PACKAGE是已经编译好的二进制包,可以直接运行。默认标准安装完之后,作为WEBSERVER,我看了一下也就需要net下的cvsup(在线升级用)和archivers下的unzip(某些zip包可能会用到)这两个包。选中后执行安装,就会把它们装到系统里。
随后进入CONTIBUTION里安装代码。强烈建议各位一定要把src代码全部选中。src下有很多分类,甚至包括game。我自己在学习FREEBSD的时候,编译总是缺这个那个,后来学乖了,把SRC全装了之后,就好了很多,编译时很少提示错误了,而且将来cvsup也有好处。另一个就是ports,不用说,也是要全装的。我在这里,就是选择了src和ports。选中后执行安装,就会把它们安装到系统里了。
至此,一个初始的FREEBSD5.2.1就装完了。虽然看着多,实际上也就30分钟时间。如果你是第一次装FREEBSD,这个时候还是不要着急进行后面的操作,可以先看看手册,熟悉熟悉FREEBSD。
2. 系统安装完后的第一步,是进行CVSUP,立刻同步你的src源代码和ports代码。关于cvsup的详细内容,请看FREEBSD手册的cvsup部分,此处我只介绍在本例中的过程。由于cvsup需要互联网环境,所以需要接好你的网线了。进入下列目录:
#cd /usr/src/share/examples/cvsup
里面是几个cvsup的supfile例子。我们可以直接修改这些例子为我们所用。首先编辑standard-supfile,这个文件是升级内核源代码的例子文件。我个人喜欢用ee编辑文件(因为有使用提示,且使用习惯接近windows下的),输入下面的指令:
#ee standard-supfile
能看见里面东西很多,但都不用改,它默认指定是升级所有的系统源代码——这是有好处的。我们只需要修改一个地方,下翻页找到下面这行:
*default host=CHANGE_THIS.FreeBSD.org
改成指定的freebsd官方cvsup服务器即可:
*default host=cvsup.FreeBSD.org
或更快的国内freebsd cvsup服务器:
*default host=cvsup.cn.FreeBSD.org
*default host=cvsup.FreeBSDChina.org
退出并保存,运行下面的指令开始cvsup在线升级代码:
#cvsup standard-supfile
这也是我们第一次用FREEBSD上互联网。如果网络畅通,可以看到连接提示,并且开始自动升级源代码了。如果不畅通,或者cvsup服务器忙,可以换个cvsup服务器试试。如果是网络设置问题,可以到sysinstall--configure--networking里修改网卡设置。也可以用ee编辑/etc/rc.conf这个文件,检查哪里的设置出了问题。
系统源代码升级,我的ADSL大概用30分钟左右即可完成。
然后我们升级ports代码。ports里很多东西是不需要的,我们可以稍微仔细编辑一下。打开ports-supfile这个文件:
#ee ports-supfile
首先仍然是指定cvsup服务器,照上面说过的方法改了那行服务器设置。然后是选择需要升级的ports树。作为webserver,升级全部的ports是完全没有必要的,因此可以把
ports-all
那行前面加#注释掉。继续往后面找,有很多ports分支,我们把需要的打开,不需要的保留行首的#,就是取消了。例如下面这些行首加#的,对webserver来说,都是没用处的;去掉了行首#的,还是留着吧,以免编译遇到问题:
ports-base
#ports-arabic
ports-archivers
#ports-astro
#ports-audio
#ports-benchmarks
#ports-biology
#ports-cad
#ports-chinese
ports-comms
ports-converters
ports-databases
ports-deskutils
ports-devel
ports-dns
ports-editors
ports-emulators
#ports-finance
#ports-french
ports-ftp
#ports-games
#ports-german
#ports-graphics
#ports-hebrew
#ports-hungarian
#ports-irc
#ports-japanese
ports-java
#ports-korean
ports-lang
ports-mail
ports-math
#ports-mbone
ports-misc
#ports-multimedia
ports-net
#ports-news
#ports-palm
#ports-picobsd
#ports-polish
#ports-portuguese
ports-print
#ports-russian
#ports-science
ports-security
ports-shells
ports-sysutils
ports-textproc
#ports-ukrainian
#ports-vietnamese
ports-www
#ports-x11
#ports-x11-clocks
#ports-x11-fm
#ports-x11-fonts
#ports-x11-servers
#ports-x11-toolkits
#ports-x11-wm
照上面编译完,就可以保存退出了,然后运行cvsup开始升级ports:
#cvsup ports-supfile
这个升级过程大约也要30分钟左右。至此,所有的代码升级完毕。
3. MAKE WORLD和定制内核。
关于MAKE WORLD的详细内容,也应该详细翻阅手册相关部分,下面继续介绍本例中的情况。上面的升级完成后,首先需要重新编译系统(MAKE WORLD)。由于我们的系统是刚装的,干净的,所以没有那么多难题。进入:
#cd /usr/src
#make buildworld
会开始一个30分钟左右的编译过程,如果编译没有什么问题,继续:
#make installworld
即可更新系统为最新版,随后就可以重启机器了。
这里需要声明一下,由于5.2.1是current分支,make world并不一定总能成功。如果能成功,恭喜你了。如果没成功,过段时间再cvsup系统源代码,可能就可以成功了。我自己装了2个server,第一个就没成功,时隔一个月第二个就成功了。没成功也不用太担心,毕竟5.2.1是RELEASE,相对还是较为稳定的。
下来,我们需要定制内核。定制内核的必要性我想就不必我说了,各位也应该好好看看手册相关部分。也请各位仔细看这个帖子:
http://www.freebsdchina.org/forum/viewtopic.php?t=1706
说的很详细了。
具体操作,进入下面的目录:
#cd /usr/src/sys/i386/conf
能看到一个名为GENERIC的文件。把这个文件拷贝一个副本,例如名为SAMPLEKERN,这个副本将是你将来内核的配置文件。
#cp GENERIC SAMPLEKERN
#ee SAMPLEKERN
用ee编辑SAMPLEKERN这个文件,按照上面提到的那个帖子编辑,根据你自己的硬件情况、软件需求编辑,保存后开始编译内核。由于我们CVSUP过了,所以用手册上提到的“新”方法编译。
#cd /usr/src
make buildkernel KERNCONF=SAMPLEKERN
这个编译过程大概要20分钟,编译完先不要着急install,先备份一下旧内核,以免有意外。
#cd /boot
#cp -R kernel kernel.old
随后安装内核:
#make installkernel KERNCONF=SAMPLEKERN
安装好之后,可以重启了。
由于我自己是在家里进行服务器安装的,所以,我给内核文件里加上了下面几行,以便形成共享上网能力:
#ipfirewall for NAT
options IPFIREWALL
options IPDIVERT
options IPFIREWALL_DEFAULT_TO_ACCEPT
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=100
然后/etc/rc.conf里也要加几行:
# for natd
gateway_enable="YES"
firewall_enable="YES"
firewall_type="OPEN"
natd_enable="YES"
natd_interface="em0"
natd_flags=""
上述2处修改后,编译并安装内核,可以实现共享上网。FREEBSD做网关,windows做工作站,随后的工作可以从工作站用ssh登录后进行,而且不影响工作站上网查资料——毕竟FREEBSD从安装到真正投入使用还有很多调整。一般的服务器专用主板都整合了2个网卡。常见intel100M卡设备代码是fxp,intel1000M卡是em,卡代码在你安装系统的时候可以在sysinstall--configure--networking里看到。本例中两个卡都是1000M卡,第一个网卡是em0,接外网。
4. 服务器软件安装
新的精简内核编译完成之后,就是安装应用软件了。建议按照我下面的顺序来装。安装软件前,建议先
#ee /etc/make.conf
在文件里添加下面这行:
MASTER_SITE_OVERRIDE=ftp://ftp.freebsdchina.org/pub/FreeBSD/ports/distfiles/${DIST_SUBDIR}
指定ports软件首先从国内下载。否则所有软件从国外下载,有时候速度实在是不行。
A. MYSQL 4.0的安装
我选择了MYSQL4.0,不算老,也不算新。第二次装的时候,ports已经到了4.0.20版了。下面根据本例中的情况,进行具体说明。前面说了,mysql默认数据库放在/var分区里,如果你的数据库很大,那么你需要在前面分区的时候把/var分区分到足够大。ldconfig老大建议要4G。如果你和我一样想把数据库放到/usr分区,那么:
#mkdir /usr/db
先在/usr建立一个数据库目录,然后
#cd /usr/ports/databases/mysql40-server
#ee Makefile
打开Makefile,找到
DB_DIR?= /var/db/mysql
改为
DB_DIR?= /usr/db/mysql
随后,按照这个帖子,根据delphij老大教诲,在Makefile里CONFIGURE_TARGET那行前面的空行加上两行优化选项:
BUILD_OPTIMIZED=yes
BUILD_STATIC= yes
保存退出编辑。然后
#make
#make install
开始下载并开始安装数据库。编译安装完之后,重启机器可以启动mysqld守护进程,可以
#mysql
如果能够见到
mysql>
提示符,说明安装好了。不过,刚装完的mysql默认的数据库连接是100个,远远不能应付大网站的要求。按照这个办法加大吧:
http://www.fanqiang.com/a2/b1/20010705/140800801.html
具体到本例中的mysql4.0 for freebsd5.2.1,应该这样修改连接数:
#ee /usr/local/bin/mysqld_safe
向下寻找到第312行(4.0.20版是314行),其行很长,以“$NOHUP_NICENESS”开头,以“>> $err_log 2>&1”结尾。该行被嵌套在一个if语句里。在312这行末尾的“ >> $err_log 2>&1”前面加上“ -O max_connections=1000 ”,(注意前后各留一个空格)。
然后向下找到314行,也是很长的一行,以“eval "$NOHUP_NICENESS”开头,以“>> $err_log 2>&1”结尾。同样在“ >> $err_log 2>&1”前面加上“ -O max_connections=1000 ”。
保存退出。然后重启,此时的mysql40就是1000个并发连接的数据库了。可以用下面的方法检查一下:
#cd /usr/local/bin
#mysqladmin -uroot -p variables
将会打出一个长列表,按scroll lock后向上卷动屏幕,能看到里面有一项显示
| max_connections | 1000 |
那么表示最大并发连接数已经修改到1000了。
至此,mysql数据库就装完了。
B. APACHE2的安装
同样的,由ports装apache,也不会有什么困难:
#cd /usr/ports/www/apache2
#make
#make install
完毕。就这么简单。编译中间可能会提问相关软件gettext的安装选项,全选上吧。编译时可能会提示安装新版textproc/expat2错误,原因是机器里已经有旧版的expat2。只需删除旧版重新安装新版expat2即可:
#cd /usr/ports/textproc/expat2
#make deinstall
#make install
#cd /usr/ports/www/apache2
#make
#make install
继续make即可。
C. APACHE2的mod安装
APACHE2自带SSL,所以无需安装SSL。MOD_GZIP找不到有关APACHE2的文章,是不是也不用装,很奇怪。所以剩下的就是FASTCGI和php了。
按要求,先装fastcgi for apache2,先看帖子:
http://bbs.chinaunix.net/forum/viewtopic.php?t=221295
输入指令:
#cd /usr/ports/www/mod_fastcgi
#make WITH_APACHE2=yes install
OK,完成了。
下来是php。
#cd /usr/ports/www/mod_php4
#make
然后下载编译,中间会提示你选择编译配置选项。mysql已经默认选上了,下来把GD和openssl也选上吧。其他的选项我也不知道有什么用,就没选了。随后
#make install
php4.3.6安装完成。
D. web的安装后设置
首先,设置apache的php访问能力。
#cd /usr/local/etc/apache2
#ee httpd.conf
在AddType application/x-gzip .gz .tgz后面加上下面3行:
#php support
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
随后设置网站默认启动页允许为index.php。同样在httpd.conf里编辑,不必退出。找到
DirectoryIndex index.html index.html.var
添加index.php进去,为:
DirectoryIndex index.php index.html index.html.var
再设置apache默认字符集为简体中文。找到:
AddDefaultCharset ISO-8859-1
改为
AddDefaultCharset GB2312
另外,一个访问量较大的网站,apache默认的150连接肯定是不行的。请根据这个帖子修改:http://www.cnfug.org/journal/3/02.html
具体操作如下。寻找:
<IfModule prefork.c>
找到这段之后,按照上述帖子的推荐值修改为:
<IfModule prefork.c>
StartServers 10
MinSpareServers 10
MaxSpareServers 15
ServerLimit 2000
MaxClients 1500
MaxRequestsPerChild 10000
</IfModule>
至此,httpd.conf的设置完成。可以保存退出了。当然,如果你要搞虚拟主机,请根据手册和httpd.conf尾部的例子,再设置虚拟主机相关部分即可。有关我的虚拟主机设置,各位一会可以看我后面FTP安装后的解释。
工作还没有完,给php设置ini。如果没什么特殊要求,可以直接使用默认推荐的php.ini。
#cd /usr/local/etc
#cp php.ini-recommeded php.ini
此时,重启机器,http方式访问这台服务器,例如http://192.168.0.1,就能看到apache2的页面了。
此时,可以用ee在服务器默认的web目录里写一个简单的php测试页面,例如
#ee /usr/local/www/data/index.php
文件里面只有这么一行代码:
<? phpinfo(); ?>
此时再访问http://192.168.0.1,就可以看到本机的php页面信息了。
看到了phpinfo之后,就可以先安装zend optimizer了。zend optimizer只能手工安装,ports里找不到。从http://www.zend.com/store/products/zend-optimizer.php下载ZendOptimizer-2.5.2-FreeBSD5.1-i386.tar.gz后,通过ssh上传到服务器任一目录里。也可以用优盘、刻录盘转到服务器里。然后解压、安装:
#tar -zxvf ZendOptimizer-2.5.2-FreeBSD5.1-i386.tar.gz
#cd ZendOptimizer-2.5.2-FreeBSD5.1-i386
#./install.sh
随后zend optimizer安装画面出现,根据提示一步一步走即可。临近完成,会提示
x Your php.ini is relocated to the: /usr/local/Zend/etc directory x
x and a symbolic link from the former place: x
x /usr/local/etc/php.ini is created. x
x x
x Your original php.ini was backed-up to: x
x /usr/local/etc/php.ini-zend_optimizer.bak x
此时再访问http://192.168.0.1/index.php,可以看到phpinfo里有关zend optimizer的信息了。至此,web部分全部安装设置完毕。
E. pure-ftpd的安装
pure-ftpd的安装,我完全学自这个帖子:
http://www.freebsdchina.org/forum/viewtopic.php?t=10279
前面有关mysql的就先不用看了。直接从pure-ftpd部分开始。本例中应该这么继续。
#cd /usr/ports/ftp/pure-ftpd
#ee Makefile
根据上面的帖子给你的makefile里加上必要的CONFIGURE_ARGS,然后保存退出ee。本例中没有指定安装目录,使用ports默认的安装目录。
#make WITH_MYSQL=1 WITH_LANG=simplified-chinese install clean
随后安装会很顺利完成。继续下面的配置,执行下列操作,为pure-ftpd增加配置文件:
#cd /usr/local/etc
#cp pure-ftpd.conf.sample pure-ftpd.conf
#cp pureftpd-mysql.conf.sample pureftpd-mysql.conf
打开新生成的pure-ftpd.conf,把mysql数据库的那行的那个注释去掉——准备使用mysql作为验证。
MySQLConfigFile /etc/pureftpd-mysql.conf
再指定禁止匿名登录:
NoAnonymous yes
再指定允许上传人修改文件名:
NoRename no
允许登录用户使用chmod指令
NoChmod no
使用者可刪除文件
KeepAllFiles no
自动建立帐户的home dir
CreateHomeDir yes
conf设置完毕。随后导入数据库初始值。把下面这段拷贝粘贴为一个文本文件(原帖子有几处错误),例如ftp.mysql,然后执行下列命令导入mysql数据库里:
#mysql -u root -p123456 < ftp.mysql
代码:
INSERT INTO mysql.user (Host, User, Password, Select_priv, Insert_priv,
Update_priv, Delete_priv, Create_priv, Drop_priv, Reload_priv,
Shutdown_priv, Process_priv, File_priv, Grant_priv, References_priv,
Index_priv, Alter_priv) VALUES
('localhost','ftp',PASSWORD('123456'),'Y','Y','Y','Y','N','N','N','N',
'N','N','N','N','N','N');
FLUSH PRIVILEGES;
CREATE DATABASE ftpusers;
USE ftpusers;
CREATE TABLE admin (
Username varchar(35) NOT NULL default '',
Password char(32) binary NOT NULL default '',
PRIMARY KEY (Username)
) TYPE=MyISAM;
INSERT INTO admin VALUES ('Administrator',MD5('123456'));
CREATE TABLE users (
User char(16) NOT NULL default '',
Password char(32) binary NOT NULL default '',
Uid int(11) NOT NULL default '2000',
Gid int(11) NOT NULL default '2000',
Dir char(128) NOT NULL default '',
QuotaFiles int(10) NOT NULL default '500',
QuotaSize int(10) NOT NULL default '30',
ULBandwidth int(10) NOT NULL default '80',
DLBandwidth int(10) NOT NULL default '80',
status enum('0','1') NOT NULL default '1',
ipaccess varchar(15) NOT NULL default '*',
comment tinytext NOT NULL,
PRIMARY KEY (User),
UNIQUE KEY User (User)
) TYPE=MyISAM;
INSERT INTO `users` VALUES ('test1',MD5('123456'),2001,2000,'/home/test1',500,30
80,5,1,'*','*');
数据库导入之后,还不能使用,还需要设置pureftpd-mysql.conf
#ee pureftpd-mysql.conf
根据文件里的默认提示,修改即可,很简单的。也可以参照上面说的帖子修改。
至此有关系统里的修改全部完毕。你现在重启系统,可以试试用test1/123456来登录一下ftp了。
随后,我们根据上述帖子,安装php-manager,实现web模式的ftp管理。下载ftp.zip(汉化的ftp.zip:
http://forum3.games.sina.com.cn/upload/39/400/20040615/1025/205182/205182.zip
请尽快下载,晚了说不定就被sina删了),传到服务器上,然后
#mv ftp.zip /usr/local/www/data
#cd /usr/local/www/data
#unzip ftp.zip
#ee ftp/config.php
修改config.php里面的连接参数,其他的基本上都不用改。保存。然后就可以用http://192.168.0.1/ftp/来访问这个web管理页面了。登录管理页面,输入密码(本例是123456),就可以看到预设的用户test1,及其状态。
四、系统安装后的一些事项。
在本例中,这个web服务器是用来支撑4~5个网站或论坛用的。所以上面的安装过程,实际上都是为了这个目的。
那么后续还有一些使用上的注意事项,这里简要说明一下。
1. 首先,如果你想很方便地管理数据库,那么你应该装一个phpmyadmin,可以通过ports装,很简单,而且也是默认装在/usr/local/www/data里。
2. 其次,如果你想比较方便地监视服务器状态,也可以装一个phpsysinfo,ports装也可以,同样默认装在/usr/local/www/data里。这样的话,服务器将来托管的时候,可以把/usr/local/www/data这个目录做成一个只有你知道的虚拟主机即可。从这个虚拟主机里可以看到整个服务器的状态、管理服务器的mysql、新增ftp用户及主机。(ports装的phpsysinfo2.1对intel板载千兆网卡的工作状态报告有些问题,从phpsysinfo的网站下载一个2.2版可以修正这个问题,而且2.2版支持简体中文。)
3. 关于新增虚拟主机。
按照本例中的pureftpd的装法,每当你在ftp管理页面生成一个帐号后,例如web1,随后用ftp软件登录server,server就会自动生成一个名为web1的用户,并同时在/home里生成一个web1的目录,具体为:
/home/web1
(实际上也就是 /usr/home/web1 )
如果你要限制web1的配额,那么你在管理页面里就可以设置了。
那么随后web1的apache2的web虚拟主机目录,在httpd.conf里当然也就指定为
/home/web1
依此类推。简单吧?
五、远程控制你自己的web server。
除了上面提到的phpmyadmin和ftp之类的web页面的简单控制之外,你当然少不了最终极的远程控制能力:ssh2。我是菜鸟,就不班门弄斧吹嘘这东西的好处了。总之,这东西是非常安全的、可以远程连接到你的server的手段。
我前面都没有提到ssh,而实际上,自打上面的第三步第1小步完成了操作系统的初始安装之后,我们就可以使用ssh来远程控制server了,不仅效果和server的本机console一样,而且可能会更方便——因为我们可以用一个win2k的电脑,很方便地看着这里的帖子,边看边装,还能使用windows的CTRL-C/V,多好啊。
首先声明,所有有关ssh的安装和连接的基本知识,都可以在下面这个帖子里找到:
http://www.freebsdchina.org/forum/viewtopic.php?t=10210
下面我来根据我的实践,简单说说本例中的ssh应用方法。
1. 首先在你的win2k上下载sshclient客户端,它是免费提供的,而且似乎更好用。
http://www.ssh.com/support/downloads/secureshellwks/non-commercial.html
2. 由于我们安装操作系统的时候已经选择了ssh,所以,操作系统部分就不需要多设置了,默认就会启动sshd守护进程的。
3. 之前安装系统的时候,曾经提示是否添加用户,我已经提示大家要至少添加一个用户,例如你自己的英文名字,而且这个用户必须是wheel组,只有wheel组的用户,才能远程su切换为root。如果你当时没有添加,那么在server本机状态现在添加一个wheel组的用户吧,这个用户将是你将来远程登录server的用户。
4. 在win2k上安装好sshclient后,可以直接连接你的server,此时是用wheel组用户名及其密码登录的。登录后就可以su,然后输入root密码,就可以切换为root了。
5. 上面这个登录方式已经足够安全了,别人无法窃听,但是将来托管后还是有可能会有漏洞。由于我们和server之间现在还是本地lan方式的连接,不存在安全问题,所以我们此时先用密码方式连到server,可以先用sshclient生成一个key,转为key方式连接,这样就基本没有安全漏洞了。做法如下:
打开sshclient,菜单选edit--settings,出现设置对话框。里面有global settings--user authentications--keys选项,进入后,可以看到Generate New按钮,按下后根据提示,可是生成一个key,把这个key文件,按下面的按钮Upload,即可把这个key文件上传到server上你登录的home目录里,具体位置是/home/yourname/.ssh2。这个.ssh2目录,是上传时自动生成的。但Freebsd默认目录名是.ssh,而不是.ssh2。所以,根据上面提到帖子,我们用刚才提到的wheel组用户登录server,进行如下操作:
$su
password:
#ls
能看见里面已经有了一个.ssh2目录。继续下面:
#mv .ssh2 .ssh
改名为.ssh
#cd .ssh
#ssh-keygen -X -f yourkey.pub >> authorized_keys
进入ssh目录,把刚刚上传的这个key文件导入机器的验证文件里。
此时,你已经可以退出sshclient,以key的方式重新登录你的server了,不需要输入密码,可以直接登录,而且你不用担心泄密。软件附赠一个sftp,同样是加密的,很安全。
六、鸣谢
至此,我这个菜鸟也就没什么好说的了。上面这些,在方家来看都是小儿科,见笑了。不过,本着FREE的精神,我写出来这些乱七八糟的字,一来方便一下后来的新人,二来也是一点点私心——给我自己留个笔记。嘿嘿。(做自己的blog是没敢想过,只有本事看别人的blog了,kaka)
目前我自己的server运行良好,为此特别感谢:delphij、ldconfig、jayvan、xiaohua、likuku,以及很多我一时想不起来的朋友。他们给了我很多及时的、有用的提示,使我能在1个月的时间里,首先启动这个server,非常感谢!!
七、后记——关于apache日志轮询。
服务器至今运行了一个半月了,硬盘并不大,日志问题成了困扰我的一个大问题。可惜开始我还是不太会用cron及cronolog,这几天看了chedong的blog,终于搞好了,和大家分享一下吧。我是这么做的:
首先下载cronolog包,通过ssh传到server上,解包安装,默认就会很好的安装了。
#tar -zxvf cronolog-1.6.2.tar.gz
#cd cronolog-1.6.2
#./configure
#make install
然后打开httpd.conf
#ee /usr/local/etc/apache2/httpd.conf
到虚拟主机的设置部分,把log日志记录改成如下的写法:
CustomLog "|/usr/local/sbin/cronolog /yoursite/log/access%w.log" common
ErrorLog "|/usr/local/sbin/cronolog /yoursite/log/error%w.log"
再运行 crontab -e指令,给cron加入如下两个任务:
0 5 * * * /bin/rm /yoursite/log/access`date -v-6d +/%w`.log
10 5 * * * /bin/rm /yoursite/log/error`date -v-6d +/%w`.log
重启apache,以后的日志将每天做一个备份,并且只保留1周的了。嘿嘿。
附录A:对新人来说的重要文件,其位置及其用处。
/etc/make.conf
编译的全局控制配置文件,很复杂,有例子,可以参考。
/etc/rc.conf
rc应该是资源的意思。此文件管理server的重要资源,例如网卡设置、守护进程启用关闭、功能开启关闭等等。
/usr/local/etc/rc.d
这不是个文件,而是个目录,相当于dos的autoexec,这里面的sh script都会在机器启动时自动执行。同时,你要关闭apache或者mysql,都可以在这里通过运行sh script达到目的。
/usr/local/etc
这个同样不是文件,而是目录。非操作系统的后装的软件的配置文件大都在这里放置。
/usr/local/etc/php.ini
php配置文件。把同目录下的php.ini-recommend拷贝一下就很好用。
/usr/local/etc/apache2/httpd.conf
apache2 web server配置文件。
/usr/local/etc/pure-ftpd.conf
pure-ftpd基础配置文件。
/usr/local/etc/pureftpd-mysql.conf
pureftpd的mysql配置文件。
/usr/db/mysql/my.cnf(这是我的例子,你的或许应该是/var/db/mysql/my.cnf)
mysql配置文件。在/usr/local/share/mysql里有例子,分别是my-small.cnf...my-huge.cnf。拷贝一份合适的到上述位置即可,我拷贝的是my-large.cnf。
附录B:还没想到,嘿嘿。
我这个人比较倔,但是一直以来自信心还可以。由于想装一个web server,多方打听知道freebsd在这方面还比较强,于是下定决心准备搞一个自己的freebsd web server出来。
以前都是玩ms的windows系列,开始搞freebsd,当然有些摸不着门,下面就是我关于freebsd的一些初步经验,希望能对后来的新新人有所帮助。我也是freebsd的菜鸟,大家共勉吧。下面的文字,对我来说也就是笔记,我害怕将来我再装FB WEB SERVER的时候,某些环节会有疏漏,故成此文,还请行家斧正。
一、基本要求
要玩好freebsd这种unix类操作系统,我觉得首先需要有下面两个基本能力,否则的确会非常艰难。
1. 良好的英文能力。freebsd虽然也有图形界面(GUI),但如果是做服务器,更多是靠命令行(如同msdos)操作,在我这里web server的例子里,几乎是纯命令行作业。所以英文能力是很重要的。
2. unix基础。基本的unix指令要知道,比如 ls、pwd、cp、man、rm、mkdir、rmdir 等。尤其要知道 man 命令的作用。还要知道当屏幕显示过多内容的时候,需要用到scroll lock和more指令。下面简单举例说明几个指令的用法。
ls (列目录,类似于msdos的dir)
ls | more (列目录,使用管道和more命令分屏显示过多的内容)
cp abc abc_bak (文件的拷贝,类似于msdos的copy)
cp -R abc abc_bak(目录的拷贝)
rm -R abc/* (子目录abc下的所有文件及子目录删除,类似于msdos的del,但允许加-R选项针对子目录操作)
man ls (查ls命令的详细说明)
mv abc ../abc_bak (移动并改名abc为父目录下的abc_bak,abc可以为文件也可以为子目录)
3. 有一本freebsd handbook,纸版的当然好,电子版的也不错: http://www.freebsd.org.cn/snap/doc/zh_CN.GB2312/books/handbook/
二、安装系统前的一些声明
首先声明,我是用的最新的FREEBSD5.2.1RELEASE iso格式光盘安装的,现在刻录机遍地都是,各位从网上下载了iso自己刻一个光盘来装FREEBSD,应该不是什么难事情。
其次,FREEBSD的完整安装升级需要一个良好的网络环境,即便你有光盘,最终很多工作还需要到互联网上进行,所以你必须有一个较快的互联网连接。
三、安装过程及安装中的注意事项
1. 操作系统的安装
虽然前面说了很多有关FREEBSD的艰难,但其实如果你有较好的英文能力,你会发现装FREEBSD的内核系统还是很简单的,总共花不了30分钟。而且FREEBSD5.2.1足够先进了,我的服务器很多新硬件没有遇到任何问题全部正确识别了。
FREEBSD5.2.1的光盘共4张,其中一张命名为BOOT,其对应下载时的ISO名为DISK1(注意不是BOOTONLY那张),BOOT光盘放进光驱,bios设置光驱启动,重启机器后,机器会从光驱启动并进入FREEBSD5.2.1的内核并自动启动光盘里的sysinstall程序。该程序是文本图形界面,也很友好。
首先,选择Standard安装,这也是推荐的安装模式。还有一种mini安装,安装出来的系统是最小的,运行效率最高,但是可能你会面临更多的调整。
A. 硬盘分区及unix分区配额分配
我作为初学者,选择了standard模式安装,随后进入了FREEBSD的fdisk程序界面,和msdos的fdisk很像,但屏幕下方的提示更多更友好。如果你有两块或更多的硬盘,那么fdisk会先问你需要在那个硬盘上做分区。由于我是做服务器,不存在双系统等问题,所以用上下箭头选择已有的分区并按d键全部删除这些已有的分区使其成为空盘,再按a自动分配为一个大分区,最后按q退出fdisk,就这么简单地分好了一个硬盘的区。
然后sysinstall会提示你的服务器是否需要使用BootMgr,如果你不需要多重引导,那么可以选Standard,我在这个地方选择的是BootMgr——允许多重引导。
随后使用Disklabel创建unix分区并分配分区空间。该画面和fdisk有些类似,你可以用上下方向键选择需要的分区,然后屏幕下方的提示按键并按照自己的要求划分分区。我在这里采用了默认的方法:选a自动划分,选q退出。特别提示:mysql安装默认会安装到/var分区,如果你不想改变mysql的默认安装,那么你在这里应该把自动划分出来的/var分区调整一下,调整的更大些。/var分区默认只有256M,稍微大的数据库就不够用了。我在下面的mysql安装中没有使用默认的安装分区/var,而是改到了/usr分区,所以我在这里不需要改动任何分区的大小。
B. 安装过程的提示选择
分区及配额完成后,随后就会出现软件包选择画面,你可以选择Developer或者是其他什么模式。作为web服务器,我觉得选Developer好些,不过我当时不太明白,什么也没选,直接选了EXIT。其实没选也不要紧,后面还有机会。
随后的画面是提示你从什么介质安装,我们这里当然是自己烧好的ISO光盘了——选CD/DVD,机器都没起来,别的介质其实也选不成。
选了介质之后,画面提示:
User Confirmation Requested
Last Chance! Are you SURE you want to continue the installation?
当你确定后,之前的分区设置即将生效,硬盘中的原有东西将会被删除,并且开始安装初始的内核系统。
初始内核的安装是很快的(10分钟),而且具有多数流行硬件,我用的FB5.2.1很顺利认出了所有硬件。
随后开始安装后的设置,首先会提问你是否采取PPP/SLIP的模式连通网络,如果不是可以选NO,我是ADSL的DHCP模式上网,所以选NO。如果你是拨号模式,根据提示操作吧。
随后是要求你输入你上网的网卡的TCPIP设置。如果是DHCP,把网线接好,机器会自动获取设置。如果是静态IP,你可以根据自己的机器情况设置IP、掩码、网关、DNS等。
随后机器会提问以下问题:
是否设置机器为网关GATEWAY——NO(我们是web server,不是网关)
是否设置机器为inetd超级服务器——NO(我们有ssh和pureftpd,不需要inetd)
是否设置为NFS SERVER/CLIENT——NO(我们不是这个用途)
是否设置为anonymous FTP——NO(我们不需要这种用途)
是否需要设置sshd——YES(我们将通过这种较为安全模式远程控制服务器)
选择时区——按照提示选择即可,会提示你北京时间缩写是"CST"
是否需要LINUX兼容性——YES(或许我会为服务器安装一些LINUX软件,例如CS SERVER )
是否需要设置system console——默认的挺好,刚开始的学的就不必改了。
是否需要配置鼠标——NO(我看不出来作为一个托管在电信的webserver有什么必要配置鼠标)
是否需要添加用户——添加一个吧,根据提示添加即可,用户组写成wheel,以便你可以用这个用户远程登录服务器后su到root进行管理。添加完这个用户之后,会问你要root的密码,输入即可。如果不添加用户,会直接让你设置root的密码。
其实,这些安装后设置,只要英文良好,按照提示做,不会有什么问题的。
C. 安装后的PACKAGE和CONTRIBUTION选择
安装后,可以进入sysinstall的configure进行最终的PACKAGE和CONTRIBUTION选择。
PACKAGE是已经编译好的二进制包,可以直接运行。默认标准安装完之后,作为WEBSERVER,我看了一下也就需要net下的cvsup(在线升级用)和archivers下的unzip(某些zip包可能会用到)这两个包。选中后执行安装,就会把它们装到系统里。
随后进入CONTIBUTION里安装代码。强烈建议各位一定要把src代码全部选中。src下有很多分类,甚至包括game。我自己在学习FREEBSD的时候,编译总是缺这个那个,后来学乖了,把SRC全装了之后,就好了很多,编译时很少提示错误了,而且将来cvsup也有好处。另一个就是ports,不用说,也是要全装的。我在这里,就是选择了src和ports。选中后执行安装,就会把它们安装到系统里了。
至此,一个初始的FREEBSD5.2.1就装完了。虽然看着多,实际上也就30分钟时间。如果你是第一次装FREEBSD,这个时候还是不要着急进行后面的操作,可以先看看手册,熟悉熟悉FREEBSD。
2. 系统安装完后的第一步,是进行CVSUP,立刻同步你的src源代码和ports代码。关于cvsup的详细内容,请看FREEBSD手册的cvsup部分,此处我只介绍在本例中的过程。由于cvsup需要互联网环境,所以需要接好你的网线了。进入下列目录:
#cd /usr/src/share/examples/cvsup
里面是几个cvsup的supfile例子。我们可以直接修改这些例子为我们所用。首先编辑standard-supfile,这个文件是升级内核源代码的例子文件。我个人喜欢用ee编辑文件(因为有使用提示,且使用习惯接近windows下的),输入下面的指令:
#ee standard-supfile
能看见里面东西很多,但都不用改,它默认指定是升级所有的系统源代码——这是有好处的。我们只需要修改一个地方,下翻页找到下面这行:
*default host=CHANGE_THIS.FreeBSD.org
改成指定的freebsd官方cvsup服务器即可:
*default host=cvsup.FreeBSD.org
或更快的国内freebsd cvsup服务器:
*default host=cvsup.cn.FreeBSD.org
*default host=cvsup.FreeBSDChina.org
退出并保存,运行下面的指令开始cvsup在线升级代码:
#cvsup standard-supfile
这也是我们第一次用FREEBSD上互联网。如果网络畅通,可以看到连接提示,并且开始自动升级源代码了。如果不畅通,或者cvsup服务器忙,可以换个cvsup服务器试试。如果是网络设置问题,可以到sysinstall--configure--networking里修改网卡设置。也可以用ee编辑/etc/rc.conf这个文件,检查哪里的设置出了问题。
系统源代码升级,我的ADSL大概用30分钟左右即可完成。
然后我们升级ports代码。ports里很多东西是不需要的,我们可以稍微仔细编辑一下。打开ports-supfile这个文件:
#ee ports-supfile
首先仍然是指定cvsup服务器,照上面说过的方法改了那行服务器设置。然后是选择需要升级的ports树。作为webserver,升级全部的ports是完全没有必要的,因此可以把
ports-all
那行前面加#注释掉。继续往后面找,有很多ports分支,我们把需要的打开,不需要的保留行首的#,就是取消了。例如下面这些行首加#的,对webserver来说,都是没用处的;去掉了行首#的,还是留着吧,以免编译遇到问题:
ports-base
#ports-arabic
ports-archivers
#ports-astro
#ports-audio
#ports-benchmarks
#ports-biology
#ports-cad
#ports-chinese
ports-comms
ports-converters
ports-databases
ports-deskutils
ports-devel
ports-dns
ports-editors
ports-emulators
#ports-finance
#ports-french
ports-ftp
#ports-games
#ports-german
#ports-graphics
#ports-hebrew
#ports-hungarian
#ports-irc
#ports-japanese
ports-java
#ports-korean
ports-lang
ports-mail
ports-math
#ports-mbone
ports-misc
#ports-multimedia
ports-net
#ports-news
#ports-palm
#ports-picobsd
#ports-polish
#ports-portuguese
ports-print
#ports-russian
#ports-science
ports-security
ports-shells
ports-sysutils
ports-textproc
#ports-ukrainian
#ports-vietnamese
ports-www
#ports-x11
#ports-x11-clocks
#ports-x11-fm
#ports-x11-fonts
#ports-x11-servers
#ports-x11-toolkits
#ports-x11-wm
照上面编译完,就可以保存退出了,然后运行cvsup开始升级ports:
#cvsup ports-supfile
这个升级过程大约也要30分钟左右。至此,所有的代码升级完毕。
3. MAKE WORLD和定制内核。
关于MAKE WORLD的详细内容,也应该详细翻阅手册相关部分,下面继续介绍本例中的情况。上面的升级完成后,首先需要重新编译系统(MAKE WORLD)。由于我们的系统是刚装的,干净的,所以没有那么多难题。进入:
#cd /usr/src
#make buildworld
会开始一个30分钟左右的编译过程,如果编译没有什么问题,继续:
#make installworld
即可更新系统为最新版,随后就可以重启机器了。
这里需要声明一下,由于5.2.1是current分支,make world并不一定总能成功。如果能成功,恭喜你了。如果没成功,过段时间再cvsup系统源代码,可能就可以成功了。我自己装了2个server,第一个就没成功,时隔一个月第二个就成功了。没成功也不用太担心,毕竟5.2.1是RELEASE,相对还是较为稳定的。
下来,我们需要定制内核。定制内核的必要性我想就不必我说了,各位也应该好好看看手册相关部分。也请各位仔细看这个帖子:
http://www.freebsdchina.org/forum/viewtopic.php?t=1706
说的很详细了。
具体操作,进入下面的目录:
#cd /usr/src/sys/i386/conf
能看到一个名为GENERIC的文件。把这个文件拷贝一个副本,例如名为SAMPLEKERN,这个副本将是你将来内核的配置文件。
#cp GENERIC SAMPLEKERN
#ee SAMPLEKERN
用ee编辑SAMPLEKERN这个文件,按照上面提到的那个帖子编辑,根据你自己的硬件情况、软件需求编辑,保存后开始编译内核。由于我们CVSUP过了,所以用手册上提到的“新”方法编译。
#cd /usr/src
make buildkernel KERNCONF=SAMPLEKERN
这个编译过程大概要20分钟,编译完先不要着急install,先备份一下旧内核,以免有意外。
#cd /boot
#cp -R kernel kernel.old
随后安装内核:
#make installkernel KERNCONF=SAMPLEKERN
安装好之后,可以重启了。
由于我自己是在家里进行服务器安装的,所以,我给内核文件里加上了下面几行,以便形成共享上网能力:
#ipfirewall for NAT
options IPFIREWALL
options IPDIVERT
options IPFIREWALL_DEFAULT_TO_ACCEPT
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=100
然后/etc/rc.conf里也要加几行:
# for natd
gateway_enable="YES"
firewall_enable="YES"
firewall_type="OPEN"
natd_enable="YES"
natd_interface="em0"
natd_flags=""
上述2处修改后,编译并安装内核,可以实现共享上网。FREEBSD做网关,windows做工作站,随后的工作可以从工作站用ssh登录后进行,而且不影响工作站上网查资料——毕竟FREEBSD从安装到真正投入使用还有很多调整。一般的服务器专用主板都整合了2个网卡。常见intel100M卡设备代码是fxp,intel1000M卡是em,卡代码在你安装系统的时候可以在sysinstall--configure--networking里看到。本例中两个卡都是1000M卡,第一个网卡是em0,接外网。
4. 服务器软件安装
新的精简内核编译完成之后,就是安装应用软件了。建议按照我下面的顺序来装。安装软件前,建议先
#ee /etc/make.conf
在文件里添加下面这行:
MASTER_SITE_OVERRIDE=ftp://ftp.freebsdchina.org/pub/FreeBSD/ports/distfiles/${DIST_SUBDIR}
指定ports软件首先从国内下载。否则所有软件从国外下载,有时候速度实在是不行。
A. MYSQL 4.0的安装
我选择了MYSQL4.0,不算老,也不算新。第二次装的时候,ports已经到了4.0.20版了。下面根据本例中的情况,进行具体说明。前面说了,mysql默认数据库放在/var分区里,如果你的数据库很大,那么你需要在前面分区的时候把/var分区分到足够大。ldconfig老大建议要4G。如果你和我一样想把数据库放到/usr分区,那么:
#mkdir /usr/db
先在/usr建立一个数据库目录,然后
#cd /usr/ports/databases/mysql40-server
#ee Makefile
打开Makefile,找到
DB_DIR?= /var/db/mysql
改为
DB_DIR?= /usr/db/mysql
随后,按照这个帖子,根据delphij老大教诲,在Makefile里CONFIGURE_TARGET那行前面的空行加上两行优化选项:
BUILD_OPTIMIZED=yes
BUILD_STATIC= yes
保存退出编辑。然后
#make
#make install
开始下载并开始安装数据库。编译安装完之后,重启机器可以启动mysqld守护进程,可以
#mysql
如果能够见到
mysql>
提示符,说明安装好了。不过,刚装完的mysql默认的数据库连接是100个,远远不能应付大网站的要求。按照这个办法加大吧:
http://www.fanqiang.com/a2/b1/20010705/140800801.html
具体到本例中的mysql4.0 for freebsd5.2.1,应该这样修改连接数:
#ee /usr/local/bin/mysqld_safe
向下寻找到第312行(4.0.20版是314行),其行很长,以“$NOHUP_NICENESS”开头,以“>> $err_log 2>&1”结尾。该行被嵌套在一个if语句里。在312这行末尾的“ >> $err_log 2>&1”前面加上“ -O max_connections=1000 ”,(注意前后各留一个空格)。
然后向下找到314行,也是很长的一行,以“eval "$NOHUP_NICENESS”开头,以“>> $err_log 2>&1”结尾。同样在“ >> $err_log 2>&1”前面加上“ -O max_connections=1000 ”。
保存退出。然后重启,此时的mysql40就是1000个并发连接的数据库了。可以用下面的方法检查一下:
#cd /usr/local/bin
#mysqladmin -uroot -p variables
将会打出一个长列表,按scroll lock后向上卷动屏幕,能看到里面有一项显示
| max_connections | 1000 |
那么表示最大并发连接数已经修改到1000了。
至此,mysql数据库就装完了。
B. APACHE2的安装
同样的,由ports装apache,也不会有什么困难:
#cd /usr/ports/www/apache2
#make
#make install
完毕。就这么简单。编译中间可能会提问相关软件gettext的安装选项,全选上吧。编译时可能会提示安装新版textproc/expat2错误,原因是机器里已经有旧版的expat2。只需删除旧版重新安装新版expat2即可:
#cd /usr/ports/textproc/expat2
#make deinstall
#make install
#cd /usr/ports/www/apache2
#make
#make install
继续make即可。
C. APACHE2的mod安装
APACHE2自带SSL,所以无需安装SSL。MOD_GZIP找不到有关APACHE2的文章,是不是也不用装,很奇怪。所以剩下的就是FASTCGI和php了。
按要求,先装fastcgi for apache2,先看帖子:
http://bbs.chinaunix.net/forum/viewtopic.php?t=221295
输入指令:
#cd /usr/ports/www/mod_fastcgi
#make WITH_APACHE2=yes install
OK,完成了。
下来是php。
#cd /usr/ports/www/mod_php4
#make
然后下载编译,中间会提示你选择编译配置选项。mysql已经默认选上了,下来把GD和openssl也选上吧。其他的选项我也不知道有什么用,就没选了。随后
#make install
php4.3.6安装完成。
D. web的安装后设置
首先,设置apache的php访问能力。
#cd /usr/local/etc/apache2
#ee httpd.conf
在AddType application/x-gzip .gz .tgz后面加上下面3行:
#php support
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
随后设置网站默认启动页允许为index.php。同样在httpd.conf里编辑,不必退出。找到
DirectoryIndex index.html index.html.var
添加index.php进去,为:
DirectoryIndex index.php index.html index.html.var
再设置apache默认字符集为简体中文。找到:
AddDefaultCharset ISO-8859-1
改为
AddDefaultCharset GB2312
另外,一个访问量较大的网站,apache默认的150连接肯定是不行的。请根据这个帖子修改:http://www.cnfug.org/journal/3/02.html
具体操作如下。寻找:
<IfModule prefork.c>
找到这段之后,按照上述帖子的推荐值修改为:
<IfModule prefork.c>
StartServers 10
MinSpareServers 10
MaxSpareServers 15
ServerLimit 2000
MaxClients 1500
MaxRequestsPerChild 10000
</IfModule>
至此,httpd.conf的设置完成。可以保存退出了。当然,如果你要搞虚拟主机,请根据手册和httpd.conf尾部的例子,再设置虚拟主机相关部分即可。有关我的虚拟主机设置,各位一会可以看我后面FTP安装后的解释。
工作还没有完,给php设置ini。如果没什么特殊要求,可以直接使用默认推荐的php.ini。
#cd /usr/local/etc
#cp php.ini-recommeded php.ini
此时,重启机器,http方式访问这台服务器,例如http://192.168.0.1,就能看到apache2的页面了。
此时,可以用ee在服务器默认的web目录里写一个简单的php测试页面,例如
#ee /usr/local/www/data/index.php
文件里面只有这么一行代码:
<? phpinfo(); ?>
此时再访问http://192.168.0.1,就可以看到本机的php页面信息了。
看到了phpinfo之后,就可以先安装zend optimizer了。zend optimizer只能手工安装,ports里找不到。从http://www.zend.com/store/products/zend-optimizer.php下载ZendOptimizer-2.5.2-FreeBSD5.1-i386.tar.gz后,通过ssh上传到服务器任一目录里。也可以用优盘、刻录盘转到服务器里。然后解压、安装:
#tar -zxvf ZendOptimizer-2.5.2-FreeBSD5.1-i386.tar.gz
#cd ZendOptimizer-2.5.2-FreeBSD5.1-i386
#./install.sh
随后zend optimizer安装画面出现,根据提示一步一步走即可。临近完成,会提示
x Your php.ini is relocated to the: /usr/local/Zend/etc directory x
x and a symbolic link from the former place: x
x /usr/local/etc/php.ini is created. x
x x
x Your original php.ini was backed-up to: x
x /usr/local/etc/php.ini-zend_optimizer.bak x
此时再访问http://192.168.0.1/index.php,可以看到phpinfo里有关zend optimizer的信息了。至此,web部分全部安装设置完毕。
E. pure-ftpd的安装
pure-ftpd的安装,我完全学自这个帖子:
http://www.freebsdchina.org/forum/viewtopic.php?t=10279
前面有关mysql的就先不用看了。直接从pure-ftpd部分开始。本例中应该这么继续。
#cd /usr/ports/ftp/pure-ftpd
#ee Makefile
根据上面的帖子给你的makefile里加上必要的CONFIGURE_ARGS,然后保存退出ee。本例中没有指定安装目录,使用ports默认的安装目录。
#make WITH_MYSQL=1 WITH_LANG=simplified-chinese install clean
随后安装会很顺利完成。继续下面的配置,执行下列操作,为pure-ftpd增加配置文件:
#cd /usr/local/etc
#cp pure-ftpd.conf.sample pure-ftpd.conf
#cp pureftpd-mysql.conf.sample pureftpd-mysql.conf
打开新生成的pure-ftpd.conf,把mysql数据库的那行的那个注释去掉——准备使用mysql作为验证。
MySQLConfigFile /etc/pureftpd-mysql.conf
再指定禁止匿名登录:
NoAnonymous yes
再指定允许上传人修改文件名:
NoRename no
允许登录用户使用chmod指令
NoChmod no
使用者可刪除文件
KeepAllFiles no
自动建立帐户的home dir
CreateHomeDir yes
conf设置完毕。随后导入数据库初始值。把下面这段拷贝粘贴为一个文本文件(原帖子有几处错误),例如ftp.mysql,然后执行下列命令导入mysql数据库里:
#mysql -u root -p123456 < ftp.mysql
代码:
INSERT INTO mysql.user (Host, User, Password, Select_priv, Insert_priv,
Update_priv, Delete_priv, Create_priv, Drop_priv, Reload_priv,
Shutdown_priv, Process_priv, File_priv, Grant_priv, References_priv,
Index_priv, Alter_priv) VALUES
('localhost','ftp',PASSWORD('123456'),'Y','Y','Y','Y','N','N','N','N',
'N','N','N','N','N','N');
FLUSH PRIVILEGES;
CREATE DATABASE ftpusers;
USE ftpusers;
CREATE TABLE admin (
Username varchar(35) NOT NULL default '',
Password char(32) binary NOT NULL default '',
PRIMARY KEY (Username)
) TYPE=MyISAM;
INSERT INTO admin VALUES ('Administrator',MD5('123456'));
CREATE TABLE users (
User char(16) NOT NULL default '',
Password char(32) binary NOT NULL default '',
Uid int(11) NOT NULL default '2000',
Gid int(11) NOT NULL default '2000',
Dir char(128) NOT NULL default '',
QuotaFiles int(10) NOT NULL default '500',
QuotaSize int(10) NOT NULL default '30',
ULBandwidth int(10) NOT NULL default '80',
DLBandwidth int(10) NOT NULL default '80',
status enum('0','1') NOT NULL default '1',
ipaccess varchar(15) NOT NULL default '*',
comment tinytext NOT NULL,
PRIMARY KEY (User),
UNIQUE KEY User (User)
) TYPE=MyISAM;
INSERT INTO `users` VALUES ('test1',MD5('123456'),2001,2000,'/home/test1',500,30
80,5,1,'*','*');
数据库导入之后,还不能使用,还需要设置pureftpd-mysql.conf
#ee pureftpd-mysql.conf
根据文件里的默认提示,修改即可,很简单的。也可以参照上面说的帖子修改。
至此有关系统里的修改全部完毕。你现在重启系统,可以试试用test1/123456来登录一下ftp了。
随后,我们根据上述帖子,安装php-manager,实现web模式的ftp管理。下载ftp.zip(汉化的ftp.zip:
http://forum3.games.sina.com.cn/upload/39/400/20040615/1025/205182/205182.zip
请尽快下载,晚了说不定就被sina删了),传到服务器上,然后
#mv ftp.zip /usr/local/www/data
#cd /usr/local/www/data
#unzip ftp.zip
#ee ftp/config.php
修改config.php里面的连接参数,其他的基本上都不用改。保存。然后就可以用http://192.168.0.1/ftp/来访问这个web管理页面了。登录管理页面,输入密码(本例是123456),就可以看到预设的用户test1,及其状态。
四、系统安装后的一些事项。
在本例中,这个web服务器是用来支撑4~5个网站或论坛用的。所以上面的安装过程,实际上都是为了这个目的。
那么后续还有一些使用上的注意事项,这里简要说明一下。
1. 首先,如果你想很方便地管理数据库,那么你应该装一个phpmyadmin,可以通过ports装,很简单,而且也是默认装在/usr/local/www/data里。
2. 其次,如果你想比较方便地监视服务器状态,也可以装一个phpsysinfo,ports装也可以,同样默认装在/usr/local/www/data里。这样的话,服务器将来托管的时候,可以把/usr/local/www/data这个目录做成一个只有你知道的虚拟主机即可。从这个虚拟主机里可以看到整个服务器的状态、管理服务器的mysql、新增ftp用户及主机。(ports装的phpsysinfo2.1对intel板载千兆网卡的工作状态报告有些问题,从phpsysinfo的网站下载一个2.2版可以修正这个问题,而且2.2版支持简体中文。)
3. 关于新增虚拟主机。
按照本例中的pureftpd的装法,每当你在ftp管理页面生成一个帐号后,例如web1,随后用ftp软件登录server,server就会自动生成一个名为web1的用户,并同时在/home里生成一个web1的目录,具体为:
/home/web1
(实际上也就是 /usr/home/web1 )
如果你要限制web1的配额,那么你在管理页面里就可以设置了。
那么随后web1的apache2的web虚拟主机目录,在httpd.conf里当然也就指定为
/home/web1
依此类推。简单吧?
五、远程控制你自己的web server。
除了上面提到的phpmyadmin和ftp之类的web页面的简单控制之外,你当然少不了最终极的远程控制能力:ssh2。我是菜鸟,就不班门弄斧吹嘘这东西的好处了。总之,这东西是非常安全的、可以远程连接到你的server的手段。
我前面都没有提到ssh,而实际上,自打上面的第三步第1小步完成了操作系统的初始安装之后,我们就可以使用ssh来远程控制server了,不仅效果和server的本机console一样,而且可能会更方便——因为我们可以用一个win2k的电脑,很方便地看着这里的帖子,边看边装,还能使用windows的CTRL-C/V,多好啊。
首先声明,所有有关ssh的安装和连接的基本知识,都可以在下面这个帖子里找到:
http://www.freebsdchina.org/forum/viewtopic.php?t=10210
下面我来根据我的实践,简单说说本例中的ssh应用方法。
1. 首先在你的win2k上下载sshclient客户端,它是免费提供的,而且似乎更好用。
http://www.ssh.com/support/downloads/secureshellwks/non-commercial.html
2. 由于我们安装操作系统的时候已经选择了ssh,所以,操作系统部分就不需要多设置了,默认就会启动sshd守护进程的。
3. 之前安装系统的时候,曾经提示是否添加用户,我已经提示大家要至少添加一个用户,例如你自己的英文名字,而且这个用户必须是wheel组,只有wheel组的用户,才能远程su切换为root。如果你当时没有添加,那么在server本机状态现在添加一个wheel组的用户吧,这个用户将是你将来远程登录server的用户。
4. 在win2k上安装好sshclient后,可以直接连接你的server,此时是用wheel组用户名及其密码登录的。登录后就可以su,然后输入root密码,就可以切换为root了。
5. 上面这个登录方式已经足够安全了,别人无法窃听,但是将来托管后还是有可能会有漏洞。由于我们和server之间现在还是本地lan方式的连接,不存在安全问题,所以我们此时先用密码方式连到server,可以先用sshclient生成一个key,转为key方式连接,这样就基本没有安全漏洞了。做法如下:
打开sshclient,菜单选edit--settings,出现设置对话框。里面有global settings--user authentications--keys选项,进入后,可以看到Generate New按钮,按下后根据提示,可是生成一个key,把这个key文件,按下面的按钮Upload,即可把这个key文件上传到server上你登录的home目录里,具体位置是/home/yourname/.ssh2。这个.ssh2目录,是上传时自动生成的。但Freebsd默认目录名是.ssh,而不是.ssh2。所以,根据上面提到帖子,我们用刚才提到的wheel组用户登录server,进行如下操作:
$su
password:
#ls
能看见里面已经有了一个.ssh2目录。继续下面:
#mv .ssh2 .ssh
改名为.ssh
#cd .ssh
#ssh-keygen -X -f yourkey.pub >> authorized_keys
进入ssh目录,把刚刚上传的这个key文件导入机器的验证文件里。
此时,你已经可以退出sshclient,以key的方式重新登录你的server了,不需要输入密码,可以直接登录,而且你不用担心泄密。软件附赠一个sftp,同样是加密的,很安全。
六、鸣谢
至此,我这个菜鸟也就没什么好说的了。上面这些,在方家来看都是小儿科,见笑了。不过,本着FREE的精神,我写出来这些乱七八糟的字,一来方便一下后来的新人,二来也是一点点私心——给我自己留个笔记。嘿嘿。(做自己的blog是没敢想过,只有本事看别人的blog了,kaka)
目前我自己的server运行良好,为此特别感谢:delphij、ldconfig、jayvan、xiaohua、likuku,以及很多我一时想不起来的朋友。他们给了我很多及时的、有用的提示,使我能在1个月的时间里,首先启动这个server,非常感谢!!
七、后记——关于apache日志轮询。
服务器至今运行了一个半月了,硬盘并不大,日志问题成了困扰我的一个大问题。可惜开始我还是不太会用cron及cronolog,这几天看了chedong的blog,终于搞好了,和大家分享一下吧。我是这么做的:
首先下载cronolog包,通过ssh传到server上,解包安装,默认就会很好的安装了。
#tar -zxvf cronolog-1.6.2.tar.gz
#cd cronolog-1.6.2
#./configure
#make install
然后打开httpd.conf
#ee /usr/local/etc/apache2/httpd.conf
到虚拟主机的设置部分,把log日志记录改成如下的写法:
CustomLog "|/usr/local/sbin/cronolog /yoursite/log/access%w.log" common
ErrorLog "|/usr/local/sbin/cronolog /yoursite/log/error%w.log"
再运行 crontab -e指令,给cron加入如下两个任务:
0 5 * * * /bin/rm /yoursite/log/access`date -v-6d +/%w`.log
10 5 * * * /bin/rm /yoursite/log/error`date -v-6d +/%w`.log
重启apache,以后的日志将每天做一个备份,并且只保留1周的了。嘿嘿。
附录A:对新人来说的重要文件,其位置及其用处。
/etc/make.conf
编译的全局控制配置文件,很复杂,有例子,可以参考。
/etc/rc.conf
rc应该是资源的意思。此文件管理server的重要资源,例如网卡设置、守护进程启用关闭、功能开启关闭等等。
/usr/local/etc/rc.d
这不是个文件,而是个目录,相当于dos的autoexec,这里面的sh script都会在机器启动时自动执行。同时,你要关闭apache或者mysql,都可以在这里通过运行sh script达到目的。
/usr/local/etc
这个同样不是文件,而是目录。非操作系统的后装的软件的配置文件大都在这里放置。
/usr/local/etc/php.ini
php配置文件。把同目录下的php.ini-recommend拷贝一下就很好用。
/usr/local/etc/apache2/httpd.conf
apache2 web server配置文件。
/usr/local/etc/pure-ftpd.conf
pure-ftpd基础配置文件。
/usr/local/etc/pureftpd-mysql.conf
pureftpd的mysql配置文件。
/usr/db/mysql/my.cnf(这是我的例子,你的或许应该是/var/db/mysql/my.cnf)
mysql配置文件。在/usr/local/share/mysql里有例子,分别是my-small.cnf...my-huge.cnf。拷贝一份合适的到上述位置即可,我拷贝的是my-large.cnf。
附录B:还没想到,嘿嘿。