M1Mac 使用 qemu 配置 archlinux 虚拟机的完整c++开发环境与踩坑指南

本文主要是介绍M1Mac 使用 qemu 配置 archlinux 虚拟机的完整c++开发环境与踩坑指南,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


categories: [Tips]
tags: Linux MacOS

写在前面

之前写了关于 qemu 安装 archlinux 的文章, 但是还有一些内容没得到解决, 比如很多时候 ssh 连接不成功, 这时候用图形界面(默认选项)的优势就体现出来了, 并且如果需要传输文件或者需要使用对外的端口, 仅转发一个22端口是不够的, 最后就是 gdb 调试的整套环境的配置, 这些问题都要解决.

因为服务器太贵了, 也不想续费, 还是本地老老实实跑qemu虚拟机吧…

qemu 的配置-完善版

之前的配置

#!/usr/bin/env bashdiskfile="$HOME/Documents/archlinux-x86_64-cc.qcow2"# if [ $# -ne 1 ]; then
# 	echo "USAGE: $0 disk"
# 	echo " e.g.: $0 Archlinux.qcow2"
# 	exit 1
# fiif [ ! -f $1 ]; thenecho "could not open $1 : no such file"exit 1
finohup qemu-system-x86_64 \-m 2G \-smp cores=3,threads=1,sockets=1,maxcpus=3 \-display none \-nographic \-drive file=${diskfile},if=virtio,cache=none \-nic user,hostfwd=tcp::60024-:8000,hostfwd=tcp::60022-:22 \-accel tcg \-cpu qemu64 \-machine q35 \-monitor tcp:127.0.0.1:60023,server,nowait &# -D $HOME/Documents/archlinux-vm.log \

一些改动:

  • 去掉了日志记录(注释掉了, 放在 28 行), 因为一般来说不会记录日志, 目前还没遇到异常退出的情况
  • 用绝对路径导入虚拟机, 便于配置 alias
  • 如果遇到 ssh 连接不上的情况, 可以注释掉 19,20 行, 注意反斜杠的转义影响, 这样就会开启图形化终端了.
  • 端口转发, 下面 会讲

端口转发

这里比较恶心, 一开始我天真的以为多加入一行端口转发规则即可, 结果怎么也不行, 甚至 ssh 连接都出问题了. 后来发现应该是对指定网卡(nic)上做端口转发, 这在nc进入 monitor 之后使用info usernet 查看就明白了.

所以要加多个端口的转发规则, 只需要使用, 分隔的hostfwd键值对即可.

ssh相关

如果 ssh 连接失败, 可以先等一会, 虽然虚拟机开启来了, 但是 ssh 服务要等一段时间… 耐心等待即可, 推荐用:

ssh-copy-id -i ~/.ssh/id_rsa.pub -f arch@127.0.0.1

之后连接就不需要输入密码了.

测试

gdb 相关环境配置

事实上直接 pacman -Sy 即可, 这里列出需要安装的一些包:

sudo pacman -Sy clang gdb gcc git make cmake vim

性能

跟原生的 x86_64 肯定没法比, 这里给出阿里云的轻量应用服务器跑 sysbench 的对比:

核数都设置了一样的, 性能是阿里云的三分之一左右, 但是想到测试机器是 Mac 的第一款 M1 8+256Air, 感觉已经很不错了…

阿里云服务器

 ==> sysbench cpu --cpu-max-prime=20000000 --threads=2 run
sysbench 1.0.18 (using system LuaJIT 2.1.0-beta3)Running the test with following options:
Number of threads: 2
Initializing random number generator from current timePrime numbers limit: 20000000Initializing worker threads...Threads started!CPU speed:events per second:     0.05General statistics:total time:                          42.3594stotal number of events:              2Latency (ms):min:                                40657.72avg:                                41508.45max:                                42359.1795th percentile:                    42134.07sum:                                83016.89Threads fairness:events (avg/stddev):           1.0000/0.00execution time (avg/stddev):   41.5084/0.85

archlinux 虚拟机(通过 qemu 在 arm Mac 上模拟)

