首页/新闻资讯/正文详情

Multipass 1.16.1 补丁版本解析:gRPC 证书信任链自愈、外部存储目录与 Windows SSHFS 挂载修复

发布时间:2026/9/26 10:29:26 来源:云帆数科 栏目:资讯中心
Multipass 1.16.1 补丁版本解析:gRPC 证书信任链自愈、外部存储目录与 Windows SSHFS 挂载修复
虚拟化开发工具云原生【免费下载链接】multipassMultipass orchestrates virtual Ubuntu instances项目地址https://gitcode.com/gh_mirrors/mu/multipass点击查看免费下载本文基于 docs/reference/release-notes/1.16.1.md 展开。1.16.1 是 Multipass 在 1.16.0 之后发布的一个补丁版本patch release不引入新命令与新功能而是集中修复了三类与证书、外部数据目录和挂载相关的实际问题守护进程在根 CA 不匹配时自动重新生成 gRPC 服务器证书、设置MULTIPASS_STORAGE后证书不可访问、以及sshfs-mount 在 Windows 上chown调用返回错误码。读完本文你将理解 Multipass 证书自愈机制的判定逻辑、外部存储目录的正确配置方法以及挂载权限回调在跨平台上的行为差异并能在升级到 1.16.1 后排查相关报错。版本定位一次聚焦稳定性的补丁发布1.16.1 紧跟在 1.16.0 之后发布属于典型的维护性补丁。从发布说明可以看出其改动范围全部集中在以下三个问题上编号领域问题描述#4218multipassdgRPC 服务器证书在根 CA 不匹配时重新生成#4246证书存储设置MULTIPASS_STORAGE环境变量后证书不可访问#4288sshfs-mount让 Windows 平台上的chown调用返回 0这类补丁版本通常建议所有已部署 1.16.0 的用户尽快升级尤其是那些通过环境变量自定义了数据存储目录、或依赖 Windows 文件挂载权限同步的用户。修复一根 CA 不匹配时自动重新生成 gRPC 服务器证书#4218问题背景Multipass 采用客户端-守护进程client-daemon架构客户端与multipassd之间通过 gRPC 通信并使用本地生成的自签名证书进行 TLS 认证。在早期版本中如果磁盘上已存在的 gRPC 服务器证书与当前根证书root CA不匹配——例如证书损坏、被手工替换、或从旧版本升级导致证书链不一致——守护进程会一直沿用旧证书导致客户端校验失败、通信中断。源码层面的修复逻辑该修复位于 src/cert/ssl_cert_provider.cpp 的make_cert_key_pair函数中L435-L526。函数以证书目录与服务器名称为输入先构造根证书路径multipass_root_cert.pem该文件名定义于 include/multipass/platform.h 的get_root_cert_path()路径为get_root_cert_dir() / multipass_root_cert.pem。当根证书文件、服务器私钥name_key.pem与服务器证书name.pem都存在时守护进程依次执行如下健康检查L444-L498X.509 可加载性检查根证书与服务器证书必须都能作为合法 X.509 文件被加载扩展密钥用法EKU检查通过cert_has_eku_nid(*cert.get(), NID_server_auth)验证服务器证书包含serverAuth用途扩展。该检查带有// TODO: Remove in Multipass 1.18注释说明它是为兼容历史证书而保留的过渡性校验签发关系检查通过is_issuer_of(*root_cert.get(), *cert.get())验证现有根证书确实是该服务器证书的签发者signer有效期检查通过is_expired(*cert.get())确认证书仍在有效期内。只有上述检查全部通过时守护进程才在日志中打印Re-using existing certificates for the gRPC server并复用现有证书任何一项失败EKU 缺失、根证书非签发者、证书过期或无法加载都会走到 L508 的Regenerating certificates for the gRPC server分支重新生成整条信任链生成新的根证书私钥与根证书CertType::Root写入multipass_root_cert.pem用新的根证书签发新的服务器证书CertType::Server写入name.pem与name_key.pem。证书生成底层使用 OpenSSL根证书与服务器证书的签发关系在 src/cert/ssl_cert_provider.cpp 的X509Cert构造逻辑中完成包括设置 Basic Constraints根证书CA:TRUE服务器证书CA:FALSE并用根私钥对服务器证书签名。另外生成证书时对服务器证书有效期有平台性考量L302 附近注释提到 Apple 要求 TLS 服务器证书有效期不超过 825 天。权限细节复用证书时代码还会调用MP_PLATFORM.set_permissions将根证书权限设置为owner_all | group_read | others_read并注释说明与其他守护进程文件不同根证书需要对所有人可读L489-L494——因为客户端需要读取根证书来验证服务器。客户端侧读取根证书的调用可在 src/client/common/client_common.cpp 中看到opts.pem_root_certs MP_UTILS.contents_of(...)。修复二设置MULTIPASS_STORAGE后证书不可访问#4246问题背景Multipass 支持通过环境变量MULTIPASS_STORAGE重定向实例、镜像缓存等外部数据的存储位置。该环境变量的名称定义在 include/multipass/constants.hmultipass_storage_env_var MULTIPASS_STORAGE。在 1.16.0 及更早版本中当用户设置该变量后证书目录的创建与权限处理存在缺陷导致multipassd无法正确访问或创建证书文件进而出现认证失败。源码层面的关联实现在 Windows 平台上存储位置的解析逻辑位于 src/platform/platform_win.cpp 的multipass_storage_location()首先调用mp::utils::get_multipass_storage()读取MULTIPASS_STORAGE环境变量若环境变量非空则直接采用该路径作为存储位置否则回退到%PROGRAMDATA%\Multipass或 QtStandardPaths的默认位置。守护进程启动时会基于该存储位置创建根证书目录并解析存储路径相关调用可参考 src/daemon/daemon_config.cppMP_UTILS.make_dir(...get_root_cert_dir()...)与MP_PLATFORM.multipass_storage_location()。GUI 客户端同样遵循该逻辑见 src/client/gui/ffi/dart_ffi.cpp。1.16.1 的该修复正是确保无论存储目录被重定向到何处证书目录都能被正确创建、权限被正确设置从而避免环境变量一设置证书就不可访问的连锁故障。如何正确配置MULTIPASS_STORAGE若你的场景需要把数据实例、镜像缓存等迁移到其他磁盘请严格参照仓库中的操作指南 docs/how-to-guides/customise-multipass/configure-where-multipass-stores-external-data.md其中 Linuxsnap、macOS、Windows 三种平台的配置方式如下Linuxsnap 安装停止守护进程sudo snap stop multipass若新目录位于/mnt或/media连接可移动媒体接口sudo snap connect multipass:removable-media位于 home 目录则默认已连接创建目录并设置属主mkdir -p path、sudo chown root path写入 systemd override 配置注入环境变量sudo mkdir /etc/systemd/system/snap.multipass.multipassd.service.d/ sudo tee /etc/systemd/system/snap.multipass.multipassd.service.d/override.conf EOF [Service] EnvironmentMULTIPASS_STORAGEpath EOFsudo systemctl daemon-reload迁移数据并同步编辑multipass-vm-instances.json与vault/multipassd-instance-image-records.json中的路径否则实例无法启动sudo snap start multipass重新启动。macOSsudo su launchctl unload /Library/LaunchDaemons/com.canonical.multipassd.plist mv /var/root/Library/Application\ Support/multipassd path ln -s path /var/root/Library/Application\ Support/multipassd launchctl load /Library/LaunchDaemons/com.canonical.multipassd.plist注意multipassd目录应移动为path本身而不是放进path内部。Windows管理员 PowerShellmultipass stop --all Stop-Service Multipass New-Item -ItemType Directory -Path path Set-ItemProperty -Path HKLM:System\CurrentControlSet\Control\Session Manager\Environment -Name MULTIPASS_STORAGE -Value path Copy-Item -Path C:\ProgramData\Multipass\* -Recurse -Force -Destination path Start-Service MultipassWindows 上还需要同步更新vault/multipassd-instance-image-records.json中的path键并在 Hyper-V Manager 中更新各实例的硬盘/DVD 介质路径。该指南同时包含恢复默认存储位置的完整回滚步骤。修复三Windows 上 sshfs-mount 的chown返回 0#4288问题背景Multipass 通过 sshfs-mount 实现主机目录与实例之间的共享挂载multipass mount。挂载协议在文件所有权同步等场景下会调用平台的chown操作。在 Windows 上POSIX 风格的chown语义并不存在此前该调用返回非零值-1会被上层误判为chown 操作失败从而中断挂载流程或产生误导性报错。源码层面的修复逻辑平台抽象层在 include/multipass/platform.h 声明了virtual int chown(const char* path, unsigned int uid, unsigned int gid) const各平台各自实现Unix 系src/platform/platform_unix.cpp委托给系统调用::lchown(path, uid, gid)返回真实结果Windowssrc/platform/platform_win.cpp实现为no-op空操作并返回 0同时输出一条 trace 日志chown() called for ... (uid: ..., gid: ...) but its no-op.sftp_server中调用MP_PLATFORM.chown(...)并依据返回值记录错误日志的位置可见于 src/sshfs_mount/sftp_server.cpp 与 src/sshfs_mount/sftp_server.cpp失败时打印failed to chown ... to owner:... and group:...。因此Windows 上chown统一返回 0 后这些调用点不再把无需执行的操作当作失败处理挂载流程得以顺畅进行。测试验证单元测试 tests/unit/test_sftpserver.cpp 中对chown的 mock 行为覆盖了多种场景正常场景下期望chown被调用并返回 0如 L1715失败场景通过WillOnce(Return(-1))验证错误日志路径如 L939、L1877、L2459权限匹配场景验证了仅对特定 uid/gid 调用chownL3718-L3820 区域。这些测试共同保证了修复后各平台的行为符合预期Unix 保留真实语义Windows 则安全地静默成功。升级建议与反馈渠道1.16.1 作为补丁版本改动范围小、回归风险低建议 1.16.0 用户尽快升级。升级后如仍遇到证书校验失败可先检查守护进程日志中是否出现Existing root certificate is not the signer of the gRPC server certificate或Regenerating certificates for the gRPC server等关键字判断是否触发了证书自愈分支若确认设置了MULTIPASS_STORAGE请核对存储目录的权限与上述配置步骤。更多问题与功能建议可通过 Multipass 官方 GitHub Issues 提交也可在 Multipass Discourse 论坛或 Matrix 房间参与社区讨论详见 docs/reference/release-notes/1.16.1.md 末尾的 Feedback 一节。延伸阅读docs/reference/release-notes/1.16.0.md1.16.0 主版本的发布说明可作为对照了解本次补丁的增量docs/reference/release-notes/index.md全部版本发布说明索引docs/how-to-guides/customise-multipass/configure-where-multipass-stores-external-data.mdMULTIPASS_STORAGE的完整配置与回滚指南src/cert/ssl_cert_provider.cpp证书生成与校验的完整实现src/sshfs_mount/sftp_server.cpp挂载服务端实现与chown调用点。赞分享虚拟化开发工具云原生【免费下载链接】multipassMultipass orchestrates virtual Ubuntu instances项目地址https://gitcode.com/gh_mirrors/mu/multipass点击查看免费下载相关推荐NumPy 1.16.1 补丁版本全解析关键修复、新增特性与源码级验证指南NumPy 1.16.1 补丁版本全解析关键修复、新增特性与源码级验证指南 导读 本指南以 NumPy 官方 1.16.1 版本发布说明 doc/chang科学计算数据分析SciPy 1.16.1 补丁版本解析Python 3.14 支持与关键 Bug 修复全景SciPy 1.16.1 补丁版本解析Python 3.14 支持与关键 Bug 修复全景 SciPy 1.16.1 是继 1.16.0 之后发布的一个 bu科学计算数据科学高性能计算如何3分钟搭好跨设备阅读体系Koodo Reader完整指南如何3分钟搭好跨设备阅读体系Koodo Reader完整指南 地铁上用手机读小说回家切到台式机进度却回到第一页——这大概是电子书读者最熟悉的挫败感。Koo桌面应用前端上一篇bilibili-downloader 指南用本人 Cookie 下载 B站大会员 4K 视频下一篇Harness 项目 Post-M0 发布审计多 Agent 并行协作的整合验证方法论与实施创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

