Updating Software in a System
Glossary terms: Package, Variant, System
These steps show how to use benchpark system external to compare and update the
external packages defined by a Benchpark system against packages detected on the current
machine. For adding a new system, please see Adding a System.
Detection includes both the general Spack search and searches at declared prefixes. When
an existing version is detected with different spec details, Benchpark proposes updating
that entry. Newly detected versions are added independently. Versions that are not
detected remain declared unchanged and are reported as NOT_FOUND in the terminal;
detecting a newer version does not prove that an older version is absent. Ambiguous
matches within one version are reported for review.
Edits to declarations shared by multiple clusters apply to all of those clusters, assuming a shared software installation. The report lists the affected clusters.
Terminal output highlights confirmed entries in green, updates in blue, additions in
cyan, review findings in yellow, and validator failures in red. Redirected output is
plain text by default. Set SPACK_COLOR=always or SPACK_COLOR=never to override
automatic color selection.
Note
You must run the following commands in the Fluxtainer environment. Software is detected for the current environment.
Spack Repository and Cache
benchpark system external uses the Spack and spack-packages checkouts in
Benchpark’s configured bootstrap location. The command selects the pinned
spack-packages repository for each Spack invocation, so detection does not depend on
package repositories downloaded into ~/.spack or on the user’s Spack configuration.
Spack’s cache for this command is located at <bootstrap-location>/spack-user-cache.
Spack creates this directory when the command first needs it; benchpark bootstrap
does not create it in advance. The bootstrap location can be set with benchpark
configure -bl <path>.
1. Lower the Recorded Tar Version
The Fluxtainer definition created in Adding a System records tar@1.35 as
an external package. In systems/fluxtainer/system.py, change that entry to an older
version:
"tar": {
"externals": [
{"spec": "tar@=1.34", "prefix": "/usr"},
],
"buildable": False,
},
The system definition now differs from the Fluxtainer environment, which provides
tar@1.35.
2. Preview the Detected Update
Run external detection from the Fluxtainer environment and request a proposed source change:
$ benchpark system external fluxtainer --propose
--propose reports eligible changes without modifying the file. If detection finds
tar@1.35 and does not find tar@1.34, the proposal adds the detected version and
retains the unconfirmed declaration unchanged:
"externals": [
{"spec": "tar@=1.34", "prefix": "/usr"},
+ {"spec": "tar@=1.35", "prefix": "/usr"},
],
3. Apply the Detected Update
Apply the proposed change to systems/fluxtainer/system.py:
$ benchpark system external fluxtainer --apply
Benchpark validates the detected change before writing it. After the command completes,
the external tar list contains both versions. The unconfirmed tar@1.34 entry
remains available for review. Changes that cannot be matched and applied unambiguously
are reported for manual review.