diff --git a/.gitignore b/.gitignore index 2795e0e6b..f18232dec 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,7 @@ altnames.cnf /insecure **/*.rs.bk test.db +cargo_vendor_config /vendor kanidm_rlm_python/test_data/certs/ vendor.tar.gz diff --git a/Makefile b/Makefile index d38c2cd2d..6aef316ad 100644 --- a/Makefile +++ b/Makefile @@ -15,7 +15,7 @@ help: .PHONY: buildx/kanidmd/x86_64_v3 buildx/kanidmd/x86_64_v3: ## build multiarch server images -buildx/kanidmd/x86_64_v3: +buildx/kanidmd/x86_64_v3: vendor @$(CONTAINER_TOOL) buildx build $(CONTAINER_TOOL_ARGS) --pull --push --platform "linux/amd64/v3" \ -f kanidmd/Dockerfile -t $(IMAGE_BASE)/server:x86_64_$(IMAGE_VERSION) \ --build-arg "KANIDM_BUILD_PROFILE=container_x86_64_v3" \ @@ -25,7 +25,7 @@ buildx/kanidmd/x86_64_v3: .PHONY: buildx/kanidmd buildx/kanidmd: ## Build multiarch kanidm server images and push to docker hub -buildx/kanidmd: +buildx/kanidmd: vendor @$(CONTAINER_TOOL) buildx build $(CONTAINER_TOOL_ARGS) \ --pull --push --platform $(IMAGE_ARCH) \ -f kanidmd/Dockerfile \ @@ -37,7 +37,7 @@ buildx/kanidmd: .PHONY: buildx/kanidm_tools buildx/kanidm_tools: ## Build multiarch kanidm tool images and push to docker hub -buildx/kanidm_tools: +buildx/kanidm_tools: vendor @$(CONTAINER_TOOL) buildx build $(CONTAINER_TOOL_ARGS) \ --pull --push --platform $(IMAGE_ARCH) \ -f kanidm_tools/Dockerfile \ @@ -103,7 +103,7 @@ precommit: test codespell test/pykanidm doc/format .PHONY: vendor vendor: - cargo vendor + cargo vendor > cargo_vendor_config .PHONY: vendor-prep vendor-prep: vendor diff --git a/kanidm_tools/Cargo.toml b/kanidm_tools/Cargo.toml index 9f2e3b163..4870ddfef 100644 --- a/kanidm_tools/Cargo.toml +++ b/kanidm_tools/Cargo.toml @@ -27,7 +27,7 @@ path = "src/ssh_authorizedkeys.rs" [dependencies] clap = { workspace = true, features = ["derive", "env"] } -compact_jwt.workspace = true +compact_jwt = { workspace = true, features = ["openssl"] } dialoguer.workspace = true futures-concurrency.workspace = true libc.workspace = true diff --git a/kanidm_tools/Dockerfile b/kanidm_tools/Dockerfile index 4558c9599..c47a125f8 100644 --- a/kanidm_tools/Dockerfile +++ b/kanidm_tools/Dockerfile @@ -1,53 +1,56 @@ -# This builds the kanidm CLI tool +# This builds the kanidm CLI tools ARG BASE_IMAGE=opensuse/tumbleweed:latest FROM ${BASE_IMAGE} AS repos - RUN zypper refresh --force RUN zypper dup -y FROM repos AS builder -ARG SCCACHE_REDIS="" ARG KANIDM_FEATURES ARG KANIDM_BUILD_PROFILE ARG KANIDM_BUILD_OPTIONS="" -RUN zypper install -y \ +RUN echo Profile $KANIDM_BUILD_PROFILE +RUN echo Features $KANIDM_FEATURES + +RUN zypper install -y --no-recommends \ rustup wasm-pack \ - gcc clang lld \ + clang \ make automake autoconf \ - libopenssl-devel \ + libopenssl-3-devel \ pam-devel \ libudev-devel \ sqlite3-devel \ - rsync + rsync \ + mold + RUN zypper clean -a RUN rustup default stable COPY . /usr/src/kanidm -RUN mkdir /scratch -RUN echo $KANIDM_BUILD_PROFILE -ENV KANIDM_BUILD_PROFILE=${KANIDM_BUILD_PROFILE:-container_generic} -RUN echo Features $KANIDM_FEATURES - -ENV CARGO_HOME=/scratch/.cargo -ENV RUSTFLAGS="-Clinker=clang -Clink-arg=-fuse-ld=/usr/bin/ld.lld" +RUN mkdir -p /usr/src/kanidm/.cargo +RUN cp /usr/src/kanidm/cargo_vendor_config /usr/src/kanidm/.cargo/config.toml WORKDIR /usr/src/kanidm/ + +# Set the build profile +ENV KANIDM_BUILD_PROFILE=${KANIDM_BUILD_PROFILE:-container_generic} +ENV RUSTFLAGS="-Clinker=clang -Clink-arg=-fuse-ld=/usr/bin/ld.mold" + # build the CLI RUN if [ -z "${KANIDM_FEATURES}" ]; then \ - cargo build --bin kanidm ${KANIDM_BUILD_OPTIONS} \ + cargo build -p kanidm_tools ${KANIDM_BUILD_OPTIONS} \ --target-dir="/usr/src/kanidm/target/" \ --release; \ - cargo build --bin kanidm-ipa-sync ${KANIDM_BUILD_OPTIONS} \ + cargo build -p kanidm-ipa-sync ${KANIDM_BUILD_OPTIONS} \ --target-dir="/usr/src/kanidm/target/" \ --release; \ else \ - cargo build --bin kanidm ${KANIDM_BUILD_OPTIONS} \ + cargo build -p kanidm_tools ${KANIDM_BUILD_OPTIONS} \ --target-dir="/usr/src/kanidm/target/" \ --features="${KANIDM_FEATURES}" \ --release; \ - cargo build --bin kanidm-ipa-sync ${KANIDM_BUILD_OPTIONS} \ + cargo build -p kanidm-ipa-sync ${KANIDM_BUILD_OPTIONS} \ --target-dir="/usr/src/kanidm/target/" \ --features="${KANIDM_FEATURES}" \ --release; \ @@ -58,7 +61,7 @@ RUN ls -al /usr/src/kanidm/target/release # == Construct the tools container FROM repos -RUN zypper install -y timezone busybox-adduser && \ +RUN zypper install -y timezone busybox-adduser openssl-3 && \ zypper clean -a COPY --from=builder /usr/src/kanidm/target/release/kanidm /sbin/ diff --git a/kanidmd/Dockerfile b/kanidmd/Dockerfile index 0f0125a7f..540abd55c 100644 --- a/kanidmd/Dockerfile +++ b/kanidmd/Dockerfile @@ -1,3 +1,4 @@ +# Build the main Kanidmd server ARG BASE_IMAGE=opensuse/tumbleweed:latest FROM ${BASE_IMAGE} AS repos RUN zypper refresh --force @@ -5,56 +6,59 @@ RUN zypper dup -y # ====================== FROM repos AS builder +ARG KANIDM_FEATURES +ARG KANIDM_BUILD_PROFILE="container_generic" +ARG KANIDM_BUILD_OPTIONS="" -RUN zypper install -y \ +RUN echo Profile $KANIDM_BUILD_PROFILE +RUN echo Features $KANIDM_FEATURES + +RUN zypper install -y --no-recommends \ rustup \ - wasm-pack \ - clang lld \ + clang \ make automake autoconf \ - libopenssl-devel pam-devel \ + libopenssl-3-devel pam-devel \ sqlite3-devel \ - gcc \ rsync \ findutils \ - which + which \ + mold +# wasm-pack \ +# lld + RUN zypper clean -a RUN rustup default stable COPY . /usr/src/kanidm -ARG KANIDM_FEATURES -ARG KANIDM_BUILD_PROFILE="container_generic" -ARG KANIDM_BUILD_OPTIONS="" - -RUN mkdir /scratch -RUN echo $KANIDM_BUILD_PROFILE -RUN echo $KANIDM_FEATURES - -ENV CARGO_HOME=/scratch/.cargo +RUN mkdir -p /usr/src/kanidm/.cargo +RUN cp /usr/src/kanidm/cargo_vendor_config /usr/src/kanidm/.cargo/config.toml # ====================== -WORKDIR /usr/src/kanidm/kanidmd_web_ui +# WORKDIR /usr/src/kanidm/kanidmd_web_ui # # This can't be used in the wasm build for now. # # ENV RUSTFLAGS="-Clinker=clang" -RUN ./build_wasm.sh +# RUN ./build_wasm.sh # ====================== WORKDIR /usr/src/kanidm/kanidmd/daemon # Set the build profile -ENV KANIDM_BUILD_PROFILE="${KANIDM_BUILD_PROFILE}" -ENV RUSTFLAGS="-Clinker=clang -Clink-arg=-fuse-ld=/usr/bin/ld.lld" +ENV KANIDM_BUILD_PROFILE=${KANIDM_BUILD_PROFILE:-container_generic} +ENV RUSTFLAGS="-Clinker=clang -Clink-arg=-fuse-ld=/usr/bin/ld.mold" # Exports don't persist through RUN statements. RUN export CC="/usr/bin/clang"; \ if [ -z "${KANIDM_FEATURES}" ]; then \ cargo build -p daemon ${KANIDM_BUILD_OPTIONS} \ + --locked --offline \ --target-dir="/usr/src/kanidm/target/" \ --release; \ else \ cargo build -p daemon ${KANIDM_BUILD_OPTIONS} \ + --locked --offline \ --target-dir="/usr/src/kanidm/target/" \ --features="${KANIDM_FEATURES}" \ --release; \ @@ -68,6 +72,7 @@ FROM repos RUN zypper install -y \ timezone \ + openssl-3 \ sqlite3 \ pam RUN zypper clean -a