MacBook Pro 原生安装 Ubuntu 24.04 ARM 版

news2024/11/16 13:52:36

趁着休假整理家里闲置的设备,看到了一台许久不用的 M2 芯片的 MacBook Pro,想着或许应该把它改造成 ARMv64 的 CI/CD 构建机,于是就有了这篇文章。

本篇文章适用于 M1、M2 全系列的设备,包括:MacBook Air、MacBook Pro、Mac Mini、Mac Studio,以及搭载 M1 芯片的 iMac。

写在前面

在 MacBook Pro 上原生运行 Ubuntu 24.04

2020 年,开源项目 Asahi Linux 成立,旨在通过逆向工程等手段,让 Apple Silicon Mac 设备拥有开放的操作系统生态。为此,项目组需要完成大量的硬件支持、驱动支持和底层工具支持相关的开发工作。

2021 年 8 月,一个对 Apple 生产力工具搭载 M1 的设备这个项目的帖子在 HackNews 上火了,围观群众都摩拳擦掌或各种表示赞许,只等项目作者们排除万难,推出可用的引导工具 m1n1,将封闭 macOS 生态中搭载了 M1/M2 芯片的高续航、高性能轻薄的 Mac 设备的大门砸开。

Asahi Linux 开源项目

2022 年的 5 月下旬,AsahiLinux 发布了它第一个稳定版本 v1.0,第一个能够将 Apple(XNU)引导生态与 Linux 引导生态连接起来的 Bootloader。M1 / M2 设备的大门再也关不严实了。

原项目作者主要维护的 Linux 发行版是 Fedora,为此还带来了和原生 macOS 类似的多显示器支持、HiDPI 支持,OpenGL 支持(甚至是 Vulkan),以及和 PipeWire 和 WirePlumber 合作,来让设备拥有完整的 DSP 解决方案,让电脑音频更加好听。

不过,在 2023 年,越来越多的发行版粉丝加入了 Asahi Linux 发行版泛化的过程里,目前支持的 Linux 发行版已经有十种左右了,包括:Alpine、AOSC、CentOS、Debian、Deepin、Fedora、Gentoo、NixOS、Rocky、Ubuntu。

正巧 Ubuntu 24.04 正式发布

作为 Ubuntu 的老用户,在试用了几个不同的发行版后,我最终还是坚定的选择回了 Ubuntu(UbuntuAsahi/ubuntu-asahi),如果你对 Ubuntu 感兴趣,之前写过的三十篇左右的文章,应该会很有意思,这里就不展开了,有兴趣自取。

对了,任何操作之前,都建议你进行重要数据的备份操作,如果你遇到了需要重装操作系统或者卸载 Linux 操作系统,可以翻阅文章中相关的章节出来。

下面,我们来聊聊怎么在 M1 / M2 芯片的设备上原生安装、运行 Linux。

实战开始

想要在 Mac 设备上运行最新的 Ubuntu 24.04 操作系统,一共分三步:准备安装程序、授权系统启动、更新操作系统。

准备安装程序

所有的 Asahi Linux 发行版的安装程序准备,都是固定的套路(支持自定义 installer config/data),先使用 curl 下载并执行安装脚本:

curl -sL https://ubuntuasahi.org/install | sh

如果你对执行的脚本不放心,可以下载脚本,进行审查,在审查后再进行执行:

# 下载安装程序
curl -sL https://ubuntuasahi.org/install > install.sh
# 审查安装程序
cat install.sh
# 执行安装程序
bash install.sh

执行命令后,不出意外,你将看到类似下面的输出结果:

Bootstrapping installer:
  Checking version...
  Version: v0.7.1
  Downloading...
  Extracting...
  Initializing...

这个安装程序需要使用 root 权限执行,所以,如果安装过程和你询问账号的密码来提权,需要输入密码。

过程中,程序会收集和展示你的系统信息,并展示给你:

