Peaceful mind Where there is a will, there is a way!

4Aug/090

从零开始快速搭建freebsd应用服务器

关键字:

phpize,m4,autoconf,jpgraph,postgresql,mysql,sqlite,gd,vmware,mysql-front

freebsd 4.10vmware为例进行说明
本文档没有对apache,mysql

的优化等方面进行讨论,只是针对初学者快速搭建自己的开发平台,应该能应付大部分的个人开发了。
1freebsd 的安装
我选择的是最小安装,不装图形界面,port都没安装(千万别鄙视我,虽然portfreebsd的最大特色).只安装了支持linux的那个包,其余全部选否,由于是自己用,我没考虑连到internet,只是在主机和虚拟机构成的网络中运行,因此vmware选择host-onlynat方式都可以.这个安装估计只要10分钟左右.
安装好后,执行/stand/sysintall启动安装,选择configure-networking,获得ip地址,这样你就获得了ip地址,这个地址就是你做服务器要用到的地址.然后选择configure-packages安装一些后面要用到的包.具体如下:samba,png,gettext,gmake,jpeg,freetype,libiconv,tiff,expat,就这几个包,具体那个包在那个类下,你自己慢慢找就可以了.为什么装samba?很明显就是为了和linux主机共享来用的,当然你也可以借助一些工具,ssh等来进行windowlinux之间的文件传输.具体就是修改/etc/ssh/sshd_config文件,把里面PermitRootLogin置为yes就可以了,因为freebsd默认只支持普通用户ssh登录,如果要用root远程登录,必须修改这里.samba安装好后,有几个步骤执行,步骤一:生成配置文件cp /usr/local/etc/smb.conf.default smb.conf ,修改2个地方就可以了.hosts allow,encrypt passwords.如果需要更复杂的配置的,可以用testparm命令来检查配置文件是否正确。步骤二,生成开机启动samba,cp /usr/local/etc/rc.d/samba.sh.sample samba.sh,第三步,添加samba用户,首先我们在系统中添加一个用户,比如lizl,然后用smbpasswd –a lizl,按提示输入用户密码,freebsd默认不会建立/home/lizl目录,我们在根目录下手动建立,并在lizl建立public_html目录(apache中将要提到).为了方便使用,我们一般建立网络映射到该目录.这样就能把安装包和程序等传到我的linux主机上了

2.apache的安装
关于apache的安装,强调二点,其一,动态编译apache,这样就可以到后面扩展其模块(比如sqlite),其二,apache版本的差异,编译选项不同.如下:
apache1
版本:
apache2版本:
 

./configure --prefix=/usr/local/apache --enable-module=so --enable-module=rewrite --enable-shared=max --enable-module=ssl

 

./configure --prefix=/usr/local/apache2 --enable-so --enable-mods-shared=most --enable-module=ssl --with-ssl=/usr/local/openssl

编译安装完成即可.修改配置文件httpd.conf,修改2个地方就可以了,增加

AddType application/x-httpd-php .php .htm;

然后把/home/*/public_html所在的块的前1,2

行注释掉

<Directory /home/*/public_html>
    AllowOverride FileInfo AuthConfig Limit
    Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
#    <Limit GET POST OPTIONS PROPFIND>
#        Order allow
,deny
#        Allow from all
#    </Limit>
#    <LimitExcept GET POST OPTIONS PROPFIND>
#        Order deny
,allow
#        Deny from all
#    </LimitExcept>
</Directory>

配置完后,可以通过/usr/local/apache/bin/apachectl configtest 测试配置文件是否正确。

可以看到,上面的编译中有支持ssl。这需要在安装apache之前安装好openssl和mod_ssl(注意下和你php相一致的版本)
openssl的安装

./config --prefix=/usr/local/openssl 
make
make install

安装mod_ssl

./configure --with-apache = apache源代码路径 --with-ssl=openssl的源代码路径
#注意这里不需要安装,只要把mod_ssl编译进apache就okay

