Installer Apache2 / PHP5 avec macports

  • warning: array_map(): Argument #2 should be an array in /var/www/titouille.ch/www/modules/system/system.module on line 1050.
  • warning: array_keys() expects parameter 1 to be array, null given in /var/www/titouille.ch/www/includes/theme.inc on line 1845.
  • warning: Invalid argument supplied for foreach() in /var/www/titouille.ch/www/includes/theme.inc on line 1845.
Portrait de titouille

"Bon, je m'y mets... ayant besoin d'options de compilation spécifique avec apache2 et php5, j'ai décidé d'installer apache2 et php5 de manière à pouvoir compiler php5.

Il y a quelques temps, j'avais installé les outils XCode pour avoir accès aux macports, et après quelques recherches, je me suis rendu compte que ça pouvait être utile pour installer tout ça.

Après ...Bon, je m'y mets... ayant besoin d'options de compilation spécifique avec apache2 et php5, j'ai décidé d'installer apache2 et php5 de manière à pouvoir compiler php5.

Il y a quelques temps, j'avais installé les outils XCode pour avoir accès aux macports, et après quelques recherches, je me suis rendu compte que ça pouvait être utile pour installer tout ça.

Après avoir installé macports, j'ai juste un problème, la commande "sudo port" ne fonctionne pas... je dois me placer dans le répertoire qui contient la commande pour pouvoir l'exécuter...
J'ai finalement trouvé ou se situait le problème de la commande "port". Il est nécessaire d'ajouter quelques infos dans le fichier .profile situé dans mon répertoire personnel :

sudo nano /Users/titouille/.profile
 
# contenu du fichier .profile :
 
# rajout des chemins /opt/local/bin et /opt/local/sbin dans le PATH,
# afin que la commande sudo port passe depuis n'importe quel emplacement
export PATH=/opt/local/bin:/opt/local/sbin:$PATH
 
export MANPATH=/opt/local/share/man:$MANPATH
export EDITOR=/usr/bin/nano

Lors de ma dernière installation de macports, ces lignes ont été ajoutées directement sans que j'ai à faire quoi que ce soit.

Autre problème, je ne sais pas exactement comment ça va fonctionner, car je ne l'ai jamais fait... Je me pose des questions quant à l'ajout d'extensions à la compilation de php, est-ce que je dois passer des arguments de compilation, quand, comment, etc... Qu'à celà ne tienne, je tente le coup et je verrais bien si ça fonctionne :

cd /opt/local/bin
sudo port install apache2

