さじは投げられた

プログラマーの戯れ言

ImageMagick が Illegal instruction

ローカルのdockerでは動いていたのに、AWSのコンテナに持っていくと ImageMagick が動かない。

IMEI をDockerfile内でビルドするイメージなのだけど…半年前は問題無かったのになぁ。

調べるとローカルでビルドしているため、CPUに合わせた最適化 -march=native が問題を起こしている様子。

imei.sh/.dockerenv を見て、 -mtune=generic" か、 -march=native"切り分けを行っているようなんだけど、docker buildだとこの判定が動かないのかな。

RUN touch /.dockerenv を試しに入れてみたらAWSでも動くビルドになった。

とはいえ、この解法は少しもやもやとするので BUILD_CFLAGSBUILD_CXXFLAGS を ARG で設定する方法にすることに。
こんな感じ。

ARG BUILD_CFLAGS="-O3 -mtune=generic"
ARG BUILD_CXXFLAGS="-O3 -mtune=generic"

RUN wget 'https://dist.1-2.dev/imei.sh' -qO ./imei.sh && bash ./imei.sh --im-version 7.1.1-18

もっといい方法があればいいけど。