Unofficial
På den här sidan
  1. 01Vad filmen visar, vad du behöver
  2. 02Första inställningen
  3. 03Moduler, miljö, Go, Python och QDK
  4. 04Nytt projekt
  5. 05Recepten
  6. 06Bygga och make qpkg
  7. 07Signaturen
  8. 08Testdriftsättning och första inloggningen
  9. 09Paketet arm_64
  10. 10Relaterade guider

Bygg Transmission från grunden på din NAS

Filmen nedan är en verklig körning av Bucket & Code Server IDE 1.0.0-55 på en NAS där ännu inget är inställt. Den börjar på skärmen för första starten och slutar med QTS-paketet Transmission signerat, installerat och svarande i webbläsaren, samt ett nedladdat arm_64-paket av samma program. Den här guiden går igenom filmen kapitel för kapitel: vad personen gör, vad skärmen visar och vad skriptet kontrollerar.

Film · 6:26. Transmission från grunden, från första inställningen till arm_64-paketet Bucket & Code Server IDE 1.0.0-55 · NAS med x86_64
  1. Ställa inmoduler, miljö, körmiljöer
  2. ProjektPaket från källkod
  3. Receptfem, gaten, tjänsten
  4. Byggatvå appar, make qpkg
  5. Installerasignatur, testdriftsättning, arm_64

Bilderna är stillbilder från körningen, från panelen och redigeraren; bara rutorna på Översikt kommer från version 1.0.0-62. NAS:ens adress och namn är maskerade i varje bild och visas som nas.local och NAS.

01Vad filmen visar, vad du behöver

Själva körningen tog 25 min 7 s, men filmen är 6:26 lång. Filmen klipper bort mitten av varje väntan som är längre än 10 sekunder och visar väntans verkliga längd vid klippet. En sträcka på mer än 10 sekunder utan klick spelas upp med fyrdubbel hastighet, märkt 4×.

Ett skript styr webbläsaren: det klickar sig genom panelen, skriver in varje fil i det färdiga projektet i redigeraren och kontrollerar varje steg mot panelens API innan det går vidare. Panelen, redigeraren, bygget och paketen är verkliga. Det färdiga projektet är exemplet Transmission (BitTorrent-klient, egna recept) under Redigerarprojekt på fliken Exempel på sidan Appar; Visa koden visar dess filer.

  • En NAS med Bucket & Code Server IDE 1.0.0-55 eller senare och en x86_64-processor. Paketet arm_64 är en korskompilering på den NAS:en.
  • Ett administratörskonto i panelen. Vid en ny installation skapar skärmen för första starten det.
  • Internetåtkomst för NAS:en: den laddar ner byggmiljöns rotfilsystem, verktygskedjorna och receptens källor och kontrollerar varje nedladdning mot dess sha256.
  • För det signerade paketet ett certifikat för kodsignering som QNAP har utfärdat till dig (avsnitt 07).

02Första inställningen

Film 0:00 · i körningen 4 s

En ny installation har inget konto, så panelen öppnas på en enda skärm, Sätt administratörslösenordet, för kontot administrator. Skriv ett lösenord på minst 10 tecken två gånger och tryck på Sätt lösenordet och logga in. Skärmen tar emot lösenordet i 60 minuter efter att paketet startat, och bara från det lokala nätverket.

Skriptet kontrollerar att panelen har loggat in som administrator och inte längre ber om en första administratör.

03Moduler, miljö, Go, Python och QDK

Film 0:06 · i körningen 59 s

Sidan Översikt visar varje modul som en ruta, och en ny installation kör bara kärnan. Slå på Git (Forgejo) och Redigerare (VS Code i webbläsaren) med deras reglage tills båda rutorna visar körs. Varje panelkonto har ett Forgejo-konto med samma namn, så guiden för nytt projekt erbjuder nu administrator som ägare till ett repository.

Översikt i Bucket & Code Server IDE 1.0.0-62 på x86_64: rutorna Git, SVN och Bucket samt Redigerare, alla igång

På sidan Verktygskedjor är listan över miljöer tom och erbjuder Builder-miljön för Ubuntu 24.04 med en enda knapp, Skapa den här miljön. Miljön ubuntu2404-builder finns där efter 22 sekunder. I katalogen under listan installerar du med Installera Go 1.27 och Python 3.13 (fliken Körmiljöer) och QNAP QDK 2.5.0 (fliken QNAP). Go bygger projektets gate, Python kör verktyget som skriver webbgränssnittets vendor-lista och QDK paketerar QTS-paketen.

Verktygskedjor: miljön ubuntu2404-builder och i katalogen QNAP QDK 2.5.0 (qbuild) markerad som installerad

Skriptet kontrollerar att Git och Redigerare körs, att ubuntu2404-builder finns i listan över miljöer och att go-1.27-x86_64, python-3.13-x86_64 och qdk-2.5.0-x86_64 är installerade.

04Nytt projekt

Film 0:52 · i körningen 24 s

På sidan Projekt frågar Nytt projekt först efter mallen. Välj Paket från källkod och ge projektet namnet Transmission; namnet blir paketets namn. I steget Tjänst väljer du Webbapp: en bakgrundstjänst med webbport och App Centers knapp Öppna. Steget Bygge frågar inte efter någon miljö: raden ENV i projektets Makefile ger båda apparna Builder-miljön för Ubuntu 24.04. Låt Bygg direkt efter skapandet vara av, eftersom startreceptet fortfarande pekar på en platshållarkälla och ett första bygge skulle misslyckas. Skapa projekt skapar Forgejo-repositoryt med dess första commit.

Nytt projekt, steget Förlopp: Paket från källkod, Transmission; Forgejo-repository och första commit klara; Öppna projektet, Öppna i redigeraren och Öppna i Forgejo

Öppna i redigeraren öppnar projektet i redigeraren. Dess mapp innehåller recipes/transmission/ (startreceptet), recipes.txt, en Makefile för två appar, licenses.txt, qpkg/ och scripts/. Skriptet kontrollerar att projektets pipeline listar apparna transmission och transmission-arm64 och att Utforskaren visar recipes.

05Recepten

Film 1:18 · i körningen 12 min 12 s

Biblioteket har inget recept för Transmission eller dess webbgränssnitt, så projektet har fem egna recept i recipes/, vart och ett i en egen mapp med recipe.json och build.sh. Det är de två och dessutom libnatpmp, miniupnpc och libdeflate, som också finns i biblioteket; i projektets appar ersätter projektets kopior bibliotekets recept. curl, OpenSSL, zlib och libevent kommer från biblioteket. Ditt första egna recept förklarar de två filerna.

Startreceptet · 14 s

recipes/transmission/recipe.json anger Transmission 4.1.3:s utgåvearkiv med dess sha256, de recept det behöver (curl, OpenSSL, zlib, libevent, libnatpmp, miniupnpc och libdeflate), den statiska länkningen och en kontroll. build.sh kör CMake för daemonen och för transmission-remote, transmission-create, transmission-edit och transmission-show, med tester, översättningar och dokumentation avstängda.

Fyra recept till · 1 min 17 s

I kommandopaletten frågar Bucket: New recipe efter ett namn och skriver båda filerna från startreceptet. Skriptet skapar libnatpmp 20230423, miniupnpc 2.3.3, libdeflate 1.26 och transmission-web 4.1.3 på det sättet och fyller i varje recepts källa, sha256 och byggsteg. Transmission länkar de tre biblioteken som statiska arkiv. Webbgränssnittet är HTML, CSS och JavaScript, byggda från web/ i samma utgivningsarkiv.

Redigeraren: projektets mapp recipes med libdeflate, libnatpmp, miniupnpc, transmission och transmission-web, och build.sh för transmission-web öppen

Vendor-listan · 1 min 7 s

esbuild och Sass bygger webbgränssnittet, och recipes/transmission-web/vendor.txt låser deras npm-paket, med en rad per paket: sha256, adress och mål. Redigerarens terminal skriver filen utifrån utgivningens package-lock.json, och verktyget rapporterar 30 files: 30 checked against the lockfile's sha512. Den färdiga filen har 41 rader, varav 11 är kommentarer.

eval "$(bvs use python-3.13-x86_64)"
python3 /usr/bin/bucketvs/share/bucketvs/tools/npm-vendor.py package-lock.json CACHE-DIR \
  --dev --roots esbuild esbuild-sass-plugin fast-deep-equal \
  --platform linux-x64-glibc --platform linux-arm64-glibc --allow-install-scripts \
  > recipes/transmission-web/vendor.txt

build.sh innehåller sha256 för hela filen, och bygget kontrollerar varje paket igen innan det packar upp det. npm körs aldrig, och inget installationsskript körs.

Receptlistan, gaten, skripten, licenserna och ikonerna · 6 min 38 s

recipes.txt anger vad de två apparna bygger: transmission, transmission-web och cacert, CA-paketet som curl kontrollerar HTTPS-trackers mot. App Builder lägger till det som vart och ett av dem behöver.

