概要

自宅のネットワーク環境がDHCPなので、たまにRaspberry Piを再起動するとIPアドレスが変わることがあります。

SSHで接続しようとして、あれっ?ってなって、ルーターの画面から割り振られたIPアドレスを 確認するのもめんどくさいので、

起動時に指定メールアドレスに割り振られたIPアドレスをメール通知させることにします。

たったこれだけのためにsendmailなりソフトをインストールするのもあれなので、

もっと簡単に起動時にシェルスクリプト的に実行する方向で検討しました。

スクリプトの作成

せっかくなのでJava8のjjsを使ってやってみることにしました。

Raspberry Piの初期インストール時に、Java8はインストール済みでもあるのでそれを使うことにします。

ということで、GistにIPアドレスを通知するためのスクリプトを作成しました。

メール送信のSMTPとしてgmailをMailライブラリとしてJavaMail、メール本文のテンプレートエンジンにHandlebarsを使ってます。

上記もろもろを使うのに参考にしたサイトは以下の通り。

ちなみに実行時にWEBより上記モジュールをダウンロードして使っているので、実行速度はちょっと遅いです。

スクリプトの使い方

こんな感じでJavascriptファイル内で、読み込んで使います。

細かい部分は以下のコメント部分を参照してください。


#!/usr/bin/jjs -scripting

/* メール送信の設定情報 */
var $conf = {
        title : "[メールのタイトル]",
        to : {
                name    : "[送信先メールアドレスの表示名]",
                address : "[送信先メールアドレス]",
        },
        from : {
                name    : "[送信元メールアドレスの表示名]",
                address : "[送信元メールアドレス]",
        },
        auth : {
                user     : "[gmailアカウント名(@以前)]",
                password : "[gmailパスワード]",
        },
};

/*
 * メール本文のテンプレート(Handlebars形式)
 * [this]コンテキストには端末のIPアドレス(ipv4のみ, loopback除く)が配列形式で参照できる
 *
 */
var $template = <<EOF

ipaddress :
    {{#each this}}
    {{this}}
    {{/each}}

EOF

/*
 * IPアドレス通知ようのスクリプトを読み込む
 * 読み込むとグローバル領域にIPアドレスの通知用の関数が定義される($ipaddr_push関数)
 */
load("https://gist.githubusercontent.com/fmnb0516/888d6714818626e4ba63/raw/17fdbb626e9bb248a4bb0f0d2f02360b2e70ea18/ipaddr_push.js");

/* IPアドレスの通知処理の実行 */
$ipaddr_push();

とりあえず上記をopt配下に作成し、実行権限を付与します。

#> sudo vi /opt/ipaddress_push.sh

~ 上記の内容 ~

#> sudo chmod +x /opt/ipaddress_push.sh

実際にどうするかどうかをテストします。

#> /opt/ipaddress_push.sh

メールが送信され、IPアドレスが記載されていれば動作チェックOK

起動時に実行されるようにする

起動時にスクリプトを実行する方法としていくつか方法がありますが、 一番簡単そうだった[rc.local]にスクリプトを記述する方式にします。

#> sudo vi /etc/rc.local

デフォルトの[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

exit 0

ということで、if文とexitの間に作成したスクリプトの呼び出しを記述します。


_IP=$(hostname -I) || true
if [ "$_IP" ]; then
  printf "My IP address is %s\n" "$_IP"
fi

# ここに作成したスクリプトを記述
/opt/ipaddress_push.sh

exit 0

で、Raspberry Piを再起動してメールが送信されればOK

#> sudo reboot

最後に

ということで、これでIPアドレスが変わることを恐れず再起動が出来るようになりました。