M1 MacでUTMにGentooをインストールする
先日、10年ほど使っていたMacbook Airのバッテリが膨張してきたのでM1 Macに買い替えた。
dotfile整備したりdockerなどインストールして、さて次はVirtualBoxを...というところで、VirtualBoxがM1 Macには対応していないことを知った。
代わりの選択肢はいくつかあるが、その一つにUTMという仮想マシン作成ソフトがある。
今回はこのUTMを使ってGentoo Linuxをインストールしてみる。
環境はこちら
~ $ system_profiler SPHardwareDataType Hardware: Hardware Overview: Model Name: MacBook Pro Model Identifier: MacBookPro17,1 Chip: Apple M1 Total Number of Cores: 8 (4 performance and 4 efficiency) Memory: 16 GB System Firmware Version: 6723.140.2 OS Loader Version: 6723.140.2
目次
- 目次
- UTMとは
- Gentooのインストール
- まとめ
UTMとは
UTMは、QEMU(オープンソースのCPUエミュレータ)のラッパー。
VirtualBoxとの違いを以下に簡単にまとめた。
UTM | VirtualBox | |
---|---|---|
ホストOS | macOS(Intel, Apple M1) | macOS(Intel), Windows, Linux(x86/64) |
ゲストOS | Windows, Linux(x86/x64, ARM64) | macOS(Intel), Windows, Linux(x86/64) |
方法 | エミュレーション | 仮想化 |
ポイントとして、UTMではホストとゲストのCPUアーキテクチャが異なっていても動かすことができる(パフォーマンスは落ちるが)。例えば従来のIntel Mac(x64)上でARMアーキテクチャのLinuxを動かしたり、Apple M1(ARM64)上でx64アーキテクチャのLinuxを動かすことができる。
MacbookのIntelチップ搭載モデルは今後生産中止されていくと予想されるので、M1 Macに買い替えた人がUTMを使い始めるケースが増えていくのではないかと思う。
Gentooのインストール
M1 MacはARMアーキテクチャのCPUなので、GentooもARM64をインストールしようと考えていた。
が、残念ながらARM64のハンドブックは現在利用できないので、AMD64をインストールすることにした。*1
wiki.gentoo.org
1. 仮想マシン作成
utmをインストール
brew install --cask utm
以下のハードウェア要件を満たすように仮想マシンを作成する
Gentooをインストールするディスク(NVMEで30GB)と、isoをマウントするディスク(IDE)を作成した
2. インストールメディアの選択
Downloads – Gentoo Linux
上記からamd64のisoイメージをダウンロードし、仮想マシンのCD/DVDにマウントして起動
3. ネットワーク設定
DHCPが動いていない環境だとネットワーク設定手順が必要
今回はDHCP機能付きルータを使っていてすでにpingが通るので何もする必要がない
livecd ~ $ ping -c 3 www.gentoo.org
4. ディスクの準備
livecd ~ $ ls /sys/firmware
acpi dmi efi memmap
efiディレクトリがあるのでUEFIで起動していることが分かる
UEFI起動の場合はGPTでパーティションを作成する*2
4.1 GPT でディスクをパーティショニングする
GPTでEFIシステム、swap、ルートパーティションを作成する
livecd ~ $ fdisk /dev/nvme0n1
# パーティションを作成する(コマンドは省略)
4.2 ファイルシステムを作成する
livecd ~ $ mkfs.vfat -F 32 /dev/nvme0n1p1 livecd ~ $ mkfs.ext4 /dev/nvme0n1p3 livecd ~ $ mkswap /dev/nvme0n1p2 livecd ~ $ swapon /dev/nvme0n1p2
Tips: parted -l コマンドでmountされていないファイルシステムが正しく作成されていることを確認できる
4.3 ルートパーティションのマウント
livecd ~ $ mount /dev/nvme0n1p3 /mnt/gentoo
livecd ~ $ cd /mnt/gentoo
5. Gentooインストールファイルをインストール
5.1 stage tarballをインストールする
日時を設定する
livecd /mnt/gentoo $ ntpd -q -g
amd64 stage openRCをダウンロードする
livecd /mnt/gentoo $ links https://www.gentoo.org/downloads/mirrors/
展開
livecd /mnt/gentoo $ tar xpvf stage3-*.tar.xz --xattrs-include='*.*' --numeric-owner
6. Gentooベースシステムのインストール
6.1 chrootする
DNS情報をコピーする
livecd ~ $ cp --dereference /etc/resolv.conf /mnt/gentoo/etc/
必要なファイルシステムをマウントする
livecd ~ $ mount --types proc /proc /mnt/gentoo/proc livecd ~ $ mount --rbind /sys /mnt/gentoo/sys livecd ~ $ mount --rbind /dev /mnt/gentoo/dev livecd ~ $ mount --rbind /run /mnt/gentoo/run
新しい環境に入る
livecd ~ $ chroot /mnt/gentoo /bin/bash livecd ~ $ source /etc/profile livecd ~ $ export PS1="(chroot) ${PS1}" (chroot) livecd ~ $
ブートパーティションをマウントする
(chroot) livecd ~ $ mount /dev/nvme0n1p1 /boot
6.2 Portageを設定する
Gentoo ebuildリポジトリのスナップショットをインストールする
(chroot) livecd ~ $ emerge-webrsync
@worldの更新
(chroot) livecd ~ $ emerge --ask --verbose --update --deep --newuse @world
6.3 タイムゾーン
(chroot) livecd ~ $ echo "Japan" > /etc/timezone (chroot) livecd ~ $ emerge --config sys-libs/timezone-data
6.4 ロケールの設定
(chroot) livecd ~ $ echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen (chroot) livecd ~ $ locale-gen (chroot) livecd ~ $ eselect locale set 4 #en_US.utf8を選択した (chroot) livecd ~ $ env-update && source /etc/profile && export PS1="(chroot) ${PS1}"
(optiional) vimを使いたい(required)
(chroot) livecd ~ $ emerge --ask vim
7. Linuxカーネルの設定
7.1 カーネルソースのインストール
(chroot) livecd ~ $ emerge --ask sys-kernel/gentoo-sources (chroot) livecd ~ $ eselect kernel set 1 (chroot) livecd ~ $ emerge --ask sys-apps/pciutils
7.2 genkernel*3
genkernelと、依存するlinux-firmwareをインストールするためのライセンス設定
# /etc/portage/package.license # Accepting both licenses for linux-firmware sys-kernel/linux-firmware linux-fw-redistributable no-source-code # Accepting both licenses for genkernel sys-kernel/genkernel linux-fw-redistributable no-source-code
genkernelのインストール
(chroot) livecd ~ $ emerge --ask sys-kernel/genkernel
カーネル(/boot/vmlinuz*)、モジュール群(/lib/modules)、initramfs(/boot/initramfs*)を生成する
# etc/fstab /dev/nvme0n1p1 /boot vfat noauto, noatime 1 2 (chroot) livecd ~ $ genkernel all #1日くらい待つ
8. システムの設定
# etc/fstab /dev/nvme0n1p1 /boot vfat noauto, noatime 1 2 /dev/nvme0n1p2 none swap sw 0 0 /dev/nvme0n1p3 / ext4 noatime 0 1 /dev/cdrom /mnt/cdrom auto noauto, user 0 0 # /etc/conf.d/hostname hostname="zawanishi" # /etc/conf.d/keymaps keymap="jp106"
(chroot) livecd /etc/init.d $ emerge --ask net-misc/dhcpcd (chroot) livecd /etc/init.d $ rc-update add dhcpcd default (chroot) livecd /etc/init.d $ rc-service dhcpcd start # DHCPが既に動いていれば不要 (chroot) livecd ~ $ passwd
9. 必要なシステムツールのインストール
(optional)なくても動くが大体ないと困る
# syslog (chroot) livecd /etc/init.d $ emerge --ask app-admin/sysklogd (chroot) livecd /etc/init.d $ rc-update add sysklogd default # cron (chroot) livecd /etc/init.d $ emerge --ask sys-process/cronie (chroot) livecd /etc/init.d $ rc-update add cronie default # file index (chroot) livecd /etc/init.d $ emerge --ask sys-apps/mlocate # ssh (chroot) livecd /etc/init.d $ rc-update add sshd default
VFATはデフォルトでサポートされていないのでインストールが必要
(chroot) livecd /etc/init.d $ emerge --ask sys-fs/dosfstools
10. ブートローダの設定
GRUB2をインストール
emergeで出てくるメッセージにGRUB_PLATFORMS="efi-64"があることを確認する
(chroot) livecd ~ $ emerge --ask --verbose sys-boot/grub
(chroot) livecd ~ $ grub-install --target=x86_64-efi --efi-directory=/boot (chroot) livecd ~ $ grub-mkconfig -o /boot/grub/grub.cfg
シャットダウン
(chroot) livecd ~ $ exit livecd ~ $ umount -R /mnt/gentoo livecd ~ $ halt
UTMの管理画面でCD/DVDをClearして再起動
Gentooの起動画面が出れば成功
まとめ
楽しみながらLinuxを学ぶことができる。
最適なパフォーマンスを得るための設定をするのは難しい(自分も全然わかってない)が、とりあえず動かすだけならLinux初心者でもなんとかなる。
LPICを取ろうとしている人やLinux環境で仕事をしているけどあんまり詳しくない人、駆け出しエンジニアを抜け出したい人なんかにもオススメしたい。