라즈베리파이 부팅시 FTP통해 IP 알림 받기

라즈베리파이를 public 망에 물려서 공인 IP를 받아 쓰기 시작했다. 공인 IP를 받으면 어디서든 제약 없이 접근할 수 있으니 따로 서버 호스팅을 하는 것과 동일한 효과를 볼 수 있다. 공인 IP에 도메인을 연결해두면 도메인으로도 접근이 잘 된다.

라즈베리파이는 입출력 장치 없이 사용하는 서버이므로 부팅시 IP를 알려주는 방법이 필요해서 찾아봤는데, 처음 검색된 것이 gmail smtp를 이용하여 메일로 알림을 주는 것이다.

이것이 잘 되면 좋을텐데, 구글에서 비 보안 어플리케이션이 접근한다면서 보안 경고를 보내온다. 좀 꺼림직하여 다른 방법을 찾아봤다.

다음으로 시도해본것이 scp를 이용하여 ip를 다른 서버에 알려주는 것이다. authorized_keys도 입력을 해 두고 비번 없이 scp가 되도록 설정을 해 두었는데 이상하게 잘 안된다. pi 계정, root 계정 모두 pub key를 등록해봐도 안된다. rc.local에 스크립트를 추가하는 방식이었는데 될 것 같은데 안되는…

다음으로 시도해본게 NAS에 ftp로 ip 주소를 전송하는 방법이다. 라즈베리파이가 부팅하면서 ip.html 이라는 파일을 만들고 이를 ftp를 이용하여 NAS에 전송한다. NAS에 http로 접근하면 해당 주소를 web으로 바로 확인할 수 있다. cron 작업에 하루에 한번 IP를 리포트하도록 설정을 했다. 깔끔하게 동작한다.

pi@raspberrypi:~ $ cat startup.sh 
#!/bin/bash
HOST='nas.server.net'
USER='nas_ftp_id'
PASSWD='nas_password'
FILE='ip.html'

cd /home/pi

hostname -I > $FILE
date >> $FILE

ftp -n $HOST << END_SCRIPT
quote USER $USER
quote PASS $PASSWD
cd /web
put $FILE
quit
END_SCRIPT

위 스크립트는 ip address를 ip.html 파일에 기록한 후 ftp로 server로 전송하는 스크립트이다. 본인 상황에 맞게 수정하여 사용하면 될 것 같다.

부팅시 위 스크립트를 실행하기 위해 rc.local 파일에 다음 라인을 추가했다.

pi@raspberrypi:~ $ cat /etc/rc.local 
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
  printf "My IP address is %s\n" "$_IP"
  /home/pi/startup.sh # 라인 추가
fi

exit 0

하루에 한 번 실행되도록 cron에도 추가해줬다.

pi@raspberrypi:~ $ crontab -l
# Edit this file to introduce tasks to be run by cron.
# 
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
# 
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').# 
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
# 
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
# 
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
# 
# For more information see the manual pages of crontab(5) and cron(8)
# 
# m h  dom mon dow   command
0 4 * * * /home/pi/startup.sh

iPad에서 box.com에 저장한 만화책 보는 방법

iPad는 만화책을 보기 참 좋은 디바이스다. iPad를 통해 만화책을 보면서 어떻게 관리하는게 가장 좋은가에 대한 고민을 해왔다. 결론은, 1) 만화는 서버에 저장할 것, 2) 서버에 있는 만화를 보여주는 앱이 필요하다 였다.

클라우드에 저장하려고 보니 단연 box.com이 눈에 띄었다. 50G의 무료 용량에 편의 기능이 충분하기 때문이다. Mac과의 연동도 아주 깔끔하고, 최근 업데이트된 iOS용 앱도 이미지 뷰어로 손색이 없다. 그러나 만화책을 box 앱으로 보기에는 무리가 있는게, 좌우 넘김 조절이 되지 않고, 책갈피 기능, 마지막 본 이미지로 바로 가기 등의 기능이 없어서 사용하기 너무 불편하다.

AirComix

따라서 만화책을 보기 위해선 일정 편의를 제공해주는 전용 뷰어가 필요하다. iPad에 만화를 넣고 보는 뷰어는 많이 있지만, 서버에 있는 만화를 보여주는 앱은 많이 없다. 그 중 국내 개발자분께서 만든 앱인 AirComix가 정말 괜찮다. 전용 서버도 제공을 해 줘서 Windows나 Mac에 서버를 실행해놓고 아이패드에서 보는 것도 가능하다. 그러나 이 뷰어는 FTP를 지원해 준다는 것. 여기에 연결 포인트가 있다.

그래서 box.com이 FTP를 지원해주는지 찾아봤는데 지원은 한다. 다만 유료 계정인 Business, Enterprise 계정만 지원을 한다. 한달에 수십불씩 지불하면서 사용할 생각은 없기때문에 패스.

FTP를 바로 사용할 수 없다면, 지원하는 WebDav를 다른 FTP 서버에 마운트하면 되지 않을까? 나는 라즈베리파이가 집에 항상 켜져있고 FTP서버도 동작하고있다. 여기에 box.com을 WebDav로 mount해보기로 했다.

역시 Linux에서 불가능한 것은 없다. WebDav를 파일시스템에 마운트 할 수 있으며, 설명된 페이지도 여럿 있다. 나는 다음 링크를 보고 라즈베리파이에 마운트 시켰다. http://techiech.blogspot.kr/2013/04/mounting-webdav-directory-in-linux.html

/etc/fstab에는 다음과 같이 마운트하도록 설정했다.
[text]
https://dav.box.com /home/pi/dav davfs user,noauto,file_mode=600,dir_mode=700 0 1
[/text]
FTP 접속하기 전에 설정을 조금 변경해야 한다. 외부 IP에서 접속시 제대로 동작하지 않기 때문이다. /etc/vsftpd.conf 파일을 열고 마지막에 다음 라인을 추가해준다. (vsftp 기준)
[text]
pasv_promiscuous=YES
[/text]
이제 iPad에서 AirComix를 실행한 후 FTP 서버 설정 후 연결해보면 마운트된 box.com 내의 파일들을 확인할 수 있다.

AirComix에서 FTP 서버 설정
AirComix에서 FTP 서버 설정