gate/ innehåller trgate, ett Go-program utan externa moduler. Transmissions standardinställningar har inget lösenord och tar emot RPC-anrop bara från själva NAS:en; om Transmission öppnades mot nätverket utan lösenord skulle det svara vem som helst som når port 9091. Därför startar paketet transmission-daemon först när du har valt ett lösenord: trgate lyssnar på porten med en inställningssida, skriver lösenordet i den saltade form som Transmission lagrar det i och startar sedan daemonen på samma port. Paketet genererar inget lösenord, så inget skrivs till en fil eller till QTS systemloggar.

scripts/make-qpkg.sh är mallens packare med tre ifyllda ställen: KEEP, sökvägarna som paketet tar från varje app; own_programs, som bygger trgate för varje arkitektur; och own_licences, som lägger till de licenstexter som licenses.txt inte kan ge. licenses.txt anger licensen för varje recept som paketet innehåller, och LICENSE är licensen för projektets egen kod. Skriptet skriver in de här tio filerna. De tre ikonerna i qpkg/icons/ laddas upp med Upload... på den mappen i Utforskaren.

Tjänsten · 40 s

I projektvyn innehåller kortet Tjänst och paket blocken som skriver paketets start- och stoppskript och nycklarna i qpkg.cfg. Med förinställningen Webbapp som utgångspunkt kommer skriptet fram till nio block: datamappen Transmission på volymen; kontot transmission i gruppen arr, som äger den mappen (läge 700); webbporten 9091; trgate som kontots daemon, som får 40 sekunder på sig att stoppa; en väntan på port 9091; en loggrad; och statuskontrollerna running och port_open. Fliken Paket anger visningsnamnet Transmission, version 4.1.3, webbsidans sökväg /transmission/web/, webbport 9091 och 60 sekunders väntan för QTS vid start och vid stopp. Spara visar planen med varje fils diff, och Committa committar den.

Kortet Tjänst och paket, fliken Paket: visningsnamn Transmission, version 4.1.3, webbsidans sökväg /transmission/web/, webbport 9091, 60 sekunder vid start och vid stopp

Kontrollen · 30 s

Vid varje sparning kontrolleras projektets recept och fynden listas i vyn Problem. Skriptet väntar på No problems have been detected in the workspace, och projektets rapport listar då fem recept och inget fel. make lint ger samma fynd i terminalen.

Commit och push · 1 min 42 s

I Källkodshantering stagear skriptet alla ändringar, committar dem som Transmission from source och pushar. Projektets fjärr-repository är dess Forgejo-repository över HTTPS, så redigeraren frågar efter kontots namn och lösenord, som Forgejo delar med panelen. Skriptet väntar tills inget är ocommittat och inget ligger före fjärr-repositoryt, läser sedan tillbaka de tre ikonerna från Forgejo och jämför dem byte för byte med projektets.

06Bygga och make qpkg

Film 5:13 · i körningen 10 min 1 s

Bygg i projektvyn kör projektets Makefile. Den bygger de två apparna efter varandra i Builder-miljön för Ubuntu 24.04, båda statiska: transmission för den här NAS:ens x86_64-processor och transmission-arm64 för aarch64, en korskompilering. Varje app bygger 13 recept i beroendeordning: cacert, OpenSSL, zlib, nghttp2, zstd, c-ares, curl och libevent från biblioteket, sedan libnatpmp, miniupnpc, libdeflate, transmission och transmission-web från projektet. Det tog 8 min 1 s. Korskompileringens kontroller körs bara där qemu-user är registrerat; annars noterar bygget dem som inte körda. Skriptet kontrollerar att de senaste byggena av båda apparna är klara och anger projektet Transmission.

Projektvyn efter bygget: Bygge klart, och panelen Utdata med raderna the App Builder built transmission och the App Builder built transmission-arm64

Paketen skapas i redigerarens terminal, i projektets mapp (2 min 0 s). Go måste finnas i sökvägen, eftersom make qpkg bygger trgate för varje arkitektur:

eval "$(bvs use go-1.27-x86_64)"
make qpkg

make qpkg paketerar det senaste lyckade bygget av varje app med QDK och skriver Transmission_4.1.3_x86_64.qpkg och Transmission_4.1.3_arm_64.qpkg till build/qpkg/build/, vardera cirka 30 MB. Ett paket innehåller Transmissions fem program, trgate, webbgränssnittet, CA-paketet, den BusyBox som bygget lägger till i varje paket och share/licenses/ med en NOTICE och licenstexterna för varje komponent.

07Signaturen

Inte i filmen · i körningen 3 s

