Как изменить стандартную папку сборки Pear/PECL с /var/tmp?
Я пытаюсь установить пакет PECL в Linux, но установщик не проходит этап настройки.
Мой хостинг-провайдер установил файловую систему в /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 ответа
Оу, почему вы устанавливаете PDO из PECL? PDO был встроен в PHP с 5.1. Вы используете 5.0?
Если вы используете 5.1 или выше, и вам не хватает PDO, есть вероятность, что:
- Ваша копия PHP была скомпилирована без нее и должна быть перекомпилирована; или же
- Ваша копия PHP была установлена из репозитория вашей ОС без модуля PDO
Если 1, вам нужно либо перекомпилировать PHP с нуля, либо скомпилировать только общий модуль и скопировать его в правильное место.
Если 2, вам просто нужно установить расширение PDO вашей ОС. Под RHEL и CentOS попробуйте yum search php-pdo
, Я не знаю правильный синтаксис для вызова установщика пакета для других дистрибутивов, но пакет почти наверняка будет содержать строку "php-pdo". (Совет: если вы получили свой PHP из своей ОС, они также могут предоставлять общие пакеты PECL. Попробуйте поискать "pecl" в своих репозиториях.)
Наконец, если вы используете 5.0... ради всего хорошего в этом мире, обновитесь! Сначала прочтите примечания по обновлению в руководстве по PHP, на случай, если вы случайно используете старое поведение.
(Также, чтобы перенастроить pecl, попробуйте pecl config-show
чтобы увидеть, какие настройки доступны, а затем pecl config-set ...
изменить настройку. Не пытайтесь установить расширение PDO для версии PHP, более новой, чем 5.0.x, оно сломается. В верхней части страницы PDO на сайте PECL есть даже большая жирная коробка.)
Ответы выше могут помочь пользователю, но не те, которые сталкиваются с проблемой "noexec" с каталогом /tmp.
Вот как можно pecl установить [программу], когда она завершается с ошибкой "Ошибка конфигурации не может запустить скомпилированные программы c", потому что вы не можете выполнить вещи в каталоге /tmp:
Сначала перемонтируйте каталог /tmp с включенной опцией exec: mount -o,remount,rw,exec /tmp
Во-вторых, установите расширение pecl: pecl install [имя расширения]
В-третьих, как только вы закончите, вы должны установить его обратно на "noexec", используя: mount -o,remount,rw,noexec /tmp
В моем случае /tmp - это noexec, /var - исполняемый файл.
main10:~# mv /tmp/pear /var/tmp
main10:~# ln -s /var/tmp/pear /tmp/pear
Это решило проблему.