代码之家  ›  专栏  ›  技术社区  ›  jodonnell

如何从/var/tmp更改默认的pear/pecl build文件夹?

  •  2
  • jodonnell  · 技术社区  · 14 年前

    我正试图在Linux上安装一个pecl包,但安装程序从来没有过配置阶段。

    我的宿主提供程序在/var/tmp上安装了一个文件系统,它阻止文件执行,这导致了此错误:

    root@host [/usr/local/apache/conf/includes]# pecl install pdo
    downloading PDO-1.0.3.tgz ...
    Starting to download PDO-1.0.3.tgz (52,613 bytes)
    .............done: 52,613 bytes
    12 source files, building
    running: phpize
    Configuring for:
    PHP Api Version:         20041225
    Zend Module Api No:      20060613
    Zend Extension Api No:   220060519
    building in /var/tmp/pear-build-root/PDO-1.0.3
    running: /root/tmp/pear/PDO/configure
    checking for egrep... grep -E
    checking for a sed that does not truncate output... /bin/sed
    checking for cc... cc
    checking for C compiler default output file name... a.out
    checking whether the C compiler works... configure: error: cannot run C compiled programs.
    If you meant to cross compile, use `--host'.
    See `config.log' for more details.
    ERROR: `/root/tmp/pear/PDO/configure' failed
    

    我99%的确信问题是您不能在/var/tmp中执行文件(我在这里复制了一个可执行文件并尝试进行验证)。如果我让PECL在其他地方完成构建工作,我肯定可以让它完成,但是我找不到合适的配置设置。

    如何告诉PECL在非默认文件夹中构建?

    3 回复  |  直到 10 年前
        1
  •  2
  •   Charles    14 年前

    哇,你为什么要从PECL安装PDO?PDO从5.1开始就内置于PHP中。你在运行5.0吗?

    如果您运行的是5.1或更高版本,并且缺少PDO,则可能是:

    1. 您的PHP副本没有编译,必须重新编译;或
    2. 您的PHP副本是从操作系统的存储库中安装的,没有PDO模块

    如果是1,则需要从头重新编译PHP,或者只编译共享模块并将其复制到正确的位置。

    如果是2,您只需要安装操作系统的PDO扩展。在瑞尔和Centos下面,试试看 yum search php-pdo . 我不知道为其他发行版调用包安装程序的正确语法,但包中几乎肯定会包含字符串“php pdo”。(提示:如果您从操作系统获得了PHP,它们也可能提供通用的PECL包。尝试在他们的存储库中搜索“pecl”。)

    最后,如果你运行5.0…为了这个世界上所有的好东西,升级!通读 upgrade notes in the PHP manual first 以防万一你不小心使用了旧的行为。

    (此外,要重新配置PECL,请尝试 pecl config-show 查看可用的设置,然后 pecl config-set ... 更改设置。 不要尝试为比5.0.x更高版本的PHP安装PDO扩展,它 打破 . 甚至有一个大脂肪盒在顶部 PDO page on the PECL site )

        2
  •  2
  •   Joe Hyde    12 年前

    上面的答案可能会帮助用户,但不会帮助那些遇到/tmp dir的“noexec”问题的用户。

    以下是当pecl安装[program]失败时,由于无法执行/tmp目录中的内容而导致“configure error cannot run c compiled program s”的方法:

    首先在启用exec选项的情况下重新安装/tmp目录: 安装-o,重新安装,rw,exec/tmp

    其次,安装PECL延长件: PECL安装[扩展名]

    第三,完成后,应使用以下命令将其设置回“noexec”: 安装-o,重新安装,rw,noexec/tmp

        3
  •  0
  •   Anshul Goyal    10 年前

    在我的例子中/tmp是noexec,/var是可执行的。

    main10:~# mv /tmp/pear /var/tmp
    
    main10:~# ln -s /var/tmp/pear /tmp/pear
    

    它解决了这个问题。