Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

cargo chef cook fails with aarch64-unknown-linux-musl target #227

Open
TheSilkky opened this issue Jul 13, 2023 · 3 comments
Open

cargo chef cook fails with aarch64-unknown-linux-musl target #227

TheSilkky opened this issue Jul 13, 2023 · 3 comments

Comments

@TheSilkky
Copy link

TheSilkky commented Jul 13, 2023

cargo chef cook --target=aarch64-unknown-linux-musl --release --recipe-path recipe.json fails with Syntax error: "(" unexpected

I'm guessing this is related to something in recipe.json? However the x64 build works normally and both builds are using the same recipe.json file.

Note: This is using cross compiling, all of the images are running on x64

For context here's my Dockerfile:

#syntax=docker/dockerfile:1-labs

ARG RUST_VERSION=1.70.0
ARG ALPINE_VERSION=3.18
ARG LEMMY_VERSION

####################################################################################################
## AMD64 builder base
####################################################################################################
FROM --platform=${BUILDPLATFORM} blackdex/rust-musl:x86_64-musl-stable-${RUST_VERSION} AS base-amd64

ENV DEBIAN_FRONTEND=noninteractive
ENV CARGO_HOME="/root/.cargo"

RUN apt update && apt install -y \
    --no-install-recommends \
    git

RUN mkdir -pv "${CARGO_HOME}" && \
    rustup set profile minimal && \
    rustup target add x86_64-unknown-linux-musl

RUN cargo install cargo-chef

####################################################################################################
## ARM64 builder base
####################################################################################################
FROM --platform=${BUILDPLATFORM} blackdex/rust-musl:aarch64-musl-stable-${RUST_VERSION} AS base-arm64

ENV DEBIAN_FRONTEND=noninteractive
ENV CARGO_HOME="/root/.cargo"

RUN apt update && apt install -y \
    --no-install-recommends \
    git

RUN mkdir -pv "${CARGO_HOME}" && \
    rustup set profile minimal && \
    rustup target add aarch64-unknown-linux-musl

RUN cargo install cargo-chef

####################################################################################################
## Get source code
####################################################################################################
FROM alpine:${ALPINE_VERSION} AS source

ARG LEMMY_VERSION

ADD --keep-git-dir=true https://github.com/LemmyNet/lemmy.git#${LEMMY_VERSION} /lemmy

####################################################################################################
## Generate cargo-chef recipe
####################################################################################################
FROM base-amd64 AS chef-prepare

WORKDIR /lemmy

COPY --from=source /lemmy ./

RUN cargo chef prepare --recipe-path recipe.json

####################################################################################################
## AMD64 builder
####################################################################################################
FROM base-amd64 AS build-amd64

WORKDIR /lemmy

COPY --from=chef-prepare /lemmy/recipe.json ./
RUN cargo chef cook --target=x86_64-unknown-linux-musl --release --recipe-path recipe.json

COPY --from=source /lemmy ./
RUN echo "pub const VERSION: &str = \"$(git describe --tag)\";" > crates/utils/src/version.rs && \
    cargo build --target=x86_64-unknown-linux-musl --release

####################################################################################################
## ARM64 builder
####################################################################################################
FROM base-arm64 AS build-arm64

WORKDIR /lemmy

COPY --from=chef-prepare /lemmy/recipe.json ./
RUN cargo chef cook --target=aarch64-unknown-linux-musl --release --recipe-path recipe.json

COPY --from=source /lemmy ./
RUN echo "pub const VERSION: &str = \"$(git describe --tag)\";" > crates/utils/src/version.rs && \
    cargo build --target=aarch64-unknown-linux-musl --release

####################################################################################################
## Move binary
####################################################################################################
FROM build-${TARGETARCH} AS build

ARG TARGETARCH

RUN set -ex; \
        case "${TARGETARCH}" in \
            arm64) target='aarch64-unknown-linux-musl' ;; \
            amd64) target='x86_64-unknown-linux-musl' ;; \
            *) exit 1 ;; \
        esac; \
        mv "/lemmy/target/$target/release/lemmy_server" /lemmy/lemmy

####################################################################################################
### Final image
####################################################################################################
FROM alpine:${ALPINE_VERSION} 

ARG CONFIG_DIR=/usr/local/etc/lemmy

ENV LEMMY_CONFIG_LOCATION="${CONFIG_DIR}/lemmy.hjson"

RUN apk add --no-cache \
    ca-certificates \
    gettext-envsubst

COPY --from=build --chmod=0755 /lemmy/lemmy /usr/local/bin
COPY --chmod=0755 entrypoint.sh /

RUN adduser --disabled-password --gecos "" --no-create-home lemmy && \
    mkdir -p "${CONFIG_DIR}" && \
    chown -R lemmy:lemmy "${CONFIG_DIR}"

USER lemmy

ENTRYPOINT ["/entrypoint.sh"]

CMD ["lemmy"]

EXPOSE 8536

STOPSIGNAL SIGTERM

LABEL org.opencontainers.image.source="https://github.com/TheSilkky/lemmy-docker.git"
LABEL org.opencontainers.image.title="Lemmy"
LABEL org.opencontainers.image.description="A link aggregator and forum for the fediverse"
LABEL org.opencontainers.image.licenses="AGPL-3.0-or-later"
@LukeMathWalker
Copy link
Owner

This feels quite strange—is there a set of commands I can use to reproduce the issue? (I'm assuming this is for the Lemmy project)

@TheSilkky
Copy link
Author

If your on a x64 machine maybe you could try building my Docker image locally, excluding the amd64 builder? Probably a bit easier then setting up everything for cross compiling locally.

@TheSilkky
Copy link
Author

I think this should work, you just need Docker installed.
docker buildx build --platform=linux/arm64 --build-arg LEMMY_VERSION=0.18.2 -t some/thing:latest .

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants