Beagle Bone Black にUbuntu 14.04 LTS をインストールする

# 概要 
今回使用したものとしては下記の通りです。

<table><tbody>
  <tr>
    <th> Beagle Bone Black</th>
    <td> 本体</td>
  </tr>
  <tr>
    <th> Ubuntu (on Think Pad X1 carbon)</th>
    <td> Beagle Bone Black へインストールするためのOS をmicro SD へ書き込むためのマシン。母艦マシン</td>
  </tr>
  <tr>
    <th> 5V AC アダプタ</th>
    <td> Beagle Bone Black に電源を供給するためのアダプタ。USB でも代用可能。</td>
  </tr>
  <tr>
    <th> micro SD(Transcend 32GB Class10)</th>
    <td> 今回はTranscend 32GB Class10 を使用。一部ベンダのmicro SD ではうまく動かない場合がある。</td>
  </tr>
  <tr>
    <th> micro SD reader/writer</th>
    <td> BUFFALO の reader/writer。詳細な製品名までは不明。Linux で認識できるもの。</td>
  </tr>
  <tr>
    <th> その他</th>
    <td> RJ45 ケーブル、Beagle Bone Black を接続するローカルネットワーク etc</td>
  </tr>
</tbody></table>

* Beagle Bone Black
![BeagleBoneBlack_InstallUbuntu0001.png](https://qiita-image-store.s3.amazonaws.com/0/70152/788c3e67-4317-12a4-48a2-11d1395015fe.png)

* Transcend 32GB Class10
![BeagleBoneBlack_InstallUbuntu0000.png](https://qiita-image-store.s3.amazonaws.com/0/70152/ac5afe78-8038-3e47-b2bd-81c34f991baa.png)

# 必要なファイルのダウンロード 
下記ダウンロードページより、bone-uboot.tar.xz とubuntu のファイル(ubuntu-trusty-14.04-rootfs-3.14.4.1-bone-armhf.com.tar.xz) をダウンロードします。

```text
http://www.armhf.com/download/
```

今回は現在の最新版 である Ubuntu Trusty 14.04 LTS をダウンロードします。

```text
$ wget http://s3.armhf.com/dist/bone/bone-uboot.tar.xz
$ wget http://s3.armhf.com/dist/bone/ubuntu-trusty-14.04-rootfs-3.14.4.1-bone-armhf.com.tar.xz
```

# micro SD にLinux を書き込む 
## micro SD の接続 
作業端末にmicro SD カードを挿入し、dmesg コマンドでmicro SD のデバイス名を確認します。

```text
$ dmesg
.........
[ 1478.310048] ---[ end trace 6084bf91cd897474 ]---
[ 1487.007463] sd 1:0:0:0: [sdb] 60367872 512-byte logical blocks: (30.9 GB/28.7 GiB)
.........
```


出力結果より、今回自分が実施した環境では`/dev/sdb` でmicro SD カードが認識されていることがわかります。

## micro SD にパーティションを作成する 
fdisk コマンドを実行し、/dev/sdb にパーティションを作成していきます。

```text
$ sudo fdisk /dev/sdb

Welcome to fdisk (util-linux 2.25.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): o    ## <- "o" を入力して新しいDOS ディスクを作成する
Created a new DOS disklabel with disk identifier 0x18b0c30c.

Command (m for help): p    ## <- "p" を入力して現在のパーティションを作成する
Disk /dev/sdb: 28.8 GiB, 30908350464 bytes, 60367872 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x18b0c30c



Command (m for help): n    ## <- "n" を入力して新規パーティションを作成する
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p    ## <- "p" を入力してプライマリパーティションを作成する
Partition number (1-4, default 1): 1    ## <- "1" を入力して1 番目のパーティションを選択する
First sector (2048-60367871, default 2048):     ## <- return を押下してデフォルトのファーストセクタを選択する
Last sector, +sectors or +size{K,M,G,T,P} (2048-60367871, default 60367871): 4095  ## <- 4095 を入力する

Created a new partition 1 of type 'Linux' and of size 1 MiB.

Command (m for help): t    ## <- "t" を入力してパーティションのタイプを選択する
Selected partition 1
Hex code (type L to list all codes): e    ## <- "e" を入力して'W95 FAT16(LBA)' を選択する
If you have created or modified any DOS 6.x partitions, please see the fdisk documentation for additional information.
Changed type of partition 'Linux' to 'W95 FAT16 (LBA)'.

Command (m for help): a    ## <- "a" を入力してboot フラグをon にする
Selected partition 1
The bootable flag on partition 1 is enabled now.

Command (m for help): n    ## <- 新しいパーティションをもうひとつ作成する
Partition type
   p   primary (1 primary, 0 extended, 3 free)
   e   extended (container for logical partitions)
Select (default p): p    ## <- "p" を入力してプライマリパーティションを選択する
Partition number (2-4, default 2): 2  ## <- "2" を選択し、2 番目のパーティションを選択する
First sector (4096-60367871, default 4096):   ## <- return を押して、デフォルトのファーストセクタを選択する
Last sector, +sectors or +size{K,M,G,T,P} (4096-60367871, default 60367871):   ## <- return を押して、デフォルトのラストセクタを選択する

Created a new partition 2 of type 'Linux' and of size 28.8 GiB.

Command (m for help): p    ## <- "p" を入力してパーティションを表示する
Disk /dev/sdb: 28.8 GiB, 30908350464 bytes, 60367872 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x18b0c30c

Device     Boot Start      End  Sectors  Size Id Type
/dev/sdb1  *     2048     4095     2048    1M  e W95 FAT16 (LBA)
/dev/sdb2        4096 60367871 60363776 28.8G 83 Linux


Command (m for help): w    ## <- "w" を入力してパーティションの設定を書き込む
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

```


## パーティションをフォーマットする 
1 番目のパーティションをFAT、2 番目のパーティションをext4 でフォーマットします。

```text
$ sudo mkfs.vfat /dev/sdb1
$ sudo mkfs.ext4 /dev/sdb2
```


## ファイルをコピーする 
boot パーティションにファイルをコピーします。

```text
$ mkdir boot
$ sudo mount /dev/sdb1 boot
$ sudo tar -xJvf bone-uboot.tar.xz -C boot
$ sync
```


micro SD を挿入してBeagle Bone Black のスイッチを入れたら、自動的にmicro SD から起動するように`uEnv.txt` を編集します。
(Beagle Bone Black の電源を入れた時に、自動的にmicro SD カードから起動するようにするには、boot パーティション領域の`uEnv.txt` を編集することで可能になるという情報を幾つか見ましたが、今回自分が使用したubuntu では特に何も手を加える必要はありませんでした。)

```text
$ sudo vim ./boot/uEnv.txt
optargs=
loadfdt=load mmc ${mmcdev}:2 ${fdtaddr} /boot/dtbs/${fdtfile}
loaduimage#mw.l 4804c134 fe1fffff; if load mmc 0:2 ${loadaddr} /boot/zImage; then setenv mmcdev 0; mw.l 4804c194 01200000; echo Booting from external microSD...; else setenv mmcdev 1; if test $mmc0  1; then setenv mmcroot /dev/mmcblk1p2 rw; fi; load mmc 1:2 ${loadaddr} /boot/zImage; mw.l 4804c194 00c00000; echo Booting from internal eMMC...; fi
mmcboot=run mmcargs; bootz ${loadaddr} - ${fdtaddr}
uenvcmd#i2c mw 0x24 1 0x3e; run findfdt; if test $board_name  A335BNLT; then setenv mmcdev 1; mmc dev ${mmcdev}; if mmc rescan; then setenv mmc1 1; else setenv mmc1 0; fi; fi; setenv mmcdev 0; mmc dev ${mmcdev}; if mmc rescan; then setenv mmc0 1; else setenv mmc0 0; fi; run loaduimage && run loadfdt && run mmcboot
```


boot パーティションをアンマウントします。

```text
$ sudo umount /dev/sdb1
$ rmdir boot
```


rootfs パーティションにファイルをコピーします。

```text
$ mkdir rootfs
$ sudo mount /dev/sdb2 rootfs
$ sudo tar -xJvf ubuntu-trusty-14.04-rootfs-3.14.4.1-bone-armhf.com.tar.xz -C rootfs
$ sync
```


必要に応じて、固定IP アドレスをこの時点で設定しておきます。

```text
$ sudo cp -ip ./rootfs/etc/network/interfaces ./rootfs/etc/network/interfaces.org
$ sudo vim ./rootfs/etc/network/interfaces

.......
auto eth0
iface eth0 inet static
address 192.168.1.13
network 192.168.1.0
netmask 255.255.255.0
broadcast 192.168.1.255
gateway 192.168.1.1
dns-nameservers 192.168.1.1
.......
```


rootfs パーティションをアンマウントします。

```text
$ sudo umount rootfs
$ rmdir rootfs
```


## Beagle Bone Black からubuntu を起動 
作業端末からmicro SD を取り出し、Beagle Bone Black のmicro SD 挿入口に入れて、RJ45 ケーブルも取り付けます。
次に5V AC アダプタ、もしくはUSB を接続して電源を入れます。
暫くすると設定したIP アドレスでLinux が立ち上がってくるので、ssh で接続してみます。
初期ユーザとパスワードは`ubuntu/ubuntu` になります。


```text
$ ssh ubuntu@192.168.1.13

ubuntu@ubuntu-armhf:~$ id
uid#1000(ubuntu) gid=1000(ubuntu) groups1000(ubuntu),27(sudo)

ubuntu@ubuntu-armhf:~$ hostname
ubuntu-armhf
```


以下任意で、初期段階で実施しておいたほうが良い内容について記述していきます。

# 初期設定 

## ntp の設定 
初期状態ではntp との時刻同期ができていないので、時刻同期するようにします。


```text:ubuntu-armhf
$ sudo apt-get install ntp
$ sudo cp -ip /etc/ntp.conf /etc/ntp.conf.org
$ sudo vim /etc/ntp.conf
```


参照先ntp サーバを`ntp.nict.jp` に変更します(任意)。

```text:ntp.conf
#server ntp.ubuntu.com
server ntp.nict.jp

※その他初期状態で設定されているntp サーバがあれば、コメントアウトしてください。
```


タイムゾーンを`Asia/Tokyo` に変更します。

```text
$ echo 'Asia/Tokyo' | sudo tee /etc/timezone
$ sudo dpkg-reconfigure -f noninteractive tzdata
```


ntp デーモンを再起動します。


```text:ubuntu-armhf
$ sudo /etc/init.d/ntp restart
$ sudo update-rc.d ntp defaults
```


時刻同期の状態を確認します。


```text:ubuntu-armhf
$ sudo ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
#####################====================================
 ntp-a2.nict.go. .NICT.           1 u   28   64    1    7.831  -12.876   0.004
```


暫くすると同期するはずなので、放置しておきます。

### エラー: Perl のlocale エラーが出る 
Perl のプログラムが使用されると、次のようなエラーメッセージが出力されることがあります。


```text:ubuntu-armhf
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
	LANGUAGE = (unset),
	LC_ALL = (unset),
	LC_PAPER = "ja_JP.UTF-8",
	LC_ADDRESS = "ja_JP.UTF-8",
	LC_MONETARY = "ja_JP.UTF-8",
	LC_NUMERIC = "ja_JP.UTF-8",
	LC_TELEPHONE = "ja_JP.UTF-8",
	LC_IDENTIFICATION = "ja_JP.UTF-8",
	LC_MEASUREMENT = "ja_JP.UTF-8",
	LC_TIME = "ja_JP.UTF-8",
	LC_NAME = "ja_JP.UTF-8",
	LANG = "en_US.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
```


このようなエラーが出た場合は、`locale-gen` コマンドを使用して、ロケール定義をコンパイルします。

```text
$ sudo locale-gen en_US.UTF-8
$ sudo locale-gen ja_JP.UTF-8
```

コンパイルが完了したら、perl コマンドを実行してエラーが出ないことを確認します。

```text
$ perl -e exit
```

# その他の設定 
sshd、ホスト名の設定等、必要に応じて実施してください。

# 参考
BeagleBone Black microSD Card Installation
 http://www.armhf.com/boards/beaglebone-black/bbb-sd-install/

How do I fix my locale issue?
 http://askubuntu.com/questions/162391/how-do-i-fix-my-locale-issue