search
top
Vous naviguez actuellement sur:FreeBSD

Réorganiser la liste des extensions PHP

Il m’est arrivé que php segfault (plante) sans raison apparente et sans logger aucune information, le script ci-dessous réorganise l’ordre dans lequel les modules sont chargé.

#!/bin/sh

# =============================================================
# Fix php/extensions.ini order
#
# Script based on the idea and information(s) of
# - http://www.pingle.org/2007/09/22/php-crashes-extensions-workaround
# - http://nerdstock.org/php_extensions
#
# Please copy your original php/extensions.ini to a save place before
# running this script!
#
# There is no guaranty the script is working for you or don't damage
# your system. Use at own Risk!
#
# 2011-04-03 olli hauer
#
# License: BSD
#  http://www.freebsd.org/copyright/freebsd-license.html

INI=/usr/local/etc/php/extensions.ini

EXT="session.so fileinfo.so crack.so ssh2.so imagick.so ldap.so
    simplexml.so dba.so ctype.so apc.so ftp.so mbstring.so tokenizer.so
    filter.so pgsql.so gmp.so mcrypt.so tidy.so xmlwriter.so mhash.so gd.so
    ncurses.so readline.so gettext.so iconv.so dbase.so calendar.so exif.so
    zlib.so curl.so mailparse.so xmlrpc.so bz2.so sysvmsg.so pdf.so openssl.so
    ming.so dom.so hash.so xmlreader.so gnupg.so bcmath.so pcre.so xsl.so
    wddx.so memcache.so soap.so spl.so sqlite.so recode.so pdo.so pdo_mysql.so
    pdo_sqlite.so mysqli.so mysql.so imap.so sockets.so pspell.so xml.so"

if [ ! -e ${INI} ] ; then
    echo "cannot find ${INI}"
    exit 1
fi

# cleanup previous run
[ -e ${INI}.new ] && rm -f ${INI}.new
cp -f ${INI} ${INI}.work

for e in ${EXT}; do
    if egrep -q "^extension=${e}" ${INI}.work ; then
        echo extension=${e} >> ${INI}.new
        sed -i '' -e "/${e}/d" ${INI}.work
    fi
done

if [ -s ${INI}.work ]; then
    echo "; additional extension(s) not known by $(basename $0)" >> ${INI}.new
    # sybase_ct needs to be loaded last.
    grep ^extension ${INI}.work | grep -v sybase_ct.so >> ${INI}.new
    grep ^extension=sybase_ct.so ${INI}.work >> ${INI}.new
    AE=1
fi
[ -e ${INI}.work ] && rm -f ${INI}.work
if cmp -s ${INI} ${INI}.new ; then
    echo "No changes found, remove ${INI}.new"
    rm -f ${INI}.new
    AE=0
fi

if [ ${AE} -ne 0 ]; then
cat << _EOF
==============================
New INI is saved as ${INI}.new

Additional extension(s) not known by $(basename $0)
are added to the end of new INI file.

Please review the new INI, and replace it on your own!
    Do some Basic tests:
    php -V
    php -m
    php -i
    apachectl graceful
    ...

_EOF
fi

cat << _EOF
If the segfault issue is not gone, or you cannot find the issue
    - ask on the ports@ mailing list
or
    - open a PR:
    Synopsys: lang/php5 Segmentation fault.
    Additional try debugging with command:
    gdb php ./php.core

http://www.freebsd.org/doc/en_US.ISO8859-1/books/developers-handbook/debugging.html

_EOF

Installer OpenPhoto sur ça FreeBSD

OpenPhoto propose d’héberger dans un « cloud » vos photos, permettant ainsi un accès dématérialisé (plus besoin d’apporter sa clé USB pour montrer les photos de vacances à ses parents/amis).

OpenPhoto propose pour cela deux solutions:

  • un service en ligne proposant de gérer vos photos (importation, catégories, tag, applications smartphones, API…) mais en les hébergeant dans votre « cloud » (Dropbox ou votre espace de stockage Amazon S3 et prochainement Google Drive).
  • une version communautaire et libre permettant d’auto-héberger son propre serveur. Cette version propose en plus un stockage local des photos (sans passer par Dropbox ou Amazon S3).

C’est sur cette deuxième configuration que nous allons nous pencher dans ce billet en proposant une procédure d’installation et de configuration de OpenPhoto sur une machine FreeBSD 9.0 avec NGinx , PHP-FPM et MySQL.

Préparation de l’installation

