Unofficial
Na této stránce
  1. 01Co film ukazuje a co potřebujete
  2. 02První nastavení
  3. 03Moduly, prostředí, Go, Python a QDK
  4. 04Nový projekt
  5. 05Recepty
  6. 06Sestavení a make qpkg
  7. 07Podpis
  8. 08Test deploy a první přihlášení
  9. 09Balíček arm_64
  10. 10Související návody

Sestavte Transmission od nuly na svém NAS

Film níže je skutečný běh Bucket & Code Server IDE 1.0.0-55 na NASu, na kterém ještě nic není nastavené. Začíná na obrazovce prvního spuštění. Končí podepsaným balíčkem QTS Transmission, který je nainstalovaný a odpovídá v prohlížeči, a staženým sestavením arm_64 téhož balíčku. Návod prochází film kapitolu po kapitole: co dělá člověk, co ukazuje obrazovka a co kontroluje skript.

Film · 6:26. Transmission od nuly, od prvního nastavení po balíček arm_64 Bucket & Code Server IDE 1.0.0-55 · NAS s x86_64
  1. Přípravamoduly, prostředí, runtimes
  2. ProjektPackage from source
  3. Receptypět, brána, služba
  4. Sestavenídvě aplikace, make qpkg
  5. Instalacepodpis, Test deploy, arm_64

Obrázky jsou snímky z běhu, z panelu a z editoru; jen dlaždice stránky Overview pocházejí z verze 1.0.0-62. Adresa a název NASu jsou v každém snímku zamaskované a zobrazují se jako nas.local a NAS.

01Co film ukazuje a co potřebujete

Běh trval 25 min 7 s, film trvá 6:26. Z každého čekání delšího než 10 sekund film vystřihne prostředek a střih označí skutečnou délkou čekání. Úsek delší než 10 sekund bez kliknutí přehrává čtyřnásobnou rychlostí a označuje ho 4×.

Skript ovládá prohlížeč: prokliká se panelem, napíše každý soubor hotového projektu do editoru a před dalším krokem každý krok ověří přes API panelu. Panel, editor, sestavení i balíčky jsou skutečné. Hotový projekt je příklad Transmission (BitTorrent client, own recipes) v sekci Editor projects na kartě Examples stránky Apps; View the code ukáže jeho soubory.

  • NAS s Bucket & Code Server IDE 1.0.0-55 nebo novějším a procesorem x86_64. Balíček arm_64 vzniká na tomto NASu křížovým sestavením.
  • Účet správce v panelu. Na nové instalaci ho vytvoří obrazovka prvního spuštění.
  • Přístup NASu k internetu: NAS stahuje kořenový souborový systém sestavovacího prostředí, toolchainy a zdroje receptů a každé stažení ověří podle jeho sha256.
  • Pro podepsaný balíček certifikát pro podepisování kódu, který vám vydala společnost QNAP (oddíl 07).

02První nastavení

Film 0:00 · v běhu 4 s

Nová instalace nemá žádný účet, a proto se panel otevře na jediné obrazovce, Set the administrator password, pro účet administrator. Dvakrát zadejte heslo o nejméně 10 znacích a stiskněte Set the password and sign in. Obrazovka přijímá heslo během 60 minut od spuštění balíčku a jen z místní sítě.

Skript kontroluje, že je panel přihlášen jako administrator a že už nežádá prvního správce.

03Moduly, prostředí, Go, Python a QDK

Film 0:06 · v běhu 59 s

Stránka Overview ukazuje každý modul jako dlaždici a nová instalace spouští jen jádro. Zapněte jejich přepínači Git (Forgejo) a Editor (VS Code v prohlížeči) a počkejte, až obě dlaždice ukážou running. Každý účet panelu má ve Forgejo účet téhož jména, takže průvodce novým projektem nyní nabízí administrator jako vlastníka repozitáře.

Přehled Bucket & Code Server IDE 1.0.0-62 na x86_64: dlaždice Git, SVN & Bucket a Editor běží

Na stránce Toolchains je seznam prostředí prázdný a jediným tlačítkem, Create this environment, nabízí Ubuntu 24.04 builder. Prostředí ubuntu2404-builder je tam po 22 sekundách. V katalogu pod ním Install přidá Go 1.27 a Python 3.13 (karta Runtimes) a QNAP QDK 2.5.0 (karta QNAP). Go sestaví bránu projektu, Python spustí nástroj, který píše seznam vendor webového rozhraní, a QDK zabalí balíčky QTS.

