mac で BeagleBone Black に Ubuntu16.04 をインストールする

# 追記
WN-G300UAの件、うまくいったと思っていたが、接続した状態で時間がたつと反応しなくなっていた。外部からpingを打っても反応なし。WiFiデバイスを変えた方が良いのかな？

# 追記2
ELECOM WDC-150SU2MBK（内部チップ：RTL8188EU）を手に入れたのでそちらでやってみた。
結論はOKでいまのところ何の問題もなく使えています。
http://amzn.asia/ah0Fg5b

# 追記3
node-redのインストールは今のところうまくいっていない。
起動まではokなのだが、外部からブラウザで見ようとすると固まるw
node-redを利用したいのならDebianで利用した方が良さそうな気がしてきた。
http://beagleboard.org/latest-images

# 追記4
~~node-red、有線NIC経由だと動きます。~~
~~WiFi経由だと動きません。（固まってしまう）~~
~~何故なんだろう？（セッション数制限の問題か？）~~
上記は間違いだった。
BeagleBoneのハードウェアアクセスの為にnodeでnode-red-node-beagleboneを入れていたのだが、これが入ると有線無線に依らずダメみたいです。
逆に入れないと動作する。（ただしWiFi経由だととても遅くタイムアウトになるケースもある。）
node-red-node-beagleboneはdebian推奨なのでubuntuだとダメなのかもね。

# 追記5
WDC-150SU2MBKの動作がのろいのでドライバーを入れてみる。

```
$ sudo apt-get install linux-headers-$(uname -r)
$ git clone https://github.com/lwfinger/rtl8188eu.git
$ sudo dkms add ./rtl8188eu
$ sudo dkms build 8188eu/1.0
$ sudo dkms install 8188eu/1.0
```

参考：
https://gist.github.com/timothybasanov/4cac1f8be77a6f912886


# 必要なもの
マイクロSDカード（容量2G以上のもの）
マイクロHDMIケーブル（BeagleBone Black とモニターを接続）
USBキーボード（BeagleBole BlackのUSBに接続）
ネットワークケーブル（BeagleBone BlackのNIC端子に接続）

# ubuntuイメージの取得
```
$ wget https://rcn-ee.com/rootfs/2017-06-12/flasher/BBB-eMMC-flasher-ubuntu-16.04.2-console-armhf-2017-06-12-2gb.img.xz
```

# 取得イメージの展開
unxzコマンドを使う。なければ次のようにしてインストール
```
$ sudo brew install xz
```
そして
```
$ unxz BBB-eMMC-flasher-ubuntu-16.04.2-console-armhf-2017-06-12-2gb.img.xz
```

# マイクロSDカードをmacに挿入
普通に挿入

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

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

# 展開したイメージをマイクロSDカードに書き込む
上記のアプリを使います。（アプリケーションフォルダー内のEtcher.app）
まず書き込むimgファイルを選択、
次にSDカードを選択、
そして書き込み実行です。

# BeagleBone Blackへの書き込み
電源を切った状態で、マイクロHDMIケーブルでモニタにつなぎます。
そしてUSBには無線のUSBキーボードをつなぎます。
NIC端子にもネットワークケーブルをつなげておきます。
その状態でブートスイッチを押したままの状態で電源につなぎ、ユーザーLEDが点灯し始めた後にブートスイッチを離します。
モニターにはフラッシュ書き込みの様子が表示され、問題なければ終了の後に自然に電源が切れます。

# パワーオン
上記書き込みがうまくいけば電源が自動的に切れるはずです。
この状態でマイクロSDカードを抜きます。
そしてパワーオンします。（NIC端子のすぐ横のボタンが電源ボタンですのでこれを押す）
そうするとubuntuが立ち上がります。

# ログイン
USBキーボードとマイクロHDMI接続のモニタを使う。
もしくは、macとBeagleBoneがusbで接続されている場合でmacにBeagleBoneのバーチャルネットワークをインストールしている場合はipアドレス192.168.6.2への接続が可能。ただしパワーオン後、しばらく時間がかかるのでmacのターミナルでifconfigコマンドでmacサイドのipアドレス192.168.6.1がアップされるのを確かめること。
最初のログインIDはubuntu、パスワードはtemppwdです。

# ipアドレスの確認
```
$ ifconfig
```
でeth0の部分をみてipアドレスが何に設定されているかを確認しましょう。

# macからの接続
上記のipアドレス（仮に192.168.0.152とします）を使ってmacのターミナルから接続してみます。（最初のパスワードはtemppwdです）
```
$ slogin ubuntu@192.168.0.152
```

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

