Kompilatory, środowiska uruchomieniowe i środowiska budowania na NAS-ie
QTS nie ma kompilatora. Bucket & Code Server IDE pobiera środowiska uruchomieniowe języków, kompilatory skrośne i całe systemy Linux do budowania, sprawdza sumę sha256 każdego pobranego pliku i przechowuje je w katalogu danych. W tym poradniku niczego nowego nie instalujemy: korzystamy z narzędzi dostępnych w środowisku budowania i środowisku Go, kompilujemy mały program i sprawdzamy, czy działa na NAS-ie.
- Katalogśrodowiska uruchomieniowe, kompilatory, systemy
- Środowisko uruchomienioweeval "$(bvs use …)"
- Środowiskosystem Linux do budowania
- Budowaniebvs env run
- Sprawdzenieinspektor ELF
Zrzuty pochodzą z panelu Bucket & Code Server IDE na testowym NAS-ie, którego katalog danych to /share/CACHEDEV1_DATA/BucketVS.
01Co oferuje strona Toolchains
Strona Toolchains wyświetla katalog podzielony na karty:
| Typ | Co to jest | Przykłady |
|---|---|---|
| Główny system plików | system Linux do rozpakowania w środowisku | Debian 12 i 13, Ubuntu 22.04 i 24.04, Alpine 3.22 |
| Zestaw narzędzi do kompilacji skrośnej | kompilator tworzący programy dla innego procesora | zestawy Bootlin dla aarch64, x86-64 i armv7, z glibc lub musl |
| Środowisko uruchomieniowe | język lub narzędzie do budowania | Python, Go, Node.js, Zig, Rust, CMake, Ninja, Java |
| QNAP | własny zestaw narzędzi QNAP do budowania | QDK 2.5.0, dla bvs qbuild i Export as QPKG |
- Install wymaga roli administratora. Zadanie pobiera archiwum do
toolchains/cache/w katalogu danych, sprawdza jego sumę sha256 względem katalogu (niezgodność powoduje usunięcie pliku) i rozpakowuje środowisko uruchomieniowe lub zestaw do kompilacji skrośnej wtoolchains/<kind>/<id>. Postęp widać na stronie Jobs, a przerwane pobieranie jest wznawiane po ponownym rozpoczęciu instalacji. - Pozycje dla innego procesora są ukryte. Zestawy Bootlin do kompilacji skrośnej działają na x86_64, więc na NAS-ie ARM nie są dostępne.
- Katalog jest dostarczany z pakietem. Podpisany katalog z pub.qnaputilities.com może dodawać pozycje bez nowego pakietu; Refresh the catalog pobiera go od razu, a wbudowane zadanie cron robi to codziennie.
02Środowisko uruchomieniowe w powłoce
bvs use przy zainstalowanej pozycji pokazuje wiersze włączające ją w powłoce, na przykład w terminalu edytora lub w zadaniu cron.
# w terminalu edytora (Open the editor na stronie Editor settings)
eval "$(bvs use go-1.27-x86_64)"
go version
go build -o hello-go hello.go
./hello-go
Środowisko Go ustawia CGO_ENABLED=0, więc jego programy są statyczne i działają na dowolnym NAS-ie z takim samym procesorem. Zestaw do kompilacji skrośnej działa podobnie: eval "$(bvs use bootlin-aarch64-glibc-stable)" udostępnia kompilator dla urządzeń ARM 64-bit.
03Środowiska budowania
Środowisko to system Linux rozpakowany w envs/<name> w katalogu danych. Można w nim instalować pakiety (apt install build-essential na Debianie lub Ubuntu), a zainstalowane składniki pozostają. Folder projektów z katalogu danych jest w nim dostępny jako /projects.
- Najszybciej przygotujesz kompletne środowisko budowania, wybierając gotowy przykład w Examples na stronie Apps (wymagana rola administratora): Ubuntu 24.04 builder instaluje narzędzia budowania przez apt-get, zanim środowisko pojawi się na liście. Ma glibc 2.39, najniższą wersję spotykaną na NAS-ach obsługiwanych przez pakiet, więc zbudowane w nim programy działają na nich wszystkich.

- New environment (administrator) rozpakowuje zwykły główny system plików pod wybraną nazwą, a jeśli nie jest zainstalowany, najpierw go pobiera.

- Każde środowisko ma Open a shell, które otwiera edytor z terminalem już wewnątrz środowiska, oraz Clone, Export i Delete.

04Kompilowanie programu w środowisku
Z dowolnego terminalu na NAS-ie bvs env shell <name> otwiera powłokę w środowisku, a bvs env run <name> -- <command> wykonuje w nim jedno polecenie. Oba zaczynają w folderze, z którego je uruchomiono: folder wewnątrz katalogu projektów to ten sam folder pod /projects w środowisku.
# hello.cpp w folderze projects/, w terminalu edytora
bvs env run ubuntu2404-builder -- g++ -O2 -o hello hello.cpp
./hello
Kompilator i jego biblioteki pochodzą ze środowiska; program działa na samym NAS-ie. W kolejnym kroku sprawdzimy, czy znajdzie tam wszystko, czego potrzebuje.
05Sprawdzenie inspektorem ELF
Karta ELF inspector na stronie Toolchains (rola developera) odczytuje program lub bibliotekę oraz dane programu ładującego systemu docelowego, niczego nie uruchamiając. Pokazuje, czy NAS lub środowisko zapewnia to, czego plik wymaga. Wybierz lokalizację pliku (wynik budowania aplikacji, folder projektów, środowisko lub, dla administratora, dowolny plik na NAS-ie), cel i naciśnij Inspect.
What it needs rysuje program, ładowane biblioteki i lokalizację każdej z nich, wraz z wymaganymi wersjami. Tutaj program C++ potrzebuje libstdc++.so.6 i libc.so.6, a NAS ma obie biblioteki udostępniające wymagane wersje.
- Brakująca biblioteka, wersja nieudostępniana przez bibliotekę lub glibc nowsza niż w systemie docelowym daje wynik z wyjaśnieniem. Wybierz środowisko jako cel, aby sprawdzić ten sam program tak, jak działałby w nim.
- Na NAS-ie
bvs ldd <file>wypisuje ten sam wynik, abvs ldd --env <name> <file>robi to dla środowiska. - Dla programów, które dostarczasz, App Builder wykonuje to dla każdego pliku każdego buildu, a karta Dependencies proponuje rozwiązania.