M1Mac使用UTM虚拟机最小化安装x86_64架构的Archlinux


tags: MacOS Tips UTM Archlinux

写在前面

最近看操作系统的课程, 需要用到gnu的代码调试工具gdb, 但是在arm的Mac中并不能安装(只能安装x86_64架构的)

❯ brew install gdb
gdb: The x86_64 architecture is required for this software.
Error: gdb: An unsatisfied requirement failed this build.

正好前几天看到有人用UTM在m1mac上成功安装了Win10(amd64), 我也尝试着安装来着, 但是Win10资源占用太大了, 8GB内存实在吃不消, 特别烫然后还很多bug, 后来我想索性试试Linux, 直接安装命令行界面并通过物理机ssh到虚拟机.

在尝试过Debian之后发现安装速度太慢了, 一不小心又设置了个gnome桌面… 更是内存大户. 最近很火的Archlinux之前也没体验过, 那就来试试吧~

下面主要详解在UTM虚拟机中安装最小化Archlinux(amd64)的主要过程以及其他相关配置:

  1. 非Root用户与相关设置;
  2. 网络与代理;
  3. ssh连接;
  4. C/C++开发环境配置.

系统安装部分主要参考1,2,其余配置参考了3,4,

系统安装

首先进入Index of /archlinux/iso/latest/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror下载Archlinux的ISO镜像包. 这里下载的是最新的archlinux-2022.08.05-x86_64.iso, 然后打开UTM, 选择模拟, 这样就可以使用不同架构的系统环境, 但是相应的性能会有一些差. 内核和内存越大越好, 但是也要根据自己的物理机的情况进行分配, 例如我的机器是8GB+256GB, 我给分配了3内核3GB内存和35GB磁盘, 之后系统安装时候还可以使用交换空间(swap)提高内存.

完成之后, 打开虚拟机(要等一段时间), 进入archlinux安装, 显示的界面如下:

请添加图片描述

在此之前可以通过gnupg验证镜像的签名是否一致, 这里就不详述了.

同步时间服务器

timedatectl set-ntp true

分配磁盘空间并格式化

通过下面的命令查看磁盘, 一般会有一个/dev/sda和一个loop, 我们这里只需要分配/dev/sda即可.

fdisk -l

然后

fdisk /dev/sda

这时候就进入分区工具了:

下面针对UEFI启动方式进行磁盘的分配与格式化, 这里分了三个分区, 分别是:

挂载点分区大小分区类型(fdisk代号)文件系统
/mnt/boot/dev/sda1300MBEFI系统分区(1)FAT
[SAWP]/dev/sda22GBLinux Swap(19)
/mnt/dev/sda332.7GBLinux x86_64根目录(/)ext4

创建分区

输入g创建GPT分区表.

输入n, 创建新分区

第一问:Partition number(分区号)保持默认.

第二问:First sector(起始扇区)保持默认.

第三问:Last sector(结束扇区)填入+300MB, 表示创建一个300MB的EFI启动引导分区.

输入t, 修改分区类型.

第一问:Partition type(分区类型)输入1(EFI分区).

EFI分区创建完成.


再次输入n, 创建新分区

第一问:Partition number(分区号)保持默认.

第二问:First sector(起始扇区)保持默认.

第三问:Last sector(结束扇区)键入+2GB, 创建一个2GB的交换空间.

输入t, 修改分区类型.

第一问:Partition type(分区类型)输入19(交换空间).

交换空间创建完成.


再次输入n, 创建新分区

第一问:Partition number(分区号)保持默认.

第二问:First sector(起始扇区)保持默认.

第三问:Last sector(结束扇区)默认, 即分配剩余所有的空间到根目录.

系统分区创建完成.

输入w, 写入修改.

分区完成.

格式化

#格式化EFI分区
mkfs.fat -F 32 /dev/sda1

#格式化swap
mkswap /dev/sda2

#格式化根目录
mkfs.ext4 /dev/sda3

挂载

#挂载根目录
mount /dev/sda3 /mnt

#创建EFI分区的挂载目录
mkdir -p /mnt/boot/efi

#挂载EFI分区
mount /dev/sda1 /mnt/boot/efi

启动交换空间

#启动交换空间
swapon /dev/sda2

网络配置与工具安装

dhcpcd

下面检测一下:

ping www.baidu.com

然后这里需要更换一下软件源镜像, 要不然之后系统安装会比较慢.

换源的话比较简单, 这里以清华镜像4为例. 直接在管理员权限下使用:

