Raspberry Pi 3 を購入しました。

  • 29
    いいね
  • 0
    コメント

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 を使うことをお勧めします :bow:

必要な物

  • 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 のロゴがプロセッサのコア数分だけ表示されたら正常に起動してます。一先ず安心ですね。
Boot

起動しない場合 (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 がホスト名です。

/etc/hosts (一部)
127.0.0.1 localhost ubuntu

ホスト名を変更する場合

ホスト名を変更する場合は上記の /etc/hosts に加えて /etc/hostname にも変更が必要です。

/etc/hostname
ubuntu

反映させるには再起動する必要があります。

sudo reboot

静的 IP アドレス

DHCP の場合、 SSH で繋ぐ際にディスプレイに接続して IP アドレスを確認する必要があり手間なので、静的 IP アドレスを割り当てます。

sudo -e /etc/network/interfaces.d/50-cloud-init.cfg

設定例

/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 に設定します。

/etc/ssh/sshd_config (一部)
# 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 アドレスを入れます。

/etc/udev/rules.d/70-persistent-net.rules
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 モジュールが搭載されているモデルなので、設定して使ってみましょう。

参考