我已经成功地在我的开发服务器上configuration并编译了php,并且工作得很好,但是在与一个系统pipe理员伙伴交谈之后,他通知不build议在生产(甚至是开发)系统中使用最新版本的自定义编译。 他注意到他们自定义configuration和编译PHP 5.3.6的情况,只是发现低级Postgres驱动程序出现了一些问题,所以他们不得不恢复到5.3.3。
所以我正在考虑回到yum来安装PHP,但是我有几个自定义的configuration设置,并想知道是否有可能通过或configurationPHP将通过YUM编译?
我目前的configuration线:
Configure Command => './configure' '--with-libdir=lib64' '--prefix=/usr/local/_custom/app/php' '--with-config-file-path=/usr/local/_custom/app/php/etc' '--with-config-file-scan-dir=/usr/local/_custom/app/php/etc/modules' '--disable-all' '--with-apxs2=/usr/sbin/apxs' '--with-curl=/usr/sbin/curl' '--with-gd' '--with-iconv' '--with-jpeg-dir=/usr/lib' '--with-mcrypt=/usr/bin' '--with-pcre-regex' '--with-pdo-mysql=mysqlnd' '--with-png-dir=/usr/lib' '--with-zlib' '--enable-ctype' '--enable-dom' '--enable-hash' '--enable-json' '--enable-libxml' '--enable-mbstring' '--enable-mbregex' '--enable-pdo' '--enable-session' '--enable-simplexml' '--enable-xml' '--enable-xmlreader' '--enable-xmlwriter'
下载src.rpm包,它包含原始源代码和编译自定义rpm所需的所有文件:
要构buildrpm,您需要rpm-build包含rpmbuild程序的包。
也可以使用yumdownloader(来自yum-utils包)完成:
yum install yum-utils rpm-build yumdownloader --source php
安装src.rpm:
rpm -Uvh *.src.rpm
cd到rpmbuild SPEC dir;
RHEL5,老Fedora
cd /usr/src/redhat/SPEC/
SUSE:
cd /usr/src/packages/SPEC/
RHEL6,较新的Fedora:
cd ~/rpmbuild/SPEC/
php.spec文件包含有关如何构build包以及将包含哪些组件的详细信息。 它还包含有关依赖关系和所需的包的数据,以便正确构build新的包。 所以,rpmbuild会提醒你任何丢失的软件包。
您将需要:
运行rpmbuild:
rpmbuild –target x86_64 -ba php.spec
–target x86_64 – 指定平台(可以是i386,x86_64,amd64等)
-ba – “build all”,将构build最终的.rpm和新的src.rpm包
您可以在../RPM/和../SRPM/目录中find构build的软件包。
这种方法可以确保包含供应商补丁的目录。 文件结构层次相同,组件兼容,依赖性得到满足,旧版本将被安全replace。 此外,你保证你将来的更新。
ps我不同意“生产中的新版本不好”的string。 我为十几家公司提供支持服务,也有共享主机,我总是喜欢有新鲜的版本。 只有php的问题是从一个颠覆转移到另一个(如从5.1.x到5.2.x,从5.2.x到5.3.x) – 有一些一般的变化和弃用/删除function。 但更新的是更快,更安全和更好的维护,其次。
pss我永远不会手动编译任何东西,并将文件放在/ usr / local /中,我已经在几天内学会了rpm,现在一切都运行平稳。
不,不幸的是,你不能用yum指定自定义configuration命令。 yum和其他类似软件包安装程序提供的软件是按照供应商规格预先构build的。
我也build议不要仅仅因为可用的最新版本,特别是在生产系统上。 我遇到过类似的问题,就像你的哥们那里有一些奇怪的臭虫头,我花了几个小时,几天,几个星期的时间来追踪它,或者只是结束了恢复到旧的构build。
我会做你自己做的一个自定义的PHP构build,这是我们在我的公司做的。 当一个新的稳定版本的PHP出来,我们build立它在/ usr / local / php-xxx,testing它,然后更新二进制符号链接和共享库在/etc/ld.so.conf.d ,我们很好。 开发人员总是要求特定的function,所以我们必须具有自定义构build的自由度和灵活性。 你可以留意一下CentOS推荐/分发的版本,并且在那个时候更新。
百胜不是编译器
你可以尝试手动编译PHP:
cd /tmp; wget http://ua.php.net/get/php-5.2.17.tar.gz/from/ua2.php.net/mirror; # latest 5.2 tar -xzvf php-YOU_VER.tar.gz; cd php-YOU_VER; ./configure --enable-cgi --disable-cli --with-png-dir=/usr/local --with-jpeg-dir=/usr/local --with-gd --enable-ftp --with-curl --with-zlib --enable-zip --with-iconv --enable-mbstring --with-mysql --with-freetype-dir=/usr/local --with-ttf --enable-gd-native-ttf --with-mysqli --with-libdir=lib64; make; make install;
就像GioMac所说,并join到它。 这样做的方法是从yum repos中获取已编译的php版本的源代码rpm并提取src rpm并将其添加到它。 build立转速并做一个
yum localinstall <rpm>
仍然留下系统pipe理员的原始关注没有答复。 您定制到PHP可能有一个错误,没有出现在您的开发框。 所以解决这个问题的一个方法就是在testing环境中进行testing,并且一旦满意地将其投入生产。
yum不是一个编译器。 所以通过yum安装并不能解决代码中存在的任何问题。 百胜只是使包解决scheme更容易解决。 我看到的一个好处是,软件包在扩展到稳定的repo分支之前需要进行一些扩展testing。 所以如果你想自己编译,那么你就失去了稳定分支的好处。 如果只是configuration更改,那么您可以通过编辑php.ini文件来完成后期安装。