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

  1. Run packer from a writable directory.
  2. Fix permissions on the working directory (chmod/chown) or free disk space.
  3. 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

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


AI-assisted analysis of hashicorp/packer@eb36e3c3e4 (2026-09-05). Data as JSON: /api/errors/c517b4add9c25334. Report an issue: GitHub.