라즈베리 파이를 한창 가지고 놀고 있을 때, 라즈베리 파이 공식 싸이트와 제작자 블로그에서 아래 그림을 보고, 나도 한번 따라 해보자! 라는 마음을 가지고 외국에 전자 부품 파는 싸이트 ( https://www.adafruit.com/products/911 ) 에서 2.0인치 LCD를 주문을 넣었습니다.


가격은 후덜덜한 $39.95 한국에서도 더 싸게 분명히 구할 수 있을텐데 LCD 모듈은 눈에 보이는데 연결하는 보드를 잘 모르다 보니, 때마침 배송대행 할 것이 있었는데 껴서 구입했습니다. 


이미치 출처 http://blog.sheasilverman.com/2012/11/friday-post-push-it/photo-3/


그리고 도착했습니다. LCD 모듈과 보드와 연결된 놈입니다.



 아날로그 방식이여서 디스플레이에 연결된 노란색, 검정색 전선... 그리고 전원을 공급하는 빨간색, 검정색 전선. 오래된 지식으로 빨간색은 + 인것 같고, 검정색은 - 인 것 같은데.. 전원은 5A 12V인가 적혀 있기도 하고... 문제는 무엇으로 전원을 공급하냐! 남아도는 어뎁터를 발견하고 살펴보니 5A-12V 공급하네요. 어디가 +이고 -인지 또 고민고민... 살짝 구글링을 하니 안쪽이 +, 겉은 - 입니다. 그래서 대충 쑤셔넣고 감고해서 테입으로 쓱쓱. 라즈베리가 먼저 켜진 상태에서는 LCD가 작동을 안하고 리붓을 해주니 아래 그림과 같이 부팅되는 모습이 보입니다. ㅠㅠb 감동! 



xwindow 까지 실행하니 잘나오네요. 해상도가 낮아서 글자를 읽을수 없는 단점이 있긴 합니다. 


그리고 Mame로 보글보글을 실행해보니 잘됩니다. 


(비싼) 휴대용 게임기가 생겼어요. :-)


이왕 삽을 든거 집에 방치 중인 아두노이 사촌인 Makey Makey ( http://www.makeymakey.com/ ) 를 연결해보았습니다. 

잘 인식은 하나, 무슨 문제인지 모르겠지만 연속해서 키 입력이 되는지라... 일단 패스~ 



잘 연동해서 재미있는 짓을 한 번 해봐야겠습니다. :-) 




http://blog.sheasilverman.com 블로그 제작자 분께서 python으로 쉽게 mame를 설치하고 관리할 수 있는 스크립트를 공개 하였습니다.  https://github.com/ssilverm/PiMAME

저작자 표시 비영리
신고
Posted by KraZYeom

Siri Proxy 라즈베리 파이에서 구동하기


아이폰에서 동작하는 시리를 시리 프록시 서버를 사용하면 (하드웨어 삽질이 더 필요하지만) 차고의 문을 열거나, 집안의 온도를 바꾸는 등으로 다양하게 활용할 수 있다. 


설치 방법은 아주 간단하다. 리눅스가 익숙하지 않으면 아주 어려울 수도 있다. :-) 

아래 명령어는 라즈베리파이에서 실행을 하고, Ubunto 에서도 똑같이 실행할 수 있다. 어차피 고놈이 고놈이라. 


모든 것은 라즈베리 파이 또는 Ubunto 리눅스가 있다는 가정하에 시작된다. 설치 시간은 약 1시간 정도가 소요된다. 


1. 필요한 모듈들 설치하기

sudo apt-get install dnsmasq ruby build-essential openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-0 libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev automake libtool bison subversion

'y'를 눌러서 계속 진행하기.


2. dnsmasq 설정 파일 변경하기

sudo vim /etc/dnsmasq.conf

약 60-70라인 부근에서 #address=/double-click.net/127.0.0.1 을 찾는다. 그리고 다음 텍스트를 타이핑한다. 

address=/guzzoni.apple.com/(라즈베리 파이 IP)

(라즈베리 파이 IP)를 라즈베리 파이의 IP로 변경한다. 


3. dnsmasq 재시작하기 

sudo /etc/init.d/dnsmasq restart


4. rvm-installer 실행하기

bash < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)


5. rvm 관련 설정하기

