2015년 7월 17일 금요일

PHP를 설치 하게 되었다

참조: http://webdir.tistory.com/240

후... 파이썬은 무슨.... 그냥 nginx에 php로 사용하기로 한다. 제어 로직도 python을 사용하지 않고 왠만하면 c로 하는 것을 생각 해 보자. 생소한 python 보다 c가 더 낳을듯.. python은 자료가 다른 것에 비해서 너무 없다는....

일단은 서버에 php 사용하기 위한 환경이 구성되지 않아서 이것 부터 진행 한다. 어짜피 파이도 동일할듯 생각 된다. 아래와 같이 설치 한다.(참조 사이트의 내용과 동일. 왠만하면 참조 사이트에 방문해서 확인하는 것을 추천. 아래 내용은 백업용도...)

# apt-get install php5-fpm
# apt-get install php5-cli
# apt-get install php5-mcrypt
# apt-get install php5-gd
# apt-get install php5-mysql

nginx.conf 에 다음을 추가 한다.(설정에 따라 site-enable 하단 사이트에 추가)

location ~ \.php$ {
    # 접근 속도가 빠르게 유닉스 소켓으로 변경
    fastcgi_pass   unix:/var/run/php5-fpm.sock;
    fastcgi_index  index.php;

    # 파일 이름 설정
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include        fastcgi_params;
}  


/etc/php5/fpm/pool.d/www.conf 파일에 다음 내용 확인 한다.

listen = /var/run/php5-fpm.sock

/etc/nginx/conf/fastcgi_params 파일에 다음 내용 추가/수정 한다.

fastcgi_split_path_info ^(.+\.php)(/.*)$;
fastcgi_param  PATH_INFO          $fastcgi_path_info if_not_empty;
fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;

그리고 서비스 재시작 한다.

sudo service php5-fpm restart
sudo service nginx restart

모두 다 했으면 http document root 디렉토리에 phpinfo를 포함하는 파일을 만들어서 브라우저로 붙어 본다.

phpinfo();

나머지는 파이에서 IP 올려 주면 받아 주는 php 하나 만들도록 한다.
이렇게 간단한걸..... Django. 앞으로 장난감은 장난감 답게.....머리 아프지 않게 진행 하자.

2015년 7월 11일 토요일

Ubunto 14.04 LTS 에서 Python 개발

Django가 끌려서 개념이라도 잡으려고 서버에 설치 중에 있다. Java만 사용해서 Python 관련해서는 그동안 해 본적이 없어서 서버에 관련 패키지가 하나도 설치 되어 있지 않은 상태이다.(gcc도 설치 안되어 있다는 ㅎㅎ) Python 개발을 위해서 다음 패키지를 설치 했다. 추후 참고용으로 적어 둔다.

[서비스 환경]
- OS : Ubunto 14.04 LTS
- Httpd Server : nginx 1.4.6

[패키지 설치]
# apt-get update
# apt-get install gcc
# apt-get install make
# apt-get install python3-pip
# apt-get install python3-dev
# apt-get install python-mysqldb
# apt-get install libmysqlclient-dev
# pip3 install uwsgi
# pip3 install Django
# pip3 install --allow-external mysql-connector-python mysql-connector-python
# pip3 install mysqlclient
# pip3 install pytz

