CentOS - PHP - 使用自定义 ./configure 参数安装 Yum

Mik*_*ell 3 php centos yum

我已经在我的开发服务器上成功配置和编译了 php,并且运行良好,但是在与系统管理员伙伴交谈后,他告知不建议将最新版本的自定义编译用于生产(甚至开发)系统。他注意到他们自定义配置和编译 PHP 5.3.6 的情况,只是发现低级 Postgres 驱动程序存在一些问题,因此他们不得不恢复到 5.3.3。

所以我正在考虑回到 yum 来安装 PHP,但是我有几个自定义配置设置,并且想知道是否可以通过或配置通过 YUM 编译 PHP 的方式?

我当前的配置行:

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'
Run Code Online (Sandbox Code Playgroud)

Gio*_*Mac 6

下载包的 src.rpm,它包含原始源代码和编译自定义 rpm 所需的所有文件:

  • php.spec - rpmbuild 所需的规范文件
  • php-xxx.tar.gz - 原始源代码
  • 各种补丁(.diff、.patch)
  • 要添加的文档文件(如果存在)

要构建 rpm - 您需要包含 rpmbuild 程序的 rpm-build 包。

也可以使用 yumdownloader(来自 yum-utils 包)来完成:

yum install yum-utils rpm-build

yumdownloader --source php
Run Code Online (Sandbox Code Playgroud)

安装 src.rpm:

rpm -Uvh *.src.rpm
Run Code Online (Sandbox Code Playgroud)

cd 到 rpmbuild SPEC 目录;

RHEL5,老Fedora

cd /usr/src/redhat/SPEC/
Run Code Online (Sandbox Code Playgroud)

苏斯:

cd /usr/src/packages/SPEC/
Run Code Online (Sandbox Code Playgroud)

RHEL6,较新的 Fedora:

cd ~/rpmbuild/SPEC/
Run Code Online (Sandbox Code Playgroud)

php.spec 文件包含有关如何构建包以及将包含哪些组件的详细信息。它还包含有关依赖项和所需包的数据,以便正确构建新包。因此,rpmbuild 会提醒您任何丢失的软件包。

您将需要:

  1. 从 php.net 下载更新的 php 源代码并将其放入 SOURCES 目录
  2. 在 php.spec 文件中的 "Version:" 字符串中指定新版本,在 "Release:" 字符串中也使用较低的值并在其中添加您的自定义名称,例如 "Release: 0.mike"
  3. 检查 .spec 文件以获取可能的其他更改(也许当前版本中不需要一些安全补丁,如果文件已经打过补丁,rpmbuild 会告诉你)。如果您遇到任何问题,也许您需要注释一些“Patch xx:”字符串和一些“%patch xx”。
  4. 运行 rpmbuild:

    rpmbuild --target x86_64 -ba php.spec

--target x86_64 - 指定平台(可以是 i386、x86_64、amd64 等)

-ba - "build all", 将构建最终的 .rpm 和新的 src.rpm 包

您可以在 ../RPM/ 和 ../SRPM/ 目录中找到构建的包。

此方法可确保包含供应商修补程序目录。文件结构层次相同,组件兼容,满足依赖关系,旧版本将被安全替换。此外,您保证您未来的更新。

ps 我不同意“生产中的新版本不好”字符串。我正在为几十家公司提供支持服务,也有共享主机,我总是喜欢有新版本。php 的唯一问题是从一个颠覆转移到另一个颠覆(如 5.1.x 到 5.2.x,5.2.x 到 5.3.x) - 有一些常规更改和不推荐/删除的功能。但较新的更快、更安全且维护得更好,紧随其后。

pss 在我的生活中,我永远不会手动编译任何东西并将文件放在 /usr/local/ 中,我已经在几天内学习了 rpm,因为我需要它,现在一切都运行顺利。