-
하나의 라즈베리파이에 옥토프린트 멀티플 세팅지식 쌓기 2020. 6. 17. 18:45반응형
옥토프린트를 멀티로 세팅해야 하는 이유는,
프린터 한대와 연결하면 다른 프린터와는 끊어지기 때문이다. 동시에 여러대 작업을 하려면 그래서는 곤란 할 수 있다.
그런데, 옥토프린트에서는 멀티 지원은 해주지 않는 것 같다. 공식 답변이 라즈베리파이를 여러개 사서 쓰라고 하는 것 같다.
그러나, 능력자들은 세상에 널려 있고, 이미 이 부분도 다 해결은 되어 있으나, 다만 리눅스를 모르면 고생 할 수 있다.
이 문서는 옥토프린트 버전 OctoPi 0.17.0 을 기반으로 작성한다.
라즈베리파이는 3B+를 사용하였다.
그리고 2020년 6월 18일 현재 아직 완벽하지 않다.
2020년 7월 22일 문제점을 해결하여 수정 완료.옥토프린트는 x-windows를 기본 제공하지 않기 때문에 vncserver 역시 존재하지 않는다. 이것도 세팅하려면 어려운 작업이며, 이는 시스템 리소스도 많이 잡아 먹을 것이기 때문에 넘어가기로 한다.(저어얼~대 귀찮아서는 아니다!! )텍스트를 사용하는게 어려운 요즘 시대이지만...이번 만큼은 모든 것을 텍스트로 작업 해야한다. 그래도 데비안 리눅스 계열에서 제공하는 nano 편집기가 있어서 리눅스에 익숙하지 않은 사람들도 vi편집기보다는 쉽게 문서 편집이 가능하다.
필자는 vi 편집기를 사용하며, 스크린샷도 vi 편집기 이지만 스크랩 할 수 있는 스크립트 부분은 nano로 작성 하여 두었다.
해당 사이트에서는 간단하게 옥토프린트 처음 설치법도 나와 있으며, 그 이후에 다수의 프린터를 위한 설정방법이 나온다. 또한 멀티 카메라 세팅도 나와 있다. 이를 시키는 대로 하면 좋으나, 환경은 각자가 틀려서 그대로 하면 문제가 발생하는 부분이 생길 수 있다.
1. USB디바이스 심볼릭 링크 만들기.
기본 설치가 끝나고 나면,(참고 사이트에서)
제일 처음 시키는 것이, 내 USB 포트의 정보이다. 이를 이용하여 심볼릭링크를 만들어서, 정보값이 바뀌지 않도록 고정 시켜주는 것 같다. 이는 일단 프린터가 연결되어 있어야 정보가 보이므로, 우선은 프린터와 라즈베리파이를 연결하자.
그러면, 사이트에서는 /dev/ttyUSB 어쩌구가 보일것이라고 하는데...
필자는 ttyUSB가 아니었다.
그럼 우선 이를 어떻게 찾느냐가 첫번째 난관이다. 방법은 무척 많은데....필자는 다음과 같은 방법을 사용하였다.
pi@octopi:~ $ dmesg |grep tty
명령어 'dmesg |grep tty'의 의미를 설명하자면 시스템 메시지중에서 tty와 관련된 내용만 보여달라 라는 명령이다.
이렇게 명령을 내려보면...
내 USB의 tty 정보를 쉽게 알 수 있다.
필자의 경우 ttyUSB0 가 아닌 ttyACM0 인 것을 확인 할 수 있다.
이제 이를 가지고, 프린터 ttyACM0의 고유값을 찾아야 하는데...
다른 여러 사이트들에서 보면 idVender 값이나, idProduct 값들을 사용하라고 되어있지만,
필자는 이렇게 해봐도 저렇게 해봐도 고유값이 잘 나오지 않는다. 아마도 모두 동일한 프린터여서 인 것 같다.
그래서 다 지우고 시리얼값 하나만 사용했다.
pi@octopi:~ $ udevadm info -a -n /dev/ttyACM0 | grep '{serial}' | head -n1
ttyACM0에 관한 시리얼값만 불러오는 명령어다. 이 명령어는 *을 사용하여 한꺼번에 조회가 되지 않는다. 하나씩 조회하자.
이렇게 명령을 내리면
ATTRS{serial}=="abcdefgffdfdfdfdfsdfs"
라고 값이 나온다.
이값을 사용하면 된다.
pi@octopi:~ $ sudo vi /etc/udev/rules.d/99-usb.rules
(vi는 편집기. windows의 메모장 같은 것이다. 그런데 처음 접하면 쓰기가 매우 어렵다. 만약 아무생각 없이 vi 편집기로 들어왔다면, 당황하지 말고 ':q!'를 입력해서 나가자. 이는 아무런 저장 없이 나가겠다는 의미이다.)
pi@octopi:~ $ sudo nano /etc/udev/rules.d/99-usb.rules
(nano는 vi 편집기를 사용할 줄 모르는 사람을 위한 편집기이다. vi 편집기를 처음 접한다면 이것을 쓰자. )
를 입력하면...
아무 내용이 없는 문서가 열릴 것이다. (참고. 여기서 sudo 란 관리자 권한을 사용하겠다는 의미이다. )
SUBSYSTEM=="tty", ATTRS{serial}=="abcdefgffdfdfdfdfsdfs", SYMLINK+="p01"
이런식으로 입력하면 된다. 필자는 이것만 있어도 되었는데....차후 문제가 생기면 수정하도록 하겠다.
SYMLINK+="p01" 에서 p01은 내가 임의로 정하는 네임이다. 원하는 이름을 정하면 되겠다.
아무튼 이렇게 입력하여 저장하면 그 의미는
ttyACM0에 p01라는 심볼릭링크를 걸어준다. 라는 의미가 되겠다. 일종의 windows에서의 바로가기라고 보면 된다.
그러니, 두대의 프린터를 운용한다면...
ttyACM1의 시리얼 값을 찾은 후..
SUBSYSTEM=="tty", ATTRS{serial}=="abcdefgffdfdfdfdfsdfs", SYMLINK+="p01"
SUBSYSTEM=="tty", ATTRS{serial}=="cdefgkdjfsldjfslkfjskdl", SYMLINK+="p02"
이렇게 두줄을 입력해주면 되겠다.
저장하고 나오자.
리부팅을 하고 나면...적용이 되어 있는 것을 확인해 볼 수 있다.
pi@octopi:~ $ sudo reboot
만약 리부팅이 싫다면!!
pi@octopi:~ $ sudo su -
root@octopi:~#udevadm control --reload-rules && udevadm trigger
라는 두줄의 명령어로 실행할 수도 있다.
이 명령어는 일반 계정으로는 sudo를 사용하여도 실행되지 않기 때문에 관리자 계정으로 반드시 로그인 하여야 한다.
(sudo su - >>는 관리자 계정으로 로그인함을 의미한다. )
심볼릭 링크가 잘 생성되었는가 확인 하는 방법은....
pi@octopi:~ $ ls -al /dev |grep ttyACM*
혹은
pi@octopi:~ $ ls -al /dev |grep ttyUSB*
이런식으로 확인하여 볼 수 있다. 잘 생성 되었구려!
여기 까지 했으면 첫 고비를 넘겼다.
두번째 페이즈는 그냥 저냥 따라하면 쉽다. 오타만 조심하자!!!!
2. 옥토프린트 데몬(옥포트린트 서버) 2개 띄우기.
2-1 옥토프린트 설정값 디렉토리 복사
pi@octopi:~ $ cp -R /home/pi/.octoprint /home/pi/.octoprint2
.octoprint 라는 디렉토리를 .octoprint2로 하위 디렉토리(폴더)를 포함하여 복사한다는 뜻이다.
2-2 부팅시에 자동으로 실행되게 하는 설정값을 복사
pi@octopi:~ $ sudo cp /etc/default/octoprint /etc/default/octoprint2
(참고: cp는 복사 명령어)
pi@octopi:~ $ sudo vi /etc/default/octoprint2
pi@octopi:~ $ sudo nano /etc/default/octoprint2( 이하 vi는 생략하지만 실제 화면은 vi 편집기 화면)
여기서 수정해야할 것은
PORT=5000 >> PORT=5001
DAEMON_ARGS=" --host=$HOST --port=$PORT --config /home/pi/.octoprint2/config.yaml --basedir /home/pi/.octoprint2/"
이렇게 2줄이다.
DAEMON=/home/pi/oprint/bin/octoprint 는 건드리지 말자.
# 뒤에 오는 내용들은 주석이다. 고쳐도 그만 안고쳐도 그만이다. 보기 마음에 들지 않는다면 고치자.
다 고쳤으면 저장하고 나오자.
octoprint(첫번째 옥토프린트)의 파일도 열어서
pi@octopi:~ $ sudo nano /etc/default/octoprint
DAEMON_ARGS=" --host=$HOST --port=$PORT --config /home/pi/.octoprint/config.yaml --basedir /home/pi/.octoprint/"
마찬가지로 수정하자.
단, 여기서..... 만약 나는 http://192.168.0.xx:5000 혹은은 5001으로 접속하겠다 하면 --host=$HOST 부분은 삭제해도 된다. 그리고 이게 훨씬 간단하다. 한단계를 절약 할 수 있다. 하지만 나는 http://192.168.0.xx/abc 로 사용하고 싶다면.... 2-4 과정도 해야한다.
2-3 부팅시에 자동 실행 되게 하는 명령어 복사
pi@octopi:~ $ sudo cp /etc/init.d/octoprint /etc/init.d/octoprint2
pi@octopi:~ $ sudo nano /etc/init.d/octoprint2
여기서는
DAEMON=/usr/bin/octoprint
를 제외하면 모든 octoprint를 octoprint2로 수정한다.
물론 # 뒤에 문자들은 수정해도 그만 안해도 그만이다.
pi@octopi:~ $ sudo systemctl daemon-reload
pi@octopi:~ $ sudo update-rc.d octoprint2 defaults
pi@octopi:~ $ sudo /etc/init.d/octoprint2 start
이는 첫번째 옥토프린트와 다른 두번째 데몬을 부팅시에도 올라오도록 설정하는 것이며, 마지막 라인은 지금 데몬을 실행시키는 명령어이다.
pi@octopi:~ $ sudo /etc/init.d/octoprint2 staus
로 데몬이 잘 살아있는지 확인하여 볼 수 있다.
그 다음으로,
pi@octopi:~ $ nano /home/pi/.octoprint2/config.yaml
요 옥토프린트 설정 파일을 열어서...
serverRestartCommand: sudo service octoprint restart
를 (78라인에 있다. )
serverRestartCommand: sudo service octoprint2 restart
로 고쳐준다.
이는 옥토프린트 데몬 리스타트 명령어를 옥토프린트 웹페이지에서 제어할 수 있는데 이를 위한 수정이다. 만약 이 수정을 누락한다면, 2번 옥토프린트에서 재시작을 눌렀을때 1번이 재시작 될 것이다.
만약 앞에서 --host=$host 부분을 제외했다면 여기까지만 해도 된다.
http://192.168.0.xx:5001 로 페이지가 열리는지 확인해 보면 될 것이다.
3. Haproxy 설정
우리가 이번에 사용하는 haproxy 기능은 URL:5000 을 URL/ABC 로 바꿔주는 설정이다.
haproxy는 따로 검색하면 설명들이 많이 있다.
보안을 위해 포트정보를 가리는 기능과 소프트웨어적으로 로드밸런싱을 해주는 두가지 기능이 주된 기능인 것 같다.
그중 서버의 포트를 가려주는 기능을 사용 하는 것이다. 뭐 사실 해도 그만 안해도 그만이지 않을까 한다.
그냥 보오~너스 라고 생각하자.
잘 안되면 그냥
/etc/default/octoprint 혹은 octoprint2 파일에서 --host=$host을 삭제하고 URL:5000, URL:5001 등으로 접속하자.
pi@octopi:~ $ sudo cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.old
haproxy.cfg(설정파일)을 복사(백업)해 두는 명령어다.
pi@octopi:~ $ sudo nano /etc/haproxy/haproxy.cfg
이제 마음 편히 config 파일을 수정하자.
frontend public
bind *:80
bind 0.0.0.0:443 ssl crt /etc/ssl/snakeoil.pemoption forwardfor except 127.0.0.1
use_backend webcam if { path_beg /webcam/ }
use_backend p01 if { path_beg /p01 }
use_backend p02 if { path_beg /p02 }
use_backend p03 if { path_beg /p03 }
default_backend webcambackend p01
reqrep ^([^\ :]*)\ /p01/(.*) \1\ /\2
option forwardfor
server octoprint1 127.0.0.1:5000
acl needs_scheme req.hdr_cnt(X-Scheme) eq 0
reqadd X-Scheme:\ https if needs_scheme { ssl_fc }
reqadd X-Scheme:\ http if needs_scheme !{ ssl_fc }
reqadd X-Script-Name:\ /p01backend p02
reqrep ^([^\ :]*)\ /p02/(.*) \1\ /\2
option forwardfor
server octoprint1 127.0.0.1:5001
acl needs_scheme req.hdr_cnt(X-Scheme) eq 0
reqadd X-Scheme:\ https if needs_scheme { ssl_fc }
reqadd X-Scheme:\ http if needs_scheme !{ ssl_fc }
reqadd X-Script-Name:\ /p02public 과 backend 라인들을 수정해 주어야 한다.
이부분은 필자의 설정값이다.
처음 세팅하던 때에 바로 이 haproxy설정에서 문제가 발생하여 default_backend에 한번씩 backend 이름을 입력하지 않으면, 정상적으로 웹페이지가 보이지 않는 문제점을 발견하였었다. 그런데 매우 간단하게 해당 문제는 해결되었다.
use_backend webcam if { path_beg /webcam/ }
use_backend p01 if { path_beg /p01 }
두 라인 차이가 느껴지는가?
그렇다. 마지막 p01의 뒤에 /를 제거하였다.
그말인즉슨... '/p01/' 이었을 때 브라우저에서 URL 입력을 192.168.0.14/p01/라고 마지막에 /까지 입력했으면 해당페이지가 아무 문제없이 떴을 것이라는 것이다. 필자는 이를 모르고 192.168.0.14/p01 까지만 입력을 해서 문제가 발생 했던 것이다.
잘 뜬다. 성공이다.
4. 시리얼 정보 업데이트
마지막으로 해 볼 것은 옥토프린트 웹페이지에서 시리얼 정보를 이 일련의 작업 초기에 심볼릭 링크 시킨것으로 보이도록 수정 하는 것이다.
지금까지 한 작업으로는 옥토프린트 웹페이지에 로그인을 하여도 시리얼 포트 정보는 /dev/ttyACM* 정보들만 보였다. 자 이게 보기 불편하다면? 혹은 USB포트를 바꿔 꼽았다면? 그렇다면....포트가 바뀌어도 고정되어 있을 p0*로 리스트가 나오면 좋겠네. 자! 어떻게 해야 /dev/p0* 리스트가 보일 수 있을까?
다음의 파일을 열어 보자.
pi@octopi:~ $ nano /home/pi/oprint/lib/python2.7/site-packages/octoprint/util/comm.py
174번 라인까지 찾아가야 한다.
라인 하나 추가해주자. 다만 라인의 끝부분엔 자신이 정한 이름으로 수정을 해야한다.
+ glob.glob("/dev/p0*") \
이렇게만 해주고 각각의 옥토프린트 데몬을 리스타트 하여 주거나 혹은 리부팅으로 해결 할 수 있다.
pi@octopi:~ $ sudo service octoprint restart
물론 더욱 간단한 방법은 위 스샷을 보고 눈치 챘겠지만, 처음에 심볼릭 링크를 만들때 ttyUSBp01 이런식으로 만들었다면, 아무런 수정 없이도 바로 보여질 것이다. 마찬가지로, 기존의 ttyACM*가 보이는 것이 싫다면, 위 파일에서 해당 라인을 삭제해주면 더이상 보이지 않을 것이다.
2020.08.09. 업데이트
옥토프린트 버전을 업데이트 하면 상기 tty 정보는 초기화가 된다. 따라서 다시 한번 수정을 해 주어야 한다.
이상으로 옥토프린트 멀티플 세팅을 마치도록 하겠다.
느낀점.
1. 처음에 옥토프린트를 알게 되고 무척 놀라웠다. 이것은 꼭 해야해라고 생각했고 실천에 옮겼지만, 정작 플러그인들에 대한 공부가 부족하다.
2. 멀티플 세팅 자체는 어렵지 않으나, 나만의 개성을 갖추려 노력하면 리눅스를 모르면 점점 어려워진다. 계정 이름 하나 바꾸는것도 걸리는게 너무 많아 쉽지가 않았다. 결국 몇가지 문제로 계정명을 바꾸는데는 실패했지만,(아니 성공은 했었는데 초기화 하면서 방법을 잊어먹었고, 다시 하기는...당연히 바빠서!! 할 시간이 없다.) 만약 보안에 민감하다면, 다른 계정을 추가하고 잘 알려진 pi 계정은 로그인을 못하게 비밀번호를 없애는 것이 하나의 방법일 수는 있겠다. 하지만 애초에 공유기 내부에 있다면, 일부러 포트포워딩으로 SSH포트를 열어두지 않는 이상에는 외부에서 접근할 방법이 없다. 차라리 PC 보안이나 웹페이지 계정 보안에 신경쓰는 것이 훨씬 더 중요할 것이다.
3. https를 사용하고 싶지만, 내공이 부족하여 잘 못쓰겠다. 이는 좀더 시간을 두고 확인해 봐야겠다. (하겠냐?)
'지식 쌓기' 카테고리의 다른 글
앱 별로 소리 장치 선택하기 (0) 2020.10.14 옥토프린트 - 플러그인: Firmware Updater (0) 2020.08.10 옥토프린트 - 플러그인: 텔레그램 봇 연동하기 (0) 2020.07.23 virtualization based security disable(VBS disable) (0) 2020.07.09 옥토 프린트 설치하기 (0) 2020.06.15