et voici "la fin" du résultat de cette commande (car il y a auparavant toute une série de dépendances qui s'installent tels que : apr, db46, expat, gperf, libiconv, ncursesw, ncurses, readline, sqlite3, apr-util, zlib, openssl, bzip2 et pcre dans mon cas) :

--->  Fetching apache2
--->  Attempting to fetch httpd-2.2.14.tar.bz2 from <a href="http://apache.mirroring.de/httpd<br />
--->" title="http://apache.mirroring.de/httpd<br />
--->">http://apache.mirroring.de/httpd<br />
---></a>  Verifying checksum(s) for apache2
--->  Extracting apache2
--->  Applying patches to apache2
--->  Configuring apache2
--->  Building apache2
--->  Staging apache2 into destroot
--->  Creating launchd control script
###########################################################
# A startup item has been generated that will aid in
# starting apache2 with launchd. It is disabled
# by default. Execute the following command to start it,
# and to cause it to launch at startup:
#
# sudo launchctl load -w /Library/LaunchDaemons/org.macports.apache2.plist
###########################################################
Note: apache2 installs files outside the common directory structure.
--->  Installing apache2 @2.2.14_1+darwin+darwin_9+preforkmpm
--->  Activating apache2 @2.2.14_1+darwin+darwin_9+preforkmpm
--->  Cleaning apache2

Je désactive ensuite l'installation par défaut d'apache2 (/private/etc/apache2) via Préférences Système -> Partage -> Partage web puis je démarre la nouvelle install d'apache avec :

sudo /opt/local/apache2/bin/apachectl start

Je vais sur http://localhost/ et j'ai droit à un beau "It work's"

Je fais ensuite un petit

sudo port search php

afin de voir les versions disponibles pour php.

J'installe php5 via la ligne de commande suivante :

sudo port -v install php5 apache2 mysql5-server

J'ai rajouté le "-v" pour passer en mode "verbose" et ainsi voir toutes les sorties debug, les lignes de commandes d'installation et de compilation... C'est un beau fouillis que voilà, mais au moins je peux voir un peu ce qui se passe, et si j'ai des erreurs bloquantes, mais ça ne semble pas être le cas.
J'en profite pour installer également mysql5-server afin d'avoir un nouveau serveur mysql géré par macports.

Une fois tout ceci installé, je relance

port search php

afin de voir les extensions disponibles pour php.

J'en installe quelques unes :

sudo port install php5-gd php5-suhosin php5-zip php5-amf php5-curl php5-eaccelerator php5-exif php5-ftp php5-gettext php5-iconv php5-imagick php5-mbstring php5-mcrypt php5-mysql php5-odbc php5-openssl php5-soap php5-sockets  php5-sqlite php5-SPL_Types php5-xmlrpc php5-xsl php5-xslcache

(un bon petit paquet, en fait, mais je n'ai peur de rien !!)

Je vais maintenant créer quelques aliases dans mon fichier .profile :

sudo nano /Users/titouille/.profile
 
# contenu du fichier .profile après ajout des aliases :
 
export PATH=/opt/local/bin:/opt/local/sbin:$PATH
export MANPATH=/opt/local/share/man:$MANPATH
export EDITOR=/usr/bin/nano
 
alias apache2-start='sudo /opt/local/apache2/bin/apachectl start'
alias apache2-stop='sudo /opt/local/apache2/bin/apachectl stop'
alias apache2-restart='sudo /opt/local/apache2/bin/apachectl restart'
alias apache2-reload='sudo /opt/local/apache2/bin/apachectl reload'
 
alias mysql5-start='sudo launchctl load -F /Library/LaunchDaemons/org.macports.mysql5.plist'
alias mysql5-stop='sudo launchctl unload /Library/LaunchDaemons/org.macports.mysql5.plist'

J'installe les bases de données par défaut et je sécurise mysql :

sudo -u mysql mysql_install_db5
mysqladmin5 -u root password [your password goes here]

Ce qui me permet de démarrer / arrêter facilement apache et mysql. J'arrête donc les 2 serveurs pour finaliser la configuration :

apache2-stop
mysql5-stop

Je m'en vais tout d'abord installer les bases de données par défaut et modifier l'emplacement des données mysql pour placer les bases de données sur une partition de travail différente :

sudo cp -Rp /opt/local/var/db/mysql5 /Volumes/dev/web

Je crée ensuite un nouveau fichier my.cnf dans /opt/local/etc/mysql5 afin de revoir la configuration du serveur pour y rajouter l'emplacement personnalisé du répertoire des données (datadir) :

sudo cp /opt/local/share/mysql5/mysql/my-medium.cnf /opt/local/etc/mysql5/my.cnf
sudo nano /opt/local/etc/mysql5/my.cnf
 
# ajout dans la section [mysqld]
datadir = /Volumes/dev/web/mysql5
 
# redémarrage du serveur mysql :
mysql5-start
# test 
mysqladmin5 -u root -p ping
# me donne "mysql is alive"

Pour le moment, tout semble ok. Je continue ma config avec apache / php

Je crée un fichier php.ini dans /opt/local/etc/php5 en copiant le fichier php.ini-development avec la commande

sudo cp /opt/local/etc/php5/php.ini-development /opt/local/etc/php5/php.ini

Je l'ouvre, je décommente et j'édite la variable date.timezone pour y mettre la valeur Europe/Berlin et je décommente les autres variables date.xxx en dessous (4 variables)

J'installe ensuite le module pour Apache :

cd /opt/local/apache2/modules
sudo /opt/local/apache2/bin/apxs -a -e -n "php5" libphp5.so

Puis j'ouvre le fichier /opt/local/apache2/conf/httpd.conf pour y modifier la valeur suivante :

-DirectoryIndex index.html
+DirectoryIndex index.html index.php

J'en profite également pour changer l'emplacement de la racine web en modifiant la directive DocumentRoot et rajouter quelqes configurations spécifiques :
-DocumentRoot /opt/local/apache2/htdocs
-<Directory "/opt/local/apache2/htdocs/">
 
+DocumentRoot /Volumes/dev/web/www
+<Directory "/Volumes/dev/web/www/">
 
-#Include conf/extra/httpd-userdir.conf
+Include conf/extra/httpd-userdir.conf
 
# utilisation du fichier httpd-vhosts.conf pour la config des virtual hosts
# ne pas oublier d'éditer ce fichier pour supprimer les vhosts exemples
# sous peine d'avoir des messages d'erreur sur lesdits virtual hosts
# au démarrage d'apache
-#Include conf/extra/httpd-vhosts.conf
+Include conf/extra/httpd-vhosts.conf

Et je fais en sorte que ma racine web appartienne à l'utilisateur www :

sudo chown -r www:www /Volumes/dev/web/www

Toujours dans ce même fichier php.ini, je rajoute tout à la fin les lignes suivantes :

# Load the PHP module
LoadModule php5_module modules/libphp5.so
 
#
# Include PHP configurations
#
Include conf/extra/mod_php.conf

pour charger php5.

Enfin, je relance apache :

sudo /opt/local/apache2/bin/apachectl -k restart

Et je teste mon fichier info.php situé à la racine, histoire de voir ce que ça donne.
Youpi, j'ai toutes les extensions que j'avais chargé auparavant, et ça semble fonctionnel.

J'avais un problème sur un script qui utilise la fonction 'imageftbbox'. Je teste mon script, ça passe également. Bon, ben au moins je n'aurais pas fait tout ça pour rien.

Reste maintenant à reconfigurer le tout pour que mysql soit pris en charge et que mes différents sites fonctionnent comme avant. Il y a encore du pain sur la planche Tongue
Lorsque j'ai installé l'extension mysql, j'ai eu la sortie suivante :

--->  Computing dependencies for php5-mysql
--->  Fetching php5-mysql
--->  Verifying checksum(s) for php5-mysql
--->  Extracting php5-mysql
--->  Configuring php5-mysql
--->  Building php5-mysql
--->  Staging php5-mysql into destroot
--->  Installing php5-mysql @5.3.1_2+mysqlnd
To use mysqlnd with a local MySQL server, edit /opt/local/etc/php5/php.ini and set
mysql.default_socket, mysqli.default_socket and pdo_mysql.default_socket
to /opt/local/var/run/mysql5/mysqld.sock
--->  Activating php5-mysql @5.3.1_2+mysqlnd
--->  Cleaning php5-mysql

Lors de l'écriture initiale de ce billet, j'avais gardé une version mysql déjà présente dans mon système, installée sans macports, et ça fonctionnait correctement. Après édition du billet, j'ai ré-installé mysql via macports et là aussi, ça m'a l'air fonctionnel.

Je peux encore utiliser la commande suivante pour faire en sorte qu'Apache et mysql démarrent automatiquement au démarrage de l'ordinateur :

sudo launchctl load -w /Library/LaunchDaemons/org.macports.apache2.plist
sudo launchctl load -w /Library/LaunchDaemons/org.macports.mysql5.plist

Au final, plutôt sympa, ce macports, une fois qu'on a compris comment s'en servir.

source :

Installer Apache, MySQL et PHP sur Mac OS 10.5 avec MacPorts
macports (Peter's Software Cheatsheet)
UsingMacPortsQuickStart
Installer mysql5 avec macports mac osx
Installer Apache, MySQL et PHP sur Mac OS 10.5 avec MacPorts