Octoprint в Docker на Orange Pi PC

Хотел бы обновить свою предыдущую инструкцию по установке Octoprint на Orange Pi. В этот раз решил все запустить в Docker контейнере. Неплохая инструкция есть на официальном сайте Octoprint, но я в процессе установки столкнулся с некоторыми трудностями при установке дополнительного функционала к которому привык на прошлой версии.

Для начала нужно будет купить саму плату, я выбрал такую же как и в прошлый раз — Orange Pi PC H3 ССЫЛКА НА АЛИ ну и sd карточку, хватит 8-16гб. Только не нужно брать самую тормозную. Я брал такую ССЫЛКА НА АЛИ на 32Гб.

Если хотите реализовать включение / отключение принтера из Octoprint нужно будет еще докупить реле, я выбрал твердотельное ССЫЛКА НА АЛИ.

Установка Armbian

Для установки нам потребуется образ системы, я буду использовать минимальный образ Ubuntu Jammy. Качаем на сайте Armbian под нашу плату :

Далее записываем на флешку образ, я использую Win32 Disk Imager.
Запускаем плату, подключаем ethernet кабель, ищем в роутере полученный IP.
Подключаемся к апельсинке по SSH, например через Putty. Авторизуемся под root, пароль 1234.
После первого запуска система задаст несколько вопросов:

  1. Вводим новый пароль для root
  2. Создаем нового пользователя (у меня paradox)
  3. Вводим новый пароль для пользователя
  4. Вводим реальное имя (можно просто нажать enter)
  5. Меняем язык локали и таймзону (обычно автоматически определяет верно)

После этого нужно добавить нашего пользователя в группу sudo (у меня пользователь paradox)

usermod -aG sudo paradox

После этого можно выйти из системы и зайти уже под вашим пользователем.

Нас приветствует свежая система:

Сразу после запуска обновляем базу пакетов:

sudo apt update
sudo apt upgrade


Для более удобной настройки рекомендую установить armbian-config:

 sudo apt install armbian-config

Установка Docker и Docker-compose

Теперь можно ставить Docker. Я использовал вот эту инструкцию.
Коротко опишу:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo \  "deb [arch=arm64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install -y docker.io
sudo usermod -aG docker $USER

Теперь нужно перелогиниться в систему (exit), и поставить compose:

sudo apt-get install -y docker-compose
sudo service docker restart

Запуск Octoprint

Для начала поставим Git:

sudo apt install git

Теперь можно скачать репозиторий с GitHub:

git clone https://github.com/OctoPrint/octoprint-docker.git

В этом репозитории есть подробная инструкция по запуску и там же готовый docker-compose.yml . Если вам не нужны дополнительные плюхи на этом можно остановиться. У вас будет рабочий octoprint с возможностью подключить камеру.
Запуск прост, в папке с проектом набираем:

docker-compose up -d

Далее можно проверить состояние работы:

docker-compose ps

Расскажу что меня не устроило в готовом образе:

  1. Я не могу отключать и включать камеру из меню Octoprint
  2. Я не могу настроить работу с GPIO (через них я управляю реле на питание принтера)

Управление питанием

Если контейнер запущен, останавливаем его:

docker-compose down

Для возможности управлять портами GPIO нам потребуется установить в образ дополнительные библиотеки libgpiod. Подробнее можно почитать ТУТ. Репозиторий на GitHub.

Добавим в наш Dockerfile изменения :

....
WORKDIR /mjpg/mjpg-streamer-master/mjpg-streamer-experimental
RUN make
RUN make install

# install libgpiod
WORKDIR /opt/octoprint
RUN git clone https://github.com/devdotnetorg/docker-libgpiod.git && \
    cd docker-libgpiod && chmod +x setup-libgpiod.sh && \
    ./setup-libgpiod.sh 1.6.3 /usr/share/libgpiod
RUN rm -rf docker-libgpiod
.....

Теперь можем пересобрать образ:

docker build . --no-cache -t octoprint_it_chainik

После сборки, открываем и правим docker-compose до такого вида:

version: '2.4'

services:
  octoprint:
    image: octoprint_it_chainik:latest
    restart: unless-stopped
    privileged: true
    ports:
      - 80:80
    volumes:
     - ./octoprint:/octoprint
     - /dev:/dev
    environment:
     # chose you camera port
     - CAMERA_DEV=/dev/video1
     - ENABLE_MJPG_STREAMER=true

Подключаем реле к плате, у меня будет подключено к GND, +3.3B и PA20.

Вот теперь запускаем контейнер и заходим в него для проверки работы GPIO:

docker-compose up -d
docker exec -it octoprint-docker_octoprint_1 bash 

Команды для включения и отключения пина GPIO и соответственно принтера:

gpioset 0 20=1
gpioset 0 20=0

Если все работает, заходим в Octoprint и ставим PSU Control. Затем настраиваем:

На этом настройка питания закончена.

Управление камерой

Для управления камерой нужно будет установить System Command Editor, и настроить, добавив в него два пункта меню:

Команда для включения:

s6-svc -u /var/run/s6/services/mjpg-streamer/

И команда для отключения:

s6-svc -d /var/run/s6/services/mjpg-streamer/

Ну и последнее. Что бы при запуске контейнера камера не стартовала автоматически нужно добавит несколько строк в Dockerfile:

....
# Copy services into s6 servicedir and set default ENV vars
COPY root /
ENV CAMERA_DEV /dev/video0
ENV MJPG_STREAMER_INPUT -n -r 640x480
ENV PIP_USER true
ENV PYTHONUSERBASE /octoprint/plugins
ENV PATH "${PYTHONUSERBASE}/bin:${PATH}"

#off autostart mjpg-streamer
RUN cd /etc/services.d/mjpg-streamer && touch down


# set WORKDIR
WORKDIR /octoprint
....

После правок в Dockerfile собираем контейнер заново:

docker build . --no-cache -t octoprint_it_chainik

Не забываем в фале docker-compose.yml выбрать правильное устройство для камеры (/dev/video0 /dev/video1 /dev/video2 и т.д.) выбираем подбором, на каком заработает камера.

...  
 environment:
     # chose you camera port
     - CAMERA_DEV=/dev/video1
     - ENABLE_MJPG_STREAMER=true

Затем останавливаем предыдущий контейнер, и запускаем заново с новым образом:

docker-compose down && docker-compose up -d

Для тех кому лень самому править файлы выкладываю архив с готовыми Dockerfile и docker-compose.yml ССЫЛКА

Запись опубликована автором в рубрике 3D.

Octoprint в Docker на Orange Pi PC: 3 комментария

  1. Роман

    Вынужден просить помощи, что-то pull октопринта не проходит, вылетает с ошибкой при команде docker-compose up -d:
    ERROR: failed to register layer: error creating overlay mount to /var/lib/docker/overlay2/629171a2ac426843139700f886f9dac621f2f8d38aa937def8790f914ba50b31/merged: too many levels of symbolic links
    Не пойму в чём проблема, тестовый «привет мир» скачивается и работает.

    1. Analog Автор записи

      Удалять все имиджи и вольумы и создавать заново пробовали?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *