Gdy kompilacja w App Builder się nie powiedzie: odczytaj log, znajdź przyczynę i zbuduj ponownie
Aplikacja w App Builder buduje programy kolejno na podstawie przepisów. Jeden z nich może się nie skompilować. Ten poradnik opisuje rzeczywisty błąd na testowym NAS-ie: TurboShell, aplikacja z 70 przepisami, zatrzymała się na siódmym — powłoce Korn ksh93.
- Miejsceprzepis, który zawiódł
- Logjego ostatnie wiersze
- Przyczynaco wskazuje błąd
- Zmianapoprawiony przepis lub aplikacja
- Odbudowawykorzystuje udane przepisy
Zrzuty ekranu pochodzą z Bucket & Code Server IDE 1.0.0-49, sprzed poprawki i po niej.
01Gdzie wystąpił błąd
Nieudana kompilacja nie zmienia działającej aplikacji. Jeśli wcześniejsza kompilacja się udała, przyciski Aktywuj, Pobierz i Eksportuj jako QPKG nadal korzystają z jej wyniku. Pasek boczny oznacza ostatnią kompilację jako nieudane, a strona aplikacji pokazuje błąd w potoku.

Karta Kolejność budowania wskazuje przepis i etap, na którym wystąpił błąd. W tym przykładzie wcześniejsze przepisy mają status test zaliczony; a późniejsze mają status nieosiągnięty i zachowują log z poprzedniej kompilacji.
02Odczytaj log przepisu
Przycisk Log w wierszu przepisu otwiera zapis jego etapów, wyjście kompilatora, audyt i kontrolę. Przyczyny szukaj blisko końca.
- Log zadania kompilacji (Zadania w dolnym panelu, Ctrl+J) kończy się tymi samymi wierszami, bo narzędzie budujące kopiuje do niego ostatnie 40 wierszy logu przepisu.
- Pliki robocze nieudanego przepisu zostają do następnej kompilacji w folderze kompilacji aplikacji:
apps/<app>/build/work/<recipe>w folderze danych. Otwórz ten folder w terminalu edytora i sprawdź źródła oraz wygenerowane pliki.
03Znajdź przyczynę
Kompilator szuka typu Magic_t, którego używa ksh, i podpowiada magic_t, typ z biblioteki libmagic (używa jej polecenie file). To znaczy, że #include <magic.h> w źródłach ksh trafił na nagłówek libmagic zamiast na nagłówek ksh.
TurboShell buduje też przepis file, który instaluje w prefiksie aplikacji nagłówek libmagic magic.h. Katalog include tego prefiksu jest na ścieżce wyszukiwania każdego przepisu, żeby programy widziały wcześniej zbudowane biblioteki. Pierwsza kompilacja TurboShell zbudowała ksh93 przed file i się udała. Kolejna kompilacja zaczyna od kopii ostatniej udanej wersji, a w jej prefiksie był już nagłówek libmagic, który ksh93 dołączył przez pomyłkę.
Gdy błąd podaje konkretną nazwę, sprawdź, skąd ona pochodzi: ze źródeł, z wcześniejszych przepisów czy ze środowiska kompilacji. Log pokazuje, gdzie kompilacja się zatrzymała, ale sam nie mówi, która zmiana ją naprawi.
04Co możesz zmienić
- Poprawiony przepis. Między wydaniami pakietu nowe przepisy trafiają na NAS jako podpisany katalog. Karta Biblioteka przepisów na stronie Aplikacje pokazuje używaną wersję i datę ostatniego sprawdzenia, a przycisk Sprawdź aktualizacje przepisów sprawdza od razu. Poprawiony przepis
ksh93jest w katalogu 2026.10.08-1 i oddzielaksh93od nagłówków w prefiksie.
- Aplikacja. Przycisk Zmień na stronie aplikacji pozwala dodać lub usunąć przepisy oraz ustawić środowisko i tryb linkowania. Program kolidujący z innym przepisem można przenieść do osobnej aplikacji.
- Środowisko. Jeśli przepis wymaga nowszego kompilatora albo brakującego narzędzia, wybierz inne środowisko przez Zmień.
05Zmień źródło przepisu samodzielnie
Gdy poprawiony przepis jeszcze nie dotarł albo program ma nowsze wydanie niż to, które buduje przepis z biblioteki, możesz wskazać nowe źródło we własnej kopii przepisu. Kopię zapisujesz w folderze recipes/ dowolnego swojego projektu. Aplikacja, która bierze przepisy z tego projektu, buduje wtedy kopię zamiast przepisu z biblioteki. Biblioteka i pozostałe aplikacje się nie zmieniają. W bibliotece Bucket & Code Server IDE 1.0.0-55 przepis tmux buduje wersję 3.7c; kopia w tym przykładzie buduje 3.8.
Log zadania kompilacji podaje używaną bibliotekę w wierszu recipe library:. Własna biblioteka pakietu to /usr/bin/bucketvs/share/bucketvs/recipes/; biblioteka z podpisanego katalogu jest w recipes/current/library/ w folderze danych. W terminalu edytora, w folderze projektu, skopiuj stamtąd folder przepisu i oblicz sha256 nowego archiwum:
mkdir -p recipes
cp -r /usr/bin/bucketvs/share/bucketvs/recipes/tmux recipes/
curl -fsSL https://github.com/tmux/tmux/releases/download/3.8/tmux-3.8.tar.gz | sha256sum
e79c699c7e949dccd0a4a125e17b8d1261e311b16979dbc8eb34542f3966d82e -
W pliku recipes/tmux/recipe.json zmień trzy wartości: wersję, adres i sha256.
"version": "3.8",
"source": {
"url": "https://github.com/tmux/tmux/releases/download/3.8/tmux-3.8.tar.gz",
"sha256": "e79c699c7e949dccd0a4a125e17b8d1261e311b16979dbc8eb34542f3966d82e"
},
- Po zapisaniu pliku przepisy projektu są sprawdzane, a uwagi pojawiają się w widoku Problemy edytora. To samo sprawdzenie w terminalu wykonuje
bvs recipe lint .. Karta Przepisy w widoku projektu oznacza kopię napisem zastępuje wersję 3.7c z biblioteki. Kopia z błędem zostaje pominięta, ale przepis z biblioteki nie zajmuje jej miejsca: kompilacja, która potrzebujetmux, zatrzymuje się przed startem i podaje powód. - Na stronie aplikacji okno Zmień pokazuje pole Przepisy z projektu, gdy jakiś projekt ma przepis. Wybierz projekt, naciśnij Zapisz zmianę, a potem Zbuduj ponownie. Log zadania kompilacji wymienia przepisy wczytane z projektu i podaje
tmux replaces the library's tmux 3.7c in this app. - Wydanie, które buduje się tak samo, potrzebuje tylko tych trzech wartości. Jeśli wymaga innych opcji configure albo łatki, zmień też
build.sh; ten plik opisuje Twój pierwszy własny przepis. - Kopia zastępuje przepis z biblioteki o tej samej nazwie, bez względu na wersję. Gdy przepis w bibliotece dostanie nowszą wersję niż kopia, aplikacja nadal buduje kopię. Wtedy ustaw Przepisy z projektu z powrotem na Brak: tylko biblioteka albo usuń kopię.
06Zbuduj ponownie
Przycisk Zbuduj ponownie na stronie aplikacji rozpoczyna nowe zadanie. Jeśli pliki aplikacji nie zmieniły się od nieudanej kompilacji, budowanie rusza od miejsca, w którym stanęło: gotowe przepisy zostają, a przepis, który się nie udał, buduje się od nowa. W tym przykładzie ksh93 buduje się już z poprawką z katalogu.


07Gdy kompilacja kończy się pomyślnie, ale program nie uruchamia się
Zanim nowa kompilacja zastąpi aplikację, każde budowanie sprawdza przepisy i analizuje pliki wykonywalne oraz biblioteki, bez uruchamiania ich. Karta Zależności pokazuje wykryte problemy: brakującą bibliotekę, brak wersji symbolu, RUNPATH prowadzący poza aplikację lub program wymagający nowszego glibc niż docelowe środowisko. Przy uwagach, które panel rozpoznaje, proponuje rozwiązanie, często jako przycisk: Dodaj … i zbuduj, Przełącz na … i zbuduj, Popraw RUNPATH, Wybierz inne środowisko lub Zbuduj tylko dla tego NAS-a. Na NAS-ie bvs deps <app> wypisuje tę samą listę.