Toolchains: prostředí ubuntu2404-builder a v katalogu QNAP QDK 2.5.0 (qbuild) označený jako nainstalovaný

Skript kontroluje, že Git a Editor běží, že ubuntu2404-builder je v seznamu prostředí a že go-1.27-x86_64, python-3.13-x86_64 a qdk-2.5.0-x86_64 jsou nainstalované.

04Nový projekt

Film 0:52 · v běhu 24 s

Na stránce Projects se New project nejprve zeptá na šablonu. Vyberte Package from source a pojmenujte projekt Transmission; název projektu se stane názvem balíčku. V kroku Service vyberte Web app: službu na pozadí s webovým portem a tlačítkem Open v App Center. Krok Build se na prostředí neptá: řádek ENV v Makefile projektu přiřadí oběma aplikacím Ubuntu 24.04 builder. Nechte Build right after creating vypnuté, protože startovní recept stále ukazuje na zástupný zdroj a první sestavení by selhalo. Create project vytvoří repozitář ve Forgejo s prvním commitem.

New project, krok Progress: Package from source, Transmission; repozitář ve Forgejo a první commit hotové; Open the project, Open in editor a Open in Forgejo

Open in editor otevře projekt v editoru. Jeho složka obsahuje recipes/transmission/ (startovní recept), recipes.txt, Makefile pro dvě aplikace, licenses.txt, qpkg/ a scripts/. Skript kontroluje, že pipeline projektu uvádí aplikace transmission a transmission-arm64 a že Explorer ukazuje recipes.

05Recepty

Film 1:18 · v běhu 12 min 12 s

Knihovna nemá recept pro Transmission ani pro jeho webové rozhraní, a proto má projekt v recipes/ pět vlastních receptů, každý ve složce s recipe.json a build.sh. Jsou to tyto dva a libnatpmp, miniupnpc a libdeflate, které má i knihovna; v aplikacích projektu nahrazují kopie z projektu recepty z knihovny. curl, OpenSSL, zlib a libevent pocházejí z knihovny. Oba soubory vysvětluje Váš první vlastní recept.

Startovní recept · 14 s

recipes/transmission/recipe.json dostane archiv vydání Transmission 4.1.3 s jeho sha256, recepty, které potřebuje (curl, OpenSSL, zlib, libevent, libnatpmp, miniupnpc a libdeflate), statické linkování a kontrolu. build.sh spustí CMake pro démona a pro transmission-remote, transmission-create, transmission-edit a transmission-show, s vypnutými testy, překlady a dokumentací.

Čtyři další recepty · 1 min 17 s

V paletě příkazů se Bucket: New recipe zeptá na název a zapíše oba soubory ze startovního receptu. Skript tak vytvoří libnatpmp 20230423, miniupnpc 2.3.3, libdeflate 1.26 a transmission-web 4.1.3 a v každém vyplní zdroj, sha256 a kroky sestavení. Transmission linkuje tři knihovny jako statické archivy. Webové rozhraní je HTML, CSS a JavaScript, sestavené z web/ téhož archivu vydání.

Editor: složka recipes projektu s libdeflate, libnatpmp, miniupnpc, transmission a transmission-web a otevřený build.sh receptu transmission-web

Seznam vendor · 1 min 7 s

esbuild a Sass sestavují webové rozhraní a recipes/transmission-web/vendor.txt pevně určuje jejich balíčky npm, jeden řádek na balíček se sha256, adresou a cílem. Terminál editoru zapíše soubor z package-lock.json vydání a nástroj hlásí 30 files: 30 checked against the lockfile's sha512. Hotový soubor má 41 řádků, z toho 11 komentářů.

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 obsahuje sha256 celého souboru a sestavení každý balíček před rozbalením znovu ověří. npm se nikdy nespustí a nespustí se žádný instalační skript.

Seznam receptů, brána, skripty, licence a ikony · 6 min 38 s

recipes.txt uvádí, co obě aplikace sestavují: transmission, transmission-web a cacert, svazek certifikačních autorit, proti kterému curl ověřuje trackery HTTPS. App Builder doplní, co každý z nich potřebuje.

