Bluetooth, WLAN モジュール内蔵の Raspberry Pi 3 Model B.
技適取得済みで、日本でも使用できます。安定供給されるようになり、 Amazon で5000円台で入手できる ほど値下がりしたので、ポチッとしてしまいました。
因みに、安価な element14 製ではなく、 RS Components 製です。
開封時の感想として、特にイギリスの香りはしませんでした。そもそもイギリスへ行ったことがないので確認しようがありません。
さて、この投稿では Ubuntu 16.04 LTS の Raspberry Pi 3 用インストール済みイメージを microSD カードに書き込んでセットアップしていきます。
追記
Ubuntu 16.04 LTS の非公式イメージを使っていた所、突然死することが何度もあり不安定だったので、無難に Raspbian を使うことをお勧めします
必要な物
- microSD カード (4GB 以上)
- HDMI 接続可能なモニタ
- USB 接続のキーボード
- 5V 2.5A 以上供給可能な電源 (microUSB)
- Ethernet ケーブル
※ HDMI 接続可能なモニタが無い場合は DVI-D or DVI-I 対応モニタ + HDMI DVI-D 変換アダプタで代用する事ができます。Raspberry Pi 3 はデジタル映像音声出力にしか対応していないため、 HDMI DVI-A 変換や HDMI VGA 変換には対応していないので注意が必要です。
OS イメージの書き込み
Mac を用いたイメージの書き込みです。
Ubuntu の Raspberry Pi 用 image: https://wiki.ubuntu.com/ARM/RaspberryPi
microSD カードの特定とアンマウント
diskutil list
を microSD カードの挿入前と挿入後で実行すると、どれが microSD カードを示すデバイス名なのか容易に判明します。
事故防止の為、外付け記憶媒体は microSD カード以外は外して作業しましょう。
※ /dev/null
の箇所は /dev/disk4
等、書き込み先のデバイスを指定します。
diskutil list
diskutil umountDisk /dev/null
イメージの取得と展開 & 書き込み
書き込み先の /dev/null
の箇所は、デバイスが /dev/disk4
の場合、 /dev/rdisk4
のように disk
の前に r
を付けるとバッファを介さない分速く書き込まれます。
wget http://www.finnie.org/software/raspberrypi/ubuntu-rpi3/ubuntu-16.04-preinstalled-server-armhf+raspi3.img.xz
xzcat ubuntu-16.04-preinstalled-server-armhf+raspi3.img.xz | sudo dd of=/dev/null
進捗が知りたい場合は Ctrl+T
を入力すると進捗状況が表示されます。
eject
CD ドライブのように物理的に eject されることはありませんが、 microSD カードの為にも、お行儀良く次のコマンドを叩きましょう
diskutil eject /dev/null
microSD カードを Raspberry Pi 3 に挿入して、電源投入(micro USB)。
ここでモニタが必要になります。すぐに SSH で繋げる環境にはならないので、画面に表示される映像を想像して入力するのは人間には無理です。諦めてモニタを接続しましょう。
起動
ブィィン... なんて音はしませんが、起動時に一瞬こんな画面になります。
僕の環境だけですかね…?多分問題無いので気にしないようにしてます。
Raspberry Pi のロゴがプロセッサのコア数分だけ表示されたら正常に起動してます。一先ず安心ですね。
起動しない場合 (ACT ランプが点灯しない場合) は、 microSD カードの接触不良か microSD カードを焼くのに失敗したか、焼いたイメージが壊れている可能性を疑ってください。
Ethernet ケーブルを接続して SSH でログインするまで
DHCP
Ethernet ケーブルを接続すれば DHCP で自動的に IP アドレスが振られます。
しかし、 LAN ケーブルを違うネットワークに差し替えると、自動で IP アドレスが切り替わらない事があります。
その際は、手動で DHCP リースを開放して、再度 DHCP クライアントで IP アドレスを取得する必要があります。
sudo dhclient -r eth0
sudo dhclient eth0
SSH
いきなり SSH しようとしても、切断されてしまいます。
$ ssh ubuntu@192.168.xxx.xxx
Connection closed by 192.168.xxx.xxx port 22
サービスは起動していますがエラーログが出ていました
sudo systemctl status ssh
エラーログの一部
error: key_load_public: invalid format
error: Could not load host key: /etc/ssh_host_rsa_key
error: key_load_public: invalid format
error: Could not load host key: /etc/ssh_host_dsa_key
error: key_load_public: invalid format
error: Could not load host key: /etc/ssh_host_ecdsa_key
鍵の中身を確認してみると、空っぽ。
インストール済みのイメージを配布している都合上、鍵を含めてしまうとセキュリティ上問題があるので、敢えて空のファイルを配置しているのだと思います。
無ければ生成しましょう
sudo ssh-keygen -f /etc/ssh/ssh_host_rsa_key -N '' -t rsa
sudo ssh-keygen -f /etc/ssh/ssh_host_dsa_key -N '' -t dsa
sudo ssh-keygen -f /etc/ssh/ssh_host_ecdsa_key -N '' -t ecdsa
sudo ssh-keygen -f /etc/ssh/ssh_host_ed25519_key -N '' -t ed25519
sudo 実行時のエラー
特に何も設定をしていないと sudo
を使う際に次のエラーが出ます。
sudo: unable to resolve host ubuntu
/etc/hosts
に hostname が設定されていないことが原因なので、 hostname
コマンドでホスト名を確認して /etc/hosts
に追加します。
localhost の次に hostname
を追加。この場合は ubuntu
がホスト名です。
127.0.0.1 localhost ubuntu
ホスト名を変更する場合
ホスト名を変更する場合は上記の /etc/hosts
に加えて /etc/hostname
にも変更が必要です。
ubuntu
反映させるには再起動する必要があります。
sudo reboot
静的 IP アドレス
DHCP の場合、 SSH で繋ぐ際にディスプレイに接続して IP アドレスを確認する必要があり手間なので、静的 IP アドレスを割り当てます。
sudo -e /etc/network/interfaces.d/50-cloud-init.cfg
設定例
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.0.180
network 192.168.0.0
netmask 255.255.255.0
broadcast 192.168.0.255
gateway 192.168.0.1
dns-nameservers 192.168.0.1
networking.service を再起動します。
sudo systemctl restart networking
ubuntu@ubuntu:~$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: sit0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1
link/sit 0.0.0.0 brd 0.0.0.0
3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether b8:27:eb:**:**:** brd ff:ff:ff:ff:ff:ff
inet 192.168.0.30/24 brd 192.168.0.255 scope global eth0
valid_lft forever preferred_lft forever
inet 192.168.0.180/24 brd 192.168.0.255 scope global secondary eth0
valid_lft forever preferred_lft forever
inet6 ****::****:****:****:****/64 scope link tentative
valid_lft forever preferred_lft forever
4: wlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether b8:27:eb:**:**:** brd ff:ff:ff:ff:ff:ff
secondary
として設定されました。
公開鍵認証
****
の所に自分の GitHub ユーザ名を入れると便利です。
curl https://github.com/****.keys >> ~/.ssh/authorized_keys
パスワードを求められず、公開鍵認証が出来ている事が確認できたら、パスワード認証を無効化します。
sudo -e /etc/ssh/sshd_config
no に設定します。
# PasswordAuthentication yes
PasswordAuthentication no
ここで何もエラーが表示されなければ OK.
sudo sshd -t
サービス再起動
sudo systemctl restart ssh
⚠注意: interface name が変わる問題
apt upgrade チョット待った!!
この時点で sudo apt upgrade
するとインターフェース名が eth0
から enx
+ MAC Address の形式に勝手に変わります。
折角、静的 IP アドレスを eth0 に対して設定したにも関わらず、再設定することになるので手間です。
そこで、事前にインターフェース名が変わらないように設定しておくことをお勧めします。
70-persistent-net.rules
の新規作成
sudo -e /etc/udev/rules.d/70-persistent-net.rules
b8:27:eb:**:**:**
の箇所には MAC アドレスを入れます。
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="b8:27:eb:**:**:**", ATTR{dev_id}=="0x0", ATTR{type}=="1", NAME="eth0"
再起動すると反映されます
sudo reboot
package の upgrade
ここまで上手く行けば、きっと大丈夫です。
sudo apt update
sudo apt -y upgrade
タイムゾーンの設定
デフォルトでは UTC に設定されています。
チューナー鯖にする場合など、タイムゾーンが現地に合っていないと困る場合は設定を変更する必要があります。
http://qiita.com/ww24/items/0adc36c013511524da80
現在の時刻と設定確認
$ date
Sun Aug 28 12:37:11 UTC 2016
$ timedatectl
Local time: Sun 2016-08-28 12:37:16 UTC
Universal time: Sun 2016-08-28 12:37:16 UTC
RTC time: n/a
Time zone: UTC (UTC, +0000)
Network time on: yes
NTP synchronized: yes
RTC in local TZ: no
タイムゾーンの設定と時刻の確認
$ sudo timedatectl set-timezone Asia/Tokyo
$ timedatectl
Local time: Sun 2016-08-28 21:38:18 JST
Universal time: Sun 2016-08-28 12:38:18 UTC
RTC time: n/a
Time zone: Asia/Tokyo (JST, +0900)
Network time on: yes
NTP synchronized: yes
RTC in local TZ: no
$ date
Sun Aug 28 21:38:20 JST 2016
次回予告: Bluetooth と WLAN の設定
Bluetooth と WLAN モジュールが搭載されているモデルなので、設定して使ってみましょう。