尝试为 php pecl 扩展模块 (geoip) 构建 rpm 时找不到 .so

Can't find the .so while trying to build an rpm for php pecl extension module (geoip)

我正在尝试制作一个 RPM 以便在 AWS 机器上轻松部署 geoip php 模块。 RPM 以及其他内容将托管在只能由这些机器访问的私人存储库中。这是我正在使用的软件的要求,所以让我们把它留在我需要它

我的第一次尝试是

$ pecl makerpm geoip
WARNING: "pear makerpm" is no longer available; an improved version is available via "pear make-rpm-spec", which is available by installing PEAR_Command_Packaging

很公平,让我们安装这个 PEAR_Command_Packaging 交易并继续...

$ pecl install PEAR_Command_Packaging
No releases available for package "pecl.php.net/PEAR_Command_Packaging"
install failed

好吧,我可以发誓我被告知要安装这个,但让我们试试 pear:

$ pear install PEAR_Command_Packaging
Failed to download pear/PEAR_Command_Packaging within preferred state "stable", latest release is version 0.3.0, stability "alpha", use "channel://pear.php.net/PEAR_Command_Packaging-0.3.0" to install
install failed

稳定性alpha嗯……好吧,让我们看看他们有多活跃! 根据 their site,该项目不活跃,最后一个 activity 是在 2012 年 4 月 ......那不行。

随着这条大道的关闭,我查看了 pecl 命令本身,它似乎提供了 下载构建、和 安装 。我不想要 install 因为我只是在这里制作 RPM,但是 downloadbuild 确实看起来很方便:

$ pecl download geoip-1.0.8
downloading geoip-1.0.8.tgz ...
Starting to download geoip-1.0.8.tgz (10,061 bytes)
.....done: 10,061 bytes
File /home/user/workspace/geoip-rpm-spec/geoip-1.0.8.tgz downloaded

准备建造...

$ pecl bundle geoip
downloading geoip-1.0.8.tgz ...
Starting to download geoip-1.0.8.tgz (10,061 bytes)
.....done: 10,061 bytes
Package ready at '/home/user/workspace/geoip-rpm-spec/geoip'

现在,我们建造!

$ pecl build geoip/package.xml 
running: phpize
Configuring for:
PHP Api Version:         20131106
Zend Module Api No:      20131226
Zend Extension Api No:   220131226
building in /var/tmp/pear-build-userttUJNa/geoip-1.0.8
... <snip/>
running: find "/var/tmp/pear-build-userttUJNa/install-geoip-1.0.8" | xargs ls -dils
264791  4 drwxrwxr-x 3 user user  4096 Oct  1 18:33 /var/tmp/pear-build-userttUJNa/install-geoip-1.0.8
265361  4 drwxrwxr-x 3 user user  4096 Oct  1 18:33 /var/tmp/pear-build-userttUJNa/install-geoip-1.0.8/usr
265362  4 drwxrwxr-x 3 user user  4096 Oct  1 18:33 /var/tmp/pear-build-userttUJNa/install-geoip-1.0.8/usr/lib64
265363  4 drwxrwxr-x 3 user user  4096 Oct  1 18:33 /var/tmp/pear-build-userttUJNa/install-geoip-1.0.8/usr/lib64/php
265409  4 drwxrwxr-x 3 user user  4096 Oct  1 18:33 /var/tmp/pear-build-userttUJNa/install-geoip-1.0.8/usr/lib64/php/5.6
265444  4 drwxrwxr-x 2 user user  4096 Oct  1 18:33 /var/tmp/pear-build-userttUJNa/install-geoip-1.0.8/usr/lib64/php/5.6/modules
265358 68 -rwxr-xr-x 1 user user 67772 Oct  1 18:33 /var/tmp/pear-build-userttUJNa/install-geoip-1.0.8/usr/lib64/php/5.6/modules/geoip.so

那么,我应该可以在 /var/tmp/pear-build-userttUJNa/install-geoip-1.0.8/usr/lib64/php/5.6/modules/geoip.so 找到我的 geoip.so,对吧?

$ ls -al /var/tmp/pear-build-userttUJNa/install-geoip-1.0.8
ls: cannot access /var/tmp/pear-build-userttUJNa/install-geoip-1.0.8: No such file or directory
$ ls -al /var/tmp/pear-build-userttUJNa
ls: cannot access /var/tmp/pear-build-userttUJNa: No such file or directory

错了!

build 步骤声称要创建的 .so 在哪里?该文件不在这台机器上。 我能够得到该死的 .so 的唯一方法是 运行 install 命令,但是 this 不是需要的机器模块。

我是不是做错了什么?

更新: 多一点谷歌搜索出现了答案。我在这里使用 geoip 作为示例,因为我正在使用它,但您几乎可以将其用于任何扩展,几乎不需要修改。

  1. pecl download geoip-1.0.8下载源码(或其他扩展,或其他版本)
  2. pecl bundle geoip提取扩展源
  3. cd geoip && phpize 切换到源目录并创建 autoconf 脚本
  4. ./configure --prefix=/home/user/rpmbuild/blah --exec-prefix=/home/user/rpmbuild/bleh 配置
  5. make .so 现在在 modules 目录中
  6. 盈利!

这是老掉牙的方法:

(目前)似乎可行的是 运行 构建步骤,以便下载的模块填充 configure 脚本,切换到模块目录并 运行 configure --prefix=some_local_dir 然后 运行 make。 现在我实际上可以看到 geoip.so 文件,但感觉比实际解决方案 trick/workaround 更像。