Хотел бы обновить свою предыдущую инструкцию по установке 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.
После первого запуска система задаст несколько вопросов:
- Вводим новый пароль для root
- Создаем нового пользователя (у меня paradox)
- Вводим новый пароль для пользователя
- Вводим реальное имя (можно просто нажать enter)
- Меняем язык локали и таймзону (обычно автоматически определяет верно)
После этого нужно добавить нашего пользователя в группу 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
Расскажу что меня не устроило в готовом образе:
- Я не могу отключать и включать камеру из меню Octoprint
- Я не могу настроить работу с 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 ССЫЛКА
Вынужден просить помощи, что-то 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
Не пойму в чём проблема, тестовый «привет мир» скачивается и работает.
Удалять все имиджи и вольумы и создавать заново пробовали?
Хорошая статья, спасибо!