結論だけ知りたい
$ sudo yum install php{$ver}-mbstring.x86_64
$ver
はインストールしたPHPのバージョンに合わせる。
PHPバージョン7.2系をインストールしている場合は
$ sudo yum install php72-mbstring.x86_64
とすればOK。心配な人はPHPのバージョンを確認しましょう。
前提
Amazon Linuxの公式ガイドに沿ってLAMP環境を構築。
基本は記事に忠実に。ただ途中、phpのバージョンを70→72に指定した。
バージョン情報
Laravel : 6.9
PHP : 7.2.24
AWS : EC2 - AmazonLinux
▼上記の記事に書かれているコマンド▼
[ec2-user ~]$ sudo yum install -y httpd24 php70 mysql56-server php70-mysqlnd
▼実際に打ち込んだコマンド▼
[ec2-user ~]$ sudo yum install -y httpd24 php72 mysql56-server php72-mysqlnd
起きたこと
ローカルのLaravelを本番でgit経由でpullし、 composer install
しようとしたタイミングでエラー。
エラー内容
[ec2-user@ip-XXX src]$ composer install
Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Your requirements could not be resolved to an installable set of packages.
Problem 1
- Installation request for erusev/parsedown 1.7.3 -> satisfiable by erusev/parsedown[1.7.3].
- erusev/parsedown 1.7.3 requires ext-mbstring * -> the requested PHP extension mbstring is missing from your system.
Problem 2
- Installation request for laravel/framework v6.9.0 -> satisfiable by laravel/framework[v6.9.0].
- laravel/framework v6.9.0 requires ext-mbstring * -> the requested PHP extension mbstring is missing from your system.
Problem 3
- Installation request for facade/ignition 1.13.0 -> satisfiable by facade/ignition[1.13.0].
- facade/ignition 1.13.0 requires ext-mbstring * -> the requested PHP extension mbstring is missing from your system.
Problem 4
- Installation request for phpunit/phpunit 8.5.1 -> satisfiable by phpunit/phpunit[8.5.1].
- phpunit/phpunit 8.5.1 requires ext-mbstring * -> the requested PHP extension mbstring is missing from your system.
Problem 5
- Installation request for scrivo/highlight.php v9.17.1.0 -> satisfiable by scrivo/highlight.php[v9.17.1.0].
- scrivo/highlight.php v9.17.1.0 requires ext-mbstring * -> the requested PHP extension mbstring is missing from your system.
Problem 6
- laravel/framework v6.9.0 requires ext-mbstring * -> the requested PHP extension mbstring is missing from your system.
- facade/flare-client-php 1.3.1 requires illuminate/pipeline ~5.5|~5.6|~5.7|~5.8|^6.0 -> satisfiable by laravel/framework[v6.9.0].
- Installation request for facade/flare-client-php 1.3.1 -> satisfiable by facade/flare-client-php[1.3.1].
何やら長々とエラーが出ているが、全部のエラーで php-extensionの mbstring
が無いということなのでそれをインストールすれば良さそう。
調べてみると yum install --enablerepo=remi-php72 php-mbstring
でインストールできるとのこと。
しかしコマンドを打ち込んだらまた怒られる。
[ec2-user@ip-XXX src]$ sudo yum install --enablerepo=remi-php72 php-mbstring
読み込んだプラグイン:priorities, update-motd, upgrade-helper
Error getting repository data for remi-php72, repository not found
リポジトリが見つからないということなのでリポジトリのコマンドを外す。
[ec2-user@ip-XXX src]$ sudo yum install php-mbstring
読み込んだプラグイン:priorities, update-motd, upgrade-helper
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ php-mbstring.x86_64 0:5.3.29-1.8.amzn1 を インストール
--> 依存性の処理をしています: php-common(x86-64) = 5.3.29-1.8.amzn1 のパッケージ: php-mbstring-5.3.29-1.8.amzn1.x86_64
--> トランザクションの確認を実行しています。
---> パッケージ php-common.x86_64 0:5.3.29-1.8.amzn1 を インストール
--> 衝突を処理しています: php72-common-7.2.24-1.18.amzn1.x86_64 は php-common < 5.5.22-1.98 と衝突しています
--> 依存性解決を終了しました。
エラー: php72-common conflicts with php-common-5.3.29-1.8.amzn1.x86_64
問題を回避するために --skip-broken を用いることができます。
これらを試行できます: rpm -Va --nofiles --nodigest
バージョンがコンフリクトしたらしい。どうやらインストールしているパッケージ自体がおかしい気がする。
よくよく調べると、AmazonLinuxはデフォルトで自前のリポジトリを最優先で探すことがわかった。
これを回避する方法は
- 対応するパッケージをAmazonLinux公式のリポジトリから落とす。
- リポジトリ優先度の設定をする。
の2つと考えられる。
今回は mbstring
がインストールできれば良いので1の方法で行くことにした。
2の方法についてはこちらの記事がわかりやすい。
Amazon LinuxでYUMを使う時に気をつけるポイント | Developers.IO
対応パッケージを探す
Amazon公式のリポジトリは
php72-cli.x86_64
のように、バージョンとパッケージ名を同時に指定する方式になっている。
今回は72に対応するパッケージが欲しいのでgrepを使って探す
[ec2-user@ip-XXX src]$ yum list | grep php72
php72.x86_64 7.2.24-1.18.amzn1 @amzn-updates
php72-cli.x86_64 7.2.24-1.18.amzn1 @amzn-updates
php72-common.x86_64 7.2.24-1.18.amzn1 @amzn-updates
php72-json.x86_64 7.2.24-1.18.amzn1 @amzn-updates
php72-mbstring.x86_64 7.2.24-1.18.amzn1 @amzn-updates
php72-mysqlnd.x86_64 7.2.24-1.18.amzn1 @amzn-updates
...
mbstringも発見したので、これをインストールしてみる。
[ec2-user@ip-XXX src]$ sudo yum install php72-mbstring.x86_64
読み込んだプラグイン:priorities, update-motd, upgrade-helper
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ php72-mbstring.x86_64 0:7.2.24-1.18.amzn1 を インストール
--> 依存性解決を終了しました。
依存性を解決しました
=================================================================================================================
Package アーキテクチャー バージョン リポジトリー 容量
=================================================================================================================
インストール中:
php72-mbstring x86_64 7.2.24-1.18.amzn1 amzn-updates 1.4 M
トランザクションの要約
=================================================================================================================
インストール 1 パッケージ
総ダウンロード容量: 1.4 M
インストール容量: 3.2 M
Is this ok [y/d/N]: y
Downloading packages:
php72-mbstring-7.2.24-1.18.amzn1.x86_64.rpm | 1.4 MB 00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
インストール中 : php72-mbstring-7.2.24-1.18.amzn1.x86_64 1/1
検証中 : php72-mbstring-7.2.24-1.18.amzn1.x86_64 1/1
インストール:
php72-mbstring.x86_64 0:7.2.24-1.18.amzn1
完了しました!
無事インストールできたので、改めて composer install
してみる
[ec2-user@ip-XXX src]$ composer install
Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Package operations: 85 installs, 0 updates, 0 removals
...
Package manifest generated successfully.
無事通った。