라즈베리파이 부팅시 자동으로 메일 보내기
라즈베리파이에 모니터, 마우스,키보드 등을 연결하여 개발한다는 것은 여간 번거로운 일이 아니다. 그래서 라즈베리파이는 네트워크에 연결하여 전원을 켜면 부팅시에 라즈베리파이에 설정된 아이피 주소를 메일로 전달한다면 외부에서 Putty 등의 SSH 클라이언트를 이용하여 원격으로 접속할 수가 있어서 라즈베리파이에 모니터와 키보드를 연결하지 않아도 다른 노트북이나 데스크탑에서 원격접속하여 개발환경을 구성할 수가 있다.
http://elinux.org/RPi_Email_IP_On_Boot_Debian
라즈베리파이의 /etc/rc.local 파일에 실행파일을 등록해두면 부팅시 자동으로 실행되는 점을 이용하여 라즈베리파이가 부팅될 때마다 변경될 가능성이 있는 시스템의 IP 주소를 메일로 전할 수 있으므로 어디에서든지 SSH등을 이용하여 라즈베리파이에 접속하여 제어할 수 있으므로 보다 편리한 개발환경을 구성할 수 있다.
파이썬 언어를 이용하여 메일을 전송하는 프로그램을 작성하고 그 메일의 내용에 IP 주소를 담아 개발자에게 보내려고 한다
라즈베리파이 콘솔 명령행에서 python 을 입력하고 엔터를 치면 python의 현재 버전을 확인할 수 있다
python 프롬프트(>>>)도 보이는데 아래와 같이 입력하면 python 이 제대로 작동하는지 확인할 수 있다
$ python
>>>print 'Hello World'<enter>
python 프롬프트로부터 나오기 위해서는 CTRL + D 를 누른다
아래의 코드는 python 2.7 이상에 포함된 smtplib 를 이용한 것이다
아래와 같은 내용으로 파일을 작성하고 /home/pi/report_ip_by_email.py 으로 저장한다
반드시 utf-8 형식으로 인코딩하거나 한글 주석을 모두 지운다
==================
# -*- coding: utf-8 -*- import subprocess def sendEmailOnBoot(): import smtplib import string USER = '송신자_메일_아이디@gmail.com' PASS = 'ar310583my' TO = '수신자_메일_아이디@naver.com' SUBJECT = '[호스트_이름] IP Report' ip = subprocess.check_output("hostname -I", shell = True) TEXT = '호스트_이름\'s IP=%s' %ip print TEXT FROM = USER HOST = 'smtp.gmail.com:587' BODY = string.join(( 'From: %s' %FROM, 'To: %s' %TO, 'Subject: %s' %SUBJECT , '\r\n', TEXT, ), '\r\n') server = smtplib.SMTP(HOST) server.starttls() server.login(USER, PASS) server.sendmail(FROM, TO, BODY) server.quit() print 'Emailed to %s.' %TO if __name__ == "__main__": sendEmailOnBoot()
위와 같은 코드를 작성하고 /home/pi/ 안에 저장한 후 파이썬 명령으로 실행하여 메일이 수신되는지 확인한다
$ python /home/pi/report_ip_by_email.py
만약 수신자의 Gmail 계정의 보안설정이 '보안에 취약한 앱 사용안함' 으로 설정되어 있다면 메일 보내기에 실패한다
그러므로 Gmail 계정의 보안설정을 변경하여 '보안에 취약한 앱 사용함' 으로 설정하고 다시 위의 명령을 실행해야 한다
/etc/rc.local 파일에 위에서 작성한 파이썬 프로그램 파일명을 등록한다
$ sudo vi /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"
fi
sleep '30'
python /home/pi/report_ip_by_email.py
exit 0
위와 같이 변경하고 저장한 후에 rc.local 파일을 실행하여 여전히 메일이 전송되는지 확인한다
$ sudo /etc/rc.local
최종적으로 라즈베리파이 시스템을 리부팅하여 메일이 전송되는지 확인한다
$ sudo reboot