やったこと

webサービスを作るときに考えたことを垂れ流します

CakePHP3を泣きながらインストールした記録

CakePHP3をヒーヒー言いながらなんとかインストールできました(環境はCentOS 6.5)。
いろんなエラーが発生しまくって超めんどくさかった・・。

以下頑張りの記録です。

その1「CakePHP3をインストール」

初めにやること、それは下記コマンドを実行してComposerで「CakePHP3」をインストールすることです。

composer create-project --prefer-dist cakephp/app app_hogegege

ここで大量にエラーが発生してインストールが失敗します、一気にやる気がなくなる瞬間です・・。

Installing cakephp/app (3.1.2)
  - Installing cakephp/app (3.1.2)
    Downloading: 100%

Created project in app_hogegege
Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - cakephp/cakephp 3.2.6 requires php >=5.5.9 -> your PHP version (5.4.31) does not satisfy that requirement.
    - cakephp/cakephp 3.2.5 requires php >=5.5.9 -> your PHP version (5.4.31) does not satisfy that requirement.
    - cakephp/cakephp 3.2.4 requires php >=5.5.9 -> your PHP version (5.4.31) does not satisfy that requirement.
    - cakephp/cakephp 3.2.3 requires php >=5.5.9 -> your PHP version (5.4.31) does not satisfy that requirement.
    - cakephp/cakephp 3.2.2 requires php >=5.5.9 -> your PHP version (5.4.31) does not satisfy that requirement.
    - cakephp/cakephp 3.2.1 requires php >=5.5.9 -> your PHP version (5.4.31) does not satisfy that requirement.
    - cakephp/cakephp 3.2.0 requires php >=5.5.9 -> your PHP version (5.4.31) does not satisfy that requirement.
    - cakephp/cakephp 3.1.9 requires ext-intl * -> the requested PHP extension intl is missing from your system.
    - cakephp/cakephp 3.1.8 requires ext-intl * -> the requested PHP extension intl is missing from your system.
    - cakephp/cakephp 3.1.7 requires ext-intl * -> the requested PHP extension intl is missing from your system.
    - cakephp/cakephp 3.1.6 requires ext-intl * -> the requested PHP extension intl is missing from your system.
    - cakephp/cakephp 3.1.5 requires ext-intl * -> the requested PHP extension intl is missing from your system.
    - cakephp/cakephp 3.1.4 requires ext-intl * -> the requested PHP extension intl is missing from your system.
    - cakephp/cakephp 3.1.3 requires ext-intl * -> the requested PHP extension intl is missing from your system.
    - cakephp/cakephp 3.1.2 requires ext-intl * -> the requested PHP extension intl is missing from your system.
    - cakephp/cakephp 3.1.13 requires ext-intl * -> the requested PHP extension intl is missing from your system.
    - cakephp/cakephp 3.1.12 requires ext-intl * -> the requested PHP extension intl is missing from your system.
    - cakephp/cakephp 3.1.11 requires ext-intl * -> the requested PHP extension intl is missing from your system.
    - cakephp/cakephp 3.1.10 requires ext-intl * -> the requested PHP extension intl is missing from your system.
    - cakephp/cakephp 3.1.1 requires ext-intl * -> the requested PHP extension intl is missing from your system.
    - cakephp/cakephp 3.1.0 requires ext-intl * -> the requested PHP extension intl is missing from your system.
    - Installation request for cakephp/cakephp ~3.1 -> satisfiable by cakephp/cakephp[3.1.0, 3.1.1, 3.1.10, 3.1.11, 3.1.12, 3.1.13, 3.1.2, 3.1.3, 3.1.4, 3.1.5, 3.1.6, 3.1.7, 3.1.8, 3.1.9, 3.2.0, 3.2.1, 3.2.2, 3.2.3, 3.2.4, 3.2.5, 3.2.6].

  To enable extensions, verify that they are enabled in those .ini files:
    - /etc/php.ini
    - /etc/php.d/curl.ini
    - /etc/php.d/fileinfo.ini
    - /etc/php.d/gd.ini
    - /etc/php.d/json.ini
    - /etc/php.d/mbstring.ini
    - /etc/php.d/mcrypt.ini
    - /etc/php.d/mysql.ini
    - /etc/php.d/mysqli.ini
    - /etc/php.d/pdo.ini
    - /etc/php.d/pdo_mysql.ini
    - /etc/php.d/pdo_sqlite.ini
    - /etc/php.d/phar.ini
    - /etc/php.d/sqlite3.ini
    - /etc/php.d/zip.ini
  You can also run `php --ini` inside terminal to see which files are used by PHP in CLI mode.

