因爲我使用樹莓派的場景大多數是在沒有顯示器、只用terminal鏈接它的狀況下,因此,它的IP地址有時會在重啓以後變掉(DHCP的),致使我沒法經過terminal鏈接上它。而後我又要很麻煩地登陸路由器的管理界面裏,去看它被分配到的新IP是什麼,而後用terminal重連,太麻煩了,不是麼?做爲一個樹莓派玩家,這種麻煩簡直是沒法接受的!html
爲了解決這個問題,我讓Pi開機的時候,自動向我指定的Email發送一封郵件,告訴我它這次開機時的IP地址。
步驟: 開機時執行一個腳本,檢測網絡可用性→網絡通暢後獲取本身的IP地址→發送郵件到指定的郵箱。
下面一一道來。python
一、開機啓動項
開機執行一個腳本是怎麼作到的?
只須要向 /etc/rc.local 文件中添加一句話,便可開機執行一個腳本了:linux
1
2
|
# send a mail to notify the IP address of Pi
/
root
/
data
/
source
/
send
-
ip
-
mail.sh >>
/
root
/
data
/
source
/
send
-
ip
-
mail.log
2
>&
1
|
二、上報IP地址的腳本實現
send-ip-mail.sh腳本的內容以下:(vim不會自動建立指定目錄)ubuntu
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
#!/bin/bash
# check network availability
while
true
do
TIMEOUT
=
5
SITE_TO_CHECK
=
"www.126.com"
RET_CODE
=
`curl
-
I
-
s
-
-
connect
-
timeout $TIMEOUT $SITE_TO_CHECK
-
w
%
{http_code} | tail
-
n1`
if
[
"x$RET_CODE"
=
"x200"
]; then
echo
"Network OK, will send mail..."
break
else
echo
"Network not ready, wait..."
sleep
1s
fi
done
# get the IP address of eth0, e.g. "192.168.16.5"
ETH0_IP_ADDR
=
`ifconfig eth0 | sed
-
n
"2,2p"
| awk
'{print substr($2,1)}'
`
# send the Email
echo
"Current time: `date '+%F %T'`. Enjoy it"
| mutt
-
s
"IP Address of Raspberry Pi: $ETH0_IP_ADDR"
xxx@gmail.com
|
腳本很簡單,分爲3部分:第一部分檢測網絡可用性;第二部分取樹莓派的eth0網卡的IP地址;第三部分發送郵件到指定的Email。
其中,第一部分是必需要有的,由於通過我試驗,在本腳本執行時,樹莓派的網絡尚未初始化好,此時你直接發郵件是發不出去的。在這裏我經過訪問www.126.com來肯定網絡可用性。
第三部分須要你預先配置好mutt和msmtp。vim
三、安裝配置mutt和msmtp
配置好mutt和msmtp後,就能夠像上面同樣,經過一句代碼將郵件發送出去。
首先要在Pi上安裝mutt和msmtp:windows
1
2
|
pacman
-
S msmtp
pacman
-
S mutt
|
安裝後,先配置msmtp。在你用戶的根目錄下建立文件 .msmtprc,內容以下:bash
1
2
3
4
5
6
7
|
account default
host smtp.
126.com
from
xxx@
126.com
auth plain
user xxx@
126.com
password your_password
logfile
/
var
/
log
/
msmtp.log
|
其中,smtp.126.com是我使用的郵箱的SMTP服務器地址,xxx@126.com是我用於發送郵件的郵箱,your_password是郵箱密碼,你要根據你的狀況修改。服務器
而後配置mutt。在你用戶的根目錄下建立文件 .muttrc,內容以下:網絡
1
2
3
4
|
set
sendmail
=
"/usr/bin/msmtp"
set
use_from
=
yes
set
realname
=
"Alarm"
set
editor
=
"vim"
|
其中,realname是發件人的名字,接收到的郵件中會顯示出來。dom
四、msmtp測試
1
2
|
測試配置文件:msmtp
-
P
測試smtp服務器:msmtp
-
S
|
1
2
3
4
5
6
7
8
9
10
11
12
|
bitnami@linux:~$ msmtp
-
-
host
=
smtp.
163.com
-
-
serverinfo
SMTP server at smtp.
163.com
(smtp.
163.gslb
.netease.com [
220.181
.
12.18
]), port
25
:
163.com
Anti
-
spam GT
for
Coremail System (
163com
[
20121016
])
Capabilities:
PIPELINING:
Support
for
command grouping
for
faster transmission
STARTTLS:
Support
for
TLS encryption via the STARTTLS command
AUTH:
Supported authentication methods:
PLAIN LOGIN
This server might advertise more
or
other capabilities when TLS
is
active.
|
從返回信息中咱們能夠看到,這個smtp是支持TLS的,驗證方式支持 PLAIN 和 LOGIN
五、測試郵件
命令行輸入:
1
|
echo
"test"
|mutt
-
s
"my_first_test"
aaa@
126.com
|
六、至此所有搞定,之後每次Pi開機的時候,就會「自報家門」,咱們不再愁找不到Pi啦!
七、常見問題:
錯誤1:
msmtp: account default not found: no configuration file available
msmtp有bug,必須手動指定對應的配置文件
更改/etc/Muttrc中set sendmail="/usr/bin/msmtp"爲set sendmail="/usr/bin/msmtp -C .msmtprc"
錯誤2:
msmtp: GNU SASL: Base 64 coding error in SASL library
遇到Base64 編碼錯誤
更改~/.msmtprc中auth login
爲 auth plain
錯誤3:
語句:echo "testtest"|mutt -F/home/spider/.muttrc -s "tttttttt" test@163.com
發郵件時提示:寄送訊息出如今錯誤,子程序已結束 127 (Exec error.).
沒法寄出信件
通常是設置文件出現問題了,
先使用msmtp進行發送測試
1
2
3
4
5
6
7
8
9
10
|
[iyunv@zabbix ~]
# /usr/local/msmtp/bin/msmtp -S
SMTP server at smtp.sohu.com ([
220.181
.
90.34
]), port
25
:
zw_71_37 ESMTP ready
Capabilities:
STARTTLS:
Support
for
TLS encryption via the STARTTLS command
AUTH:
Supported authentication methods:
PLAIN LOGIN
This server might advertise more
or
other capabilities when TLS
is
active.
|
發現沒有問題
再利用msmtp查看當前文件路徑
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
[iyunv@zabbix ~]
# /usr/local/msmtp/bin/msmtp -P
loaded system configuration
file
/
usr
/
local
/
msmtp
/
etc
/
msmtprc
ignoring user configuration
file
/
root
/
.msmtprc: No such
file
or
directory
falling back to default account
using account default
from
/
usr
/
local
/
msmtp
/
etc
/
msmtprc
host
=
smtp.sohu.com
port
=
25
timeout
=
off
protocol
=
smtp
domain
=
localhost
auth
=
LOGIN
user
=
zabbix2018
password
=
*
passwordeval
=
(
not
set
)
ntlmdomain
=
(
not
set
)
tls
=
off
tls_starttls
=
on
tls_trust_file
=
(
not
set
)
tls_crl_file
=
(
not
set
)
tls_fingerprint
=
(
not
set
)
tls_key_file
=
(
not
set
)
tls_cert_file
=
(
not
set
)
tls_certcheck
=
on
tls_force_sslv3
=
off
tls_min_dh_prime_bits
=
(
not
set
)
tls_priorities
=
(
not
set
)
auto_from
=
off
maildomain
=
(
not
set
)
from
=
zabbix2018@sohu.com
dsn_notify
=
(
not
set
)
dsn_return
=
(
not
set
)
keepbcc
=
off
logfile
=
/
var
/
log
/
zabbix
/
msmtp.log
syslog
=
(
not
set
)
aliases
=
(
not
set
)
reading recipients
from
the command line
|
從上面顯示配置文件也沒有什麼問題,可是查看.muttrc時同時注意到雙引號字符錯誤。修改鍵盤佈局。
錯誤4:
ding@ubuntu:~/Desktop/python$ sudo echo hello world | mutt -s "test mail" XXXXXXX@qq.com
msmtp: authentication failed (method PLAIN)
msmtp: server message: 550 User is locked
msmtp: could not send mail (account default from /home/ding/.msmtprc)
Error sending message, child exited 77 (Insufficient permission.).
Could not send the message.
沒有開啓SMTP服務,新註冊的用戶默認好像是關閉的,一些郵箱是默認關閉smtp服務的,須要手動開啓。
開啓SMTP服務後,將163郵箱服務器發給的受權密碼做爲/home/ding/.msmtprc 文件中的password=受權碼
參考:http://jingyan.baidu.com/article/3f16e003e327772591c1039f.html?st=2&os=0&bd_page_type=1&net_type=2
錯誤5:
str0101@str0101:/u1/str0101>mutt -s dfdf zgq@mail.tm <.tmp
Error sending message, child exited 69 (Service unavailable.).
Segmentation fault (core dumped)
郵件服務器限制,查看sent日誌文件。(我由QQ更換爲網易郵箱)
擴展:
使用標準pc104鍵盤
國內多使用標準104鍵盤,下面就開始樹莓派的設置。
一、sudo raspi-config
二、進入國際化配置選項
三、修改鍵盤佈局
四、選擇PC104標準鍵盤
五、選擇美國標準
六、選擇鍵盤默認佈局
七、compose key設置
八、ctrl+alt+backspace組合鍵,相似於windows的ctrl+alt+delete。
九、完成設置