diff --git a/docker/Dockerfile b/docker/Dockerfile index 456df2b..82f6605 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -15,6 +15,10 @@ WORKDIR /tmp COPY . /tmp/ ARG TARGETARCH +ARG CARGO_FEATURES +ENV CARGO_FEATURES ${CARGO_FEATURES} +ARG ADDITIONAL_DEPS +ENV ADDITIONAL_DEPS ${ADDITIONAL_DEPS} RUN if [ $TARGETARCH = "amd64" ]; then \ echo "x86_64" > /arch; \ @@ -29,13 +33,13 @@ ENV RUSTFLAGS "-C link-arg=-s" RUN update-ca-certificates 2> /dev/null || true -RUN apt-get update && apt-get install -qy --no-install-recommends $BUILD_DEPS && \ +RUN apt-get update && apt-get install -qy --no-install-recommends $BUILD_DEPS ${ADDITIONAL_DEPS} && \ curl -sSf https://sh.rustup.rs | bash -s -- -y --default-toolchain stable && \ export PATH="$HOME/.cargo/bin:$PATH" && \ echo "Install toolchain" && \ rustup target add $(cat /arch)-unknown-linux-gnu &&\ echo "Building rpxy from source" && \ - cargo build --release --target=$(cat /arch)-unknown-linux-gnu && \ + cargo build --release --target=$(cat /arch)-unknown-linux-gnu ${CARGO_FEATURES} && \ strip --strip-all /tmp/target/$(cat /arch)-unknown-linux-gnu/release/rpxy &&\ cp /tmp/target/$(cat /arch)-unknown-linux-gnu/release/rpxy /tmp/target/release/rpxy diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 886a471..5bd0c40 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -10,10 +10,13 @@ services: - 127.0.0.1:8443:8443 build: context: ../ + args: + - "CARGO_FEATURES=--no-default-features --features http3-s2n" + - "ADDITIONAL_DEPS=pkg-config libssl-dev cmake libclang1 gcc g++" dockerfile: ./docker/Dockerfile platforms: # Choose your platforms - - "linux/amd64" - # - "linux/arm64" + # - "linux/amd64" + - "linux/arm64" environment: - LOG_LEVEL=debug - LOG_TO_FILE=true diff --git a/rpxy-bin/Cargo.toml b/rpxy-bin/Cargo.toml index 7e20882..b8d1420 100644 --- a/rpxy-bin/Cargo.toml +++ b/rpxy-bin/Cargo.toml @@ -12,8 +12,7 @@ publish = false # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [features] -default = ["http3"] -http3 = ["rpxy-lib/http3"] +default = ["http3-quinn"] http3-quinn = ["rpxy-lib/http3-quinn"] http3-s2n = ["rpxy-lib/http3-s2n"] diff --git a/rpxy-bin/src/config/toml.rs b/rpxy-bin/src/config/toml.rs index 35c5d7a..5f6ab4a 100644 --- a/rpxy-bin/src/config/toml.rs +++ b/rpxy-bin/src/config/toml.rs @@ -21,7 +21,7 @@ pub struct ConfigToml { pub experimental: Option, } -#[cfg(feature = "http3")] +#[cfg(any(feature = "http3-quinn", feature = "http3-s2n"))] #[derive(Deserialize, Debug, Default, PartialEq, Eq, Clone)] pub struct Http3Option { pub alt_svc_max_age: Option, @@ -34,7 +34,7 @@ pub struct Http3Option { #[derive(Deserialize, Debug, Default, PartialEq, Eq, Clone)] pub struct Experimental { - #[cfg(feature = "http3")] + #[cfg(any(feature = "http3-quinn", feature = "http3-s2n"))] pub h3: Option, pub ignore_sni_consistency: Option, } @@ -128,7 +128,7 @@ impl TryInto for &ConfigToml { // experimental if let Some(exp) = &self.experimental { - #[cfg(feature = "http3")] + #[cfg(any(feature = "http3-quinn", feature = "http3-s2n"))] { if let Some(h3option) = &exp.h3 { proxy_config.http3 = true; diff --git a/rpxy-lib/Cargo.toml b/rpxy-lib/Cargo.toml index 063ca13..e1327f7 100644 --- a/rpxy-lib/Cargo.toml +++ b/rpxy-lib/Cargo.toml @@ -12,8 +12,7 @@ publish = false # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [features] -default = ["http3", "sticky-cookie"] -http3 = ["http3-s2n"] +default = ["http3-quinn", "sticky-cookie"] http3-quinn = ["quinn", "h3", "h3-quinn", "socket2"] http3-s2n = ["h3", "s2n-quic", "s2n-quic-rustls", "s2n-quic-h3"] sticky-cookie = ["base64", "sha2", "chrono"] @@ -67,7 +66,7 @@ h3 = { path = "../h3/h3/", optional = true } h3-quinn = { path = "../h3-quinn/", optional = true } # Tentative to support rustls-0.21 # for UDP socket wit SO_REUSEADDR when h3 with quinn socket2 = { version = "0.5.3", features = ["all"], optional = true } -s2n-quic = { path = "../s2n-quic/quic/s2n-quic/", features = [ +s2n-quic = { path = "../s2n-quic/quic/s2n-quic/", default-features = false, features = [ "provider-tls-rustls", ], optional = true } s2n-quic-h3 = { path = "../s2n-quic/quic/s2n-quic-h3/", optional = true }