Précédent   Forum des professionnels en informatique > Systèmes > Autres systèmes > Unix > BSD
BSD Forum d'entraide sur les systèmes BSD. Avant de poster -> FAQ BSD et cours BSD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 05/10/2011, 16h42   #1
Candidat au titre de Membre du Club
 
Inscription : novembre 2006
Messages : 18
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : novembre 2006
Messages : 18
Points : 10
Points : 10
Par défaut Problème de connexion mysql avec adodb sous Apache chrooté - OpenBSD

Système: OpenBSD 4.9
Packages installés: php5-core-5.2.17, php5-extensions-5.2.17, php5-gd-5.2.17, php5-mysql-5.2.17, php5-snmp-5.2.17, mysql-server-5.1.54p3, mysql-client-5.1.54p0

Bonjour,

J'ai un script de tests placé dans /var/www/htdocs avec /var/www le chroot d'Apache.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
include('../adodb5/adodb.inc.php');
$conn = &ADONewConnection('mysql');
$conn->PConnect('localhost','cacti','cactipw','cactidb');
$sql = 'select hostname,description from host;';
$recordSet = &$conn->Execute($sql);
if (!$recordSet)
        print $conn->ErrorMsg();
else
while (!$recordSet->EOF) {
        print $recordSet->fields[0].' '.$recordSet->fields[1].'<BR>';
        $recordSet->MoveNext();
}
$recordSet->Close();
$conn->Close();
?>
J'ai aussi téléchargé adodb5 que j'ai placé dans /var/www

Mon serveur mysql est lancé par la commande suivante
Code :
# /usr/local/bin/mysqld_safe --user=_mysql --pid-file=/var/mysql/mysql.pid &
Et j'ai configuré /etc/my.cnf (avec / non chrooté)
Code :
1
2
[mysqld]
socket          = /var/www/var/run/mysql/mysql.sock
Lorsque mon serveur mysqld est démarré, il crée mysql.sock dans /var/www/var/run/mysql
Citation:
# ls -l /var/www/var/run/mysql/
srwxrwxrwx 6 _mysql daemon 0 Oct 4 23:04 mysql.sock
J'ai fais un lien pour que mysql.sock soit aussi joignable dans /var/run/mysql/
Code :
# ln /var/www/var/run/mysql/mysql.sock /var/run/mysql/mysql.sock

Cas 1: Le script est executé hors de toute considération chroot => FONCTIONNE
Code :
1
2
# /usr/local/bin/php /var/www/htdocs/adotest.php
127.0.0.1 System1<BR>1.1.1.1 System2<BR>

Cas 2: Le script est executé en http par l'intermédiare d'Apache (qui est chrooté) url http://localhost/adotest.php => FONCTIONNE
Code :
1
2
127.0.0.1 System1
1.1.1.1 System2
Case 3: Le script est executé en ligne de commande et simule un utilisateur dans le chroot d'Apache => ECHOUE
Code :
1
2
3
# /usr/sbin/chroot /var/www /bin/php /htdocs/adotest.php
PHP Fatal error:  Call to undefined function mysql_pconnect() in /adodb5/drivers/adodb-mysql.inc.php on line 383
Fatal error: Call to undefined function mysql_pconnect() in /adodb5/drivers/adodb-mysql.inc.php on line 383
Vous remarquerez que le script adotest.php est parvenu à inclure /adodb5/drivers/adodb-mysql.inc.php

J'ai aussi copié /etc/my.cnf dans /var/www/etc mais changé le chemin pour le client mysql
Code :
1
2
[client]
socket         = /var/run/mysql/mysql.sock
J'ai pensé qu'il y avait un problème de connexion mysql, j'ai donc copié le client mysql dans le chroot (/var/www/bin) ainsi que les librairies dynamiques qui lui sont liées. Et la connexion fonctionne bien !
Code :
1
2
3
4
# /bin/mysql -u cacti -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 6

Je ne comprends absolument pas pourquoi dans Cas 3 la connexion vers mysql ne s'effectue pas.
Comme vous pouvez l'imaginer j'ai énormément cherché

Merci
mikygee est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 05/10/2011, 17h44   #2
Expert Confirmé Sénior
 
Homme Laurent Willems
Expert Stop/Start
Inscription : septembre 2002
Messages : 2 551
Détails du profil
Informations personnelles :
Nom : Homme Laurent Willems
Âge : 33
Localisation : Belgique

Informations professionnelles :
Activité : Expert Stop/Start

Informations forums :
Inscription : septembre 2002
Messages : 2 551
Points : 4 271
Points : 4 271
Salut,

A mon avis le problème est lié au fait que la librairie mysql.so n'est pas accessible.


Pourrais-tu créer un phpinfo pour voir le chemin des libraires (extension_dir)
__________________
Alea Jacta Test!
Mygale1978 est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 05/10/2011, 18h32   #3
Candidat au titre de Membre du Club
 
Inscription : novembre 2006
Messages : 18
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : novembre 2006
Messages : 18
Points : 10
Points : 10
Merci pour ta réponse. Voici le chemin

Citation:
Directive Local Value Master Value
extension_dir /var/www/lib/php/modules /var/www/lib/php/modules
Citation:
# ls /var/www/lib/php/modules
gd.so mysql.so snmp.so
mikygee est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 05/10/2011, 19h52   #4
Expert Confirmé Sénior
 
Homme Laurent Willems
Expert Stop/Start
Inscription : septembre 2002
Messages : 2 551
Détails du profil
Informations personnelles :
Nom : Homme Laurent Willems
Âge : 33
Localisation : Belgique

