使用 UTM 在 Apple Silicon 上进行开发

“UTM 是一款可以在你的 iPhone 或 iPad 上运行其他操作系统的应用。它不能在其他系统上运行 iOS。 这使你可以(除此之外)在你的 iOS 设备上以可用的速度运行 Windows 或 Linux。” – UTM 官网 在本文中,我将向你展示如何使用 UTM VMs 虚拟机在 Apple Silicon 上创建 Linux 开发环境。 这种方法建立在我之前描述的技术之上这里

依赖 #

首先,使用 Homebrew 安装 UTM:brew install --cask utm。 然后,安装 brew install cdrtools,它提供 mkisofs。 我们将使用该工具创建一个 init.iso - 我们的种子脚本,用于初始化 VM。 我们需要一堆工具和镜像。

Cloud-Init #

我们将使用 cloud-init 脚本来引导 VM,使其具备开发所需的工具和设置,例如 gitjqgodocker 等。我们还将使用它来配置 SSH 密钥,以便轻松访问。

user-data

#cloud-config
system_info:
  default_user:
   name: fedora
users:
 - name: fedora
  sudo: ['ALL=(ALL) NOPASSWD:ALL']
  groups: users, admin, docker
  shell: /bin/bash
ssh_authorized_keys:
  - ssh-rsa AAAAB3Nza...
groups:
 - docker
packages:
 - curl
 - wget
 - git
 - jq
 - gcc
 - clang
chpasswd:
 list: |
  fedora:password
 expire: False
resize_rootfs: True
write_files:
 - path: /etc/sysctl.d/enabled_ipv4_forwarding.conf
  content: |
   net.ipv4.conf.all.forwarding=1
 - path: /opt/go.sh
  owner: fedora:fedora
  permissions: '0700'
  content: |
   #!/usr/bin/env bash
   set -ex
   wget https://go.dev/dl/go1.24.1.linux-amd64.tar.gz -O go.tar.gz
   sudo tar -C /usr/local -xzvf go.tar.gz
   rm -rf go
   echo 'export GOROOT=/usr/local/go' >> /home/fedora/.bashrc
   echo 'export GOPATH=$HOME/.go' >> /home/fedora/.bashrc
   echo 'export PATH=$GOPATH/bin:$GOROOT/bin:$PATH' >> /home/fedora/.bashrc
runcmd:
 - [dnf, config-manager, addrepo, --from-repofile="https://download.docker.com/linux/fedora/docker-ce.repo"]
 - [dnf, install, docker-ce, docker-ce-cli, containerd.io]
 - [systemctl, enable, --now, docker]
 - /opt/go.sh

生成 init.iso (mkisofscdrtools 的一部分):

touch meta-data # going to be empty
mkisofs -output init.iso -volid cidata -joliet -rock {user-data,meta-data}

创建 VM #

创建 VM,选择 Emulate: 选择 Other: 硬件配置保持不变: 使用 8GB 磁盘,我们不需要它,稍后会将其删除。 在 Summary 中,命名 VM 并选中 Open VM Settings: 取消选中 UEFI Boot: 使用鼠标右键删除 DisplaySound,并添加 Serial -> Built-In: 删除创建的 Drive,并添加新的 VirtiOImport Fedora-Cloud-Base-Generic-42-1.1.x86_64.qcow2 创建另一个 Drive -> VirtiO,导入 init.iso 运行 VM,如果一切顺利,你将看到如下所示的启动终端: 等待直到出现登录屏幕。 默认用户名是 fedora,密码是 password,如我们的 cloud-init 脚本中所定义。 登录后,给它一点时间,cloud-init script 将需要一些时间来完成所有设置。 VM 初始化完成后,关闭电源并删除 init.iso 驱动器 - 它只需要在第一次启动时运行。 你可以使用 sudo cat /var/log/cloud-init-output.log 检查 cloud-init 脚本的输出。

提示: 要为 Apple Silicon (aarch64) 创建 VM,请按照以下步骤操作:

编码愉快!