LoginSignup
6
5

More than 1 year has passed since last update.

M1(Pro|Max)のMacBook ProにUTMを使ってArch Linuxをインストールする

Last updated at Posted at 2021-11-11

はじめに

ARMアーキテクチャCPUであるM1のMacでLinuxを動作させるには、Asahi LinuxのようなネイティブのLinuxを用いるか、QEMU上で動作する仮想マシンとしてLinuxを動作させるかという方法があります。

UTMはQEMUを使いやすくしたGUIのアプリ。今回はこのUTMを使ってM1(Pro|Max)のMacBook ProにArch Linuxをインストールします。

UTMのインストール

UTMはApp Storeから1200円で購入することもできますが、GitHubのリリースページから直接ダウンロードすることもできます。https://github.com/utmapp/UTM/releases

Arch Linuxのイメージを作成する

ここからの作業はUTMでUbuntuを起動してからUbuntu上で作業します。

まず必要なパッケージをインストールします。

sudo apt install qemu-utils libarchive-tools

次にqemuに使う素のimgファイルを作成します。alarmは、(arch linux armの略です)

qemu-img create alarm.img 32G

パーティション作成

次にalarm.imgにパーティションを作成します。

gfdisk alarm.img

oを入力してGPTパーティションテーブルを作成します。

nを入力して先頭パーティションを200Mくらいで作成します。

tを入力してパーティションタイプをEFI systemef00にします。

次にルート(/)に使うパーティンションを作成します。

nを入力して残り全ての領域を使ったパーティションを作成します。パーティションタイプはデフォルトのLinux filesystemとしておきます。

次に作成したパーティションにファイルシステムを作成します。kpartxコマンドでイメージをloopbackデバイスに登録します。

sudo kpartx -av alarm.img

このコマンドを実行すると、/dev/mapper以下にloopNpXのようなデバイスが登録されます。これはイメージファイルのパーティションテーブルからloopbackブロックデバイスをLinuxに認識させています。

次にこのloopbackデバイスにファイルシステムを作成します。

今回はたまたまloop5でしたが、loopbackデバイスの使用状況によってloop4だったりloop6だったりするのでlsblkなどでどのloopbackデバイスが作成されたか確認しておきましょう。

mkfs.vfat -F 32 /dev/mapper/loop5p1
mkfs.ext4 /dev/mapper/loop5p2

次に作成したファイルシステムをマウントします。

mount /dev/mapper/loop5p2 /mnt
mkdir /mnt/boot
mount /dev/mapper/loop5p1 /mnt/boot

/mnt/boot ディレクトリは必ず作成する必要があります。

次にArchLinuxのARM用イメージを取得します。

curl -LO http://os.archlinuxarm.org/os/ArchLinuxARM-aarch64-latest.tar.gz

取得したイメージを/mntに展開します。

sudo bsdtar -xpf ArchLinuxARM-aarch64-latest.tar.gz -C /mnt

fstabの作成

Linuxを正常に起動させるためにfstabの設定でブロックデバイスと、そのマウント先のマップを指定します、。

vim /mnt/etc/fstab

/mnt/etc/fstab
/dev/disk/by-uuid/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX  /       ext4 defaults 0 0
/dev/disk/by-uuid/XXXX-XXXX                             /boot   vfat defaults 0 0

XXXの部分はUUIDなので、lsblkで取得したブロックデバイスに割り当てられたUUIDに書き換えます。

lsblk | grep loop5 >> /mnt/etc/fstab

このコマンドでfstabにUUIDのリストを書き込んでいるので、編集して完成させます。1行目はloop5n2のUUIDを、二行目にはloop5n1のUUIDを記入します。

次にstartup.nshに起動用のコマンドを書き込みます。ここで使うUUIDはloop5n1のものです。

vim /mnt/boot/startup.nsh

Image root=UUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX rw initrd=\initramfs-linux.img

このUUIDも先ほどのUUIDと同じものです。

qcow2イメージへの変換

まず/mntをアンマウントしてloopbackデバイスを削除します。