どうやら以下の2点に怒っている様子。
・「PHPのバージョンが古い」
・「PHPのextension intlが入っていない」

CakePHP3.1を使いたい場合は「extension intl」の問題だけを解決すればよさそうです。
ということで「intl」なるもののインストールを試みます。

その2「intlのインストール」

yumから「php-intl」をインストールします。

# yum list | grep intl
php-intl.x86_64                            5.3.3-46.el6_7.1             updates

#yum install php-intl
Error: Package: php-intl-5.3.3-46.el6_7.1.x86_64 (updates)
           Requires: php-common(x86-64) = 5.3.3-46.el6_7.1
           Installed: php-common-5.4.31-1.el6.remi.x86_64 (@remi)
               php-common(x86-64) = 5.4.31-1.el6.remi
           Available: php-common-5.3.3-40.el6_6.x86_64 (base)
               php-common(x86-64) = 5.3.3-40.el6_6
           Available: php-common-5.3.3-46.el6_6.x86_64 (updates)
               php-common(x86-64) = 5.3.3-46.el6_6
           Available: php-common-5.3.3-46.el6_7.1.x86_64 (updates)
               php-common(x86-64) = 5.3.3-46.el6_7.1
 You could try using --skip-broken to work around the problem
 You could try running: rpm -Va --nofiles --nodigest

また何かエラーが山ほど出てきました、もう嫌・・。
レポジトリを「remi」に指定してダウンロードすると良いと誰かから聞いたので試してみます。

# yum --enablerepo=remi install php-intl

Installed:
  php-intl.x86_64 0:5.4.45-7.el6.remi

Dependency Installed:
  libicu-last.x86_64 0:50.1.2-11.el6.remi

Dependency Updated:
  php.x86_64 0:5.4.45-7.el6.remi                        php-cli.x86_64 0:5.4.45-7.el6.remi
  php-common.x86_64 0:5.4.45-7.el6.remi                 php-devel.x86_64 0:5.4.45-7.el6.remi
  php-gd.x86_64 0:5.4.45-7.el6.remi                     php-mbstring.x86_64 0:5.4.45-7.el6.remi
  php-mcrypt.x86_64 0:5.4.45-7.el6.remi                 php-mysql.x86_64 0:5.4.45-7.el6.remi
  php-pdo.x86_64 0:5.4.45-7.el6.remi

Complete!

今度はインストール成功した、よかった・・。
「intl」もちゃんと有効になっているようです。

#php -m | grep intl
intl
その3「再度CakePHP3のインストール」

さっき生成されたCakePHPのディレクトリを削除して、もう一度ComposerでCakePHPをインストールし直します。

#composer create-project --prefer-dist cakephp/app app_hogegege
Installing cakephp/app (3.1.2)
  - Installing cakephp/app (3.1.2)
    Loading from cache

Created project in app_hogegege
Loading composer repositories with package information
Updating dependencies (including require-dev)
  - Installing aura/installer-default (1.0.0)
    Loading from cache

  - Installing cakephp/plugin-installer (0.0.12)
    Loading from cache

  - Installing psr/log (1.0.0)
    Loading from cache

  - Installing nesbot/carbon (1.13.0)
    Loading from cache

  - Installing mobiledetect/mobiledetectlib (2.8.20)
    Loading from cache

  - Installing aura/intl (1.1.1)
    Loading from cache

  - Installing ircmaxell/password-compat (v1.0.4)
    Loading from cache

  - Installing cakephp/cakephp (3.1.13)
    Loading from cache

  - Installing symfony/yaml (v2.8.4)
    Loading from cache

  - Installing symfony/filesystem (v2.8.4)
    Loading from cache

  - Installing symfony/config (v2.8.4)
    Loading from cache

  - Installing symfony/polyfill-mbstring (v1.1.1)
    Loading from cache

  - Installing symfony/console (v2.8.4)
    Loading from cache

  - Installing robmorgan/phinx (v0.5.1)
    Loading from cache

  - Installing cakephp/migrations (1.5.7)
    Loading from cache

  - Installing jakub-onderka/php-console-color (0.1)
    Loading from cache

  - Installing jakub-onderka/php-console-highlighter (v0.3.2)
    Loading from cache

  - Installing dnoegel/php-xdg-base-dir (0.1)
    Loading from cache

  - Installing nikic/php-parser (v2.0.1)
    Loading from cache

  - Installing symfony/var-dumper (v2.8.4)
    Loading from cache

  - Installing psy/psysh (v0.7.2)
    Loading from cache

  - Installing jdorn/sql-formatter (v1.2.17)
    Loading from cache

  - Installing cakephp/debug_kit (3.2.7)
    Loading from cache

  - Installing cakephp/bake (1.1.4)
    Loading from cache

