hashicorp/packer · error
failed to create internal temporary file for Packer SBOM: %s
Error message
failed to create internal temporary file for Packer SBOM: %s
What it means
After determining the working directory, the internal SBOM provisioner creates a temporary file packer-sbom-*.json there via os.CreateTemp. If file creation fails (permissions, read-only filesystem, no space), Provision returns this wrapped error.
Source
Thrown at packer/provisioner.go:363
}
func (p *SBOMInternalProvisioner) Prepare(raws ...interface{}) error {
return p.Provisioner.Prepare(raws...)
}
func (p *SBOMInternalProvisioner) Provision(
ctx context.Context, ui packersdk.Ui, comm packersdk.Communicator,
generatedData map[string]interface{},
) error {
// Original implementation - all logic now in hcp-sbom provisioner
cwd, err := os.Getwd()
if err != nil {
return fmt.Errorf("failed to get current working directory for Packer SBOM: %s", err)
}
tmpFile, err := os.CreateTemp(cwd, "packer-sbom-*.json")
if err != nil {
return fmt.Errorf("failed to create internal temporary file for Packer SBOM: %s", err)
}
tmpFileName := tmpFile.Name()
if err = tmpFile.Close(); err != nil {
return fmt.Errorf("failed to close temporary file for Packer SBOM %s: %s", tmpFileName, err)
}
defer func(name string) {
fileRemoveErr := os.Remove(name)
if fileRemoveErr != nil {
log.Printf("Error removing SBOM temporary file %s: %s", name, fileRemoveErr)
}
}(tmpFile.Name())
generatedData["dst"] = tmpFile.Name()
err = p.Provisioner.Provision(ctx, ui, comm, generatedData)
if err != nil {View on GitHub (pinned to eb36e3c3e4)
Solutions
- Run packer from a writable directory.
- Fix permissions on the working directory (chmod/chown) or free disk space.
- Ensure the build pipeline runs packer with a user allowed to create files in the cwd.
Example fix
// before: running from a read-only checkout $ cd /mnt/ro/repo && packer build . // error: failed to create internal temporary file for Packer SBOM // after $ cd /mnt/rw/build && packer build /mnt/ro/repo/template.pkr.hcl
Defensive patterns
Strategy: validation
Validate before calling
cwd, err := os.Getwd()
if err == nil {
f, err := os.CreateTemp(cwd, "write-test-*")
if err == nil { f.Close(); os.Remove(f.Name()) } else { /* cwd not writable */ }
} Try / catch
if err := p.Provision(ctx, ui, comm, data); err != nil {
if strings.Contains(err.Error(), "internal temporary file for Packer SBOM") {
// fix permissions/space or run from a writable dir
}
} Prevention
- Run packer from a writable directory, not read-only mounts.
- Check disk quota/space before builds.
- Ensure the packer process user can write to the cwd.
When it happens
Trigger: Calling Provision on the built-in SBOM provisioner when os.CreateTemp(cwd, "packer-sbom-*.json") errors — e.g. the cwd is read-only, owned by another user, or the disk is full.
Common situations: Running Packer from a read-only mounted directory; insufficient write permissions after privilege changes; disk-quota exhaustion on CI runners.
Related errors
- failed to close temporary file for Packer SBOM %s: %s
- failed to open Packer SBOM file %q: %s
- failed to get source: %w
- failed to get current working directory for Packer SBOM: %s
- write SBOM %q: %w
AI-assisted analysis of hashicorp/packer@eb36e3c3e4 (2026-09-05).
Data as JSON: /api/errors/c517b4add9c25334.
Report an issue: GitHub.