amazon-linux-extras
でインストールした PHP 7.4 で WordPress 用に imagick をインストールしようとしたら無かったのでいまのところパッケージマネージャからはインストールできないっぽい。
bash-4.2# amazon-linux-extras install -y php7.4 bash-4.2# yum search imagick Loaded plugins: ovl, priorities Warning: No matches found for: imagick No matches found
ここで「epel にはあるだろ…」とか思ってやると
bash-4.2# amazon-linux-extras install -y epel bash-4.2# yum info php-pecl-imagick Loaded plugins: ovl, priorities Name : php-pecl-imagick Arch : x86_64 Version : 3.4.4 Release : 1.el7 Size : 122 k Repo : epel/x86_64 Summary : Provides a wrapper to the ImageMagick library URL : http://pecl.php.net/package/imagick License : PHP Description : imagick is a native php extension to create and modify images using the : ImageMagick API. : This extension requires ImageMagick version 6.2.4+ and PHP 5.1.3+. : : IMPORTANT: Version 2.x API is not compatible with earlier versions. bash-4.2# yum install -y php-pecl-imagick : 中略 : Error: Package: php-pecl-imagick-3.4.4-1.el7.x86_64 (epel) Requires: php(api) = 20100412-64 Installed: php-common-7.4.19-1.amzn2.x86_64 (@amzn2extra-php7.4) php(api) = 20190902-64 Available: php-common-5.4.16-43.amzn2.x86_64 (amzn2-core) php(api) = 20100412-64 Available: php-common-5.4.16-43.amzn2.0.1.x86_64 (amzn2-core) php(api) = 20100412-64 Available: php-common-5.4.16-43.amzn2.0.2.x86_64 (amzn2-core) php(api) = 20100412-64 Available: php-common-5.4.16-43.amzn2.0.3.x86_64 (amzn2-core) php(api) = 20100412-64 Available: php-common-5.4.16-43.amzn2.0.4.x86_64 (amzn2-core) php(api) = 20100412-64 Available: php-common-5.4.16-45.amzn2.0.5.x86_64 (amzn2-core) php(api) = 20100412-64 Available: php-common-5.4.16-45.amzn2.0.6.x86_64 (amzn2-core) php(api) = 20100412-64 Available: php-common-5.4.16-46.amzn2.0.2.x86_64 (amzn2-core) php(api) = 20100412-64 Available: php-common-7.4.1-1.amzn2.x86_64 (amzn2extra-php7.4) php(api) = 20190902-64 Available: php-common-7.4.3-1.amzn2.x86_64 (amzn2extra-php7.4) php(api) = 20190902-64 Available: php-common-7.4.4-1.amzn2.x86_64 (amzn2extra-php7.4) php(api) = 20190902-64 Available: php-common-7.4.5-1.amzn2.x86_64 (amzn2extra-php7.4) php(api) = 20190902-64 Available: php-common-7.4.7-1.amzn2.x86_64 (amzn2extra-php7.4) php(api) = 20190902-64 Available: php-common-7.4.9-1.amzn2.x86_64 (amzn2extra-php7.4) php(api) = 20190902-64 Available: php-common-7.4.11-1.amzn2.x86_64 (amzn2extra-php7.4) php(api) = 20190902-64 Available: php-common-7.4.14-1.amzn2.x86_64 (amzn2extra-php7.4) php(api) = 20190902-64 Available: php-common-7.4.15-1.amzn2.x86_64 (amzn2extra-php7.4) php(api) = 20190902-64 Error: Package: php-pecl-imagick-3.4.4-1.el7.x86_64 (epel) Requires: php(zend-abi) = 20100525-64 Installed: php-common-7.4.19-1.amzn2.x86_64 (@amzn2extra-php7.4) php(zend-abi) = 20190902-64 Available: php-common-5.4.16-43.amzn2.x86_64 (amzn2-core) php(zend-abi) = 20100525-64 Available: php-common-5.4.16-43.amzn2.0.1.x86_64 (amzn2-core) php(zend-abi) = 20100525-64 Available: php-common-5.4.16-43.amzn2.0.2.x86_64 (amzn2-core) php(zend-abi) = 20100525-64 Available: php-common-5.4.16-43.amzn2.0.3.x86_64 (amzn2-core) php(zend-abi) = 20100525-64 Available: php-common-5.4.16-43.amzn2.0.4.x86_64 (amzn2-core) php(zend-abi) = 20100525-64 Available: php-common-5.4.16-45.amzn2.0.5.x86_64 (amzn2-core) php(zend-abi) = 20100525-64 Available: php-common-5.4.16-45.amzn2.0.6.x86_64 (amzn2-core) php(zend-abi) = 20100525-64 Available: php-common-5.4.16-46.amzn2.0.2.x86_64 (amzn2-core) php(zend-abi) = 20100525-64 Available: php-common-7.4.1-1.amzn2.x86_64 (amzn2extra-php7.4) php(zend-abi) = 20190902-64 Available: php-common-7.4.3-1.amzn2.x86_64 (amzn2extra-php7.4) php(zend-abi) = 20190902-64 Available: php-common-7.4.4-1.amzn2.x86_64 (amzn2extra-php7.4) php(zend-abi) = 20190902-64 Available: php-common-7.4.5-1.amzn2.x86_64 (amzn2extra-php7.4) php(zend-abi) = 20190902-64 Available: php-common-7.4.7-1.amzn2.x86_64 (amzn2extra-php7.4) php(zend-abi) = 20190902-64 Available: php-common-7.4.9-1.amzn2.x86_64 (amzn2extra-php7.4) php(zend-abi) = 20190902-64 Available: php-common-7.4.11-1.amzn2.x86_64 (amzn2extra-php7.4) php(zend-abi) = 20190902-64 Available: php-common-7.4.14-1.amzn2.x86_64 (amzn2extra-php7.4) php(zend-abi) = 20190902-64 Available: php-common-7.4.15-1.amzn2.x86_64 (amzn2extra-php7.4) php(zend-abi) = 20190902-64 You could try using --skip-broken to work around the problem You could try running: rpm -Va --nofiles --nodigest
という感じで Amazon Linux の PHP 7.4 と衝突する。amzn2extra-php7.3/2/x86_64 には php-pecl-imagick
パッケージが存在するので 7.4 にもそのうち追加されるんだろうけど取り急ぎ必要なので手動でインストールしなければならない。
ImageMagick のソースコードを引っ張ってきてもできるけど面倒なので pecl にやってもらう。
imagick のコンパイルに必要なパッケージを用意する。AWS 上の Amzon Linux 2 にはインストールされているものもあるかもしれないけど Docker の amazonlinux:2
には make
なんかが無いので入れておく必要がある。
- php-pear
- php-devel
- gcc
- make
- ImageMagick-devel
bash-4.2# yum install -y php-pear php-devel gcc make ImageMagick-devel
pecl で imagick をインストール。
bash-4.2# yes '' | pecl install -f imagick : 中略 : Build complete. Don't forget to run 'make test'. running: make INSTALL_ROOT="/var/tmp/pear-build-defaultuseraWrMzq/install-imagick-3.5.0" install Installing shared extensions: /var/tmp/pear-build-defaultuseraWrMzq/install-imagick-3.5.0/usr/lib64/php/modules/ Installing header files: /var/tmp/pear-build-defaultuseraWrMzq/install-imagick-3.5.0/usr/include/php/ running: find "/var/tmp/pear-build-defaultuseraWrMzq/install-imagick-3.5.0" | xargs ls -dils 1198656 4 drwxr-xr-x 3 root root 4096 Jul 9 15:09 /var/tmp/pear-build-defaultuseraWrMzq/install-imagick-3.5.0 1198675 4 drwxr-xr-x 4 root root 4096 Jul 9 15:09 /var/tmp/pear-build-defaultuseraWrMzq/install-imagick-3.5.0/usr 1198679 4 drwxr-xr-x 3 root root 4096 Jul 9 15:09 /var/tmp/pear-build-defaultuseraWrMzq/install-imagick-3.5.0/usr/include 1198680 4 drwxr-xr-x 3 root root 4096 Jul 9 15:09 /var/tmp/pear-build-defaultuseraWrMzq/install-imagick-3.5.0/usr/include/php 1198681 4 drwxr-xr-x 3 root root 4096 Jul 9 15:09 /var/tmp/pear-build-defaultuseraWrMzq/install-imagick-3.5.0/usr/include/php/ext 1198682 4 drwxr-xr-x 2 root root 4096 Jul 9 15:09 /var/tmp/pear-build-defaultuseraWrMzq/install-imagick-3.5.0/usr/include/php/ext/imagick 1198683 4 -rw-r--r-- 1 root root 1828 Jul 9 15:09 /var/tmp/pear-build-defaultuseraWrMzq/install-imagick-3.5.0/usr/include/php/ext/imagick/php_imagick_shared.h 1198676 4 drwxr-xr-x 3 root root 4096 Jul 9 15:09 /var/tmp/pear-build-defaultuseraWrMzq/install-imagick-3.5.0/usr/lib64 1198677 4 drwxr-xr-x 3 root root 4096 Jul 9 15:09 /var/tmp/pear-build-defaultuseraWrMzq/install-imagick-3.5.0/usr/lib64/php 1198678 4 drwxr-xr-x 2 root root 4096 Jul 9 15:09 /var/tmp/pear-build-defaultuseraWrMzq/install-imagick-3.5.0/usr/lib64/php/modules 1198674 1248 -rwxr-xr-x 1 root root 1275632 Jul 9 15:09 /var/tmp/pear-build-defaultuseraWrMzq/install-imagick-3.5.0/usr/lib64/php/modules/imagick.so Build process completed successfully Installing '/usr/lib64/php/modules/imagick.so' Installing '/usr/include/php/ext/imagick/php_imagick_shared.h' install ok: channel://pecl.php.net/imagick-3.5.0 configuration option "php_ini" is not set to php.ini location You should add "extension=imagick.so" to php.ini
メッセージの通り /usr/lib64/php/modules/imagick.so
が配置されるのであとは PHP で有効にさせるためにファイルを配置する。
pecl の指示では、
You should add "extension=imagick.so" to php.ini
となっているけど私は php.ini を触らず php.d でオーバーライドする派なので /etc/php.d/
にファイルを配置する。ファイル名は拡張子が ini
であればなんでもいいけどここでは /etc/php.d/user-imagick.ini
とする。(ちなみに PHP 7.3 では /etc/php.d/40-imagick.ini
が配置される)
bash-4.2# echo "extension=imagick.so" >/etc/php.d/user-imagick.so
sudo
でやる人は
bash-4.2$ echo "extension=imagick.so" | sudo tee /etc/php.d/user-imagick.ini
とか
bash-4.2$ sudo sh -c 'echo "extension=imagick.so" >/etc/php.d/user-imagick.ini'
のようにやればいいよ。(sudo 定期)
php -m
や php -i
でチェックして imagick が出力されれば OK。
bash-4.2# php -m | grep imagick imagick
削除する場合は pecl でアンインストールして INI ファイルを削除。
bash-4.2# pecl uninstall imagick bash-4.2# rm /etc/php.d/user-imagick.ini
gd でなんとかならないんですかね。