Raspberry Pi2 -電源と LAN だけ繋いで Raspbian Jessie Lite に ssh 接続するまで-


[Raspberry Pi 2 Model B](https://www.raspberrypi.org/products/raspberry-pi-2-model-b/) であれこれしてみるための準備として、掲題の通りに余計なものは接続せずに環境構築する手順を記載する。

Raspberry Pi2 ってなに？
---
簡単に言うと、クレジットカードサイズの ARM 32bit コンピュータ。
一般的な USB, HDMI, LAN に加えて、GPIO という 40 本のピンがあり、これに様々なセンサーや機器を接続して制御することができる。

[Raspberry Pi - 公式サイト](http://www.raspberrypi.org/)
[Raspberry Pi - Wikipedia](https://ja.wikipedia.org/wiki/Raspberry_Pi)

PC や簡易的なサーバとしての用途はもちろん、○○センサー、カメラ、ラジコン等々…、IoT の流行もあって各種 IT 系雑誌やウェブで色々と紹介されている。

元々は超小型サーバが欲しかったのだが、その用途以上に遊べそうだったので Raspberry Pi に入門してみた次第だ。


作業環境
---
作業環境は主に Windows 7 だが、部分的に Mac を利用した。
全て Windows だけで作業することもできる。

後述するが、OS は Raspbian Jessie Lite を採用して CUI ベースで作業を行うので、Raspberry Pi2 用のディスプレイや HDMI ケーブル、キーボード、マウスなどは要らない。
但し、DHCP の効くネットワークに Raspberry Pi2 を有線 LAN 接続する。


必要な機器類
---
今回の作業で実際に使った機器類は以下の通り。
本体以外はお好みでどうぞ。

### Raspberry Pi2 本体 + ケース
<a rel="nofollow" href="http://www.amazon.co.jp/gp/product/B00T356SFO/ref=as_li_tf_il?ie=UTF8&camp=247&creative=1211&creativeASIN=B00T356SFO&linkCode=as2&tag=lanonjecte-22">
![51qidu4AIBL_011716_044032_AM.jpg](https://qiita-image-store.s3.amazonaws.com/0/48194/8660461e-d0f4-298e-2010-e77fd78ddc44.jpeg)
Raspberry Pi 2 Model B (1)</a>
<a rel="nofollow" href="http://www.amazon.co.jp/gp/product/B011BWXGN8/ref=as_li_tf_il?ie=UTF8&camp=247&creative=1211&creativeASIN=B011BWXGN8&linkCode=as2&tag=lanonjecte-22">
![71Jv18nhhHL._SL1165__011716_044110_AM.jpg](https://qiita-image-store.s3.amazonaws.com/0/48194/f6020c50-3d0f-bc9a-892c-a6360ee143f6.jpeg)
Eleduino アクリル ケース ブラック+MINI ファンパッケージ</a>
ケースは無くても動くし、いろいろあるのでお好み次第。
上記ケースは GPIO から給電してファンを回せるけど、見た目重視なので  Raspberry Pi2 本体へのアクセスはちょっと悪いかも。

### 持っていれば買わなくていいもの
<a rel="nofollow" href="http://www.amazon.co.jp/gp/product/B008UR8TS0/ref=as_li_tf_il?ie=UTF8&camp=247&creative=1211&creativeASIN=B008UR8TS0&linkCode=as2&tag=lanonjecte-22">
![71eBUHN5IyL._SL1500__011716_044159_AM.jpg](https://qiita-image-store.s3.amazonaws.com/0/48194/562c1c74-b4f7-13b6-b501-47d368ac86e7.jpeg)
Transcend microSDHCカード 32GB Class10</a>
Raspberry Pi2 は SHD-I に対応していないので Class10 をチョイス。
容量は最低 4GB あれば動かせるものの、大きめの容量にしておく方がいい。

<a rel="nofollow" href="http://www.amazon.co.jp/gp/product/B00PTGHZRQ/ref=as_li_tf_il?ie=UTF8&camp=247&creative=1211&creativeASIN=B00PTGHZRQ&linkCode=as2&tag=lanonjecte-22">
![41Ob5bGTlBL._SL1000__011716_044303_AM.jpg](https://qiita-image-store.s3.amazonaws.com/0/48194/6d5f520f-83d0-7e59-313d-baff87988d30.jpeg)
Anker® 10W USB急速充電器 ACアダプタ 出力2A 折りたたみ式</a>
公式サイトにも必要電力の記載がなかったんだけど、よくあるスマフォやタブレット充電用の 5V 2A の AC アダプタで大丈夫。
> [Raspberry Pi 2 Model Bの消費電力調査: 学習ノート](http://blog.hahasoha.net/article/163051972.html)

#### その他
以下、自宅にあるものを使い回したので割愛。

* LAN ケーブル
* マイクロ USB 2.0 (A-microB) ケーブル
* HDMI ケーブル（**今回は使わない**）
* USB キーボード（**今回は使わない**）
* USB マウス（**今回は使わない**）

OS の選定
---

![スクリーンショット_011716_044932_AM.jpg](https://qiita-image-store.s3.amazonaws.com/0/48194/0c0b8a0c-53df-eb1e-5341-1d2a2d6defc9.jpeg)

[Raspberry Pi Downloads - Software for the Raspberry Pi](https://www.raspberrypi.org/downloads/)

上記公式サイトで各種 OS、および OS のインストールを簡単に行える NOOBS というツールが配布されている。
今回は NOOBS を使わず、特にデスクトップ環境も要らなかったので **Raspbian Jessie Lite** を直接 SD カードに書き込むことにした。

デスクトップ版が良いという人は通常の Jessie をダウンロードして以降の作業を同様に行えば良いと思う。

### こだわりがなければ Raspbian がオススメ

最初、使い慣れた CentOS のイメージを見つけて入れてみたのだが、ARM 32bit 向けのパッケージがあまり無かったので、あれこれするために各種ソフトやライブラリをソースからひたすら入れる作業ばかりで、トラブルも多くて本来やりたいことがなかなかできなかった。
Raspbian はリポジトリ上のパッケージも豊富でサクサク進められるし、雑誌やウェブの記事でも Raspbian 前提であることが殆どなのでディストリビューションに強いこだわりがなければ Raspbian を選択するのが無難。加えて、今回は Lite 版を選択したが、これも通常のデスクトップ版を入れておく方が無難。

Raspbian Jessie Lite のインストール
---

[Installing Operating System Images - Raspberry Pi Documentation](https://www.raspberrypi.org/)

上記公式サイトの OS イメージファイルの書き込み方法を参考に、特にソフトの追加など不要なこともあって Mac で作業した。

ダウンロードした Raspbian のイメージファイルはデスクトップに配置。

**!! 書込み先のデバイスを間違えると大変なことになるので注意 !!**

microSD カードのデバイス名を確認。

``` bash
$ diskutil list
/dev/disk0
       :
/dev/disk1
       :
/dev/disk2
       :
/dev/disk3
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *32.2 GB    disk3
   1:             Windows_FAT_32 42F64975                32.2 GB    disk3s1
```

どうやら `/dev/disk3` なので、Raspbian のイメージファイルを書き込む。

``` bash
$ diskutil unmountDisk /dev/disk3
$ sudo dd bs=1m if=~/Desktop/2015-11-21-raspbian-jessie-lite.img of=/dev/disk3
Password: *****

# 実行中に control + T を押下すると以下のような進捗が表示される
# load: 1.09  cmd: dd 61265 uninterruptible 0.00u 7.23s
# 1268+0 records in
# 1267+0 records out
# 1328545792 bytes transferred in 1026.036225 secs (1294833 bytes/sec)

1391+0 records in
1391+0 records out
1458569216 bytes transferred in 1125.681509 secs (1295721 bytes/sec)

$ diskutil eject /dev/disk3
```

microSD カードを抜いて、電源切った状態の Raspberry Pi2 に挿す。

Raspberry Pi2 起動＆接続
---
microSD カード、LAN と電源用 USB だけ挿して起動する。

![raspberrypi2.jpg](https://qiita-image-store.s3.amazonaws.com/0/48194/82b29d9c-4dd9-7bdf-2f9e-efb9916aeccb.jpeg)

### Raspberry Pi2 に ssh 接続

Windows や Mac などから、起動した Raspberry Pi2 に ssh 接続する。

Raspbian Jessie は標準で avahi-daemon と sshd が起動しているので、IP アドレスが分からなくても名前で直接 ssh 接続することができる。
(但し、DHCP 等で IP 自体を付与できないと、avahi-autoipd が入っていないので IP 自体が割り当たらなくて接続できないと思われる）

> [Zeroconf - Wikipedia](https://ja.wikipedia.org/wiki/Zeroconf)
> 簡単に言ってしまうと、自発的に名前をブロードキャストしちゃう技術の Linux/BSD 系実装で、これとお喋りするために Bonjour を利用する。

Mac は標準で Bonjour が入っているので接続出来るが、Windows 10 以前の OS の場合は別途インストールしなければいけない。

> [仮想化雑記帳: Windows 10 and Bonjour](http://virtnote.blogspot.com/2015/06/windows-10-and-bonjour.html)
> Windows 10 プレビュー版で Bonjour が動いていることが確認されている。

#### Windows 7 に Bonjour をインストール

Bonjour は iTunes のインストーラより拝借する。
既に iTunes をインストールしているなら、この作業は飛ばして OK。

[iTunes - iTunesを今すぐダウンロード - Apple（日本）](http://www.apple.com/jp/itunes/download/)

上記サイトより iTunes のインストーラーをダウンロードしてきて、実行はせずに exe ファイルを解凍可能なアーカイバソフトで解凍する。

すると、以下のようなファイルが出てくるので、**Bonjour64.msi** を実行してインストールする。

```
iTunes6464Setup.exe
   AppleApplicationSupport.msi
   AppleApplicationSupport64.msi
   AppleMobileDeviceSupport6464.msi
   AppleSoftwareUpdate.msi
   Bonjour64.msi
   iTunes6464.msi
   SetupAdmin.exe
```

#### ssh 接続

Raspbian Jessie はデフォルトのホスト名が `raspberrypi` で、ユーザ `pi`、パスワード `rapsberry` でログイン可能だが、Bonjour 経由で接続する際はホスト名を **`raspberrypi.local`** とするので注意。(これは mDNS の実装である Avahi の仕様)

``` bash
cygwin$ ssh -l pi raspberrypi.local

The authenticity of host 'raspberrypi.local (192.168.0.27)' can't be established.
ECDSA key fingerprint is SHA256:zShTnYwOCrJnALsUx1/2Z8pT+uRwfR2NXWkTtSGXb9c.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'raspberrypi.local,192.168.0.27' (ECDSA) to the list of known hosts.
pi@raspberrypi.local's password: ("raspberrypi" と入力)

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 Jan 16 11:54:23 2016 from 240f:6c:5c64:1:426c:8fff:fe37:da7f

pi@raspberrypi:~ $
```

オッケー、繋がったね。

パーテーションの拡張
---

初期状態だと `/` に 1.3GB しか割り当てられていない。
ご覧の通りインストール直後で既に使用率 79% なので、microSD カードの容量をきっちり使わせるようにしよう。

``` bash
$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root       1.3G  931M  262M  79% /
devtmpfs        459M     0  459M   0% /dev
tmpfs           463M     0  463M   0% /dev/shm
tmpfs           463M   12M  452M   3% /run
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           463M     0  463M   0% /sys/fs/cgroup
/dev/mmcblk0p1   60M   20M   41M  34% /boot
```

パーテーション拡張には、標準で入っている `raspi-config` という Raspbian の設定ツールを利用する。

``` bash
$ LANG=C sudo raspi-config
```

実行すると以下のようなテキストベースの UI が起動する。
矢印キーで選択、TAB で選択場所の移動、スペースで決定。

`1 Expand Filesystem` を実行する。

![](https://qiita-image-store.s3.amazonaws.com/0/48194/f334b2aa-d35e-59ee-2075-76f54147c6c7.jpeg)

再起動したら反映するよーって。

![](https://qiita-image-store.s3.amazonaws.com/0/48194/90c1f174-0eb9-209e-2a91-045d74ccc6a2.jpeg)

最初の画面で `Finish` すると、再起動してくれるっていうので `Yes` と。

![](https://qiita-image-store.s3.amazonaws.com/0/48194/d5dae626-3143-9a5b-58f0-94635db3f8f4.jpeg)

再起動後、改めて確認すると以下の通り `/` に microSD カードで使われていなかった領域分が拡張されていた。

```bash
$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root        30G  932M   28G   4% /
                               :
```


Raspberry Pi2 のファームウェアを更新…しない
---

[Hexxeh/rpi-update: An easier way to update the firmware of your Raspberry Pi](https://github.com/Hexxeh/rpi-update)

上記 `rpi-update` コマンドでファームウェアやライブラリの更新が行えるらしいのだが、`4.1.13-v7+` から `4.1.15-v7+` に更新して再起動したところ、 microSD の I/O error が発生して Raspbian が起動できなくなってしまった。

対処方法が分からないので、更新をしないという残念な選択をした。
うーん…。

ちなみに、ファームウェアと言っても Raspberry Pi2 本体の何かを書き換えるものではないようなので、microSD カードに Rapbian を入れ直せば更新前のファームウェアで起動した。

Raspbian のパッケージ更新
---

OS 導入直後しか怖くてやれない系のとにかくガバッと最新化を実行。

``` bash
$ sudo apt-get update
$ sudo apt-get -y dist-upgrade
```

raspi-config で設定を変更
---

先ほどのパーテーション拡張で既に使っている `raspi-config` で、基本的な設定を行っておく。

``` bash
$ LANG=C sudo raspi-config
```

![raspi-config](https://qiita-image-store.s3.amazonaws.com/0/48194/3f3a6b2e-ed2d-9c95-51de-fd7ca2f3a3a7.jpeg)

* `2 Change User Password` は適宜実行
* `5 Internationalisation Options`
    * `I1 Change Locale` で `C.UTF-8`, `en_US.UTF-8`, `ja_JP.UTF-8` を有効化して、`ja_JP.UTF-8` をデフォルトにした
    * `I2 Change Timezone` を `Asia` -> `Tokyo` にした
* `8 Overclock`
    * `Pi2` を選択
* `9 Advanced Options`
    * `Hostname` は適宜変更

オーバークロックなんかも設定できてしまうのかと驚いた。
本体に合わせて `Pi2` を選択したが、発熱や消費電力などを抑えたい場合は敢えて控えめのプロファイルを選択するのも良いかもしれない。


その他の細々とした設定変更など
---

### 日本語対応

``` bash
# 日本語＋中国語フォントをインストール
$ sudo apt-get -y install fonts-vlgothic ttf-wqy-zenhei
# 日本語 man ページのインストール
$ sudo apt-get -y install manpages-ja manpages-ja-dev
```

ディスプレイ繋いだ場合に日本語が表示されなくなるので、フォントをインストールしておく。
漢字フォントの不足を補うために中国語フォントも追加した。

デスクトップ版の Jessie を日本語環境で使うなら必須。
加えて日本語変換用に `ibus-anthy` のインストール＆設定も必要になると思うが、ここでは割愛する。

### さよなら、nano エディター

標準エディタが nano になっているようなのだが、不慣れで使いにくい。
vim v7.4 が入っていたので nano は削除してしまう。

``` bash
$ sudo apt-get remove nano

以下のパッケージは「削除」されます:
  nano
アップグレード: 0 個、新規インストール: 0 個、削除: 1 個、保留: 0 個。
この操作後に 1,356 kB のディスク容量が解放されます。
続行しますか? [Y/n] y
```

### 時刻補正

Jessie では ntpd が動いているが、即時変更もしたいので `ntpdate` を入れる。

``` bash
$ sudo apt-get -y install ntpdate
$ sudo ntpdate -u ntp.nict.jp
17 Jan 03:53:46 ntpdate[11232]: adjust time server 133.243.238.244 offset -0.003303 sec

$ date
2016年  1月 17日 日曜日 03:57:23 JST
```

うん、いい感じに眠い。

ついでに、ntpd の方も ntp.nict.jp を参照させるようにしておく。

``` bash
$ sudo vi /etc/ntpd.conf

~~~~~~~~~~ ntpd.conf ~~~~~~~~~~
#下記定義をコメントアウトして、ntp.nict.jp の定義を追加
#server 0.debian.pool.ntp.org iburst
#server 1.debian.pool.ntp.org iburst
#server 2.debian.pool.ntp.org iburst
#server 3.debian.pool.ntp.org iburst
server ntp.nict.jp
~~~~~~~~~~ ntpd.conf ~~~~~~~~~~

$ sudo systemctl restart ntp
```


これで、あれこれやるためのベース環境はできたんじゃなかろうか。
(特に Raspberry Pi2 らしい作業はなかった…ｗ)

複数の microSD カードを用途別に使い分けると、環境の切り替えが楽。
でも、構築を毎回手作業でやるのは面倒なので、Ansible でプロビジョニングさせるようにしたい。