# 最初の作業
まずは色々なソフトを入れる準備です。（vim,emacs,zshでも入れましょうか？）

```
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install vim
$ sudo apt-get install emacs24-nox emacs24-el
$ 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"
```
などと書いておくと嬉しいかも。
そして、次のコマンドで反映させます。
```
$ source ~/.zshrc
```
あれ、エラーがでる！
ログインし直しましょうw

あとはご自由に！

# USBがサスペンドするのを抑制する（実験）
```
$ sudo su
# echo -1 > /sys/bus/usb/devices/1-1/power/autosuspend
# echo -1 > /sys/bus/usb/devices/1-1/power/autosuspend_delay_ms
# echo on > /sys/bus/usb/devices/1-1/power/level
# echo on > /sys/bus/usb/devices/1-1/power/control
# modprobe usbcore autosuspend=-1
# echo -1 >/sys/module/usbcore/parameters/autosuspend
# exit
```

# WiFiを使えるようにする（I/O DATA WN-G300UA）
まずデバイスをUSBにさします。

そして、WiFiの設定（WPA2）は/etc/network/interfacesを編集して
DHCPを使う場合は、

```
auto wlan0
allow-hotplug wlan0
iface wlan0 inet dhcp 
        wpa-ap-scan 1
        wpa-scan-ssid 0
        wpa-key-mgmt WPA-PSK
        wpa-proto WPA2
        wpa-pairwise CCMP
        wpa-group CCMP 
        wpa-ssid "ローカルネットのSSID"
        wpa-psk "パスフレーズ"
```

STATIC IPにしたい場合は（アドレス等は適当に変えてください）

```
auto wlan0
allow-hotplug wlan0
iface wlan0 inet static 
        wpa-ap-scan 1
        wpa-scan-ssid 0
        wpa-key-mgmt WPA-PSK
        wpa-proto WPA2
        wpa-pairwise CCMP
        wpa-group CCMP 
        wpa-ssid "ローカルネットのSSID"
        wpa-psk "パスフレーズ"
        address 192.168.0.30
        netmask 255.255.255.0
        gateway 192.168.0.1
        dns-nameservers 192.168.0.20
        dns-nameservers 8.8.8.8
```

を追加します。その後
```
$ sudo ifup wlan0
```
で一応WiFiが利用できるようになります。
（きっと上記コマンドを入れなくても自動的にupするw）

```
$ iwconfig
$ ifconfig
```

でリンク速度やIPアドレスを確認することができます。

が、しかし、

有線と同時に利用しているときは問題がなかったけど、単独で使うと通信が停止してしまう現象に遭遇しました。USBがサスペンドしてしまうのかと思って上記の実験をしたが問題は解決しなかった。
色々と調べていくと、利用したWiFiデバイスは内部にRTL8192CUというチップを使っているらしく、どうやらそのドライバの問題らしいとのこと。下記のリンク先に解決策（FIXされたドライバの構築と導入）がありそれに従って単独利用できるようになりました。実際に手順を実行する時は有線での接続でやりましょう！
https://adamscheller.com/systems-administration/rtl8192cu-fix-wifi/

# 外部からWiFi接続について
電源投入後しばらくは

```
ssh: connect to host 192.168.0.30 port 22: Connection refused
```

となって接続できない。これは時間同期完了と関係あるのか？
やはり時間同期みたい。最大10分程度かな。

# node-red（実験中なので下記は参考程度と考えてください）
各種インストール（nodejs, npm, n, node-red, node-red-node-beaglebone）

```
$ sudo apt-get install curl
$ 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
$ ###sudo npm install -g --unsafe-perm beaglebone-io
$ ###sudo npm install -g --unsafe-perm johnny-five
$ ###sudo npm install -g --unsafe-perm node-red-contrib-gpio

$ ###sudo apt-get install -y nodejs npm
$ ###sudo npm cache clean
$ ###sudo npm install n -g
$ ###sudo n stable
$ ###sudo n 6.9.0
$ ###sudo ln -sf /usr/local/bin/node /usr/bin/node
$ ###sudo apt-get purge -y nodejs npm
$ ###sudo npm i -g --unsafe-perm node-red
$ ###sudo npm install -g --unsafe-perm node-red-node-beaglebone
$ ###sudo npm install -g --unsafe-perm node-red-contrib-gpio
```

起動テスト（失敗中）

```
$ sudo node-red-pi
$ ###sudo node-red-pi --max-old-space-size=128
```

# 参考
ubuntu:
http://elinux.org/BeagleBoardUbuntu
node-red:
https://nodered.org/docs/hardware/beagleboneblack
https://github.com/monteslu/node-red-contrib-gpio