Installer Composer sur un synology sous DSM 6

Je vous propose dans cet article une solution pour installer le gestionnaire de dépendances dédié à PHP composer sur un serveur NAS Synology équipé de DMS 6.

Si vous disposez d’un NAS Synology sous DSM6 et que vous souhaitez utiliser Composer pour créer des projets PHP, cet article peut vous aider !

Prérequis

En prérequis, je considère comme acquis les points suivants :

  • Votre accès SSH est opérationnel,
  • Web Station est activée,
  • Vous avez installé PHP 5.6 et/ou PHP 7 sur votre NAS,
  • L’extension « phar » est active au moins dans la configuration PHP de la version avec laquelle vous souhaitez utiliser Composer.

Installation de Composer

La première chose à savoir – je suis tombé dans le panneau et c’est la raison de ce billet – c’est que votre NAS est équipé d’une version de PHP dédiée à l’exécution du DSM. Cette version n’est pas utilisée par Web Station. C’est-à-dire qu’en tapant php en ligne de commande, c’est le PHP interne qui se lance et qui est limité au niveau de ses extensions (je me suis retrouvé confronté à l’absence de « tokenizer » en souhaitant installer un logiciel). Les autres versions de PHP sont accessibles depuis les commandes php56 et/ou php70 ; qui sont installées dans /usr/local/bin.

Je vous propose donc d’installer Composer globalement au serveur dans le même répertoire que les différentes versions PHP installées ; parce que taper du php56 composer.phar, ça va deux secondes…

Commençez donc par ouvrir votre accès SSH (le « $ » n’est pas à taper, il représente les extraits correspondants à de la ligne de commande) :

ssh yourname@ip

Accédez au compte root :

sudo -i

Déplacez-vous dans le répertoire où nous installerons Composer :

cd /usr/local/bin

Installez Composer :

curl -s http://getcomposer.org/installer | php56

Comme composer.phar utilise par défaut la commande php nous devons créer une commande qui permet d’outrepasser ce comportement. Créons donc ce script :

vi composer

Enregistrez le contenu suivant (tapez « i » pour passer en modification de contenu) :

!/bin/bash
php56 /usr/local/bin/composer.phar $*

Tapez Echap pour quitter le mode modification puis :wq pour enregistrer et fermer le fichier.

Rendez le script exécutable :

chmod +x composer

Quittez le mode root :

exit

Testez pour finir que la commande fonctionne correctement :

composer --version

Si la version s’affiche correctement, c’est tout bon !

10 réflexions sur « Installer Composer sur un synology sous DSM 6 »

  1. Bonjour,

    très bon tuto

    Je travaille sur Putty, donc le $ que tu places dans le tuto mon comliqué la tache pour comprendre que pour mon cas je ne suis pas obligé de le mettre, j’ai perdu beaucoup de temps pour comprendre.

    quand je teste
    composer –version

    j’ai comme reponse

    Permission denied

    je suis en dernière version de dsm.

    Merci

  2. Merci pour ce retour, j’ai ajouté une note sur le $ 😉

    Pardon pour le délai, je suis passé à côté des commentaires à approuver (c’est que je ne suis pas habitué à en avoir !).

    As-tu pu résoudre ton souci depuis la rédaction de ce commentaire ?

    Il faut vérifier les droits d’accès au binaire de composer et les ajuster en conséquence pour que tu puisses l’utiliser dans ta session utilisateur.

  3. Pour répondre à la question access denied en utilisateur, il faut taper petit x et non grand X pour modifier les droits en écriture
    chmod +x composer
    la commande (chmod) (+)ajouter permission (x)accès en exécution (composer)fichier à modifier

  4. Bonjour,
    j’ai un problème avec la procédure décrite ci-dessus, en effet
    les prérequis sont tous satisfaits, et la commande d’installation de composer:
    « sudo curl -s http://getcomposer.org/installer |php70″ s’est bien déroulée,
    mais le script « composer » qui est enregistré sous usr/local/bin :
    #!/bin/bash
    php70 /usr/local/bin/composer.phar $*
    avec les permissions :
    -rwxr-xr-x 1 root root 49 Mar 17 15:25 composer
    me renvoie le message : « Could not open input file: /usr/local/bin/composer.phar »
    ai-je fait une erreur quelque part? ou comment résoudre ce problème.

    Merci pour votre procédure et pour votre réponse.

    1. Bonjour !

      Étrange en effet, tout semble correct.

      Avez-vous essayé un appel direct pour vous assurer que les binaires fonctionnent ?

      cd /usr/local/bin
      php70 composer.phar --version

      1. je viens d’essayer et j’ai la même réponse :
        Philippe@DiskStation:/usr/local/bin$ php70 composer.phar –version
        Could not open input file: composer.phar
        Philippe@DiskStation:/usr/local/bin$

  5. Bonjour,

    je reviens avec mon problème, je pensais que l’instruction « sudo curl -s http://getcomposer.org/installer |php70″ s’était bien déroulée, mais je pense qu’il y a seulement eu le téléchargement des programmes et aucune exécution en fait le fichier « composer.phar » n’existait pas.

    je me suis tourné vers une installation manuelle :
    php -r « copy(‘https://getcomposer.org/installer’, ‘composer-setup.php’); »
    php -r « if (hash_file(‘sha384’, ‘composer-setup.php’) === ‘dac665fdc30fdd8ec78b38b9800061b4150413ff2e3b6f88543c636f7cd84f6db9189d43a81e5503cda447da73c7e5b6’) { echo ‘Installer verified’; } else { echo ‘Installer corrupt’; unlink(‘composer-setup.php’); } echo PHP_EOL; »
    php composer-setup.php
    php -r « unlink(‘composer-setup.php’); »
    les résultats sont plus probants :

    Philippe@DiskStation:/usr/local/bin$ php -r « copy(‘https://getcomposer.org/installer’, ‘composer-setup.php’); »
    PHP Warning: copy(composer-setup.php): failed to open stream: Permission denied in Command line code on line 1

    Warning: copy(composer-setup.php): failed to open stream: Permission denied in Command line code on line 1

    Philippe@DiskStation:/usr/local/bin$ sudo php -r « copy(‘https://getcomposer.org/installer’, ‘composer-setup.php’); »

    Philippe@DiskStation:/usr/local/bin$ sudo php -r « if (hash_file(‘sha384’, ‘composer-setup.php’) === ‘dac665fdc30fdd8ec78b38b9800061b4150413ff2e3b6f88543c636f7cd84f6db9189d43a81e5503cda447da73c7e5b6’) { echo ‘Installer verified’; } else { echo ‘Installer corrupt’; unlink(‘composer-setup.php’); } echo PHP_EOL; »
    Installer verified

    Philippe@DiskStation:/usr/local/bin$ php composer-setup.php
    All settings correct for using Composer
    The installation directory « /usr/local/bin » is not writable

    Philippe@DiskStation:/usr/local/bin$ sudo composer-setup.php
    sudo: composer-setup.php: command not found

    composPhilippe@DiskStation:/usr/local/bin$ sudo php composer-setup.php
    All settings correct for using Composer
    Downloading…

    Composer (version 2.2.23) successfully installed to: /usr/local/bin/composer.phar
    Use it: php composer.phar

    Mais il subsiste un problème quand je veux initialiser composer : j’ai la réponse suivante :

    Philippe@DiskStation:/usr/local/bin$ composer init

    PHP Warning: PHP Startup: Unable to load dynamic library ‘/usr/local/lib/php70/modules/openssl’ – /usr/local/lib/php70/modules/openssl: cannot open shared object file: No such file or directory in Unknown on line 0

    Welcome to the Composer config generator

    This command will guide you through creating your composer.json config.

    Package name (/) [philippe/bin]:

    En fait se sont les modules openssl qui manquent bien que l’extension est bien disponible au niveau de php.ini

    Voyez-vous un moyen d’y remédier

    Bien à vous
    et encore merci pour votre aide

    1. Bonjour Philippe,

      Voilà qui est mieux en effet !

      1ère remarque : la commande composer init ne doit pas être exécutée dans /usr/local/bin. Ce dossier est un dossier système prévu uniquement pour recevoir des…binaires. Et en tant que tel, les droits d’écriture y sont restreints. composer étant installé, il devient désormais utilisable dans vos dossiers de projets web, à créer cette fois dans le dossier déclaré au niveau de la Web Station. Chez moi, il s’agit du dossier /volume1/web. Une fois dans ce dossier, vous n’aurez plus à jouer avec sudo.

      2ème remarque : du coup, je suis retourné voir pour faire un essai sur mon Syno pour openssl. Je n’ai pas rencontré de problème particulier. J’étais encore sur mon appel de composer.phar avec le binaire php56. J’en ai profité pour passer sur php80 et mettre à jour composer. Aucun souci lors de l’initialisation d’un projet composer (dans mon dossier web).

      Je suis allé voir ce qu’il y avait dans /usr/local/lib/php70/modules/ : le dossier est vide. Je pencherai donc plutôt pour un souci dans le fichier php.ini. Je vous invite à vérifier le paramètre extension_dir

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Share This