[MacOSX 인텔리j mysql]
- mysql connector 설치( pip install --allow-all-external git+git://github.com/multiplay/mysql-connector-python )
- Django 의 ENGINE을 'ENGINE': 'mysql.connector.django' 으로 사용

[정리]
- Ubuntu 든 MacOSX 요세미티든 최종 pip3 install mysqlclient 이후에 MySQLdb 를 import 할 수 있었음.

- database sync(포함되어 있는 application 의 table을 sync 생성 한다)
$ python3 manage.py syncdb

- syncdb 이후 테이블 변경 사항 적용 하기
$ python3 manage.py makemigrations
$ python3 manage.py migrate

- Django 에서 제공해 주는 admin의 super user 만들기(인텔리j Run으로 실행하지 말고 터미널을 통해서 실행 해야 한다)
$ python3 manage.py createsuperuser

- Django 제공 admin 주소 : http://127.0.0.1:8000/admin


[참고 사이트]
https://docs.djangoproject.com/en/1.8/topics/install/
https://docs.djangoproject.com/en/1.8/howto/deployment/wsgi/uwsgi/
http://uwsgi-docs.readthedocs.org/en/latest/tutorials/Django_and_nginx.html
http://stackoverflow.com/questions/26573984/django-how-to-install-mysql-connector-python-with-pip3
http://stackoverflow.com/questions/29689365/auth-user-error-with-django-1-8-and-syncdb-migrate

2015년 7월 10일 금요일

MOSI, MISO, SCLK 는 뭐지?

어제에 이어 오늘도 파이의 GPIO 핀에 대해서 알아 보도록 하자. TX, RX는 모뎀에서 사용하는 시리얼 통신으로 워낙 유명하니 생략 하고 MOSI, MISO, SCLK에 대해서 찾아 보도록 한다.

MOSI, MISO, SCLK는 SPI 방식으로 통신하는 데 필요한 핀이고 I2C에 비해서 이해하기가 훨씬 쉽다. 자세한 설명은 아래 링크를 참고 하도록 한다.

위키백과에서 SPI 설명
SPI 설명

몇 라인 되지 않아서 금방 읽고 이해 할 수 있을 것으로 생각 된다. 이제 남아 있는 파이의 GPIO 커넥터 핀들은 간단한 GPIO 핀과 그라운드(GND) 3.3V, 5V 전원 공급 장치 이므로 몇 가지만 더 알아 보 이제 드디어 최초 테스트 회로를 구성 해 보도록 하자.

 우이쒸....집에서 사용하니 파이의 IP가 바뀌었다. IP 바뀌면 개인 서버로 올리는거 만들고 다시 진행 하자. ㅜㅜ

SDA, SCL 이건 뭐지?

어제 저항에 대해서 찾아 보고 오늘 LED를 찾아 보려고 한 것은 단순히 파이의 GPIO 커넥터에 연결해서 LED 한번 켜 보려고 한 것인데, GPIO 커넥터를 들여다 보니, 창피하게 처음 보는 글자들이 많아서 하나씩 알아 보고 LED 켜는 것을 해 보기로 한다. 그 동안 공부를 많이 안 했다는 자괴감이 많이 든다.

GPIO 커넥트를 보면 GPIO 핀 역할 이외의 특별한 목적으로 사용 할 수 있는 것들이 존재하는데 그 중에 SDA, SCL에 대해서 알아 보도록 하자.

I2C(Inter-Intergrated Circuit)는 MCU(Micro Controller Unit)등에서 연결 되어 있는 다른 것들(LCD Driver, memory 등등)을 제어 하기 위한 통신 인터페이스이고, I2C 방식을 이용하기 위해서 SDA(Serial Data Line)와 SCL(Serial Clock Line) 핀이 필요 하다고 이해 하면 될 것으로 보인다.

잘 알지도 못하면서 더 이상 설명하면, 오히려 이해 하는데 방해만 될 듯 하다. 명확하게 설명한 문서 링크를 첨부 한다.

내용은 많지만 약간의 시간을 투자하면 얻는게 많으니 일독을 적극 추천 한다. 스펙 문서는 참고용이고 설명 문서만 봐도 충분히 이해 된다.

2015년 7월 9일 목요일

저항 보는 법

참고: http://programfrall.tistory.com/65#recentComments

파이의 GPIO를 사용하기 위해서 기본적인 회로 이론을 알면 좀 더 쉽게 이해 할 수 있기 때문에 옛날 기억을 되살려서 자료를 찾아 보고 있다. 일단은 가장 기본적인 소자인 저항 부터 알아 보자.

저항이란 말 그대로 전류를 방해 하는 요소이다. 처음 들었을때 이게 잘 이해가 되지 않았다. 아니 기껏 돈들여서 전기를 공급 했는데 저항을 일부러 넣어서 힘껏 흐르는 전류를 방해 할까??

여기에 대한 답은 저항을 제외한 다른 소자에 있다. 전자 소자는 자신이 허용 하는 전류가 제한 되어 있다.  그런데, 힘차게 흐르는 전류가 소자의 최대 제한을 넘어가 버리면...언급 할 필요도 없이 전자 소자의 배가 터진다. 허리케인 죠 처럼 "모두 다...불태웠어...새하얗게" 이렇게 되어 버리는 것이다. 저항이란게 이런 것을 방지해 주는 아주 중요한 역할을 한다.

저항은 크기가 각각 정해져 있는데 그 크기는 저항 표면에 세로로 그려져 있는 색상띠로 확인 가능 하다.


색상은 4줄 짜리와 5줄 짜리로 구분 된다고 하는데 계산 하는 방법은 다음 표를 참고 하면 된다.


지금 GPIO를 이용해서 LED에 불을 켜 보려고 하고 있는데 사용하려는 저항이 1k짜리 이다. 이 1k 짜리 저항의 색상띠를 보면 갈색, 검은색, 빨간색, 황금색 으로 되어 있다. 즉 4줄짜리 색상띠를 가진 저항이고 저항값은 다음과 같이 계산 된다.
갈색(1) 검은색(0) x 빨간색(10^2) = 10 x 10^2 = 10 x 100 = 1k 크기의 +- 5% 오차
당분간은 기본적인 저항만을 사용 할 것이니 여기 까지하고 저항에 대해서 더 깊은 곳으로 다이빙 하고 싶다면 구글신에게...

근 20년만에 이런걸 자진해서 다시 보게 되다니...상상도 못했다는...
다음은 LED에 대해서 알아 보도록 하자.

2015년 7월 7일 화요일

Python 패키지 관련과 스터디용 프로젝트

Python이 그래도 10년전에 간단하게라도 사용 해 봤다고 한, 두시간 정도 보니 대충 기억이 떠 오른다. Javascript, Bash Shell과 비슷해서 두 가지 사용 하는 사람들이라면 쉽게 Python 사용할 것으로 보인다. 언어야 뭐...중요한게 아니니...

일단 패키지를 깔아야 하니 패키지 설치 도구가 있는지 찾아 보니 역쉬 존재 한다. 라즈베리 파이 홈페이지에 떡하니 설명 해 두었다.

https://www.raspberrypi.org/documentation/linux/software/python.md

워낙 설명을 잘 해 두어서 라즈베리 파이에서 제공하는 페이지를 그대로 보면 될 것으로 보인다.
easy_install 이란 것도 사용한다는데, 일단 라즈베리 파이에서 설명하고 있는 pip만 사용해 보도록 한다.

일단 설정 끝나고 Python도 대충 봤으니 원격 접속을 좀 편하게 하기 위해서 공부 삼아서 파이의 아이피 7-segment로 보여주는 것을 진행 해 보도록 하자. 유동 IP에 모니터도 안 달려 있으니 언제 IP가 바뀌는지 알수도 없다. ssh 접속 할때, 또 구석에 처박힌 모니터 날라야 하는지 생각 하면서 불안 불안.... ㅜㅜ

2015년 7월 5일 일요일

Mysql, nginx 설치

참고: http://webdir.tistory.com/217
참고: https://gist.github.com/ntakaaki/2891895

Maria DB를 설치 하고 싶었으나, 라즈비안에서 기본으로 Mysql이 들어 있어서 그냥 Mysql을 설치 하기로 한다. 어짜피 장난감인데 따질게 뭐 있겠나. 귀차니즘....

사실 파이에 Maria DB 설치에 대해서 대충 구글링 해보니 고생 할 것이 보여서 그냥 포기 했다.
4시간 컴파일 하고 6시간 trouble shooting 했다고 하니..흐......
(하나는 프랑스 이지만 설치하는 명령어 보니 동일하게 보인다. 혹시 시도 하고 싶으면 참고 해서 시도 하시라 ~)

https://plus.google.com/+KylePlatt/posts/8pmWKvbaGd2
http://raspbian-france.fr/installer-mariadb-raspbian/

mysql은 다음 명령어로 간단하게 설치 된다.

pi@raspberrypi ~/tmp $ sudo apt-cache search mysql
pi@raspberrypi ~/tmp $ sudo apt-get install mysql-server-5.5

설치 완료 되면 제대로 되었는지 확인 한다.

pi@raspberrypi ~/tmp $ ps -ef | grep mysqld
pi@raspberrypi ~/tmp $ which mysql

확인 되었다면 붙어 보도록 하자.

pi@raspberrypi ~/tmp $ mysql -u root -p

root 패스워드는 mysql 인스톨시에 설정한 패스워드 이다. character set 을 utf-8로 사용 할 것이므로, mysql 설정도 모두 utf-8 로 바꾸도록 한다. mysql 환경 설정 파일을 열어서 다음 내용을 추가 한다. charater set 바꾸는 김에 쿼리문 max size 도 같이 바꾼다.

pi@raspberrypi /etc/mysql $ sudo vi /etc/mysql/my.cnf

[client]
default-character-set = utf8

[mysqld]
max_allowed_packet    = 256M
character-set-client-handshake=FALSE
init_connect="SET collation_connection = utf8_general_ci"
init_connect="SET NAMES utf8"
character-set-server = utf8 
collation-server = utf8_general_ci

[mysqldump]
default-character-set = utf8

[mysql]
default-character-set = utf8

설정 변경 되고 나면 mysql restart 후 mysql에 접속해서 변경 사항 적용 되었는지 확인 한다.

pi@raspberrypi /etc/mysql $ sudo service mysql restart
pi@raspberrypi ~/tmp $ mysql -u root -p

mysql> status
--------------
mysql  Ver 14.14 Distrib 5.5.43, for debian-linux-gnu (armv7l) using readline 6.2

Connection id:  37
Current database:
Current user:  root@localhost
SSL:   Not in use
Current pager:  stdout
Using outfile:  ''
Using delimiter: ;
Server version:  5.5.43-0+deb7u1 (Debian)
Protocol version: 10
Connection:  Localhost via UNIX socket
Server characterset: utf8
Db     characterset: utf8
Client characterset: utf8
Conn.  characterset: utf8
UNIX socket:  /var/run/mysqld/mysqld.sock
Uptime:   2 min 17 sec


mysql> show variables like '%char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

다음은 nginx 를 설치 하도록 하자. apache httpd는 사용하지 않고 nginx로만 사용할 예정이다.
nginx도 라즈비안에 기본으로 들어 있기 때문에 쉽게 설치 가능 하다.

pi@raspberrypi ~ $ sudo apt-cache search nginx
pi@raspberrypi ~ $ sudo apt-get install nginx

설치 완료 되면 nginx가 존재하는지 체크 해 본다.

pi@raspberrypi ~ $ which nginx

nginx는 /etc/nginx/nginx.conf 가 환경 설정 파일인데, 내용을 보면 Virtual Host Configs 항목으로 site-enabled를 include 하고 있다. site-enabled 에 기본으로 존재하는 default 를 없애고 신규로 추가 하기로 한다.

소유하고 있는 도메인이 없기 때문에 그냥 hosts 파일에 dhkim94.org 로 임의 등록해서 사용하기로 한다.

pi@raspberrypi /etc/nginx/sites-available $ cd /etc/nginx/sites-available
pi@raspberrypi /etc/nginx/sites-available $ sudo cp default dhkim94.org
pi@raspberrypi /etc/nginx/sites-available $ sudo vi dhkim94.org

dhkim94.org 파일을 다음 내용으로 수정 한다.

server {
    root /data/www/dhkim94.org;
    server_name dhkim94.org;

    access_log /data/log/dhkim94.org/nginx/access_pipe;
    error_log /data/log/dhkim94.org/nginx/error_pipe;

    #location /doc/ {
    #       alias /usr/share/doc/;
    #       autoindex on;
    #       allow 127.0.0.1;
    #       allow ::1;
    #       deny all;
    #}
    ....
}

로그 파일 분리를 위해서 nginx 기본 설정도 변경 한다. access_log 와 error_log 를 주석 처리 한다.

pi@raspberrypi / $ cd /etc/nginx
pi@raspberrypi /etc/nginx $ sudo cp nginx.conf nginx.conf.20150705
pi@raspberrypi /etc/nginx $ sudo vi nginx.conf

이젠 site-enabled 디렉토리에 기본 링크를 삭제 하고 금방 생성한 것의 링크를 추가 한다.

pi@raspberrypi /etc/nginx/sites-enabled $ cd /etc/nginx/sites-enabled
pi@raspberrypi /etc/nginx/sites-enabled $ sudo unlink default
pi@raspberrypi /etc/nginx/sites-enabled $ sudo ln -s /etc/nginx/sites-available/dhkim94.org dhkim94.org

환경 파일에 설정한 홈 디렉토리및 로그 디렉토리를 생성 한다.

pi@raspberrypi ~ $ cd /
pi@raspberrypi / $ sudo mkdir data
pi@raspberrypi / $ cd data
pi@raspberrypi /data $ sudo mkdir www
pi@raspberrypi /data $ cd www
pi@raspberrypi /data/www $ sudo mkdir dhkim94.org
pi@raspberrypi /data/www $ sudo chown -R www-data dhkim94.org
pi@raspberrypi /data/www $ sudo chgrp -R www-data dhkim94.org
pi@raspberrypi /data $ sudo mkdir log
pi@raspberrypi /data $ cd log
pi@raspberrypi /data/log $ sudo mkdir dhkim94.org
pi@raspberrypi /data/log $ cd dhkim94.org
pi@raspberrypi /data/log/dhkim94.org $ sudo mkdir nginx
pi@raspberrypi /data/log/dhkim94.org $ sudo chown -R www-data nginx
pi@raspberrypi /data/log/dhkim94.org $ sudo chgrp -R www-data nginx

이제 완료 되었으니 nginx 를 올리자.

pi@raspberrypi ~ $ sudo service nginx start
pi@raspberrypi ~ $ ps -ef | grep nginx

만일 정상으로 올라가지 않으면 올라가지 않는 내용을 자세히 보여 주므로 당황하지 말고 읽어보고 수정 하면 된다. nginx는 apache httpd에 비해서 훨씬 간단하니 어려울건 없다.

추후 테스트를 위해서 index.html 파일을 하나 만들어 둔다.

pi@raspberrypi ~ $ cd /data/www/dhkim94.org
pi@raspberrypi /data/www/dhkim94.org $ sudo vi index.html

hello nginx

아! 잊지 말고 파이에 접속하는 PC의 host에 dhkim94.org 를 등록하도록 한다.

daeheekimui-MacBook-Pro-2:~ dhkim94$ sudo vi /etc/hosts

# raspberrypi
192.168.1.180     dhkim94.org

또한 가짜 도메인이므로 파이의 /etc/hosts 에도 등록해 두자.

pi@raspberrypi ~ $ sudo vi /etc/hosts

127.0.0.1       dhkim94.org

nginx 설정이 모두 완료 되었고 daemon도 올라 갔으므로 정상으로 동작하는지 최종으로 외부에서 접속해 본다. hosts가 등록된 PC에서 다음과 같이 한다.(간단하게 웹브라우저로 붙어 봐도 된다.)

daeheekimui-MacBook-Pro-2:~ dhkim94$ telnet dhkim94.org 80
Trying 192.168.1.180...
Connected to dhkim94.org.
Escape character is '^]'.
GET /index.html HTTP/1.0

GET /index.html HTTP/1.0 을 입력하고 엔터 두번 치면 index.html 내용을 볼 수 있다.
돌아가는 것을 확인 했다면 nginx 의 log에 rotate 를 걸도록 하자.

log rotate를 위해서 cronolog를 사용하기로 한다.

pi@raspberrypi ~ $ sudo apt-cache search cronolog
pi@raspberrypi ~ $ sudo apt-get install cronolog
pi@raspberrypi ~ $ sudo vi /etc/init.d/nginx

다음 내용을 nginx 스크립트에 추가 한다.

logdir="/data/log/dhkim94.org/nginx"
cronolog="/usr/bin/cronolog"

cronolog_start() {
    if ! [ -p $logdir/access_pipe ]; then
       rm -f $logdir/access_pipe
       rm -f $logdir/error_pipe
       mkfifo $logdir/access_pipe
       mkfifo $logdir/error_pipe
    fi

    /bin/sh -c "/bin/cat $logdir/access_pipe | $cronolog $logdir/access.%Y%m%d &"
    /bin/sh -c "/bin/cat $logdir/error_pipe  | $cronolog $logdir/error.%Y%m%d &"
}

# 다음은 start case 문 변경
case "$1" in
        start)
                echo -n "Starting $DESC: "
                test_nginx_config
                # Check if the ULIMIT is set in /etc/default/nginx
                if [ -n "$ULIMIT" ]; then
                        # Set the ulimits
                        ulimit $ULIMIT
                fi
                # cronolog_start 추가
                cronolog_start || return 7

                start-stop-daemon --start --quiet --pidfile /var/run/$NAME.pid \
                    --exec $DAEMON -- $DAEMON_OPTS || true
                echo "$NAME."
                ;;
