yum installで存在しないパッケージ名をエラーにする方法

ちょっと前の話で、Amazon LinuxベースのDockerfileを書いていて、 yumを使ったインストールがサイレントに失敗していることがあった。

よく見ると、

No package <パッケージ名> available.

というログが出ていて、パッケージ名を間違っていた、ということがわかった。

しかし、コードは0が返されており、 &&でつながれたDockerfileのRUNコマンドは失敗することなく後段まで処理が続いていたので、エラーに気づきづらい状態だった。

存在しないパッケージ名があってもコード0を返却する、というyumの仕様には驚いたが、いちおうこれを回避する方法がある。

--setopt=skip_missing_names_on_install=Falseというオプションを付ければ良い。

たとえば、Dockerfile中では下のように使う。

RUN yum install -y --setopt=skip_missing_names_on_install=False \
    package-foo \
    package-bar && \
    another-command

長いオプションだが、しょうもないエラーを早めに捕捉できるので、 Dockerfile内でyumを使う場合は、基本的にこのオプションは付けることにしている。