接下来就可以安装apache了。但要注意apache2中才有--with-ssl选项,并且安装前需要执行make certificate 生成证书,然后再make install
3.数据库的安装
1mysql安装
我这里使用的是mysql-4.1.13a版本,据说从这个版本开始,mysql的数据库有了比较大的改动,有兴趣的读者可以去研究下。
编译参数说明(具体可用./configure --help|more 查看):
Prefix:安装路径
Sysconfdirmysql配置文件my.cnf的路径;Cp /usr/local/mysql4/share/mysql/my-medium.cnf /etc/my.cnf
Localstatedir
:数据库存放路径
–with-charset:字符支持
–with-isam:支持老的isam类型的表
–with-unix-socket-pathmysql.sock所在位置

mysql常见问题
问题 1:Can’t connect to mysql server through socket ‘/tmp/mysql.sock’
解决:
1.mysqld是否启用,用top命令查看是否有mysqld进程
2./tmp/mysql.sock是否已经存在
3.

权限问题
添加专用的mysql组和mysql用户修改用户密码:
/usr/local/mysql4/bin/mysqladmin –u root –p password 123456;

问题2:Localhost

可以访问,远程机器不允许访问的问题
解决:
1.如果是mysql 4.1以上版本,mysql-front版本必须用3.2
2.修改mysql数据库中user表中的host%,允许任何主机访问(自己测试用嘛,安全性先不考虑,呵呵)

问题3:Client does not support authentication protocol requested by server; consider upgrading MySQL client cgi
解决:
1.SET PASSWORD FOR 'root'@'%' = OLD_PASSWORD('123456');
2.UPDATE mysql.user SET Password = OLD_PASSWORD('123456') where host='%' and user='root';flush privileges

 (2)Postgresql的安装
   注意postgresql需要用gmake编译安装,与我们用的make不同。
 (3)Sqlite的安装
由于php4是不支持sqlite3版本的,因此我们需要通过编译扩展模块来安装php对sqlite的支持
4.gd库的安装
如果要支持jpgraph库,非要gd2版本以上才行,这里png,jpeg的支持我们在freebsd安装的时候已经装上了,不用再重新下包安装编译完会有提示你xpm library font_config(gnome用到的)不可用,不用管它,继续make,这个时候会报错.我们需要编辑gdhelper.h文件,pthread相关的部分去掉.重新make&& make install就可以了.如果要支持gif图形,可以下载gd-1.8.3-gif.tar.gz相关包安装。

6.编译支持sqlite数据库
用的是phpize编译,用pear编译没试过,大家自己研究吧这里会提示你需要autoconf包,下载该包安装时编译autoconf时,出现
>  checking for m4... /usr/bin/m4
>  checking whether m4 supports frozen files... no
>  configure: error: GNU M4 1.4 is required
找不到m4,但我的m4确实安装了,不过目录不对,我安装在/usr/local/bin,而freebsd/usr/bin/下有个默认的m4,是freebsd版本的,不是gnu版本的,于是覆盖安装重新安装m4.下载安装后,发现还是编译不过,因为freebsd自带的m4 /usr/bin 被先找到,删除该m4,就可以重新安装好autoconf.
继续配置安装sqlite库
这样就在你在php.ini中指定的extensions_dirno_XXXX下生成sqlite3.so,将该扩展库拷贝到extensions_dir,并在php.ini中加入
Extensions=sqlite3.so.重启apache后既支持sqlite数据库了.注意对于sqlite3以下的版本,可以不用安装单独安装sqlite2,直接编译扩展库即可,方法为

tar -zxvf  sqlite3-0.4.tgz
cd sqlite3-
0.4
/usr/local/php4/bin/phpize

 

./configure –with-php-config=/usr/local/php4/bin/php-config –with-sqlite3=/usr/local/sqlite3

 

tar xzvf SQLite-1[1].0.3.tgz
cd SQLite-1[1].0.3
/usr/local/php4/bin/phpize
./configure –with-php-config
=/usr/local/php4/bin/php-config 

其它操作和sqlite3的安装一样

 

 

Groupadd mysql
Useradd mysql –g mysql
Chown –R mysql:mysql /usr/local/mysql4
Chown –R mysql:mysql /var/db/mysql4

 

./configure
Gmake
su
gmake install
adduser postgres
mkdir /usr/local/pgsql/data
chown postgres /usr/local/pgsql/
chown postgres /usr/local/pgsql/data
su - postgres
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
/usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data >logfile 
2>&1 &
/usr/local/pgsql/bin/createdb test
/usr/local/pgsql/bin/psql test

 

./configure –prefix=/usr/local/sqlite2 && make && make install
./configure –prefix
=/usr/local/sqlite3 && make && make install

 

./configure –prefix=/usr/local/gd2 –with-png=/usr/local –with-jpeg=/usr/local

 

5.安装php
我用的php版本是4.4.2版本,其它版本没有测试过。注意php.ini默认安装在/usr/local/php4/lib/php.ini下,但可以添加sysconfdir编译选项到你想要的任何位置

'./configure' '--prefix=/usr/local/php4' '--with-apxs=/usr/local/apache/bin/apxs' '--with-mcrypt=/usr/local/libmcrypt' '--with-iconv' '--with-gettext' '--with-mysql=/usr/local/mysql4' '--with-pgsql=/usr/local/pgsql8' '--with-gd=/usr/local/gd2' '--with-jpeg=/usr/local' '--with-png=/usr/local' '--with-zlib' '--enable-mbstring' '--enable-gd-native-tiff' '--with-tiff=/usr/local' '--with-freetype-dir=/usr/local'
./configure --prefix=/usr/local/mysql4/ --sysconfdir=/etc --localstatedir=/var/db/mysql4 –with-charset=gb2312 –with-isam –with-unix-socket-path=/tmp/mysql.sock

 

Tagged as: No Comments
31May/090

freebsd下安装openldap

由于工作需要,要了解ldap方面的知识,苦于不知从何下手,管它三七二十一,先装好环境再说。而openldap号称可以和商业相媲美的开源的ldap产品。就是它了.网上在freebsd下的安装大多都是采用port安装的。由于偶自己用的freebsd没装port,那就只好手工编译,反正偶也不嫌累。。呵呵

全部安装以openldap2.3.32,Berkeyley DB4.2.52(最新已经到4.5版本了,怕不兼容,把版本稍微降了点),还有个认证的东东sasl(装了才发现不会用,白装了)

首先安装Berkeyley DB4,和一般的安装没什么区别,三部曲嘛

  tar –zxvf db-4.3.28.tar.gz
  cd db-4.3.28
  cd build_unix
  ../dist/configure
  make
  make install 

安装sasl,继续三部曲

tar xzvf cyrus-sasl-1[1].5.28.tar.gz
cd cyrus-sasl
./configure
make 
make install

最后安装openldap

tar xzvf openldap-stable-20070110.tgz
cd openldap-
2.3.32
./configure --prefix
=/usr/local/openldap

三部曲行不通了。。出现下列错误
configure: error: BDB/HDB: BerkeleyDB version incompatible
赶快网上找资料,才知道是编译选项在作怪。修改编译选项为

env CPPFLAGS="-I/usr/local/bdb/include" LDFLAGS="-L/usr/local/bdb/lib" ./configure --prefix=/usr/local/openldap --with-wrapper --enable-ldbm 

如果想知道CPPFLAGS这些的具体意思,可以用./configure --help自己查看
重新来过,没想到又出现新的错误
configure: error: Berkeley DB version mismatch
晕,刚解决完incompatible问题,又冒出个mismatch.继续找原因。最后好不容易在一外国网站找到一个解决方法,原来是环境变量惹的祸

export LD_LIBRARY_PATH="<BerkelyDB Directory path>/build_unix/.libs"  #这里的<BerkelyDB Directory path>是你解压缩安装的路径,不是你安装后的路径,别搞混了

终于编译通过了,接下来就回归正常的编译步骤了

make depend   
make
make test     #这个花的时间比较长,至少10分钟
make install

恭喜,openldap安装ok了。