Raspberry Piを入手したらやること


Model B+を複数セットアップしていて手順が安定してきた。
RPi2やIntel Edisonなどで陳腐化しつつある気がするが書いておく。

必要なもの
-

以下はRPiを設置する台数分だけ必要。

- Raspberry Pi Model B+
- microSDカード
- USB Wi-fiアダプタ
- USB microB電源アダプタ

以下はセットアップ時のみ必要。

- microSDカードリーダー

- HDMIケーブル
- モニタ
- USBキーボード

OSイメージ作成
-
参考:[Qiita - Raspberry Pi に入門してみた。](http://qiita.com/tomk79/items/cdc1b88358afba2c6337)

Mac OS XでRaspbianのディスクを作成する場合。
Mac BookにmicroSDカードを挿入してRaspbianなどとrenameしておく。

![スクリーンショット 2015-03-05 15.20.15.png](https://qiita-image-store.s3.amazonaws.com/0/281/5a0f9474-44f6-0c88-0eb4-c93c1655f1fa.png "スクリーンショット 2015-03-05 15.20.15.png")

SDカードがどこにマウントされているか確認する。

```console:Mac
$ df | grep Raspbian
```

ここでは`/dev/disk3s1`であるとしておく。以下でマウントを解除する。

```console:Mac
$ sudo diskutil unmount /Volumes/Raspbian
```


[Raspbianのイメージをダウンロード](https://www.raspberrypi.org/downloads/)しておく。
`dd`コマンドでディスク作成する。引数は先ほど調べた値に対して`/dev/rdisk3`となることに注意。

```console:Mac
$ cd /path/to/raspbian_img
$ ls
$ sudo dd bs=1m if="./2015-01-31-raspbian.img" of="/dev/rdisk3"
```

10分ほど待ち、書き込み終了したら

```console:Mac
$ sudo diskutil unmount /dev/disk3s1
```
でマウント解除してMacBookから外す。




OSインストール
-
書き込んだmicroSD、HDMIケーブル(+モニタ)とWiFiアダプタをRPiに挿入した後、電源アダプタを接続すると青いセットアップ画面がモニタに現れる。
設定を適宜変更する。

- 1 expand file system
- 4 internationalization > I3 keyboard > 104 > Other > English(US) > English(US)。そのあとはデフォルト。※gbになってしまった場合は[こちらのようにして](http://qiita.com/ksworks/items/2c34bfb73d21067118c1)直す　
- 8 advanced options > A4 SSH > Enable

終わったらfinishしてreboot。

WiFi設定
- 
モニタとキーボードを接続した状態で`pi`ユーザーでログインする。PWは`raspberry`となっているが後で変える。
SSIDとWiFi PWを`wpa_passphrase`コマンドに渡して設定ファイルを作り、WiFi設定に合わせてファイルを編集して読み込む。

```console:RPi
$ sudo su -
 
# cd /etc/wpa_supplicant
# cp -p  wpa_supplicant.conf wpa_supplicant.conf.bak
# wpa_passphrase $SSID $PASS >> wpa_supplicant.conf
 
# vi wpa_supplicant.conf 
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
#update_config=1
network={
  proto=WPA2
  key_mgmt=WPA-PSK
  pairwise=CCMP TKIP
  group=CCMP TKIP
  scan_ssid=1
   
  ssid="<SSID>"
  #psk="<PASS>"
  psk=<CIPHERED_PASS>
}


# vi /etc/network/interfaces
auto lo
iface lo inet loopback
 
iface eth0 inet dhcp
 
auto wlan0
allow-hotplug wlan0
#iface wlan0 inet manual
#wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface wlan0 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
 
iface default inet dhcp


# ifdown wlan0
# ifup wlan0
```

IPアドレスがとれた(`bound to` ...)ことを確認する。ここからはSSH接続してリモートで設定する。（そのうちChef化したい）

ログイン設定
-
Wi-Fi上の端末（ここではMacBookを使っている）でSSH設定してログイン、PWを変更する。



```console:Mac


$ vi ~/.ssh/config
Host pi1
 HostName XXX.XX.X.XXX
 User pi
Host pi2
 HostName XXX.XX.X.XXX
 User pi

$ ssh pi1
```


```console:RPi
$ passwd
```

公開鍵などは適宜設定する。

ホスト名変更
-
デフォルトでホスト名が軒並み`raspberrypi`でオペミスしそうなので、適宜変更する。

```console:RPi
$ sudo su -

# HOST=pi1
# echo $HOST > /etc/hostname
# /etc/init.d/hostname.sh
# sed -i /etc/hosts -e s/raspberrypi/$HOST/g
```
再度ログインするとホスト名が変わる



ディスク書き込みを減らす
-

廉価なmicroSDカードを使ったせいか壊れたことがあったので、
ややトリッキーだが大量の書き込みを行うときはメモリで書き込みを行うようにする。

参考:[Broken Corrupted Raspberry Pi SD Card](https://raymii.org/s/blog/Broken_Corrupted_Raspberry_Pi_SD_Card.html)




- `fsck`: mountのたび=再起動のたびに行う

```console:RPi
$ sudo tune2fs -c 1 /dev/mmcblk0p2
```

- 書き込みが多いディレクトリをtmpfsにする

```console:RPi
$ mount -l
$ sudo vi /etc/fstab
proc            /proc           proc    defaults          0       0
/dev/mmcblk0p1  /boot           vfat    defaults          0       2
/dev/mmcblk0p2  /               ext4    defaults,noatime  0       1

none        /var/run        tmpfs   size=1M,noatime         00
none        /var/log        tmpfs   size=1500M,noatime         00
none        /var/tmp        tmpfs   size=1M,noatime         00
none        /tmp            tmpfs   size=10M,noatime         00

$ sudo mount -a 
$ mount -l
```

- スワップを減らす

```console:RPi
$ sudo dphys-swapfile swapoff
$ sudo dphys-swapfile uninstall
$ sudo update-rc.d dphys-swapfile remove
```

- X11を削除する

```console:RPi

$ sudo apt-get purge --auto-remove 'libx11-.*'
```
2,3分待って`Do you want to continue [Y/n]?`と聞かれるので、Yと答えて15-30分程度待つ。


- 再起動

```console:RPi
$ sudo reboot
```

書き込み回数は以下で確認できるようだ。

```console:RPi
$ sudo tune2fs -l /dev/mmcblk0p2 |grep Lifetime
Lifetime writes:          4841 MB
```


モジュール
-
ここからはアプリケーション依存の設定なので必要に応じて。

### pythonを使う場合

```console:RPi

$ sudo apt-get update
$ sudo apt-get install python-pip
$ sudo apt-get install python-dev
$ sudo pip install netifaces
```

### GPIO(デジタル入出力)を使う場合

```console:RPi
$ cd
$ wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.38.tar.gz
$ tar zxvf bcm2835-1.38.tar.gz 
$ cd bcm2835-1.38/
$ ./configure 
$ make
$ sudo make check
$ sudo make install
```

- wiringPi

```console:RPi
$ cd
$ git clone git://git.drogon.net/wiringPi
$ cd wiringPi/
$ ./build
```

### fluentdやAWSを使う場合

```console:RPi
$ sudo aptitude install ruby-dev
$ cd
$ vi .gemrc
gem: --no-ri --no-rdoc --user-install

$ gem install rake
$ gem install bundler
$ gem install fluentd  # 8+ minutes
$ gem install aws-sdk --version 1.55.0
```

25分ほど待つ

```console:RPi
$ cd 
$ echo 'export PATH=$HOME/.gem/ruby/1.9.1/bin:$PATH' >> .bashrc
$ exec $SHELL

```

```console:RPi
$ cd
$ git clone https://github.com/imaifactory/fluent-plugin-kinesis.git
$ cd fluent-plugin-kinesis
$ rake build
fluent-plugin-kinesis 0.0.1 built to pkg/fluent-plugin-kinesis-0.0.1.gem.
$ gem install pkg/fluent-plugin-kinesis-0.0.1.gem
```

### DHTのライブラリを使う場合

参考：[Raspberry PiからAmazon Kinesisへデータを上げる](http://qiita.com/satzz@github/items/cc5545c3f2bad51d85bd#%E6%B8%A9%E6%B9%BF%E5%BA%A6%E3%82%BB%E3%83%B3%E3%82%B5)

```console:RPi
$ cd 
$ git clone https://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code.git
$ cd Adafruit-Raspberry-Pi-Python-Code/Adafruit_DHT_Driver_Python
$ sudo python setup.py install
```


おまけ
-
秋月のCdS(光センサ)をADコンバータ経由で接続したところ。
![IMG_8469.JPG](https://qiita-image-store.s3.amazonaws.com/0/281/310e3fea-9227-792f-4f48-0d983d9aa75d.jpeg "IMG_8469.JPG")
![IMG_8470.JPG](https://qiita-image-store.s3.amazonaws.com/0/281/0c11c6d4-4cc3-e966-8154-f9be6569fc1e.jpeg "IMG_8470.JPG")

![IMG_8422.JPG](https://qiita-image-store.s3.amazonaws.com/0/281/96c276d1-21ed-c51a-8432-20fed384c389.jpeg "IMG_8422.JPG")