Compiler, Laufzeit- und Buildumgebungen auf Ihrem NAS
QTS enthält keinen Compiler. Bucket & Code Server IDE lädt Sprachlaufzeiten, Cross-Compiler und ganze Linux-Systeme zum Bauen herunter, prüft jeden Download anhand seiner sha256 und bewahrt sie im Datenordner auf. Diese Anleitung installiert nichts Neues: Sie nutzt die Werkzeuge einer Buildumgebung und der Go-Laufzeit, kompiliert ein kleines Programm und prüft, ob es auf dem NAS läuft.
- KatalogLaufzeiten, Compiler, Systeme
- Laufzeiteval "$(bvs use …)"
- Umgebungein Linux-System zum Bauen
- Bauenbvs env run
- Prüfender ELF-Inspektor
Die Bilder stammen aus dem Panel von Bucket & Code Server IDE auf einem Test-NAS mit dem Datenordner /share/CACHEDEV1_DATA/BucketVS.
01Was die Seite Toolchains bietet
Die Seite Toolchains zeigt einen Katalog mit Registerkarten:
| Typ | Beschreibung | Beispiele |
|---|---|---|
| Root-Dateisystem | ein Linux-System zum Entpacken in eine Umgebung | Debian 12 und 13, Ubuntu 22.04 und 24.04, Alpine 3.22 |
| Cross-Toolchain | ein Compiler, der für einen anderen Prozessor baut | Bootlin-Toolchains für aarch64, x86-64 und armv7 mit glibc oder musl |
| Laufzeitumgebung | eine Sprache oder ein Buildwerkzeug | Python, Go, Node.js, Zig, Rust, CMake, Ninja, Java |
| QNAP | QNAPs eigenes Buildpaket | QDK 2.5.0 für bvs qbuild und Export as QPKG |
- Install erfordert die Adminrolle. Der Auftrag lädt das Archiv nach
toolchains/cache/im Datenordner, gleicht seine sha256 mit dem Katalog ab (bei einer Abweichung wird die Datei gelöscht) und entpackt eine Laufzeit oder Cross-Toolchain nachtoolchains/<kind>/<id>. Der Fortschritt steht auf der Seite Jobs; ein unterbrochener Download wird beim erneuten Installieren fortgesetzt. - Einträge für einen anderen Prozessor sind ausgeblendet. Die Bootlin-Cross-Toolchains laufen auf x86_64, daher bietet ein ARM-NAS keine davon an.
- Der Katalog wird mit dem Paket geliefert. Ein signierter Katalog von pub.qnaputilities.com kann Einträge ohne neues Paket ergänzen; Refresh the catalog lädt ihn sofort, ein eingebauter Cronjob täglich.
02Eine Laufzeitumgebung in Ihrer Shell
bvs use bei einem installierten Eintrag zeigt die Zeilen, die ihn in einer Shell nutzbar machen, etwa im Terminal des Editors oder in einem Cronjob.
# im Terminal des Editors (Open the editor auf der Seite Editor settings)
eval "$(bvs use go-1.27-x86_64)"
go version
go build -o hello-go hello.go
./hello-go
Die Go-Laufzeit setzt CGO_ENABLED=0. Ihre Programme sind damit statisch und laufen auf jedem NAS mit demselben Prozessor. Eine Cross-Toolchain funktioniert genauso: eval "$(bvs use bootlin-aarch64-glibc-stable)" stellt einen Compiler für ARM-64-Bit-Geräte bereit.
03Buildumgebungen
Eine Umgebung ist ein Linux-System, das nach envs/<name> im Datenordner entpackt wurde. Sie können darin Pakete installieren (apt install build-essential unter Debian oder Ubuntu); das Installierte bleibt erhalten. Der Projektordner des Datenordners ist darin als /projects verfügbar.
- Am schnellsten erhalten Sie eine vollständige Buildumgebung über eine Vorlage aus Examples auf der Seite Apps (Adminrolle): Der Ubuntu 24.04 builder installiert die Buildwerkzeuge mit apt-get, bevor er erscheint. Seine glibc-Version ist 2.39, die niedrigste aller vom Paket unterstützten NAS. Seine Programme laufen daher auf all diesen NAS.

- New environment (Admin) entpackt ein einfaches Root-Dateisystem unter einem Namen Ihrer Wahl und lädt es zuerst herunter, falls es noch nicht installiert ist.

- Jede Umgebung bietet Open a shell, das den Editor mit einem Terminal bereits in dieser Umgebung öffnet, sowie Clone, Export und Delete.

04Ein Programm in einer Umgebung kompilieren
Von jedem Terminal auf dem NAS aus öffnet bvs env shell <name> eine Shell in der Umgebung, während bvs env run <name> -- <command> darin einen Befehl ausführt. Beide starten im Ordner des Aufrufs: Ein Unterordner des Projektordners ist darin derselbe Unterordner unter /projects.
# hello.cpp in einem Ordner unter projects/, im Terminal des Editors
bvs env run ubuntu2404-builder -- g++ -O2 -o hello hello.cpp
./hello
Der Compiler und seine Bibliotheken stammen aus der Umgebung; das Programm läuft auf dem NAS selbst. Ob es dort alles Nötige findet, klärt der nächste Schritt.
05Mit dem ELF-Inspektor prüfen
Die Registerkarte ELF inspector auf der Seite Toolchains (Entwicklerrolle) liest ein Programm oder eine Bibliothek und die Daten des Loaders des Zielsystems, ohne etwas auszuführen. Sie zeigt, ob dieses NAS oder eine Umgebung alle Anforderungen erfüllt. Wählen Sie den Speicherort der Datei (Build einer App, Projektordner, Umgebung oder für Admins jede Datei auf dem NAS), das Ziel und dann Inspect.
What it needs stellt das Programm, seine geladenen Bibliotheken und deren Speicherorte mit den benötigten Versionen dar. Hier braucht das C++-Programm libstdc++.so.6 und libc.so.6; dieses NAS besitzt beide mit den angeforderten Versionen.
- Eine fehlende Bibliothek, eine von ihr nicht bereitgestellte Version oder eine neuere glibc als auf dem Zielsystem erzeugt einen Befund mit Begründung. Wählen Sie eine Umgebung als Ziel, um dasselbe Programm so zu prüfen, wie es dort laufen würde.
- Auf dem NAS gibt
bvs ldd <file>dasselbe aus, für eine Umgebungbvs ldd --env <name> <file>. - Für Programme, die Sie weitergeben, führt der App Builder diese Prüfung für jede Datei jedes Builds aus. Seine Registerkarte Dependencies bietet die Korrekturen an.