Je pars sur le principe ou vous avez une FreeBSD sur laquelle Nginx et PHP-FPM sont déjà installé.

Compilation de Nginx

  • HTTP_MODULE
  • HTTP_CACHE_MODULE
  • HTTP_GZIP_STATIC_MODULE
  • HTTP_REWRITE_MODULE
  • HTTP_UPLOAD_MODULE
  • HTTP_UPLOAD_PROGRESS
cd /usr/ports/www/nginx
make config install clean distclean

Compilation de PHP

  • CLI
  • FPM
  • SUHOSIN
  • MULTIBYTE
  • MAILHEAD
cd /usr/port/lang/php5-extentions
make config install clean distclean

Compilation des extentions PHP

  • BZ2
  • CALENDAR
  • CTYPE
  • CURL
  • DOM
  • FILEINFO
  • FILTER
  • GD
  • HASH
  • ICONV
  • JSON
  • MBSTRING
  • MCRYPT
  • OPENSSL
  • PDF
  • PHAR
  • POSIX
  • SESSION
  • SIMPLEXML
  • TOKENIZER XML
  • XMLREADER
  • XMLWRITER
  • XSL
  • ZLIB
cd /usr/port/lang/php5-extentions
make config install clean distclean

Dépendance Optionnel

  • net/pecl-oauth
  • graphics/pecl-imagick
  • graphics/exiftran

imagick/ImageMagick est en faite obligatoire, car GD2 ne fonctionne pas correctement avec OpenPhoto.

Installation de OpenPhoto

On créé ensuite un répertoire dans notre serveur Web (/usr/local/www) et on télécharge la dernière version de la version communautaire (libre) de OpenPhoto:

git clone git://github.com/openphoto/frontend.git /usr/local/www/openphoto

Puis on prépare l’arborescence:

mkdir /usr/local/www/openphoto/src/userdata
mkdir /usr/local/www/openphoto/src/html/photos
mkdir /var/www/openphoto/src/html/assets/cache
chown www /usr/local/www/openphoto/src/userdata
chown www /usr/local/www/openphoto/src/html/photos
chown www /var/www/openphoto/src/html/assets/cache

Enfin on génère le fichier de configuration Nginx /usr/local/etc/nginx/sites-enabled/openphoto pour le site OpenPhoto (à adapter également à votre configuration, notamment au niveau du server_name):

server {
    listen 80;
    server_name openphoto.mondomaine.com;
    root /usr/local/www/openphoto/src/html;
    index  index.php;
    client_max_body_size 25M;
    default_type text/html;
    charset utf-8;
    if (!-e $request_filename) {
        rewrite ^/([^?]*)(\?+([^?]*))*$ /index.php?__route__=/$1&$3 last;
    }
    # PHP scripts -> PHP-FPM server listening on 127.0.0.1:9000
    # Check cache and use PHP as fallback.
    location ~* \.php$ {
                 try_files $uri =404;
                 fastcgi_pass 127.0.0.1:9000;
                 fastcgi_index index.php;
                 include fastcgi_params;
         fastcgi_ignore_client_abort off;
                 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
    # Global restrictions configuration file.
    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }
    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }
    location ~ /\. {
        deny all;
        access_log off;
        log_not_found off;
    }
    location ~ \.ini$ {
        deny all;
        access_log off;
        log_not_found off;
    }
    add_header Cache-Control "max-age=315360000";
    # Mise ne cache des ressources statiques
    location ~* ^.+\.(jpg|jpeg|gif|css|png|js|xml)$ {
        expires 30d;
        access_log off;
    }
}

On redémarre Nginx pour prendre en compte le site:

/usr/local/etc/rc.d/nginx restart

Puis on crée une nouvelle base de donnée MySQL. Notez sur une feuille, le nom de la base (openphoto), le nom de l’utilisateur (openphoto) et le mot de passe associé (openphotomdp2012):

# mysql -u root -p
Enter password:
mysql> create database openphoto;
Query OK, 1 row affected (0.00 sec)
mysql> GRANT ALL PRIVILEGES ON openphoto.* TO "openphoto"@"localhost" IDENTIFIED BY "openphotomdp2012";
Query OK, 0 rows affected (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
mysql> exit
Bye

Configuration initiale de OpenPhoto

La suite de la configuration se fera à partir d’un navigateur Web, plus besoin de la ligne de commande :)  .

On doit dans un premier temps créer un compte sur le site OpenPhoto (même si on utilise pas la version en ligne et seulement une version auto-hébergé). Une fois le mail de confirmation reçu et la confirmation effectué, vous pouvez poursuivre l’installation en vous rendant à l’URL:http://openphoto.mondomaine.com (remplacer mondomaine.com par votre domaine que vous avez configurez dans le fichier de configuration NGinx). Si vous n’avez pas de domaine, il est possible de passer directement par l’adresse IP de votre machine.

Vous devez arriver sur la page suivante:

On entre:

  1. l’adresse email associé à votre compte OpenPhoto
  2. on laisse le thème par défaut et on clique sur « Continue to step 2″

On passe à la deuxième étape de l’installation:

On sélectionne:

  1. une base de donnée de type MySQL (que l’on a préalablement créer dans le chapitre précédant)
  2. un stockage local des photos (on peut noter qu’il est possible de mixer stockage local et Dropbox)
  3. on passe à la troisième et dernière étape

Elle permet de configurer notre base de donnée MySQL (reprendre votre petite feuille…):

A la fin de cette procédure, votre serveur OpenPhoto est prêt !

Prise en main et premières impressions

La première chose à faire est d’importer quelques photos. On peut utiliser la page Upload qui propose une importation par Drag & Drop (ou sélection plus classique dans le gestionnaire de fichiers) ou bien l’application dédiée de votre SmarthPhone (Android et iPhone). Les images sont téléchargés sur votre serveur avec une très élégante barre de progression. On note au passage qu’OpenPhoto utilise les dernières technologies HTML5.

On peut ensuite éditer les images en y ajoutant une description, des tags, des coordonnées GPS, des droits (public ou privé) et une licence. Ces informations sont bien sûr récupérées automatiquement si elles sont présentes dans les méta-données du fichier.

OpenPhoto permet de créer des groupes d’utilisateurs ayant des droits sur certaines photos. Par exemple, si vous créez un groupe Famille, alors il sera possible de classer vos photos familiales dans ce groupe afin qu’elles ne soient visibles que par vos proches. Pour grouper vos photos dans des groupes, le plus simple est d’aller dans le menu Manage, de sélectionner les photos en question (par un simple clic sur le bouton pin) puis de cliquer sur le bouton « Batch edit » et enfin de séléctionner le groupe.

Mes premières impressions sont très bonnes. OpenPhoto est rapide, stable. Le seul problème que j’ai rencontré est au niveau de l’affichage de la Gallery ou les photos sont déformées. Je vais essayer de le pousser un peu en important un grand nombre d’images (je ferai une màj du billet).

On sent une grande marge de manoeuvre au niveau des fonctionnalités proposées. Il est d’ailleurs possible de voter avec la communauté pour influencer la roadmap du logiciel sur les futures fonctions. J’aime le fait qu’OpenPhoto se concentre uniquement sur la gestion des images, contrairement à OwnCloud dont j’avais parlé dans un précédent billet.

Que pensez-vous de ce genre de service ?

Êtes vous prêts à franchir le pas et d’auto-héberger vos photos sur une de vos machines ?

Installer son FAMP (FreeBSD Apache MySQL PHP)

Un « FAMP » est une plateforme Apache/PHP/MySQL installé sur une FreeBSD ;) et oui, ce n’est pas un LinuxAMP !

Apache

cd /usr/ports/www/apache22/
make config install distclean
echo 'apache2_enable="YES"' >> /etc/rc.conf
echo 'apache2ssl_enable="YES"' >> /etc/rc.conf
echo 'accf_http_ready="YES"' >> /etc/rc.conf && kldload accf_http

PHP

cd /usr/ports/lang/php5
make config install distclean
cd /usr/ports/lang/php5-extensions
make config install distclean

MySQL

cd /usr/ports/databases/mysql51-server
make install WITH_OPENSSL=yes
make distclean
echo 'mysql_enable="YES"' >> /etc/rc.conf
/usr/local/etc/rc.d/mysql-server start
/usr/local/bin/mysql_secure_installation

Guide de démarrage FreeBSD pour les utilisateurs Linux

Il est disponible a cette adresse http://www.freebsd.org/doc/en/articles/linux-users/ (en anglais)

Désactiver le beep console sous FreeBSD

Pour le definir de maniere definitive (appliqué au boot), editer le fichier /etc/sysctl.conf et definissez la variable a hw.syscons.bell a 0

hw.syscons.bell=0

Pour l’appliquer en « live » tapez :

sysctl hw.syscons.bell=0

« Articles précédents

top