När en App Builder-build misslyckas: läs loggen, hitta orsaken, bygg igen
En app i App Builder bygger program från recept, ett efter ett. Ett recept kan misslyckas. Den här guiden följer ett verkligt fel på en test-NAS: TurboShell med 70 recept stannade vid det sjunde, Korn-skalet ksh93.
- Varreceptet som misslyckades
- Loggde sista raderna
- Orsakvad felet pekar på
- Ändringrättat recept eller app
- Bygg igenBygg om återanvänder det som gick igenom
Bilderna kommer från Bucket & Code Server IDE 1.0.0-49, före och efter fixen.
01Där det misslyckades
Ett misslyckat bygge ändrar inte den fungerande appen. Om ett tidigare bygge lyckades använder Aktivera, Ladda ner och Exportera som QPKG fortfarande det resultatet. Sidofältet visar misslyckades för det senaste bygget, och appsidan visar felet i pipelinen.

Kortet Byggordning anger receptet och fasen där felet inträffade. I det här exemplet visar alla recept före det godkänd. Recepten efter det visar inte nådd och behåller loggen från ett tidigare bygge.
02Läs receptets logg
Logg på receptets rad öppnar det som byggaren skrev om receptet: faserna, kompilatorns utdata, granskningen och kontrollen. Orsaken står nära slutet.
- Byggjobbets egen logg, under Jobb i den nedre panelen (Ctrl+J), slutar med samma rader: byggaren kopierar de sista 40 raderna av receptets logg in i den.
- Det misslyckade receptets byggträd finns kvar i appens byggmapp tills appen byggs nästa gång:
apps/<app>/build/work/<recipe>i datamappen. Öppna den i redigerarens terminal för att titta på källorna och de genererade filerna.
03Hitta orsaken
Kompilatorn letar efter Magic_t, som är kshs egen typ, och föreslår magic_t, en typ från libmagic, biblioteket bakom kommandot file. Alltså hittade #include <magic.h> i kshs källkod libmagics headerfil i stället för kshs egen.
TurboShell bygger också receptet file, som installerar libmagics magic.h i appens prefix. Varje recept byggs med prefixets include-mapp i sökvägen, så att programmen hittar biblioteken som byggdes före dem. Det första bygget av TurboShell byggde ksh93 före file och lyckades. Ett senare bygge arbetar i en kopia av det senaste lyckade bygget. Där fanns libmagics headerfil redan i prefixet, och ksh93 hittade den.
När ett fel nämner något, som det här gör, spårar du det namnet bakåt genom källkoden, de tidigare recepten och byggmiljön. Loggen visar var bygget stannade; den säger inte vilken ändring som löser problemet.
04Vad du kan ändra
- Ett rättat recept. Recept når NAS:en mellan paketets versioner som en signerad katalog. Kortet Receptbibliotek på sidan Appar visar versionen som används och när den senast kontrollerades; Sök efter receptuppdateringar söker direkt. Det rättade receptet
ksh93kom i katalog 2026.10.08-1 och hållerksh93borta från prefixets headerfiler.
- Appen. Med Ändra på appsidan lägger du till eller tar bort recept och väljer miljö och länkningssätt. Ett program som krockar med ett annat recept kan byggas i en egen app.
- Miljön. Om ett recept behöver en nyare kompilator eller ett byggverktyg som miljön saknar väljer du en annan miljö med Ändra.
05Byt källan i ett recept själv
När inget rättat recept har kommit ännu, eller när ett program har en nyare version än den som bibliotekets recept bygger, kan en kopia av receptet ange den nya källan. Kopian hamnar i mappen recipes/ i något av dina projekt, och en app som använder det projektets recept bygger kopian i stället för bibliotekets recept. Biblioteket och de andra apparna förblir som de är. I biblioteket i Bucket & Code Server IDE 1.0.0-55 bygger receptet tmux version 3.7c; kopian här bygger 3.8.
Byggjobbets logg anger biblioteket som används på raden recipe library:. Paketets eget bibliotek är /usr/bin/bucketvs/share/bucketvs/recipes/; en katalogs ligger i recipes/current/library/ i datamappen. Öppna redigerarens terminal i projektets mapp, kopiera receptets mapp därifrån och ta fram sha256 för det nya arkivet:
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 -
I recipes/tmux/recipe.json ändras tre värden: versionen, adressen och sha256.
"version": "3.8",
"source": {
"url": "https://github.com/tmux/tmux/releases/download/3.8/tmux-3.8.tar.gz",
"sha256": "e79c699c7e949dccd0a4a125e17b8d1261e311b16979dbc8eb34542f3966d82e"
},
- När filen sparas kontrolleras projektets recept och fynden listas i redigerarens vy Problems;
bvs recipe lint .gör samma kontroll i terminalen. Kortet Recept i projektvyn märker kopian med ersätter bibliotekets version 3.7c. En kopia med ett problem utelämnas, och bibliotekets recept träder inte in i dess ställe: ett bygge som behövertmuxstoppas innan det börjar, med orsaken. - På appens sida visar Ändra fältet Recept från ett projekt så snart ett projekt innehåller ett recept. Välj projektet, Spara ändringen och sedan Bygg om. Byggjobbets logg listar recepten det läste från projektet och skriver
tmux replaces the library's tmux 3.7c in this app. - En version som byggs på samma sätt behöver bara de här tre värdena. Behöver den andra configure-flaggor eller en patch ändrar du även
build.sh; Ditt första egna recept förklarar den filen. - Kopian ersätter bibliotekets recept efter namn, oavsett versioner. När bibliotekets recept blir nyare än kopian bygger appen ändå kopian: ställ Recept från ett projekt tillbaka till Inget: bara biblioteket, eller ta bort kopian.
06Bygg igen
Bygg om på appsidan startar ett nytt byggjobb. Om appens filer inte har ändrats sedan det misslyckade bygget fortsätter det nya bygget där det förra stannade: recepten som det misslyckade bygget hann bli klart med återanvänds, och det misslyckade receptet byggs på nytt, här ksh93 med det rättade receptet från katalogen.


07När bygget går igenom men ett program inte startar
Varje bygge kontrollerar resultatet innan appen ersätts: varje recepts egen kontroll och en analys som läser program och bibliotek utan att köra dem. Fliken Beroenden visar vad analysen hittade: ett saknat bibliotek, en version som biblioteket inte definierar, en RUNPATH som pekar utanför appen eller ett program som kräver en nyare glibc än appen är byggd för. Panelen föreslår åtgärder för resultat som stöds, ofta som knappar: Lägg till … och bygg, Byt till … och bygg, Patcha RUNPATH, Välj en annan miljö eller Bygg bara för denna NAS. På NAS:en skriver bvs deps <app> ut samma lista.