MacBook AirにOSXとデュアルブートでArch Linuxを入れる

[MacBook - ArchWiki](https://wiki.archlinux.org/index.php/MacBook)と[Arch Linux Installation with OS X on Macbook Air (Dual Boot)](http://panks.me/posts/2013/06/arch-linux-installation-with-os-x-on-macbook-air-dual-boot/)を参考にしている。
[自作PCにArch Linuxをインストールして環境構築する](http://qiita.com/k0kubun/items/e60fae90c688ac960ab7)と重複する部分が多い。

# Macでの準備
## OSXのクリーンインストール
OSXとArchを共存させる場合はOSXをクリーンインストールしておくのが無難らしい。
OSXのインストールディスクを作成してOptを押しながら起動し、ディスクユーティリティでディスク全体をフォーマットした後OSXをインストールする。
その後、AppStoreでソフトウェア・アップデートをやって再起動する。

ついでに、システム環境設定 > サウンド から内蔵スピーカーの音量を0にしておくと起動音を無効にできる。

## EFI bootable USBメモリを作る
https://www.archlinux.org/download/ からisoを落としておく。

```bash
hdiutil convert -format UDRW -o arch archlinux-2016.04.01-dual.iso
diskutil list # 焼きたいUSBメモリのパスを確認 (/dev/disk2 だったとする)
df # /dev/disk2 の Mounted on を確認 (/Volumes/Arch だったとする)
diskutil umount /Volumes/Arch
sudo dd if=arch.dmg of=/dev/disk2 bs=1m
```

# パーティショニング
## ディスクユーリティでOSX用のパーティションを小さくする
OSX用のパーティションを適当に小さくしておく。余った分は次のステップで削除する。

## インストールメディア(USBメモリ)からパーティションを切る
```bash
$ cgdisk /dev/sda
```

でパーティションを切る。Mac用の3つのパーティションの後には128Mの空きを作ることに注意し、大体以下のような構成にすれば良い。

```
partition  mountpoint  size       type  label
/dev/sda1  /boot/efi   200MiB     vfat  EFI
/dev/sda2  -           ?          hfs+  Mac OS X
/dev/sda3  -           ?          hfs+  Recovery
/dev/sda4  -           100MiB     hfs+  Boot Arch from the Apple boot loader
/dev/sda5  /boot       100MiB     ext4  boot
/dev/sda6  /           ?          ext4  root
```

## フォーマット
/dev/sda4 は AppleのブートローダーからArchを起動するためのもの。便宜上、OSXの方を起動してディスクユーティリティで「Mac OS 拡張(ジャーナリング)」でフォーマットする。これはHFS+のこと。

インストールメディアに戻ってきて以下を実行する。

```
$ mkfs.ext4 /dev/sda5
$ mkfs.ext4 /dev/sda6
```

# インストール
## インターネットに接続する
```bash
$ wifi-menu
$ ping google.com
```

## パーティションのマウント
```bash
$ mount /dev/sda6 /mnt
$ mkdir /mnt/boot
$ mount /dev/sda5 /mnt/boot
```

## パッケージのインストール
```bash
vim /etc/pacman.d/mirrorlist # 適当にミラーを選ぶ
pacstrap /mnt base
genfstab -p /mnt >> /mnt/etc/fstab
```

### SSDを使っている場合
fstabのパラメータを変える必要がある。`vim /mnt/etc/fstab`して、以下のように内容を変更する。

```
/dev/sda5      /boot  ext4  defaults,relatime,stripe=4    0 2
/dev/sda6      /      ext4  defaults,noatime,discard,data=writeback   0 1
```

## システムの設定
```bash
arch-chroot /mnt /bin/bash
echo archlinux > /etc/hostname  # 適当に決める

ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime 
hwclock --systohc --utc 

sudo vi /etc/locale.gen # 必要なロケールのコメントアウトを外す
locale-gen
echo LANG=en_US.UTF-8 > /etc/locale.conf
export LANG=en_US.UTF-8

mkinitcpio -p linux
passwd # rootパスワードの設定
```

# ブートローダー
## GRUBのインストール
```bash
pacman -S grub-efi-x86_64
```

`/etc/default/grub`を以下のように修正する。

```
GRUB_CMDLINE_LINUX_DEFAULT="quiet rootflags=data=writeback"
```

その後、以下のようにしてカレントディレクトリにboot.efiを作成する。

```bash
grub-mkconfig -o /boot/grub/grub.cfg
grub-mkstandalone -o boot.efi -d usr/lib/grub/x86_64-efi -O x86_64-efi --compress=xz boot/grub/grub.cfg
```

作成したboot.efiは別の適当なUSBメモリとかにいれておく。

```bash
$ dmesg | tail # USBメモリのデバイス名を調べる。仮にsdd1とする
$ mkdir /mnt/usbdisk && mount /dev/sdd1 /mnt/usbdisk 
$ cp boot.efi /mnt/usbdisk/
$ umount /mnt/usbdisk
```

今後Wi-Fiが使えるようにするため、以下のものをいれておく。

```bash
$ pacman -S iw wireless_tools wpa_supplicant dialog networkmanager
```

## 再起動してMacで設定をする
```bash
$ exit
$ reboot
```

HFS+フォーマットはすんでいることとして、以下の作業をMacで行なう。

```bash
cd "/Volumes/Boot Arch from the Apple boot loader"
mkdir System mach_kernel
cd System
mkdir Library
cd Library
mkdir CoreServices
cd CoreServices
vim SystemVersion.plist
```

SystemVersion.plistは以下のように修正する。

```xml
<xml version="1.0" encoding="utf-8"?>
<plist version="1.0">
<dict>
    <key>ProductBuildVersion</key>
    <string></string>
    <key>ProductName</key>
    <string>Linux</string>
    <key>ProductVersion</key>
    <string>Arch Linux</string>
</dict>
</plist>
```

あと、CoreServicesに先ほどのboot.efiをコピーする。
その後以下のようにblessでパーティションを起動可能にする。

```bash
$ sudo bless --device /dev/disk0s4 --setBoot
```

ただしEl Capitanだと失敗するので、[OS X 10.11 El Capitanにアップグレードするとblessに失敗する](http://qiita.com/colajam93/items/4811659f8e6ae1981bb5)に書いてあるとおり`csrutil disable`でSIPを切ってからblessする。

すると、Mac起動時にArch Linuxがたちあがるようになる。