===============================================================
#!/usr/bin/env bashqemu-system-x86_64 \-m 2G \-smp cores=2,threads=2,sockets=1,maxcpus=4 \-nographic \-drive file=Arch-Linux-x86_64-basic.qcow2,if=virtio,cache=none \-nic user,hostfwd=tcp::60022-:22 \-accel tcg \-monitor tcp:127.0.0.1:60023,server,nowait
====================================================================[arch@archlinux ~]$ sysbench cpu --cpu-max-prime=20000000 --threads=4 run
sysbench 1.0.20 (using system LuaJIT 2.0.5)Running the test with following options:
Number of threads: 4
Initializing random number generator from current timePrime numbers limit: 20000000Initializing worker threads...Threads started!CPU speed:events per second:     0.03General statistics:total time:                          138.9636stotal number of events:              4Latency (ms):min:                               138146.60avg:                               138423.84max:                               138962.0095th percentile:                   100000.00sum:                               553695.34Threads fairness:events (avg/stddev):           1.0000/0.00execution time (avg/stddev):   138.4238/0.32

改动核数对性能影响不大, 可能多核模拟导致的吧…

这篇关于M1Mac 使用 qemu 配置 archlinux 虚拟机的完整c++开发环境与踩坑指南的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/348855

相关文章

Python正则表达式匹配和替换的操作指南

《Python正则表达式匹配和替换的操作指南》正则表达式是处理文本的强大工具,Python通过re模块提供了完整的正则表达式功能,本文将通过代码示例详细介绍Python中的正则匹配和替换操作,需要的朋... 目录基础语法导入re模块基本元字符常用匹配方法1. re.match() - 从字符串开头匹配2.

基于 Cursor 开发 Spring Boot 项目详细攻略

《基于Cursor开发SpringBoot项目详细攻略》Cursor是集成GPT4、Claude3.5等LLM的VSCode类AI编程工具,支持SpringBoot项目开发全流程,涵盖环境配... 目录cursor是什么?基于 Cursor 开发 Spring Boot 项目完整指南1. 环境准备2. 创建

C++右移运算符的一个小坑及解决

《C++右移运算符的一个小坑及解决》文章指出右移运算符处理负数时左侧补1导致死循环,与除法行为不同,强调需注意补码机制以正确统计二进制1的个数... 目录我遇到了这么一个www.chinasem.cn函数由此可以看到也很好理解总结我遇到了这么一个函数template<typename T>unsigned

Python使用FastAPI实现大文件分片上传与断点续传功能

《Python使用FastAPI实现大文件分片上传与断点续传功能》大文件直传常遇到超时、网络抖动失败、失败后只能重传的问题,分片上传+断点续传可以把大文件拆成若干小块逐个上传,并在中断后从已完成分片继... 目录一、接口设计二、服务端实现(FastAPI)2.1 运行环境2.2 目录结构建议2.3 serv

通过Docker容器部署Python环境的全流程

《通过Docker容器部署Python环境的全流程》在现代化开发流程中,Docker因其轻量化、环境隔离和跨平台一致性的特性,已成为部署Python应用的标准工具,本文将详细演示如何通过Docker容... 目录引言一、docker与python的协同优势二、核心步骤详解三、进阶配置技巧四、生产环境最佳实践

MyBatis分页查询实战案例完整流程

《MyBatis分页查询实战案例完整流程》MyBatis是一个强大的Java持久层框架,支持自定义SQL和高级映射,本案例以员工工资信息管理为例,详细讲解如何在IDEA中使用MyBatis结合Page... 目录1. MyBATis框架简介2. 分页查询原理与应用场景2.1 分页查询的基本原理2.1.1 分

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——

springboot中使用okhttp3的小结

《springboot中使用okhttp3的小结》OkHttp3是一个JavaHTTP客户端,可以处理各种请求类型,比如GET、POST、PUT等,并且支持高效的HTTP连接池、请求和响应缓存、以及异... 在 Spring Boot 项目中使用 OkHttp3 进行 HTTP 请求是一个高效且流行的方式。

MyBatis Plus实现时间字段自动填充的完整方案

《MyBatisPlus实现时间字段自动填充的完整方案》在日常开发中,我们经常需要记录数据的创建时间和更新时间,传统的做法是在每次插入或更新操作时手动设置这些时间字段,这种方式不仅繁琐,还容易遗漏,... 目录前言解决目标技术栈实现步骤1. 实体类注解配置2. 创建元数据处理器3. 服务层代码优化填充机制详

Python实现Excel批量样式修改器(附完整代码)

《Python实现Excel批量样式修改器(附完整代码)》这篇文章主要为大家详细介绍了如何使用Python实现一个Excel批量样式修改器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录前言功能特性核心功能界面特性系统要求安装说明使用指南基本操作流程高级功能技术实现核心技术栈关键函