Compilers, runtimes en bouwomgevingen op uw NAS
QTS heeft geen compiler. Bucket & Code Server IDE downloadt taalruntimes, cross-compilers en complete Linux-systemen om in te bouwen, controleert elke download met zijn sha256 en bewaart ze in de gegevensmap. Deze handleiding installeert niets nieuws: ze gebruikt de gereedschappen van een bouwomgeving en de Go-runtime, compileert een klein programma en controleert of het op de NAS draait.
- Catalogusruntimes, compilers, systemen
- Runtimeeval "$(bvs use …)"
- Omgevingeen Linux-systeem om in te bouwen
- Bouwenbvs env run
- Controlerende ELF-inspecteur
De afbeeldingen komen uit het paneel van Bucket & Code Server IDE op een test-NAS met de gegevensmap /share/CACHEDEV1_DATA/BucketVS.
01Wat de pagina Toolchains biedt
De pagina Toolchains toont een catalogus met tabbladen:
| Type | Beschrijving | Voorbeelden |
|---|---|---|
| Rootbestandssysteem | een Linux-systeem om in een omgeving uit te pakken | Debian 12 en 13, Ubuntu 22.04 en 24.04, Alpine 3.22 |
| Cross-toolchain | een compiler die voor een andere processor bouwt | Bootlin-toolchains voor aarch64, x86-64 en armv7, met glibc of musl |
| Runtime | een taal of bouwgereedschap | Python, Go, Node.js, Zig, Rust, CMake, Ninja, Java |
| QNAP | QNAPs eigen bouwpakket | QDK 2.5.0, voor bvs qbuild en Export as QPKG |
- Install vereist de beheerdersrol. De taak downloadt het archief naar
toolchains/cache/in de gegevensmap, vergelijkt zijn sha256 met de catalogus (een afwijking verwijdert het bestand) en pakt een runtime of cross-toolchain uit naartoolchains/<kind>/<id>. De voortgang staat op de pagina Jobs; een onderbroken download wordt hervat wanneer de installatie opnieuw start. - Vermeldingen voor een andere processor zijn verborgen. De Bootlin-cross-toolchains draaien op x86_64, dus een ARM-NAS biedt er geen aan.
- De catalogus wordt met het pakket meegeleverd. Een ondertekende catalogus van pub.qnaputilities.com kan vermeldingen toevoegen zonder nieuw pakket; Refresh the catalog haalt die meteen op en een ingebouwde crontaak doet dat dagelijks.
02Een runtime in uw shell
bvs use bij een geïnstalleerde vermelding toont de regels die hem bruikbaar maken in een shell, zoals de terminal van de editor of een crontaak.
# in de terminal van de editor (Open the editor op de pagina Editor settings)
eval "$(bvs use go-1.27-x86_64)"
go version
go build -o hello-go hello.go
./hello-go
De Go-runtime stelt CGO_ENABLED=0 in, waardoor zijn programma's statisch zijn en op elke NAS met dezelfde processor draaien. Een cross-toolchain werkt hetzelfde: eval "$(bvs use bootlin-aarch64-glibc-stable)" geeft een compiler voor ARM-apparaten van 64 bit.
03Bouwomgevingen
Een omgeving is een Linux-systeem dat is uitgepakt in envs/<name> in de gegevensmap. U kunt er pakketten installeren (apt install build-essential op Debian of Ubuntu), en wat u installeert blijft bewaard. De projectenmap uit de gegevensmap is erin beschikbaar als /projects.
- De snelste manier om alles voor het bouwen te krijgen is een voorinstelling uit Examples op de pagina Apps (beheerder): de Ubuntu 24.04 builder installeert het bouwgereedschap met apt-get voordat de omgeving verschijnt. Zijn glibc is 2.39, de laagste versie op alle NAS-systemen waarop het pakket draait, dus zijn gebouwde programma's draaien op al die systemen.

- New environment (beheerder) pakt een kaal rootbestandssysteem uit onder een zelfgekozen naam en downloadt het eerst als het niet geïnstalleerd is.

- Elke omgeving heeft Open a shell, dat de editor opent met een terminal die al in die omgeving draait, plus Clone, Export en Delete.

04Een programma in een omgeving compileren
Vanuit elke terminal op de NAS opent bvs env shell <name> een shell in een omgeving en voert bvs env run <name> -- <command> daar één opdracht uit. Beide starten in de map vanwaar u ze uitvoert: een submap van de projectenmap is binnen de omgeving dezelfde submap onder /projects.
# hello.cpp in een map onder projects/, in de terminal van de editor
bvs env run ubuntu2404-builder -- g++ -O2 -o hello hello.cpp
./hello
De compiler en zijn bibliotheken komen uit de omgeving; het programma draait op de NAS zelf. De volgende stap controleert of het daar vindt wat het nodig heeft.
05Controleren met de ELF-inspecteur
Het tabblad ELF inspector op de pagina Toolchains (ontwikkelaarsrol) leest een programma of bibliotheek en de eigen loadergegevens van het doel, zonder iets uit te voeren. Het geeft aan of deze NAS of een omgeving aan alle vereisten voldoet. Kies waar het bestand staat (een app-build, de projectenmap, een omgeving of voor een beheerder elk bestand op de NAS), het doel en druk op Inspect.
What it needs tekent het programma, de bibliotheken die het laadt en de locatie van elke bibliotheek, met de gevraagde versies. Hier heeft het C++-programma libstdc++.so.6 en libc.so.6 nodig, en deze NAS heeft beide met de vereiste versies.
- Een ontbrekende bibliotheek, een versie die een bibliotheek niet biedt of een glibc nieuwer dan die van het doel levert een bevinding met uitleg op. Kies een omgeving als doel om hetzelfde programma te bekijken zoals het daar zou draaien.
- Op de NAS toont
bvs ldd <file>hetzelfde, enbvs ldd --env <name> <file>doet dat voor een omgeving. - Voor programma's die u verspreidt voert App Builder dit uit voor elk bestand van elke build; het tabblad Dependencies biedt de oplossingen.