FROM ubuntu:22.04 AS builder
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
build-essential pkg-config libevdev-dev libudev-dev ca-certificates \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /src
COPY . .
RUN make -j"$(nproc)"
RUN make install
FROM ubuntu:22.04
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
libevdev2 libudev1 \
&& rm -rf /var/lib/apt/lists/*
COPY --from=builder /usr/local /usr/local
ENTRYPOINT ["/usr/local/bin/keyd"]
CMD ["-f"]
Smoke [PASS]: test -x /usr/local/bin/keyd Smoke [PASS]: /usr/local/bin/keyd -h Smoke [FAIL]: ldd /usr/local/bin/keyd | grep -q -E 'libevdev|libudev Output: sh: 1: Syntax error: Unterminated quoted string
FROM ubuntu:22.04 AS builder
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
build-essential pkg-config libevdev-dev libudev-dev ca-certificates \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /src
COPY . .
RUN make -j4
RUN make install
FROM ubuntu:22.04
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
libevdev2 libudev1 \
&& rm -rf /var/lib/apt/lists/*
COPY --from=builder /usr/local /usr/local
ENTRYPOINT ["/usr/local/bin/keyd"]
CMD ["-f"]
Concerns: Final image relies on make install placing binaries into /usr/local; if the project changes its install prefix, the COPY --from=builder /usr/local /usr/local may miss the executable., Runtime dependencies are limited to libevdev2 and libudev1; if the application needs additional libraries at runtime, the container may fail to run., Using ubuntu:22.04 without pinning a digest could affect reproducibility in the future; consider pinning to a specific image digest for stability. Smoke [PASS]: test -x /usr/local/bin/keyd Smoke [PASS]: test -x /usr/local/bin/keyd && /usr/local/bin/keyd -h >/dev/null 2>&1 Smoke [PASS]: strings /usr/local/bin/keyd | head -n 1