블로그 이미지
안녕하세요~ iolate(a.k.a. isho) 의 블로그 입니다~! iolate

카테고리

분류 전체보기 (171)
Server, Cloud (7)
끄적끄적 (6)
Linux, Ubuntu (26)
개발개발 (45)
Mac, iOS (41)
Embedded (19)
NAS (1)
Web (5)
Network (3)
Review (10)
기타 (8)
비공개글 (0)
Total638,142
Today36
Yesterday165

Prism 설정

기타 / 2018.11.27 05:33

티스토리에 Prism 을 적용하였음.

기록용 및 글 작성 참고용.


선택한 옵션 주소는

https://prismjs.com/download.html#themes=prism-coy&languages=markup+css+clike+javascript+c+autohotkey+bash+cpp+arduino+django+docker+markup-templating+git+go+http+java+json+kotlin+markdown+makefile+nginx+objectivec+php+sql+python+plsql+swift+vim&plugins=line-highlight+line-numbers+toolbar+remove-initial-line-feed+command-line+copy-to-clipboard


플러그인

Line Hightlight

Line Numbers

Command Line

Copy to Clipboard Button



<pre class="line-numbers" data-start="3" data-line="4-5,8"><code class="language-python">

print('Hello world!')


</code></pre>

<pre class="command-line" data-user="root" data-host="local" data-prompt="PS >"><code class="language-bash">
</code></pre>

pwd
/usr/home/chris/bin
ls -la
total 2
drwxr-xr-x   2 chris  chris     11 Jan 10 16:48 .
(out)drwxr--r-x  45 chris  chris     92 Feb 14 11:10 ..


Posted by iolate
TAG Prism

개인적으로 nginx 자체는 매력적이라고 생각했지만, php-fpm 이라던가 uwsgi 같이 웹서버에서 직접 붙지 않고 socket 으로 연결되는 방식이 마음에 들지 않아 잘 사용하지 않았다. 

설정 및 관리가 좀 더 번거롭기도 했고..


이제는 마음에 안들었던 몇가지를 감수하고 장점을 취해보기 위해서 사용해보려고 하는데,  여전히 개떡같은 uWSGI 설정법을 정리해봄.


환경은 Ubuntu 18.04 + Nginx + uWSGI + Python3 + Flask.

이 방법의 최대 장점 중 하나가 프로젝트별로 python 버전에 구애받지 않고 venv 를 전혀 무리 없이 돌릴 수 있다.. 인 것 같은데 난 평소에 그렇게 안쓰고 있으니 일단 생략.


1. 패키지 설치

Ubuntu 18 에는 쓸만한 uwsgi 버전으로 기본 패키지 매니저에 있다. 플러그인까지 한번에 설치해주자.

apt install uwsgi uwsgi-plugin-python

* pip 을 이용해서 설치해도 된다. 어차피 systemd 데몬으로 만들거라... 이 편이 더 나은 것 같기도 하다.


2. 프로젝트 wsgi 설정

프로젝트 폴더에 이런식으로 파일을 만든다.

wsgi.py

from flask_app import app

if __name__ == '__main__':
    app.run()

uwsgi.ini

[uwsgi]
plugin = python3
module = wsgi:app

master = true
processes = 3

socket = /tmp/PROJECT.sock
chmod-socket = 664
vacuum = true

die-on-term = true

plugin = python 은, uwsgi 를 apt로 설치해서 필요한 것 같다.

pip 으로 설치하면 필요없을 듯?


3. systemd unit 생성

/etc/systemd/system/ 경로에 PROJECT.service 로 파일을 만든다.

[Unit]
Description=uWSGI instance to serve PROJECT
After=network.target

[Service]
User=ubuntu
Group=www-data
WorkingDirectory=/PATH/TO/PROJECT
#Environment="PATH=/PATH/TO/BIN"
ExecStart=/usr/bin/uwsgi --ini uwsgi.ini

[Install]
WantedBy=multi-user.target

뭐 User, Group 이라던가 적당히 해주고, 그 밑에 WorkingDirectory, 환경변수, 실행커맨드 등도 적당히 수정해준다.


이 후

sudo systemctl enable PROJECT

sudo systemctl start PROJECT

이렇게 자동 실행 설정 및 서비스 시작 해주면 된다.


4. Nginx 설정

sites-available 등의 설명은 생략.


아래와 같이 구성하자. 수정이 필요하다면 적당히 수정...


server {
        listen 80;
        server_name 사이트주소;

        location / {
                include uwsgi_params;
                uwsgi_pass unix:///tmp/PROJECT.sock;
        }
        location /static {
                alias /PATH/TO/PROJECT/flask_app/static;
        }
}

업스트림 설정으로 분산화를 하거나, uri 에 따라 다른 프로젝트로 연결하는 것도 가능하다. 이건 내가 쓸일 있을때 수정해둘거임.


