From b7d68e83570103c092315cc916d21e84243ac88b Mon Sep 17 00:00:00 2001 From: pataar Date: Thu, 24 Feb 2022 21:48:21 +0100 Subject: [PATCH 1/3] build: make the dockerfile multi-staged --- .gitignore | 3 +- docker-compose.yml | 12 +++--- docker/Dockerfile | 83 +++++++++++++++++++++++++++++++++---- docker/start.sh | 78 +--------------------------------- docker/supervisord.conf | 18 ++++---- example-configs/printer.cfg | 3 -- 6 files changed, 94 insertions(+), 103 deletions(-) diff --git a/.gitignore b/.gitignore index 1d89cbc..f1fa793 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ -/printer \ No newline at end of file +/printer +/printer_storage \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 6077406..2eadcc3 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,13 +1,15 @@ version: "3.8" services: printer: - container_name: klipper-printer-simulavr + container_name: printer build: - context: docker - dockerfile: Dockerfile - image: klipper-printer-simulavr + context: . + dockerfile: docker/Dockerfile volumes: - - ./printer:/home/printer + - ./printer_storage/.moonraker_database:/home/printer/.moonraker_database:delegated + - ./printer_storage/gcode_files:/home/printer/gcode_files:delegated + - ./printer_storage/klipper_config:/home/printer/klipper_config:delegated + - ./printer_storage/klipper_logs:/home/printer/klipper_logs:delegated ports: - "7125:7125" networks: diff --git a/docker/Dockerfile b/docker/Dockerfile index 4e8a13d..f5b9382 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,4 +1,4 @@ -FROM python:3.10-slim-bullseye AS base +FROM python:3.10-slim-bullseye AS builder RUN apt-get update && apt-get install -y \ --no-install-recommends \ @@ -6,7 +6,6 @@ RUN apt-get update && apt-get install -y \ ### non specific packages git \ sudo \ - supervisor \ swig \ virtualenv \ ### klipper @@ -16,6 +15,7 @@ RUN apt-get update && apt-get install -y \ cmake \ gcc-avr \ ### moonraker + supervisor \ curl \ iproute2 \ libcurl4-openssl-dev \ @@ -30,18 +30,74 @@ RUN apt-get update && apt-get install -y \ ### clean up && apt-get -y autoremove \ && apt-get clean \ - && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \ - ### add user "printer" - && groupadd --force -g 1000 printer \ + && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* + +WORKDIR /build + +### Prepare our applications +#### Klipper +RUN git clone --depth=1 https://github.com/klipper3d/klipper && \ + rm -rf klipper/docs klipper/test klipper/.github && \ + virtualenv -p python3 /build/klippy-env && \ + /build/klippy-env/bin/pip install -r /build/klipper/scripts/klippy-requirements.txt && \ + rm -rf lib + +#### Simulavr +COPY docker/simulavr.config /usr/src +RUN git clone -b master git://git.savannah.nongnu.org/simulavr.git && \ + # Build the firmware + cd klipper && \ + cp /usr/src/simulavr.config .config && \ + make PYTHON=python3 && \ + cp out/klipper.elf /build/simulavr.elf && \ + rm -f .config && make PYTHON=python3 clean && \ + # Build simulavr + cd ../simulavr && \ + make python && \ + make build && \ + make clean + +#### Moonraker +RUN git clone --depth=1 https://github.com/Arksine/moonraker && \ + rm -rf moonraker/docs moonraker/tests moonraker/.github && \ + virtualenv -p python3 /build/moonraker-env && \ + /build/moonraker-env/bin/pip install -r /build/moonraker/scripts/moonraker-requirements.txt + +## --------- This is the runner image + +FROM python:3.10-slim-bullseye AS runner +RUN apt-get update && apt-get install -y \ + --no-install-recommends \ + --no-install-suggests \ + ### non specific packages + git \ + supervisor \ + sudo \ + swig \ + ### moonraker + curl \ + iproute2 \ + python3-libgpiod \ + libcurl4-openssl-dev \ + libjpeg-dev \ + liblmdb-dev \ + libopenjp2-7 \ + libsodium-dev \ + libssl-dev \ + ### clean up + && apt-get -y autoremove \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* + +RUN groupadd --force -g 1000 printer \ && useradd -rm -d /home/printer -g 1000 -u 1000 printer \ && usermod -aG dialout,tty,sudo printer \ && echo 'printer ALL=(ALL:ALL) NOPASSWD:ALL' >> /etc/sudoers.d/printer ### copy all required files -COPY simulavr.config /usr/src -COPY supervisord.conf /etc/supervisor/supervisord.conf -COPY service_control.sh /bin/service_control -COPY start.sh /bin/start +COPY docker/supervisord.conf /etc/supervisor/supervisord.conf +COPY docker/service_control.sh /bin/service_control +COPY docker/start.sh /bin/start ### make entrypoint executable RUN chmod +x /bin/start @@ -49,4 +105,13 @@ RUN chmod +x /bin/start USER printer WORKDIR /home/printer +# Copy our prebuilt applications from the builder stage +COPY --from=builder --chown=printer:printer /build/klippy-env ./klippy-env +COPY --from=builder --chown=printer:printer /build/klipper ./klipper +COPY --from=builder --chown=printer:printer /build/moonraker ./moonraker +COPY --from=builder --chown=printer:printer /build/moonraker-env ./moonraker-env +COPY --from=builder --chown=printer:printer /build/simulavr ./simulavr + +COPY ./example-configs/ ./example-configs/ + ENTRYPOINT ["/bin/start"] diff --git a/docker/start.sh b/docker/start.sh index 319f677..ddd33c1 100644 --- a/docker/start.sh +++ b/docker/start.sh @@ -1,82 +1,15 @@ #!/bin/bash [ ! -e /bin/systemctl ] && sudo -S ln -s /bin/true /bin/systemctl -klipper_git="https://github.com/klipper3d/klipper" -moonraker_git="https://github.com/Arksine/moonraker" -simulavr_git="git://git.savannah.nongnu.org/simulavr.git" -simulavr_cfg="/usr/src/simulavr.config" - -printer_cfg="https://raw.githubusercontent.com/th33xitus/klipper-printer-simulavr-docker/master/example-configs/printer.cfg" -moonraker_conf="https://raw.githubusercontent.com/th33xitus/klipper-printer-simulavr-docker/master/example-configs/moonraker.conf" - cd ~ || exit 1 [ ! -d ~/klipper_config ] && mkdir klipper_config [ ! -d ~/klipper_logs ] && mkdir klipper_logs [ ! -d ~/gcode_files ] && mkdir gcode_files -setup_klipper(){ - [ -d ~/klipper ] && return - echo "##### Cloning Klipper ..." - git clone $klipper_git - echo "##### Done!" -} - -build_klipper_env(){ - [ -d ~/klippy-env ] && return - echo "##### Building Klipper virtualenv ..." - virtualenv -p python3 ~/klippy-env - ~/klippy-env/bin/pip install -r ~/klipper/scripts/klippy-requirements.txt - echo "##### Done!" -} - -setup_moonraker(){ - [ -d ~/moonraker ] && return - echo "##### Cloning Moonraker ..." - git clone $moonraker_git - echo "##### Done!" -} - -build_moonraker_env(){ - [ -d ~/moonraker-env ] && return - echo "##### Building Moonraker virtualenv ..." - virtualenv -p python3 ~/moonraker-env - ~/moonraker-env/bin/pip install -r ~/moonraker/scripts/moonraker-requirements.txt - echo "##### Done!" -} - -build_firmware(){ - [ -f ~/simulavr.elf ] && return - echo "##### Building Klipper firmware ..." - [ ! -d ~/klipper ] && setup_klipper - cd ~/klipper || exit 1 - cp $simulavr_cfg .config && make PYTHON=python3 - cp out/klipper.elf ~/simulavr.elf - rm -f .config && make clean - cd ~ || exit 1 - echo "##### Done!" -} - -setup_simulavr(){ - [ -d ~/simulavr ] && return - echo "##### Cloning Simulavr ..." - git clone $simulavr_git - echo "##### Done!" -} - -build_simulavr(){ - file="${HOME}/simulavr/build/pysimulavr/_pysimulavr.*.so" - # shellcheck disable=SC2086 - [ "$(ls $file 2> /dev/null)" ] && return - echo "##### Building Simulavr ..." - cd ~/simulavr || exit 1 - make clean && make python && make build - echo "##### Done!" -} - download_configs(){ cd ~/klipper_config || exit 1 - [ ! -f ~/klipper_config/printer.cfg ] && curl -O $printer_cfg - [ ! -f ~/klipper_config/moonraker.conf ] && curl -O $moonraker_conf + [ ! -f ~/klipper_config/printer.cfg ] && cp /home/printer/example-configs/printer.cfg . + [ ! -f ~/klipper_config/moonraker.conf ] && cp /home/printer/example-configs/moonraker.conf . cd ~ || exit 1 } @@ -86,13 +19,6 @@ regain_ownership(){ sudo chown -R printer:printer ~/gcode_files } -setup_klipper -build_klipper_env -setup_moonraker -build_moonraker_env -build_firmware -setup_simulavr -build_simulavr download_configs regain_ownership diff --git a/docker/supervisord.conf b/docker/supervisord.conf index 9701ec9..c883642 100644 --- a/docker/supervisord.conf +++ b/docker/supervisord.conf @@ -17,15 +17,15 @@ serverurl=unix:///tmp/supervisor.sock [unix_http_server] file=/tmp/supervisor.sock -[program:simulavr] -command=bash -c 'sleep 10 && /home/printer/klipper/scripts/avrsim.py -m atmega644 -s 20000000 -b 250000 /home/printer/simulavr.elf' -environment=PYTHONPATH=/home/printer/simulavr/build/pysimulavr/ -user=printer -process_name=simulavr -directory=/home/printer -autostart=true -autorestart=true -redirect_stderr=true +# [program:simulavr] +# command=bash -c 'sleep 10 && /home/printer/klipper/scripts/avrsim.py -m atmega644 /home/printer/simulavr.elf' +# environment=PYTHONPATH=/home/printer/simulavr/build/pysimulavr/ +# user=printer +# process_name=simulavr +# directory=/home/printer +# autostart=true +# autorestart=true +# redirect_stderr=true [program:klipper] command=/home/printer/klippy-env/bin/python /home/printer/klipper/klippy/klippy.py /home/printer/klipper_config/printer.cfg -l /home/printer/klipper_logs/klippy.log -a /tmp/klippy_uds diff --git a/example-configs/printer.cfg b/example-configs/printer.cfg index 5e153fe..4b179df 100644 --- a/example-configs/printer.cfg +++ b/example-configs/printer.cfg @@ -247,9 +247,6 @@ gcode: #*# <---------------------- SAVE_CONFIG ----------------------> #*# DO NOT EDIT THIS BLOCK OR BELOW. The contents are auto-generated. #*# -#*# [probe] -#*# z_offset = 0 -#*# #*# [bed_mesh default] #*# version = 1 #*# points = From 760f09815690eb1dd10c4d882d19e003dd369e5d Mon Sep 17 00:00:00 2001 From: pataar Date: Thu, 24 Feb 2022 21:50:22 +0100 Subject: [PATCH 2/3] uncomment simulavr --- docker/Dockerfile | 1 + docker/supervisord.conf | 18 +++++++++--------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index f5b9382..79f8aff 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -111,6 +111,7 @@ COPY --from=builder --chown=printer:printer /build/klipper ./klipper COPY --from=builder --chown=printer:printer /build/moonraker ./moonraker COPY --from=builder --chown=printer:printer /build/moonraker-env ./moonraker-env COPY --from=builder --chown=printer:printer /build/simulavr ./simulavr +COPY --from=builder --chown=printer:printer /build/simulavr.elf ./simulavr.elf COPY ./example-configs/ ./example-configs/ diff --git a/docker/supervisord.conf b/docker/supervisord.conf index c883642..d2f5850 100644 --- a/docker/supervisord.conf +++ b/docker/supervisord.conf @@ -17,15 +17,15 @@ serverurl=unix:///tmp/supervisor.sock [unix_http_server] file=/tmp/supervisor.sock -# [program:simulavr] -# command=bash -c 'sleep 10 && /home/printer/klipper/scripts/avrsim.py -m atmega644 /home/printer/simulavr.elf' -# environment=PYTHONPATH=/home/printer/simulavr/build/pysimulavr/ -# user=printer -# process_name=simulavr -# directory=/home/printer -# autostart=true -# autorestart=true -# redirect_stderr=true +[program:simulavr] +command=bash -c 'sleep 10 && /home/printer/klipper/scripts/avrsim.py -m atmega644 /home/printer/simulavr.elf' +environment=PYTHONPATH=/home/printer/simulavr/build/pysimulavr/ +user=printer +process_name=simulavr +directory=/home/printer +autostart=true +autorestart=true +redirect_stderr=true [program:klipper] command=/home/printer/klippy-env/bin/python /home/printer/klipper/klippy/klippy.py /home/printer/klipper_config/printer.cfg -l /home/printer/klipper_logs/klippy.log -a /tmp/klippy_uds From 1eea5140d957f0beb59456f4f5da066e15f3b245 Mon Sep 17 00:00:00 2001 From: pataar Date: Thu, 24 Feb 2022 22:29:08 +0100 Subject: [PATCH 3/3] update stuff --- docker/Dockerfile | 21 ++++++++------------- docker/supervisord.conf | 2 +- 2 files changed, 9 insertions(+), 14 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index 79f8aff..06c1999 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -5,7 +5,6 @@ RUN apt-get update && apt-get install -y \ --no-install-suggests \ ### non specific packages git \ - sudo \ swig \ virtualenv \ ### klipper @@ -15,7 +14,6 @@ RUN apt-get update && apt-get install -y \ cmake \ gcc-avr \ ### moonraker - supervisor \ curl \ iproute2 \ libcurl4-openssl-dev \ @@ -36,11 +34,9 @@ WORKDIR /build ### Prepare our applications #### Klipper -RUN git clone --depth=1 https://github.com/klipper3d/klipper && \ - rm -rf klipper/docs klipper/test klipper/.github && \ +RUN git clone https://github.com/klipper3d/klipper && \ virtualenv -p python3 /build/klippy-env && \ - /build/klippy-env/bin/pip install -r /build/klipper/scripts/klippy-requirements.txt && \ - rm -rf lib + /build/klippy-env/bin/pip install -r /build/klipper/scripts/klippy-requirements.txt #### Simulavr COPY docker/simulavr.config /usr/src @@ -58,8 +54,7 @@ RUN git clone -b master git://git.savannah.nongnu.org/simulavr.git && \ make clean #### Moonraker -RUN git clone --depth=1 https://github.com/Arksine/moonraker && \ - rm -rf moonraker/docs moonraker/tests moonraker/.github && \ +RUN git clone https://github.com/Arksine/moonraker && \ virtualenv -p python3 /build/moonraker-env && \ /build/moonraker-env/bin/pip install -r /build/moonraker/scripts/moonraker-requirements.txt @@ -71,15 +66,13 @@ RUN apt-get update && apt-get install -y \ --no-install-suggests \ ### non specific packages git \ + build-essential \ supervisor \ sudo \ - swig \ ### moonraker curl \ iproute2 \ - python3-libgpiod \ libcurl4-openssl-dev \ - libjpeg-dev \ liblmdb-dev \ libopenjp2-7 \ libsodium-dev \ @@ -96,18 +89,20 @@ RUN groupadd --force -g 1000 printer \ ### copy all required files COPY docker/supervisord.conf /etc/supervisor/supervisord.conf -COPY docker/service_control.sh /bin/service_control COPY docker/start.sh /bin/start +COPY docker/service_control.sh /bin/service_control ### make entrypoint executable RUN chmod +x /bin/start +RUN chmod +x /bin/service_control USER printer WORKDIR /home/printer + # Copy our prebuilt applications from the builder stage COPY --from=builder --chown=printer:printer /build/klippy-env ./klippy-env -COPY --from=builder --chown=printer:printer /build/klipper ./klipper +COPY --from=builder --chown=printer:printer /build/klipper/ ./klipper/ COPY --from=builder --chown=printer:printer /build/moonraker ./moonraker COPY --from=builder --chown=printer:printer /build/moonraker-env ./moonraker-env COPY --from=builder --chown=printer:printer /build/simulavr ./simulavr diff --git a/docker/supervisord.conf b/docker/supervisord.conf index d2f5850..9701ec9 100644 --- a/docker/supervisord.conf +++ b/docker/supervisord.conf @@ -18,7 +18,7 @@ serverurl=unix:///tmp/supervisor.sock file=/tmp/supervisor.sock [program:simulavr] -command=bash -c 'sleep 10 && /home/printer/klipper/scripts/avrsim.py -m atmega644 /home/printer/simulavr.elf' +command=bash -c 'sleep 10 && /home/printer/klipper/scripts/avrsim.py -m atmega644 -s 20000000 -b 250000 /home/printer/simulavr.elf' environment=PYTHONPATH=/home/printer/simulavr/build/pysimulavr/ user=printer process_name=simulavr