はじめに
最近はVPSの方はそうでもないですが、Cloudの方はArm CPUを搭載したコンピュートが販売されるようになりました。(AWSだとgravitonのt4gインスタンスとか、OCIだとAmpere A1 Computeとか)
一概に性能では比較できませんが、運用コストでは総じて安価になることから今後は使用の選択肢に入ることも多くなることかと思いますが、WordPressをそんなArmインスタンスで稼働させたときにプラグインでちょっと困ったことが起きました。
該当したのがWordPressの画像の最適化を行う「EWWW Image Optimizer」なのですが、プラグインをインストールすると以下のようなエラーメッセージが表示されます。
EWWW Image Optimizer は jpegtran, optipng, pngout, pngquant, gifsicle, and cwebp を使用します。 jpegtran,optipng, gifsicle がありません。 設定ページ と インストール手順 をインストールしてください。
なんじゃらほいということで調べてみました。
原因としてプラグインが既定で使用する付属バイナリがx86のもののため
- jpegtran
- optipng
- pngquant
- gifsicle
- webp
WordPressのプラグインとしてEWWW Image Optimizer には変換用のbinaryが付属はしているのですが、以下のようにx86版のものなので、Aarch64環境で稼働させるWordPressでは正常に動作しません。
# file cwebp
cwebp.bak: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.6.24, BuildID[sha1]=8667df6fad9538c0e6703c31a3278e6c9c4ac2dd, stripped
本来であればAarch64バイナリを期待しているはず。
# file /usr/bin/cwebp
/usr/bin/cwebp: ELF 64-bit LSB pie executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, for GNU/Linux 3.7.0, BuildID[sha1]=4b5e68e7c92d24df025eea84743b3191d26899ea, stripped
確認環境
$ uname -a
Linux instance-20210528-1225 5.4.0-1045-oracle #49-Ubuntu SMP Mon May 3 05:27:18 UTC 2021 aarch64 aarch64 aarch64 GNU/Linux
$ cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04.2 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.2 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal
services:
db:
image: mariadb
wordpress:
image: wordpress:latest
解決方法
対象のコンテナに入る
$ docker-compose exec wordpress bash
不足しているパッケージをインストールする。
# apt-get update
# apt-get install imagemagick optipng pngquant gifsicle webp libjpeg-progs
以下の公式ドキュメントにあるように、EWWW_IMAGE_OPTIMIZER_SKIP_BUNDLE
を wp-config.php
に設定する。
}
/** Sets up WordPress vars and included files. */
require_once ABSPATH . 'wp-settings.php';
define( 'EWWW_IMAGE_OPTIMIZER_SKIP_BUNDLE', true );
残課題
Docker Containerイメージの差し替えの際にパッケージインストール作業を再度行う必要があるので、docker-compose.yml
に buildを追加し、パッケージの追加を組み合わせる必要がある。
FROM wordpress:latest
LABEL maintainer kometchtech
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update \
&& apt-get install imagemagick optipng pngquant gifsicle webp libjpeg-progs \
&& rm -rf /var/apt/cache