Spack v1.2.0 新特性深度解读:全新并行安装器、并发配置组与安装期 SBOM 生成 Spack v1.2.0 新特性深度解读全新并行安装器、并发配置组与安装期 SBOM 生成【免费下载链接】spackA flexible package manager that supports multiple versions, configurations, platforms, and compilers.项目地址: https://gitcode.com/GitHub_Trending/sp/spack本指南基于 CHANGELOG.md 对 Spack 各主要版本的演进记录聚焦最新的v1.2.0特性版本逐一拆解重写后的并行安装器、Concretization Groups并发配置组、Concretization Caching具体化缓存、安装期 SBOM 生成、spack isolate命令与实验性 Landlock 沙箱等核心能力并结合仓库源码lib/spack/spack验证其实现细节帮助你在升级到v1.2.0后快速掌握新安装流程、配置迁移与安全加固手段。一、版本概况与升级概览Spackv1.2.02026-06-21 发布是一个主特性版本CHANGELOG.md 将其定位为围绕新的并行安装器和大量性能改进的发布同时引入了并发配置组concretization groups、实验性构建沙箱build sandboxing与 SBOM 生成等易用性与安全性能力。围绕该版本主要变化集中在以下几个方面领域核心变化安装器全新并行安装器从v1.1.0的实验特性转正为默认单线程事件驱动调度 jobserver 动态共享工作具体化新增 Concretization Groups命名 spec 组各自独立具体化Concretization Caching 默认开启安全安装时自动生成 SPDX 2.3 格式 SBOM新增spack isolate命令实验性 Linux Landlock 沙箱弃用GPG 命令默认不再静默信任密钥include_concrete:弃用若干命令行选项移除二、全新并行安装器从实验到默认v1.2.0将v1.1.0中作为实验特性引入的新安装器设为默认。这是一个完全重写的包安装器核心目标有二更充分的构建并行性与更好的用户体验。2.1 架构单线程事件驱动调度新安装器采用单线程、事件驱动的构建调度器基于非阻塞 I/O。一个spack install进程即可利用 DAG 级并行性——调度器将互不依赖的包构建并发排程而不像旧安装器那样需要为每个包单独派生调度循环。所有并发构建共享一个由 Spack 建立的jobserver一个 POSIX 管道用于管理可组合并行性。这使得构建之间可以动态共享工作直到达到作业上限当一个包受限于单线程的 configure 阶段时其它并行度更高的构建可以接管空余作业数据库写入也经过了优化从二进制缓存批量安装大量包时提速明显。从源码结构看新安装器位于 lib/spack/spack/installer 目录其中 core.py 承担核心调度逻辑schedule.py 负责构建任务排程ui.py 实现交互式终端界面posix.py 与 windows.py 分别提供 POSIX 与 Windows 平台的实现。2.2 新的交互式 TUI最直观的变化是新的交互式终端用户界面TUI它展示所有活跃的、并发运行的构建概览并允许跟随特定构建的日志按v在日志与概览之间切换按n下一个日志按p上一个日志按q或Esc从日志返回概览按/进入搜索模式边输入边过滤概览按Enter跟随日志按Esc退出搜索。2.3 并行度的使用方式-j标志spack install -j N即可让包并行构建。无需设置-p安装器默认会尽可能多地派生构建并共享工作。若希望沿用旧安装器可回退配置若要在v1.1.0上体验该 UI可用以下命令启用v1.2.0起为默认spack config add config:installer:new或单次运行体验spack -c config:installer:new install ...三、Concretization Groups单个环境内的命名 spec 组v1.2.0引入Concretization Groups并发配置组允许一个环境内存在带有各自局部具体化偏好与依赖关系的命名 spec 组从而在一个spack.yaml中控制具体化顺序此前这类工作流往往需要拆分为多个环境。3.1 控制具体化顺序引导编译器场景若需要先引导编译器再用它构建应用可这样组织spack: specs: - group: compiler specs: - gcc15.2 - group: apps needs: [compiler] specs: - hdf5 %gcc15.2 - libtree %gcc15.2apps组通过needs: [compiler]声明对compiler组的依赖组间形成明确的具体化顺序。3.2 为不同组提供不同目标/变体偏好也可为特定组提供不同的 target、variant 或其它偏好spack: specs: - group: apps-x86_64_v3 specs: - gromacs - quantum-espresso override: packages: all: prefer: - targetx86_64_v3 - group: apps-x86_64_v4 specs: - gromacs - quantum-espresso override: packages: all: prefer: - targetx86_64_v4每个组被独立具体化来自依赖组的 concrete specs 会包含进每个组的求解中solve。这意味着你可以仅用一个环境同时产出面向x86_64_v3与x86_64_v4的两套构建产物。四、Concretization Caching默认开启的求解缓存v1.1.0以实验特性引入的concretization caching具体化缓存在v1.2.0中默认开启。Spack 现在会缓存具体化结果并能检测何时两次求解会产生相同结果。例如spack spec hdf5 spack install hdf5现在只需真正求解一次hdf5第二次直接命中缓存显著减少重复求解的等待时间。从源码看缓存的读取与写入逻辑位于 lib/spack/spack/solver/asp.pysolve()方法在L800附近按配置决定是否走缓存缓存根目录、条目上限等由concretizer:concretization_cache:url与concretizer:concretization_cache:entry_limit配置控制默认条目上限 1000见L3480-3488。若需在旧版本上显式开启可用spack config add concretizer:concretization_cache:enable:true五、安装期 SBOM 生成SPDX 2.3 软件物料清单软件物料清单SBOM是列出安装所包含组件、依赖与许可证的标准化文件可被安全工具消费与分析用于检测 CVE 及其它软件合规问题。v1.2.0起 Spack 在安装时自动生成 SPDX 2.3 SBOM存放位置$prefix/.spack/sbom目录$prefix为包的安装前缀内容标准目前包含NTIA 最小要素供应商、组件名、版本、唯一标识、依赖关系信息取自 Spack 元数据。源码实现位于 lib/spack/spack/hooks/sbom_generate.pypost_install()钩子L203-204在安装完成后触发generate_spdx_2_3(spec)generate_spdx_2_3()L138-199构建 SPDX 文档顶层包作为DESCRIBES关系的被描述对象每个依赖作为独立Package条目通过CONTAINS关系与顶层组件关联条目信息由make_spdx_2_3_package_entry()L108-120生成包括SPDXID、名称、版本、供应商、下载位置、声明许可证来自license()指令元数据、SHA256/SHA1 校验和等外部包spec.external会跳过 SBOM 生成L140-141。生成的文件为spdx-2.3.json采用 SPDX-2.3 规范文档命名空间基于spec.dag_hash()保证每个安装的唯一性。六、新命令spack isolatespack isolate提供了一种将单个 Spack 实例与~/.spack隔离的机制它修改当前 Spack 实例将user配置作用域指向自定义路径并通过一个isolate配置作用域把默认位于~/.spack的缓存与 stage 目录一并迁移到自定义位置。6.1 三种用法# 1. 只写入 Spack 自身前缀$spack 目录 spack isolate --self # 2. 只写入自定义路径 spack isolate --path PATH # 3. 撤销隔离恢复内部配置 spack isolate --undo从源码看lib/spack/spack/cmd/isolate.pyisolate通过在 Spack 的include.yaml配置中插入一个名为isolate的作用域ISOLATE_SCOPE_PATH位于$spack/etc/spack/isolate来实现同时会把 bootstrap、config、repos 相关配置重定向到新用户路径_isolate_bootstrap_config、_isolate_config_config、_isolate_repos_config。--undo会读取隔离前保存的include.yamlPRESERVED_INCLUDE_PATH恢复原状。该命令对 CI 或多实例部署中避免本地配置污染尤其有用。七、实验性沙箱Linux Landlockv1.2.0增加了对Linux Landlock作为沙箱的实验性支持。Landlock 是相对较新的内核特性5.13允许进程进一步自我限制文件系统的读/写/执行权限它是不需要 root 权限或非特权 namespace 支持容器运行时通常依赖的轻量级系统调用对 Spack 而言Landlock 可以拒绝除构建 stage 与安装前缀之外所有目录的写访问同时只给构建 stage 与依赖前缀读/执行权限用户还可以指定额外的可执行文件、库与目录为可读、可写或可执行。官方计划在 Spackv1.3中让沙箱默认开启以实现完全可复现、隔离、非特权构建。注意这是实验性能力需要内核支持 Landlock5.13。八、弃用与潜在破坏性变更升级到v1.2.0前应关注以下行为变化GPG 命令不再默认静默信任密钥现在需要--yes-to-all参数否则会交互式询问是否信任#52430弃用spack gpg verify与spack gpg sign#52431spack install弃用--dont-restage#51604main.py弃用--pdb并移除 SIGINT 处理器#52281、弃用--profile标志#52301spack compiler移除已弃用的--mixed-toolchain选项#51726include_concrete:弃用改用include: [spack.lock]#51900。九、其它值得注意的改进9.1 核心开发spack style改用ruff替代 flake8、isort 与 black#52156提供 Python 3.14 的 bootstrap 二进制#51580。9.2 求解器与具体化器对不存在与已弃用的版本提前报错#51555改进版本约束错误信息#51926、移除求解器内部错误#51642求解器支持clingo v6#52411更偏好最佳编译器而非对变体无惩罚的编译器#52109按哈希匹配 glibc 约束#51559非默认变体值下的确定性具体化#51780排除 externals 的弃用惩罚#51764等。9.3 性能优化viewssymlink 场景下折叠唯一子树#52135求解器简化版本编码#51591、手工优化 trigger_node 投影#51605、优化模型编码#51612、减少satisfied/2事实的 grounding 规模#51625、提高 trigger/effect 缓存命中率#51863、改进版本与变体编码#51872、#51988asp.py不再对pkg.dependencies与 versions 排序#51632Git Fetch 对单提交优化 clone#51577ctest_log_parser.py更快且顺序执行#52249setup-env.sh在无 module 命令时加速#52245。9.4 UI 与命令支持从二进制缓存mirrors包含/排除 specs#52371spack config新增--group选项#52025新增spack location --view#52177日志解析器支持tail -n风格#52279spack repo remove允许从未指定作用域移除#51563spack repo list支持--json机器可读输出#51950spack repo新增show-version-updates命令#52170spack concretize等命令在包未安装但可从二进制缓存获得时显示[b]标记#52493。9.5 显著 Bug 修复其它 spack 进程正在安装时不再提前停止#51539macOS 允许安装来自更旧 OS 的二进制#52390求解器按语言禁用编译器混用#51796修复多个 intel-oneapi-compilers 版本共存的问题#52441修复条件性语言依赖问题#51692等。十、Package API 版本v1.2.0支持Package APIv2.5各版本差异v2.5包可使用hip-lang与cuda-lang虚拟依赖v2.4包可包含带%%的 specs官方不推荐v2.3version()支持git_sparse_paths参数v2.2随 Spackv1.0发布。注意2026.06.0包发布版仍使用v2.2与 Spackv1.0兼容当开始使用更新的特性时包仓库版本才会提升。十一、版本演进速览从 v1.0 到 v1.2 的关键能力为帮助理解v1.2.0在更长时间线中的位置以下是 CHANGELOG.md 中近几个主版本的核心脉络版本发布日期核心主题v1.2.02026-06-21并行安装器转正、Concretization Groups、缓存默认开启、SBOM、isolate、Landlock 沙箱v1.1.02025-11-14编译器控制与 unmixing、可配置配置作用域、git includes、externals 支持依赖、实验性新安装器 UI 与缓存v1.0.02025-07-20编译器依赖模型、稳定 Package API、独立包仓库、内容寻址 build cache、并发包构建v0.23.02024-11-13语言虚拟依赖、spec splicing、变体传播、命名空间查询v0.22.02024-05-12编译器运行时依赖gcc-runtime、--reuse默认化、redistribute()指令v0.21.02023-11-11条件链错误信息、OCI build cache、多版本构建依赖、虚拟依赖挑选v0.20.02023-05-21requires()指令、精确版本、新测试接口、Release 构建类型v0.19.02022-11-11包需求、多构建系统、编译/变体传播、git 版本增强v0.18.02022-05-28--reuse默认化、细粒度哈希、unify:when_possible、Windows 初步支持v0.17.02021-11-05clingo 新具体化器默认化、二进制引导、--reuse引入、git commit 版本v0.16.02020-11-18实验性 clingo 具体化器、spack test/spack develop、环境级并行v0.14.02020-02-23分布式构建、spack ci流水线、spack containerizev0.13.02019-10-25环境/视图、微架构目标、spack stacks、spack dev-buildv0.12.02018-11-13Spack 环境与spack.yaml/spack.lockv0.11.02018-01-17可重定位二进制包buildcache、Python 3 支持、多值变体v0.10.02017-01-17层级配置作用域、构建/链接/运行三种依赖类型、buildcache 雏形十二、结语与升级建议v1.2.0代表了 Spack 安装体验与安全能力的一次重要升级新并行安装器默认启用配合 jobserver 动态共享与默认开启的具体化缓存让大规模环境构建更快、输出更可读Concretization Groups 让单环境承载多目标、多偏好的复杂部署成为可能安装期 SBOM 与spack isolate、Landlock 沙箱则分别从供应链可见性、实例隔离与构建安全三个维度加固了 Spack 的日常使用。升级前建议重点核对第八节列出的弃用与破坏性变更尤其是 GPG 信任行为与include_concrete:的替换并利用本仓库的源码路径如 lib/spack/spack/installer/core.py、lib/spack/spack/hooks/sbom_generate.py、lib/spack/spack/cmd/isolate.py按需深入了解各新特性的实现细节以便平滑完成迁移并充分利用新能力。【免费下载链接】spackA flexible package manager that supports multiple versions, configurations, platforms, and compilers.项目地址: https://gitcode.com/GitHub_Trending/sp/spack创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考