본문 바로가기
Sundry/개발공간

[개발환경구축] Raspberry PI 2 + Ubuntu Mate + Sublime Text + Python + Django 처음과 끝

by phpdoumi 2015. 5. 22.

0. 전체 작업 줄거리 작성 후 세부 리스트별 출력.

0. 사전준비

1) 하드웨어

a. Raspberry PI 2

b. USB 전원 케이블(Micro 5 PIN, 안드로이드스마트폰 전원 연결 아답터 포함)

c. microSD Card(8GB Class4 이상)

d. microSD Card 리더기

e. LAN 케이블

f. HDMI 케이블(또는 HDMI to DVI)

g. 모니터, USB 키보드, USB 마우스

h. USB 무선 Adapter(AP기능 포함, 없어도 괜찮으나, 있으면 활용도 높음)

i. Case(비싸면 명함 Case로 자작)

2) 소프트웨어

a. Ubuntu Mate 15.04 Raspberry PI(https://ubuntu-mate.org/raspberry-pi/)

b. SD Formatter 4.0 for Windows(https://www.sdcard.org/downloads/formatter_4/)

c. Win32 Disk Imager(https://www.raspberrypi.org/downloads/)

d. Sublime Text 2(or 3 http://www.sublimetext.com/)

1. 초기 설치

1) microSD Card 초기화



2) microSD Card에 OS 복사



3) Ubuntu Mate 설치

위에서 작성된 microSD Card를 Raspberry PI에 넣고 전원을 연결하면 부팅과정이 지나가고 아래 화면들이 나온다.





마지막에 리부팅 후, 로그인 화면이 아래처럼 나오고,


로그인 후 이 화면에서 Ctrl+Alt+T로 창을 열고 아래 작업을 수행한다.

4) 원격 접속 환경 구축

기본 운영체제를 설치하면 원격으로 접속할 수 있는 방법이 없다. 추가로 xrdp와 openssh-server를 설치하여 네트워크를 통한 접속이 가능하도록 구성한다. 이후는 Raspberry PI가 아래처럼 간소화된다. 처음에 Raspberry PI를 인터넷에 연결하는 것이 어려우면 노트북으로 간단히 연결할 수 있다. 무선랜을 사용하고 케이블을 Raspberry PI와 연결한다. 네트워크 및 공유센터에서 어댑터 설정 변경을 클릭하고 무선랜의 속성을 열고 공유 탭에서 "다른 네트워크 사용자가 이 컴퓨터의 인터넷 연결을 통해 연결할 수 있도록 허용"을 선택하고 적용한다. 그러면 LAN Port가 192.168.0.x를 사용하는 DHCP 환경이 된다. Raspberry PI에서 열려 있는 창에서

sudo apt-get update; sudo apt-get upgrade 로 최신 버전으로 업데이트하고,

sudo apt-get install xrdp, openssh-server 를 설치한다.

네트워크를 직접 제어하기 위해 network-manager를 삭제하고 수동으로 동작하도록 수정한다.

sudo vi /etc/network/interfaces

auto eth0

iface eth0 inet dhcp

:wq

sudo apt-get remove --purge network-manager-gnome network-manager

sudo apt-get autoremove

reboot 후 CMD 창에서 arp -a를 입력하면 아래처럼 연결되어 있는 정보를 확인할 수 있다.

윈도우즈에 있는 원격데스크탑 연결을 통해 Raspberry PI에서 확인한 IP(192.168.0.20)를 입력하면 접속이 아래처럼 된다.




이제, 모니터/키보드/마우스는 더 이상 필요 없다. Putty 등을 통해 SSH로 접속해도 정상 동작함을 확인할 수 있다.

5) 무선 AP를 통한 개발 환경 구축

Raspberry PI를 ADSL이나 광LAN등 공유기에 케이블로 연결하고 DHCP로 설정한다. 망 사업자가 주기적으로 IP 대역을 변경하기 때문.

freedns.afraid.org에서 무료 Domain name을 제공하니 받아서 DDNS로 설정하여 사용하면 편리하다. USB 무선 Adapter(ipTIME G100UM <- 가지고 있던 것)를 통해 혹시 모를 비상 연결 통로를 확보한다.

