イントロダクション
プログラミングやIoT、プロトタイピングなどをワークショップで学ぶためのツールとして「Raspberry Pi」を使用することが増えてきました。Raspberry Piは、クレジットカードサイズのコンピュータボードで、安価で入手できるパワフルな環境として世界中に普及しており、豊富な情報を入手できます。様々な制約があるワークショップにおいて、円滑に進めるための事前準備について簡単にまとめてみました。もし、もっと良い方法をご存じでしたら、コメント等で教えていただけると助かります。
想定する参加者
- MacOSまたはWindowsを普通に使うことはできる
- Raspberry Piは初めて使う
- PCの代わりではなくサーバまたは特定用途の専用機としてRaspberry Piを使いたい
- 総数は数名〜十数名程度、チームあたり1〜2名で数チームを編成
想定する環境
- Wi-Fiでインターネットに接続できる
- PCおよびRaspberry Piに必要な電源を確保できる
- 各自の作業に必要十分なスペースが確保されている
- プロジェクタまたは大型ディスプレイが利用できる
想定する制約事項
- スペースまたは予算の制限によりRaspberry Piごとにディスプレイやキーボード、マウスを用意することはできない
- Wi-Fiルータの設定にアクセスしたり、ワークショップのためだけに設定を変更したりすることはできない
- 講師以外のアシスタントはいない、もしくは1名程度でチーム毎に専属のアシスタントがサポートすることはできない
事前準備
ハードウェア
- 各チーム毎
- Raspberry Pi 2 Model Bと無線LANアダプタ(例:PLANEX COMMUNICATIONSのGW-USNANO2A)、またはRaspberry Pi 3 Model B
- マイクロSDカード(8GB以上)
- USBケーブル(Aオス–マイクロBオス)
- USB電源アダプタ
- 共通
- コンパクトなHDMI接続のディスプレイ(例:センチュリーのLCD-8000VH2B)
- コンパクトなUSB接続のキーボード(例:GMYLEのNPL710007)
MACアドレスの確認
無線LANアダプタの場合
次の図はGW-USNANO2Aの例で、本体に小さな字で刻印されています。Raspberry Pi本体に接続してしまうと読み取れなくなるので、最後の4桁(この例では5197)をメモしておきます。
Raspberry Pi 3 Model Bの場合
Raspberry Pi 3 Model Bのオンボード無線LANチップのMACアドレスに関しては、残念ながらシール等では記載されていないようです。面倒ですが、事前に有線LANで接続するなどしてMACアドレスを確認し、そのアドレスをシール等で記載しておくとよいでしょう。
以下はRaspberry Pi 3でのMACアドレスを確認した際の例です。この中でHWaddr
として表示されるのがWi-FiモデムのMACアドレスで、上位6バイト(b8:27:eb)はRaspberry Pi FoundationのベンダーIDなので全てのRaspberry Pi 3で同じです。下位6バイトがデバイス毎に異なるため、この6バイト(以下の例では12:34:56)をメモしておけばよいでしょう。
$ ifconfig wlan0
wlan0 Link encap:Ethernet HWaddr b8:27:eb:12:34:56
inet addr:192.168.1.25 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::321e:d0af:f60b:b201/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:10548 errors:0 dropped:1532 overruns:0 frame:0
TX packets:2102 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:5898932 (5.6 MiB) TX bytes:280956 (274.3 KiB)
PC側での準備
Windows 10よりも前のWindowsの場合
後の手順で紹介する「ホスト名.local」でのアクセスに必要となるため、Windows 10よりも前のWindows(例:Windows 8)を使用している場合にはBonjour Print ServicesもしくはiTunes for Windowsをインストールします。IPアドレスで指定する場合にはこれらのアプリケーションのインストールは不要です。
Raspberry Piの設定
基本設定
- RASPBIAN JESSIE (May 2016)を公式サイトのダウンロードページからダウンロードして公式サイトで紹介されている手順に従ってマイクロSDカードにコピー
- MacOSでGUIから操作したい場合にはApplePi Bakerが便利
-
/boot/
にwpa_supplicant.conf
という名前のファイルを作成してアクセスポイントの情報を追記1 - マイクロSDカードをイジェクトし、Raspberry Piに挿入して起動し1分間程度待つ
- PC上で
arp -a
コマンドを実行して同じWi-Fiルータに接続しているデバイスのMACアドレスとIPアドレスのリストを取得する - 取得したリストと事前に確認したMACアドレスを照合し、それぞれのRaspberry Piに割り振られたIPアドレスを取得する
- PC上でターミナルを起動し、
ssh pi@192.168.1.23
のようにしてSSHでそれぞれのアドレスに接続する -
sudo raspi-config
でRaspberry Pi Software Configuration Toolを起動する -
5 Internationalisation Options
>I2 Change Timezone
で現在地を選択(例:Asia→Tokyo)する -
9 Advanced Options
>A2 Hostname
でホスト名をデフォルトの「raspberrypi」から変更する(例:team-1-pi、使用できる文字はaからzまでのASCII文字と数字、ハイフンのみ) - escキーでRaspberry Pi Software Configuration Toolを終了する
-
sudo apt-get update
およびsudo apt-get upgrade
を実行する2 -
sudo reboot
で再起動する
以下はWPA2パーソナル(WPA2-PSK)環境でのwpa_supplicant.confの例です。
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=JP
network={
ssid="YOUR_SSID"
psk="YOUR_PASS"
key_mgmt=WPA-PSK
}
一時的にディスプレイとキーボードを接続し、公式サイトの説明に従ってGUIで設定した後、/etc/wpa_supplicant/wpa_supplicant.confとして生成されたファイルを利用すると簡単でしょう。なお、このままではパスフレーズが平文で記載されてしまっているため、以下のようにして生成した文字列をpskとして指定した方が良いでしょう(ssidには二重引用符が必要なのにpskには不要なので注意)。
sudo wpa_passphrase <SSID> <PASSPHRASE>
以下はarp -a
でPCが接続しているWi-Fiルータに接続中のデバイスのリストを取得した際の例です。この例では、192.168.1.23がRaspberry Piです。
$ arp -a
...
? (192.168.1.23) at 0:**:**:**:51:97 on en0 ifscope [ethernet]
...
$ ssh pi@192.168.1.23
pi@192.168.1.23's password:パスワード(初期設定はraspberry)
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Sat Apr 30 10:44:57 2016 from 2001:a451:1:4000:8638:35ff:fe4b:845a
図:ホスト名の設定画面例。ここではASCII文字と数字、ハイフン以外も入力できてしまうので注意。
$ sudo apt-get update
$ sudo apt-get upgrade
Sambaのセットアップ
SambaはWindowsネットワークの実装の1つです。Raspberry PiにSambaをセットアップしてファイルサーバにすることで、MacOSやWindowsからアクセスしてファイルをやりとりしたり、Raspberry Pi上のファイルをPC上のテキストエディタで編集したりできるようになります。
-
sudo apt-get -y install samba
でSambaをインストールする -
sudo nano /etc/samba/smb.conf
で設定ファイルを開く - Global Settingsの[global]に
unix charset = UTF-8
とdos charset = CP932
の2行を追加する - Share Definitionsの
read only = yes
をread only = no
に、create mask = 0700
をcreate mask = 0664
に、directory mask = 0700
をdirectory mask = 0775
に変更する - Ctrl-OとCtrl-Xで設定ファイルを保存する
-
sudo smbpasswd -a pi
で新規ユーザを追加する -
sudo service smbd restart
でSambaを再起動する
#======================= Global Settings =======================
[global]
unix charset = UTF-8
dos charset = CP932
#======================= Share Definitions =======================
[homes]
comment = Home Directories
browseable = no
# By default, the home directories are exported read-only. Change the
# next parameter to 'no' if you want to be able to write to them.
read only = no
# File creation mask is set to 0700 for security reasons. If you want to
# create files with group=rw permissions, set next parameter to 0775.
create mask = 0664
# Directory creation mask is set to 0700 for security reasons. If you want to
# create dirs. with group=rw permissions, set next parameter to 0775.
directory mask = 0775
$ sudo smbpasswd -a pi
New SMB password:
Retype new SMB password:
Netatalk
もし使用するのがmacOSだけであれば、sambaよりもNetatalkの方が簡単です。以下のようにしてインストールし、Finderの[移動]→[サーバへ接続…]で表示されるダイアログにafp://kotobukipi.local/
のように入力し、Raspberry Piのユーザ名とパスワードを入力することでFinderからアクセスできます。
$ sudo apt-get install netatalk
その他
環境の複製
ワークショップ全体の時間によっては、上記のような設定を全て行うことが難しいかもしれません。その場合には、1台のRaspberry Piであらかじめ必要とされる環境構築を済ませ、その環境をSDカードにコピーすることで時間を大幅に短縮できます。手順は以下の通りです。
- マイクロSDカードを挿入したUSBカードリーダーをUSBポートに接続する
- メニューのAccessoriesからSD Card Copierを起動する
- コピー元(Copy From Device)に「Internal SD Card」を、コピー先(Copy To Device)にUSBカードリーダー(例:Generic- USB3.0 CRW -SD)を選択する
- 「Start」ボタンを押して実行する
なお、所要時間はそれなりに(8GBのSDに対して実測した際で約15分)かかるため、多数のSDカードを準備する場合にはそれなりの準備時間を想定しておく必要があるでしょう。
トラブルシューティング
SSHでログインしようとした際に警告が表示されてログインできない
このエラーは、OSをインストールし直した場合など、以前に接続したことがあるホストに接続した際、そのホストがクラックされたのではないか、ということで警告が表示されることがあります。この場合には、適当なテキストエディタで/Users/username/.ssh/known_hosts
を開き、そのファイルから該当するホスト(この例では192.168.1.23)の情報が含まれた行を削除するとログインできるようになります。
$ ssh pi@192.168.1.23
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:********************************/**********.
Please contact your system administrator.
Add correct host key in /Users/username/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /Users/username/.ssh/known_hosts:15
ECDSA host key for 192.168.1.23 has changed and you have requested strict checking.
Host key verification failed.
ホスト名.localでの接続が不安定
sudo nano /etc/avahi/avahi-daemon.conf
でavahi-daemonの設定ファイルを開き、以下のようにuse-iff-runningをyesに設定すると解決する場合があります。
[server]
...
use-ipv4=yes
use-ipv6=yes
...
use-iff-running=yes
SSHでの反応が時々鈍くなる
この例で使用しているGW-USNANO2Aなど、一部のUSB無線LANアダプタに対してはデフォルトで省電力モードが有効になっているため、一定時間操作しなかった場合などに無線LANアダプタがスリープし、そこからの復帰に少し時間がかかる場合があります。以下のようにして設定ファイルを作成し、設定を記入することにより、次回起動時からスリープしないようになります。
$ sudo nano /etc/modprobe.d/8192cu.conf
# Disable power management
options 8192cu rtw_power_mgnt=0 rtw_enusbss=0 rtw_ips_mode=1
リファレンス
- THE LATEST UPDATE TO RASPBIAN
- ツール・ラボ>電子工作入門>RaspberryPi電子工作入門>第14回Raspberry Piのファイルサーバ設定をする
- Raspberry PiでIoTなIT:新しく認識されたインターフェースをavahiに自動的に認識させる
-
RASPBIAN JESSIE (May 2016)から追加されたもので、
/boot/wpa_supplicant.conf
として作成したファイルは、初回起動時に/etc/wpa_supplicant/
に移動され、無線LANが有効になると共に指定したアクセスポイントに自動的に接続される。もしもこれで上手くいかない場合には、一時的にディスプレイとキーボードを接続し、公式サイトの説明に従ってGUIで設定するのがいちばん早いかもしれない。 ↩ -
ここで
sudo rpi-update
してファームウェアを最新のものに更新することを推奨している記事が多数ある。しかしながら、最新のファームウェアに対応していないアプリケーションもあるため、特に理由がない限りは闇雲に最新のものに更新しない方がいいかもしれない。 ↩