우분투 서버에 OctoPrint설치

ㅎㅈㅎ·2022년 6월 5일
0

홈 서버

목록 보기
3/3
post-thumbnail

참조 글1

패키지 목록 업데이트 및 업그레이드

sudo apt update && sudo apt upgrade -y
*편의를 위한 선택옵션 sudo apt install net-tools
이후 sudo reboot로 호스트를 재부팅 시킵니다.

SSH

이때부터 윈도우에서의 Putty나 맥에서의 Termius등 SSH클라이언트를 이용하여 작업하는 것을 추천합니다.
(가이드를 읽으며 복사 붙여넣기하기 편함)

옥토프린트 설치

파이썬 설치

먼저, 옥토프린트 구동을 위해 Python3를 설치합니다.
sudo apt-get install python3-pip python3-dev python3-setuptools python3-virtualenv git libyaml-dev build-essential
설치가 완료 된 후 mkdir ~/OctoPrint && cd OctoPrint를 하여 OctoPrint폴더를 만들고 이 폴더 안에서 작업합니다.

가상환경 설정 및 활성화

virtualenv --python=python3 venv
source venv/bin/activate
(여기까지 진행하면 앞에 (venv)라고 표시되어야 합니다.)

PIP

최신버전의 pip으로 업그레이드 시킵니다.
pip install pip --upgrade
그 다음, pip을 이용하여 옥토프린트를 설치합니다.
pip install https://get.octoprint.org/latest
그리고 사용자를 tty, dialout에 추가합니다. 사용자 이름 변경 필수
sudo usermod -a -G tty {사용자 이름}
sudo usermod -a -G dialout {사용자 이름}

옥토프린트 시작

~/OctoPrint/venv/bin/octoprint serve
이 명령어를 입력하면 OctoPrint가 실행되고, http://{서버의 아이피}:5000에서 확인 할 수있습니다.

옥토프린트 자동실행 설정

옥토프린트 설정은 일단 나중에 하고, 우분투 서버 실행 시 옥토프린트가 자동으로 실행되도록 설정해야 합니다.

wget https://github.com/foosel/OctoPrint/raw/master/scripts/octoprint.init && sudo mv octoprint.init /etc/init.d/octoprint

wget https://github.com/foosel/OctoPrint/raw/master/scripts/octoprint.default && sudo mv octoprint.default /etc/default/octoprint

sudo chmod +x /etc/init.d/octoprint

이 명령을 사용하여 쉽게 진행할 수 있습니다.
/etc/init.d/octoprint를 실행하였을 때 녹색으로 표시된다면 실행 가능함을 나타냅니다.
nano에디터를 이용하여 수정합니다. (vi등 다른 에디터 사용 가능)
{사용자 이름}변경 필수
sudo nano /etc/default/octoprint

# Configuration for /etc/init.d/octoprint

# The init.d script will only run if this variable non-empty.
OCTOPRINT_USER={사용자 이름}

# base directory to use
BASEDIR=/home/{사용자 이름}/.octoprint

# configuration file to use
CONFIGFILE=/home/{사용자 이름}/.octoprint/config.yaml

# On what port to run daemon, default is 5000
PORT=5000

# Path to the OctoPrint executable, you need to set this to match your installation!
DAEMON=/home/{사용자 이름}/OctoPrint/venv/bin/octoprint

# What arguments to pass to octoprint, usually no need to touch this
DAEMON_ARGS="--port=$PORT"

# Umask of files octoprint generates, Change this to 000 if running octoprint as its own, separate user
UMASK=022

# Process priority, 0 here will result in a priority 20 process.
# -2 ensures Octoprint has a slight priority over user processes.
NICELEVEL=-2

# Should we run at startup?
START=yes

해당 내용을 붙여 넣고 저장합니다.

sudo update-rc.d octoprint defaults
sudo service octoprint start

이 명령을 사용하여 자동 시작 추가 및 서비스를 시작합니다.

옥토프린트에서 호스트 종료 및 재부팅 기능 사용

sudo nano /etc/sudoers.d/octoprint-shutdown를 입력하고

{사용자 이름} ALL=NOPASSWD: /sbin/shutdown
{사용자 이름} ALL=NOPASSWD: /bin/systemctl restart octoprint.service

