This commit is contained in:
gru committed 2026-10-03 00:27:09 +01:00
commit 5e23e9af02
240 files changed
+99957

No files matched your search

+60
View File
@@ -0,0 +1,60 @@
# Debian packaging
This directory builds the `rustproxy` binary package for RustProxy 0.24.5.
The package installs:
- `/usr/bin/rust-proxy`
- `/etc/rustproxy/environment` (conffile)
- `rustproxy.service`
- logrotate policy for `/var/log/rustproxy`
- Grafana dashboard under `/usr/share/rustproxy/grafana/`
The service runs as the unprivileged `rustproxy` system user. `CAP_NET_BIND_SERVICE`
is the only ambient/bounding capability, allowing ports 80/443 without root. The
administration listener is loopback-only by default. systemd and `postinst` both
ensure `/var/lib/rustproxy` and `/var/log/rustproxy` exist with mode `0750`.
## Build the `.deb`
Install build prerequisites (including Rust 1.88+), then from the source tree:
```bash
./debian/build-package.sh
```
The script uses the committed `Cargo.lock`, runs `cargo fetch --locked`, invokes
`dpkg-buildpackage -us -uc -b`, and copies generated package artifacts to `dist/`.
If dependencies are pre-fetched/vendored, set `CARGO_NET_OFFLINE=true` for an
offline Cargo build.
## Repository for rustproxy.linuxiarz.pl
Install repository tooling:
```bash
apt install dpkg-dev apt-utils gzip gnupg
```
Build the repository:
```bash
RUSTPROXY_REPO_GPG_KEY='<fingerprint-or-key-id>' ./debian/build-repository.sh
```
Publish the generated `repository/` directory at the web root of
`https://rustproxy.linuxiarz.pl/`. Export the public repository key separately and
install it on clients as `/usr/share/keyrings/rustproxy.gpg`, then use:
```text
deb [signed-by=/usr/share/keyrings/rustproxy.gpg] https://rustproxy.linuxiarz.pl stable main
```
The repository script emits `Packages`, maximum-gzip `Packages.gz`, `Release`, and,
when a GPG key is configured, `Release.gpg` plus `InRelease`.
## Logs
Structured file logging defaults to `/var/log/rustproxy/access.jsonl` when enabled
in RustProxy. Logrotate runs daily, keeps at most three days, compresses immediately
with `gzip -9`, and uses `copytruncate` because RustProxy owns the open log file.
Systemd journal output remains independent of this JSONL rotation.
Vendored Executable
+26
View File
@@ -0,0 +1,26 @@
#!/bin/sh
set -eu
ROOT=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd)
cd "$ROOT"
for tool in cargo rustc dpkg-buildpackage; do
command -v "$tool" >/dev/null 2>&1 || { echo "Missing build tool: $tool" >&2; exit 2; }
done
RUSTC_VERSION=$(rustc --version | awk '{print $2}')
if ! dpkg --compare-versions "$RUSTC_VERSION" ge 1.88; then
echo "RustProxy requires rustc >= 1.88 (found $RUSTC_VERSION)" >&2
exit 2
fi
# Fetch against Cargo.lock before the Debian build. Use CARGO_NET_OFFLINE=true
# when the registry/cache has already been prepared or dependencies are vendored.
cargo fetch --locked
dpkg-buildpackage -us -uc -b
mkdir -p dist
find .. -maxdepth 1 -type f \( -name 'rustproxy_0.24.5_*.deb' -o -name 'rustproxy_0.24.5_*.changes' -o -name 'rustproxy_0.24.5_*.buildinfo' \) \
-exec cp -f {} dist/ \;
echo "Packages copied to $ROOT/dist"
Vendored Executable
+44
View File
@@ -0,0 +1,44 @@
#!/bin/sh
set -eu
ROOT=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd)
REPO=${1:-"$ROOT/repository"}
DEBS=${2:-"$ROOT/dist"}
ARCH=${RUSTPROXY_REPO_ARCH:-$(dpkg --print-architecture)}
CODENAME=${RUSTPROXY_REPO_CODENAME:-stable}
COMPONENT=${RUSTPROXY_REPO_COMPONENT:-main}
for tool in dpkg-scanpackages apt-ftparchive gzip; do
command -v "$tool" >/dev/null 2>&1 || { echo "Missing repository tool: $tool" >&2; exit 2; }
done
POOL="$REPO/pool/$COMPONENT/r/rustproxy"
BINARY="$REPO/dists/$CODENAME/$COMPONENT/binary-$ARCH"
mkdir -p "$POOL" "$BINARY"
find "$DEBS" -maxdepth 1 -type f -name 'rustproxy_*.deb' -exec cp -f {} "$POOL/" \;
cd "$REPO"
dpkg-scanpackages --arch "$ARCH" "pool/$COMPONENT" /dev/null > "dists/$CODENAME/$COMPONENT/binary-$ARCH/Packages"
gzip -9 -n -c "dists/$CODENAME/$COMPONENT/binary-$ARCH/Packages" > "dists/$CODENAME/$COMPONENT/binary-$ARCH/Packages.gz"
apt-ftparchive \
-o APT::FTPArchive::Release::Origin=RustProxy \
-o APT::FTPArchive::Release::Label=RustProxy \
-o APT::FTPArchive::Release::Suite="$CODENAME" \
-o APT::FTPArchive::Release::Codename="$CODENAME" \
-o APT::FTPArchive::Release::Architectures="$ARCH" \
-o APT::FTPArchive::Release::Components="$COMPONENT" \
release "dists/$CODENAME" > "dists/$CODENAME/Release"
if [ -n "${RUSTPROXY_REPO_GPG_KEY:-}" ]; then
command -v gpg >/dev/null 2>&1 || { echo "RUSTPROXY_REPO_GPG_KEY is set but gpg is missing" >&2; exit 2; }
gpg --batch --yes --local-user "$RUSTPROXY_REPO_GPG_KEY" --armor --detach-sign \
--output "dists/$CODENAME/Release.gpg" "dists/$CODENAME/Release"
gpg --batch --yes --local-user "$RUSTPROXY_REPO_GPG_KEY" --clearsign \
--output "dists/$CODENAME/InRelease" "dists/$CODENAME/Release"
else
rm -f "dists/$CODENAME/Release.gpg" "dists/$CODENAME/InRelease"
echo "WARNING: repository is unsigned. Set RUSTPROXY_REPO_GPG_KEY for production." >&2
fi
echo "Repository ready: $REPO"
echo "Publish this directory as https://rustproxy.linuxiarz.pl/"
+197
View File
@@ -0,0 +1,197 @@
rustproxy (0.24.5) stable; urgency=medium
* Fix empty HTTP/3 request-body forwarding to HTTP/1.1 upstreams, including DELETE.
* Preserve streaming for non-empty H3 request bodies and existing H1/H2 behavior.
-- RustProxy Release <release@localhost> Fri, 02 Oct 2026 23:27:00 +0200
rustproxy (0.24.4) stable; urgency=medium
* Disable Transparent Huge Pages locally for the RustProxy Linux process before Tokio startup.
* Keep host THP policy unchanged and retain existing glibc arena/trim tuning.
-- RustProxy Release <release@localhost> Fri, 02 Oct 2026 15:20:00 +0200
rustproxy (0.24.3) stable; urgency=medium
* Reduce glibc allocator retention and transformation-path temporary allocations.
* Move HTTP/3 enablement to Listeners while retaining dedicated QUIC tuning.
* Hide unsupported process diagnostics dynamically in the dashboard.
-- RustProxy Release <release@localhost> Fri, 02 Oct 2026 09:45:00 +0200
rustproxy (0.24.2) stable; urgency=medium
* Version-only release bump; no functional changes from 0.24.1.
-- RustProxy Release <release@localhost> Thu, 01 Oct 2026 22:11:00 +0200
rustproxy (0.24.1) stable; urgency=medium
* Use shared cross-platform statistics APIs and expose more portable metrics.
* Add authenticated runtime path metadata and platform-aware installed-data discovery.
* Move Logging into Settings while retaining legacy navigation compatibility.
-- RustProxy Release <release@localhost> Thu, 01 Oct 2026 21:00:00 +0200
rustproxy (0.24.0) stable; urgency=medium
* Graceful HTTP/2 GOAWAY/drain shutdown with independent idle, lifetime and drain limits.
* Extract system statistics backends and add BSD platform support plus process platform reporting.
-- RustProxy Release <release@localhost> Thu, 01 Oct 2026 18:46:00 +0200
rustproxy (0.23.3) stable; urgency=medium
* Add opt-in per-vhost legacy WebSocket compatibility for older appliances.
* Align legacy WebSocket Origin/Host and tolerate legacy 101 response framing.
-- RustProxy Maintainers <noreply@localhost> Thu, 01 Oct 2026 00:00:00 +0000
rustproxy (0.23.2) stable; urgency=medium
* Add configurable live-chart history windows for Cache and Transformation.
* Fix HTTPS administration transport handling for --livelogs and local CLI API calls.
-- RustProxy Maintainers <root@localhost> Thu, 01 Oct 2026 11:36:19 +0200
rustproxy (0.23.1) stable; urgency=medium
* Add collapsible full-width live Cache and Transform activity charts.
* Update package and administration UI identity to 0.23.1.
-- RustProxy Maintainers <root@localhost> Thu, 01 Oct 2026 11:11:00 +0200
rustproxy (0.23.0) stable; urgency=medium
* Add HTTP/1.1 Upgrade: h2c and external certificate hot-deploy/reload support.
-- RustProxy Maintainers <root@localhost> Thu, 01 Oct 2026 08:30:00 +0200
rustproxy (0.22.2) stable; urgency=medium
* Add replay-safe backend failover retry with bounded policy and metrics.
* Correct explicit HTTP/2 upstream request handling and add H2 regression coverage.
* Add vhost retry controls to the administration UI and OpenAPI schema.
-- RustProxy Maintainers <root@localhost> Thu, 01 Oct 2026 07:10:00 +0200
rustproxy (0.22.1) stable; urgency=medium
* Add HTTP/2 RFC 8441 WebSocket transport and opt-in h2c prior-knowledge listeners.
* Add active tunnel inventory/kill administration with audit and H1/H2/H3 metrics.
* Move selective PURGE/BAN workflows into modal UI and fix null-safe operation feedback.
-- RustProxy Maintainers <root@localhost> Wed, 30 Sep 2026 22:45:00 +0200
rustproxy (0.22.0) stable; urgency=medium
* Add cache request collapsing, single-range HTTP 206 reuse, selective PURGE/BAN,
configurable stale-if-error classes and proactive cache refresh.
* Extend the authenticated cache API, dashboard, metrics and regression coverage.
-- RustProxy Maintainers <root@localhost> Wed, 30 Sep 2026 21:00:00 +0200
rustproxy (0.21.0) stable; urgency=medium
* Add sharded Cold Cache with bounded asynchronous garbage collection.
* Implement RFC 5861 stale handling and request max-stale semantics.
* Add per-vhost static-response transformations before cache/compression.
-- RustProxy Maintainers <root@localhost> Tue, 29 Sep 2026 21:25:00 +0200
rustproxy (0.20.0) stable; urgency=medium
* Split Certificates into Installed, Renewal and Generate tabs.
* Improve ACME renewal status and failed-operation messages.
* Show exact private Certbot log directories for certificate failures.
-- RustProxy Maintainers <root@localhost> Tue, 29 Sep 2026 12:14:00 +0200
rustproxy (0.19.4) stable; urgency=medium
* Align Docker-vhost Aliases with neighboring form controls.
* Preserve sub-0.1 KiB/s backend traffic rendering.
* Add cache-domain filtering by effective cache state.
-- RustProxy Maintainers <root@localhost> Tue, 29 Sep 2026 11:30:00 +0200
rustproxy (0.19.3) stable; urgency=medium
* Preserve exact Settings location across re-login and browser refresh.
* Add shared saving state, field-focused validation and unsaved-tab markers.
* Keep certificate import file selections after failed saves.
-- RustProxy Maintainers <root@localhost> Tue, 29 Sep 2026 09:32:00 +0200
rustproxy (0.19.2) stable; urgency=medium
* Improve default-response status labels and Live-log buffering.
* Polish checkbox/alias layout and backend rate formatting.
* Keep local pages non-cacheable and allow guarded vhost-ID renames.
-- RustProxy Maintainers <root@localhost> Mon, 28 Sep 2026 23:26:00 +0200
rustproxy (0.19.1) stable; urgency=medium
* Fix Default responses saves and isolate cache objects by frontend scheme.
* Retain on-demand Live Logs history and polish traffic/checkbox/Docker Advanced UI.
* Remove stale screenshots and update documentation/release contracts.
-- RustProxy Maintainers <root@localhost> Mon, 28 Sep 2026 22:14:00 +0200
rustproxy (0.19.0) stable; urgency=medium
* Persist per-admin Live Logs column visibility in SQLite while keeping full JSON exports.
* Fix disabled backend TLS verification for legacy X.509 certificates and retain detailed upstream diagnostics.
* Remove the duplicate version label from the top-right dashboard toolbar.
-- RustProxy Maintainers <root@localhost> Mon, 28 Sep 2026 14:55:00 +0200
rustproxy (0.18.8) stable; urgency=medium
* Add Docker-vhost alias chips plus redirect, WebSocket and cache controls.
* Add a Docker-agent default ACL profile and remove the Overview codec explainer.
-- RustProxy Maintainers <root@localhost> Mon, 28 Sep 2026 12:43:00 +0200
rustproxy (0.18.7) stable; urgency=medium
* Polish Overview network charts and collapse response-time history by default.
* Align expanded Docker-vhost routing and ACL controls.
-- RustProxy Maintainers <root@localhost> Mon, 28 Sep 2026 12:05:00 +0200
rustproxy (0.18.6) stable; urgency=medium
* Fix compression/protocol telemetry and improve Docker/backend dashboard UX.
* Remove the Open proxy shortcut and make Compact density materially tighter.
-- RustProxy Maintainers <root@localhost> Mon, 28 Sep 2026 10:36:37 +0200
rustproxy (0.18.4) stable; urgency=medium
* Default backend health checks to TCP and streamline Docker vhost/Security UX.
* Move administration audit to an on-demand modal.
-- RustProxy Maintainers <root@localhost> Mon, 28 Sep 2026 09:45:00 +0200
rustproxy (0.18.3) stable; urgency=medium
* Separate Docker vhost/backend Prometheus metric families and collector group.
-- RustProxy Maintainers <root@localhost> Sun, 27 Sep 2026 17:45:00 +0200
rustproxy (0.18.2) stable; urgency=medium
* Add optional Docker-agent discovery and dynamic Docker vhost assignments.
* Remove revision-header exposure and refresh dashboard/settings UX.
-- RustProxy package maintainer <packages@rustproxy.linuxiarz.pl> Sun, 27 Sep 2026 15:06:00 +0200
rustproxy (0.17.0) stable; urgency=medium
* Package RustProxy 0.17.0 with a hardened systemd service, log rotation,
Prometheus/Grafana assets and local-response host support.
-- RustProxy package maintainer <packages@rustproxy.linuxiarz.pl> Sat, 27 Sep 2026 11:35:00 +0200
+16
View File
@@ -0,0 +1,16 @@
Source: rustproxy
Section: net
Priority: optional
Maintainer: RustProxy package maintainer <packages@rustproxy.linuxiarz.pl>
Build-Depends: debhelper-compat (= 13), cargo, rustc (>= 1.88), pkg-config, libsqlite3-dev
Standards-Version: 4.7.0
Rules-Requires-Root: no
Homepage: https://rustproxy.linuxiarz.pl
Package: rustproxy
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}, adduser, ca-certificates, logrotate, gzip
Description: independent Rust reverse proxy with local administration
RustProxy is an independent reverse proxy with HTTP/1.1, HTTP/2, HTTP/3,
WebSocket, TLS, caching, redirects, local response hosts, TCP/UDP streams,
diagnostics and a local administration dashboard.
Vendored Executable
+24
View File
@@ -0,0 +1,24 @@
#!/usr/bin/make -f
export DEB_BUILD_MAINT_OPTIONS = hardening=+all
export CARGO_TERM_COLOR = never
%:
dh $@
override_dh_auto_configure:
# Cargo is the authoritative build system; no generated configure step.
override_dh_auto_build:
cargo build --release --locked
override_dh_auto_test:
ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS)))
cargo test --locked
endif
override_dh_auto_install:
install -D -m0755 target/release/rust-proxy debian/rustproxy/usr/bin/rust-proxy
install -D -m0640 debian/rustproxy.environment debian/rustproxy/etc/rustproxy/environment
install -D -m0644 grafana/rustproxy-overview.json debian/rustproxy/usr/share/rustproxy/grafana/rustproxy-overview.json
install -D -m0644 grafana/README.md debian/rustproxy/usr/share/doc/rustproxy/grafana/README.md
+7
View File
@@ -0,0 +1,7 @@
# RustProxy Debian package defaults.
# systemctl restart rustproxy after changing listener environment values.
RUST_LOG=rust_proxy=info,warn
RUST_PROXY_DATA_DIR=/var/lib/rustproxy
RUST_PROXY_ADMIN_LISTEN=127.0.0.1:9090
RUST_PROXY_PROXY_LISTEN=0.0.0.0:80
RUST_PROXY_TLS_LISTEN=0.0.0.0:443
+15
View File
@@ -0,0 +1,15 @@
/var/log/rustproxy/*.jsonl /var/log/rustproxy/*.log /var/log/rustproxy/vhosts/*.jsonl {
daily
rotate 3
maxage 3
missingok
notifempty
compress
compresscmd /usr/bin/gzip
compressext .gz
compressoptions -9
dateext
dateformat -%Y%m%d
copytruncate
su rustproxy rustproxy
}
Vendored Executable
+14
View File
@@ -0,0 +1,14 @@
#!/bin/sh
set -e
if ! getent group rustproxy >/dev/null 2>&1; then
addgroup --system rustproxy >/dev/null
fi
if ! getent passwd rustproxy >/dev/null 2>&1; then
adduser --system --ingroup rustproxy --home /var/lib/rustproxy --no-create-home \
--disabled-password --shell /usr/sbin/nologin rustproxy >/dev/null
fi
install -d -o rustproxy -g rustproxy -m 0750 /var/lib/rustproxy /var/log/rustproxy
#DEBHELPER#
exit 0
+55
View File
@@ -0,0 +1,55 @@
[Unit]
Description=RustProxy reverse proxy
Documentation=https://rustproxy.linuxiarz.pl
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
User=rustproxy
Group=rustproxy
WorkingDirectory=/var/lib/rustproxy
Environment=MALLOC_ARENA_MAX=2
EnvironmentFile=-/etc/rustproxy/environment
ExecStart=/usr/bin/rust-proxy serve
Restart=on-failure
RestartSec=3s
KillSignal=SIGINT
KillMode=control-group
TimeoutStopSec=120s
UMask=0027
# Bind 80/443 without running the service as root.
AmbientCapabilities=CAP_NET_BIND_SERVICE
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
NoNewPrivileges=true
# Runtime filesystem policy. Diagnostics intentionally retain normal /proc access.
StateDirectory=rustproxy
StateDirectoryMode=0750
LogsDirectory=rustproxy
LogsDirectoryMode=0750
RuntimeDirectory=rustproxy
RuntimeDirectoryMode=0750
ReadWritePaths=/var/lib/rustproxy /var/log/rustproxy
ProtectSystem=strict
ProtectHome=true
PrivateTmp=true
PrivateDevices=true
ProtectKernelTunables=true
ProtectKernelModules=true
ProtectKernelLogs=true
ProtectControlGroups=true
LockPersonality=true
RestrictRealtime=true
RestrictSUIDSGID=true
RestrictNamespaces=true
RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6
SystemCallArchitectures=native
# High enough for many frontend/upstream sockets without removing all limits.
LimitNOFILE=65536
TasksMax=4096
[Install]
WantedBy=multi-user.target
+2
View File
@@ -0,0 +1,2 @@
d /var/lib/rustproxy 0750 rustproxy rustproxy -
d /var/log/rustproxy 0750 rustproxy rustproxy -
+1
View File
@@ -0,0 +1 @@
3.0 (native)