Macbook Air+ArchLinux+Btrfs+SingleBoot
- Macbook Air 2012 Mid
- MacbookにArchLinuxを入れる場合はファームウェアのアップデートなどを受け取るためにMacOSを残すのが一般的
- 今回はストレージ容量が少ない(100GBちょっと)ので、MacOSを削除して、ArchLinuxだけにする
- RootFSにbtrfsを使う
MacOSにインストールUSBを作成する
macOS の起動可能なインストーラを作成する方法 - Apple サポート
上の公式ページを見て、インストールUSBを作成する。
MacOSを削除する前にファームウェアに関係する設定は済ませてしまう必要がある。
起動音オフ
$ nvram SystemAudioVolume=%00 $ nvram SystemAudioVolume=%00
二回やるといいらしいので、上のコマンドでは二回実行している。
ArchLinuxを入れてから、ファームウェア設定を変えたい場合はMacインストールUSBを使用する。
ArchLinuxのインストールUSBを作成する。
Arch Linux JP Project - ダウンロード
上のArchLinux公式ページからisoイメージをダウンロードして、インストールUSBを作成する。 特に詰まる要素はないので割愛。
USBスティックをMacbookに挿して、Optionキーを押しながら起動すると起動ディスクを選択できるのでUSBスティックを選択して起動。
ArchLinuxをインストールする
パーティション・ファイルシステム
以下のようにパーティション・ファイルシステムを作成する。 パーティションはMBRではなく、GPTにする必要がある。 パーティションを切るときはpartedかcgdiskを使う。
Device | Size | FS Type |
---|---|---|
/dev/sda1 | 512MB | vfat (mkfs.vfat /dev/sda1 ) |
/dev/sda2 | <RAMの二倍> | Linux swap (mkswap /dev/sda2 && swapon /dev/sda2 ) |
/dev/sda3 | 残り全部 | btrfs (mkfs.btrfs /dev/sda3 ) |
この辺りは参考ページを見れば簡単。
btrfsを使っているのでここからが最初のハマりどころ。 btrfs subvolumeを作成して、適切なオプションでマウントする。
loadkeys jp106 #日本語キーボードの場合のみ mount /dev/sda3 /mnt btrfs subvolume create /mnt/@root btrfs subvolume create /mnt/@var btrfs subvolume create /mnt/@snapshots umount /mnt mount -o noatime,compress=lzo,space_cache,subvol=@root /dev/sda3 /mnt mount -o noatime,compress=lzo,space_cache,subvol=@var /dev/sda3 /mnt/var mount -o noatime,compress=lzo,space_cache,subvol=@snapshots /dev/sda3 /mnt/.snapshots mount /dev/sda1 /mnt/boot
Wifiの有効化
pacstrapというコマンドラインツールでArchLinuxのコアとなるパッケージをインストールするが、インターネット接続が必要なため、MacbookのWifiを有効化する。
Wifiの有効化にはwpa_supplicantとwpa_cliを使う。
まずはwpa_supplicantの設定ファイルを以下のように作成する。
- /etc/wpa_supplicant/wifi.conf (設定ファイルの名前は任意)
ctrl_interface=/run/wpa_supplicant update_config=1
wpa_supplicantを起動してwpa_cliでWifiプロファイルを作成。 dhcpdでIPアドレスを取得する。
wpa_supplicant -B -i <wifi device> -c /etc/wpa_supplicant/wifi.conf wpa_cli : 以下wpa_cli上のコマンド scan scan_results add_network 0 set_network 0 ssid "<SSID>" set_network 0 psk "<encrypted key>" enable_network 0 : <C-c>でwpa_cliから抜ける dhcpd <wifi device>
set_networkのダブルクォーテーションは必須。
RootFSの構築
pacstrapを使ってRFSを構築する。
pacstrap /mnt base base-devel btrfs-progs wpa_supplicant iw wireless_tools dialog vim genfstab -U /mnt > /mnt/etc/fstab arch-chroot /mnt
/etc/fstabの内容を書き換える。 subvolume(/var, /.snapshots)のエントリをコメントアウトする。 最終的には以下のような内容になる。
UUID=</dev/sda3のUUID> / btrfs rw,noatime,compress=lzo,ssd,discard,space_cache,subvolid=<subvolid>,subvol=@root 0 0 UUID=</dev/sda1のUUID> /boot vfat <option デフォルトのまま使う>
各種設定
- locale
echo en_US.UTF-8 UTF-8 >> /etc/locale.gen echo ja_JP.UTF-8 UTF-8 >> /etc/locale.gen locale-gen
- 時刻設定
ln -fs /usr/share/zoneinfo/Asia/Tokyo /etc/localtime hwclock --systohc --utc
- hostname
echo <your name> >> /etc/hostname
- vconsole.conf
echo 'KEYMAP=jp106' >> /etc/vconsole.conf
- network
systemctl enable systemd-networkd systemctl enable systemd-resolved systemctl enable dhcpcd.service
- ユーザ追加・sudo設定
useradd -m -g users -G wheel -s /bin/bash <you> && passwd <you> sudo pacman -S sudo
上記コマンド実行後、visudoを実行して%wheelの行をコメントアウトする。
- initialramdisk
/etc/mkinitcpio.confを編集する。 HOOKSエントリにkeyboardをbtrfsを追加する。 編集後以下を実行して、initramdiskを作成。
mkinitcpio -p linux
BootLoaderの設定
grubをインストールする
pacman -S grub dosfstools efibootmgr grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=arch_grub --recheck --debug grub-mkconfig -o /boot/grub/grub.cfg mkdir /boot/EFI/boot cp /boot/EFI/arch_grub/grubx64.efi /boot/EFI/boot/bootx64.efi
これだけではFileSystemをマウントできないので以下を実行。
pacman -S refind-efi cp /usr/share/refind/refind_x64.efi /boot/EFI/Boot/bootx64.efi cp -r /usr/share/refind/drivers_x64/ /boot/EFI/Boot/
/boot/EFI/BOOT/refind.confを以下のように作成
scanfor manual timeout 1 # -1 for immediate menuentry "Blah" { loader vmlinuz-linux initrd initramfs-linux.img options "root=PARTUUID=<PARTUUID> rw rootflags=subvol=@root add_efi_memmap" }
PARTUUIDはblkid /dev/sda3
コマンドで確認できる。
exitしてrebootすれば起動する(はず)