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.
- Přípravamoduly, prostředí, runtimes
- ProjektPackage from source
- Receptypět, brána, služba
- Sestavenídvě aplikace, make qpkg
- 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.
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.
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.
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í.
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.
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.
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é.
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.
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-gethlásí verzi 4.1.3, špatné heslo je odmítnuto (401), webové rozhraní odpovídá a ani výstup, anisettings.jsonheslo neobsahuje; - transmission-daemon stáhne přes HTTPS soubor
.torrentinstalá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
- Váš první vlastní recept provede na malém programu cmatrix startovním receptem, kontrolou a
make qpkg. - Vlastní aplikace z vašich receptů sestaví aplikaci App Builderu, která bere recepty projektu vedle receptů knihovny.
- Transmission v App Center je zveřejněný příklad. Jeho balíček x86_64 pochází z dřívějšího běhu téhož skriptu na 1.0.0-55; jeho SHA-256 je na této stránce.
- Uživatelská příručka Bucket & Code Server IDE popisuje New project, zobrazení projektu, Toolchains, App Builder a podepisování kódu balíčku.