Det här är det enda steget utanför panelen. Testdriftsättning installerar bara signerade paket och hoppar aldrig över App Centers signaturkontroll. Körningens NAS har inga filer för kodsignering, så make qpkg byggde båda paketen osignerade. Skriptet kopierar dem till en dator med ett certifikat för kodsignering som QNAP har utfärdat till den här guidens författare, signerar dem där med qbuild från QDK, kontrollerar signaturerna och kopierar tillbaka paketen till build/qpkg/build/. Certifikatet och dess privata nyckel går aldrig till NAS:en. Listan Versioner markerar sedan båda paketen som signerade.

Versioner: Transmission_4.1.3_arm_64.qpkg och Transmission_4.1.3_x86_64.qpkg, båda markerade som signerade

Du signerar med ett eget certifikat. Lägg certificate och private_key, och ca_certs för kedjan, bredvid qpkg/qpkg.cfg eller i mappen som QPKG_CERT_DIR anger, så signerar make qpkg paketen själv; mallens .gitignore håller filerna utanför git. Utan dem är paketen osignerade och Testdriftsättning avvisar dem. Vad en NAS gör med ett osignerat paket avgör dess ägare i App Center, och den här guiden avråder från att installera osignerade paket.

08Testdriftsättning och första inloggningen

Film 5:53 · i körningen 32 s

På projektets sida installerar Testdriftsättning (för administratörer) x86_64-paketet på den här NAS:en med qpkg_cli, på samma sätt som App Center installerar en fil, och jobbet väntar tills App Center bekräftar. Paketet förblir installerat tills du tar bort det med Ta bort från denna NAS eller i App Center. Jobbet tog 18 s.

Projektvyn efter testdriftsättningen: 4.1.3 installerad på den här NAS:en, Transmission 4.1.3 installerad och qpkg_cli-raderna i panelen Utdata

Öppna http://<NAS>:9091/ eller tryck på Öppna i App Center. Gatens sida, Choose the web interface password, frågar efter ett användarnamn (admin om du inte ändrar det) och två gånger efter lösenordet, minst 8 tecken. Tryck på Start Transmission. Sidan säger att Transmission startar, sedan tar transmission-daemon över porten och webbläsaren frågar efter användarnamnet och lösenordet du valde. Sidan tar emot dem i 60 minuter efter att paketet startat, från en dator i NAS:ens eget nätverk, på NAS:ens IP-adress eller dess eget namn.

När du har loggat in visar webbläsaren Transmissions webbgränssnitt utan överföringar. Skriptet kontrollerar att sidans titel är Transmission Web Interface och att RPC:n rapporterar version 4.1.3 (838877323f).

09Paketet arm_64

Film 6:20 · i körningen 23 s

Ett högerklick på raden arm_64 i listan Versioner öppnar dess meny, och Ladda ner sparar Transmission_4.1.3_arm_64.qpkg (30 290 058 byte). Skriptet jämför filens storlek med listans.

En NAS med x86_64 kan inte köra det paketet, så skriptet kontrollerar det under emulering. scripts/qemu-test.sh packar upp nedladdningen på en Linux-dator där qemu-user är registrerat och kör det där. Alla 22 kontroller går igenom på 19 s:

  • programmen är statiska AArch64-program, och BusyBox och transmission-daemon körs;
  • gaten serverar inställningssidan, transmission-daemon körs inte innan lösenordet är satt, och en POST utan sidans header avvisas (403);
  • efter inställningen svarar RPC:n, session-get rapporterar version 4.1.3, ett felaktigt lösenord avvisas (401), webbgränssnittet svarar och varken utdata eller settings.json innehåller lösenordet;
  • transmission-daemon hämtar Debians netinst-.torrent över HTTPS, vilket kräver paketets CA-paket, och torrenten tas sedan bort;
  • en TERM till gaten avslutar transmission-daemon, och gaten avslutas med 0.

I den här körningen körde ingen ARM-NAS paketet.

10Relaterade guider

  • Ditt första egna recept går med ett litet program, cmatrix, igenom startreceptet, kontrollen och make qpkg.
  • En egen app av dina recept bygger en App Builder-app som använder ett projekts recept utöver bibliotekets.
  • Transmission i App Center är det publicerade exemplet. Dess x86_64-paket kommer från en tidigare körning av samma skript på 1.0.0-55; dess SHA-256 finns på den sidan.
  • Användarguiden för Bucket & Code Server IDE beskriver Nytt projekt, projektvyn, Verktygskedjor, App Builder och kodsignering av ett paket.