nano /etc/pacman.d/mirrorlist

添加一行:

Server = https://mirrors.tuna.tsinghua.edu.cn/archlinux/$repo/os/$arch

然后ctrl+O保存, ctrl+X退出, 更新镜像缓存即可:

pacman -Syy

系统的安装

通过下面的命令安装系统与必备的软件:

pacstrap /mnt base base-devel linux linux-firmware

这里需要等待一段时间…

#生成挂载信息(fstab文件)
genfstab -U /mnt >> /mnt/etc/fstab

#进入新系统
arch-chroot /mnt

之后需要安装一些工具, 因为虽然默认安装的ISO镜像提供了部分工具(例如dhcpcd), 但是安装的新系统并没有, 如果不安装之后就没法联网了(还得重新挂载安装镜像)

#安装必备工具
pacman -Syu && pacman -S vim dhcpcd networkmanager grub

设置时区,语言,主机名

#时区:上海
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
#设置时间同步
hwclock --systohc

#本地化
#设置编码为utf8
vim /etc/locale.gen
# x掉`en_US.UTF-8 UTF-8`前面的`#`
# ZZ保存退出

# 生成locale配置信息
locale-gen

#添加语言(建议英文)
vim /etc/locale.conf
# 加入: `LANG=en_US.UTF-8` 保存退出

#添加主机名
vim etc/hostname
# 加入你的主机名, 保存退出

#修改hosts
vim /etc/hosts
# 加入:
# `127.0.0.1	localhost
#  ::1		localhost`


# 配置root密码: 
passwd
#需要确认

引导的配置与生成

安装引导程序:

grub-install --target=x86_64-efi --efi-directory=/boot/efi --removable

生成引导的配置文件:

grub-mkconfig -o /boot/grub/grub.cfg

收尾工作

这里要注意的是, 一般比较推荐的是reboot, 即重启, 但这里由于要弹出镜像,我更推荐的是使用poweroff进行关机, 弹出镜像之后再开机, 这样就可以直接进入刚才安装好的系统中了, 如果不弹出安装镜像那就还只能通过挂载点进入系统, 比较麻烦.

首先退出arch-chroot环境, 用exit或者CTRL+D都可.

然后取消挂载:

umount -R /mnt

通过poweroff关机, 然后移除安装介质, 这里就是移除UTM挂载的安装镜像.

安装后的配置

这里是在重新开启archlinux虚拟机之后的一些配置.

添加用户

这里需要使用:

useradd -m -g users -G wheel -s /bin/bash 用户名 
passwd 用户名

进行普通权限用户的添加, 然后在后面登陆ssh的时候就可以先用这个用户名来进行识别, 最后通过su root进入管理员权限.

网络与代理配置

首先需要开启网络配置的系统服务. (root)

systemctl enable dhcpcd #启用开机启动
systemctl start dhcpcd #开启服务

关于代理这里我用的是clash, 开启允许局域网连接之后, 还需要知道物理机的ip地址, 这里的ip是内网ip, 我的是192.168.3.8, 那么这里就需要在archlinux中采用

export http_proxy=192.168.3.8:7890 https_proxy=192.168.3.8:7890

用Google测试一下(curl):

