rustbox-package-builder
Linux-only builder i repozytorium pakietów dla RustBox. Projekt jest uproszczoną wersją pipeline'u używanego dla RustProxy: nie zawiera FreeBSD, OPNsense ani dodatkowego agenta.
Co buduje
Z jednego commita RustBox dla amd64/x86_64:
- podpisany DEB i repo APT,
- podpisany RPM i repo DNF/YUM,
- opcjonalny osobny RPM dla SUSE/openSUSE i repo Zypper,
- panel WWW repozytorium w stylistyce RustBox,
- publiczny JSON
GET /api/v1/packages.
Builder obserwuje SOURCE_BRANCH. Nowy commit lub zmiana PACKAGING_REVISION uruchamia testy, release build i publikację nowego snapshotu. current jest przełączany atomowo dopiero po udanym pakowaniu i podpisaniu metadanych.
Wymaganie po stronie źródeł RustBox
Repo RustBox musi obsługiwać natywne logowanie plikowe przez log_dir. Pakiet ustawia:
log_dir = "/var/log/rustbox"
Builder celowo przerywa build, jeśli w źródłach nie ma obsługi log_dir. Dzięki temu logi aplikacji trafiają do /var/log/rustbox/rustbox.log, a nie do stdout usługi systemd.
Szybki start
cp .env.example .env
nano .env
./start.sh
Minimalnie ustaw:
SOURCE_REPO=https://git.example.com/rustbox/RustBox.git
SOURCE_BRANCH=master
REPOSITORY_URL=https://repo.example.com
Dla lokalnego HTTP można użyć:
REPOSITORY_URL=http://192.168.1.100
HTTP_PORT=18765
start.sh utworzy trwały klucz GPG w gpg/, zbuduje obrazy i uruchomi:
rustbox-package-builder— watcher + build + publikacja,repository-dashboard— read-only panel/API,repository-http— Nginx udostępniający panel oraz artefakty APT/RPM.
Dane buildera są trwałe w data/.
Domyślne ustawienia builda
POLL_INTERVAL=300
REPO_DISTRIBUTION=stable
REPO_COMPONENT=main
PACKAGE_RELEASE=auto
RUN_LINUX_TESTS=compile
MAX_GLIBC_VERSION=2.34
BUILD_SUSE=1
RELEASE_RETENTION=10
RUN_LINUX_TESTS=compile uruchamia cargo test --release --locked --no-run. Ustaw full, aby uruchamiać wszystkie testy, albo 0, aby je wyłączyć.
Instalacja pakietu RustBox
Pakiet instaluje:
/usr/local/bin/rustbox
/usr/lib/systemd/system/rustbox.service
/etc/rustbox/rustbox.toml
/etc/logrotate.d/rustbox
oraz tworzy:
/var/lib/rustbox rustbox:rustbox 0700
/var/log/rustbox rustbox:rustbox 0750
/etc/rustbox rustbox:rustbox 0750
/etc/rustbox/rustbox.toml ma finalnie rustbox:rustbox 0640 i jest oznaczony jako config|noreplace, więc aktualizacja pakietu nie nadpisuje lokalnej konfiguracji.
systemd
Jednostka używa:
User=rustbox
Group=rustbox
Environment=RUSTBOX_CONFIG=/etc/rustbox/rustbox.toml
WorkingDirectory=/var/lib/rustbox
ExecStart=/usr/local/bin/rustbox
StateDirectory=rustbox
LogsDirectory=rustbox
ProtectSystem=strict
ProtectHome=true
NoNewPrivileges=true
Logi tracing RustBox trafiają do /var/log/rustbox/rustbox.log. StandardOutput=null; StandardError=journal zostaje tylko dla błędów startowych, które wystąpią zanim aplikacja uruchomi własny logger.
logrotate
/etc/logrotate.d/rustbox:
/var/log/rustbox/rustbox.log
jest obracany codziennie i przechowywany przez 7 rotacji, z kompresją i właścicielem rustbox:rustbox.
Domyślna konfiguracja pakietu
host = "0.0.0.0"
port = 3001
environment = "production"
data_dir = "/var/lib/rustbox"
log_dir = "/var/log/rustbox"
session_timeout_hours = 72
remember_me_enabled = true
remember_me_days = 30
imap_host = "localhost"
imap_port = 993
smtp_host = "localhost"
smtp_port = 587
tls_enabled = true
tls_verify = false
max_attachment_size_mb = 50
max_message_size_mb = 100
sieve_port = 4190
sieve_tls_mode = "none"
sieve_allow_insecure_auth = true
sieve_timeout_secs = 10
default_junk_folder = "Spam"
default_theme = "system"
default_interface_skin = "apple-mail"
trusted_proxies = "127.0.0.1,::1"
outgoing_headers = []
pgp_wkd_enabled = true
pgp_hkp_enabled = false
pgp_hkp_url = "https://keys.openpgp.org"
pgp_network_timeout_secs = 10
pgp_max_key_bytes = 1048576
pgp_allow_private_export = true
Repo APT
Panel pokazuje gotowe polecenia. Ręcznie:
curl -fsSL https://repo.example.com/repo-key.gpg \
| sudo gpg --dearmor -o /usr/share/keyrings/rustbox.gpg
echo "deb [signed-by=/usr/share/keyrings/rustbox.gpg] https://repo.example.com/apt stable main" \
| sudo tee /etc/apt/sources.list.d/rustbox.list
sudo apt update
sudo apt install rustbox
Repo DNF/YUM
sudo rpm --import https://repo.example.com/repo-key.gpg
sudo tee /etc/yum.repos.d/rustbox.repo >/dev/null <<'REPO'
[rustbox]
name=RustBox Repository
baseurl=https://repo.example.com/rpm/$basearch
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://repo.example.com/repo-key.gpg
REPO
sudo dnf install rustbox
Repo SUSE/Zypper
sudo rpm --import https://repo.example.com/repo-key.gpg
sudo zypper addrepo --refresh --gpgcheck https://repo.example.com/suse/x86_64/ rustbox
sudo zypper refresh rustbox
sudo zypper install rustbox
Reverse proxy
Nginx buildera nasłuchuje lokalnie na HTTP_PORT (domyślnie 18765). Dla publicznego HTTPS zalecany jest zewnętrzny reverse proxy kierujący na ten port.
Logi buildera
docker compose --env-file .env logs -f rustbox-package-builder
docker compose --env-file .env logs -f repository-http
docker compose --env-file .env logs -f repository-dashboard
Licencja paczki
Dostarczone źródła RustBox nie zawierają autorytatywnego pliku LICENSE; NOTICE.md zaleca weryfikację licencji upstream przed publiczną redystrybucją. Dlatego builder ustawia obecnie metadane pakietu na UNKNOWN, zamiast zgadywać licencję. Przed publicznym repozytorium warto ustalić właściwe oznaczenie i wtedy zmienić je w scripts/prepare-package.sh.
Zależności runtime
Pakiety deklarują jawnie systemowy OpenSSL i GnuPG używane przez RustBox. Dla APT są to libssl3/libssl3t64 i gnupg, dla RHEL/Rocky openssl-libs i gnupg2, a dla SUSE libopenssl3 i gpg2.