5. 로그 보기

프로젝트 폴더에 만들었던 uwsgi.ini  에서 log 파일 경로를 지정할 수도 있지만,

sudo journalctl -u PROJECT 로 볼 수도 있다.

uwsgi 관련 로그는 여기에서,

접속 기록이나 파이썬 에러 로그 등은

/var/log/nginx/access.log, /var/log/nginx/error.log 에서 확인할 수 있다. 물론 설정에서 각각 바꿔줬으면 다르겠지?



참고

How To Serve Flask Applications with uWSGI and Nginx on Ubuntu 18.04 (DigitalOcean)

uWSGI documentation

Posted by iolate

Canon | Canon EOS 500D | Not defined | 34.0mm | 2012:08:29 14:15:43

USBISP MK2 http://www.devicemart.co.kr/1077889



AVR 프로그래머를 하나 구매하였는데, 펌웨어와 드라이버가 좀 까다로운 듯...
판매사에서 제공하는 가이드를 보면 사용하는 프로그램의 버전과 호환성이 상당히 까다롭다..


그래도 가이드가 잘 나온 편이니 하라는대로 하면 되겠지만... 나는 맥에서 사용하고 싶었음.

잘 이해가 안가서 해결하는데 상당히 오랜 시간이 걸렸고, 정확한 인과관계가 맞지 않을 수도 있지만,,, 여튼 해결했다.

참고로 내가 구매한건 Olimex 사에서 만든 AVR-ISP-MK2 의 호환 혹은 동일 모델이다.


