MacBookPro2016で起動できるUbuntu 16.04のUSBメモリを作る

MacBookPro2016で、Ubuntu16.04LTSが起動できるUSBメモリを作ろうと思ったら、思いの外大変だったので、やり方をまとめます。

Ubuntu 17.10 Desktopでも試しましたが、USBメモリに対してインストールしようとすると、失敗しました。

## 概要

* 通常のLinuxのvfatフォーマットのEFI領域だとMacでは起動できないので、ファイルシステムをHFS+フォーマットに書き換える必要がある。
* Ubuntuを普通にインストールしてから、LiveCDで起動して、HFS+にフォーマットしてgrub-installする。
* UbuntuのGRUBのメニューからInstall Ubuntuを選ぶと、Bootcampのブート領域壊すので、ブートローダーをインストールしないインストール方法を取る必要がある（LiveCD起動後`ubinstall -b`を実行）が、VirtualBox上でインストールを行うのが楽だと知った。

## 必要なもの

* USBメモリ
* USBキーボード(インストール直後認識しないため)
* USBマウス(インストール直後認識しないため)

## 手順

VirtualBoxをインストールする。VirtualBox Extension Packも必要。

http://www.oracle.com/technetwork/server-storage/virtualbox/downloads/index.html

Ubuntu 16.04 Desktopのisoをダウンロードする。

https://www.ubuntu.com/download/desktop

VirtualBoxで以下のような仮想マシンを作る。

* Type: Linux
* Version: Ubuntu 64-bit
* System->Motherboard: Enable EFIにチェック
* Storage: Ubuntuのisoのみマウントする
* Ports->USB: Enable USB Controllerにチェックを入れて、USB 3.0 Controllerを選ぶ
* 仮想マシン起動前に、DiskUtilityを起動して、MacでUSBメモリがマウントされていないことを確認する

仮想マシンを起動して、"Install Ubuntu"を選ぶ。インストール先について、Something Elseを選ぶ。

USBメモリに以下のようにパーティションを作る。

* EFI Partition,512MB
* Ext4,マウントポイント:/,残りの容量を割り当てる

![image.png](https://qiita-image-store.s3.amazonaws.com/0/3413/7ead2dee-fd97-8fbe-b7b1-1f211cc28102.png)

あとはそのままインストールする。

インストール後、仮想マシンにUbuntuのisoを再びマウントして（インストール後自動的に外される）、再度仮想マシンを起動し、今度はTry Ubuntuの方を選ぶ。

以下、ターミナルで操作する。

```
# USBメモリのストレージの名前を特定する。(以下、/dev/sdaとする) 
lsusb

# USBメモリが既にマウントされていたら一度マウントを外す。
sudo umount /dev/sda2

# パーティションを変更する。
sudo gdisk /dev/sda
```

パーティションの変更は以下のようにする。

* `p` で、EFIとext4の2つパーティションがあることを確認する(間違ってもMacBook本体出ないことを確認する)
* `d`->`1`で、EFIのパーティションを削除する
* `n`->`1`->サイズについてはそのまま->タイプ:AF00
* `w`で書き込み

HFS+を扱うためのソフトウェアをインストールする

```
sudo apt update
sudo apt install hfsprogs
```

上記でインストール出来ない場合（なぜかそんなことがあった）、以下から直接ダウンロードしてインストールする。

https://packages.ubuntu.com/xenial/hfsprogs

```
sudo apt install ./hfsprogs_332.25-11_amd64.deb
```

HFS+でEFIのパーティションをフォーマットする。

```
sudo mkfs.hfsplus /dev/sda1
```

USBメモリのファイルシステムをマウントして、chrootする。

```
sudo mount /dev/sda2 /mnt
sudo mount /dev/sda1 /mnt/boot/efi
sudo mount -o bind /dev /mnt/dev
sudo mount -o bind /sys /mnt/sys
sudo mount -t proc none /mnt/proc

# 以下をしておくとネットワークが使える
cp /etc/resolv.conf /mnt/etc/resolv.conf

sudo chroot /mnt
```

grub-installに必要なものと、Macでの起動に必要なものをインストールする。

```
sudo add-apt-repository ppa:detly/mactel-utils
sudo apt-get install mactel-boot grub-efi-amd64
```

grub-installをする。

```
mkdir -p /boot/efi/EFI/Ubuntu/
# 以下はMacの仕様上必要らしい
touch /boot/efi/EFI/Ubuntu/mach_kernel
touch /boot/efi/mach_kernel

grub-install --target x86_64-efi --boot-directory=/boot --efi-directory=/boot/efi --bootloader-id=Ubuntu

# Macでブート可能にする
hfs-bless /boot/efi/EFI/Ubuntu/System/Library/CoreServices/boot.efi

exit
```

EFIをフォーマットしたので、fstabを書き換える。

```
# UUIDを調べる
lsusb -o NAME,UUID

sudo vi /mnt/etc/fstab
# UUIDとファイルタイプvfat->hfsplusを書き換える
UUID=C59D-1B30  /boot/efi       hfsplus    defaults        0       1
```

仮想マシンをシャットダウンする。

Optionボタンを押しながらMacを起動することで、Ubuntuが出現する。

あとは、こちらのMacBookPro上でUbuntuを動かした記事を参考に、キーボードとタッチパッドその他が使えるようにセットアップする。

https://qiita.com/jp_taku2/items/00476e439bddfa3a6f96

## 参考

* https://medium.com/@mmiglier/ubuntu-installation-on-usb-stick-with-pure-efi-boot-mac-compatible-469ad33645c9
* http://takuya-1st.hatenablog.jp/entry/2016/12/03/011022
* http://takuya-1st.hatenablog.jp/entry/2016/10/28/011306
* https://moneyforward.com/engineers_blog/2016/02/22/ubuntu/
* https://unix.stackexchange.com/questions/280500/unable-to-reach-network-from-chroot
* http://d.hatena.ne.jp/tmatsuu/20101225/1293262061