...

nignx 스크립트를 변경하고 nginx를 내렸다 올리자.

pi@raspberrypi ~ $ sudo service nginx stop
pi@raspberrypi ~ $ sudo service nginx start

웹브라우저로 다시 접속 후 로그가 분리 되어 있는지 확인 한다.
여기까지 mysql, nginx는 설치 완료! 변경 사항이 필요하면 사용하면서 변경 하도록 한다.

나머지 잡다 설정

ssh 접속 까지 완료 되었으니 평소에 사용하는 개발에 필요한 다음 프로그램들을 설치 해 보도록 하자. 설치할 프로그램은 다음과 같다.

1. telnet client : 특정 포트로 접속 확인및 내용 확인을 위해서 사용
2. 언어및 시간 설정
3. git client : 기본으로 설치 되어 있음


참고로 라즈비안에서 프로그램 설치는 우분투와 같이 apt-get 을 통해서 설치 하면 된다.

[telnet client 설치]
다음 명령어로 설치, 확인을 진행 한다.

pi@raspberrypi ~ $ sudo apt-cache search telnet
pi@raspberrypi ~ $ sudo apt-get install telnet
pi@raspberrypi ~ $ which telnet
pi@raspberrypi ~ $ telnet google.com 80

telnet client 패키지가 존재하는지 체크 후, 설치, telnet 명령어의 위치 확인 한다.
마지막으로 google.com 에 80 포트로 붙으면 다음을 타이핑 해서 페이지 제대로 가져오는지 확인 한다.