해당 내용을 붙여넣습니다. 사용자 이름 변경 필수

웹캠 사용

cd ~
sudo apt install subversion libjpeg8-dev imagemagick ffmpeg libv4l-dev cmake
git clone https://github.com/jacksonliam/mjpg-streamer.git
cd mjpg-streamer/mjpg-streamer-experimental

(오래걸림)

export LD_LIBRARY_PATH=.
make

위 명령어를 입력하여 필요한 소프트웨어를 설치합니다.
sudo ./mjpg_streamer -i "./input_uvc.so" -o "./output_http.so (설치된 소프트웨어 테스트)

웹캠 소프트웨어 자동실행

옥토프린트 서버와 같이 자동실행 스크립트를 추가해야합니다.

cd ~
mkdir scripts
nano /home/{사용자 이름}/scripts/webcam

위 명령어를 입력하고, 아래 내용을 붙여넣습니다. 사용자 이름 변경 필수

#!/bin/bash
# Start / stop streamer daemon

case "$1" in
    start)
        /home/{사용자 이름}/scripts/webcamDaemon >/dev/null 2>&1 &
        echo "$0: started"
        ;;
    stop)
        pkill -x webcamDaemon
        pkill -x mjpg_streamer
        echo "$0: stopped"
        ;;
    *)
        echo "Usage: $0 {start|stop}" >&2
        ;;
esac

webcamDaemon 만들기
nano /home/{사용자 이름}/scripts/webcamDaemon 입력 후 편집
사용자 이름 변경 필수
이 스크립트에서 해상도, 프레임 설정 가능

#!/bin/bash

MJPGSTREAMER_HOME=/home/{사용자 이름}/mjpg-streamer/mjpg-streamer-experimental
MJPGSTREAMER_INPUT_USB="input_uvc.so"
MJPGSTREAMER_INPUT_RASPICAM="input_raspicam.so"

# init configuration
camera="auto"
camera_usb_options="-r 640x480 -f 10"
camera_raspi_options="-fps 10"

if [ -e "/boot/octopi.txt" ]; then
    source "/boot/octopi.txt"
fi

# runs MJPG Streamer, using the provided input plugin + configuration
function runMjpgStreamer {
    input=$1
    pushd $MJPGSTREAMER_HOME
    echo Running ./mjpg_streamer -o "output_http.so -w ./www" -i "$input"
    LD_LIBRARY_PATH=. ./mjpg_streamer -o "output_http.so -w ./www" -i "$input"
    popd
}

# starts up the RasPiCam
function startRaspi {
    logger "Starting Raspberry Pi camera"
    runMjpgStreamer "$MJPGSTREAMER_INPUT_RASPICAM $camera_raspi_options"
}

# starts up the USB webcam
function startUsb {
    logger "Starting USB webcam"
    runMjpgStreamer "$MJPGSTREAMER_INPUT_USB $camera_usb_options"
}

# we need this to prevent the later calls to vcgencmd from blocking
# I have no idea why, but that's how it is...
vcgencmd version

# echo configuration
echo camera: $camera
echo usb options: $camera_usb_options
echo raspi options: $camera_raspi_options

# keep mjpg streamer running if some camera is attached
while true; do
    if [ -e "/dev/video0" ] && { [ "$camera" = "auto" ] || [ "$camera" = "usb" ] ; }; then
        startUsb
    elif [ "`vcgencmd get_camera`" = "supported=1 detected=1" ] && { [ "$camera" = "auto" ] || [ "$camera" = "raspi" ] ; }; then
        startRaspi
    fi

    sleep 120
done

아래 명령어를 사용하여 스크립트를 실행가능하게 변경해줍니다. 사용자 이름 변경 필수

sudo chmod +x /home/{사용자 이름}/scripts/webcam
sudo chmod +x /home/{사용자 이름}/scripts/webcamDaemon

재부팅 시 시작을 위한 스크립트 생성sudo nano /etc/rc.local
생성 후 아래 내용 붙여넣기 사용자 이름 변경 필수

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

/home/{사용자 이름}/scripts/webcam start

exit 0

sudo chmod +x /etc/rc.local명령으로 실행가능하게 만들기
웹캠 시작 sudo /home/{사용자 이름}/scripts/webcam start

수고하셨습니다.

0개의 댓글