drushのインストール

Drupalを管理する上で便利なdrushのインストール方法について記載します。
過去にも記事にしていますが、あれからかなり変わり、インストールも非常にシンプルになりました。
インストールして損はないと思います。
 

環境

  • さくらのVPS
  • CentOS7
  • nginx-1.11.4
  • MariaDB-10.0.27
  • php-5.6.26
  • php-fpm
  • drupal-7.51

以上が今回drushをインストールする環境です。
さくらのVPSなので、今回はサーバのルート権限があるユーザで作業しています。
 

準備

上記環境で稼働する状態であれば、ほかに必要な作業はありません。

drushのリリースバージョンはこちらから確認できます。
今回は最新バージョンをインストールします。
※drushはdrupalのバージョンとPHPのバージョンに依存します。

インストール

drushはグローバルに利用できるようにするのかローカルで利用できるようにするのかでインストール方法が異なります。
今回はサーバーのルート権限があるので、グローバルで利用できるようにインストールします。
また、ユーザ環境の編集も極力しなくていいように、すでにパスが通っている場所にdrushをインストールします。
※usr/binや/usr/local/binなど
 

最新版のダウンロード

まず、ダウンロードする前に作業場所へ移動します。
作業場所はどこでも構いませんが、とりあえずdrupal_rootディレクトリ(/var/www/html)として説明します。

drush.pharのダウンロード

# cd /var/www/html
# php -r "readfile('https://s3.amazonaws.com/files.drush.org/drush.phar');" > drush 

この方法では、php.iniでallow_url_fopen=offだとエラーになります。

重要:drupalのセキュリティ要件でallow_url_fopen = offにするようになっています。

# curl https://s3.amazonaws.com/files.drush.org/drush.phar > drush

curlがあるなら上記方法でもできます。

動作テスト

# php drush core-status 

 Drupal version                  :  7.51
 Site URI                        :  http://default
 Database driver                 :  mysql
 Database hostname               :  localhost
 Database port                   :
 Database username               :  databaseuser
 Database name                   :  drupal
 Database                        :  Connected
 Drupal bootstrap                :  Successful
 Drupal user                     :
 Default theme                   :  Adaptivetheme
 Administration theme            :  seven
 PHP configuration               :  /etc/php.ini
 PHP OS                          :  Linux
 Drush script                    :  /var/www/html/drush
 Drush version                   :  8.1.6
 Drush temp directory            :  /tmp
 Drush configuration             :
 Drush alias files               :
 Install profile                 :  standard
 Drupal root                     :  /var/www/html
 Drupal Settings File            :  sites/default/settings.php
 Site path                       :  sites/default
 File directory path             :  sites/default/files
 Temporary file directory path   :  /tmp

※drupalのルートディレクトリ以下で実行しないと正しく動作しません。

設定

実行権の付与

 # chmod +x drush 

設置

 # mv drush /usr/bin/drush 

/usr/binに設置していますが、/usr/local/binでもどこでも構いません。
パスが通っていない場所に設置した場合はユーザ環境設定ファイル(~/.bashrc)などのPATH環境変数にそのパスを追加してください。


以上でdrushのインストールは完了です。
 

PHP環境設定ファイル

グローバルの環境設定ファイルは/etc/php.iniなど決まった場所になりますが、ユーザ環境設定ファイルに関してはPHPのバージョンによって、探索場所が異なったりphp.d以外は探索しなかったりします。
たとえば、CentOS 7のPHP-5.6では/etc/php.iniとphp.d/*.iniのみです。

 # php --ini
Configuration File (php.ini) Path: /etc
Loaded Configuration File:         /etc/php.ini
Additional .ini files parsed:      /etc/php.d/10-opcache.ini,
/etc/php.d/20-bz2.ini,
/etc/php.d/20-calendar.ini,
/etc/php.d/20-ctype.ini,
/etc/php.d/20-curl.ini,
/etc/php.d/20-dom.ini,
/etc/php.d/20-exif.ini,
/etc/php.d/20-fileinfo.ini,
/etc/php.d/20-ftp.ini,
/etc/php.d/20-gd.ini,
/etc/php.d/20-gettext.ini,
/etc/php.d/20-iconv.ini,
/etc/php.d/20-imap.ini,
/etc/php.d/20-mbstring.ini,
/etc/php.d/20-mcrypt.ini,
/etc/php.d/20-mysqlnd.ini,
/etc/php.d/20-pdo.ini,
/etc/php.d/20-phar.ini,
/etc/php.d/20-posix.ini,
/etc/php.d/20-shmop.ini,
/etc/php.d/20-simplexml.ini,
/etc/php.d/20-sockets.ini,
/etc/php.d/20-sqlite3.ini,
/etc/php.d/20-sysvmsg.ini,
/etc/php.d/20-sysvsem.ini,
/etc/php.d/20-sysvshm.ini,
/etc/php.d/20-tokenizer.ini,
/etc/php.d/20-xml.ini,
/etc/php.d/20-xmlwriter.ini,
/etc/php.d/20-xsl.ini,
/etc/php.d/30-mysql.ini,
/etc/php.d/30-mysqli.ini,
/etc/php.d/30-pdo_mysql.ini,
/etc/php.d/30-pdo_sqlite.ini,
/etc/php.d/30-wddx.ini,
/etc/php.d/30-xmlreader.ini,
/etc/php.d/40-apcu.ini,
/etc/php.d/40-igbinary.ini,
/etc/php.d/40-json.ini,
/etc/php.d/40-memcache.ini,
/etc/php.d/40-msgpack.ini,
/etc/php.d/40-zip.ini,
/etc/php.d/50-memcached.ini 

以上のようになりますので、PHPのバージョンを更新した場合など、これまで有効になっていたローカルに配置したphp.iniが反映されない可能性があります。

user_ini.filename

PHP 5.3以降の「.user.ini」ファイルは、PHPが探索する各ディレクトリにあるINIファイルの名前になります。
Apacheの.htaccessのような使い方ができるのかもしれませんが、あらゆる設定変更ができるわけではないようです。

PHP_INI_SCAN_DIR変数

PHPが探索するINIファイルのディレクトリを指定できるシェル環境変数です。
PHP CLIで使えます。

以下の例では、ユーザのホームディレクトリにあるphp.iniを追加するように$HOME/.bash_profileにPHP_INI_SACAN_DIR変数を設定しています。

 export PHP_INI_SCAN_DIR=:$HOME 

「:」コロンの位置が重要です。先にある場合はグローバルのphp.iniの内容が先に読みこまれ、あとにある場合はグローバルのphp.iniの内容の先に読み込まれます。
また、追加されるINIファイルはディレクトリ以下にある「.ini」で終わるファイルすべてになります。

変更を反映し、以下のコマンドで確認します。(※事前に$HOME/php.iniを作成してあります。)

 # php --ini
Configuration File (php.ini) Path: /etc
Loaded Configuration File:         /etc/php.ini
Scan for additional .ini files in: :/home/greenleaf/www
Additional .ini files parsed:      /etc/php.d/10-opcache.ini,
/etc/php.d/20-bz2.ini,
/etc/php.d/20-calendar.ini,
/etc/php.d/20-ctype.ini,
/etc/php.d/20-curl.ini,
/etc/php.d/20-dom.ini,
/etc/php.d/20-exif.ini,
/etc/php.d/20-fileinfo.ini,
/etc/php.d/20-ftp.ini,
/etc/php.d/20-gd.ini,
/etc/php.d/20-gettext.ini,
/etc/php.d/20-iconv.ini,
/etc/php.d/20-imap.ini,
/etc/php.d/20-mbstring.ini,
/etc/php.d/20-mcrypt.ini,
/etc/php.d/20-mysqlnd.ini,
/etc/php.d/20-pdo.ini,
/etc/php.d/20-phar.ini,
/etc/php.d/20-posix.ini,
/etc/php.d/20-shmop.ini,
/etc/php.d/20-simplexml.ini,
/etc/php.d/20-sockets.ini,
/etc/php.d/20-sqlite3.ini,
/etc/php.d/20-sysvmsg.ini,
/etc/php.d/20-sysvsem.ini,
/etc/php.d/20-sysvshm.ini,
/etc/php.d/20-tokenizer.ini,
/etc/php.d/20-xml.ini,
/etc/php.d/20-xmlwriter.ini,
/etc/php.d/20-xsl.ini,
/etc/php.d/30-mysql.ini,
/etc/php.d/30-mysqli.ini,
/etc/php.d/30-pdo_mysql.ini,
/etc/php.d/30-pdo_sqlite.ini,
/etc/php.d/30-wddx.ini,
/etc/php.d/30-xmlreader.ini,
/etc/php.d/40-apcu.ini,
/etc/php.d/40-igbinary.ini,
/etc/php.d/40-json.ini,
/etc/php.d/40-memcache.ini,
/etc/php.d/40-msgpack.ini,
/etc/php.d/40-zip.ini,
/etc/php.d/50-memcached.ini,
/home/user1/php.ini

出力内容は、探索対象に設定されているディレクトリの表示と、さらにそれに従って探索した結果、実際に追加されたINIファイルの一覧になります。
そのため、実際にファイルが存在していなければローカルのINIファイルは読み込まれません。
bashシェルの環境設定ファイルで追加しているのでこのファイルがロードされなければ効果はありません。

$HOME/php.iniに「allow_url_fopen=1」を設定すれば、drushのインストールで発生したエラーの対処が可能になります。

bashの設定ファイルに変数を設定しましたが、一時的にローカルのINIファイルを追加するのであれば「 PHP_INI_SCAN_DIR=:$HOME php --ini」でも可能です。
または「php -d allow_url_fopen=1」で一時的に変更した設定を使ってPHPを実行できます。

「user.ini.filename」とか「PHP_INI_SACAN_DIR」などの影響範囲は正直理解できていませんので、その時だけ使うようにしています。