2010-06-22 15 views
2

J'essaye d'installer un paquet de PECL sur Linux, mais le programme d'installation ne dépasse jamais l'étape de configuration.Comment changer le dossier de construction Pear/PECL par défaut de/var/tmp?

Mon fournisseur d'hébergement monté un système de fichiers dans/var/tmp qui empêche les fichiers d'exécution, et qui est la cause de cette erreur:

[email protected] [/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 

Je suis 99% sûr que le problème est que vous ne pouvez pas exécuter fichiers dans/var/tmp (j'ai copié un fichier exécutable ici et l'ai essayé pour vérifier). Je suis sûr que PECL peut être complété si je le fais faire son travail de construction ailleurs, mais je ne trouve pas le paramètre de configuration approprié. Comment pouvez-vous dire à PECL de construire dans un dossier autre que celui par défaut?

+0

Montage/tmp (ou ce qui s'y rattache) comme noexec est un faux sentiment de sécurité. 'cd ~ &&/bin/sh -c/tmp/badcode'. .. trop d'hôtes embauchent des admins qui font tout ce que Google dit. –

Répondre

2

Whoa, pourquoi installez-vous PDO de PECL? PDO a été construit en PHP depuis 5.1. Courez-vous 5.0?

Si vous utilisez 5.1 ou plus et sont manquantes PDO, les chances sont que:

  1. Votre copie de PHP a été compilé sans elle, et doit être recompilé; ou
  2. Votre copie de PHP a été installé à partir du référentiel de votre système d'exploitation sans le module PDO

Si 1, vous devrez soit recompiler PHP à partir de zéro, ou compiler seulement le module partagé et copie à la bonne emplacement.

Si 2, il vous suffira d'installer l'extension PDO de votre système d'exploitation. Sous RHEL et CentOS, essayez yum search php-pdo. Je ne connais pas la syntaxe appropriée pour appeler l'installateur de paquet pour d'autres distributions, mais le paquet inclura presque certainement la chaîne "php-pdo". (Astuce: Si vous avez obtenu votre PHP à partir de votre système d'exploitation, ils peuvent également fournir des paquets PECL communs.) Essayez de chercher "pecl" dans leurs dépôts.)

Enfin, si vous utilisez 5.0 ... pour le bien de tout ce qui est bon dans ce monde, mise à jour! Lisez le upgrade notes in the PHP manual first, juste au cas où vous utilisez un vieux comportement par accident.

(également, reconfigurer PECL, essayez pecl config-show pour voir quels paramètres sont disponibles, suivis d'un pecl config-set ... pour modifier un réglage. Ne pas essayer d'installer l'extension PDO pour une version de PHP plus récent que 5.0.x, il va problème briser. Il y a même une grosse boîte de graisse dans la partie supérieure de la PDO page on the PECL site.)

+0

Merci! J'ai exécuté phpinfo() et j'ai vu "./configure '' --disable-mbregex '' --disable-pdo '". Aucune idée de la raison pour laquelle ils auraient désactivé le PDO ... – jodonnell

+0

Si c'est votre hôte, ils sont fous. Si c'est la distribution de votre système d'exploitation, c'est pour qu'ils puissent le compiler en tant que module séparé pour une raison folle. – Charles

2

les réponses ci-dessus peuvent aider l'utilisateur, mais pas ceux qui se jettent dans la « noexec » avec le/tmp dir.

Voici comment pear install [programme] quand il échoue avec « erreur de configuration ne peut pas exécuter c les programmes compilés » parce que vous ne pouvez pas exécuter des choses dans le répertoire/tmp:

D'abord remonter le répertoire/tmp avec l'option exec activé: mount -o, remount, rw, exec/tmp

Deuxièmement, installez votre PECL extention: pear install [nom extention]

Troisièmement, une fois que vous avez fini devez le remettre à ' noexec 'à l'aide de: mount -o, remount, rw, noexec/tmp

+0

J'ai ce problème lors de l'installation de memcached. J'ai remonté le répertoire tmp et var/tmp mais l'erreur persiste et je ne peux pas obtenir l'extension installée. CentOS 5.9. Dois-je ouvrir une question pour cela? –

0

Dans mon cas/tmp est noexec,/var est exécutable.

main10:~# mv /tmp/pear /var/tmp 

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

Il a résolu le problème.