模板化ByteTrack C++实现:卡尔曼滤波、匈牙利匹配与工程部署实战
模板化ByteTrack C++实现:卡尔曼滤波、匈牙利匹配与工程部署实战

简介:面向多目标跟踪场景的 ByteTrack 算法 C 实现源码包,代码完整且已验证,适合计算机视觉方向学生、研究人员或工程师用于算法学习、毕业设计、课程作业或二次开发移植。资源共1610个文件,压缩包约145.66MB,主体包含… · 2026/9/26 10:29:26

Open Code Review:从人肉评审到机器协同的开源工具链实践
Open Code Review:从人肉评审到机器协同的开源工具链实践

我们团队从去年开始把代码评审这件事彻底“流程化”了,前后踩了不少坑,也沉淀出一套我们内部叫open-code-review的方案。这名字取得有点大,其实核心就一句话:用一套开源、可扩展、能落地的工具链,把代码评审从“依赖人… · 2026/9/26 10:29:20

Texture 布局过渡 API(Layout Transition API)完全指南:从布局差异到无缝动画
Texture 布局过渡 API(Layout Transition API)完全指南:从布局差异到无缝动画

移动开发UI组件 【免费下载链接】Texture Smooth asynchronous user interfaces for iOS apps. 项目地址: https://gitcode.com/gh_mirrors/te/Texture 点击查看 免费下载 导读 在 Texture(AsyncDisplayKit)中,Layout Transitio… · 2026/9/26 10:29:20

SST固态变压器技术漫谈【5】采样、驱动与保护系统设计
SST固态变压器技术漫谈【5】采样、驱动与保护系统设计

模块五 采样、驱动与保护系统完整设计 摘要:本章围绕 10 kV / 1 MVA 固态变压器(SST)的采样、驱动与保护三大子系统展开完整设计。采样体系覆盖 16 类关键信号,强调多通道同步采样(偏差 ≤1 μs)与五层抗干扰设计;驱动电路聚焦 SiC/IGBT 的防误导通、驱动电阻匹配与串扰… · 2026/9/26 11:10:59

SST固态变压器技术漫谈【6】PCB、结构与绝缘散热专项设计要点
SST固态变压器技术漫谈【6】PCB、结构与绝缘散热专项设计要点

模块六 PCB、结构与绝缘散热专项设计 摘要:本模块围绕 SST(固态变压器)的工程化落地,系统讲解高压 PCB 布局、爬电与电气间隙、高频散热、高压绝缘工艺及结构工况适配五大专项。核心要点:① 功率回路最小化是第一优先级,用叠层母排把回路电感压到 100 nH 以内;② 高压与… · 2026/9/26 11:10:59

窗口管理程序
窗口管理程序

窗口管理程序(CKGL) 点此下载最新版本(蓝奏云盘)密码:CKGL 点此前往GitCode下载 点此前往GitHub下载 以下是v1.26.09.23部分界面截图 上方界面点击“更改样式”按钮可以进入下方界面 此程序由DEFCONG编写 点此下载最新版本(蓝奏云盘)密码:CKGL · 2026/9/26 11:10:59

