Mac Pro 2012にarch linuxをインストール

# はじめに

Mac Pro 2012にarch linuxをインストールする手順です。

公式のarch wikiの[インストールガイド](https://wiki.archlinux.jp/index.php/インストールガイド)と[Mac向けガイド](https://wiki.archlinux.jp/index.php/Mac)を読めば大体わかりますが、実際に私がやった時に所々詰まるポイントがあったのでメモ代わりに残します。

概要は
①arch linuxのインストール（今回はシングルブート）をする
②**有線**でインターネット接続する
③Mac Pro内蔵のワイヤレスカードのドライバをインストールし、**無線**でインターネット接続する
④ssh接続できるように設定する
です。

正直、最後の「ssh接続できるように設定」はおまけです。

Mac Pro 2012の詳細な物理構成は[こちら](https://support.apple.com/kb/sp652?locale=ja_JP)を参照してください。

# arch linuxのインストール

ほぼ公式の[インストール手順](https://wiki.archlinux.jp/index.php/インストールガイド)通りなので詳細は割愛します。
詰まったら[こちらの記事](https://qiita.com/j8takagi/items/235e4ae484e8c587ca92)を参照にするとよいかもしれません。

`pacstrap`で入れるライブラリとブートローダーについては、追加で補足します。

```
root@archiso ~ # loadkeys jp106
root@archiso ~ # ls /sys/firmware/efi/efivars                # Mac ProはUEFIなので表示される
root@archiso ~ # ip link                                     # 最初は有線接続する
root@archiso ~ # ping archlinux.jp                           # 有線接続で正常性確認
root@archiso ~ # timedatectl set-ntp true
root@archiso ~ # fdisk -l
root@archiso ~ # gdisk /dev/sda                              # sda1にEFIシステムパーティション、sda2にext4ファイルシステムを作成
root@archiso ~ # mkfs.fat -F32 /dev/sda1
root@archiso ~ # mkfs.ext4 /dev/sda2
root@archiso ~ # mount /dev/sda2 /mnt
root@archiso ~ # mkdir /mnt/boot
root@archiso ~ # mount /dev/sda1 /mnt/boot
root@archiso ~ # pacstrap /mnt base linux linux-firmware base-devel vi emacs git openssh iwd zsh intel-ucode   # (補足1) pacstrapについて
root@archiso ~ # genfstab -U /mnt >> /mnt/etc/fstab
root@archiso ~ # arch-chroot /mnt
[root@archiso /]# ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
[root@archiso /]# hwclock --systohc
[root@archiso /]# vi /etc/locale.gen                          # en_US.UTF-8 UTF-8とja_JP.UTF-8 UTF-8をアンコメント
[root@archiso /]# locale-gen
[root@archiso /]# echo "LANG=en_US.UTF-8" > /etc/locale.conf
[root@archiso /]# echo "KEYMAP=jp106" > /etc/vconsole.conf    # 日本語キーボードを使用
[root@archiso /]# echo "macpro" > /etc/hostname               # ホスト名はお好きに
[root@archiso /]# passwd                                      # 好きなrootパスワードを設定
[root@archiso /]# bootctl --path=/boot install                # (補足2) ブートローダーについて
[root@archiso /]# vi /boot/loader/loader.conf                 
[root@archiso /]# ls /boot/vmlinuz-linux | sed s~/boot~~ > /boot/loader/entries/arch.conf
[root@archiso /]# ls /boot/initramfs-linux.img | sed s~/boot~~ >> /boot/loader/entries/arch.conf
[root@archiso /]# blkid -o export UUID /dev/sda2 | grep ^UUID >> /boot/loader/entries/arch.conf
[root@archiso /]# vi /boot/loader/entries/arch.conf           # 上記コマンドである程度埋めた状態で残りを編集すると楽
[root@archiso /]# bootctl list
[root@archiso /]# exit
root@archiso ~ # reboot
```

### (補足1) pacstrapについて

```
root@archiso ~ # pacstrap /mnt base linux linux-firmware base-devel vi emacs git openssh iwd zsh intel-ucode
```

上記コマンドでインストールしているパッケージの説明です。

- `base`, `linux`, `linux-firmware` → この3つは[公式](https://wiki.archlinux.jp/index.php/インストールガイド#.E3.82.A4.E3.83.B3.E3.82.B9.E3.83.88.E3.83.BC.E3.83.AB)手順通り
- `vi`, `emacs` → 好きなエディタを選んでください
（あとで`visudo`を使う時にエディタを使用、emacs使いは`EDITOR`変数を[いじればOK](https://wiki.archlinux.jp/index.php/Sudo#visudo_.E3.82.92.E4.BD.BF.E3.81.86)）
- `git` → ワイヤレスカードのドライバを入れるのに使用
- `iwd` → 無線接続するのに使用
- `openssh` → sshサーバを立てるのに使用
- `zsh` → あると便利、別に無くても可
- `intel-ucode` → Mac Proに入っているCPUはXeonなのでintel CPUのマイクロコードを入れる、別に無くても動くけど入れることを推奨

### (補足2) ブートローダーについて

[公式](https://wiki.archlinux.jp/index.php/Mac#.E3.83.96.E3.83.BC.E3.83.88.E3.83.AD.E3.83.BC.E3.83.80.E3.83.BC.E3.81.AE.E8.A8.AD.E5.AE.9A)にもある通り、Mac Pro 2012へ簡単にブートローダーを入れたいなら[systemd-boot](https://wiki.archlinux.jp/index.php/Systemd-boot#.E8.A8.AD.E5.AE.9A)がおすすめです。[^1]
設定ファイルの中身は以下。設定の意味は[公式](https://wiki.archlinux.jp/index.php/Systemd-boot#.E8.A8.AD.E5.AE.9A)を見てください。

```/boot/loader/loader.conf
default  arch.conf
timeout  4
console-mode max
editor   no
```

`arch.conf`は全部手入力でも良いですが、上記のコマンドを参考にある程度埋めた状態から記入した方がミスが少ないです。コマンドは[こちらの記事](https://qiita.com/j8takagi/items/235e4ae484e8c587ca92)を参考にしました。

```/boot/loader/entries/arch.conf
title   Arch Linux
linux   /vmlinuz-linux
initrd  /intel-ucode.img
initrd  /initramfs-linux.img
options root=UUID=xxxxxxxx-yyyy-zzzz-00000-111111111111 rw
```

ここの編集はミスりやすいので、最後に`bootctl list`で確認することをお勧めします。

# 有線でインターネット接続

上の手順の最後のリブート後にSSDからarch linuxが起動できているとします。

SSDから起動できない時は、何かしらの設定が間違っている可能性が高いので、上を見てやり直してください。

なおSSDから起動していても、上記の状態では**何も設定していないので有線LANを繋いでもネットに繋がりません**。[^2]


ネットワーク関連のデーモンの設定します。

```
[root@macpro ~]# systemctl enable systemd-networkd
[root@macpro ~]# systemctl enable systemd-resolved
```

有線接続の際のコンフィグを設定します。ファイル名はお好きなものにしてください。
とりあえずDHCPを使用し、LANケーブルをMac Proに挿せばネットに繋げるようにします。

```
[root@macpro ~]# emacs /etc/systemd/network/wired.network
```

```/etc/systemd/network/wired.network
[Match]
Name=enp10s0

[Network]
DHCP=ipv4
```

Nameに与えるデバイスの名前ですが、Mac Proの場合は`enp9s0`か`enp10s0`でした。
LANケーブルを挿したのがどっちのポートかは`ip link`で確認してください。
DHCPを使わずに固定IPにしたい、という方は[公式](https://wiki.archlinux.jp/index.php/Systemd-networkd#.E6.9C.89.E7.B7.9A.E3.82.A2.E3.83.80.E3.83.97.E3.82.BF.E3.81.A7_DHCP_.E3.82.92.E4.BD.BF.E7.94.A8)を確認してください。

次にサービスを起動します。

```
[root@macpro ~]# systemctl start systemd-networkd
[root@macpro ~]# systemctl start systemd-resolved
```

ping接続できるようになればOK。

```
[root@macpro ~]# ping archlinux.jp
```

# 無線でインターネット接続

Mac Pro 2012で無線接続できるようにするためには、[Mac pro内蔵のワイヤレスカード](https://wiki.archlinux.jp/index.php/Mac#Wi-Fi)のドライバをインストールする必要があります。

`lspci -vnn -d 14e4:`と実行するとカードのチップIDが**BCM4322**とわかるので、それに対応するドライバを[AUR](https://wiki.archlinux.jp/index.php/Arch_User_Repository)から入れます。[^3]

Macのドライバの詳細な情報は[公式](https://wiki.archlinux.jp/index.php/Mac#Wi-Fi)をご覧ください。

AURからのインストールの際にはroot以外のユーザが必要になるため、まずはユーザを作成します。

```
[root@macpro ~]# useradd -m -G wheel minnsou
```

- `-m`はホームディレクトリを作成するオプション
- `-G wheel`で`wheel`グループに新規ユーザを追加します
- `-s /bin/zsh`を追加すると、ログインシェルが`zsh`になります。

今回はユーザ名を`minnsou`にし、`wheel`グループに所属するユーザが管理者になれるような構成にします。

作成したユーザに好きなパスワードを設定します。

```
[root@macpro ~]# passwd minnsou
```

作成したユーザにルート権限を与えます。
今回は`wheel`グループにルート権限を設定します。

```
[root@macpro ~]# visudo
```

%wheelの行をアンコメントし、以下のようにすればOK。

```:/etc/sudoers 
## Uncomment to allow members of group wheel to execute any command
%wheel ALL=(ALL:ALL) ALL
```

新規ユーザのzshの設定をします。（Zshを使わない人は飛ばしてください）
grml-zsh-configを使うことで、USBインストーラーと同じセットアップになります。
```
[taishi@macpro ~]# chsh -s /bin/zsh
[taishi@macpro ~]# pacman -S grml-zsh-config
```


新規作成したユーザになって、ドライバをインストールしていきます。

```
[root@macpro ~]# su minnsou
```

ワイヤレスカードの[ドライバ](https://aur.archlinux.org/packages/b43-firmware)のインストールします。
`makepkg -si`はrootでは実行できないので注意です。

```
[minnsou@macpro ~]$ git clone https://aur.archlinux.org/b43-firmware.git
[minnsou@macpro ~]$ cd b43-firmware
[minnsou@macpro b43-firmware]$ makepkg -si
```

ドライバを当てるために再起動します。

```
[minnsou@macpro b43-firmware]$ reboot
```

再起動後にちゃんとドライバが当たっているか見てみます。

```
[root@macpro ~]# ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp9s0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether 40:6c:8f:XX:XX:XX brd ff:ff:ff:ff:ff:ff
3: enp10s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
    link/ether 40:6c:8f:XX:XX:XX brd ff:ff:ff:ff:ff:ff
5: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state DOWN mode DORMANT group default qlen 1000
    link/ether a8:96:8a:XX:XX:XX brd ff:ff:ff:ff:ff:ff
```

上記のように`wlan0`が表示されればOK。

無線接続できるように、ネットワークの設定を追加します。
ファイル名は適当です。

```
[root@macpro ~]# emacs /etc/systemd/network/wireless.network
```

```/etc/systemd/network/wireless.network
[Match]
Name=wlan0

[Network]
DHCP=ipv4
```


無線接続のためのデーモンの設定をしていきます。

```
[root@macpro ~]# systemctl enable iwd
[root@macpro ~]# systemctl start iwd
```

無線LANに接続します。
コマンドの詳細は[公式](https://wiki.archlinux.jp/index.php/Iwd)を見てください。

```
[root@macpro ~]# iwctl
[iwd]# device list
[iwd]# station device scan
[iwd]# station device get-networks
[iwd]# station device connect 繋げたいSSID
```

`device`はデバイス名（例えば`wlan0`など）に置き換えてコマンド実行してください。
Mac ProからLANケーブルを抜いた状態で、pingに成功すればOK。

```
ping archlinux.jp
```

# ssh接続できるように設定

最後、OpenSSHをインストールし、ssh接続できるようにしていきます。

```
[root@macpro ~]# pacman -S openssh # 最初にpacstrapで入れた場合は不要
[root@macpro ~]# systemctl enable sshd
```

コンフィグファイルを設定していきます。

```
emacs /etc/ssh/sshd_config
```

パスワードログイン可能に設定します。
下記部分のコメントを外します。

```:/etc/ssh/sshd_config
PasswordAuthentication yes
```

sshdを起動します。

```
systemctl start sshd
```

他のPCからssh接続してみて、ログインできればOKです。

```
ssh minnsou@IPアドレス
```

# 終わりに

ネット接続でかなり手こずったので誰かの役に立てば幸いです。

[^1]: ブートローダーを[GRUB](https://wiki.archlinux.jp/index.php/GRUB)にしたい方は、とりあえず`pacman -S grub efibootmgr`で必要なものをインストールしてから、`grub-install --target=x86_64-efi --efi-directory=/boot --removable`と`grub-mkconfig -o /boot/grub/grub.cfg`と実行することでも可能です。こちらはGRUBとefibootmgrのインストールが必要になります。

[^2]: よく見ると公式ガイドに「[新しくインストールされた環境でネットワーク設定を完了させてください。](https://wiki.archlinux.jp/index.php/インストールガイド#.E3.83.8D.E3.83.83.E3.83.88.E3.83.AF.E3.83.BC.E3.82.AF.E8.A8.AD.E5.AE.9A)」とあるので、このタイミングでネットワークの設定すれば問題ありません。ただ、USBメモリなどから起動したライブ環境ではネットワーク環境の設定が既に入っていることもあり、うまく設定できたのか分かりづらいです。今回はライブ環境ではなくSSDから起動した状態で、ネットワークの設定を行いました。

[^3]: 例えばMacBook Air early 2014のチップIDはBCM4360なので、`pacman -S linux-headers broadcom-wl-dkms`の一発でドライバーが入ります。別の機種の方はどのモジュールを使用するか、公式を見ながらチェックしてください。