iw list로 확인해서 없으면 sudo apt-get install iw로 설치한다.

iw list의 결과가

Supported interface modes:

* IBSS

* managed

* AP

* AP/VLAN

* WDS

* monitor

* mesh point

와 같이 AP 기능을 가지고 있으면 된다.
sudo apt-get install hostapd udhcpd 로 설치한다.
sudo vi /etc/udhcpd.conf
start 192.168.100.1 # This is the range of IPs that the hostspot will give to client devices.
end 192.168.100.250
interface wlan0 # The device uDHCP listens on.
remaining yes
opt dns 168.126.63.1 168.126.63.2 # The DNS servers client devices will use.
opt subnet 255.255.255.0
opt router 192.168.100.254 # The Pi's IP address on wlan0 which we will set up shortly.
opt lease 864000 # 10 day DHCP lease time in seconds
로 수정하고
sudo vi /etc/default/udhcpd
DHCPD_ENABLED="no"를 #으로 주석처리한다.
wlan0 인터페이스의 IP를 설정한다.
sudo ifconfig wlan0 192.168.100.254
sudo vi /etc/network/interfaces 를 수정
iface wlan0 inet static
address 192.168.100.254
netmask 255.255.255.0
:wq
sudo vi /etc/hostapd/hostapd.conf 를 생성
interface=wlan0
driver=nl80211
ssid=Pi_AP2
hw_mode=g
channel=6
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=passw0rd
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
:wq
sudo /etc/default/hostapd 를 수정
#DAEMON_CONF= 을 DAEMON_CONF="/etc/hostapd/hostapd.conf" 로 변경
여기까지 하면 접속은 되나, 무선으로 접속해서 유선쪽으로 통해 인터넷을 사용하고 싶으면 아래를 적용한다.
sudo vi /etc/sysctl.conf
net.ipv4.ip_forward=1
:wq

sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT

sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"
vi /etc/network/interfaces 마지막 줄에
up iptables-restore < /etc/iptables.ipv4.nat
:wq

서비스를 시작하고
sudo service hostapd start
sudo service udhcpd start
부팅시 적용될 수 있도록
sudo update-rc.d hostapd enable
sudo update-rc.d udhcpd enable
한다.
Raspberry PI를 reboot하고 Windows의 무선에 Pi-AP2가 나타나는지 확인한다. Pi는 항상 192.168.100.254이므로 무선이 연결되면 192.168.100.254로 접속하면 된다. 원격데스크탑이던 SSH던.

6) Python Package 설치

다시 추가 작업을 위해 무선 환경을 원래대로 구성하고 PythonPython 개발 환경을 위해, python-pip, python-dev, virtualenv, virtualenvwrapper를 설치한다.

sudo apt-get install python-pip python-dev

sudo pip install --upgrade pip

sudo pip install virtualenv

sudo pip install virtualenvwrapper

여기까지 완료한 후 sudo apt-get upgrade로 혹시 있을지 모를 upgrade를 실시한다. 더 이상 사용하지 않는 불필요한 패키지 제거를 위해 sudo apt-get autoremove 까지 실행하면 깨끗하게 정리가 된다.

7) 설치 환경 백업

추후 이전 작업을 반복하지 않기 위해 백업을 받아 놓는다.

백업을 받는 방법은 microSD Card를 뽑아 microSD Card Reader에 넣고 노트북에 연결한다.

앞에서 사용한 Win32 Disk Imager를 실행하고 저장할 화일 이름을 입력하고, read를 클릭하면 microSD Card를 img 파일로 생성한다. 단 전체 크기로 생성(8G면 8G로) 이걸 방지하기 위해 4G microSD Card를 한개 사야 할 듯 하다. 이후 재설치가 필요한 경우, 이 img 파일을 Win32 Disk Imager를 이용하여 생성하면 된다. 단 동일 Raspberry PI에만 적용한다. device를 재인식시켜야 하는 불편함 때문.

8) microSD Card 최대 크기로 파티션 조정

df -f 로 보면 4GB 기준으로 파티션이 생성되어 있음을 알 수 있다. sudo fdisk /dev/mmcblk0 으로 들어가서

