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() +