Unofficial
Op deze pagina
  1. 01Wat de film laat zien, wat je nodig hebt
  2. 02Eerste configuratie
  3. 03Modules, omgeving, Go, Python en QDK
  4. 04Nieuw project
  5. 05De recepten
  6. 06Bouwen en make qpkg
  7. 07De handtekening
  8. 08Testuitrol en de eerste aanmelding
  9. 09Het arm_64-pakket
  10. 10Gerelateerde handleidingen

Bouw Transmission vanaf nul op je NAS

De film hieronder is een echte run van Bucket & Code Server IDE 1.0.0-55 op een NAS waarop nog niets is ingesteld. De film begint bij het scherm voor de eerste configuratie. Hij eindigt bij het QTS-pakket Transmission, dat ondertekend en geïnstalleerd is en in de browser antwoordt, en bij een gedownloade arm_64-build van hetzelfde pakket. Deze handleiding volgt de film hoofdstuk voor hoofdstuk: wat de persoon doet, wat het scherm toont en wat het script controleert.

Film · 6:26. Transmission vanaf nul, van de eerste configuratie tot het arm_64-pakket Bucket & Code Server IDE 1.0.0-55 · NAS met x86_64
  1. Instellenmodules, omgeving, runtimes
  2. ProjectPakket uit broncode
  3. Receptenvijf, de gate, de dienst
  4. Bouwentwee apps, make qpkg
  5. Installerenhandtekening, testuitrol, arm_64

De afbeeldingen zijn beelden uit de run, uit het paneel en de editor; alleen de tegels van het Overzicht komen uit versie 1.0.0-62. Het adres en de naam van de NAS zijn in elk beeld gemaskeerd en verschijnen als nas.local en NAS.

01Wat de film laat zien, wat je nodig hebt

De run duurde 25 min 7 s, de film duurt 6:26. Van elke wachttijd langer dan 10 seconden is het midden weggeknipt; op die plek staat hoe lang het wachten echt duurde. Een stuk van meer dan 10 seconden zonder klik speelt op viervoudige snelheid af, gemarkeerd met 4×.

Een script bestuurt de browser: het klikt door het paneel, typt elk bestand van het voltooide project in de editor en controleert elke stap via de API van het paneel voordat het verdergaat. Het paneel, de editor, de build en de pakketten zijn echt. Het voltooide project is het voorbeeld Transmission (BitTorrent client, own recipes) onder Editor-projecten op het tabblad Voorbeelden van de pagina Apps; Code bekijken toont de bestanden.

  • Een NAS met Bucket & Code Server IDE 1.0.0-55 of nieuwer en een x86_64-processor. Het arm_64-pakket is een cross-build op die NAS.
  • Een beheerdersaccount in het paneel. Bij een nieuwe installatie maakt het scherm voor de eerste configuratie het aan.
  • Internettoegang voor de NAS: hij downloadt het root-bestandssysteem van de bouwomgeving, de toolchains en de bronnen van de recepten, en controleert elke download aan de hand van de sha256.
  • Voor het ondertekende pakket een certificaat voor codeondertekening dat QNAP aan jou heeft uitgegeven (sectie 07).

02Eerste configuratie

Film 0:00 · in de run 4 s

Een nieuwe installatie heeft geen account, dus het paneel opent op één scherm, Het beheerderswachtwoord instellen, voor het account administrator. Typ twee keer een wachtwoord van minstens 10 tekens en druk op Het wachtwoord instellen en aanmelden. Het scherm accepteert het wachtwoord tot 60 minuten na de start van het pakket, en alleen vanaf het lokale netwerk.

Het script controleert dat het paneel is aangemeld als administrator en niet meer om een eerste beheerder vraagt.

03Modules, omgeving, Go, Python en QDK

Film 0:06 · in de run 59 s

De pagina Overzicht toont elke module als tegel, en een nieuwe installatie draait alleen de kern. Zet Git (Forgejo) en de Editor (VS Code in de browser) aan met hun schakelaars tot beide tegels actief tonen. Elk paneelaccount heeft een Forgejo-account met dezelfde naam, dus de wizard voor een nieuw project biedt nu administrator aan als eigenaar van een repository.

Het Overzicht van Bucket & Code Server IDE 1.0.0-62 op x86_64: de tegels Git, SVN & Bucket en Editor actief

Op de pagina Toolchains is de lijst met omgevingen leeg en biedt hij de Ubuntu 24.04-builder aan met één knop, Deze omgeving aanmaken. De omgeving ubuntu2404-builder is er na 22 seconden. In de catalogus eronder voegt Installeren Go 1.27 en Python 3.13 toe (tabblad Runtimes) en QNAP QDK 2.5.0 (tabblad QNAP). Go bouwt de gate van het project, Python voert het hulpprogramma uit dat de vendor-lijst van de webinterface schrijft, en QDK verpakt de QTS-pakketten.

