Beim Versuch, eine Binärdatei mit dem Befehl auszuführen, wird folgende Fehlermeldung angezeigt:tmp/123.bin
tmp/123.bin: 1: tmp/123.bin: Syntax error: EOF in backquote substitution
Ich habe keine Ahnung, was die Fehlerursache sein könnte, da es sich um eine Skript-bezogene Fehlermeldung handelt und ich versuche, eine Binärdatei auszuführen.
Die Datei wird mit dem folgenden (nodejs) Code erstellt.
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`);
Ich habe kein Problem damit, die Datei auf meiner Entwicklungsmaschine (WSL, Ubuntu 20.04 LTS) auszuführen. Wenn ich jedoch versuche, dasselbe mit Google Cloud Run zu tun, schlägt der Befehl fehl.
Für jede Hilfe bin ich sehr dankbar! :)
Bearbeiten: Hier sind einige Informationen, die ich herausfinden konnte.
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
Antwort1
Es stellt sich heraus, dass Sie auf Cloud Run nur 64-Bit-Programme ausführen können
Ausführbare Dateien im Container-Image müssen für Linux 64-Bit kompiliert werden
Sie können jedochqemu!
Nachdem Sie apt install -y qemu-user
Ihrem Dockerfile hinzugefügt haben, können Sie eine 32-Bit-Binärdatei mit dem Befehl ausführenqemu-i386 ./file