diff --git a/DockerBuild.sh b/DockerBuild.sh new file mode 100755 index 0000000000..18b7777bf8 --- /dev/null +++ b/DockerBuild.sh @@ -0,0 +1,16 @@ +#!/bin/bash +PROJECT_ROOT=$(cd -P -- "$(dirname -- "$0")" && printf '%s\n' "$(pwd -P)") + +set -x + +# Wishlist hint: For developers, creating a Docker Compose +# setup with persistent volumes for the build & deps directories +# would speed up recompile times significantly. For end users, +# the simplicity of a single Docker image and a one-time compilation +# seems better. +docker build -t orcaslicer \ + --build-arg USER=$USER \ + --build-arg UID=$(id -u) \ + --build-arg GID=$(id -g) \ + --build-arg NCORES=$NCORES \ + $PROJECT_ROOT diff --git a/DockerRun.sh b/DockerRun.sh new file mode 100755 index 0000000000..da49bd3e61 --- /dev/null +++ b/DockerRun.sh @@ -0,0 +1,25 @@ +#!/bin/bash +set -x +# Just in case, here's some other things that might help: +# Force the container's hostname to be the same as your workstation +# -h $HOSTNAME \ +# If there's problems with the X display, try this +# -v /tmp/.X11-unix:/tmp/.X11-unix \ +docker run \ + `# Use the hosts networking. Printer wifi and also dbus communication` \ + --net=host \ + `# Some X installs will not have permissions to talk to sockets for shared memory` \ + --ipc host \ + `# Run as your workstations username to keep permissions the same` \ + -u $USER \ + `# Bind mount your home directory into the container for loading/saving files` \ + -v $HOME:/home/$USER \ + `# Pass the X display number to the container` \ + -e DISPLAY=$DISPLAY \ + `# It seems that libGL and dbus things need privileged mode` \ + --privileged=true \ + `# Attach tty for running orca slicer with command line things` \ + -ti \ + `# Pass all parameters from this script to the orca slicer ENTRYPOINT binary` \ + orcaslicer $* + diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000000..befcc33de4 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,95 @@ +FROM docker.io/ubuntu:22.04 +LABEL maintainer "DeftDawg " + +# Disable interactive package configuration +RUN apt-get update && \ + echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections + +# Add a deb-src +RUN echo deb-src http://archive.ubuntu.com/ubuntu \ + $(cat /etc/*release | grep VERSION_CODENAME | cut -d= -f2) main universe>> /etc/apt/sources.list + +RUN apt-get update && apt-get install -y \ + autoconf \ + build-essential \ + cmake \ + curl \ + eglexternalplatform-dev \ + extra-cmake-modules \ + file \ + git \ + gstreamer1.0-plugins-bad \ + gstreamer1.0-libav \ + libcairo2-dev \ + libcurl4-openssl-dev \ + libdbus-1-dev \ + libglew-dev \ + libglu1-mesa-dev \ + libglu1-mesa-dev \ + libgstreamer1.0-dev \ + libgstreamerd-3-dev \ + libgstreamer-plugins-base1.0-dev \ + libgstreamer-plugins-good1.0-dev \ + libgtk-3-dev \ + libgtk-3-dev \ + libosmesa6-dev \ + libsecret-1-dev \ + libsoup2.4-dev \ + libssl3 \ + libssl-dev \ + libudev-dev \ + libwayland-dev \ + libwebkit2gtk-4.0-dev \ + libxkbcommon-dev \ + locales \ + locales-all \ + m4 \ + pkgconf \ + sudo \ + wayland-protocols \ + wget + +# Change your locale here if you want. See the output +# of `locale -a` to pick the correct string formatting. +ENV LC_ALL=en_US.utf8 +RUN locale-gen $LC_ALL + +# Set this so that Orca Slicer doesn't complain about +# the CA cert path on every startup +ENV SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt + +COPY ./ OrcaSlicer + +WORKDIR OrcaSlicer + +# These can run together, but we run them seperate for podman caching +# Update System dependencies +RUN ./BuildLinux.sh -u + +# Build dependencies in ./deps +RUN ./BuildLinux.sh -d; exit 0 + +RUN apt-get install -y libcgal-dev +# Build slic3r +RUN ./BuildLinux.sh -s + +# Build AppImage +ENV container podman +RUN ./BuildLinux.sh -i + +# It's easier to run Orca Slicer as the same username, +# UID and GID as your workstation. Since we bind mount +# your home directory into the container, it's handy +# to keep permissions the same. Just in case, defaults +# are root. +SHELL ["/bin/bash", "-l", "-c"] +ARG USER=root +ARG UID=0 +ARG GID=0 +RUN [[ "$UID" != "0" ]] \ + && groupadd -f -g $GID $USER \ + && useradd -u $UID -g $GID $USER + +# Using an entrypoint instead of CMD because the binary +# accepts several command line arguments. +ENTRYPOINT ["/OrcaSlicer/build/package/bin/orca-slicer"]