Toolchains: de omgeving ubuntu2404-builder en in de catalogus QNAP QDK 2.5.0 (qbuild) gemarkeerd als geïnstalleerd

Het script controleert dat Git en de Editor draaien, dat ubuntu2404-builder in de lijst met omgevingen staat en dat go-1.27-x86_64, python-3.13-x86_64 en qdk-2.5.0-x86_64 geïnstalleerd zijn.

04Nieuw project

Film 0:52 · in de run 24 s

Op de pagina Projecten vraagt Nieuw project eerst naar het sjabloon. Kies Pakket uit broncode en geef het project de naam Transmission; de naam wordt de naam van het pakket. Kies in de stap Dienst Webapp: een achtergronddienst met een webpoort en de knop Openen van het App Center. De stap Bouwen vraagt niet om een omgeving: de ENV-regel van de Makefile van het project geeft beide apps de Ubuntu 24.04-builder. Laat Direct na het aanmaken bouwen uit, omdat het startrecept nog naar een tijdelijke bron verwijst en een eerste build zou mislukken. Project aanmaken maakt de Forgejo-repository aan, met de eerste commit.

Nieuw project, de stap Voortgang: Pakket uit broncode, Transmission; Forgejo-repository en eerste commit klaar; Project openen, Openen in de editor en Openen in Forgejo

Openen in de editor opent het project in de editor. De map bevat recipes/transmission/ (het startrecept), recipes.txt, een Makefile voor twee apps, licenses.txt, qpkg/ en scripts/. Het script controleert dat de pipeline van het project de apps transmission en transmission-arm64 vermeldt en dat de Verkenner recipes toont.

05De recepten

Film 1:18 · in de run 12 min 12 s

De bibliotheek heeft geen recept voor Transmission of zijn webinterface, dus het project heeft vijf eigen recepten in recipes/, elk een map met recipe.json en build.sh: die twee en libnatpmp, miniupnpc en libdeflate, die de bibliotheek ook heeft; in de apps van het project nemen de kopieën van het project de plaats in van die uit de bibliotheek. curl, OpenSSL, zlib en libevent komen uit de bibliotheek. Je eerste eigen recept legt de twee bestanden uit.

Het startrecept · 14 s

recipes/transmission/recipe.json krijgt het releasearchief van Transmission 4.1.3 met zijn sha256, de recepten die het nodig heeft (curl, OpenSSL, zlib, libevent, libnatpmp, miniupnpc en libdeflate), het statische linken en een controle. build.sh draait CMake voor de daemon en voor transmission-remote, transmission-create, transmission-edit en transmission-show, met tests, vertalingen en documentatie uitgeschakeld.

Nog vier recepten · 1 min 17 s

In het opdrachtenpalet vraagt Bucket: New recipe om een naam en schrijft beide bestanden vanuit het startrecept. Het script maakt zo libnatpmp 20230423, miniupnpc 2.3.3, libdeflate 1.26 en transmission-web 4.1.3 aan en vult bij elk de bron, de sha256 en de bouwstappen in. Transmission linkt de drie bibliotheken als statische archieven. De webinterface is HTML, CSS en JavaScript, gebouwd uit web/ van hetzelfde releasearchief.

De editor: de map recipes van het project met libdeflate, libnatpmp, miniupnpc, transmission en transmission-web, en de geopende build.sh van transmission-web

De vendor-lijst · 1 min 7 s

esbuild en Sass bouwen de webinterface, en recipes/transmission-web/vendor.txt legt hun npm-pakketten vast, per pakket een regel met sha256, adres en bestemming. De terminal van de editor schrijft het bestand uit de package-lock.json van de release, en het hulpprogramma meldt 30 files: 30 checked against the lockfile's sha512. Het voltooide bestand heeft 41 regels, waarvan 11 commentaar.

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 bevat de sha256 van het hele bestand, en de build controleert elk pakket opnieuw voordat hij het uitpakt. npm draait nooit, en er wordt geen installatiescript uitgevoerd.

De receptenlijst, de gate, de scripts, de licenties en de pictogrammen · 6 min 38 s

recipes.txt noemt wat de twee apps bouwen: transmission, transmission-web en cacert, de CA-bundel waartegen curl HTTPS-trackers controleert. De App Builder voegt toe wat elk daarvan nodig heeft.