[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm"


6. .bash_profile에 rvm 관련 추가하기

echo '[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" # Load RVM function' >> ~/.bash_profile


7. rvm 1.9.3 설치하기 (라즈베리파이에서는 약 30분 걸림)

rvm install 1.9.3

이 커멘드는 실행하는데 오랜시간이 걸린다. 특히 컴파일 부분이라 시간이 더 걸리니 참고 기다리자.


8. 1.9.3을 기본적으로 사용한다.

rvm use 1.9.3 --default


9. github에서 SiriProxy 내려받기

git clone git://github.com/plamoni/SiriProxy.git


10. SiriProxy 디렉토리로 이동하기

cd SiriProxy


11. 홈디렉토리에 .siriproxy 디렉토리 만들기

mkdir ~/.siriproxy


12. 예제 config 값을 siriproxy로 이름 변경하여 이동하기.

cp ./config.example.yml ~/.siriproxy/config.yml


13. siriproxy 설치

rake install


14. 인증서 생성하기

siriproxy gencerts


15. 배포하기(?)..

siriproxy bundle


16. siriproxy 서버 실행하기

rvmsudo siriproxy server

이 커멘드는 시리 프록시 서버를 실행 시킨다. "Starting SiriProxy on port 443.." 문구가 나올 것이다.


* config 값을 수정하면 15, 16번을 다시 실행해야 한다고 한다. 



iPhone 4S(5따위 가지고 있지 않아서 모른척)에서 설정. 


1. iPhone 4S에 ca.pem 인증서 설치하기

14번에서 만들어진 인증서를 iPhone 4S에 설치를 해야한다. 간단한 방법은 scp, ftp, afp 등을 사용해서 자신의 맥으로 옮긴다. 그리고 인증서 파일을 메일로 첨부한뒤, 아이폰에서 메일을 열고 첨부 파일을 터치하면 설치가 된다. 


2. WiFi DNS 주소 변경하기

iPhone 4S의 WiFi 설정으로 이동한뒤, 파란색 화살표 아이콘을 눌러서 WiFi 의 설정화면으로 이동한다. 명심해야 할 것은 라즈베리 파이와 iPhone 4S의 네트워크는 같아야 한다. DNS에 라즈베리 파이의 IP를 입력한다. 


3. Siri 테스트 하기

iPhone 4S의 홈버튼을 꾹~ 눌러서 시리가 나타나게 만든다. 그리고 "테스트 시리 프록시" 라고 말하면, 시리가 "Siri Proxy is up and running!" 이라고 대답하고, 터미널에서는 시리랑 대화 하는 패킷들이 주루룩 오고가고 있는 모습을 볼 수 있다.



이슈 및 해결 방법

설치 및 테스트를 하면서  4가지 이슈가 추가적으로 발생하였고 해결 방법을 공유 하도록 한다. 


1. No such file or directory - /root/.siriproxy/config.yml 이슈.


아래와 같이 siriproxy 서버를 실행을 하면 뭔가 파일을 찾을 수 없다는 메세지가 주루룩 뜬다. 

pi@raspberrypi:~/SiriProxy$ rvmsudo siriproxy server

Warning: can not check `/etc/sudoers` for `secure_path`, falling back to call via `/usr/bin/env`, this breaks rules from `/etc/sudoers`. export rvmsudo_secure_path=1 to avoid the warning./home/pi/.rvm/rubies/ruby-1.9.3-p385/lib/ruby/1.9.1/psych.rb:297:in `initialize': No such file or directory - /root/.siriproxy/config.yml (Errno::ENOENT)

from /home/pi/.rvm/rubies/ruby-1.9.3-p385/lib/ruby/1.9.1/psych.rb:297:in `open'

from /home/pi/.rvm/rubies/ruby-1.9.3-p385/lib/ruby/1.9.1/psych.rb:297:in `load_file'

from /home/pi/.rvm/gems/ruby-1.9.3-p385/gems/siriproxy-0.4.0/lib/siriproxy/command_line.rb:143:in `parse_options'

from /home/pi/.rvm/gems/ruby-1.9.3-p385/gems/siriproxy-0.4.0/lib/siriproxy/command_line.rb:33:in `initialize'

from /home/pi/.rvm/gems/ruby-1.9.3-p385/gems/siriproxy-0.4.0/bin/siriproxy:6:in `new'

from /home/pi/.rvm/gems/ruby-1.9.3-p385/gems/siriproxy-0.4.0/bin/siriproxy:6:in `<top (required)>'

from /home/pi/.rvm/gems/ruby-1.9.3-p385/bin/siriproxy:23:in `load'

from /home/pi/.rvm/gems/ruby-1.9.3-p385/bin/siriproxy:23:in `<main>'


해결방법 : 

pi@raspberrypi:~/SiriProxy$ sudo mkdir /root/.siriproxy/

pi@raspberrypi:~/SiriProxy$ sudo cp config.example.yml /root/.siriproxy/config.yml


2. 443 포트를 사용하고 있다고 메세지(port is in use)가 뜨면서 종료. 

pi@raspberrypi:~/SiriProxy$ rvmsudo siriproxy server

Warning: can not check `/etc/sudoers` for `secure_path`, falling back to call via `/usr/bin/env`, this breaks rules from `/etc/sudoers`. export rvmsudo_secure_path=1 to avoid the warning.

Starting SiriProxy on 0.0.0.0:443..

/home/pi/.rvm/gems/ruby-1.9.3-p385/gems/eventmachine-1.0.0/lib/eventmachine.rb:526:in `start_tcp_server': no acceptor (port is in use or requires root privileges) (RuntimeError)

from /home/pi/.rvm/gems/ruby-1.9.3-p385/gems/eventmachine-1.0.0/lib/eventmachine.rb:526:in `start_server'

from /home/pi/.rvm/gems/ruby-1.9.3-p385/gems/siriproxy-0.4.0/lib/siriproxy.rb:20:in `block in initialize'

from /home/pi/.rvm/gems/ruby-1.9.3-p385/gems/eventmachine-1.0.0/lib/eventmachine.rb:187:in `call'

from /home/pi/.rvm/gems/ruby-1.9.3-p385/gems/eventmachine-1.0.0/lib/eventmachine.rb:187:in `run_machine'

from /home/pi/.rvm/gems/ruby-1.9.3-p385/gems/eventmachine-1.0.0/lib/eventmachine.rb:187:in `run'

from /home/pi/.rvm/gems/ruby-1.9.3-p385/gems/siriproxy-0.4.0/lib/siriproxy.rb:16:in `initialize'

from /home/pi/.rvm/gems/ruby-1.9.3-p385/gems/siriproxy-0.4.0/lib/siriproxy/command_line.rb:96:in `new'

from /home/pi/.rvm/gems/ruby-1.9.3-p385/gems/siriproxy-0.4.0/lib/siriproxy/command_line.rb:96:in `start_server'

from /home/pi/.rvm/gems/ruby-1.9.3-p385/gems/siriproxy-0.4.0/lib/siriproxy/command_line.rb:85:in `run_server'

from /home/pi/.rvm/gems/ruby-1.9.3-p385/gems/siriproxy-0.4.0/lib/siriproxy/command_line.rb:37:in `initialize'

from /home/pi/.rvm/gems/ruby-1.9.3-p385/gems/siriproxy-0.4.0/bin/siriproxy:6:in `new'

from /home/pi/.rvm/gems/ruby-1.9.3-p385/gems/siriproxy-0.4.0/bin/siriproxy:6:in `<top (required)>'

from /home/pi/.rvm/gems/ruby-1.9.3-p385/bin/siriproxy:23:in `load'

from /home/pi/.rvm/gems/ruby-1.9.3-p385/bin/siriproxy:23:in `<main>'


해결방법:

nginx에서 ssl 443 포트를 사용하고 있었는데, nginx (잠시) 종료

pi@raspberrypi:~/SiriProxy$ sudo service nginx stop 

Stopping nginx: nginx.

pi@raspberrypi:~/SiriProxy$ rvmsudo siriproxy server

Starting SiriProxy on 0.0.0.0:443..

SiriProxy up and running.


3. Warning: 메세지 

서버를 시작하면 아래와 같이 Warning: 메세지가 뜬다. 

pi@raspberrypi:~/SiriProxy$ rvmsudo siriproxy server

Warning: can not check `/etc/sudoers` for `secure_path`, falling back to call via `/usr/bin/env`, this breaks rules from `/etc/sudoers`. export rvmsudo_secure_path=1 to avoid the warning.

Starting SiriProxy on 0.0.0.0:443..


해결방법:

pi@raspberrypi:~/SiriProxy$ export rvmsudo_secure_path=1


4. iPhone 4S에서 시리를 실행할 때 server.passless.key를 찾을 수 없다고 시리서버에서 에러

Create server for iPhone connection

/home/pi/.rvm/gems/ruby-1.9.3-p385/gems/eventmachine-1.0.0/lib/em/connection.rb:411:in `block in start_tls': Could not find /root/.siriproxy/server.passless.key for start_tls (EventMachine::FileNotFoundException)

from /home/pi/.rvm/gems/ruby-1.9.3-p385/gems/eventmachine-1.0.0/lib/em/connection.rb:409:in `each'

from /home/pi/.rvm/gems/ruby-1.9.3-p385/gems/eventmachine-1.0.0/lib/em/connection.rb:409:in `start_tls'

from /home/pi/.rvm/gems/ruby-1.9.3-p385/gems/siriproxy-0.4.0/lib/siriproxy/connection/iphone.rb:15:in `post_init'

from /home/pi/.rvm/gems/ruby-1.9.3-p385/gems/eventmachine-1.0.0/lib/em/connection.rb:58:in `block in new'

from /home/pi/.rvm/gems/ruby-1.9.3-p385/gems/eventmachine-1.0.0/lib/em/connection.rb:49:in `instance_eval'

from /home/pi/.rvm/gems/ruby-1.9.3-p385/gems/eventmachine-1.0.0/lib/em/connection.rb:49:in `new'

from /home/pi/.rvm/gems/ruby-1.9.3-p385/gems/eventmachine-1.0.0/lib/eventmachine.rb:1462:in `event_callback'

from /home/pi/.rvm/gems/ruby-1.9.3-p385/gems/eventmachine-1.0.0/lib/eventmachine.rb:187:in `run_machine'

from /home/pi/.rvm/gems/ruby-1.9.3-p385/gems/eventmachine-1.0.0/lib/eventmachine.rb:187:in `run'

from /home/pi/.rvm/gems/ruby-1.9.3-p385/gems/siriproxy-0.4.0/lib/siriproxy.rb:16:in `initialize'

from /home/pi/.rvm/gems/ruby-1.9.3-p385/gems/siriproxy-0.4.0/lib/siriproxy/command_line.rb:96:in `new'

from /home/pi/.rvm/gems/ruby-1.9.3-p385/gems/siriproxy-0.4.0/lib/siriproxy/command_line.rb:96:in `start_server'

from /home/pi/.rvm/gems/ruby-1.9.3-p385/gems/siriproxy-0.4.0/lib/siriproxy/command_line.rb:85:in `run_server'

from /home/pi/.rvm/gems/ruby-1.9.3-p385/gems/siriproxy-0.4.0/lib/siriproxy/command_line.rb:37:in `initialize'

from /home/pi/.rvm/gems/ruby-1.9.3-p385/gems/siriproxy-0.4.0/bin/siriproxy:6:in `new'

from /home/pi/.rvm/gems/ruby-1.9.3-p385/gems/siriproxy-0.4.0/bin/siriproxy:6:in `<top (required)>'

from /home/pi/.rvm/gems/ruby-1.9.3-p385/bin/siriproxy:23:in `load'

from /home/pi/.rvm/gems/ruby-1.9.3-p385/bin/siriproxy:23:in `<main>'


해결방법:

pi@raspberrypi:~/SiriProxy$ sudo cp ~/.siriproxy/server.passless.* /root/.siriproxy


제대로 서버가 시작되고 시리랑 통신이 되면 아래로그 처럼 패킷이 오고가고, 음성을 인식 하는 것을 확인 할 수가 있다. 

pi@raspberrypi:~/SiriProxy$ rvmsudo siriproxy server

Starting SiriProxy on 0.0.0.0:443..

SiriProxy up and running.

Create server for iPhone connection


start conn #<SiriProxy::Connection::Iphone:0x24d76a0 @signature=3, @processed_headers=false, @output_buffer="", @input_buffer="", @unzipped_input="", @unzipped_output="", @unzip_stream=#<Zlib::Inflate:0x24d75b0>, @zip_stream=#<Zlib::Deflate:0x22750e0>, @consumed_ace=false, @name="iPhone", @ssled=false>

[Info - Plugin Manager] Plugins loaded: [#<SiriProxy::Plugin::Example:0x265e960 @manager=#<SiriProxy::PluginManager:0x2274c18 @plugins=[...]>>]

[Info - iPhone] Received Object: LoadAssistant

[Info - iPhone] Received Object: SetRestrictions

[Info - iPhone] Received Object: ClearContext

[Info - iPhone] Received Object: SetBackgroundContext

[Info - iPhone] Received Object: StartSpeechRequest

[Info - iPhone] Received Object: SetRequestOrigin

[Info - User Location] lat: 37.33265096028488, long: 127.1206755237427

[Info - iPhone] Received Object: SpeechPacket

[Info - iPhone] Received Object: SpeechPacket

[Info - Guzzoni] Received Object: AssistantLoaded

[Info - Guzzoni] Received Object: SetConnectionHeader

[Info - iPhone] Received Object: SpeechPacket

[Info - iPhone] Received Object: SpeechPacket

[Info - iPhone] Received Object: SpeechPacket

[Info - iPhone] Received Object: SpeechPacket

[Info - iPhone] Received Object: SpeechPacket

[Info - iPhone] Received Object: SpeechPacket

[Info - iPhone] Received Object: SpeechPacket

[Info - iPhone] Received Object: SpeechPacket

[Info - iPhone] Received Object: SpeechPacket

[Info - iPhone] Received Object: SpeechPacket

[Info - iPhone] Received Object: SpeechPacket

[Info - iPhone] Received Object: SpeechPacket

[Info - iPhone] Received Object: SpeechPacket

[Info - iPhone] Received Object: SpeechPacket

[Info - iPhone] Received Object: FinishSpeech

[Info - Guzzoni] Received Object: SpeechRecognized

[Info - Plugin Manager] Processing '연습실을 폭식 '

[Info - Plugin Manager] Processing plugin #<SiriProxy::Plugin::Example:0x265e960>

[Info - Plugin Manager] No matches for '연습실을 폭식 '

[Info - Guzzoni] Received Object: AddViews

[Info - Guzzoni] Received Object: RequestCompleted

[Info - iPhone] Received Object: Metrics

[Info - iPhone] Received Object: ClearContext

Create server for iPhone connection

start conn #<SiriProxy::Connection::Iphone:0x296f0b8 @signature=5, @processed_headers=false, @output_buffer="", @input_buffer="", @unzipped_input="", @unzipped_output="", @unzip_stream=#<Zlib::Inflate:0x296efe0>, @zip_stream=#<Zlib::Deflate:0x296efc8>, @consumed_ace=false, @name="iPhone", @ssled=false>

[Info - Plugin Manager] Plugins loaded: [#<SiriProxy::Plugin::Example:0x2976a50 @manager=#<SiriProxy::PluginManager:0x296ed88 @plugins=[...]>>]

[Info - iPhone] Received Object: LoadAssistant

[Info - iPhone] Received Object: SetBackgroundContext

[Info - Guzzoni] Received Object: AssistantLoaded

[Info - iPhone] Received Object: SetRestrictions

[Info - iPhone] Received Object: ClearContext

[Info - iPhone] Received Object: StartSpeechRequest

[Info - iPhone] Received Object: SetRequestOrigin

[Info - User Location] lat: 37.33246262930172, long: 127.12103997179449

[Info - iPhone] Received Object: SpeechPacket

[Info - iPhone] Received Object: SpeechPacket

[Info - iPhone] Received Object: SpeechPacket

[Info - Guzzoni] Received Object: SetConnectionHeader

[Info - iPhone] Received Object: SpeechPacket

[Info - iPhone] Received Object: SpeechPacket

[Info - iPhone] Received Object: SpeechPacket

[Info - iPhone] Received Object: SpeechPacket

[Info - iPhone] Received Object: SpeechPacket

[Info - iPhone] Received Object: SpeechPacket

[Info - iPhone] Received Object: SpeechPacket

[Info - iPhone] Received Object: SpeechPacket

[Info - iPhone] Received Object: SpeechPacket

[Info - iPhone] Received Object: SpeechPacket

[Info - iPhone] Received Object: SpeechPacket

[Info - iPhone] Received Object: SpeechPacket

[Info - iPhone] Received Object: FinishSpeech

[Info - Guzzoni] Received Object: SpeechRecognized

[Info - Plugin Manager] Processing 'Test city Prokesh '

[Info - Plugin Manager] Processing plugin #<SiriProxy::Plugin::Example:0x2976a50>

[Info - Plugin Manager] No matches for 'Test city Prokesh '

[Info - Guzzoni] Received Object: AddViews

[Info - Guzzoni] Received Object: RequestCompleted

[Info - iPhone] Received Object: Metrics


참조 했던 싸이트 및 참고 할만 한 싸이트

http://www.raspberrypi.org/phpBB3/viewtopic.php?f=28&t=9545&sid=f540e172fea915ee123c00d4b379722c&start=25

http://www.idownloadblog.com/2011/12/09/how-to-install-siri-proxy-tutorial-video/

http://www.raspberrypi.org/archives/tag/siriproxy

https://github.com/plamoni/SiriProxy

http://www.raspberrypi.org/phpBB3/viewtopic.php?f=63&t=25118&p=231345

http://unleashthephones.com/2012/12/27/video-siri-proxy-raspberry-pi-get-siri-to-open-your-garage-door/

http://www.redmondpie.com/opening-garage-door-using-siri-and-a-raspberry-pi-video/


https://github.com/wayneeseguin/rvm/issues/1329

https://github.com/elvisimprsntr


저작자 표시 비영리
신고
Posted by KraZYeom

맥북에어에서 주로 작업을 하고 있는데, 가끔 토렌토를 사용하면 뭔가 꺼림직한 경우가 많다. 토렌토가 SSD나 HDD에 읽기 쓰기가 빈번하게 일어나다 보니 수명도 단축 시킬수 있다. 그래서 가지고 있는 라즈베리 파이를 토렌토 서버로 사용하기로 마음먹었다. 설정 방법은 의외로 간단했다. 차근차근 따라해보도록 하자. 



외장 하드 설정 방법은  라즈베리 파이로 타임 머신 서버 구성하기를 참조 하도록 한다. 



Trasnmission-daemon 설치 및 설정


1. 토렌토 클라이언트 transmission 데몬 설치

apt-get install transmission-daemon


2. transmission 데몬 정지

설치가 되면 바로 서비스가 시작된다. 설정값 수정을 위해서 데몬을 정시 시키도록 한다.

/etc/init.d/transmission-daemon stop


3. transmission 설정 값 수정 

다운로드 경로, 웹 클라이언스 접속 용 사용자 이름과 패스워드 설정을 한다.

vim /etc/transmission-daemon/settings.json


아래와 같이 수정이 필요한 파란색으로 표시된 특정 부분만 수정하도록 하자. 빨간색으로 표시된 부분인 포트는 웹 클라이언트 접속시에 중요하니 기억해도록 한다. 

"download-dir": "/mnt/Torrent",

"incomplete-dir": "/mnt/Torrent",

"rpc-password": "q1w2e3r4",

"rpc-port": 9091,

"rpc-username": "torrent",

"rpc-whitelist-enabled": false,


4. transmission 데몬 재시작

/etc/init.d/transmission-daemon start


5. 웹 클라이언트 접속하기 

웹 브라우저를 실행해서 아래 그림 처럼 라즈베리 파이 IP와 위의 빨간색으로 표시된 포트로 접속을 한다. 그리고 일반적으로 토렌토 클라이언트를 사용하 듯이 사용하면 된다. 


6. 이 후에는 samba, ftp, afp 등으로 접속해서 받으면 된다. 


** 주의 할 점은 다운로드 디렉토리의 퍼미션이 중요하다. 잘 설정해보도록 하자. 

저작자 표시 비영리
신고
Posted by KraZYeom

원문 : Your own cloud server with Owncloud on the Raspberry Pi


오늘날에는 관리, 동기화 그리고 파일 공유, 달력 공유, 주소록 공유, 음악 공유, 사진 공유가 널리 사용되고 있다. 이것들은 드롭박스, 슈가싱크, 플리커, 피카사 등과 같은 클라우드 서비스들이 제공하고 있다. 애플, 구글 그리고 마이크로소프트와 같은 큰 기업들 또한 이와 같은 서비스를 제공한다. 사람들은 하나의 계정으로 이모든 것이 사용가능 하다. "무료" 서비스가 매우 편안할 수 있지만, 이런 모든 서비스의 무료가 아닌 부분은 직접적인 제어를 못하는 서버에 여러분의 개인적인 정보가 저장되어 있고 개인정보는 자주 프로파일 광고 생성에 사용이 된다는 것이다. 만약에 Owncloud의 제어로 자신의 하드웨어 기기에서 데이터를 가지고 있기를 원한다면 꽤 흥미로운 선택이다. 달력, 주소록, 음악, 사진, 파일을 자신의 클라우드에서 관리할 수 있도록 해주는 CalDAV, CardDAV 그리고 WebDAV와 같은 멋진 서비스를 제공한다. 잠시후에 설치에 필요한 단계에 대한 간략한 개요를 제공한다. 그리고 모든 설치와 업데이트 과정을 자동화한 설치 스크립트를 제공한다. 동일한 스크립트로 나중에 OwnCload 설치를 업데이트하는 데 사용할 수 있다.


여기 Owncloud 설치에 필요한 몇 가지 단계에 대한 개요가 있다.

  1. ATP 팩키치 업데이트 및 업그레이드
  2. www-data 그룹이 존재하는지 확인
  3. Apache, PHP, SQLite와 같은 모든 필요한 패키치 설치
  4. 240MB 램과 16 MB 비디오 펌웨어 업데이트 수행
  5. SSL 연결에 사용되는 자체 서명된 인증서 생성 (1년간 유효)
  6. Owncloud에서 필요한 아파치 모듈 활성화
  7. 불필요한 리소스들을 비활성화
  8. 자체 서명된 인증서 사용을 위해 아파치 설정
  9. SSL 싸이트 활성화
  10. 병렬 아파치 프로세스 수를 제한
  11. 스왑 파일 크기를 512MB로 변경
  12. 최신의 Owncloud를 다운로드하고 설치하기
  13. 모든 /var/www 파일의 그룹 및 소유자를 재귀적으로 www-data로 변경
  14. 마지막으로 아파치 서비스 재시작

모든 과정을 자동화할 수 있고 Owncloud를 즉시 사용할 수 있는 설치를 제공하는 스크립트를 만들었다. 스크립트를 나의 Github 리포지토리에서 찾을 수 있다. 이 스크립트는 Raspbian 2012-07-15 배포판에서 테스트 되었다. (2013-02-09 배포판 테스트 완료)


처음으로 Git가 설치되어 있어야한다. 

sudo apt-get update

sudo apt-get install -y git dialog


최신의 PiCloud 설치 스크립트를 다음 명령어로 다운로드를 받는다.

cd

git clone git://github.com/petrockblog/OwncloudPie.git


스크립트를 다음 명령어로 실행한다.

cd OwncloudPie

chmod +x owncloudpie_setup.sh

sudo ./owncloudpie_setup.sh


초기 화면은 다음과 비슷할 것이다. 

1번을 선택하여 자신의 라즈베리 파이 서버 URL을 적는다. 그리고 2번 또는 3번을 선택하여서 설치를 한다. Nginx를 사용한 버젼은 추천한다. 


설치를 마치면 아래와 같이 접속 경로를 보여주고 아래 경로로 접속을 하면 관리자 생성 및 설정을 끝낼 수 있다.

관리자 사용자 이름, 패스워드 설정. Advenced를 선택하면 경로 및 DB 이름을 선택 할 수도 있다.

파일, 음악, 달력, 주소록, 사진을 관리 할 수 있다.

스크립트의 몇몇 부분의 영감을 이 블로그에서 얻었다.


이 스크립트가 사람들에게 조금이나마 도움이 되길 희망한다. 피트백이나 코멘트를 받으면 좋을 것 같다!


업데이트: 아파치 대신에 Nginx 웹서버를 사용 가능하도록 추가했다. Nginx서버는 아파치 처럼 많은 리소스를 사용하지 않는다. 그리고 빠르다. 업데이트된 스크립트는 리포지토리에서 찾을 수 있다.


WebDAV 접근하기 (iOS 용으로도 가능함)


Owncloud 인스턴스를 URL을 사용하여 WebDAV를 통해서 접근 가능하다. 

https://yourServerUrl/owncloud/remote.php/webdav/

파인더에서 Cmd+G 를 눌러서 Connect to Server 로 이동하면 된다.


그리고 선택한 사용자 이름과 패스워드로 로그인 한다. 라즈베리 파이 사용자 계정이 아니라, 위에서 생성한 계정이다.

Samba 처럼 파일 공유 서버로 사용가능하다.


iOS 와 연동하기

여러분의 iOS 디바이스의 달력과 주소록을 연동하기 원한다면, 이 정보가 도움이 될 수도 있다. iOS 설정에 대한 공식 Owncloud 위키에는 아직 몇 가지 문제가 있는것 처럼 보인다. 적어도 이 설정은 나에게는 Nginx 설정으로 동작한다.


달력 (CALDAV)

Server: https://my.servername.com/owncloud/remote.php/caldav/principals/USERNAME/

SSL enabled, port 443


주소록 (CARDDAV)

Server: my.servername.com:443/owncloud/remote.php/carddav/principals/USERNAME

SSL enabled, port 443


서버 설정의 차이를 주의하라!


주소록과 달력 데이터 백업하기

주소록과 달력 데이터의 설정과 백업에 매우 도움이 되는 문서를 찾았다. 

저작자 표시 비영리
신고
Posted by KraZYeom

원문 : Raspberry Pi – Time Machine Server 


타임 머신을 사용하여 백업을 하고 있었긴 했지만, 유선으로 백업을 해야하는지라 항상 연결되지 않아서 듬성 듬성 백업을 했었다. 그래서 타임 캡슐을 살까하다가 어마어마한 가격(36~59만원)에 좌절하고, 에어포트 익스프레스는 HDD를 지원하지 않아서 에어포트 익스트림을 22만원이라는 저렴하지 않은 가격에 구입을 할 까 생각을 하고 있었다. 그러던 찰나 집에 뒹굴던 Raspberry Pi(라즈베리 파이)를 잘 사용하면 타임 머신 서버로 사용 가능하다는 것이 생각이 났다. 그래서 삽을 들었다. 역시나 삽질은 한번에 되지 않는 법. 이리저리 찾아 다니다가 괜찮은 블로그 포스팅을 발견하여 번역을 하기로 했다. (원문의 저자도 나와 똑같은 글 2개를 참조해서 작성을 했음.) 그리고 원문 포스팅 날짜가 2013년 1월 24일로 완전 최근에 작성되어서 별다른 어려움이 없었다. 




라즈베리 파이로 애플 타임 머신 서버를 구동하기 위해 잠시 삽질을 했다. 원래 ARM 용 Arch 리눅스에서 사용하길 원했지만, 운이 없었는지 몇 번의 삽질 끝에 Raspian 이미지를 사용해야겠다고 마음을 먹었다. 고정 아이피에서 동작하고 있는 라즈베리 파이가 있다고 가정하고 필요한 것은 다음과 같다.

고정 IP를 가진 라즈베리 파이(Raspberry Pi) (나는 512MB 램의 B 모델을 가지고 있다. 나는 256MB를 가지고 있는데...)

Raspbian를 담고 있는 메모리 카드(2012-12-16-wheezy-raspbian.img 이미지를 사용하였다. 나도...)

- 파워를 공급 받는 외장 HDD

- 네트워킹 디바이스와 케이블 (예: 라우터/스위치)

 

1. 외장 HDD 포맷 하기

처음으로, 맥에 사용하기 위해서 외장하드를 case sensitive Mac Journalled file system로 포맷을 한다. 이렇게 하기 위해서는 외장 HDD를 맥에 연결하고 OS X에서 Utilities > Disk Utility를 실행한다. 맥에 연결된 모든 드라이브를 포함하는 왼쪽 메뉴에서, 외장 HDD를 설택한다. 선택된 드라이브에 모든 데이터를 삭제할 예정이기 때문에 100% 확인하고 선택을 하라. 올바르게 선택된 드라이브에서 윈도우의 오른쪽 수평 메뉴에서 'erase option'을 선택한다. 


Mac OS Extended (Journaled) 선택해서 올바르게 드라이브를 포맷하기위해 이름을 원하는 데로 지어라. 나는 TimeMachine으로 정했다. Erase를 클릭한다!


드라이브의 포멧이 끝나면 메뉴에서 다음 옵션인 Partition으로 이동한다.

전체 드라이브를 하나의 파티션으로 만들기를 원한다 그래서 옵션을 아래와 같이 선택하고 Apply를 클릭한다.


Partition Layout: 1 Partition

Name: Time Machine

Format: Mac OS Extended (Journaled) – 가능 하다면 case sensitive 도 함께.

Size: 최대한 크게 

 

2. 맥 파일 시스템을 위한 라즈베리 파이 준비 

처음으로, 맥에서 HDD를 분리하고 라즈베리 파이에 꼽는다. 이렇게하면 라즈베리 파이의 베쉬 터미널에서 외장 HDD의 중요한 정보를 얻을 수 있다. 맥의 디스크 유틸리티를 사용하여 만든 파티션의 UUID가 필요하다. 그렇게하기 위해서 다음 명령어를 사용한다.

$ sudo blkid


$는 실제 명령어에 포함되지 않는 것을 확인하라. 이것은 단지 비-루트 배쉬 터미널을 사용을 의미한다. 명령어를 입력하고 나면 사용자 패스워드를 입력하는 프롬프트가 나타난다. 이후에 저장 장치가 포함된 모든 연결된 디바이스가 리스트로 나타난다. 하나의 HDD를 연결하였으면 하나의 파티션의 경우 대부분의 경우 /dev/sda1를 확인 할 수 있다. ( 나의 경우엔 /dev/sda2 ) "TimeMachine" 레이블의 파티션의 UUID를 다른곳에 적어놓는다. 나중에 파티션을 마운트 할 수 있도록 맥 파일 시스템 지원을 다운로드하고 설치해야한다. 그러나 먼저 모든 패키지가 최신인지 확인하기 위해서 업데이트를 실행한다. 

$ sudo apt-get update


그리고 파티션 지원을 설치하기 위해서는 다음 명령어를 실행한다.

$ sudo apt-get install hfsplus hfsutils hfsprogs

Y/n 답변 프롬프트가 한 번 또는 몇 번 나타난다. 각 프롬프트 마다 y를 입력한다. 라즈베리파이는 모든 필요한 패키지를 다운로드하고 그것들을 자동으로 설치한다. 완료되면 명령어 프롬프트로 돌아온다.

 

3. 타임머신 파티션을 마운트하기 위해 새로운 디렉토리 생성하기

타임머신 파티션을 마운트 할 디렉토리를 생성해야 한다. 

$ sudo mkdir /mnt/TimeMachine


이제 /etc/fstab 파일을 사용하여서 영구적인 마운팅 설정을 만들 것이다. fstab파일을 읽고 시스템이 부딩할 때 마다 자동적으로 나열된 디렉토리에 드라이브를 마운드한다. 단지 주어진 디렉토리에 미디어의 파티션을 마운트하기 위한 부트 스크립트 같은 것이다. 파일을 편집하기 위해서는 루트 사용자로 다음 명령어로 파일을 열어야 한다.

$ sudo nano /etc/fstab


화살표 키로 파일의 마지막으로 이동한 후 아래를 입력한다.

UUID="XXXX-XXXX-XXXX-XXXX" /mnt/TimeMachine hfsplus rw,force,exec,auto,users 0 3


XXXX부분은 이전 2번째 단계에서 적어놓은 UUID 이다. CTRL + O를 사용하여서 파일을 저장한다. 마지막 라인에 추가를 해야한다. 다른 데이터는 지우면 안된다. CTRL + X를 눌러서 종료한다. /etc/fstab 파일에 외장 HDD의 파티션이 있다. 그러므로 라즈베리 파이는 USB 포트에 HDD가 연결되지 않으면 부팅을 하지 않는다. 이것이 몇 가지 이슈 상황을 만들었다. ( 몇 번 삽질을 했다. UUID가 맞는지를 확인하라. )

라즈베리 파이를 리부팅한다. fstab 파일은 타임머신을  /mnt/TimeMachine 디렉토리로 자동 마운트 한다는 것을 기억하라. 

부팅이 완료되면 TimeMachine 파티션 디렉토리로 이동한다. 그리고 모든 것이 잘 동작하고 있는지 확인하기 위해 테스트 디렉토리를 생성한다.

$ cd /mnt/TimeMachine

$ sudo mkdir test


또한 mount 명령어를 사용하여 /dev/sda1( 나는 /dev/sda2 )가 /mnt/TimeMachine에 맵핑이 되었는지 확인한다.또한 rw 글자가 결과에 잇는지 확인한다. 읽기/쓰기 권한이 파티션에 있는지 확인해야 한다. 3단계의 마지막 파트는, 사용자 pi가 맥에서 share로 로그인하는 사용자이기 때문에 소유권을 부여한다. 다음 명령어를 입력한다.

$ sudo chown -R pi /mnt/TimeMachine

 

4. Netatalk와 Avahi 설치하기

마지막으로, 라즈베리 파이가 네트워크 상에서 맥과 통신을 하기 위해 사용하는 서비스의 설치가 필요하다. 이 작업을 수행하기 위해서는 몇 가지 패키지 설치를 해야하고 소스로 부터 Netatalk를 설치해야 한다. Netatalk는 타임머신 공유 드라이브를 알려주고 백업 데이터와 통신하는데 사용하는 팩키지이다. 이전에 언급한 패키지와 함께 설치한다.

$ sudo apt-get install avahi-daemon libavahi-client-dev libdb5.3-dev db-util db5.3-util libgcrypt11 libgcrypt11-dev

2번째 단계처럼 프롬프트가 나타나면, 각각 프롬프트에 Y를 선택한다.


sourceforge에서 Netatalk 3.0(3.0.1이 아니다!)을 얻는다. 소스를 컴파일 한다. 아래 글을 자세하게 따라하라.

$ cd

$ wget http://sourceforge.net/projects/netatalk/files/netatalk/3.0/netatalk-3.0.tar.bz2


Netatalk가 다운로드 완료되었으면 압축을 풀어야 한다.

$ tar xvfj netatalk-3.0.tar.bz2


tar-ball의 내용을 /home/pi/netatalk-3.0 디렉토리에 압축을 풀것이다. 그리고 디렉토리로 이동하여 컴파일을 해야한다. 라즈베리 파이에서 컴파일 작업은 시간이 꽤 걸린다는 것을 명심하라. (약 10분이상 걸린것 같다.)

$ cd netatalk-3.0

$ ./configure –with-init-style=debian –with-zeroconf

$ make

$ sudo make install


5. 타임 머신 공유를 위해 Netatalk 설정하기

이제 Netatalk와 기타 다른 패키지로 Netatalk설정을 할 수 있다. 삼바 설정에 익숙하다면, Netatalk 설정 파일은 매우 유사하다. Netatalk를 설정하기 위해서 다음 파일을 편집한다.

$ sudo nano /usr/local/etc/afp.conf


다음과 같이 파일을 작성한다. 물론 <<<를 포함한 뒷 부분은 작성하지 않는다. 

;

; Netatalk 3.x configuration file

;

[Global]

; Global server settings

hostname = TimeMachine RasPi

afp listen = 192.168.2.253   <<< 여기에 라즈베리 파이의 고정 아이피를 작성한다.

log file = /var/log/netatalk.log

log level = default:info

[Homes]

basedir regex = /home

cnid scheme = dbd

; Display each user home directory in this format

home name = Home: $u

[Time Machine]

; Our Time Machine volume

path = /mnt/TimeMachine

cnid scheme = dbd

file perm = 0660

directory perm = 0770

time machine = yes


CTRL + O를 눌러서 파일을 저장한다. CTRL + X를 사용해서 종료한다.

Netatalk와 Avahi 서비스를 다음 명령어로 실행한다. 

$ sudo /etc/init.d/netatalk start

$ sudo /etc/init.d/avahi-daemon start

이미 구동되어 있다고 나오면 start 대신에 restart를 넣어서 실행한다.

서비스 구동을 위해서 라즈베리 파이에 한가지 해야 할 일이 있다. 부팅할 때 저것들을 시작하게 설정한다. 

$ cd /etc/init.d/

$ sudo update-rc.d netatalk defaults

두 개 라인의 출력결과를 얻고, 두 번째는 에러 처럼 보이지만, 걱정마라 괜찮다.

 

5. Mac과 연결하기!!!

맥으로 돌아가서 백업을 시작할 수 있다. 파인더에서 Go > Connect to Server로 이동(단축키 : Cmd-G)하고 다음을 타이핑한다.

afp://XXX.XXX.XXX.XXX

XXX.XXX.XXX.XXX는 라즈베리파이의 아이피이다. 사용자 이름과 비밀번호를 위해서 팝업이 나타난다. 라즈베리 파이의 사용자 이름과 비밀번호를 사용하여 로그인한다.

파인더 윈도우에서 share를 볼 수 있다. 계속해서 Settings > Time Machine > Select Disk 에서 타임 머신을 설정할 수 있다.

꽤 느린것을 확인하였지만, 초기 백업이후에는 괜찮다. 

Tom


이 가이드는 다음 두 가이드를 조합해서 작성하였다.


Simon’s Guide

Iurii’s Guide

저작자 표시 비영리
신고
Posted by KraZYeom