GET /index.html HTTP1.0

GET을 타이핑 하고 엔터 두번을 쳐 주면 index.html 요청에 대한 응답을 받을 수 있다.


[언어및 시간 설정]
기본 언어를 한국어로 변경 한다. 파이의 설정 변경을 통해서 간단하게 변경 하능 하다.

pi@raspberrypi ~ $ sudo raspi-config

4번 Internationalisation Options 를 선택 한다.


I1 Change Locale 을 선택 하며 여러 가지 Locale이 나오며 필요에 따라서 여러개를 선택 하면 된다. en_US.UTF8 UTF-8, en_US ISO-8859-1, ko_KR.EUC-KR ko_KR.EUC-KR, ko_KR.UTF-8 UTF-8, zh_CN GB2312, zh_CN.UTF-8 UTF8 을 체크 했으며, 기본은 ko_KR.UTF-8 UTF-8을 선택 했다.


다음으로 Timezone 을 바꾸도록 한다. I2 Change Timezone 을 선택 한다.


Asia/Seoul 을 선택 한다.



선택이 완료 되고 나면 터미널에서 시간을 확인 해 보도록 한다.

pi@raspberrypi ~ $ date
2015. 07. 05. (일) 01:28:20 KST

드디어 기본 설정이 모두 끝난거 같다. 근데, 기본 개발 언어를 자바로 쓰고 싶지만 라즈베리 파이에 자바는 오버 인거 같고, 10년전에 본 파이썬을 다시 사용해 봐야 하나....문법 기억도 안나는데 에고...

