はじめに
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
/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
を指定します。
Drives
タブからImport Drive
を行い、先ほど転送したqcow2イメージを取り込みます。
Display
タブでEmulated Display Card
を、virtio-ramfb-gl (GPU Supported)
を選択します。これを選択すると仮想マシンのグラフィックレンダリングにGPUが使われます。
設定を画面を閉じ、再生ボタンから起動すると次のようにArch linuxのログイン画面が表示されます。
初期ユーザ名とパスワードはどちらも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
に解像度の設定を行います。
# 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の設定を書き込んでおきます。
Xft.dpi = 192
ここまでできたら、startx
コマンドを実行するとXが起動するはずです。ただしUTMのバージョンやArch linuxのバージョンなどで動作しないかもしれません。
参考
- Pacman -Syu Kernel Update [SOLVED]: How to Ignore Arch Kernel Upgrades | DigitalOcean
- Virtualisation on M1
- Ubuntu 20.04 | UTM
- UTM
- How to boot Arch Linux ARM in QEMU (patched for M1) · GitHub
- How to run a Minikube on Apple Silicon M1 | by Sophie Kwon | Oct, 2021 | Medium
- 第672回 UTMを使ってM1 Mac上でUbuntuを動かす:Ubuntu Weekly Recipe|gihyo.jp … 技術評論社
- Developing on Apple M1 Silicon with Virtual Environments | by John Rofrano | Nerd For Tech | Medium
- UTMを使ってM1 MacにUbuntu20.04をインストールして、その中でDockerを動かして、その中でUbuntu20.10を動かしてみる - Qiita
所感
macOS上でLinuxを使うことができるようになります。ちょっとした用途には十分かと思いますが、やはり仮想マシンなのでLinuxを直接ホストにインストールして使っている状態に比べて不便なところも多いと感じます。
普段からLinuxがメインの仕事をしている方、特にバックエンドエンジニアやインフラエンジニアの仕事が多い人は、素直にLinuxマシンを直接使った方が良さそうです。
逆にフロントエンドエンジニア、動画編集、写真編集などクリエイティブな業務が多い方はmacOSをメインに使うと良いでしょう。
どっちの仕事も満遍なくやる必要がある方は諦めてどっちも使うしかないかもしれません。筋トレしてより多くの荷物を軽々運べるように己を鍛えましょう。
Comments
Let's comment your feelings that are more than good