* 참고로 내가 젤 헤맸던 부분인데, 맥에서 시리얼 포트로 잡히지 않는다! (/dev/cu.usbmodem###, /dev/tty.usbmodem###, /dev/ttyUSB0 등)

이렇게 잡히는 사람도 있는 것 같은데, 나의 경우엔 시리얼 포트가 생성되지 않았지만 사용이 가능했다. (물론 시스템 리포트 등으로 확인시 정상 인식)

아마 mcu에 부트로더 등을 올려야지만 인식이 되는게 아닐까.. 싶다.


1. CrossPack 설치

맥에서 AVR 크로스 컴파일 용으로 CrossPack (https://www.obdev.at/products/crosspack) 이라는 개발킷이 존재한다.
다운받아서 설치해주자.

CrossPack is a development environment for Atmel’s AVR® microcontrollers running on Apple’s Mac OS X, similar to AVR Studio on Windows. It consists of the GNU compiler suite, a C library for the AVR, the AVRDUDE uploader and several other useful tools.


2. AVRDUDE 패치

컴파일된 바이너리를 avr로 업로드할때 사용되는 avrdude...
뭐가 문제인지는 모르겠지만, CrossPack 에서 설치해주는 avrdude 6.0.1 버전은 호환이 되지 않는다.

5 버전을 사용하거나, 6 이상 버전에 패치를 적용해주어야 한다.
작성시점 기준으론 5.11.1 혹은 6.3 버전.

avrdude 의 소스코드는 http://download.savannah.gnu.org/releases/avrdude/ 에서 다운받을 수 있다.


의존성 설치

Homebrew 를 이용해서 의존성을 먼저 설치해주자.
(참고로 homebrew 에서 avrdude 최신버전(6.3)을 제공하지만, 마찬가지로 패치가 필요해서 작동하지 않는다.)

brew install libusb libelf libftdi0 libhid

참고로 위 패키지들을 설치하지 않아도 진행은 가능하나, 컴파일된 바이너리 사용시
avrdude was compiled without usb support. 라고 뜨면서 실질적으로 사용이 불가능하다.


컴파일에 필요한 패키지도 설치하자.
brew install autoconf automake


AVRDUDE 5

위 주소에서 5 버전 소스코드를 다운받고 압축을 해제하자. 나의 경우엔 avrdude-5.11.1.tar.gz

해당 폴더로 이동한 후 다음 명령어들을 차례로 입력해준다.

./bootstrap
./configure
make

이후 make install 을 해주면 /usr/local/bin/avrdude 로 바이너리를 옮겨준다. (다른 것도 몇개 같이 옮김)


AVRDUDE 6

마찬가지로 위 주소에서 6 버전 소스코드를 다운받는다.

폴더로 이동한 후 Olimex 에서 제공하는 패치(https://www.olimex.com/Products/AVR/Programmers/AVR-ISP-MK2/resources/endpointdetect_pass1.patch) 도 다운.

cat endpointdetect_pass1.patch | patch -p0 

위 명령어로 패치를 진행한다. (사실 난 안해봐서 안될 수도.)


이미 패치된 코드도 https://github.com/brettyhale/AVR-OSX-and-Olimex-ISP-MK2 여기서 내려받을 수 있다.


이후 컴파일은 위 AVRDUDE 5 와 같은 순서로 진행하면 됨.


작동 확인

avrdude를 컴파일한 후 해당 디렉토리에서
./avrdude -n -vvv -c avrispmkii -p atmega128 -P usb -C ./avrdude.conf
로 잘 작동하는지 테스트해볼 수 있다.

*MCU 가 atmega128 이 아니면 적당히 수정해주자.


잘 작동한다면 아래 접어둔 것과 같은 로그가 표시된다

더보기



3. USBISP MK2 펌웨어 교체

나는 헤매는 과정에서 진행했는데, 만약 판매사가 처음부터 이 펌웨어로 발송을 해준다면 진행할 필요가 없다.

여튼 맥에서 사용하기 위해선 libusb+avrdude용 USBISP 펌웨어로 교체가 필요하다.


펌웨어는 마찬가지로 Olimex 의 홈페이지에서 다운로드 가능.
https://www.olimex.com/Products/AVR/Programmers/AVR-ISP-MK2/open-source-hardware


Software 쪽에 보면 Firmware files and drivers for older AVR/Atmel Studio and/or Arduino/AVRDUDE 항목이 있다.
직링은 여기 - https://www.olimex.com/Products/AVR/Programmers/AVR-ISP-MK2/resources/AVR-ISP-MK2-Firmware-WindowsDrivers.zip


압축을 풀면 Firmware_Drives/FIRMWARE-FOR-AVRDUDE-LIBUSB/libUSB-AVRISP-MKII.hex 파일이 있다.
해당 파일을 USBISP MK2 에 업로드 해주면 된다.


방법은 내가 구매한 제품 기준으로,

1. 플라스틱 케이스를 벗긴다.

2. JP1 의 스위치(?)를 Normal 에서 Up 으로 변경하고 컴퓨터와 연결

3. dfu-programmer 컴파일 및 사용 (http://blog.iolate.kr/257) 게시글을 참고하여 펌웨어 업로드 진행
        나의 경우 기기종류는 AT90USB162

4. JP1 스위치를 다시 원상태로 돌리기

하면 끝.



4. 프로젝트 생성, 컴파일, 업로드

CrossPack 에서 설치된 avr-project 명령어로 프로젝트 템플릿을 생성할 수 있다.
avr-project FirstProject

이러면 아래와 같이 프로젝트를 생성해준다.

FirstProject
├── firmware
│   ├── Makefile
│   └── main.c
└── FirstProject.xcodeproj

xcode 프로젝트로 생성해주는 것 같은데... 난 그냥 커맨드라인에서 계속 작업했음.

firmware/main.c 파일을 작성하면 된다.


컴파일을 하기 전에 Makefile 을 수정...

20, 21번째 라인에서 DEVICE, CLOCK 을 내가 사용하는 mcu 에 맞게 수정해준다.

나는
DEVICE     = atmega128
CLOCK      = 16000000

이렇게 수정했음.

FUSES 도 
FUSES      = -U hfuse:w:0xd9:m -U lfuse:w:0xff:m
로 수정하였는데 퓨즈비트를 자세히 모르니 패스.


Programmer 쪽도 수정을 해줘야하지만, Makefile의 주석이 권장하는 방법대로 하자.

~/.avrduderc 파일을 생성하고

default_programmer = "avrispmkii";
default_serial = "usb";

이렇게 입력해준다.


이후 make 로 컴파일,

혹은 make flash 로 컴파일 및 업로드 할 수 있다.

make fuse 가 퓨즈비트 설정인 것 같지만 난 안써봤음.


잘 작동하면 성공!


'Embedded > AVR' 카테고리의 다른 글

맥에서 USBISP MK2 로 atmega128 프로그래밍 하기  (0) 2018.11.09
dfu-programmer 컴파일 및 사용  (0) 2018.11.09
Posted by iolate

Atmel 칩에 펌웨어를 업로드를 할때 사용할 수 있는 dfu-programmer.

윈도우는 Flip 을 사용한다지만, Flip이 맥을 지원하지 않는다.

공식 홈페이지는
https://dfu-programmer.github.io/


brew에 있는 것 같다.

brew install dfu-programmer 로 설치.


소스코드를 다운받아 컴파일/설치하고 싶다면 아래 참고.

더보기


펌웨어 업로드는 아래 명령어를 차례로 사용하면 된다.

sudo dfu-programmer 기기종류 erase
sudo dfu-programmer 기기종류 flash 펌웨어파일.hex
sudo dfu-programmer 기기종류 reset

'Embedded > AVR' 카테고리의 다른 글

맥에서 USBISP MK2 로 atmega128 프로그래밍 하기  (0) 2018.11.09
dfu-programmer 컴파일 및 사용  (0) 2018.11.09
Posted by iolate

최근에 달린 댓글

최근에 받은 트랙백

글 보관함