1月 31 2018

MacBook 4.1にArch Linuxをインストールする(インストール編)

僕がArch LinuxをインストールするMacBookは、Appleのホームページにも載っていない古い機種で、機種IDが「MacBook 4,1」というものだ。ArchWikiにも機種別の情報は載っていない。
しかし、基本的にArchWikiのMacBookに書かれていることを参考にすれば大丈夫である。そこで解決しない問題は、ネットで探すことになる。

ArchWikiで推奨されているインストール方法は、「Mac OS Xとのデュアルブート」である。macOSを残しておく方がMacBookのファームウェアを書き換えたり、Macの設定を変えたりする時に便利である。したがって、ここではその方法を紹介したいと思う(実際は、Ubuntuを新規に入れていたので、Mac OS X Snow Leopardを再度インストールするところから始めることになったが)。

1.Arch Linuxをインストールするパーティションを作成する

この作業はMac OS Xで行う。ディスクユーティリティを立ち上げ、Macintosh HDを選択し、「+」ボタンを押して、新規にパーティションを作成する。僕の場合は、ハードディスクを2分割することにした。
名前やフォーマット形式はArch Linux側で作成し直すので何でもかまわない。
パーティションを作成し、デスクトップに表示されるのを確認する。

2.インストールCDで起動する

Arch LinuxをダウンロードからISOイメージをダウンロードして、適当なアプリでCDに焼く。CDをセットし、MacBookをオプションキーを押しながら起動すると「Windows」というCDのアイコンが現れる。それを選択してしばらく待つと以下のような画面が表示される。

「Boot Arch Linux」を選択してエンターキーを押すと、ブートが始まる。無事に起動を確認したら、次の作業に移る。

3.Arch Linux側でパーティションを作成する

そのままでは日本語キーボードの設定になっていないので、以下のコマンドを打つ。

# loadkeys jp106

ArchWikiのMacBookを参考にして、Mac OS Xで作成したパーティションを削除して、Arch Linux用に再度パーティションを作り直す。
(注)Mac OS Xのパーティションのルールとして、最後のパーティションの後に「128MB」の空き領域が必要である。詳しくはArchWikiを見てほしい。
なお、メモリが4GB以上ある時には、swapを作成しない方が速くなるとあったので、swapパーティションは作成しなかった。

# cgdisk /dev/sda

cgdiskの画面が表示されるので、「コントロールキー」+「矢印キー」で、Arch Linux用のパーティション番号を選択し、「Delete」と「New」を使い、パーティションを作成していく。
以下の例は、「Mac OS Xとのデュアルブート用のパーティション:100MB」「Arch Linuxのbootパーティション:100MB」「Arch Linuxのrootパーティション:残り全部」を作成したものである。

4.Arch Linuxをインストールする

インストール自体は他のPCと同じである。
ArchWikiのインストールガイドに従ってインストールする。
ただし、MacBook 4,1は無線LANのドライバが有効にならないので、有線で繋いでインストールしなければならない。
インストールガイドにある「起動モードの確認」で、UEFIモードではないとなるが、気にせず先に進む。
インストールが終了したら、ブートローダーの設定に移る。
ブートローダーの設定が終わるまで、chrootしたままでいるようにする。

5.ブートローダーの設定

以下のやり方は、MacBook AirにOSXとデュアルブートでArch Linuxを入れるを参考にした。

まず、GRUBをインストールする。

# pacman -S grub-efi-x86_64

/etc/default/grubを以下のように修正する。エディタにはviやnanoが使える。

GRUB_CMDLINE_LINUX_DEFAULT="quiet rootflags=data=writeback"

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

# 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にコピーしておく。僕はたまたまそばにあった「ATOK for Mac」のUSBを使ったが、問題なくコピーできた。

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

MacBookを再起動して、Mac OS X側の設定に移る。

# exit
# umount -R /mnt
# reboot

6.Mac OS Xでのブートローダーの設定

Mac OS Xで起動したら、デスクトップに「Boot Arch from the Apple boot loader」というボリュームがマウントされているはずである。ターミナルを起動して、以下のようにブート用のディレクトリと「SystemVersion.plist」を作成する。

# cd "/Volumes/Boot Arch from the Apple boot loader"
# mkdir System mach_kernel
# cd System
# mkdir Library
# cd Library
# mkdir CoreServices
# cd CoreServices
# vi SystemVersion.plist

「SystemVersion.plist」には、以下のように記述する。

<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にUSBのboot.efiをコピーする。これはFinderでやった方が簡単である。
その後、blessして「Boot Arch from the Apple boot loader」バーティションを起動可能にする。

# sudo bless --device /dev/disk0sX --setBoot

(注)Xに入る数字はディスクユーティリティで確認する。

これで再起動したら、GRUBの画面が表示されて、Arch Linuxが立ち上がるはずである。

7.トラブルシューティング

僕の場合、機種が古いせいか、以下のようなトラブルに遭遇したので、参考に解決方法を加えておく。

(a)起動してもArch Linuxをインストールしたデバイスが見つからず、「new_root」でしかログインできない

これにはかなり苦戦したが、ネットを探し回って、次のようなサイトを見つけた。
“Unable to find root device” on a fresh ArchLinux install

ここにあるように、/etc/mkinitcpio.confのHOOKSの順番を変えると解決した。blockをautodetectの前に記述するのである。以下の通り。

【変更前】
HOOKS="base udev autodetect block modconf filesystems keyboard fsck"

【変更後】
HOOKS="base udev block autodetect modconf filesystems keyboard fsck"

そして、以下のコマンドを打って、ramdiskを作り直す。

# mkinitcpio -p linux

これでrootでログインできるようになる。

(b)ルートディレクトリのマウントに失敗する

起動中のプロンプトを見ると、「ルートのマウントに失敗した」というエラーが表示されるのだが、システム自体は立ち上がり、ルートでのログインもできる。気持ちの悪いエラーだが、いろいろ調べてみると、fstabの記述に問題があることがわかった。
先に、GRUBを設定した時に「rootflags=data=writeback」と設定したが、それがfstabに反映されていなかった。
/etc/fstabを開き、「data=writeback」に書き換えたらエラーが表示されなくなり、fsckもちゃんと働くようになった。ext4のジャーナリングを有効にするために、必要な設定なのかも知れない。

コメントを残す

Your email address will not be published.