RustProxy unified package builder
Jeden kontener buildera buduje z jednego commita RustProxy:
- Linux x86_64: DEB + podpisane repo APT,
- Linux x86_64: RPM + podpisane repo DNF/YUM,
- FreeBSD x86_64: cross-build bez VM FreeBSD,
- OPNsense:
os-rustproxy-<version>_<revision>.pkg+ statyczne repopkg.
Nie ma Docker-in-Docker, SCP ani osobnego watchera repo OPNsense. FreeBSD sysroot, clang/lld i Rust target są częścią głównego obrazu buildera. OPNsense dostaje osobny publiczny adres, ale wszystkie artefakty są publikowane jednym atomowym przełączeniem repository/current.
Szybki start
cp .env.example .env
nano .env
./start.sh
Minimalnie ustaw:
SOURCE_REPO=https://git.linuxiarz.pl/gru/RustProxy.git
REPOSITORY_URL=http://192.168.1.100
OPNSENSE_REPOSITORY_URL=https://opn-rustproxy.linuxiarz.pl
Dla http:// bez portu start.sh dopisze domyślny port. Dla https:// zakładany jest zewnętrzny reverse proxy/TLS.
Domyślne lokalne porty:
APT/RPM: 18765 -> nginx :8080
OPNsense: 18766 -> nginx :8081
Przykładowo reverse proxy może kierować:
packages.example.net -> http://builder:18765
opn-rustproxy.linuxiarz.pl -> http://builder:18766
Pipeline
Git RustProxy
|
+-> cargo test
+-> Linux cargo build
| +-> DEB
| +-> RPM
|
+-> izolowana kopia źródła
+-> poprawki FreeBSD/OPNsense
+-> x86_64-unknown-freebsd
+-> os-rustproxy.pkg
|
+-> APT metadata
+-> RPM metadata
+-> OPNsense pkg metadata
+-> walidacja
+-> atomic switch repository/current
Jeżeli którykolwiek etap się nie powiedzie, publiczne repozytoria nie są przełączane.
OPNsense repo
Publiczny root OPNSENSE_REPOSITORY_URL zawiera m.in.:
/
├── meta.conf
├── packagesite.pkg
├── data.pkg
├── RustProxy.conf
├── BUILD-INFO.txt
├── SHA256
├── os-rustproxy-latest.pkg
└── 26.7/
└── amd64/
├── os-rustproxy-0.20.0_123.pkg
└── ...
RustProxy.conf jest generowany automatycznie i wskazuje na OPNSENSE_REPOSITORY_URL. Repo OPNsense jest obecnie niesygnowane, zgodnie z wcześniejszym builderem/repo (signature_type: "none"). Repo APT/RPM pozostaje podpisane GPG.
Ręczna konfiguracja na OPNsense:
mkdir -p /usr/local/etc/pkg/repos
fetch -o /usr/local/etc/pkg/repos/RustProxy.conf \
https://opn-rustproxy.linuxiarz.pl/RustProxy.conf
pkg update -f
pkg install os-rustproxy
Konfiguracja
Najważniejsze zmienne:
SOURCE_REPO=https://git.linuxiarz.pl/gru/RustProxy.git
SOURCE_BRANCH=master
REPOSITORY_URL=http://192.168.1.100
HTTP_PORT=18765
OPNSENSE_REPOSITORY_URL=https://opn-rustproxy.linuxiarz.pl
OPNSENSE_HTTP_PORT=18766
POLL_INTERVAL=300
PACKAGE_RELEASE=auto
MAX_GLIBC_VERSION=2.34
RUN_LINUX_TESTS=1
OPNSENSE_ABI=26.7
OPNSENSE_RETENTION=10
FREEBSD_RELEASE=15.1-RELEASE
FREEBSD_ABI=FreeBSD:15:amd64
FREEBSD_ARCH=freebsd:15:x86:64
FREEBSD_RUST_TOOLCHAIN=1.88.0
APPLY_FREEBSD_PATCHES=1
OPNSENSE_RETENTION=10 zachowuje ostatnie 10 wersji pakietu dla danej serii/architektury OPNsense. 0 wyłącza usuwanie starych wersji.
FreeBSD cross-build
Obraz buildera pobiera i weryfikuje base.txz dla FREEBSD_RELEASE, a następnie używa:
/opt/freebsd-sysroot
clang / lld / llvm
Rust target x86_64-unknown-freebsd
Poprawki tylko dla builda OPNsense są w:
opnsense/patches/<wersja-RustProxy>/*.patch
Są nakładane na izolowaną kopię źródła. Build Linux nie jest modyfikowany.
Kod pluginu OPNsense znajduje się w:
opnsense/plugin/
Dane
data/
├── aptly/
├── cargo/
├── packages/
│ ├── deb/
│ └── rpm/x86_64/
├── repository/
│ ├── current -> releases/<build>
│ ├── apt -> current/apt
│ ├── rpm -> current/rpm
│ ├── opnsense -> current/opnsense
│ └── releases/
├── state/
└── work/
Jeden release zawiera jednocześnie apt/, rpm/ i opnsense/. Dzięki temu oba publiczne adresy przechodzą na nową wersję jednocześnie.
HTTP i logi
Jeden kontener nginx obsługuje oba repozytoria na dwóch lokalnych portach:
docker compose logs -f rust-package-builder
docker compose logs -f repository-http
curl -f http://127.0.0.1:18765/healthz
curl -f http://127.0.0.1:18766/healthz
Testy statyczne
./tests/static.sh
./tests/check-rustproxy-source.sh /sciezka/do/RustProxy
Klucz GPG
./start.sh generuje trwały klucz GPG przy pierwszym uruchomieniu. Katalogu gpg/ nie należy usuwać po publikacji APT/RPM.