MacPorts安装旧版本qemu
我在旧版本 macOS Big Sur 11.7.10 上执行 MacPorts 安装 QEMU
使用
ports 安装 qemuports install qemu
遇到安装错误:
安装 qemu 错误
---> Attempting to fetch qemu-10.1.1.tar.xz from https://mirror.sjtu.edu.cn/macports/distfiles/qemu
---> Verifying checksums for qemu
---> Extracting qemu
---> Applying patches to qemu
---> Configuring qemu
Warning: Configuration logfiles contain indications of -Wimplicit-function-declaration; check that features were not accidentally disabled:
pthread_condattr_setclock: found in build/meson-logs/meson-log.txt
CPU_ALLOC_SIZE: found in build/meson-logs/meson-log.txt
CPU_ALLOC: found in build/meson-logs/meson-log.txt
CPU_ZERO_S: found in build/meson-logs/meson-log.txt
pthread_setaffinity_np: found in build/meson-logs/meson-log.txt
pthread_getaffinity_np: found in build/meson-logs/meson-log.txt
CPU_FREE: found in build/meson-logs/meson-log.txt
vaesmcq_u8: found in build/meson-logs/meson-log.txt
---> Building qemu
Error: Failed to build qemu: command execution failed
Error: See /opt/local/var/macports/logs/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_emulators_qemu/qemu/main.log for details.
Error: Follow https://guide.macports.org/#project.tickets if you believe there is a bug.
Error: Processing of port qemu failed
具体的编译日志错误如下:
编译 qemu 错误
:info:build [1497/3528] /opt/local/bin/clang-mp-17 -m64 -Ilibblockdev.a.p -I. -I../qemu-10.1.1 -Iqapi -Itrace -Iui -Iui/shader -I/opt/local/include/glib-2.0 -I/opt/local/lib/glib-2.0/include -fdiagnostics-color=auto -Wall -Winvalid-pch -std=gnu11 -O2 -g -fstack-protector-strong -Wempty-body -Wendif-labels -Wexpansion-to-defined -Wformat-security -Wformat-y2k -Wignored-qualifiers -Winit-self -Wmissing-format-attribute -Wmissing-prototypes -Wnested-externs -Wold-style-definition -Wredundant-decls -Wstrict-prototypes -Wtype-limits -Wundef -Wvla -Wwrite-strings -Wno-gnu-variable-sized-type-not-at-end -Wno-initializer-overrides -Wno-missing-include-dirs -Wno-psabi -Wno-shift-negative-value -Wno-string-plus-int -Wno-tautological-type-limit-compare -Wno-typedef-redefinition -iquote . -iquote /opt/local/var/macports/build/qemu-d756fd6b/work/qemu-10.1.1 -iquote /opt/local/var/macports/build/qemu-d756fd6b/work/qemu-10.1.1/include -iquote /opt/local/var/macports/build/qemu-d756fd6b/work/qemu-10.1.1/host/include/x86_64 -iquote /opt/local/var/macports/build/qemu-d756fd6b/work/qemu-10.1.1/host/include/generic -iquote /opt/local/var/macports/build/qemu-d756fd6b/work/qemu-10.1.1/tcg/i386 -mcx16 -msse2 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -fno-strict-aliasing -fno-common -fwrapv -fno-pie -ftrivial-auto-var-init=zero -pipe -Os -isysroot/Library/Developer/CommandLineTools/SDKs/MacOSX11.sdk -arch x86_64 -DNCURSES_WIDECHAR=1 -MD -MQ libblockdev.a.p/blockdev.c.o -MF libblockdev.a.p/blockdev.c.o.d -o libblockdev.a.p/blockdev.c.o -c ../qemu-10.1.1/blockdev.c
:info:build ninja: build stopped: subcommand failed.
:info:build make: *** [run-ninja] Error 1
:info:build make: Leaving directory `/opt/local/var/macports/build/qemu-d756fd6b/work/build'
:info:build Command failed: cd "/opt/local/var/macports/build/qemu-d756fd6b/work/build" && /usr/bin/make -j8 -w all V=1
:info:build Exit code: 2
:error:build Failed to build qemu: command execution failed
:debug:build Error code: CHILDSTATUS 14514 2
:debug:build Backtrace: command execution failed
:debug:build while executing
:debug:build "system {*}$notty {*}$callback {*}$nice $fullcmdstring"
:debug:build invoked from within
:debug:build "command_exec -callback portprogress::target_progress_callback build"
:debug:build (procedure "portbuild::build_main" line 10)
:debug:build invoked from within
:debug:build "$procedure $targetname"
:error:build See /opt/local/var/macports/logs/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_emulators_qemu/qemu/main.log for details.
发现这里安装的是 qemu-10.1.1_0 ,根据之前 Homebrew安装旧版本qemu ,需要回退到 qemu-9.0.2
安装尚未安装的旧版本
MacPorts 使用 git 来管理仓库文件,要安装旧版本,需要先使用 git 回滚旧版本配置,然后进行安装。具体如下:
找到正确的port commit:
首先访问 MacPorts仓库 ,点击 History 按钮找到旧版本
检索出旧版本qemu配置
# 获取仓库代码
git clone git@github.com:macports/macports-ports.git
# git log 检查提交日志,找到qemu相关项,定位到commit 589c443cbbd87d9b23cb4504f3e9d96556b4ff7e
# 参考 https://stackoverflow.com/questions/7124914/how-to-search-a-git-repository-by-commit-message
git log --all -i --grep="qemu: update to 9.0.2"
# 回滚到指定commit(搜索版本号
git checkout 589c443cbbd87d9b23cb4504f3e9d96556b4ff7e
编译下载port:
编译下载port
cd emulators/qemu
sudo port install
这里有一个报错:
编译下载port报错
Error: Failed to open statefile for qemu: Could not open file: /Users/admin/Downloads/macports-ports/emulators/qemu/Portfile
Error: Follow https://guide.macports.org/#project.tickets if you believe there
is a bug.
Error: Processing of port qemu failed
奇怪,明明有这个 Portfile 文件,为何无法读取?
参考 Specify which version to install with macports ,我发现以前在svn时代,这个port代码仓库是放到 /tmp 目录下来完成 sudo port install
果然,我将 git 的这个仓库目录 macports-ports 移动到 /tmp 目录下(属主我改成了root,但可能不需要改),就能够正常工作了
此时能够正常编译完成,并安装到 /usr/local/bin :
安装后的 qemu 执行文件
qemu-edid qemu-nbd qemu-system-arm
qemu-img qemu-storage-daemon qemu-system-i386
qemu-io qemu-system-aarch64 qemu-system-x86_64