IoT Gatewayについて調査をしていくつかのプロダクトを試しました。Eclipse Kuraが今のところ実績もあり使いやすそうです。Eclipse IoTプロジェクトの一つで、Raspberry PiやBeagle Bone Black上でIoT Gatewayとして動作するOSGiのオープンソースフレームワークです。Eclipse Kuraを拡張したESFとハードウェアのReliaGATEシリーズもEurotechから提供されています。プロダクション環境でサポートが必要な場合はライセンスを購入すると安心できそうです。
Eclipse IoTプロジェクトは他にもEclipse Kapua、Eclipse Hono、Eclipse Vorto、Eclipse Leshanといったクラウドのバックエンド側プロジェクトもあります。Red Hat、Eurotech、Bosh、GE Digitalといった企業が乱立気味のIoTプラットフォームの相互接続性と、デバイスからのデータをエンタープライズのアプリケーションに統合することを目標にオープンソースで開発を進めています。バックエンドサービスはCloud FoundryやOpanShiftといった最近のDockerベースのクラウドプラットフォーム上で動作することにも注目です。
まずは身近なところから、Raspberry Pi 2にEclipse Kuraをインストールすることから始めます。
Raspbian Jessie Lite
Raspbianのセットアップ方法はオフィシャルをはじめにたくさん記事がありますが、2016-11-25のリリースからSSHがデフォルトで無効になり注意が必要です。SDカードにイメージを焼いた状態のままではSSHで接続することができません。
2016-11-25:
- SSH disabled by default; can be enabled by creating a file with name "ssh" in boot partition
ローカルの作業用PCとRaspberry Pi 2を有線LANで接続してヘッドレスインストールする例を簡単にまとめておきます。そのほかには無線LAN USBアダプターなどが必要です。
SDカードにイメージを焼く
SDカードをUSBアダプタに挿して作業用PCに接続します。Fat32でフォーマットされたSDカードのデバイス名を確認してアンマウントします。この例では/dev/disk2です。
$ diskutil list
$ diskutil unmountDisk /dev/disk2
Raspbian Jessie Liteをダウンロードページから取得してイメージを解凍します。
$ cd ~/Downloads
$ wget https://downloads.raspberrypi.org/raspbian/images/raspbian-2017-01-10/2017-01-11-raspbian-jessie.zip
$ unzip 2017-01-11-raspbian-jessie.zip
イメージをSDカードに焼きます。確認したデバイス名にr
をつけて/dev/rdisk2
を指定します。
$ sudo dd bs=1m if=2017-01-11-raspbian-jessie-lite.img of=/dev/rdisk2
Windows 10でRasbianイメージのSDカードを作る場合はWin32 Disk Imagerが便利です。
SSHを有効にする
SSHはデフォルトで無効になっています。macOSのボリュームにマウントした状態でsshファイルを作り有効にします。
$ touch /Volumes/boot/ssh
Windows 10にはtouch
に相当するコマンドがないため、SDカードのDドライブに移動してCOPY
コマンドで代用します。エクスプローラーからDドライブに直接ファイルを作成する場合は.txt
など拡張子をつけないように注意します。
> d:
> copy /y nul ssh
> exit
SDカードをアンマウントして取り出します。
$ diskutil unmountDisk /dev/disk2
SDカードをRaspberry Pi 2にさして電源を入れます。macOSとLANケーブルで直接つなぎます。最新のRaspbianはデフォルトでmDNSが有効になりmacOSやWindows10からraspberrypi.local
のホスト名で簡単に接続できます。
$ ssh pi@raspberrypi.local
ユーザー名はpi
、パスワードはraspbian
が設定されています。SSHのデフォルトが無効なのは変更せずにこのまま使う人が多いためらしく、忘れずにパスワードを変更します。
$ passwd
公開鍵を~/.ssh/authorized_keys
に追加しSSH接続で利用します。
$ mkdir ~/.ssh
$ chmod 700 ~/.ssh
$ cat <<EOF > ~/.ssh/authorized_keys
ssh-rsa AAAAB...
EOF
$ chmod 600 ~/.ssh/authorized_keys
$ exit
初期設定
raspi-configから初期設定を行います。
$ sudo raspi-config
2016-05-10にリリースされたJessieイメージから1 Expand Filesystem
は初回ブート時に自動的に実行されるようになりました。
When flashing a new Raspbian image, the file system will automatically be expanded to use all the space on the card when it is first booted.
localeとtimezoneはユーザー環境にあわせて設定します。
- 4 Internationalisation Options
- I1 Change Locale -> en_GB.UTF-8のまま
- I2 Change Timezone -> Asia -> Tokyo
localeをjp_JP.UTF-8
にすると文字化けする場合があるのでen_GB.UTF-8
のまま使います。一度rebootします。
Raspberry Piに日本語キーボードを使う場合はレイアウトを変更します。SSH接続では不要ですが、Windows 10とRaspberry Piを有線LANで接続するとmDNSのraspberrypi.local
でうまくSSH接続できないことがあります。キーボードとディスプレイをつないでいる場合に設定が必要になります。
- 4 Localisation Options
- I3 Change Keyboard Layout -> Generic 105-key (Intl) PC -> Japanese -> The default for the keyboard layout -> No compose key
$ sudo reboot
無線LAN
Raspberry Pi 2には無線LANが内蔵されていません。USBの無線LANアダプタを用意しておきます。wlan0で利用する無線LANのアクセスポイントをスキャンしてESSIDを確認します。
$ sudo iwlist wlan0 scan | grep ESSID
wpa_passphraseコマンドにESSIDとパスワードを渡し、出力をwpa_supplicant.conf
に追記します。(例の[
と]
は不要です。)
$ sudo sh -c 'wpa_passphrase [ESSID] [パスワード] >> /etc/wpa_supplicant/wpa_supplicant.conf'
アクセスポイントを複数指定する場合はpriority
で接続する優先度を指定します。数字が大きいほど優先されます。
country=GB
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid="xxx"
#psk="xxx"
psk=xxx
priority=0
}
network={
ssid="xxx"
#psk="xxx"
psk=xxx
priority=1
}
wlan0のインタフェースにDHCPと先ほどのwpa_supplicant.confを設定します。
auto lo
iface lo inet loopback
iface eth0 inet manual
allow-hotplug wlan0
iface wlan0 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
wlan0を再起動してDHCPでIPアドレスを取得します。
$ sudo ifdown wlan0
$ sudo ifup wlan0
ip
コマンドなどを使いwlan0が正常に起動しているか確認します。
$ sudo iwconfig wlan0
$ ip addr show wlan0
$ ping -c 1 www.yahoo.co.jp
パッケージの更新
ネットワークがつながるようになったので以降の作業を進める前にインストールされているパッケージを更新します。
apt-get ミラーサイト
apt-getのデフォルトはmirrordirector.raspbian.org
のリポジトリに接続します。
deb http://mirrordirector.raspbian.org/raspbian/ jessie main contrib non-free rpi
# Uncomment line below then 'apt-get update' to enable 'apt-get source'
#deb-src http://archive.raspbian.org/raspbian/ jessie main contrib non-free rpi
なるべく近くのミラーサイトをRaspbianMirrorsから選びます。今回はJAISTにしました。
$ sudo sed -i".bak" -e "s/mirrordirector.raspbian.org/ftp.jaist.ac.jp/g" /etc/apt/sources.list
パッケージ更新
パッケージリストを更新してパッケージを最新の状態にします。
$ sudo apt-get update && sudo apt-get dist-upgrade -y
nanoエディタが使いづらい場合はvimをインストールしてファイルを編集します。
$ sudo apt-get update && sudo apt-get install vim -y
Eclipse Kuraのインストール
Raspbianの初期設定が終わったところでようやくEclipse Kuraのインストールを始めていきます。
OpenJDK 8
Eclipse Kuraの動作にはJDK 7以上が必要です。最新のOpen JDK 8を使います。
$ sudo apt-get update && sudo apt-get install -y openjdk-8-jre-headless
$ java -version
openjdk version "1.8.0_40-internal"
OpenJDK Runtime Environment (build 1.8.0_40-internal-b04)
OpenJDK Zero VM (build 25.40-b08, interpreted mode)
Eclipse Kura 2.0.2
Raspberry Pi Quick Startの手順に従いKuraをインストールします。
dhcpcd5 パッケージはKuraと互換性がないため削除します。
$ sudo apt-get purge -y dhcpcd5
NetworkManagerもKuraと競合するためインストールされていないことを確認します。
$ sudo apt-get remove -y network-manager
パッケージの依存関係を解決してKuraをインストールするためにGDebiをインストールします。
$ sudo apt-get update && sudo apt-get install -y gdebi-core
Eclipse Kura 2.0.2をダウンロードして使います。
$ wget http://eclipse.stu.edu.tw/kura/releases/2.0.2/kura_2.0.2_raspberry-pi-2_installer.deb
$ sudo gdebi kura_2.0.2_raspberry-pi-2_installer.deb
rebootするとEclipse Kuraが起動します。
$ sudo reboot
Eclipse Kuraの起動には時間がかかるためSSH接続したらログを
$ sudo tail /var/log/kura.log
Eclipse Kura WebUI
Raspberry PiにWebブラウザから以下のURLに接続するとWebコンソールが表示されます。
Eclipse Kura WebUI
http://raspberrypi.local/kura
Basic認証のユーザー名とパスワードはadminです。
- username: admin
- password: admin
Cloud ServiceやNetwork設定はこれからですが、とりあえずEclipse Kuraのインストールは終了です。