2015년 7월 4일 토요일

네트웍 설정및 sshd 설치

집에 책상도 없고 모니터를 놓으려면 마나님의 눈치를 봐야 하는 입장이라 원격으로 접속하기 위한 환경을 OS 설치 이후 곧바로 설정 했다.

랜선을 직접 라즈베리 파이에 직접 연결 해서 사용하기는 불편해서 USB 형태의 무선 랜 카드를 사용해서 네트웍 연결을 하도록 한다.

작업 진행 하기 전에 확인 해야 할 사항은 접속할 무선 공유기의 보안 방식이다. WPA2 방식으로 보안을 설정 되어 있으면 제대로 접속이 안되는 것으로 보이며, 만일 WPA2 only 로 사용하고 있다면 WPA/WPA2 Personal 로 바꾸도록 한다.(이것 때문에 잠깐 해맷다는....)


위는 집에서 잡히는 AP 리스트이고 Farm에 붙을 예정이다. 리눅스 환경에서는 그냥 터미널로 작업 하는 것이 편해서 라즈베리 파이의 GUI 를 사용하지 않고 터미널에서 설정 한다.

참고로 많이 보던 명령어인 startx 를 라즈베리 파이의 터미널에서 실행하면 X가 뜬다. 헐... 대박..

일단 USB가 제대로 잡혀 있는지 부터 확인 해 보도록 한다.

pi@raspberrypi ~ $ lsusb
Bus 001 Device 002: ID 0142:9124 Standard Microsystems Corp.
Bus 001 Device 001: ID 2c1d:1234 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 8751:dd54 Standard Microsystems Corp.
Bus 001 Device 004: ID 34d1:0912 Realtek Semiconductor Corp. RTL8188CUS 802.11n WLAN Adapter

004번에 Realtek 으로 제대로 잡혀 있다. 다음으로 보이는 AP 들을 스캔 해 보도록 한다.

pi@raspberrypi ~ $ sudo iwlist wlan0 scan

위의 명령어를 치면 AP 들을 스캔하고 보이는 AP 를 주르륵 띄어 준다. 접근하려는 AP 의 SSID가 보이는지 확인 후, wpa_supplicant.conf 파일을 수정 한다. ssid 에 AP 의 ssid 를 적고 psk 에 AP의 접근 패스워드를 적는다.

pi@raspberrypi ~ $ sudo vi /etc/wpa_supplicant/wpa_supplicant.conf

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
        ssid="Farm"
        psk="xxxxxxxx"
}

수정 하고 나면 wlan0 를 다음과 같이 올렸다 내리도록 한다.(/etc/network/interface 파일은 수정 하지 않더라도 이상 없이 동작 하는 것으로 보인다.)