gate/ obsahuje trgate, program v Go bez vnějších modulů. Výchozí nastavení Transmission nemá heslo a přijímá volání RPC jen ze samotného NASu. Kdyby byl bez hesla otevřený do sítě, obsloužil by každého, kdo se dostane na port 9091. Balíček proto spustí transmission-daemon, teprve když zvolíte heslo: trgate drží port s nastavovací stránkou, zapíše heslo v osolené podobě, v jaké ho Transmission ukládá, a pak na stejném portu spustí démona. Balíček heslo negeneruje, takže žádné není zapsáno do souboru ani do systémových protokolů QTS.

scripts/make-qpkg.sh je balicí skript šablony se třemi vyplněnými místy: KEEP, cesty, které balíček přebírá z každé aplikace; own_programs, který sestaví trgate pro každou architekturu; a own_licences, který přidá texty licencí, jaké licenses.txt dodat nemůže. licenses.txt uvádí licenci každého receptu, který balíček obsahuje, a LICENSE je licence vlastního kódu projektu. Skript těchto deset souborů napíše. Tři ikony v qpkg/icons/ se tam dostanou přes Upload... na této složce v Exploreru.

Služba · 40 s

V zobrazení projektu karta Service and package obsahuje bloky, které zapisují spouštěcí a zastavovací skript balíčku, a klíče qpkg.cfg. Skript začne od předvolby Web app a skončí u devíti bloků: datová složka Transmission na svazku; účet transmission ve skupině arr, který tuto složku vlastní (režim 700); webový port 9091; trgate jako démon účtu se 40 sekundami na zastavení; čekání na port 9091; řádek protokolu; a kontroly stavu running a port_open. Záložka Package nastaví zobrazovaný název Transmission, verzi 4.1.3, cestu webové stránky /transmission/web/, webový port 9091 a 60 sekund čekání QTS při spuštění a při zastavení. Save ukáže plán s diffem každého souboru a Commit ho uloží jako commit.

Karta Service and package, záložka Package: zobrazovaný název Transmission, verze 4.1.3, cesta webové stránky /transmission/web/, webový port 9091, 60 sekund při spuštění a při zastavení

Kontrola · 30 s

Každé uložení zkontroluje recepty projektu a nálezy vypíše v zobrazení Problems. Skript čeká na No problems have been detected in the workspace a zpráva projektu pak uvádí pět receptů a žádnou chybu. make lint dá stejné nálezy v terminálu.

Commit a push · 1 min 42 s

Ve Source Control skript připraví všechny změny, potvrdí je jako Transmission from source a odešle (push). Vzdáleným repozitářem projektu je jeho repozitář ve Forgejo přes HTTPS, takže editor požádá o jméno a heslo účtu, které Forgejo sdílí s panelem. Skript počká, až nezbude nic nepotvrzeného a žádný commit nebude napřed před vzdáleným repozitářem, pak ze Forgejo načte zpět tři ikony a porovná je bajt po bajtu s ikonami projektu.

06Sestavení a make qpkg

Film 5:13 · v běhu 10 min 1 s

Build v zobrazení projektu spustí Makefile projektu. Obě aplikace sestaví jednu po druhé v prostředí Ubuntu 24.04 builder, obě staticky: transmission pro procesor x86_64 tohoto NASu a transmission-arm64 pro aarch64, křížovým sestavením. Každá aplikace sestaví 13 receptů v pořadí závislostí: cacert, OpenSSL, zlib, nghttp2, zstd, c-ares, curl a libevent z knihovny, potom libnatpmp, miniupnpc, libdeflate, transmission a transmission-web z projektu. Trvalo to 8 min 1 s. Kontroly křížového sestavení běží jen tam, kde je zaregistrován qemu-user; jinde je sestavení zapíše jako nespuštěné. Skript kontroluje, že poslední sestavení obou aplikací jsou hotová a uvádějí projekt Transmission.

Zobrazení projektu po sestavení: Build hotový a panel Output s řádky the App Builder built transmission a the App Builder built transmission-arm64

Balíčky vznikají v terminálu editoru ve složce projektu (2 min 0 s). Go musí být v cestě (PATH), protože make qpkg sestavuje trgate pro každou architekturu:

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

make qpkg zabalí pomocí QDK nejnovější úspěšné sestavení každé aplikace a zapíše Transmission_4.1.3_x86_64.qpkg a Transmission_4.1.3_arm_64.qpkg do build/qpkg/build/, každý asi 30 MB. Balíček obsahuje pět programů Transmission, trgate, webové rozhraní, svazek certifikačních autorit, BusyBox, který sestavení přidává do každého balíčku, a share/licenses/ se souborem NOTICE a texty licencí každé součásti.