Collecting system information...
  Product name: MacBook Pro (13-inch, M2, 2022)
  SoC: Apple M2
  Device class: j493ap
  Product type: Mac14,7
  Board ID: 0x2a
  Chip ID: 0x8112
  System firmware: iBoot-10151.1.1
  Boot UUID: 4A4C1024-1024-1024-1024-49C3B4DF1024
  Boot VGID: 4A4C1024-1024-1024-1024-49C3B4DF1024
  Default boot VGID: 4A4C1024-1024-1024-1024-49C3B4DF1024
  Boot mode: macOS
  OS version: 14.0 (23A344)
  OS restore version: 23.1.344.0.0,0
  Main firmware version: 14.0 (23A344)
  No Fallback System Firmware / rOS
  SFR version: 23.1.344.0.0,0
  SystemRecovery version: 23.4.56.0.0,0 (14.3 23D56)
  Login user: soulteary

Collecting partition information...
  System disk: disk0
...

当基础信息收集完毕后,程序首先会收集和引导我们调整磁盘分区,来腾出一些空间安装新的 Linux 操作系统:

Collecting OS information...

Partitions in system disk (disk0):
  1: APFS [Macintosh HD] (494.38 GB, 6 volumes)
    OS: [B*] [Macintosh HD] macOS v14.0 [disk3s3s1, 4A4C1024-1024-1024-1024-49C3B4DF1024]
  2: APFS (System Recovery) (5.37 GB, 2 volumes)
    OS: [  ] recoveryOS v14.0 [Primary recoveryOS]

  [B ] = Booted OS, [R ] = Booted recovery, [? ] = Unknown
  [ *] = Default boot volume

Using OS 'Macintosh HD' (disk3s3s1) for machine authentication.

Choose what to do:
  r: Resize an existing partition to make space for a new OS
  q: Quit without doing anything
» Action (r): r

如果你没有安装或者提前进行系统分区,那么输入 r 就能够进入分区调整步骤了。接下来程序会询问我们到底要划分多少空间给新的操作系统:

We're going to resize this partition:
  APFS [Macintosh HD] (494.38 GB, 6 volumes)
  Total size: 494.38 GB
  Free space: 431.38 GB
  Available space: 393.38 GB
  Overhead: 0 B
  Minimum new size: 101.01 GB (20.43%)

Enter the new size for your existing partition:
  You can enter a size such as '1GB', a fraction such as '50%',
  or the word 'min' for the smallest allowable size.

  Examples:
  30%  - 30% to macOS, 70% to the new OS
  80GB - 80GB to macOS, the rest to your new OS
  min  - Shrink macOS as much as (safely) possible

» New size (50%): 30%

我个人诉求是主要使用这台机器作为 Linux CI/CD 机器,所以我只给原始操作系统留了 30% 的空间,这样既能做 PE 维护系统以防万一,真需要 macOS 运行的软件,也能切回去运行。

然后,一路回车和 y (同意),用于安装 Linux 的新分区就自动处理好啦:

Resizing will free up 346.07 GB of space.

Note: your system may appear to freeze during the resize.
This is normal, just wait until the process completes.
» Continue? (y/N): y

Started APFS operation
Aligning shrink delta to 346,068,963,328 bytes and targeting a new container size of 148,315,832,320 bytes
Determined the minimum size for the APFS Container to be 62,226,694,144 bytes
Resizing APFS Container designated by APFS Container Reference disk3
The specific APFS Physical Store being resized is disk0s2
[ - 0%..10%.............................................. ] 

Verifying allocated space
The container /dev/disk0s2 appears to be OK
Storage system check exit code is 0
Shrinking APFS Physical Store disk0s2 from 494,384,795,648 to 148,315,832,320 bytes
Shrinking APFS data structures
Shrinking partition
Modifying partition map
Finished APFS operation

Resize complete. Press enter to continue.

当我们的分区调整完毕之后,能够看到程序收集的磁盘信息得到了更新,我们可以执行的动作除了“调整分区”和“退出安装”之外,多了一条“安装操作系统到空闲区域”:

Collecting partition information...
  System disk: disk0

Collecting OS information...