pi@raspberrypi /etc/network $ sudo ifdown wlan0
pi@raspberrypi /etc/network $ sudo ifup wlan0

완료 되고 나면 몇몇 가지 명령어로 상태를 확인 해 보도록 한다.

pi@raspberrypi /etc/network $ ifconfig
pi@raspberrypi /etc/network $ sudo ifplugstatus wlan0
pi@raspberrypi /etc/network $ iwconfig

최종으로 구글에 ping 을 때려 보도록 하자. telnet client가 없기 때문에 ping 으로 대신 한다.

pi@raspberrypi /etc/network $ ping google.com
PING google.com (59.18.35.40) 56(84) bytes of data.
64 bytes from cache.google.com (59.18.35.40): icmp_req=1 ttl=56 time=3.13 ms
64 bytes from cache.google.com (59.18.35.40): icmp_req=2 ttl=56 time=3.11 ms

ping이 제대로 된다면 네트웍 설정은 완료 된 것이다. 이젠 sshd를 활성화 시키자. sshd 활성화는 무진장 쉽다.  그냥 설정 화면에서 ssh를 on 시켜 주면 된다.

pi@raspberrypi /etc/network $ sudo raspi-config

기본으로 제공되는 라즈베리 파이 설정화면으로 들어가서


8번 Advanced Options 를 선택 후 A4 SSH 를 선택하면 Enable/Disable 시킬 수 있다.


완료되고 나면 터미널에서 sshd가 올라가 있는지 확인 해 보도록 한다.

pi@raspberrypi /etc/network $ ps -ef | grep sshd
root      2205     1  0 10:59 ?        00:00:00 /usr/sbin/sshd
root      2347  2205  0 11:00 ?        00:00:00 sshd: pi [priv]
pi        2351  2347  0 11:00 ?        00:00:00 sshd: pi@pts/0
pi        2701  2352  0 11:29 pts/0    00:00:00 grep --color=auto sshd

마지막으로 다른 컴퓨터에서 라즈베리 파이에 제대로 접속되는지 ssh로 붙어 보도록 하자.

라즈베리파이로 놀기 시작

다른 개발자 분의 소개로 들어 본 라즈베리파이. 그 동안 구입 할까 말까 망설이다가 그냥 질렀다. 배송이 오래 걸릴거라고 생각했는데, 주문한지 하루 만에 도착 했다. 헐...한국 온라인 판매 및 택배의 경쟁력은 놀라울 정도...

라즈베리파이 본체 외에 케이블이나 SD 카드 등등 다른 것들도 필요한데 그냥 귀찮아서 돈을 약간 더 주고 스타트 키트로 구매 했다. 라즈베리파이 포장을 뜯고 나니 상상 했던 것 보다 작은 크기에 놀라움을 금치 못했다. 대단한 기술의 진보! 

