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」などの影響範囲は正直理解できていませんので、その時だけ使うようにしています。