d 2 [Enter] n [Enter] p [Enter] [Enter] [Enter]를 하면 사이즈가 늘어나고 w로 저장한다.

이후 reboot을 하고, sudo resize2fs /dev/mmcblk0p2 를 실행하고 df -h 로 보면 최대 Size 기준으로 파티션이 생성되어 있는 것을 볼 수 있다.

2. 개발 환경 설정

1) 가상 환경을 저장할 Directory 생성

$ mkdir ~/.virtualenvs

$ vi ~/.bashrc 파일 끝에

export WORKON_HOME=~/.virtualenvs

source /usr/local/bin/virtualwrapper.sh

:wq

$ source ~/.bashrc

2) 사용하기

$ mkvirtualenv py_study == 가상개발영역 만들기

(py_study) $ deactivate == 가상영역 빠져 나오기

$ workon py_study       == 가상영역으로 들어가기

$ cdvirtualenv          == 가상영역 디렉토리로 이동

$ wipeenv               == 현재 가상환경의 써드파티 패키지 전체 삭제

$ workon                == 가상환경 목록

$ rmvirtualenv          == 가상환경 삭제

3) Django 설치하기

$ workon py_study

(py_study) $ pip install django

4) GPIO 패키지 설치하기

(py_study) $ pip install rpi.gpio

5) 설치 패키지 확인하기

(py_study) $ pip freeze

Django==1.8.2

RPi.GPIO==0.5.11

wheel==0.24.0

3. Sublime Text 설치 및 연동
Sublime Text 2를 설치하는 것이 아직은 여러모로 정신 건강에 이롭다. 설치를 완료한 후에 원격지 서버에서 개발을 지원하기 위해 sftp plugin을 설치한다.
다양한 패키지를 설치 및 제거, 관리가 가능한 Package Control을 추가한다. View > Show Console 메뉴를 선택한다.
하단 Command Line에 아래를 복사해 넣는다.
import urllib2,os; pf='Package Control.sublime-package'; ipp=sublime.installed_packages_path(); os.makedirs(ipp) if not os.path.exists(ipp) else None; urllib2.install_opener(urllib2.build_opener(urllib2.ProxyHandler())); open(os.path.join(ipp,pf),'wb').write(urllib2.urlopen('http://sublime.wbond.net/'+pf.replace(' ','%20')).read()); print 'Please restart Sublime Text to finish installation'
엔터를 누르면 설치가 완료되고 sublime text 2를 재실행한다. Preferences > Package Control 메뉴를 선택한다.
에디터에서 Ctrl+Shift+P를 누른 후, Install Package를 선택한다. SFTP를 설치하면 메시지가 출력되고 sublime text를 재실행하고 File > FTP/SFTP가 설치되어 있으면 정상.
Setup Server를 클릭하면 출력되는 화면에서 아래 내용을 수정한다.
    // sftp, ftp or ftps
    "type": "sftp",

    "sync_down_on_open": true,
    "sync_same_age": true,
    
    "host": "example.com",
    "user": "username",
    "password": "password",
    "port": "22",
    
    "remote_path": "/example/path/",
    //"file_permissions": "664",
    //"dir_permissions": "775",
밑줄 부분을 내 서버 구성 정보와 동일하게 셋팅하고 Ctrl+S로 저장하면 된다.


여기까지가 개발 환경 구성의 끝이다.


참조)

Raspberry PI 셋업(http://vlab.finfra.com/d/doku.php/raspberry_pi:%EB%9D%BC%EC%A6%88%EB%B2%A0%EB%A6%AC_%ED%8C%8C%EC%9D%B4_%EC%9E%85%EB%AC%B8)

무선 AP(http://www.thebitbangtheory.com/2012/12/turning-the-raspberry-pi-into-a-wireless-access-point/)

virtualenv(http://intersnipe.blogspot.kr/2014/12/python-virtualenv.html)

sublime text(http://saksin.tistory.com/1180)


'Sundry > 개발공간' 카테고리의 다른 글

개발 플랫폼 구축 과정 소개 #1 삽질기  (0) 2018.12.19
무료 시각화 라이브러리  (0) 2013.12.10