Partitions in system disk (disk0):
  1: APFS [Macintosh HD] (148.32 GB, 6 volumes)
    OS: [B*] [Macintosh HD] macOS v14.0 [disk3s3s1, 4A4C1024-1024-1024-1024-49C3B4DF1024]
  2: (free space: 346.07 GB)
  3: APFS (System Recovery) (5.37 GB, 2 volumes)
    OS: [  ] recoveryOS v14.0 [Primary recoveryOS]

  [B ] = Booted OS, [R ] = Booted recovery, [? ] = Unknown
  [ *] = Default boot volume

Using OS 'Macintosh HD' (disk3s3s1) for machine authentication.

Choose what to do:
  f: Install an OS into free space
  r: Resize an existing partition to make space for a new OS
  q: Quit without doing anything
» Action (f): 

直接回车后,来到操作系统选择列表,类似下面这样。选择我们想要安装的系统,输入对应的数字序号,就能够开始安装啦:

Choose an OS to install:
  1: Ubuntu Desktop 23.10
  2: Ubuntu Desktop 23.04
  3: Ubuntu Desktop 22.04 LTS
  4: Ubuntu Server Minimal
  5: UEFI environment only (m1n1 + U-Boot + ESP)

我这里推荐安装距离 24.04 最近的 23.10,硬件驱动支持的更好。

过程中,依旧是询问我们的用户密码,来获得授权,应给尽给即可。

To continue the installation, you will need to enter your macOS
admin credentials.

Password for soulteary: 

Setting the new OS as the default boot volume...

Installation successful!

Install information:
  APFS VGID: A42B1024-1024-1024-1024-E99F0C481024
  EFI PARTUUID: aebe1024-1024-1024-1024-42bf967a1024

To be able to boot your new OS, you will need to complete one more step.
Please read the following instructions carefully. Failure to do so
will leave your new installation in an unbootable state.

Press enter to continue

到这里,安装就完毕啦,作者比较小心,特别写了一段 “防呆” 文档提醒:

When the system shuts down, follow these steps:

1. Wait 25 seconds for the system to fully shut down.
2. Press and hold down the power button to power on the system.
   * It is important that the system be fully powered off before this step,
     and that you press and hold down the button once, not multiple times.
     This is required to put the machine into the right mode.
3. Release it once you see 'Loading startup options...' or a spinner.
4. Wait for the volume list to appear.
5. Choose 'macbian'.
6. You will briefly see a 'macOS Recovery' dialog.
   * If you are asked to 'Select a volume to recover',
     then choose your normal macOS volume and click Next.
     You may need to authenticate yourself with your macOS credentials.
7. Once the 'Asahi Linux installer' screen appears, follow the prompts.

If you end up in a bootloop or get a message telling you that macOS needs to
be reinstalled, that means you didn't follow the steps above properly.
Fully shut down your system without doing anything, and try again.
If in trouble, hold down the power button to boot, select macOS, run
this installer again, and choose the 'p' option to retry the process.

Press enter to shut down the system.

简单来说,和准备过程相关的有下面的提醒:

关机稍等一些时间,等待系统完全关闭。再次开机时,长按“电源按钮”,而不是按多次按钮,直到看到“加载启动选项…”时再松开。

选择你的 Linux 操作系统启动(看得出我养猫吧)

然后,在启动列表中选择你的 Linux 操作系统。

到这里为止,准备和安装工作就结束啦。

授权系统启动

当我们在启动列表选择了我们的 Linux 操作系统后,首次启动系统,我们需要完成“系统启动切换”的授权。

如果看到了 “macOS 恢复”对话框,我们需要 “选择要恢复的卷”,点击下一步,选择我们安装了 Linux 的分区,然后进行身份验证对其授权。

在界面弹出的终端窗口中,和上文一样,该输入 Mac 设备的用户名和密码的时候,小心输入,并回车确认,几轮下来后,点击回车,设备重启,授权系统启动的工作就结束啦。

更新操作系统

一般情况,如果上面的工作都顺利完成,那么我们将自动的进入 Linux 环境。

默认的账号和密码都是 ubuntu,输入密码,将自动进入 Ubuntu 环境。

