# OPNsense / FreeBSD pkg repo daemon Lekki daemon na Alpine. Obserwuje `/repo`, odczytuje manifest z paczek FreeBSD `.pkg`, automatycznie wersjonuje `latest.pkg`, pilnuje retencji i wystawia repo przez HTTP. ## Start ```sh cp .env.example .env docker compose up -d --build docker compose logs -f ``` Repo: ```text http://HOST:8478/ ``` ## Upload z buildu Mozesz zawsze wysylac ten sam plik: ```sh scp latest.pkg user@repo-host:/opt/opnsense-pkg-repo/repo/latest.pkg ``` Daemon czyta z paczki: ```text +COMPACT_MANIFEST ``` i pola: ```text name version ``` Przyklad: ```text latest.pkg ``` z manifestem: ```json {"name":"myapp","version":"1.4.7"} ``` zostanie automatycznie przemianowany na: ```text myapp-1.4.7.pkg ``` Nie musisz znac wersji po stronie CI. ## Retencja Domyslnie daemon zachowuje 10 najnowszych plikow dla kazdej nazwy pakietu: ```env RETENTION=10 ``` Np.: ```text myapp-1.4.10.pkg ... myapp-1.4.1.pkg ``` Starsze sa automatycznie usuwane. Kolejnosc retencji jest wedlug czasu pojawienia sie pliku w repo, a nie leksykograficznego sortowania numeru wersji. Bez retencji: ```env RETENTION=0 ``` ## Pozostale ENV ```env PORT=8080 POLL_INTERVAL=2 STABLE_SECONDS=2 LATEST_NAMES=latest.pkg ``` Mozesz miec kilka nazw uploadowych: ```env LATEST_NAMES=latest.pkg,myapp-latest.pkg ``` ## OPNsense `/usr/local/etc/pkg/repos/myrepo.conf`: ```ucl MyRepo: { url: "http://HOST:8478", enabled: yes, signature_type: "none" } ``` Potem: ```sh pkg update -f pkg search myapp pkg install -r MyRepo myapp ``` ## Logi ```sh docker compose logs -f ``` Przy nowym buildzie zobaczysz np.: ```text [ingest] latest.pkg -> myapp-1.4.7.pkg [retention] usunieto myapp-1.3.2.pkg (myapp, limit=10) [repo] przebudowano katalog: 10 pakiet(ow) ```