From 81ba26b8084c1442c0adbe37b62d9eb14651d6c2 Mon Sep 17 00:00:00 2001 From: Sillyfrog Date: Thu, 7 Jun 2018 22:57:30 +1000 Subject: [PATCH] Add a basic Klipper and OctoPrint Dockerfile --- Dockerfile.KlipperOctoprint | 61 +++++++++++++++++++++++++++++++++++++ README.md | 19 ++++++++++++ klippyoctostart.py | 23 ++++++++++++++ 3 files changed, 103 insertions(+) create mode 100644 Dockerfile.KlipperOctoprint create mode 100755 klippyoctostart.py diff --git a/Dockerfile.KlipperOctoprint b/Dockerfile.KlipperOctoprint new file mode 100644 index 0000000..f266e6f --- /dev/null +++ b/Dockerfile.KlipperOctoprint @@ -0,0 +1,61 @@ +FROM python:2.7 +EXPOSE 8080 + +RUN apt-get update && \ + apt-get install -y sudo + +EXPOSE 5000 + +ENV CURA_VERSION=15.04.6 +ARG tag=master + +WORKDIR /opt/octoprint + +#install ffmpeg +RUN cd /tmp \ + && wget -O ffmpeg.tar.xz https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-32bit-static.tar.xz \ + && mkdir -p /opt/ffmpeg \ + && tar xvf ffmpeg.tar.xz -C /opt/ffmpeg --strip-components=1 \ + && rm -Rf /tmp/* + +#install Cura +RUN cd /tmp \ + && wget https://github.com/Ultimaker/CuraEngine/archive/${CURA_VERSION}.tar.gz \ + && tar -zxf ${CURA_VERSION}.tar.gz \ + && cd CuraEngine-${CURA_VERSION} \ + && mkdir build \ + && make \ + && mv -f ./build /opt/cura/ \ + && rm -Rf /tmp/* + +#Create an octoprint user +RUN useradd -ms /bin/bash octoprint && adduser octoprint dialout +RUN chown octoprint:octoprint /opt/octoprint +USER octoprint + +#This fixes issues with the volume command setting wrong permissions +RUN mkdir /home/octoprint/.octoprint + +#Install Octoprint +RUN git clone --branch $tag https://github.com/foosel/OctoPrint.git /opt/octoprint \ + && virtualenv venv \ + && ./venv/bin/python setup.py install \ + && echo 2 + +VOLUME /home/octoprint/.octoprint + + +### Klipper setup ### + +USER root +COPY klippy.sudoers /etc/sudoers.d/klippy +RUN useradd -ms /bin/bash klippy + +USER octoprint +WORKDIR /home/octoprint +RUN git clone https://github.com/KevinOConnor/klipper \ + && ./klipper/scripts/install-octopi.sh + +COPY klippyoctostart.py / + +CMD ["/klippyoctostart.py"] diff --git a/README.md b/README.md index 8e3e1e0..0876395 100644 --- a/README.md +++ b/README.md @@ -29,3 +29,22 @@ docker run --name octoprint2 -d -v /etc/localtime:/etc/localtime:ro -v /home/use Your Klipper `printer.cfg` should be kept in the OctoPrint config directory (this is where it looks for it at startup). If you have any questions, feel free to log an issue on this project, and I'll see if I can help. + +## No MJPG + +Also included is a cut down Dockerfile with no `mjpg` or OctoPrint plugins included. + +This can be built with: +``` +docker build . --file Dockerfile.KlipperOctoprint -t ko +``` + +And run with something like: +``` +docker run -d -v /etc/localtime:/etc/localtime:ro -v /home/user/Documents/octoprint-config:/home/octoprint/.octoprint \ + --device /dev/ttyUSB0:/dev/ttyUSB0 \ + -p 5000:5000 \ + ko +``` + +This is basically untested, but maybe a good start for someone who wants a simpler based container. diff --git a/klippyoctostart.py b/klippyoctostart.py new file mode 100755 index 0000000..b99a40d --- /dev/null +++ b/klippyoctostart.py @@ -0,0 +1,23 @@ +#!/usr/bin/env python + +import subprocess +import time +import os + +OCTOPRINT = ["/opt/octoprint/venv/bin/octoprint", "serve"] + +def main(): + os.environ['HOME'] = '/home/octoprint' + + # Start klipper + klipper = subprocess.Popen(['/home/octoprint/klippy-env/bin/python', '/home/octoprint/klipper/klippy/klippy.py', '/home/octoprint/.octoprint/printer.cfg']) + + # Run in a loop so Octoprint can restart in the container + while 1: + Poctoprint = subprocess.Popen(OCTOPRINT) + Poctoprint.wait() + time.sleep(1) + +if __name__ == '__main__': + main() +