因为默认安装的操作系统版本是 Ubuntu 23.10,想要得到最新的 Ubuntu 24.04 LTS 版本,我们需要做一些工作。

默认的 Ubuntu 软件源,可能访问数据会比较慢,可以根据自己的具体情况来做一个软件源替换,比如替换为清华源:

sed -i 's/ports.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list

然后,执行系统所有软件包的更新:

apt update && apt upgrade -y

当软件都更新完毕之后,我们执行 do-release-upgrade 开始 Linux 发行版更新即可:

do-release-upgrade
# 或者
do-release-upgrade -d

如果过程中遇到问题,可以参考《服务端升级 Ubuntu 20.04 LTS 记录》中的方法,来排查和解决。

如果你在过程中遇到了类似 "The following packages have been kept back:" Why and how do I solve it? 的问题,我们可以使用下面的命令来解决问题:

apt-get --with-new-pkgs upgrade -y

执行命令,然后等待程序完成更新即可。

如果你有系统安装洁癖,可以顺手执行一个清理:

apt-get autoremove -y

重启操作系统,再次进入系统,我们就得到了 Ubuntu 24.04 版本的全新操作系统。

其他

替你们踩过一些坑啦,胆大心细的朋友不妨看完。

重新安装 macOS 或清理已安装的 Linux

想要“卸载”已安装的 Linux 非常简单,只需要在开机的时候长按“电源键”,然后选择启动机器的 macOS 系统,进入操作系统中,选择系统自带的“磁盘工具”,选择分区,然后将前三个分区之外“删除掉”(减号按钮),保存修改即可。

如果你在安装过程中,出现了意外情况,或者重复安装将系统分区弄乱了,或者在“卸载”的时候,马大哈的操作错误,导致你需要进行重装,一般情况,我们只需要重启 macOS 操作系统,进入恢复模式,将 WiFi 连上跟着引导重新安装即可,如果出现磁盘分区不可调整,那么在安装完毕系统后,再进行安装即可。

如果你是效率党,或者正巧想快速的重新安装 macOS 到你的设备上,可以采用自制 macOS USB 安装盘的方法,官方有两篇文档应该会对你有帮助《如何下载和安装 macOS》、《创建可引导的 macOS 安装器》。

简单来说,完成你想要的、机器能够安装的 macOS 操作系统,然后“刻盘”安装即可:

sudo /Applications/Install\ macOS\ Sonoma.app/Contents/Resources/createinstallmedia --volume /Volumes/MyVolume

执行完毕,大概会看到类似下面的输出内容:

To continue we need to erase the volume at /Volumes/MyVolume.
If you wish to continue type (Y) then press return: y
Erasing disk: 0%... 10%... 20%... 30%... 100%
Copying essential files...
Copying the macOS RecoveryOS...
Making disk bootable...
Copying to disk: 0%... 10%... 20%... 30%... 40%... 50%... 60%... 70%... 100%
Install media now available at "/Volumes/Install macOS Sonoma"

需要注意的是,我们使用的方案,要求进行安装的原始 macOS 操作系统环境版本在 13.0 以上,也就是说,只支持 Sonoma、Ventura 两个版本或之后的版本(13.x~14.x)。

最近下载 macOS 镜像似乎会因为官方 CDN 的不稳定导致下载总是中断失败,我们可以通过三方下载工具进行下载下面的链接。

# macOS Sonoma 安装包
https://swcdn.apple.com/content/downloads/04/13/052-77516-A_4P7VY083DT/83qy3989rsnylxagdmim3owwjdtc33zfe4/InstallAssistant.pkg

关于项目还在完善的部分

项目目前对于 Mac 设备的支持度

如果你仔细翻看项目对于设备硬件的支持度,你会发现,除了 USB-C 外接显示器,雷电接口、麦克风、TouchID 几个部分外,项目已经支持了所有主要的设备。

如果你不需要这台设备外接输出画面、不需要借用它的雷电接口来做传输、不需要用它来开视频会议,以及不是频繁的使用 TouchID 来解锁设备,像我一样,用它来跑编译构建,或许这个操作系统还是蛮适合你的。

但是如果你有任意上面的需求,或者这台设备不是闲置的笔记本、台式机,我个人是不太建议你这样折腾的,毕竟折腾的本质是为了不折腾。

不过,你也可以许愿作者们更快的支持你需要的功能,保持围观这个文档获取项目完善进度。或者加入他们,一起来完善设备最后几个硬件功能的支持。

最后

这篇文章就写到这里,后续相关的文章,展开聊聊它的使用经验和细节吧。

–EOF


我们有一个小小的折腾群,里面聚集了一些喜欢折腾、彼此坦诚相待的小伙伴。

我们在里面会一起聊聊软硬件、HomeLab、编程上、生活里以及职场中的一些问题,偶尔也在群里不定期的分享一些技术资料。

关于交友的标准,请参考下面的文章:

苏洋:致新朋友:为生活投票,不断寻找更好的朋友

当然,通过下面这篇文章添加好友时,请备注实名和公司或学校、注明来源和目的,珍惜彼此的时间 😄

苏洋:关于折腾群入群的那些事


本文使用「署名 4.0 国际 (CC BY 4.0)」许可协议,欢迎转载、或重新修改使用,但需要注明来源。 署名 4.0 国际 (CC BY 4.0)

本文作者: 苏洋

创建时间: 2024年05月02日
统计字数: 10346字
阅读时间: 21分钟阅读
本文链接: https://soulteary.com/2024/05/02/macbook-pro-natively-installs-arm-ubuntu-24-04.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1643286.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JVM笔记2--垃圾收集算法

1、如何确认哪些对象“已死” 在上一篇文章中介绍到Java内存运行时的各个区域。其中程序计数器、虚拟机栈、本地方法栈3个区域随着线程而生,随线程而灭,栈中的栈帧随着方法的进入和退出而有条不紊的执行着入栈和出栈操作。每个栈帧中分配多少内存基本上…

OpenCV多张图片堆叠显示

OpenCV实现多张图片堆叠显示 程序思路效果代码 程序思路 读取两张或多张图片;获取图片尺寸;选择多张图片中较大的宽度和高度建立画布;合并图片到画布; 效果 代码 import cv2 import numpy as np# 读取两张图片 img1 cv2.imrea…

【软件开发规范篇】JAVA后端开发编程规范

作者介绍:本人笔名姑苏老陈,从事JAVA开发工作十多年了,带过大学刚毕业的实习生,也带过技术团队。最近有个朋友的表弟,马上要大学毕业了,想从事JAVA开发工作,但不知道从何处入手。于是&#xff0…

Endnote X9 20 21如何把中文引用的et al 换(变)成 等

描述 随着毕业的临近,我在写论文时可能会遇到在引用的中文参考文献中出现“et al”字样。有的学校事比较多,非让改成等等,这就麻烦了。 本身人家endnote都是老美的软件,人家本身就是针对英文文献,你现在让改成等等&a…

Fetch的概述和基本使用

03 【Fetch的概述和基本使用】 1.XMLHttpRequest缺点 浏览器提供了原生的AJAX实现类XMLHttpRequest,基于该类实例,我们可以实现在网页上发送AJAX请求到服务端。 但是XMLHttpRequest的设计并不完美,主要体现在以下几个方面: HT…

贪吃蛇(上)Win32API

感谢大佬的光临各位,希望和大家一起进步,望得到你的三连,互三支持,一起进步 个人主页:LaNzikinh-CSDN博客 文章目录 前言一、Win32 API二、地图的绘制和初始化总结 前言 贪吃蛇(也叫做贪食蛇)游…

Noir Dark Mode for Safari:夜间浏览的舒适伴侣

Noir Dark Mode for Safari是一款实用的浏览器插件,它使夜间浏览网页变得更加轻松和舒适。通过自动为访问的每个网站添加暗色模式,Noir减少了用户在暗光环境下浏览网页时可能产生的眼睛疲劳。 Noir的自定义功能允许用户根据自己的喜好调整暗色模式的设置…

配电室智能巡检机器人