sudo umount -R /mnt
sudo kpartx -d alarm.img

次にimgファイルをqcow2に変換します。

qemu-img convert -O qcow2 alarm.img alarm.qcow2

UTMのファイル共有設定をしておくと、UbuntuのNautilusファイルエクスプローラからdav://127.0.0.1:9843に接続するとmacOS側のディレクトリが表示できます。

ここに作成したalarm.qcow2イメージをドラッグして転送してください。

UTMでの仮想マシン作成

UTMで新規マシンを作成します。

SystemタブでArchitectureにARM64を指定します。

Screen Shot 2021-11-11 at 13.56.57.png

DrivesタブからImport Driveを行い、先ほど転送したqcow2イメージを取り込みます。

Screen Shot 2021-11-11 at 13.58.03.png

DisplayタブでEmulated Display Cardを、virtio-ramfb-gl (GPU Supported) を選択します。これを選択すると仮想マシンのグラフィックレンダリングにGPUが使われます。

Screen Shot 2021-11-11 at 13.58.42.png

設定を画面を閉じ、再生ボタンから起動すると次のようにArch linuxのログイン画面が表示されます。

Screen Shot 2021-11-11 at 14.01.04.png

初期ユーザ名とパスワードはどちらもrootになっています。ログイン後セキュリティが気になる環境であれば適宜変更してください。

ログインしたら、pacmanコマンドを正常に使えるようにします。

pacman-key --init
pacman-key --populate archlinuxarm

次に各種パッケージを最新にしますが、もしKernelをアップデートしたくない場合があれば次のようにIgnorePkgで指定します。

vim /etc/pacman.conf
IgnorePkg = linux-aarch64

更新を実行します。

pacman -Syu

ここで再起動をしておいてください。

次にefibootmgrでstartup.nshに依存しないようにします。これは必須ではありませんが快適に使うためにはやっておいた方がいいでしょう。

efibootmgr --disk /dev/vda \
  --part 1 \
  --create --label "Arch Linux ARM" \
  --loader /Image \
  --unicode 'root=UUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX rw initrd=\initramfs-linux.img' \
  --verbose

Xの設定

次にXの設定を行います。ここではウィンドウマネジャにi3を選択していますが。KDEやGNOMEなど好きなウインドウマネジャがあればそちらを指定しましょう。

pacman -S i3 xorg-server xorg-xinit

次に~/.xinitrcに解像度の設定を行います。

~/.xinitrc
# load system wide xinit
if [ -d /etc/X11/xinit/xinitrc.d ] ; then
    for f in /etc/X11/xinit/xinitrc.d/?*.sh ; do
        [ -x "$f" ] && . "$f"
    done
    unset f
fi

# screen layout
modename="3024x1910_60.00"
xrandr --newmode $modename 493.75  3024 3264 3592 4160  1910 1913 1923 1979 -hsync +vsync
xrandr --addmode Virtual-1 $modename
xrandr --output Virtual-1 --mode $modename

# HiDPI
xrdb -merge ~/.Xresources

# start i3
exec i3

次に~/.XresourcesにDPIの設定を書き込んでおきます。

~/.Xresources
Xft.dpi = 192

ここまでできたら、startxコマンドを実行するとXが起動するはずです。ただしUTMのバージョンやArch linuxのバージョンなどで動作しないかもしれません。

参考

所感

macOS上でLinuxを使うことができるようになります。ちょっとした用途には十分かと思いますが、やはり仮想マシンなのでLinuxを直接ホストにインストールして使っている状態に比べて不便なところも多いと感じます。

普段からLinuxがメインの仕事をしている方、特にバックエンドエンジニアやインフラエンジニアの仕事が多い人は、素直にLinuxマシンを直接使った方が良さそうです。

逆にフロントエンドエンジニア、動画編集、写真編集などクリエイティブな業務が多い方はmacOSをメインに使うと良いでしょう。

どっちの仕事も満遍なくやる必要がある方は諦めてどっちも使うしかないかもしれません。筋トレしてより多くの荷物を軽々運べるように己を鍛えましょう。

6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5