octoprint-containers/octoprint/Dockerfile

150 lines
5.5 KiB
Docker

#FROM lpenz/devuan-beowulf-armhf-minbase
FROM dyne/devuan:beowulf
SHELL ["/bin/bash", "-c"]
# Octoprint itself
ARG WITH_KLIPPER="no"
ENV WITH_KLIPPER ${WITH_KLIPPER}
ARG WITH_SAFEMODE="no"
ENV WITH_SAFEMODE ${WITH_SAFEMODE}
ARG OCTO_PRINTER="/tmp/printer"
ENV OCTO_PRINTER ${OCTO_PRINTER}
# Balena /bin/sh stub is supposed to cleanup itself, but loops when initally called by apt...
# https://github.com/balena-io-library/base-images/issues/637
#RUN [[ -f /bin/sh.real ]] && rm /bin/sh && mv /bin/sh.real /bin/sh
RUN echo "deb http://deb.devuan.org/merged/ beowulf main contrib non-free" > /etc/apt/sources.list
RUN apt-get update && \
apt-get install -y python3-pip python3-dev python3-setuptools python3-wheel python3-venv \
git build-essential ffmpeg dbus jq curl jq socat procps vim-tiny \
libffi-dev libssl-dev libyaml-dev zlib1g-dev libjpeg62-turbo-dev libatlas-base-dev && \
apt-get install -y -f && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
RUN pip3 install yq
ENV OCTO_DEST /opt/octoprint/OctoPrint
WORKDIR ${OCTO_DEST}
ARG release
# Travis often fails in getting latest octoprint release, this is why we
# have this while/re-try loop...
RUN echo -e '[global]\n\
extra-index-url=https://www.piwheels.org/simple'\
>> /etc/pip.conf && cat /etc/pip.conf
RUN if [ "${release}" = "latest" ]; then \
i=0; \
while true; do \
i=$(expr $i + 1); \
release=$(curl --silent --location https://api.github.com/repos/foosel/OctoPrint/releases/latest | jq -r .tag_name); \
[ "${release}" = "null" -a $i -lt 10 ] || break;\
echo "Cannot get release info -- retrying"; \
sleep 10; \
done; \
fi; \
echo "** Building Octoprint ${release}"; \
git clone --branch "${release}" https://github.com/foosel/OctoPrint.git ${OCTO_DEST}
ENV VIRTUAL_ENV=${OCTO_DEST}/venv
RUN python3 -m venv $VIRTUAL_ENV
ENV PATH="$VIRTUAL_ENV/bin:$PATH"
RUN echo "** Entering virtualenv ${WORKDIR}/venv" && \
echo "** venv: Installing wheel." && \
pip3 install wheel && \
echo "** venv: Installing MarkupSafe." && \
pip3 install MarkupSafe && \
echo "** venv: Installing Jinja2." && \
pip3 install Jinja2 && \
echo "** venv: Installing PyYAML." && \
pip3 install PyYAML && \
echo "** venv: Installing numpy." && \
pip3 install numpy && \
echo "** venv: Installing Urllib3." && \
pip3 install requests
RUN echo "** venv: starting setup.py install." && \
python3 setup.py install
RUN echo "** venv: installing plugins." && \
pip3 install \
https://github.com/Octoprint/Octoprint-MQTT/archive/master.zip \
https://github.com/birkbjo/Octoprint-Themeify/archive/master.zip \
https://github.com/AlexVerrico/Octoprint-Display-ETA/archive/master.zip \
https://github.com/pablogventura/Octoprint-ETA/archive/master.zip \
https://github.com/1r0b1n0/Octoprint-Tempsgraph/archive/master.zip \
https://github.com/tpmullan/Octoprint-DetailedProgress/archive/master.zip \
https://github.com/marian42/octoprint-preheat/archive/master.zip \
https://github.com/jneilliii/Octoprint-TabOrder/archive/master.zip \
https://github.com/jneilliii/Octoprint-BedLevelVisualizer/archive/master.zip \
https://github.com/jneilliii/Octoprint-Python3PluginCompatibilityCheck/archive/master.zip \
https://github.com/jneilliii/Octoprint-UltimakerFormatPackage/archive/master.zip \
https://github.com/jneilliii/Octoprint-ConsolidateTempControl/archive/master.zip \
https://github.com/jneilliii/Octoprint-PrusaSlicerThumbnails/archive/master.zip \
https://github.com/jneilliii/Octoprint-FloatingNavbar/archive/master.zip \
https://github.com/jneilliii/Octoprint-PlotlyTempGraph/archive/master.zip \
https://github.com/jneilliii/Octoprint-CustomBackground/archive/master.zip \
https://github.com/OllisGit/Octoprint-FilamentManager/releases/latest/download/master.zip \
https://github.com/OllisGit/Octoprint-DisplayLayerProgress/releases/latest/download/master.zip \
https://github.com/MoonshineSG/Octoprint-MultiColors/archive/master.zip \
https://github.com/Kragrathea/Octoprint-PrettyGCode/archive/master.zip \
https://github.com/quanticchaos/OctoPrint-Webcamsb/archive/master.zip
#https://github.com/FormerLurker/Octolapse/archive/master.zip \
#https://github.com/jneilliii/Octoprint-TasmotaMQTT/archive/master.zip \
#https://github.com/mikedmor/Octoprint_Multicam/archive/master.zip \
#https://github.com/imrahil/Octoprint-PrintHistory/archive/master.zip \
#https://github.com/OllisGit/Octoprint-PrintJobHistory/releases/latest/download/master.zip \
#https://github.com/AliceGrey/OctoPrintKlipperPlugin/archive/master.zip \
##https://github.com/mmone/OctoPrintKlipper/archive/master.zip
#echo "** venv: Installing zip." && \
#./venv/bin/pip3 install zip && \
# klipper
# The application of the changes to octoprints config.yaml happen on first run in /opt/octoprint/bin/run.sh copied in above from the build directory.
ARG SOCAT_TYPE="TCP"
ENV SOCAT_TYPE ${SOCAT_TYPE}
ARG SOCAT_HOST="klipper"
ENV SOCAT_HOST ${SOCAT_HOST}
ARG SOCAT_PORT="9999"
ENV SOCAT_PORT ${SOCAT_PORT}
#ARG SOCAT_DEBUG=" -d -d -d -t 60 -T 60 "
ARG SOCAT_DEBUG=""
ENV SOCAT_DEBUG ${SOCAT_DEBUG}
ARG OCTO_PRINTER="/tmp"
ENV OCTO_PRINTER ${OCTO_PRINTER}
RUN if [ "${WITH_KLIPPER}" = "yes" ]; then \
mkdir ${OCTO_PRINTER} && chgrp dialout ${OCTO_PRINTER} && \
pip3 install \
https://github.com/AliceGrey/OctoPrintKlipperPlugin/archive/master.zip \
; \
fi
WORKDIR /opt/octoprint
#COPY bin bin/
COPY etc etc/
VOLUME /opt/octoprint/data
EXPOSE 5000
CMD ["/opt/octoprint/bin/run.sh"]