redhat5.2上freetds0.82环境搭建

redhat5.2下freetds0.82环境搭建

在linux下做WEB开发,通用的环境是LAMP(Linux Apache Mysql Php),但有时候,可能会需要访问Microsoft SQL Server 数据库,这时通常是安装freetds来完成的。

 

网络上有许多编译和配置freetds的文档,多数是通过编译安装的,有的甚至要编译PHP和Apache环境。而我喜欢redhat的rpm方式配置服务器环境,服务器也是正在运行的环境,不想搞太大动作。因此,我先在虚拟机上编译好freetds的rpm包和mssql.so文件,然后在服务器上安装这个rpm包,上传mssql.so文件,再添加一个mssql.ini配置文件,就可以让LAMP变成LAMMP(Linux Apache Mysql Mssql Php)了。

 

下面先在虚拟机上编译,具体如下:

 

一、编译freetds的rpm包,并配置和验证freetds环境

 

1.从ibiblio上下载freetds-0.82.tar.gz

# wget http://ibiblio.org/pub/Linux/ALPHA/freetds/stable/freetds-0.82.tar.gz

 

2.进行编译
# rpmbuild -ta freetds-0.82.tar.gz
这时,提示要unixODBC-devel包,到redhat5.2光盘里找到unixODBC-devel-2.2.11-7.1.i386.rpm,放到/root/rpm路径下,进行安装。
# rpm -ivh unixODBC-devel-2.2.11-7.1.i386.rpm
这下重新使用rpmbuild进行编译,将会生成一个src.rpm包,5个rpm安装包,都放在/usr/src/redhat/的子目录里面。

 

3.在编译机安装freetds的rpm包
要编译mssql.so,需要得安装其中的三个rpm包,分别进行安装:
# rpm -ivh /usr/src/redhat/RPMS/i386/freetds-0.82-1.i386.rpm
# rpm -ivh /usr/src/redhat/RPMS/i386/freetds-unixodbc-0.82-1.i386.rpm
# rpm -ivh /usr/src/redhat/RPMS/i386/freetds-devel-0.82-1.i386.rpm

到这里,freetds 0.82的rpm已经做好了,而且安装到了编译机上了,我们可以先看看freetds的效果吧。

4.查看freetds版本

[root@localhost ~]# tsql -Cv
Compile-time settings (established with the "configure" script)
                            Version: freetds v0.82
             freetds.conf directory: /etc
     MS db-lib source compatibility: no
        Sybase binary compatibility: no
                      Thread safety: yes
                      iconv library: yes
                        TDS version: 4.2
                              iODBC: no
                           unixodbc: yes

 

5.连接mssql数据库
[root@localhost ~]# tsql -H 192.168.1.38 -p 1433 -U sa
locale is "en_US.UTF-8"
locale charset is "UTF-8"
Password:
1>

freetds0.82连接sql server 2000、2005、2008数据库都没问题,如果没有连上,通常是因为这台linux不能够访问sql server数据库。
可以从如下几方面进行排查:
1) sql server有没有打开远程访问;
2) 有没有防火墙挡住了;
3) 端口到底对不对;

freetds也提供了检测方法,分别是用ping和telnet进行测试,具体可参看http://www.freetds.org/userguide/serverthere.htm。

下面继续编译mssql.so。

 

二、编译mssql.so

要在LAMP环境下添加对mssql的支持,还必须得编译mssql.so文件。

 

1.安装php源码包
redhat5.2的光盘里没有php的源程序rpm包,可以到网上下一个:
http://oss.oracle.com/el5/SRPMS-updates/
这上面就有php-5.1.6-20.el5.src.rpm包,下载下来进行安装:
# rpm -ivh php-5.1.6-20.el5.src.rpm
直接可以安装上,有一些warning,不用管他。

 

2.修改php.spec文件
在编译之前,要进入/usr/src/redhat/SPECS里面修改一下php.spec文件,添加上mssql的编译配置。

# cd /usr/src/redhat/SPECS
# vi php.spec