gate/ bevat trgate, een Go-programma zonder externe modules. De standaardinstellingen van Transmission hebben geen wachtwoord en accepteren RPC-aanroepen alleen van de NAS zelf; zou je het zonder wachtwoord openstellen voor het netwerk, dan bedient het iedereen die poort 9091 bereikt. Daarom start het pakket transmission-daemon pas nadat je een wachtwoord hebt gekozen: trgate houdt de poort vast met een instelpagina, schrijft het wachtwoord in de gezouten vorm waarin Transmission het bewaart en start dan de daemon op dezelfde poort. Het pakket genereert geen wachtwoord, dus er wordt er geen in een bestand of in de systeemlogboeken van QTS geschreven.

scripts/make-qpkg.sh is het inpakscript van het sjabloon, met drie ingevulde plekken: KEEP, de paden die het pakket uit elke app neemt; own_programs, dat trgate voor elke architectuur bouwt; en own_licences, dat de licentieteksten toevoegt die licenses.txt niet kan geven. licenses.txt noemt de licentie van elk recept dat het pakket bevat, en LICENSE is de licentie van de eigen code van het project. Het script typt deze tien bestanden in. De drie pictogrammen in qpkg/icons/ komen erin met Upload... op die map in de Verkenner.

De dienst · 40 s

In de projectweergave bevat de kaart Dienst en pakket de blokken die het start- en stopscript van het pakket schrijven en de sleutels van qpkg.cfg. Vanuit de voorinstelling Webapp komt het script uit op negen blokken: de datamap Transmission op het volume; het account transmission in de groep arr, dat eigenaar is van die map (modus 700); de webpoort 9091; trgate als daemon van het account, met 40 seconden om te stoppen; wachten op poort 9091; een logregel; en de statuscontroles running en port_open. Het tabblad Pakket stelt de weergavenaam Transmission in, versie 4.1.3, het pad van de webpagina /transmission/web/, webpoort 9091 en 60 seconden wachttijd van QTS bij de start en bij het stoppen. Opslaan toont het plan met de diff van elk bestand, en Committen commit het.

De kaart Dienst en pakket, tabblad Pakket: weergavenaam Transmission, versie 4.1.3, pad van de webpagina /transmission/web/, webpoort 9091, 60 seconden bij de start en bij het stoppen

De controle · 30 s

Bij elke keer opslaan worden de recepten van het project gecontroleerd en verschijnen de bevindingen in de weergave Problemen. Het script wacht op No problems have been detected in the workspace, en het rapport van het project noemt dan vijf recepten en geen fout. make lint geeft dezelfde bevindingen in de terminal.

Commit en push · 1 min 42 s

In Broncodebeheer zet het script alle wijzigingen klaar, commit ze als Transmission from source en pusht. De remote van het project is zijn Forgejo-repository via HTTPS, dus de editor vraagt om de naam en het wachtwoord van het account, die Forgejo met het paneel deelt. Het script wacht tot er niets meer te committen valt en niets meer voorloopt op de remote, leest dan de drie pictogrammen terug uit Forgejo en vergelijkt ze byte voor byte met die van het project.

06Bouwen en make qpkg

Film 5:13 · in de run 10 min 1 s

Bouwen in de projectweergave voert de Makefile van het project uit. De Makefile bouwt de twee apps na elkaar in de Ubuntu 24.04-builder, beide statisch: transmission voor de x86_64-processor van deze NAS en transmission-arm64 voor aarch64, een cross-build. Elke app bouwt 13 recepten in volgorde van afhankelijkheid: cacert, OpenSSL, zlib, nghttp2, zstd, c-ares, curl en libevent uit de bibliotheek, daarna libnatpmp, miniupnpc, libdeflate, transmission en transmission-web uit het project. Dat duurde 8 min 1 s. De controles van de cross-build draaien alleen waar qemu-user is geregistreerd; elders legt de build ze vast als niet uitgevoerd. Het script controleert dat de laatste builds van beide apps klaar zijn en het project Transmission noemen.

De projectweergave na de build: Build klaar, en het paneel Uitvoer met de regels the App Builder built transmission en the App Builder built transmission-arm64

De pakketten maak je in de terminal van de editor, in de map van het project (2 min 0 s). Go moet in het pad staan, omdat make qpkg trgate voor elke architectuur bouwt:

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

make qpkg verpakt de nieuwste geslaagde build van elke app met QDK en schrijft Transmission_4.1.3_x86_64.qpkg en Transmission_4.1.3_arm_64.qpkg naar build/qpkg/build/, elk ongeveer 30 MB. Een pakket bevat de vijf programma's van Transmission, trgate, de webinterface, de CA-bundel, de BusyBox die de build aan elk pakket toevoegt en share/licenses/ met een NOTICE en de licentieteksten van elk onderdeel.

07De handtekening

Niet in de film · in de run 3 s

