Raspberry Pi を家の外から操作するのにドメインを取得しようと思ったけどとりあえず IP 直打ちでいいや、ということで定期的にグローバル IP アドレスをスマートフォンにメールで送ることにした。
Pidora には postfix がインストールされていないのでまずは postfix をインストール。
sudo yum install postfix
sendmail から postfix に切り替え。なんかこの変はうろ覚え。設定ファイルをコピーしたかどうかも忘れた。
sudo systemctl disable sendmail
sudo systemctl enable postfix
さて、グローバル IP アドレスをどうやって取得するかだけど、アクセスするとグローバル IP アドレスを返してくれる http://httpbin.org
を利用させてもらうことにした。wget
や curl
で /ip
ページにアクセスする。
wget -qO- http://httpbin.org/ip
こんな文字列が返ってくる(以下はダミーのグローバル IP アドレス)。
{ "origin": "111.111.111.111" }
cron 用のスクリプトを書く。crontab に直接書いてもいいけど今回は別ファイル。mail
コマンドの標準入力に本文として date
コマンドの出力結果を。グローバル IP アドレスを件名にする。httpbin.org からの文字列は awk
やらなんやらで適当に整形。グローバル IP アドレスを件名にするのは、グローバル IP アドレスが変わらないうちは件名も変わらないのでスレッド表示対応のメールクライアントの場合に表示量が抑えられるから。
#!/bin/sh date \ | mail -s "$( wget -qO- http://httpbin.org/ip \ | tr -d \" \ | awk '/origin/{ print $2 }' )" foo@example.com
crontab に以下のように書いておくことで1時間おきにグローバル IP アドレスが書かれたメールを送ってくれる。(1時間おきなら /etc/cron.hourly
に置いてもいいがテストなので弄りやすいところに設置)
0 * * * * foo /usr/local/bin/send_global_ip.sh
グローバル IP アドレスが変更になったときは不便だけど最近の固定回線ならあまり変わることはないので良しとする。
なお、差出人は $USER
、メールアドレスは $USER@$HOSTNAME
で送られてくる。ホスト名が hoge
なら foo@hoge.local
で送られてくるので返信不可である(家の中なら返信できるのか?)。
tr
と awk
部分を sed
で書くとこんな感じ?
wget -qO- http://httpbin.org/ip | sed -n '/origin/s/.*: "\([0-9]*\)"/\1/p'