找到CFLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing -Wno-pointer-sign"一行
去掉 -Wno-pointer-sign

然后在%package soap前面加入如下代码

%package mssql
Group: Development/Languages
Requires: php = %{version}-%{release}, php-pdo
Summary: A module for PHP applications that use the MSSQL database.
provides: php_database
BuildRequires: freetds-devel
%description mssql
The MSSQL package contains a dynamic shared object that will add
support for accessing MSSQL databases to php.

 

3.安装依赖包

下面再次使用rpmbuild工具对php.spec进行编译了。

# rpmbuild -bb ./php.spec

这时,会要求安装一些依赖包,所有这些rpm包在配套光盘中均可以找到,有的还要装依赖包,硬着头皮照着装就行。

# rpm -ivh aspell-devel-0.60.3-7.1.i386.rpm
# rpm -ivh httpd-devel-2.2.3-11.el5_1.3.i386.rpm
# rpm -ivh apr-devel-1.2.7-11.i386.rpm apr-util-devel-1.2.7-7.el5.i386.rpm httpd-devel-2.2.3-11.el5_1.3.i386.rpm
# rpm -ivh libc-client-2004g-2.2.1.i386.rpm libc-client-devel-2004g-2.2.1.i386.rpm
# rpm -ivh mysql-devel-5.0.45-7.el5.i386.rpm
# rpm -ivh postgresql-devel-8.1.11-1.el5_1.1.i386.rpm
# rpm -ivh net-snmp-devel-5.3.1-24.el5.i386.rpm
# rpm -ivh beecrypt-devel-4.1.2-10.1.1.i386.rpm elfutils-devel-static-0.125-3.el5.i386.rpm elfutils-devel-0.125-3.el5.i386.rpm
# rpm -ivh net-snmp-5.3.1-24.el5.i386.rpm net-snmp-devel-5.3.1-24.el5.i386.rpm
# rpm -ivh php-devel-5.1.6-20.el5.i386.rpm

php-devel虽然这里没有提示依赖,但后面用phpize时,还需要安装,就先提前安装了吧。

 

4.编译PHP

要求的依赖包都安装完成后,重新执行
# rpmbuild -bb ./php.spec

 

5.编译mssql.so文件
编译PHP之后,将会创建/usr/src/redhat/BUILD/php-5.1.6/文件夹,里面是编译过程中的文件。
由于0.82采用新的架构,需要更新config.m4文件,替换原文件。
config.m4可以从5.2.6以后版本的源程序包里面找到,替换上去,否则会出错。

在编译mssql.so时下面类似的错误,在更新config.m4后就可以解决了:
configure: error: Cannot find FreeTDS in known installation directories
configure: error: Directory /usr/local/freetds-0.82 is not a FreeTDS installation directory

关于config.m4的变化,下面的链接有config.m4的比较
http://overlays.gentoo.org/proj/php/browser/patches/php-patches/5.2.6/php5/freetds-compat.patch?rev=3488

环境准备好后,执行下面几个命令:
# phpize
# ./configure --with-mssql
# make
# make install

 

6.配置mssql.ini
在/etc/php.d中创建mssql.ini文件,添加一行
extension=mssql.so

重启apache,建一个phpinfo.php文件,查看一下是否mssql启用了。
phpinfo.php文件的内容如下:
<?php
phpinfo();
?>

创建一个连接mssql数据库的php文件,现在也可以访问了。

 

三、运营服务器的安装
编译好了rpm包和mssql.so文件,到目标服务器上执行如几步就可以了:

1.安装rpm 包
只需要安装一个就可以了。
# rpm -ivh freetds-0.82-1.i386.rpm

 

2.复制mssql.so文件到php的modules文件夹下
通常是在/usr/lib/php/modules

 

3.将mssql.ini文件放到/etc/php.d文件夹下

 

4.重启apache,进行测试。

 

 

附件中的文件包括编译后的

freetds-0.82-1.i386.rpm

mssql.so

以及和freetds0.82配套的ext/mssql中的

config.m4

以及添加了mssql的php.spec文件