장난감을 받았으니 장난감을 가져 놀기 위한 설정인 OS를 인스톨 해 보도록 한다.

OS는 다음 사이트에서 무료로 제공 된다.

기존에는 라즈비안(OS명)을 받아서 약간의 추가 단계로 SD  카드에 설치 했던 것으로 보이는데, 이제는 간편하게 설치 할 수 있는 Noobs 란 것을 제공해 주고 있다.  Ubuntu도 Ubuntu mate 라는 이미지로 제공 해 준다. Ubuntu 라는 이름에 잠시 3초 고민 했는데 그냥 기본 OS로 설치 하기로 결정 했다.

NOOBS is an easy operating system installer which contains Raspbian. It also provides a selection of alternative operating systems which are then downloaded from the internet and installed.
 NOOBS Lite contains the same operating system installer without Raspbian pre-loaded. It provides the same operating system selection menu allowing Raspbian and other images to be downloaded and installed.

두 종류가 있는데, Noobs Lite 는 설명을 보니 네트웍으로 통해서 설치하는 것으로 보여 Noobs로 설치 하기로 결정 했다.


OS 설치를 위해서는 Micro SD 카드가 필요하다. 혹시 몰라서 Micro SD 카드를 체크 후 진행 하도록 한다.


Noobs 를 다운로드 받은 후 SD 카드에 압축 해제 한 파일을 그대로 복사 한다. 스타트 키트 이기 때문에, Micro SD 카드와 Micro SD 카드를 끼우는 USB 카드 리더 까지 있어서 간편하게 복사를 진행 했다. 참고로 압축 해제된 파일 중에 INSTRUCTIONS-README.txt 가 존재하는데, 여기에 설치 하는 방법이 자세하게 적혀 있다.



OS 설치를 위해 준비 완료 되었고 다음 단계로 라즈베리파이를 기동 시켜 보자.
라즈베리 파이에 모니터, 마우스, 키보드를 연결 후 전원을 연결 하면 LED가 켜지면서 부팅을 시작 한다. 화면에 잠시 무지개 색상을 보여 주다가 설치 화면이 등장 한다.


총 3개가 보이는데, Data Partition 은 설치 관련 optional buffer 를 만드는 것인데 여기를 참고 하면 된다. 또한 Boot to Scratch 는 학습용 언어인 Scratch 관련된 것으로 보이는데 Scratch가 필요 없기 때문에 첫번째만 선택 하고 설치를 진행 하자.


OS 설치가 완료되고 나면 일반적인 Linux 부팅시와 흡사하게 글자들이 주르륵 올라가면서 부팅이 시작 된다.


모두 완료 되고 나면 로그인 하라는 대기화면이 나오지 않고 환경 설정 화면을 자동으로 띄어 준다.(아래 첨부된 이미지는 설치 완료 후에 ssh 로 붙은 화면이다. 사진을 찍지 못해서 ㅎㅎ)


여러 가지 메뉴가 있는데 사용한 것은 다음과 같다.

1. Expand Filesystem : Noobs 를 사용하지 않고 OS 설치하면 File System 을 SD 카드 전체로 잡지 않고 OS 설치된 크기 만큼 잡는 것으로 보이는데, Noobs 로 설치 했기 때문에 이미 Expand 되어 있는 상태 이다.

2. Change User Password : root 및 기본 아이디의 패스워드 변경 하는 것이다. 원하는 값으로 변경 하도록 하자.

7. Overclock : Low 로 할 바에야 overclock 할 의미가 없는듯 보이고, High는 좀 불안해 보여서 Medium 으로 선택 했다.

<Finish>를 선택 하고 환경 설정을 종료 한다.(탭키를 누르면 리스트에 있는 커서가 아래로 이동 한다)

이제 드디어 많이 보던 로그인 대기가 나오며 여기에 변경한 패스워드를 사용하여 로그인 하면 OS 설치는 모두 완료 된 것이다. 아이디는 root 가 아니라 pi 로 고정되어 있다.

추가로 라즈베리 파이를 종료하는 명령어는 다음과 같다. 그냥 리눅스 기본...

pi@raspberrypi ~ $ sudo shutdown -h now


다음 글에서는 네트웍을 잡아 보고 작업 환경 기본 설정을 하도록 하자.