Nieoficjalne
Na tej stronie
  1. 01Co pokazuje film i czego potrzebujesz
  2. 02Pierwsza konfiguracja
  3. 03Moduły, środowisko, Go, Python i QDK
  4. 04Nowy projekt
  5. 05Przepisy
  6. 06Budowanie i make qpkg
  7. 07Podpis
  8. 08Wdrożenie testowe i pierwsze logowanie
  9. 09Pakiet arm_64
  10. 10Powiązane poradniki

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.

Film · 6:26. Transmission od zera, od pierwszej konfiguracji do pakietu arm_64 Bucket & Code Server IDE 1.0.0-55 · NAS z procesorem x86_64
  1. Przygotowaniemoduły, środowisko, narzędzia
  2. ProjektPakiet ze źródeł
  3. Przepisypięć, brama, usługa
  4. Budowaniedwie aplikacje, make qpkg
  5. 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.

Przegląd Bucket & Code Server IDE 1.0.0-62 na x86_64: kafelki Git, SVN & Bucket i Edytor działają

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.

Toolchainy: środowisko ubuntu2404-builder oraz w katalogu QNAP QDK 2.5.0 (qbuild) oznaczony jako zainstalowany

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.

Nowy projekt, krok Postęp: Pakiet ze źródeł, Transmission; repozytorium w Forgejo i pierwszy commit gotowe; Otwórz projekt, Otwórz w edytorze i Otwórz w Forgejo

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.

Edytor: folder recipes projektu z libdeflate, libnatpmp, miniupnpc, transmission i transmission-web oraz otwarty build.sh przepisu transmission-web

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.

Karta Usługa i pakiet, zakładka Pakiet: nazwa wyświetlana Transmission, wersja 4.1.3, ścieżka strony WWW /transmission/web/, port WWW 9091, 60 sekund przy starcie i przy zatrzymaniu

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.

Widok projektu po kompilacji: kompilacja zakończona i panel Dane wyjściowe z wierszami the App Builder built transmission oraz the App Builder built transmission-arm64

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.

Wersje: Transmission_4.1.3_arm_64.qpkg i Transmission_4.1.3_x86_64.qpkg, oba oznaczone 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.

Widok projektu po wdrożeniu testowym: 4.1.3 zainstalowane na tym NAS-ie, Transmission 4.1.3 zainstalowany i wiersze qpkg_cli w panelu Dane wyjściowe

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-get podaje wersję 4.1.3, błędne hasło jest odrzucane (401), interfejs WWW odpowiada, a ani wyjście, ani settings.json nie zawiera hasła;
  • transmission-daemon pobiera przez HTTPS plik .torrent instalatora 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 qpkg na 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.