在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文件
分享到:
相关推荐
在虚拟机上安装redhat5.2和oracle10g.doc
redhat5.2 图解 说明文档 个人装过很多次服务器以及跟人电脑的UNIX环境 并且做过集群环境配置 想在将部分经验贡献
redhat5.2
操作系统 Redhat5.2 32位 oracle版本:oracle11g
redhat5.2安装图解,比较详细,希望有用
按顺序安装以下包就可以完成GCC的安装了 1)[root@rhel5 Server]# rpm -ivh kernel-headers-2.6.18-53.el5.i386.rpm 2)[root@rhel5 Server]# rpm -ivh glibc-headers-2.5-18.i386.rpm 3)[root@rhel5 Server]# rpm ...
RedHat5.2安装oracle及安装前的准备工作
自己总结的在redhat5.2的opencv2.3.1的配置步骤,自己写的比较详细,适合刚开始接触的新手作为配置参考
redhat5.2安装全过程。如果在安装过程中需要安装各种驱动(如HBA卡驱动)请和本人联系,
Redhat5.2系统基于IP-SAN组网指导书
RedHat 5.2+MYSQL集群主备+DRBD安装指南 Red Hat Enterprise Linux 5.2环境下,安装二台MYSQL服务器(主备式),通过heartbeat切换,DRBD储存共享。 利用heartbeat,启动mysql、mon。
这是本人实际的安装过程,附带详细截图说明
Redhat搭建HA双机环境
MySQL-Cluster-gpl-client-7.0.8a-0.rhel5.i386.rpm网上不好下载,我下载下来分享下
Linux_Redhat5下手工安装配置PHP+Mysql+Apche--LAMP环境搭建(转).pdf Linux_Redhat5下手工安装配置PHP+Mysql+Apche--LAMP环境搭建(转).pdf
VMware虚拟机在32位cpu上安装64位的redhat linux 5.2
最近,Red Hat 对旗下面向企业用户的 Linux 系统 Red Hat Enterprise Linux (RHEL) 进行了更新,推出了 5.5 版本。RHEL 5.5 支持新的硬件平台,升级了既有的软件包,以及对虚拟化方面进行了增强。...
基于ucloud上搭建workpress,其中的部分做了优化,可以适用普通的redhat
里面有arm-Linux-gcc-4.5.1版本编译器,在redhat5.5环境亲自测试过,当然也适用ubuntu环境搭建