07Podpis

Není ve filmu · v běhu 3 s

Je to jediný krok mimo panel. Test deploy instaluje jen podepsané balíčky a nikdy nepřeskakuje kontrolu podpisu v App Center. NAS z tohoto běhu přitom nemá žádné soubory pro podepisování kódu, takže make qpkg sestavil oba balíčky nepodepsané. Skript je zkopíruje na počítač s certifikátem pro podepisování kódu, který společnost QNAP vydala autorovi tohoto návodu, podepíše je tam pomocí qbuild z QDK, zkontroluje podpisy a zkopíruje balíčky zpět do build/qpkg/build/. Certifikát a jeho soukromý klíč se na NAS nikdy nedostanou. Seznam Versions pak označí oba balíčky jako podepsané.

Versions: Transmission_4.1.3_arm_64.qpkg a Transmission_4.1.3_x86_64.qpkg, oba označené jako podepsané

Podepisujete vlastním certifikátem. Uložte certificate a private_key a pro řetězec i ca_certs vedle qpkg/qpkg.cfg nebo do složky, kterou uvádí QPKG_CERT_DIR, a make qpkg balíčky podepíše sám; .gitignore šablony tyto soubory drží mimo git. Bez nich jsou balíčky nepodepsané a Test deploy je odmítne. Co NAS s nepodepsaným balíčkem udělá, rozhoduje jeho vlastník v App Center. Tento návod instalaci nepodepsaných balíčků nedoporučuje.

08Test deploy a první přihlášení

Film 5:53 · v běhu 32 s

Na stránce projektu Test deploy (pro správce) nainstaluje balíček x86_64 na tento NAS pomocí qpkg_cli, tak jako App Center instaluje soubor, a úloha čeká, až App Center potvrdí. Balíček zůstane nainstalovaný, dokud ho neodeberete tlačítkem Remove from this NAS nebo v App Center. Úloha trvala 18 s.

Zobrazení projektu po Test deploy: 4.1.3 nainstalováno na tomto NAS, Transmission 4.1.3 nainstalovaný a řádky qpkg_cli v panelu Output

Otevřete http://<NAS>:9091/ nebo stiskněte Open v App Center. Stránka brány, Choose the web interface password, žádá o uživatelské jméno (admin, pokud ho nezměníte) a dvakrát o heslo, nejméně 8 znaků. Stiskněte Start Transmission. Stránka oznámí, že se Transmission spouští, pak port převezme transmission-daemon a prohlížeč požádá o zvolené uživatelské jméno a heslo. Stránka je přijímá během 60 minut od spuštění balíčku, z počítače v síti NASu, na IP adrese NASu nebo na jeho vlastním názvu.

Po přihlášení prohlížeč ukáže webové rozhraní Transmission bez přenosů. Skript kontroluje, že titulek stránky je Transmission Web Interface a že RPC hlásí verzi 4.1.3 (838877323f).

09Balíček arm_64

Film 6:20 · v běhu 23 s

Kliknutí pravým tlačítkem na řádek arm_64 v seznamu Versions otevře jeho nabídku a Download uloží Transmission_4.1.3_arm_64.qpkg (30 290 058 bajtů). Skript porovná velikost souboru s velikostí v seznamu.

NAS s x86_64 tento balíček spustit nemůže, a proto ho skript ověří v emulaci. scripts/qemu-test.sh rozbalí stažený soubor na počítači s Linuxem, kde je zaregistrován qemu-user, a spustí ho tam. Všech 22 kontrol projde za 19 s:

  • programy jsou statické spustitelné soubory AArch64 a BusyBox i transmission-daemon se spustí;
  • brána obsluhuje nastavovací stránku, transmission-daemon před nastavením hesla neběží a POST bez hlavičky stránky je odmítnut (403);
  • po nastavení RPC odpovídá, session-get hlásí verzi 4.1.3, špatné heslo je odmítnuto (401), webové rozhraní odpovídá a ani výstup, ani settings.json heslo neobsahuje;
  • transmission-daemon stáhne přes HTTPS soubor .torrent instalátoru netinst Debianu, k čemuž je potřeba svazek certifikačních autorit balíčku, a torrent je poté odstraněn;
  • TERM zaslaný bráně ukončí transmission-daemon a brána skončí s kódem 0.

V tomto běhu balíček na žádném NAS s ARM neběžel.

10Související návody