sudo apt update && sudo apt upgrade -y
*편의를 위한 선택옵션 sudo apt install net-tools
이후 sudo reboot
로 호스트를 재부팅 시킵니다.
이때부터 윈도우에서의 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 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
수고하셨습니다.