Informations professionnelles :
Activité : Expert Stop/Start

Informations forums :
Inscription : septembre 2002
Messages : 2 551
Points : 4 271
Points : 4 271
Ok

Si tu chroot /var/www cela veut dire que /var/www deviendra la racine. donc logiquement l'extension_dir devrait être /lib/php/modules

Peux-modifier temporairement modifer l'extension_dir dans le php.ini, redémarrer apache, vérifier que la nouvelle valeur soit bien prise en compte dans phpinfo() et voir ce que ça donne en ligne de commande?
__________________
Alea Jacta Test!
Mygale1978 est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 05/10/2011, 22h29   #5
Candidat au titre de Membre du Club
 
Inscription : novembre 2006
Messages : 18
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : novembre 2006
Messages : 18
Points : 10
Points : 10
Excuse moi mais tu n'as pas du tout compris.

Le Cas 2 décrit dans mon message d'origine montre bien que le couple Apache+php effectue bien la requête mysql.

Ce qui ne fonctionne pas c'est un utilisateur chrooté dans /var/www qui exécute le script en php (sans passer par la couche Apache): Cas 3.

C'est pas un problème simple...

Merci
mikygee est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 06/10/2011, 11h23   #6
Expert Confirmé Sénior
 
Homme Laurent Willems
Expert Stop/Start
Inscription : septembre 2002
Messages : 2 551
Détails du profil
Informations personnelles :
Nom : Homme Laurent Willems
Âge : 33
Localisation : Belgique

Informations professionnelles :
Activité : Expert Stop/Start

Informations forums :
Inscription : septembre 2002
Messages : 2 551
Points : 4 271
Points : 4 271
Salut,

Oui je comprends bien ton problème.

l'erreur que tu vois indique clairement qu'il ne trouve pas les fonctions php pour pour pouvoir se connecter à mysql.

Code :
1
2
3
 strings /usr/lib/php5/20090626+lfs/mysql.so | grep mysql_pconnect
mysql_pconnect
Ces fonctions sont localisées dans la librairies mysql.so qui est localisé dans /var/www/lib/php/modules. ce ne semblant pas être accessible lorsque tu changes de racine.


chroot /var/www => / donc /var/www/lib/modules/php/modules devient /lib/modules/php/modules


Donc si tu veux accéder à une librairie qui se trouve dans le path /var/www/lib/php, tu devrais recréer la structure /var/www/var/www/lib/php/modules et copier mysql.so ainsi que ses dépendances dans /var/www pour que cette librairie puisse être retrouvée.

Dans mon cas, pour que la librairies mysql.so soit accessible en ayant /var/www comme racine

Code :
1
2
3
4
5
6
7
8
9
10
11
ldd /usr/lib/php5/20090626+lfs/mysql.so
        linux-gate.so.1 =>  (0x00652000)
        libmysqlclient_r.so.16 => /usr/lib/libmysqlclient_r.so.16 (0x00a6e000)
        libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0x00141000)
        libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0 (0x00989000)
        libcrypt.so.1 => /lib/tls/i686/cmov/libcrypt.so.1 (0x009ad000)
        libnsl.so.1 => /lib/tls/i686/cmov/libnsl.so.1 (0x00ddd000)
        libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0x0029b000)
        libz.so.1 => /lib/libz.so.1 (0x00e1e000)
        /lib/ld-linux.so.2 (0x00ca6000)
Je devrais créer les repertoires /var/www/lib,/var/www/usr/lib/ (pour les dépendances et /var/www/usr/lib/php5(mysql.so) et copier les différentes librairies dans les chemins indiqués
__________________
Alea Jacta Test!
Mygale1978 est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 06/10/2011, 21h39   #7
Candidat au titre de Membre du Club
 
Inscription : novembre 2006
Messages : 18
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : novembre 2006
Messages : 18
Points : 10
Points : 10
Salut,

Tout d'abord merci pour ton aide.

J'avais précédemment copié mon php.ini dans /var/www/etc/php et j'ai modifié le chemin pour extension_dir
Citation:
extension_dir = "/lib/php/modules"
Et ajouté la ligne suivante
Citation:
extension=mysql.so

J'ai donc à présent vu du système non chrooté
Citation:
# ls /var/www/lib/php/modules/
gd.so mysql.so snmp.so
En principe lorsqu'un script php est exécuté il va tenter de lire le php.ini

...

En écrivant ce message, j'ai refait plein de tests et hourra !!! hip hip hip hourra ! le script fonctionne.

Maintenant, reste plus qu'à faire fonctionner cacti.

Donc merci pour ton aide.
Pour la petite histoire, j'ai passé un nombre impressionnant de jours à faire ce debugging, isoler quel était le problème avec Cacti, voir que c'était adodb...
mikygee est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 06/10/2011, 22h36   #8
Expert Confirmé Sénior
 
Homme Laurent Willems
Expert Stop/Start
Inscription : septembre 2002
Messages : 2 551
Détails du profil
Informations personnelles :
Nom : Homme Laurent Willems
Âge : 33
Localisation : Belgique

Informations professionnelles :
Activité : Expert Stop/Start

Informations forums :
Inscription : septembre 2002
Messages : 2 551
Points : 4 271
Points : 4 271
Oki parfait.

N'oublie pas le tag résolu dans ce cas
__________________
Alea Jacta Test!
Mygale1978 est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h15.


 
 
 
 
Partenaires

Hébergement Web