mac で BeagleBoneBlack(BBB) に Debian(8.8) をのせて WiFi （WN-G300UA）だけで運用するまで

# WiFiデバイスについて
色々と試したのですが、今のところ
Debian8.8 (Linux beaglebone 4.4.54-ti-r93 #1 SMP Fri Mar 17 13:08:22 UTC 2017 armv7l GNU/Linux)
では
I/O DATA WN-G300UA
で動作しています。
ELECOM WDC-150SU2MBK
は安定して動作しません。
BUFFALO WLI-UC-GNM2S
は特別にドライバを入れることなく動作しますが
とても熱くなるのでオススメできません。

以上からWiFiデバイスとしてはI/O DATA WN-G300UAをドライバを入れて使うのが良いです。

p.s.
~~I/O DATA WN-G300UAでも長時間セッションを張ったままだとセッションが切れるようです。WiFiの暗号鍵の更新時にそれが起こるようです。
ConnManでの暗号鍵更新時間の変更はどうやるのか、わかる方、教えてください。~~
下記、最新ドライバーインストールの部分で

```
# cp ./rtl8192cu-fixes/8192cu-disable-power-management.conf /etc/modprobe.d/
```
を追加したらセッションが切れなくなったようです。
しばらく様子見です。


# BeagleBone Black用のDebianイメージの取得
https://beagleboard.org/latest-images
の
Jessie IoT (non-GUI) for BeagleBone via microSD card
にあるリンク先からイメージをダウンロードし展開してマイクロSDに入れます。

まずmacにunxzコマンドが入っていない場合はmacのターミナルから

```
$ brew install xz
```

として取得します。
そして、

```
$ wget https://debian.beagleboard.org/images/bone-debian-8.7-iot-armhf-2017-03-19-4gb.img.xz
$ unxz bone-debian-8.7-iot-armhf-2017-03-19-4gb.img.xz
```

で展開されたイメージが出来上がります。

# マイクロSDカード（クラス10の4G以上のもの）をmacに挿入
ここらあたりのものを使いました。
http://amzn.asia/d14dMgl
普通に挿入

# マイクロSDカードのフォーマット（必要なら）
ディスクユーティリティ.appを使う。
APPLE SD Card Reader Mediaのメディアを選択
消去をクリックしてから名前を適当に、フォーマットをMS-DOS(FAT)にして消去ボタンをクリック

# SD書き込みソフトをmacにインストール
http://etcher.io/

# 展開したイメージをマイクロSDカードに書き込む
上記のアプリを使います。（アプリケーションフォルダー内のEtcher.app）
まず書き込むimgファイルを選択、
次にSDカードを選択、
そして書き込み実行です。
終了時にmacがSDカードをマウントしようと試みますがフォーマットが違うので失敗しますが、これは正常です。
SDカードを抜き取ります。

# BBBを最新Debianで起動
電源off状態のBBBにイメージの書き込まれたマイクロSDカードを挿入し、有線LANケーブルも接続、BBBのブートボタン（SDカードの近くの黒いボタン）を押した状態でMACとBBBをUSBで接続しBBBを起動します。ユーザーLEDが点滅したらブートボタンを離します。
これはSDカード内のイメージを使った起動です。（まだBBB内蔵フラッシュには書き込まれません）
しばらくしてからmacターミナルから次のコマンドを実行しシリアル接続用のデバイスを確認します。（tty.Bluetooth〜の方ではありません！）

```
$ ls -al /dev/tty.*
crw-rw-rw-  1 root  wheel   20,   0  7 12 03:06 /dev/tty.Bluetooth-Incoming-Port
crw-rw-rw-  1 root  wheel   20,  70  7 22 21:33 /dev/tty.usbmodem1425
```
そしてそのデバイス名を使ってscreenコマンドでシリアル接続をします。

```
$ screen /dev/tty.usbmodem1425
```

ログイン名はdebian
パスワードはtemppwd
です。

次にvim等のエディタで/boot/uEnv.txtを編集（$ sudo vim /boot/uEnv.txt）しSDカードからブートした場合に内蔵フラッシュにシステムが書き込まれるように

```
##enable BBB: eMMC Flasher:
#cmdline=init=/opt/scripts/tools/eMMC/init-eMMC-flasher-v3.sh
```

を

```
##enable BBB: eMMC Flasher:
cmdline=init=/opt/scripts/tools/eMMC/init-eMMC-flasher-v3.sh
```

に変更します。そして、

```
# shutdown -h now
```

でシステムを停止します。

# 内蔵フラッシュ（eMMC）への書き込み
停止確認後に電源ボタンを押します。
今度はシステムが立ち上がった後に自動的にシステムを内蔵フラッシュに書き込みます。
しばらくの間、ユーザーLEDが左右に揺れるように点滅し、最後に4つ共に光った後に自動的にシステムが停止します。
それを確認してマイクロSDを抜きます。

# 内蔵フラッシュからの起動（通常の起動）

そして、LANケーブルを接続し電源ボタンを押します。
起動後にはLAN経由でアクセスできるようになっていますが、DHCPでの割り当てのためにIPアドレスが確認できませんので、一旦、screenコマンドで接続します。
接続後、

```
$ ifconfig
```

で割り当てられたIPアドレスを確認します。（eth0の部分）
ここで、一旦ログアウトして、LAN経由で接続しなおしても良いです。
その場合は、割り当てられたIPアドレス（例えば192.168.0.152だとします）で
macのターミナルから、

```
$ slogin debian@192.168.0.152
```

です。このIPを使う接続が初めての場合、sshによるメッセージが最初に表示されますので、yesと答えてから続けます。

# ここからDebianの設定

# ホスト名の確認と変更（例えばbbb01に変える）

```
$ sudo hostname
beaglebone
$ sudo hostname bbb01
```

/etc/hostname を次のように編集する

```
bbb01
```

/etc/hosts の127.0.1.1の行を次のように編集する

```
127.0.1.1 bbb01
```

ホスト名が設定されたことを確認

```
$ sudo hostname
bbb01
```


# ローカル時間の設定（Asia/Tokyo）

```
$ sudo dpkg-reconfigure tzdata
```

# アップデート（時間がかかりますので気長に待ちます）

```
sudo apt-get update
sudo apt-get upgrade
```

# node-redのアップデート（これも時間がかかります。実験中なのでオススメしません。飛ばしてください。）

```
$ curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
$ sudo apt-get install -y build-essential nodejs
$ hash -r
$ sudo npm i -g --unsafe-perm node-red
$ sudo npm install -g --unsafe-perm node-red-node-beaglebone
```

# WN-G300UA の場合
まず安定したドライバに変更する（必須）
参考：https://adamscheller.com/systems-administration/rtl8192cu-fix-wifi/
参考：https://github.com/pvaret/rtl8192cu-fixes

```
$ sudo apt-get install --reinstall linux-headers-$(uname -r) build-essential dkms git
$ git clone https://github.com/pvaret/rtl8192cu-fixes.git
$ sudo su
# dkms add ./rtl8192cu-fixes
# dkms install 8192cu/1.10
# depmod -a
# cp ./rtl8192cu-fixes/blacklist-native-rtl8192.conf /etc/modprobe.d/ 
# cp ./rtl8192cu-fixes/8192cu-disable-power-management.conf /etc/modprobe.d/
# modprobe 8192cu
```

# WLI-UC-GNM2S の場合
特にドライバをインストールする必要はないようですが、とても熱くなります。
現時点ではオススメできません。

# WDC-150SU2MBK の場合
安定して動作するドライバが見つかりません。
諦めて他のデバイスを使いましょう！

# WiFiの設定（固定ローカルIP）
WiFiデバイスをボードのUSBに挿入する。
iwconfigを実行して次のようにデバイスが認識できていることを確認する。

```
# iwconfig
wlan0     unassociated  Nickname:"<WIFI@REALTEK>"
          Mode:Managed  Frequency=2.412 GHz  Access Point: Not-Associated   
          Sensitivity:0/0  
          Retry:off   RTS thr:off   Fragment thr:off
          Power Management:off
          Link Quality:0  Signal level:0  Noise level:0
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0
```

connmanctlを実行して次のように入力（connmanctl>の行）
servicesを入力すると自分の環境から使えるssid（この例ではlaksmi-mac-net）とそのサービス名であるwifi_bc5c4c88ea50_6c616b736d692d6d61632d6e6574_managed_pskが表示される。以降の設定ではこの長いサービス名を指定して設定することになる。
この例では最後の2つのコマンドconfig...でWiFiの固定IP、mask,gatewayとnameserversを設定している。以下の例ではIPが192.168.0.30, maskが255.255.255.0, gatewayが192.168.0.1でnameserversを192.168.0.20に設定した。
設定が終わったらexitでconnmanctlから抜ける。

```
# connmanctl
connmanctl> tether wifi disable
Error disabling wifi tethering: Already disabled
connmanctl> enable wifi
Error wifi: Already enabled
connmanctl> scan wifi
Scan completed for wifi
connmanctl> services
*AO Wired                ethernet_544a16ee3115_cable
    laksmi-mac-net       wifi_bc5c4c88ea50_6c616b736d692d6d61632d6e6574_managed_psk
connmanctl> agent on
Agent registered
connmanctl> connect wifi_bc5c4c88ea50_6c616b736d692d6d61632d6e6574_managed_psk
Agent RequestInput wifi_bc5c4c88ea50_6c616b736d692d6d61632d6e6574_managed_psk
  Passphrase = [ Type=psk, Requirement=mandatory ]
Passphrase? ここでパスフレーズを入力
Connected wifi_bc5c4c88ea50_6c616b736d692d6d61632d6e6574_managed_psk
connmanctl> config wifi_bc5c4c88ea50_6c616b736d692d6d61632d6e6574_managed_psk --ipv4 manual 192.168.0.30 255.255.255.0 192.168.0.1
connmanctl> config wifi_bc5c4c88ea50_6c616b736d692d6d61632d6e6574_managed_psk --nameservers 192.168.0.20
connmanctl> exit
```

次のコマンドでWiFiが接続されていることを確認する

```
# iwconfig wlan0
wlan0     IEEE 802.11bgn  ESSID:"laksmi-mac-net"  Nickname:"<WIFI@REALTEK>"
          Mode:Managed  Frequency:2.412 GHz  Access Point: 80:EA:96:EF:F8:CC   
          Bit Rate:144.4 Mb/s   Sensitivity:0/0  
          Retry:off   RTS thr:off   Fragment thr:off
          Power Management:off
          Link Quality=100/100  Signal level=-45 dBm  Noise level=0 dBm
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0

# ifconfig wlan0
wlan0     Link encap:Ethernet  HWaddr 34:76:c5:8e:ac:8b  
          inet addr:192.168.0.30  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::3676:c5ff:fe8e:ac8b/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST DYNAMIC  MTU:1500  Metric:1
          RX packets:4213 errors:0 dropped:12 overruns:0 frame:0
          TX packets:13766 errors:0 dropped:1 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:554275 (541.2 KiB)  TX bytes:18624957 (17.7 MiB)
```

ここまで確認できたら以下のようにシャットダウンします。

```
# sudo shutdown -h now
```

停止を確認して有線LANケーブルを抜いて電源ボタン（NICコネクタすぐ横の黒いボタン）を押して再び起動させる。
電源を入れてしばらくするとWiFiデバイスの青色LEDが点滅し、さらに時間が経つとWiFi経由でmacのターミナルからWiFi経由でログインすることができるようになっているはずです。

# WiFi経由でのログイン

```
$ slogin debian@192.168.0.30
```

#WiFi経由で外部から色々と
まずはmacのsafariからWeb接続してみよう。
このページではBeageBone Blackの端子情報等が書かれています。
ブラウザで192.168.0.30を指定して接続してみる。
最初の起動は多少の時間がかかるかもしれない。
<img width="1243" alt="スクリーンショット 2017-07-18 21.46.41.png" src="https://qiita-image-store.s3.amazonaws.com/0/124209/ca61994b-9413-3046-5c54-9240e3b4b256.png">

次にnode-redを開いてみよう。
最近のDebianではあらかじめポートを指定した接続でnode-redが起動するようにあらかじめ設定されている。
ブラウザで192.168.0.30:1880を指定して接続してみる。
起動は多少の時間がかかる。
<img width="1279" alt="スクリーンショット 2017-07-18 21.49.30.png" src="https://qiita-image-store.s3.amazonaws.com/0/124209/71989a98-adc8-99b4-48f0-259b250c076e.png">

# その他、Debianの設定など

# ユーザー追加してSUDO可能に
```
$ sudo adduser <username>
$ sudo gpasswd -a <username> sudo
```

一旦ログアウトして、新しく作ったユーザーでログインしてみましょう！
そして、そろそろユーザーdebianのパスワードのtemppwdも変更しておきましょう。

```
$ sudo passwd debian
```


# emacs24
```
$ sudo apt-get install emacs24-nox emacs24-el
```

# zsh
```
$ sudo apt-get install zsh
```

各ユーザー毎に

```
$ wget http://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh -O - | sh
$ chsh
```
シェルは/bin/zshを指定

~/.zshrcを編集して最後に
```
alias ll="ls -al"
```
などと書いておくと嬉しいかも。
一旦ログアウトして再びログインするとzshになっています。