[root@test test]# export http_proxy=192.168.3.8:7890 https_proxy=192.168.3.8:7890
[root@test test]# curl -vv google.com
* Uses proxy env variable http_proxy == '192.168.3.8:7890'
*   Trying 192.168.3.8:7890...
* Connected to 192.168.3.8 (192.168.3.8) port 7890 (#0)
> GET http://google.com/ HTTP/1.1
> Host: google.com
> User-Agent: curl/7.84.0
> Accept: */*
> Proxy-Connection: Keep-Alive
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 301 Moved Permanently
< Content-Length: 219
< Cache-Control: public, max-age=2592000
< Connection: keep-alive
< Content-Type: text/html; charset=UTF-8
< Date: Tue, 30 Aug 2022 04:26:31 GMT
< Expires: Thu, 29 Sep 2022 04:26:31 GMT
< Keep-Alive: timeout=4
< Location: http://www.google.com/
< Proxy-Connection: keep-alive
< Server: gws
< X-Frame-Options: SAMEORIGIN
< X-Xss-Protection: 0
<
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="http://www.google.com/">here</A>.
</BODY></HTML>
* Connection #0 to host 192.168.3.8 left intact

配置好代理主要是想用tldr查看命令, 还是比较方便的, 取消代理的话通过下面的命令完成:

unset http_proxy https_proxy

ssh配置

pacman -Sy openssh
systemctl enable sshd #开机启动
 
systemctl start sshd.service #立即启动

我在iTerm中用ssh命令进行连接, 就可以顺利访问了:

ssh -Y test1@192.168.205.9 #-Y 表示允许X11, 通过用户名方式登录,避免重复
test1@192.168.205.9's password:
X11 forwarding request failed on channel 0
Last login: Thu Aug 25 01:08:16 2022 from 192.168.205.1
[test1@test ~]$

当然, 这里建议还是使用用户名@ip_address的方式进行连接, 否则多个虚拟机的话可能会冲突.

配置好之后就可以最小化UTM 了, 直接用iTerm, 体验会好很多~

GCC配置

这里比较简单, gcc默认已经安装, 所以直接安装gdb即可:

pacman -Sy gdb

演示一个gdb调试的例子:

请添加图片描述

reference


  1. Installation guide (简体中文) - ArchWiki (archlinux.org); ↩︎

  2. archlinux安装教程2021.7.26_liaouser的博客-CSDN博客_archlinux安装; ↩︎

  3. Archlinux 安装教程 - 撸代码 - LuCode.net; ↩︎

  4. archlinux | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror; ↩︎ ↩︎

### 回答1: M1虚拟机是一种模拟物理计算机的软件,可以在不同操作系统之间运行不同的虚拟机。而Win10是Windows 10操作系统的简称。 虚拟机的装置过程相对来说比较简便,首先需要下载并安装一款支持M1芯片的虚拟机软件,如VMware Fusion或Parallels Desktop。接下来,我们需要准备一个Win10的镜像文件,可以从微软官方网站下载合法的ISO文件。然后,在虚拟机软件中创建一个新的虚拟机,并选择相应的操作系统类型和版本,即选择安装Win10。在创建过程中,可以设置虚拟机的内存大小、硬盘空间和其他配置参数。完成设置后,可以开始虚拟机安装过程。在安装过程中,需要选择之前下载的Win10镜像文件,并按照安装向导的指示进行操作。完成安装后,就可以在M1芯片上运行一个虚拟化的Win10操作系统了。 使用M1虚拟机安装Win10可以带来很多方便和效益。首先,可以在Mac电脑上同时运行不同操作系统的软件,扩展了软件运行的范围和灵活性。其次,虚拟机可以提供隔离环境,即在虚拟机中运行的系统与宿主机系统相互独立,相互不受影响。这样可以在Win10系统上进行各种实验、测试和开发工作,而不会对Mac系统造成不利影响。此外,虚拟机还可以进行文件共享和网络连接等功能,方便用户在不同系统间进行数据传输和协同工作。 总之,通过使用M1虚拟机来装Win10,我们可以在Mac电脑上运行Windows系统,并实现跨平台的操作和开发。这对于我们提高工作效率和提供便利非常有帮助。 ### 回答2: M1芯片是由苹果公司自主研发的一款处理器,其采用ARM架构。由于M1芯片与传统的x86架构有所不同,因此在M1芯片上运行Windows操作系统会存在一些困难。 传统上,虚拟机软件可以帮助用户在同一台计算机上运行多个操作系统。然而,目前大多数虚拟机软件都是基于x86架构设计的,并不支持M1芯片。 虽然M1芯片上运行Windows操作系统的虚拟机软件目前较为有限,但还是有一些解决方案可以实现在M1芯片上运行Windows 10。 首先,用户可以通过使用CrossOver软件来在M1芯片上运行Windows 10的部分应用程序。CrossOver是一款基于Wine项目的商业软件,可以在类Unix系统上运行Windows应用程序。但是它并不支持所有的Windows软件,因此对于一些特定的应用程序可能会存在兼容性问题。 另外,用户还可以使用Parallels Desktop软件在M1芯片上运行Windows 10。Parallels Desktop是一款虚拟机软件,它最近发布了适用于M1芯片的版本。该软件可以在M1芯片上创建一个“虚拟机”,然后在虚拟机安装Windows 10操作系统。虽然该软件在支持的Windows应用程序上工作良好,但对于游戏和其他高性能应用可能会存在一些性能限制。 总体而言,虽然在M1芯片上运行Windows 10的虚拟机软件目前还不完美,但随着技术的进步和开发者的不断努力,相信在未来会有更多的解决方案可以实现在M1芯片上运行Windows 10的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zorchp

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值