「Raspberry Pi 3」に「Ubuntu 16.04」を入れる（備忘録）

## 前置き
今回、Raspberry Pi 3にUbuntu 16.04を入れるにあたって、躓く事が多かったので備忘録として残します。
※ 他の環境において、不具合が発生する可能性があります。

## 本記事の環境
Raspberry Pi 3 本体
Ubuntu 17.10 導入済みのPC
MicroSDHC 16GB

## インストール
### イメージのダウンロード
上田ブログさんがバグフィックス済みイメージを配布してくださっているので、[こちら](https://b.ueda.tech/?post=20171223_raspi_ubuntu_image)の記事からダウンロードする。
※ 消えた時のために[ミラー](https://1drv.ms/u/s!AkFX_berynOhafHllLV4HjFP7mw)を置いておきます。

### UbuntuによるSDカードへの書き込み
1. SDカードをアンマウント
2. 「ファイル」を立ち上げる
3. 上記でダウンロードしたイメージのxzファイルをダブルクリック
4. イメージのリストア画面が開くので、SDカードを指定してリストア（イメージの書き込み）

### パーティションの拡張
イメージサイズは8GB。
勝手に拡張されるか分からなかったので「GParted」でext4領域を拡張。

## Raspberry Pi 起動後にすること

### ログイン
ラズパイにSDカードを挿して、起動したらCLIのログイン画面が表示される。
IDとパスワードは初期の"ubuntu"。

### ブートローダと解像度の変更
`apt-get upgrade`で起動しなくなるのを防ぐため、初期のブートローダの「uboot」から「vmlinuz」に変える。
それと、GUI導入時のために解像度をモニターに合わせる。
※ `hdmi_group`と`hdmi_mode`は[RPiconfig](https://elinux.org/RPiconfig)（eLinux wiki）を参照して変更してください。

下記をコメントアウト

``` /boot/firmware/config.txt
kernel=uboot.bin
```

下記を追記

``` /boot/firmware/config.txt
kernel=vmlinuz
initramfs initrd.img followkernel
-----中略-----
device_tree_end=0x8000
-----中略-----
hdmi_group=2
hdmi_mode=16
```

結果

``` /boot/firmware/config.txt
# kernel=uboot.bin
kernel=vmlinuz
initramfs initrd.img followkernel
-----中略-----
# set extended DT area
# device_tree_address=0x100
# device_tree_end=0x8000
device_tree_address=0x02008000
device_tree_end=0x8000
-----中略-----
# hdmi_group=1
# hdmi_mode=1
hdmi_group=2
hdmi_mode=16
```

再起動して、起動時にフルカラー表示が出れば成功。

参考：[Raspberry Pi 3 の Ubuntu を設定する] (https://qiita.com/tnoho/items/b65b899bc15000d1d9ff#u-bootは切っておく)（Qiita）

### アップデートの参照先の変更
アップデートの参照先をJPサーバーに変更してアップデートの速度を早くする。
`/etc/apt/sources.list`の中身をいじるので、**間違えたらaptコマンドが使えなくなります**。
**壊したとき直せる自信がない人はやめときましょう**。

下記のように書き換える。

``` /etc/apt/sources.list
deb http://jp.archive.ubuntu.com/ports/ xenial main restricted universe multiverse
deb-src http://jp.archive.ubuntu.com/ubuntu/ xenial main restricted universe multiverse

deb http://jp.archive.ubuntu.com/ports/ xenial-security main restricted universe multiverse
deb-src http://jp.archive.ubuntu.com/ubuntu/ xenial-security main restricted universe multiverse

deb http://jp.archive.ubuntu.com/ports/ xenial-updates main restricted universe multiverse
deb-src http://jp.archive.ubuntu.com/ubuntu/ xenial-updates main restricted universe multiverse

deb http://jp.archive.ubuntu.com/ports/ xenial-backports main restricted universe multiverse
deb-src http://jp.archive.ubuntu.com/ubuntu/ xenial-backports main restricted universe multiverse
```

参照：[Raspberry Pi 3 に Ubuntu 16.04 LTSをインストールする（Ubuntuカーネル編）](http://gihyo.jp/admin/serial/01/ubuntu-recipe/0450)（技術評論社）

### アップデート

``` :Command_Line
sudo apt-get update
sudo apt-get upgrade
```

### GUIの導入
`ubuntu-desktop`を実行しようとするとcompiz・unityによるバグでまともに扱えない。
今回は`ubuntu-gnome-desktop`で妥協。

下記のコマンドを実行してランゲージパックとデスクトップの環境をインストール

``` :Command_Line
sudo apt-get install ubuntu-gnome-desktop fonts-takao language-pack-ja language-pack-gnome-ja ibus-mozc
```

参考：[Raspberry Pi 3 に Ubuntu 14.04 LTSか16.04 LTSをインストールする ](http://garretcafe.com/blog/3218) （GarretCafe ブログ）

## おまけ
本題とは関係ないけど、まとめておいた方が楽な事を書いておく。

### hostnameの変更
下記を追記

``` :/etc/hosts
127.0.0.1 <HostName>
```

※<>の中身は環境に合わせて変えてください

### パスワードの変更
下記のコマンド実行後新しいパスワードを二回入力

``` :Command_Line
sudo passwd ubuntu
```

### Chromium-Browserの導入
Raspberry Piでは、`ubuntu-desktop`などに標準搭載されている`firefox`が使えません。
`iceweasel`をインストールしようとしても最新の`firefox`がインストールされるので、今回は`chromium-browser`で妥協。

``` :Command_Line
sudo apt-get install chromium-browser
```
※ パッケージが見つからなかったら`apt-get update`などを試してください。

### イメージのバグフィックス
本記事で使用した上田ブログさんのイメージでは`/var/log/lastlog`が消えている。
`echo`だと上手くいかなかったので`touch`を使って空のファイルを作成。

``` :Command_Line
sudo touch /var/log/lastlog
```

## 後書き
こうして手順を並べるととても簡単なのですが、Raspberry PiにUbuntuを入れる記事自体が少ないし、情報が少し古い上に、それぞれ書かれていることが微妙に違うので、とても時間と労力が掛かりました。
同じ苦労をしないために、どうぞお役立てください。

なお、上田ブログさんのイメージを使わない場合の手順もありますので、要望がありましたらお伝えください。改稿するか、新しく記事を認めます。


## 参考資料
- [Raspberry Pi](https://wiki.ubuntu.com/ARM/RaspberryPi)（Ubuntu公式wiki）
- [Raspberry Pi 3 に Ubuntu 14.04 LTSか16.04 LTSをインストールする ](http://garretcafe.com/blog/3218)（GarretCafe ブログ）
- [Raspberry Pi 3 に Ubuntu 16.04 LTSをインストールする（Ubuntuカーネル編）](http://gihyo.jp/admin/serial/01/ubuntu-recipe/0450)（技術評論社）
- [Raspberry Pi 3 の Ubuntu を設定する](https://qiita.com/tnoho/items/b65b899bc15000d1d9ff)（Qiita）
- [Raspberry Pi 3 用 Ubuntu Server 16.04.3 LTSイメージを更新](https://b.ueda.tech/?post=20171223_raspi_ubuntu_image)（上田ブログ）
- [Rpiconfig](https://elinux.org/RPiconfig)（eLinux wiki）