cakephp/app suggests installing phpunit/phpunit (Allows automated tests to be run without system-wide install.)
cakephp/app suggests installing cakephp/cakephp-codesniffer (Allows to check the code against the coding standards used in CakePHP.)
symfony/console suggests installing symfony/event-dispatcher ()
symfony/console suggests installing symfony/process ()
symfony/var-dumper suggests installing ext-symfony_debug ()
psy/psysh suggests installing ext-posix (If you have PCNTL, you'll want the POSIX extension as well.)
psy/psysh suggests installing ext-pdo-sqlite (The doc command requires SQLite to work.)
cakephp/debug_kit suggests installing ext-sqlite (DebugKit needs to store panel data in a database. SQLite is simple and easy to use.)
Writing lock file
Generating autoload files
> Cake\Composer\Installer\PluginInstaller::postAutoloadDump

なんとかインストールできたみたいですが、なんだかいっぱい「suggest」されています。
ほんとにこれで大丈夫なのでしょうか・・?

その4「ドキュメント・ルートの設定」

CakePHP3にはビルトインサーバを使った「開発用サーバ」を立てる方法と、「本番用サーバ」を立てる方法の2種類があります。

私はいきなり「本番用サーバ」を立てたかったので、ドキュメント・ルートの設定をします。

CentOSの「virtual.conf」の設定をいじってCakePHPの「webroot」のディレクトリをドキュメント・ルートとして設定します。

<VirtualHost *:80>
    ServerName /var/www/html/hogege
    DocumentRoot /var/www/html/hogege/webroot
</VirtualHost>

そして、ためしにブラウザからCakePHPのwebページにアクセスしてみると、

「Could not load configuration file: /var/www/html/hogege/config/app.php

とエラーが出てアクセスができません。やっぱり「suggest」に書いてあるものをちゃんと入れなくてはいけないみたいですね。

はぁ、めんどくさ・・。

その5「phpunitcakephp-codesniffeをインストール」

composer.jsonファイル内の「suggest」項目にある「phpunit/phpunit」と「cakephp/cakephp-codesniffe」の記述を「require」の項目に移してアップデートを試みます。

    "require": {
        "php": ">=5.4.16",
        "cakephp/cakephp": "~3.1",
        "mobiledetect/mobiledetectlib": "2.*",
        "cakephp/migrations": "~1.0",
        "cakephp/plugin-installer": "*",
        "phpunit/phpunit": "*",
        "cakephp/cakephp-codesniffer": "*"
    },

    "suggest": {
    },
#composer update

    - phpunit/phpunit 5.0.10 requires php >=5.6 -> your PHP version (5.4.45) does not satisfy that 

requirement.
    - phpunit/phpunit 5.0.1 requires php >=5.6 -> your PHP version (5.4.45) does not satisfy that 

requirement.
    - phpunit/phpunit 5.0.0 requires php >=5.6 -> your PHP version (5.4.45) does not satisfy that 

requirement.
    - phpunit/phpunit 4.8.9 requires ext-dom * -> the requested PHP extension dom is missing from your 

system.
    - phpunit/phpunit 4.8.8 requires ext-dom * -> the requested PHP extension dom is missing from your 

system.
    - phpunit/phpunit 4.8.7 requires ext-dom * -> the requested PHP extension dom is missing from your 

system.
    - Installation request for phpunit/phpunit * -> satisfiable by phpunit/phpunit[3.7.0, 3.7.1, 3.7.10, 

3.7.11, 3.7.12, 3.7.13, 3.7.14, 3.7.15, 3.7.16, 3.7.17, 3.7.18, 3.7.19, 3.7.2, 3.7.20, 3.7.21, 3.7.22, 

3.7.23, 3.7.24, 3.7.25, 3.7.26, 3.7.27, 3.7.28, 3.7.29, 3.7.3, 3.7.30, 3.7.31, 3.7.32, 3.7.33, 3.7.34, 

3.7.35, 3.7.36, 3.7.37, 3.7.38, 3.7.4, 3.7.5, 3.7.6, 3.7.7, 3.7.8, 3.7.9, 4.0.0, 4.0.1, 4.0.10, 4.0.11, 

4.0.12, 4.0.13, 4.0.14, 4.0.15, 4.0.16, 4.0.17, 4.0.18, 4.0.19, 4.0.2, 4.0.20, 4.0.3, 4.0.4, 4.0.5, 4.0.6, 

4.0.7, 4.0.8, 4.0.9, 4.1.0, 4.1.1, 4.1.2, 4.1.3, 4.1.4, 4.1.5, 4.1.6, 4.2.0, 4.2.1, 4.2.2, 4.2.3, 4.2.4, 

4.2.5, 4.2.6, 4.3.0, 4.3.1, 4.3.2, 4.3.3, 4.3.4, 4.3.5, 4.4.0, 4.4.1, 4.4.2, 4.4.3, 4.4.4, 4.4.5, 4.5.0, 

4.5.1, 4.6.0, 4.6.1, 4.6.10, 4.6.2, 4.6.3, 4.6.4, 4.6.5, 4.6.6, 4.6.7, 4.6.8, 4.6.9, 4.7.0, 4.7.1, 4.7.2, 

4.7.3, 4.7.4, 4.7.5, 4.7.6, 4.7.7, 4.8.0, 4.8.1, 4.8.10, 4.8.11, 4.8.12, 4.8.13, 4.8.14, 4.8.15, 4.8.16, 

4.8.17, 4.8.18, 4.8.19, 4.8.2, 4.8.20, 4.8.21, 4.8.22, 4.8.23, 4.8.24, 4.8.3, 4.8.4, 4.8.5, 4.8.6, 4.8.7, 

4.8.8, 4.8.9, 5.0.0, 5.0.1, 5.0.10, 5.0.2, 5.0.3, 5.0.4, 5.0.5, 5.0.6, 5.0.7, 5.0.8, 5.0.9, 5.1.0, 5.1.1, 

5.1.2, 5.1.3, 5.1.4, 5.1.5, 5.1.6, 5.1.7, 5.2.0, 5.2.1, 5.2.10, 5.2.11, 5.2.12, 5.2.2, 5.2.3, 5.2.4, 5.2.5, 

5.2.6, 5.2.7, 5.2.8, 5.2.9, 5.3.0, 5.3.1].

  To enable extensions, verify that they are enabled in those .ini files:
    - /etc/php.ini
    - /etc/php.d/curl.ini
    - /etc/php.d/fileinfo.ini
    - /etc/php.d/gd.ini
    - /etc/php.d/gmp.ini
    - /etc/php.d/intl.ini
    - /etc/php.d/json.ini
    - /etc/php.d/mbstring.ini
    - /etc/php.d/mcrypt.ini
    - /etc/php.d/mysql.ini
    - /etc/php.d/mysqli.ini
    - /etc/php.d/pdo.ini
    - /etc/php.d/pdo_mysql.ini
    - /etc/php.d/pdo_sqlite.ini
    - /etc/php.d/phar.ini
    - /etc/php.d/sqlite3.ini
    - /etc/php.d/zip.ini

まーたいっぱいエラーが出てきました。「ext-dom」というのをインストールしろとお怒りのようです。
なんでしょうかこの気持ち、率直に言ってもう死にたいですね。

その6「PHP ext-domのインストール」

「ext-dom」というのをインストールすればいいんですね、それで許してくれるのですね。
いいでしょう、インストールしましょう。

# yum install --enablerepo=remi php-dom

Installed:
  php-xml.x86_64 0:5.4.45-7.el6.remi

Dependency Installed:
  libxslt.x86_64 0:1.1.26-2.el6_3.1

Complete!

はい、インストールしました!

その7「再度composer update」

さてComposerで再度アップデートを試みます。

# composer update
Loading composer repositories with package information
Updating dependencies (including require-dev)
  - Installing sebastian/version (1.0.6)
    Downloading: 100%

  - Installing sebastian/global-state (1.1.1)
    Downloading: 100%

  - Installing sebastian/recursion-context (1.0.2)
    Downloading: 100%

  - Installing sebastian/exporter (1.2.1)
    Downloading: 100%

  - Installing sebastian/environment (1.3.5)
    Downloading: 100%

  - Installing sebastian/diff (1.4.1)
    Downloading: 100%

  - Installing sebastian/comparator (1.2.0)
    Downloading: 100%

  - Installing doctrine/instantiator (1.0.5)
    Downloading: 100%

  - Installing phpdocumentor/reflection-docblock (2.0.4)
    Downloading: 100%

  - Installing phpspec/prophecy (v1.6.0)
    Downloading: 100%

  - Installing phpunit/php-text-template (1.2.1)
    Downloading: 100%

  - Installing phpunit/phpunit-mock-objects (2.3.8)
    Downloading: 100%

  - Installing phpunit/php-timer (1.0.7)
    Downloading: 100%

  - Installing phpunit/php-token-stream (1.4.8)
    Downloading: 100%

  - Installing phpunit/php-file-iterator (1.4.1)
    Downloading: 100%

  - Installing phpunit/php-code-coverage (2.2.4)
    Downloading: 100%

  - Installing phpunit/phpunit (4.8.24)
    Downloading: 100%

  - Installing squizlabs/php_codesniffer (2.6.0)
    Downloading: 100%

  - Installing cakephp/cakephp-codesniffer (2.0.6)
    Downloading: 100%

sebastian/global-state suggests installing ext-uopz (*)
phpdocumentor/reflection-docblock suggests installing dflydev/markdown (~1.0)
phpdocumentor/reflection-docblock suggests installing erusev/parsedown (~1.0)
phpunit/phpunit-mock-objects suggests installing ext-soap (*)
phpunit/php-code-coverage suggests installing ext-xdebug (>=2.2.1)
phpunit/phpunit suggests installing phpunit/php-invoker (~1.1)
Writing lock file
Generating autoload files
> Cake\Composer\Installer\PluginInstaller::postAutoloadDump

まだ「suggest」があるようですね・・。

ためしにもう一度ブラウザでページを確認してみてもやはり
「Could not load configuration file: /var/www/html/hogege/config/app.php
が表示されます。

お母さん助けて・・。

その8「composer install」

ここで賢者モードになった私は考えました、そもそも「app.php」とはなんなんでしょうか。

他の人のブログでインストール時のログを見ると、どうもインストール最初の段階で生成されるファイルのようです。

そこでおもむろに「composer install」を実行してみます。

#composer install
Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Nothing to install or update
Generating autoload files
> Cake\Composer\Installer\PluginInstaller::postAutoloadDump
> App\Console\Installer::postInstall
Created `config/app.php` file
Set Folder Permissions ? (Default to Y) [Y,n]? Y
Permissions set on /var/www/html/hogege/tmp/cache
Permissions set on /var/www/html/hogege/tmp/cache/models
Permissions set on /var/www/html/hogege/tmp/cache/persistent
Permissions set on /var/www/html/hogege/tmp/cache/views
Permissions set on /var/www/html/hogege/tmp/sessions
Permissions set on /var/www/html/hogege/tmp/tests
Permissions set on /var/www/html/hogege/tmp
Permissions set on /var/www/html/hogege/logs
Updated Security.salt value in config/app.php

そうするとどうでしょう!「app.php」が生成されたではありませんか!

webページにアクセスするとちゃんとおなじみのCakePHPのロゴも表示されています!

そうです「composer update」だけではなくて「composer install」も叩かないといけなかったんですね。そういうことだったんですね・・。

こうして艱難辛苦を乗り越えて無事にインストールできたCakePHP3ですが、しかしたかがインストールするだけでこんなに時間を費やしてしまうとは、一体何事でしょうか・・。

こんな具合で開発の段になったら一体どれほど時間を喰らってくれるのか、この先不安でしょうがありません・・。


※P.S.
インストール後「Hello World」を表示させるとこまでの解説は以下をご参照ください!
moblog.absgexp.net