近年来,生产过程高度自动化,各工矿企业关键场所需定期巡检维护。但目前巡检主要靠人工,既耗时费力效率又低,且受环境等因素影响,巡检难以全面规范,隐患或问题易被忽视。在此情况下,如何利用现有…

IoTDB 入门教程 基础篇③——基于Linux系统快速安装启动和上手

文章目录 一、前文二、下载三、解压四、上传五、启动六、执行七、停止八、参考 一、前文 IoTDB入门教程——导读 二、下载 下载二进制可运行程序:https://dlcdn.apache.org/iotdb/1.3.1/apache-iotdb-1.3.1-all-bin.zip 历史版本下载:https://archive.…

Linux Systemd基础教程

一、什么是systemd? systemd是Linux系统的一套基本构建模块。它提供了一个系统和服务管理器,作为PID 1运行并启动系统的其余部分。 systemd提供积极的并行化功能,使用套接字和D-Bus激活来启动服务,提供按需启动守护进程&#xf…

金属表面粗糙度对信号的影响

在进行PCB的传输线设计时,如果希望仿真结果更加贴合于实际的效果,就需要考虑很多的附加因素,比如,真实的叠构参数、介电常数、损耗角正切值、蚀刻因子、金属表面粗糙度、玻纤效应等,在常规的信号仿真中,前三…

Git系列:如何为不同的Git仓库设置不同的配置项?

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

如何配置X86应用程序启用大地址模式(将用户态虚拟内存从2GB扩充到3GB),以解决用户态虚拟内存不够用问题?(项目实战案例解析)

目录 1、概述 2、为什么不直接将程序做成64位的? 3、进程内存不足导致程序发生闪退的案例分析 3.1、问题说明 3.2、将Windbg附加到程序进程上进行动态调试 3.3、动态调试的Windbg感知到了中断,中断在DebugBreak函数调用上 3.4、malloc或new失败的…

新手去做抖音小店,这七点千万别忽视!建议收藏!

大家好,我是电商小V 今天咱们就来详细的说一下新手操作抖音小店的几个通病,想要去做抖音小店的小伙伴千万要注意,一定要避免,不要踩坑, 第一点:新手刚去做抖音小店不赚钱的主要原因不是因为你选择了大类目&…

从零开始Hadoop安装和配置,图文手把手教你,定位错误(已部署成功)

文章目录 时间急的可以看速成,虚拟机和配置方法已给出,提供下载的为一台主节点一台分结点的虚拟机下载,只需进行ip地址更换即可 [现成Hadoop配置,图文手把手交你](https://blog.csdn.net/weixin_52521533/article/details/1328627…

7.string

目录 学库一定会看文档 1.Member functions string介绍 2.迭代器iterator 1.正向迭代器 2.反向迭代器 3.反向const 4.反向const 3.容量capacity 0.size(),capacity(),max_size(),length() 1.扩容机制(vs和Linux g对比) 2.clear(&a…

从电商系统认识数据与数据的存储

相信各位读者一年不知道要多少次通过电商App浏览和购买商品。既然大家对电商系统都比较熟悉,我将以电商系统作为研究对象,进一步聊聊数据与数据存储的相关内容。 比如我们在某平台搜索“文件系统”这个关键字,想看看这方面的书籍。当我们输入…

环形链表面试题详解

A. 环形链表1 给你一个链表的头节点 head ,判断链表中是否有环. 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置…

Typescript语法二

继承 继承是⾯向对象编程中的重要机制,允许⼀个类(⼦类或派⽣类)继承另⼀个类(⽗类或基类)的属性和⽅法。⼦类可以直接使⽤⽗类的特性,并根据需要添加新的特性或覆盖现有的特性。这种机制赋予⾯向对象程序良…

OpenCV的周期性噪声去除滤波器(70)

返回:OpenCV系列文章目录(持续更新中......) 上一篇:OpenCV如何通过梯度结构张量进行各向异性图像分割(69) 下一篇 :OpenCV如何为我们的应用程序添加跟踪栏(71) 目录 目标 理论 如何消除傅里叶域中的周期性噪声? 源代码 解释 结果 目…