惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Hugging Face - Blog
Hugging Face - Blog
WordPress大学
WordPress大学
Microsoft Azure Blog
Microsoft Azure Blog
F
Fortinet All Blogs
B
Blog RSS Feed
Last Week in AI
Last Week in AI
The Cloudflare Blog
大猫的无限游戏
大猫的无限游戏
人人都是产品经理
人人都是产品经理
P
Proofpoint News Feed
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Microsoft Security Blog
Microsoft Security Blog
博客园 - 三生石上(FineUI控件)
Y
Y Combinator Blog
GbyAI
GbyAI
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
小众软件
小众软件
雷峰网
雷峰网
C
Check Point Blog
阮一峰的网络日志
阮一峰的网络日志
博客园 - 叶小钗
博客园 - 司徒正美
U
Unit 42
量子位

K.I.S.S

身在 Kimi 的 800 天 写在 Kimi K2 发布之后:再也不仅仅是 ChatBot macOS 按域名切换 DNS 解析 | K.I.S.S 为什么说 GPT 是无损压缩 | K.I.S.S 握着你的手训一个类GPT语言模型 (二) | K.I.S.S 握着你的手训一个类GPT语言模型 (一) | K.I.S.S Fit an Overfit with MegEngine 把 CUPS 扔进 docker 里 ASUS Chromebook Flip | K.I.S.S GPG 与 SSH Agent 转发 使用 dnsmasq 和 ipset 的策略路由 YubiKey 4 简介与配置 | K.I.S.S 定制GH60机械键盘 | K.I.S.S Debian 网络安装内核参数 | K.I.S.S 我的 Vim 配置 | K.I.S.S Libinput 与 Udev | K.I.S.S 给妹子看的 Arch Linux 桌面日常安装 | K.I.S.S 修复GTK3 CSD外观 | K.I.S.S 握着你的手教你画哀女王 | K.I.S.S R.I.P Google Reader | K.I.S.S Richard Stallman仍然是对的 | K.I.S.S Scala 自定义控制结构 | K.I.S.S 入手Wacom Bamboo CTL470 | K.I.S.S 转个型? | K.I.S.S Wish List | K.I.S.S pulseaudio音量问题 | K.I.S.S 入手yubikey,一点小心得 | K.I.S.S 迁移到Octopress | K.I.S.S 自动更新DNSPod记录 | K.I.S.S Linux 用作 IPv6 网关 | K.I.S.S
Rosetta in Linux Virtual Machine on Apple Silicon
2023-01-29 · via K.I.S.S

2021 年底我的主力设备换成 M1 Macbook Pro,整体上还是非常够用的,唯独就是一些 linux 开发搞不定了,所以被迫大小事情都得 ssh 到某个 linux 开发机解决。虽然可以跑 linux 虚拟机,但 linux x86_64 环境还是得用 qemu 跑,速度慢一大截,总是不太爽。

不过最近我在网上冲浪的时候发现 UTM 支持1了 guest 内使用 Rosetta 运行 x86_64 的 binary 了 ,喜大普奔。

基础配置

配置还是非常容易的,参照 UTM 的 multi-arch debian 的配置教程 ,简要写一下。

首先用 Apple Virtualization Framework 作为 backend 创建一个虚拟机,勾上 Enable Rosetta,装一个 aarch64 的 Linux 发行版,比如 debian。

进入 guest,装上 binfmt-support 包,然后把 rosetta binary loader 挂上

sudo mkdir /media/rosetta
sudo mount -t virtiofs rosetta /media/rosetta

# 自动挂载
echo 'rosetta	/media/rosetta	virtiofs	ro,nofail	0	0' >> /etc/fstab

然后把 rosetta 注册成 x86_64 的 ELF loader 即可

sudo /usr/sbin/update-binfmts --install rosetta /media/rosetta/rosetta \
     --magic "\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x3e\x00" \
     --mask "\xff\xff\xff\xff\xff\xfe\xfe\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff" \
     --credentials yes --preserve no --fix-binary yes

这时已经可以跑 x86_64 的 binary 了,但是系统缺库,可以参照 Debian 的文档 把 amd64 的装上。

不过multi-arch debian有一些小坑,比如因为路径冲突,不能同时安装某个软件的 arm64 和 x86_64 版本,瞎折腾的话很容易就把系统弄得乱糟糟。

但是我们可以用 docker 呀!

Docker

直接安装 ARM 的 docker 就可以了。拉镜像的时候指定 x86_64 的镜像,例如

docker pull --platform linux/amd64 ubuntu

运行的时候也需要加上 platform 选项,例如

docker run --platform linux/amd64 -it --rm ubuntu /bin/bash

一切都会丝滑运行。

验证一下是不是真的跑了个 x86_64 的 ubuntu:

在 container 外面看下它是怎么跑起来的:

可见 container 里的 binary 都是被 rosetta 加载运行了。