Dit is de enige stap buiten het paneel. De testuitrol installeert alleen ondertekende pakketten en slaat de handtekeningcontrole van het App Center nooit over, en de NAS van de run heeft geen bestanden voor codeondertekening, dus make qpkg bouwde beide pakketten zonder handtekening. Het script kopieert ze naar een computer met een certificaat voor codeondertekening dat QNAP aan de auteur van deze handleiding heeft uitgegeven, ondertekent ze daar met qbuild van QDK, controleert de handtekeningen en kopieert de pakketten terug naar build/qpkg/build/. Het certificaat en de privésleutel gaan nooit naar de NAS. De lijst Versies markeert daarna beide pakketten als ondertekend.

Versies: Transmission_4.1.3_arm_64.qpkg en Transmission_4.1.3_x86_64.qpkg, beide gemarkeerd als ondertekend

Je ondertekent met een eigen certificaat. Zet certificate en private_key, en ca_certs voor de keten, naast qpkg/qpkg.cfg of in de map die QPKG_CERT_DIR noemt, en make qpkg ondertekent de pakketten zelf; de .gitignore van het sjabloon houdt de bestanden buiten git. Zonder die bestanden zijn de pakketten niet ondertekend en weigert de testuitrol ze. Wat een NAS met een niet-ondertekend pakket doet, beslist de eigenaar van die NAS in het App Center; deze handleiding raadt niet aan om niet-ondertekende pakketten te installeren.

08Testuitrol en de eerste aanmelding

Film 5:53 · in de run 32 s

Op de pagina van het project installeert Testuitrol (voor beheerders) het x86_64-pakket op deze NAS met qpkg_cli, zoals het App Center een bestand installeert, en de taak wacht tot het App Center bevestigt. Het pakket blijft geïnstalleerd tot je het verwijdert met Verwijderen van deze NAS of in het App Center. De taak duurde 18 s.

De projectweergave na de testuitrol: 4.1.3 geïnstalleerd op deze NAS, Transmission 4.1.3 geïnstalleerd, en de qpkg_cli-regels in het paneel Uitvoer

Open http://<NAS>:9091/ of druk in het App Center op Openen. De pagina van de gate, Choose the web interface password, vraagt om een gebruikersnaam (admin tenzij je die wijzigt) en twee keer om het wachtwoord, minstens 8 tekens. Druk op Start Transmission. De pagina meldt dat Transmission start, daarna neemt transmission-daemon de poort over en vraagt de browser om de gebruikersnaam en het wachtwoord die je koos. De pagina accepteert ze tot 60 minuten na de start van het pakket, vanaf een computer in het eigen netwerk van de NAS, op het IP-adres van de NAS of zijn eigen naam.

Na het aanmelden toont de browser de webinterface van Transmission zonder overdrachten. Het script controleert dat de titel van de pagina Transmission Web Interface is en dat de RPC versie 4.1.3 (838877323f) meldt.

09Het arm_64-pakket

Film 6:20 · in de run 23 s

Een rechtsklik op de rij arm_64 van de lijst Versies opent het menu, en Downloaden slaat Transmission_4.1.3_arm_64.qpkg op (30.290.058 bytes). Het script vergelijkt de grootte van het bestand met die uit de lijst.

Een NAS met x86_64 kan dat pakket niet uitvoeren, dus het script controleert het onder emulatie. scripts/qemu-test.sh pakt de download uit op een Linux-computer waarop qemu-user is geregistreerd en voert het daar uit. Alle 22 controles slagen in 19 s:

  • de programma's zijn statische AArch64-uitvoerbare bestanden, en BusyBox en transmission-daemon draaien;
  • de gate toont de instelpagina, transmission-daemon draait niet voordat het wachtwoord is ingesteld, en een POST zonder de header van de pagina wordt geweigerd (403);
  • na de instelling antwoordt de RPC, session-get meldt versie 4.1.3, een fout wachtwoord wordt geweigerd (401), de webinterface antwoordt, en noch de uitvoer noch settings.json bevat het wachtwoord;
  • transmission-daemon haalt via HTTPS het netinst-.torrent van Debian op, wat de CA-bundel van het pakket vereist, en de torrent wordt daarna verwijderd;
  • een TERM naar de gate beëindigt transmission-daemon, en de gate sluit af met 0.

In deze run heeft geen ARM-NAS het pakket uitgevoerd.

10Gerelateerde handleidingen

  • Je eerste eigen recept behandelt het startrecept, de controle en make qpkg met een klein programma, cmatrix.
  • Een eigen app van je recepten bouwt een App Builder-app die de recepten van een project naast die van de bibliotheek gebruikt.
  • Transmission in het App Center is het gepubliceerde voorbeeld. Het x86_64-pakket komt uit een eerdere run van hetzelfde script op 1.0.0-55; de SHA-256 staat op die pagina.
  • De gebruikershandleiding van Bucket & Code Server IDE beschrijft Nieuw project, de projectweergave, Toolchains, de App Builder en de codeondertekening van een pakket.