build: make the dockerfile multi-staged
This commit is contained in:
parent
3ffd272e59
commit
b7d68e8357
|
|
@ -1 +1,2 @@
|
||||||
/printer
|
/printer
|
||||||
|
/printer_storage
|
||||||
|
|
@ -1,13 +1,15 @@
|
||||||
version: "3.8"
|
version: "3.8"
|
||||||
services:
|
services:
|
||||||
printer:
|
printer:
|
||||||
container_name: klipper-printer-simulavr
|
container_name: printer
|
||||||
build:
|
build:
|
||||||
context: docker
|
context: .
|
||||||
dockerfile: Dockerfile
|
dockerfile: docker/Dockerfile
|
||||||
image: klipper-printer-simulavr
|
|
||||||
volumes:
|
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:
|
ports:
|
||||||
- "7125:7125"
|
- "7125:7125"
|
||||||
networks:
|
networks:
|
||||||
|
|
|
||||||
|
|
@ -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 \
|
RUN apt-get update && apt-get install -y \
|
||||||
--no-install-recommends \
|
--no-install-recommends \
|
||||||
|
|
@ -6,7 +6,6 @@ RUN apt-get update && apt-get install -y \
|
||||||
### non specific packages
|
### non specific packages
|
||||||
git \
|
git \
|
||||||
sudo \
|
sudo \
|
||||||
supervisor \
|
|
||||||
swig \
|
swig \
|
||||||
virtualenv \
|
virtualenv \
|
||||||
### klipper
|
### klipper
|
||||||
|
|
@ -16,6 +15,7 @@ RUN apt-get update && apt-get install -y \
|
||||||
cmake \
|
cmake \
|
||||||
gcc-avr \
|
gcc-avr \
|
||||||
### moonraker
|
### moonraker
|
||||||
|
supervisor \
|
||||||
curl \
|
curl \
|
||||||
iproute2 \
|
iproute2 \
|
||||||
libcurl4-openssl-dev \
|
libcurl4-openssl-dev \
|
||||||
|
|
@ -30,18 +30,74 @@ RUN apt-get update && apt-get install -y \
|
||||||
### clean up
|
### clean up
|
||||||
&& apt-get -y autoremove \
|
&& apt-get -y autoremove \
|
||||||
&& apt-get clean \
|
&& apt-get clean \
|
||||||
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \
|
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
|
||||||
### add user "printer"
|
|
||||||
&& groupadd --force -g 1000 printer \
|
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 \
|
&& useradd -rm -d /home/printer -g 1000 -u 1000 printer \
|
||||||
&& usermod -aG dialout,tty,sudo printer \
|
&& usermod -aG dialout,tty,sudo printer \
|
||||||
&& echo 'printer ALL=(ALL:ALL) NOPASSWD:ALL' >> /etc/sudoers.d/printer
|
&& echo 'printer ALL=(ALL:ALL) NOPASSWD:ALL' >> /etc/sudoers.d/printer
|
||||||
|
|
||||||
### copy all required files
|
### copy all required files
|
||||||
COPY simulavr.config /usr/src
|
COPY docker/supervisord.conf /etc/supervisor/supervisord.conf
|
||||||
COPY supervisord.conf /etc/supervisor/supervisord.conf
|
COPY docker/service_control.sh /bin/service_control
|
||||||
COPY service_control.sh /bin/service_control
|
COPY docker/start.sh /bin/start
|
||||||
COPY start.sh /bin/start
|
|
||||||
|
|
||||||
### make entrypoint executable
|
### make entrypoint executable
|
||||||
RUN chmod +x /bin/start
|
RUN chmod +x /bin/start
|
||||||
|
|
@ -49,4 +105,13 @@ RUN chmod +x /bin/start
|
||||||
USER printer
|
USER printer
|
||||||
WORKDIR /home/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"]
|
ENTRYPOINT ["/bin/start"]
|
||||||
|
|
|
||||||
|
|
@ -1,82 +1,15 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
[ ! -e /bin/systemctl ] && sudo -S ln -s /bin/true /bin/systemctl
|
[ ! -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
|
cd ~ || exit 1
|
||||||
[ ! -d ~/klipper_config ] && mkdir klipper_config
|
[ ! -d ~/klipper_config ] && mkdir klipper_config
|
||||||
[ ! -d ~/klipper_logs ] && mkdir klipper_logs
|
[ ! -d ~/klipper_logs ] && mkdir klipper_logs
|
||||||
[ ! -d ~/gcode_files ] && mkdir gcode_files
|
[ ! -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(){
|
download_configs(){
|
||||||
cd ~/klipper_config || exit 1
|
cd ~/klipper_config || exit 1
|
||||||
[ ! -f ~/klipper_config/printer.cfg ] && curl -O $printer_cfg
|
[ ! -f ~/klipper_config/printer.cfg ] && cp /home/printer/example-configs/printer.cfg .
|
||||||
[ ! -f ~/klipper_config/moonraker.conf ] && curl -O $moonraker_conf
|
[ ! -f ~/klipper_config/moonraker.conf ] && cp /home/printer/example-configs/moonraker.conf .
|
||||||
cd ~ || exit 1
|
cd ~ || exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -86,13 +19,6 @@ regain_ownership(){
|
||||||
sudo chown -R printer:printer ~/gcode_files
|
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
|
download_configs
|
||||||
regain_ownership
|
regain_ownership
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -17,15 +17,15 @@ serverurl=unix:///tmp/supervisor.sock
|
||||||
[unix_http_server]
|
[unix_http_server]
|
||||||
file=/tmp/supervisor.sock
|
file=/tmp/supervisor.sock
|
||||||
|
|
||||||
[program:simulavr]
|
# [program:simulavr]
|
||||||
command=bash -c 'sleep 10 && /home/printer/klipper/scripts/avrsim.py -m atmega644 -s 20000000 -b 250000 /home/printer/simulavr.elf'
|
# command=bash -c 'sleep 10 && /home/printer/klipper/scripts/avrsim.py -m atmega644 /home/printer/simulavr.elf'
|
||||||
environment=PYTHONPATH=/home/printer/simulavr/build/pysimulavr/
|
# environment=PYTHONPATH=/home/printer/simulavr/build/pysimulavr/
|
||||||
user=printer
|
# user=printer
|
||||||
process_name=simulavr
|
# process_name=simulavr
|
||||||
directory=/home/printer
|
# directory=/home/printer
|
||||||
autostart=true
|
# autostart=true
|
||||||
autorestart=true
|
# autorestart=true
|
||||||
redirect_stderr=true
|
# redirect_stderr=true
|
||||||
|
|
||||||
[program:klipper]
|
[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
|
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
|
||||||
|
|
|
||||||
|
|
@ -247,9 +247,6 @@ gcode:
|
||||||
#*# <---------------------- SAVE_CONFIG ---------------------->
|
#*# <---------------------- SAVE_CONFIG ---------------------->
|
||||||
#*# DO NOT EDIT THIS BLOCK OR BELOW. The contents are auto-generated.
|
#*# DO NOT EDIT THIS BLOCK OR BELOW. The contents are auto-generated.
|
||||||
#*#
|
#*#
|
||||||
#*# [probe]
|
|
||||||
#*# z_offset = 0
|
|
||||||
#*#
|
|
||||||
#*# [bed_mesh default]
|
#*# [bed_mesh default]
|
||||||
#*# version = 1
|
#*# version = 1
|
||||||
#*# points =
|
#*# points =
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue