adapted from this
notes
- MartyPC local build (checks out repository at specific commit)
- targets X11, Mesa EGL, GTK3
FROM debian:12.11
ARG U_NAME="user"ARG U_ID="1000"RUN adduser --disabled-password --gecos '' --uid ${U_ID} ${U_NAME}
WORKDIR /home/${U_NAME}
#=================================## install Rust
USER rootRUN apt-get update && apt-get install -y \ curl \ && rm -rf /var/lib/apt/lists/*
USER ${U_NAME}RUN \ curl --proto '=https' --tlsv1.2 -sSf -o ./rustup-init.sh https://sh.rustup.rs && \ sh ./rustup-init.sh -y#=================================#
#=================================## download + build MartyPC
USER root
# as indicated by docsRUN apt-get update && apt-get install -y \ git \ curl \ build-essential \ pkg-config \ libasound2-dev \ libudev-dev \ libc-dev \ libx11-dev \ libclang-dev \ && rm -rf /var/lib/apt/lists/*
# for X11RUN apt-get update && apt-get install -y \ libxcursor1 \ libx11-xcb1 \ libxi6 \ libxkbcommon-x11-dev \ && rm -rf /var/lib/apt/lists/*
# for GL backendRUN apt-get update && apt-get install -y \ libegl1-mesa-dev \ && rm -rf /var/lib/apt/lists/*
# NOTE: pair with the following in Cargo.toml: `rfd = { version = "0.15", default-features = false, features = ["gtk3"] }`# - otherwise tries to use "xdg-portal", requires extra config/setup to make that work properlyRUN apt-get update && apt-get install -y \ libgtk-3-dev \ && rm -rf /var/lib/apt/lists/*
USER ${U_NAME}
# switch to "nightly" channelRUN \ /home/${U_NAME}/.cargo/bin/rustup install nightly && \ /home/${U_NAME}/.cargo/bin/rustup default nightlyRUN git clone https://github.com/dbalsom/martypc.gitRUN \ cd ./martypc && \ git checkout bc5b03e5b9fd1aa7f8374a60d70b0b5f1002a9a2 && \ cd ./install && \ /home/${U_NAME}/.cargo/bin/cargo build --release#=================================#
#=================================#USER root
# for GUI stuff (via host)RUN usermod -a -G audio ${U_NAME}RUN usermod -a -G video ${U_NAME}RUN groupadd -g 106 render && usermod -a -G render ${U_NAME}#=================================#
USER ${U_NAME}if you want to persist the build cache between container runs, you can add something like this to your container run invocation:
-v /path/to/hostmounted_dir:/home/user/hostmounted_cargohome-e CARGO_HOME=/home/user/hostmounted_cargohomefor passing audio/video from host: