FC2 ブログ

ぎじゅつのメモ

Raspberry pi 3 をセットアップする

夏休みなので、家で眠ってた Raspberry pi 3 Model B を取り出して遊んでみる。
初期設定の情報もググってみると、だいぶ出揃ってるので、割と苦労せずにセットアップできそう。

出先でHDMIディスプレイもキーボードもマウスも十分なものがないので、
mac book pro に有線LANで直接つないでセットアップするよ。
※あと最低限必要なのはネット環境とラズパイの電源くらい

Amazonで、ラズパイと抱き合わせで買った micro SD カード

をフォーマットする

micro SD カード を SD カードアダプタに装着して mac book pro に挿入する
(接触不良で5回くらい抜き差ししないと認識しなかった...ホコリが結構入りこんでたみたい)

$ diskutil list
/dev/disk0 (internal, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *500.3 GB   disk0
....
/dev/disk1 (internal, virtual):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:                  Apple_HFS Macintosh HD           +499.1 GB   disk1
....
/dev/disk2 (internal, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *31.9 GB    disk2
   1:             Windows_FAT_32 NO NAME                 31.9 GB    disk2s1

自分の環境では /dev/disk2 がSD Cardに該当する模様。
もともと FAT32 フォーマットっぽいし、もしかしたらフォーマット必要ないかもしれない。
が、 NO NAME というのも寂しいし、せっかくなので名前を付けつつフォーマットしてみる。

$ diskutil eraseDisk FAT32 RASPBERRYPI /dev/disk2
Password:
Started erase on disk2
Unmounting disk
Error: -69877: Couldn't open device

ん...? フォーマットできない....
ちょっと悩んだが、SDカードアダプタ横の"ロック"スライドスイッチがONになってるという悲しいミスであった。

$ diskutil eraseDisk FAT32 RASPBERRYPI /dev/disk2
Started erase on disk2
Unmounting disk
Creating the partition map
Waiting for the disks to reappear
Formatting disk2s2 as MS-DOS (FAT32) with name RASPBERRYPI
512 bytes per physical sector
/dev/rdisk2s2: 61891008 sectors in 1934094 FAT32 clusters (16384 bytes/cluster)
bps=512 spc=32 res=32 nft=2 mid=0xf8 spt=32 hds=255 hid=411648 drv=0x80 bsec=61921280 bspf=15111 rdcl=2 infs=1 bkbs=6
Mounting disk
Finished erase on disk2

フォーマットできたので、micro SD カードをアンマウントする

$ diskutil unmountDisk /dev/disk2
Unmount of all volumes on disk2 was successful

Raspbian jessie をダウンロードする www.raspberrypi.org

まぁ時間がかかる(ので、事前に落としておくとよい)

$ time wget -4 https://downloads.raspberrypi.org/raspbian_latest
...
Length: 1393896178 (1.3G) [application/zip]
Saving to: ‘raspbian_latest’

raspbian_latest                                  100%[================================================================================================================>]   1.30G  1.46MB/s    in 21m 37s

2016-08-12 08:39:58 (1.03 MB/s) - ‘raspbian_latest’ saved [1393896178/1393896178]

wget -4 https://downloads.raspberrypi.org/raspbian_latest  7.29s user 47.48s system 4% cpu 21:39.90 total


$ openssl sha1 raspbian_latest #ファイルの確認 - downloadページに書いてあるsha1ハッシュ値と見くらべる
SHA1(raspbian_latest)= 64c7ed611929ea5178fbb69b5a5f29cc9cc7c157


$ unzip raspbian_latest
Archive:  raspbian_latest
  inflating: 2016-05-27-raspbian-jessie.img


$ ll 2016-05-27-raspbian-jessie.img
-rw-r--r--  1 tkrtmy  staff   3.7G  5 27 20:50 2016-05-27-raspbian-jessie.img

実際に micro SD カードに書き込んでいく。
思ったより時間はかからなかった。

# Ctrl + t で進捗確認できる
$ time sudo dd bs=1m if=path/to/2016-05-27-raspbian-jessie.img of=/dev/rdisk2                                                                                                    
Password:
501+0 records in
500+0 records out
524288000 bytes transferred in 20.045412 secs (26155013 bytes/sec)
load: 1.76  cmd: dd 45231 uninterruptible 0.01u 2.19s
2786+0 records in
2785+0 records out
2920284160 bytes transferred in 141.203796 secs (20681343 bytes/sec)
3833+0 records in
3833+0 records out
4019191808 bytes transferred in 196.553034 secs (20448383 bytes/sec)
sudo dd bs=1m if=path/to/2016-05-27-raspbian-jessie.img   0.03s user 3.06s system 1% cpu 3:20.94 total


$ diskutil eject /dev/disk2
Disk /dev/disk2 ejected

mac で システム環境設定 > 共有 > インターネット共有で、

  • 共有する接続経路: Wi-Fi
  • 相手のコンピュータでのポート: AX88772(今回USBの有線LAN変換ケーブルを使用したので)

に設定する

Raspberry pi に micro SDカードと有線LANを差し込む
電源を入れる
しばらく経ったら

$ ifconfig # 接続先を絞り込む
bridge100: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
...
    inet 192.168.2.1 netmask 0xffffff00 broadcast 192.168.2.255
    ....
    status: active # status: active になっている必要があるとのこと


$ arp -a
# で、192.168.2.1 ~ 192.168.2.255 までのうちのどれかを探して

$ ssh pi@{見つけたipアドレス} # password は raspberry

pi@raspberrypi:~ $ sudo raspi-config
# で、SDカードの全容量使えるようにしたりとかlocaleとかタイムゾーンとか色々設定する - 割愛 -

新規ユーザーを作成する

pi@raspberrypi:~ $ sudo passwd root
pi@raspberrypi:~ $ sudo useradd tkrtmy
pi@raspberrypi:~ $ sudo passwd tkrtmy
pi@raspberrypi:~ $ cd /home && mkdir tkrtmy
pi@raspberrypi:~ $ id pi #新しく作ったユーザーに次の行でpiに準ずる権限グループをお好みでつける
pi@raspberrypi:~ $ # sudo usermod -G adm,dialout,audio,video,gpio... tkrtmy
pi@raspberrypi:~ $ sudo gpasswd -a tkrtmy sudo
ユーザ tkrtmy をグループ sudo に追加
pi@raspberrypi:~ $ exit

$ ssh tkrtmy@{ipアドレス} # ユーザーを tkrtmy に変えて再ログイン
tkrtmy@raspberrypi:~$ sudo chown -R tkrtmy:tkrtmy /home/tkrtmy
tkrtmy@raspberrypi:~$ sudo gpasswd -d pi sudo
tkrtmy@raspberrypi:~$ sudo visudo # コメントアウトして pi ユーザーの権限を無効にしてしまう
#pi ALL=(ALL) NOPASSWD: ALL

tkrtmy@raspberrypi:~$ sudo usermod -L pi # piのパスワードをロック

# 更新しておく
tkrtmy@raspberrypi:~$ sudo apt-get update
tkrtmy@raspberrypi:~$ sudo apt-get upgrade

公開鍵認証でログインできるようにする

tkrtmy@raspberrypi:~$ pwd
/home/tkrtmy
tkrtmy@raspberrypi:~$ mkdir .ssh
tkrtmy@raspberrypi:~$ chmod 700 .ssh
tkrtmy@raspberrypi:~$ cd .ssh
tkrtmy@raspberrypi:~/.ssh$ touch authorized_keys
tkrtmy@raspberrypi:~/.ssh$ chmod 600 authorized_keys
# ~ 普段通り mac で ssh-keygen とかする。
# そして公開鍵をラズパイの authorized_keys に追記する ~
tkrtmy@raspberrypi:~$ sudo vi /etc/ssh/sshd_config # 以下に示すあたりが肝
#Port 22 port:22 で受け付けないようにコメントアウトする
Port {新しいport}
...
PermitRootLogin no # root不可
...
PasswordAuthentication no # パスワード認証を無効に
...
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile     %h/.ssh/authorized_keys #コメントインする

tkrtmy@raspberrypi:~$ sudo /etc/init.d/ssh restart
# mac から公開鍵認証でログインができるか確認する
$ ssh -i ~/.ssh/hoge tkrtmy@{ipアドレス} -p {設定した新しいport}
# port: 22 でログインできないことも確認しておく
$ ssh -i ~/.ssh/hoge tkrtmy@{ipアドレス}
ssh: connect to host {ipアドレス} port 22: Connection refused

というか、ipアドレスじゃなくてデフォルトで raspberrypi.local でアクセスできるはずなので、
ipアドレスの部分は読み替えても良いかもしれない。
/etc/hostname/etc/hostsraspberrypi を任意のものに書き換えればホスト名を変えることはできる。

Wi-Fi の設定

tkrtmy@raspberrypi:~$ sudo sh -c 'wpa_passphrase SSID PASS >> /etc/wpa_supplicant/wpa_supplicant.conf'
tkrtmy@raspberrypi:~$ sudo vi /etc/wpa_supplicant/wpa_supplicant.conf
country=JP
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
        ssid=SSID
        #psk=PASS # 生パスワードなんで消しておく
        psk=01b...
}

tkrtmy@raspberrypi:~$ history | grep wpa_passphrase
tkrtmy@raspberrypi:~$ history -d {↑で表示したhistory id} #PASSをhistoryから消す
tkrtmy@raspberrypi:~$ iwconfig wlan0 # 設定したSSIDが表示されれば、接続できてるはず
wlan0     IEEE 802.11bgn  ESSID:SSID
       ...

最後に無線接続のipを固定にする

tkrtmy@raspberrypi:~$ sudo vi /etc/dhcpcd.conf
nohook lookup-hostname
# 自分の環境に合わせてipを追記する
interface wlan0
inform XXX.XXX.XXX.XXX
static routers=XXX.XXX.XXX.1
static domain_name_servers=XXX.XXX.XXX.1
tkrtmy@raspberrypi:~$ sudo /etc/init.d/dhcpcd reload

これで、有線LANを外せる!
と思ったら、外した途端まったくつながらないので原因を突き止める

$ arp -a
# b8:27:eb: 始まりのmacアドレス(ラズパイのmacアドレス)が見当たらないので無線通信が断絶している
# ので再度有線LANを挿してみる
# mac から秘密鍵の情報を引き継いだままログインする
$ ssh -A {eth0のip} -p {設定したport}
tkrtmy@raspberrypi:~$ ssh-add -l 
tkrtmy@raspberrypi:~$ ssh {wlan0のip} -p {設定したport}
# ログインできたので mac book と ラズパイ の間にある ポケット Wi-Fi が怪しい....

どうにも、手持ちの ポケットWi-Fi の プライバシーセパレータ が有効になっていたからだったっぽい
そもそも プライバシーセパレータ は無線パソコン同士の通信を無効にする設定なので、
有効にしとくのが正しいが、一時的に設定を無効に変更する。

やっと、無線でログインできるようになったぞ〜!!!

ほかにも sudo apt-get install tightvncserverリモートデスクトップできるようにしたり、
付随して、日本語フォントをインストールしたりした→
sudo apt-get install fonts-vlgothic sudo apt-get install ibus-mozc

最後にシャットダウン sudo shutdown -h now

今回はここまで。

まとめ

全体的に割とサラッとセットアップできてしまったが、
有線LANを外して無線ログインできるようにするのが思いのほか詰まってしまった。
原因を探る方法はなんとか思いついたものの、
ネットワーク周りの設定とか雰囲気でこなしてて、
実際よく分かってないなーと実感した。

参考

qiita.com なぜ /dev/rdisk* に書き込むのかとか参考になった qiita.com kenzo0107.hatenablog.com