Qt — 布局管理器
Qt — 布局管理器

目录 1. 垂直布局 2. 水平布局 3. 网格布局 4. 表单布局(行为N,列固定为2) 5. Spacer 之前使⽤ Qt 在界⾯上创建的控件, 都是通过 "绝对定位 (手动)" 的⽅式来设定的. 也就是每个控件所在的位置, 都需要计算坐标, 最终通过 se… · 2026/9/26 11:10:59

第1章:开发环境搭建,安装乌班图系统
第1章:开发环境搭建,安装乌班图系统

专栏导航 上一篇:第1章:开发环境搭建,安装 VMware 虚拟机 回到目录 下一篇:第1章:了解乌班图环境,命令行中的提示文字 本节前言 对于本节所讲解的知识,有可能,你会需要时不时地参… · 2026/9/26 11:10:59

【STM32开源项目】智能家用垃圾桶
【STM32开源项目】智能家用垃圾桶

目录 一、项目概述 二、实现功能 1、功能详解: 2、项目清单: 3、演示视频: 三、硬件介绍 PCB硬件设计: 四、程序设计 五、项目成品效果图 六、项目总结 七、包含资料 一、项目概述 本项目基于STM32F103C8T6单片机&… · 2026/9/26 11:10:53

数据库课后习题答案别硬背:当测试用例集刷,效率翻倍
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍

简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21

OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40

向下兼容与向上兼容:接口设计中的兼容性策略与工程实践
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践

一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码