资讯详情

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

📅 2026/9/26 10:29:31 | 华诺云谱 👁 阅读
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),仅供参考
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