次のコマンドを使用してバイナリを実行しようとすると、次のエラーが発生します。tmp/123.bin
tmp/123.bin: 1: tmp/123.bin: Syntax error: EOF in backquote substitution
これはスクリプト固有のエラーメッセージであり、バイナリを実行しようとしているため、エラーの原因が何であるかわかりません。
ファイルは次のコードを使用して生成されます。
await runCommand(`nasm -f elf32 ./tmp/${id}.asm -o ./tmp/${id}.o`);
await runCommand(`ld -m elf_i386 ./tmp/${id}.o -o ./tmp/${id}.bin`);
await runCommand(`chmod +x tmp/${id}.bin`);
開発コンピュータ(wsl、Ubuntu 20.04 LTS)でファイルを実行するのに問題はありませんが、Google Cloud Runで同じタスクを実行しようとすると、コマンドは失敗します。
どんな助けでも大変感謝します! :)
編集:以下は私が見つけたいくつかの情報です。
ls -l ./tmp/123.bin
→-rwxrwxr-x 1 root root 956 Oct 30 18:24 ./tmp/123.bin
file ./tmp/123.bin
→./tmp/123.bin: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, not stripped
uname -a
→Linux localhost 4.4.0 #1 SMP Sun Jan 10 15:06:54 PST 2016 x86_64 GNU/Linux
答え1
Cloud Run では、64 ビットの実行可能ファイルしか実行できないことがわかりました。
コンテナイメージの実行可能ファイルは、Linux 64ビット用にコンパイルする必要があります。
しかし、あなたは使用することができますゲーム!
Dockerfileに追加されたら、apt install -y qemu-user
次のように32ビットバイナリを実行できます。qemu-i386 ./file