0
0

【AWS】exec format errorはCodebuild Projectの「オペレーションシステム」に原因があった...

Posted at

概要

ビルドプロジェクトを少し編集してからCodebuildを走らせたら以下のエラー。

./script.sh: exec format error

うむ?ビルドプロジェクトでそんな重要なところいじった記憶はないのに...
と言うことでこちらのエラーの原因がわかったので紹介します。

原因:「オペレーションシステム」の選択

今回編集したのは、以下にある環境変数。

CodeBuild -> ビルドプロジェクト -> 該当プロジェクト -> 編集 -> 環境

そこで一つ思い出す。
以前は出てなかった気がしたのですが、「オペレーションシステム」に何も選ばない状態で更新をしようとすると、「オペレーションシステムを選択する必要があります」と言うエラーが出ます。

image.png

(適当に)一番上のを選んでいたのですが、ここに原因がありました。

解決策

以下のように、ビルド環境をARMアーキテクチャからx86_64アーキテクチャに変更するで解決しました。
./script.shスクリプトがARMアーキテクチャでは実行できない形式だったのです。

エラーになった設定

aws/codebuild/amazonlinux2-aarch64-standard:2.0

エラーが解消された設定

aws/codebuild/amazonlinux2-x86_64-standard:5.0-24.02.08

このスクリプトには、nginxgunicornalembicなどのコマンドやプログラムがあったのですが、ARMアーキテクチャではなくx86_64アーキテクチャで動作するように作られていた可能性が高いです。もしくは、それらに依存しているPythonインタープリタやライブラリが特定のアーキテクチャ向けだった場合もありますね。

どのアーキテクチャで動作するかを確認する場合は、それらのバイナリファイルに対してfileコマンドを実行するとわかります。

file $(which nginx)
/usr/sbin/nginx: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=29eeec75474b0468b8cfc3029beed211a830f23e, for GNU/Linux 3.2.0, stripped
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0