Crystal und Alpine auf dem Raspberry Pi

Zwei interessante Technologien werden zusammengeführt:

  • Alpine Linux - eine kleinformatige und sicherheitsorientierte Linux-Distribution
  • Crystal - eine kompilierte Sprache mit einer schönen Syntax (ähnlich wie Ruby)
  • auf dem Raspberry Pi (armhf / ARMv6, was auch den Pi Zero W unterstützen würde)

ist derzeit nicht möglich, Stand: 21.12.2018.

Es gibt keine (zumindest keine einfache) Möglichkeit, Crystal-Anwendungen für den Raspberry Pi und Alpine Linux zu kompilieren, z. B. von x86-Plattformen, da das erforderliche Ziel arm-linux-musleabihf wird noch nicht unterstützt.

Sonstige Hintergrundinformationen

Leider ist es nicht möglich, Crystal auf Alpine/ARM/Raspberry mit gcc oder ähnlichem zu kompilieren, denn "um Crystal zu kompilieren, braucht man Crystal" - die Kompilierung wird fehlschlagen:

pitest:/usr/local/crystal/crystal# make
Mit /usr/bin/llvm-config [version=5.0.1]
g++ -c -o src/llvm/ext/llvm_ext.o src/llvm/ext/llvm_ext.cc -I/usr/lib/llvm5/include -Os -founused-parameter
-Write-strings -Wcast-qual -Wno-missing-field-initializers -pedantic -Wno-fdata-sections -Os
-fomit-frame-pointer -Os -DNDEBUG -fno-exceptions -DLLVM_BUILD_GLOBAL_ISD__STDC_LIMIT_MACROS
cc -fPIC -c -o src/ext/sigfault.o src/ext/sigfault.c
ar -rcs src/ext/libcrystal.a src/ext/sigfault.o
CRYSTAL_CONFIG_PATH="/usr/local/crystal/crystal/src" CRYSTAL_CONFIG_BUILD_COMMIT="74c65ce6b" lib

Sie müssen eine ausführbare Datei von crystal in Ihrem Pfad haben!

make: *** [Makefile:123: .build/crystal] Fehler 1

Die Idee ist, dass Sie crystal auf einer anderen Architektur crosscompilieren und es dann für die native Kompilierung verwenden können.

Alpine Linux verwendet musl, eine alternative libc.

Um den Namen des Targets (LLVM target triple) herauszufinden, können Sie llvm-config auf dem Zielsystem wie folgt ausführen:

llvm-config -host-target

Um diesen Befehl auf Alpine ausführen zu können, müssen Sie zwei Pakete installieren:

apk llvm hinzufügen

apk hinzufügen llvm-dev

Wenn Sie ein Ziel ausprobieren, das Crystal noch nicht für die Crosskompilierung unterstützt, erhalten Sie diese Fehlermeldung:

in /usr/share/crystal/src/callstack.cr:3: while requiring "c/dlfcn": can't find file 'c/dlfcn'

Diese Bibliotheken befinden sich hier:

/usr/share/crystal/src/lib_c

Crystal wird auf Alpine, auf den Plattformen aarch64 (ARM 64bit) und x86_64 unterstützt. (und x86 über portalier.com)

Im Allgemeinen funktioniert die Crosskompilierung mit Crystal wie folgt:

crystal build -release -cross-compile -target "aarch64-linux-musl" src/armtest.cr

erhalten Sie eine Befehlszeile, die Sie auf dem Zielcomputer ausführen können:

cc 'armtest.o' -o 'armtest' -rdynamisch -lpcre -lgc -lpthread /usr/share/crystal/src/ext/libcrystal.a -levent -lrt -L/usr/lib -L/usr/local/lib

Siehe diese Referenzen: