Zbuduj Transmission od zera na swoim NAS-ie
Film poniżej pokazuje prawdziwą pracę z Bucket & Code Server IDE 1.0.0-55 na NAS-ie, na którym nic jeszcze nie skonfigurowano. Zaczyna się od ekranu pierwszego uruchomienia. Kończy się podpisanym pakietem QTS z Transmission, który jest zainstalowany i odpowiada w przeglądarce, oraz pobranym pakietem arm_64 tego samego programu. Poradnik omawia film rozdział po rozdziale: co robi człowiek, co widać na ekranie i co sprawdza skrypt.
- Przygotowaniemoduły, środowisko, narzędzia
- ProjektPakiet ze źródeł
- Przepisypięć, brama, usługa
- Budowaniedwie aplikacje, make qpkg
- Instalacjapodpis, wdrożenie testowe, arm_64
Ilustracje to klatki z przebiegu, z panelu i z edytora; tylko kafelki strony Przegląd pochodzą z wersji 1.0.0-62. W każdej klatce adres i nazwa NAS-a są zamaskowane: zamiast nich widać nas.local i NAS.
01Co pokazuje film i czego potrzebujesz
Cała praca trwała 25 min 7 s, a film trwa 6:26. Z każdego oczekiwania dłuższego niż 10 sekund film wycina środek, a w miejscu cięcia podaje, ile naprawdę trwało oczekiwanie. Odcinki dłuższe niż 10 sekund bez kliknięcia są przyspieszone czterokrotnie i oznaczone 4×.
Skrypt steruje przeglądarką: klika w panelu, wpisuje każdy plik gotowego projektu w edytorze i przed każdym kolejnym krokiem sprawdza poprzedni przez API panelu. Panel, edytor, kompilacja i pakiety są prawdziwe. Gotowy projekt to przykład Transmission (BitTorrent client, own recipes) z kategorii Projekty edytora na karcie Przykłady strony Aplikacje; Zobacz kod pokazuje jego pliki.
- NAS z Bucket & Code Server IDE 1.0.0-55 lub nowszym i procesorem x86_64. Pakiet arm_64 powstaje na tym NAS-ie jako kompilacja skrośna.
- Konto administratora w panelu. Na nowej instalacji tworzy je ekran pierwszego uruchomienia.
- Dostęp NAS-a do internetu: NAS pobiera system plików środowiska budowania, toolchainy i źródła przepisów, a każdy pobrany plik sprawdza sumą sha256.
- Do podpisanego pakietu: certyfikat do podpisywania kodu, który QNAP wydał Tobie (sekcja 07).
02Pierwsza konfiguracja
Film 0:00 · w przebiegu 4 s
Nowa instalacja nie ma żadnego konta, więc panel pokazuje tylko jeden ekran: Ustaw hasło administratora dla konta administrator. Wpisz dwa razy hasło o długości co najmniej 10 znaków i naciśnij Ustaw hasło i zaloguj się. Ekran przyjmuje hasło przez 60 minut od startu pakietu i tylko z sieci lokalnej.
Skrypt sprawdza, czy panel zalogował konto administrator i czy nie prosi już o pierwszego administratora.
03Moduły, środowisko, Go, Python i QDK
Film 0:06 · w przebiegu 59 s
Na stronie Przegląd każdy moduł ma swój kafelek; nowa instalacja uruchamia tylko rdzeń. Włącz przełącznikami Git (Forgejo) i Edytor (VS Code w przeglądarce) i poczekaj, aż oba kafelki pokażą działa. Każde konto panelu ma w Forgejo konto o tej samej nazwie, więc kreator nowego projektu proponuje teraz administrator jako właściciela repozytorium.
Na stronie Toolchainy lista środowisk jest pusta, a builder z Ubuntu 24.04 utworzysz jednym przyciskiem, Utwórz to środowisko. Środowisko ubuntu2404-builder pojawia się po 22 sekundach. W katalogu poniżej przycisk Zainstaluj dodaje Go 1.27 i Python 3.13 (karta Środowiska uruchomieniowe) oraz QNAP QDK 2.5.0 (karta QNAP). Go buduje bramę projektu, Python uruchamia narzędzie, które zapisuje listę vendor interfejsu WWW, a QDK tworzy pakiety QTS.
Skrypt sprawdza, czy Git i Edytor działają, czy ubuntu2404-builder jest na liście środowisk i czy go-1.27-x86_64, python-3.13-x86_64 i qdk-2.5.0-x86_64 są zainstalowane.
04Nowy projekt
Film 0:52 · w przebiegu 24 s
Na stronie Projekty kreator Nowy projekt najpierw pyta o szablon. Wybierz Pakiet ze źródeł i nazwij projekt Transmission; nazwa projektu staje się nazwą pakietu. W kroku Usługa wybierz Aplikacja WWW: usługę w tle z portem WWW i przyciskiem Otwórz w App Center. Krok Budowanie nie pyta o środowisko: wiersz ENV w Makefile projektu wskazuje obu aplikacjom builder Ubuntu 24.04. Zostaw wyłączone Zbuduj zaraz po utworzeniu, bo przepis startowy wciąż wskazuje źródło zastępcze i pierwsza kompilacja by się nie udała. Utwórz projekt tworzy repozytorium w Forgejo z pierwszym commitem.
Przycisk Otwórz w edytorze otwiera projekt w edytorze. W jego folderze są recipes/transmission/ (przepis startowy), recipes.txt, Makefile dla dwóch aplikacji, licenses.txt, qpkg/ i scripts/. Skrypt sprawdza, czy potok projektu wymienia aplikacje transmission i transmission-arm64 oraz czy Eksplorator pokazuje recipes.
05Przepisy
Film 1:18 · w przebiegu 12 min 12 s
W bibliotece nie ma przepisu na Transmission ani na jego interfejs WWW, więc projekt ma pięć własnych przepisów w recipes/, każdy w osobnym folderze z recipe.json i build.sh. To te dwa oraz libnatpmp, miniupnpc i libdeflate, które są też w bibliotece; w aplikacjach projektu jego kopie zastępują te z biblioteki. curl, OpenSSL, zlib i libevent pochodzą z biblioteki. Oba pliki objaśnia Twój pierwszy własny przepis.
Przepis startowy · 14 s
W recipes/transmission/recipe.json są: archiwum wydania Transmission 4.1.3 z sumą sha256, potrzebne przepisy (curl, OpenSSL, zlib, libevent, libnatpmp, miniupnpc i libdeflate), linkowanie statyczne i sprawdzenie. build.sh uruchamia CMake dla demona oraz dla transmission-remote, transmission-create, transmission-edit i transmission-show, z wyłączonymi testami, tłumaczeniami i dokumentacją.
Cztery kolejne przepisy · 1 min 17 s
Polecenie Bucket: New recipe z palety poleceń pyta o nazwę i zapisuje oba pliki według wzoru przepisu startowego. Skrypt tworzy w ten sposób libnatpmp 20230423, miniupnpc 2.3.3, libdeflate 1.26 i transmission-web 4.1.3 i uzupełnia w każdym źródło, sha256 i kroki budowania. Transmission linkuje trzy biblioteki jako archiwa statyczne. Interfejs WWW to HTML, CSS i JavaScript, zbudowane z web/ tego samego archiwum wydania.
Lista vendor · 1 min 7 s
esbuild i Sass budują interfejs WWW, a recipes/transmission-web/vendor.txt ustala ich pakiety npm: jeden wiersz na pakiet, z sumą sha256, adresem i miejscem docelowym. Plik powstaje w terminalu edytora z package-lock.json wydania, a narzędzie zgłasza 30 files: 30 checked against the lockfile's sha512. Gotowy plik ma 41 wierszy, z czego 11 to komentarze.
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 zawiera sha256 całego pliku, a kompilacja sprawdza każdy pakiet jeszcze raz przed rozpakowaniem. npm nigdy się nie uruchamia i żaden skrypt instalacyjny nie jest wykonywany.
Lista przepisów, brama, skrypty, licencje i ikony · 6 min 38 s
recipes.txt wymienia to, co budują obie aplikacje: transmission, transmission-web i cacert, czyli pakiet certyfikatów CA, którym curl sprawdza trackery HTTPS. To, czego te przepisy potrzebują, App Builder dodaje sam.
W gate/ jest trgate, program w Go bez zewnętrznych modułów. Domyślnie Transmission nie ma hasła i przyjmuje polecenia RPC tylko z samego NAS-a. Otwarty na sieć bez hasła obsłużyłby każdego, kto dotrze do portu 9091. Dlatego pakiet uruchamia transmission-daemon dopiero po ustawieniu hasła: trgate zajmuje port i pokazuje na nim stronę ustawień, zapisuje hasło w postaci z solą, tak jak przechowuje je Transmission, i dopiero wtedy uruchamia demona na tym samym porcie. Pakiet sam nie tworzy żadnego hasła, więc żadne nie trafia do pliku ani do dzienników systemowych QTS.
scripts/make-qpkg.sh to skrypt pakujący z szablonu, w którym uzupełniono trzy miejsca: KEEP, czyli ścieżki, które pakiet bierze z każdej aplikacji; own_programs, który buduje trgate dla każdej architektury; oraz own_licences, który dodaje teksty licencji, jakich nie da licenses.txt. licenses.txt wymienia licencję każdego przepisu, który niesie pakiet, a LICENSE to licencja własnego kodu projektu. Skrypt filmu wpisuje te dziesięć plików. Trzy ikony w qpkg/icons/ trafiają tam przez Upload... na tym folderze w Eksploratorze.
Usługa · 40 s
W widoku projektu karta Usługa i pakiet ma bloki, z których powstaje skrypt startu i zatrzymania pakietu oraz klucze qpkg.cfg. Zaczynając od ustawienia wstępnego Aplikacja WWW, skrypt filmu dochodzi do dziewięciu bloków: folder danych Transmission na woluminie; konto transmission w grupie arr, które jest właścicielem tego folderu (tryb 700); port WWW 9091; trgate jako demon konta, z 40 sekundami na zatrzymanie; oczekiwanie na port 9091; wpis w dzienniku; oraz sprawdzenia stanu running i port_open. Zakładka Pakiet ustawia nazwę wyświetlaną Transmission, wersję 4.1.3, ścieżkę strony WWW /transmission/web/, port WWW 9091 i 60 sekund oczekiwania QTS przy starcie i przy zatrzymaniu. Zapisz pokazuje plan z różnicami każdego pliku, a Utwórz commit zatwierdza go.
Sprawdzenie · 30 s
Po każdym zapisaniu przepisy projektu są sprawdzane, a uwagi pojawiają się w widoku Problemy. Skrypt czeka na komunikat No problems have been detected in the workspace, a raport projektu wymienia wtedy pięć przepisów i żadnego błędu. make lint daje te same uwagi w terminalu.
Commit i push · 1 min 42 s
W widoku Kontrola źródła skrypt dodaje wszystkie zmiany, zatwierdza je jako Transmission from source i wysyła (push). Zdalnym repozytorium projektu jest jego repozytorium w Forgejo, przez HTTPS, więc edytor pyta o nazwę i hasło konta, wspólne dla Forgejo i panelu. Skrypt czeka, aż wszystkie zmiany będą zatwierdzone i wysłane, po czym pobiera trzy ikony z Forgejo i porównuje je bajt po bajcie z ikonami projektu.
06Budowanie i make qpkg
Film 5:13 · w przebiegu 10 min 1 s
Przycisk Zbuduj w widoku projektu uruchamia Makefile projektu. Makefile buduje dwie aplikacje po kolei w builderze Ubuntu 24.04, obie statycznie: transmission dla procesora x86_64 tego NAS-a i transmission-arm64 dla aarch64, jako kompilację skrośną. Każda aplikacja buduje 13 przepisów w kolejności zależności: cacert, OpenSSL, zlib, nghttp2, zstd, c-ares, curl i libevent z biblioteki, potem libnatpmp, miniupnpc, libdeflate, transmission i transmission-web z projektu. Zajęło to 8 min 1 s. Testy kompilacji skrośnej działają tylko tam, gdzie zarejestrowano qemu-user; w innych miejscach kompilacja zapisuje je jako niewykonane. Skrypt sprawdza, czy ostatnie kompilacje obu aplikacji są zakończone i wskazują projekt Transmission.
Pakiety tworzysz w terminalu edytora, w folderze projektu (2 min 0 s). Go musi być w ścieżce PATH, bo make qpkg buduje trgate dla każdej architektury:
eval "$(bvs use go-1.27-x86_64)" make qpkg
make qpkg pakuje najnowszą udaną kompilację każdej aplikacji za pomocą QDK i zapisuje Transmission_4.1.3_x86_64.qpkg oraz Transmission_4.1.3_arm_64.qpkg w build/qpkg/build/, po około 30 MB. Pakiet zawiera pięć programów Transmission, trgate, interfejs WWW, pakiet certyfikatów CA, BusyBox, który kompilacja dodaje do każdego pakietu, oraz share/licenses/ z plikiem NOTICE i tekstami licencji każdego składnika.
07Podpis
Nie ma go w filmie · w przebiegu 3 s
To jedyny krok poza panelem. Wdrożenie testowe instaluje tylko podpisane pakiety i nigdy nie pomija sprawdzania podpisu przez App Center, a NAS z filmu nie ma plików do podpisywania kodu, więc make qpkg zbudowało oba pakiety bez podpisu. Skrypt kopiuje je na komputer z certyfikatem do podpisywania kodu, który QNAP wydał autorowi tego poradnika, podpisuje je tam za pomocą qbuild z QDK, sprawdza podpisy i kopiuje pakiety z powrotem do build/qpkg/build/. Certyfikat i jego klucz prywatny nigdy nie trafiają na NAS. Lista Wersje oznacza potem oba pakiety jako podpisane.
Ty podpisujesz pakiety własnym certyfikatem. Skopiuj certificate i private_key (oraz ca_certs, jeśli certyfikat ma łańcuch) obok qpkg/qpkg.cfg albo do folderu wskazanego w QPKG_CERT_DIR, a make qpkg sam podpisze pakiety. Plik .gitignore z szablonu nie pozwala dodać tych plików do gita. Bez nich pakiety nie mają podpisu i Wdrożenie testowe je odrzuca. Co NAS zrobi z niepodpisanym pakietem, decyduje jego właściciel w ustawieniach App Center; ten poradnik nie zaleca instalowania niepodpisanych pakietów.
08Wdrożenie testowe i pierwsze logowanie
Film 5:53 · w przebiegu 32 s
Na stronie projektu Wdrożenie testowe (dla administratora) instaluje pakiet x86_64 na tym NAS-ie przez qpkg_cli, tak jak App Center instaluje plik, a zadanie czeka, aż App Center potwierdzi. Pakiet zostaje na NAS-ie, dopóki go nie usuniesz przyciskiem Usuń z tego NAS-a albo w App Center. Zadanie trwało 18 s.
Otwórz http://<NAS>:9091/ albo naciśnij Otwórz w App Center. Strona bramy, Choose the web interface password, prosi o nazwę użytkownika (domyślnie admin) i dwa razy o hasło (co najmniej 8 znaków). Naciśnij Start Transmission. Strona informuje, że Transmission się uruchamia. Potem transmission-daemon przejmuje port, a przeglądarka prosi o wybraną nazwę użytkownika i hasło. Stronę bramy wypełnisz w ciągu 60 minut od startu pakietu, z komputera w sieci lokalnej NAS-a, wchodząc pod adres IP NAS-a albo jego nazwę.
Po zalogowaniu przeglądarka pokazuje interfejs WWW Transmission bez żadnych transferów. Skrypt sprawdza, czy tytuł strony to Transmission Web Interface i czy RPC podaje wersję 4.1.3 (838877323f).
09Pakiet arm_64
Film 6:20 · w przebiegu 23 s
Kliknij prawym przyciskiem myszy wiersz arm_64 na liście Wersje i wybierz Pobierz: przeglądarka zapisze Transmission_4.1.3_arm_64.qpkg (30 290 058 bajtów). Skrypt porównuje rozmiar pliku z rozmiarem z listy.
NAS z procesorem x86_64 nie uruchomi tego pakietu, więc skrypt sprawdza go w emulacji. scripts/qemu-test.sh rozpakowuje pobrany plik na komputerze z Linuksem, na którym zarejestrowano qemu-user, i uruchamia go tam. Wszystkie 22 sprawdzenia przechodzą w 19 s:
- programy to statyczne pliki wykonywalne AArch64, a BusyBox i transmission-daemon się uruchamiają;
- brama udostępnia stronę ustawień, transmission-daemon nie działa przed ustawieniem hasła, a POST bez nagłówka strony jest odrzucany (403);
- po ustawieniu hasła RPC odpowiada,
session-getpodaje wersję 4.1.3, błędne hasło jest odrzucane (401), interfejs WWW odpowiada, a ani wyjście, anisettings.jsonnie zawiera hasła; - transmission-daemon pobiera przez HTTPS plik
.torrentinstalatora sieciowego Debiana, do czego potrzebny jest pakiet certyfikatów CA pakietu, po czym torrent jest usuwany; - sygnał TERM wysłany do bramy kończy transmission-daemon, a brama kończy się kodem 0.
Żaden NAS z procesorem ARM nie uruchomił tego pakietu w tym przebiegu.
10Powiązane poradniki
- Twój pierwszy własny przepis pokazuje przepis startowy, sprawdzenie i
make qpkgna małym programie cmatrix. - Własna aplikacja z Twoich przepisów pokazuje aplikację App Builder, która bierze przepisy z projektu i z biblioteki.
- Transmission w App Center to opublikowany przykład. Jego pakiet x86_64 pochodzi z wcześniejszego przebiegu tego samego skryptu na 1.0.0-55; jego SHA-256 jest na tej stronie.
- Przewodnik Bucket & Code Server IDE opisuje Nowy projekt, widok projektu, Toolchainy, App Builder i podpisywanie kodu pakietu.