{"record":{"id":"167500fb11bc2aac","repo":"hashicorp/packer","slug":"failed-to-open-packer-sbom-file-q-s","errorCode":null,"errorMessage":"failed to open Packer SBOM file %q: %s","messagePattern":"failed to open Packer SBOM file %q: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packer/provisioner.go","lineNumber":387,"sourceCode":"\t}\n\n\tdefer func(name string) {\n\t\tfileRemoveErr := os.Remove(name)\n\t\tif fileRemoveErr != nil {\n\t\t\tlog.Printf(\"Error removing SBOM temporary file %s: %s\", name, fileRemoveErr)\n\t\t}\n\t}(tmpFile.Name())\n\n\tgeneratedData[\"dst\"] = tmpFile.Name()\n\n\terr = p.Provisioner.Provision(ctx, ui, comm, generatedData)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tpackerSbom, err := os.Open(tmpFileName)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"failed to open Packer SBOM file %q: %s\", tmpFileName, err)\n\t}\n\tdefer func() {\n\t\tif err := packerSbom.Close(); err != nil {\n\t\t\tlog.Printf(\"[WARN] Failed to close Packer SBOM file: %s\", err)\n\t\t}\n\t}()\n\n\tprovisionerOut := &hcpSbomProvisioner.PackerSBOM{}\n\terr = json.NewDecoder(packerSbom).Decode(provisionerOut)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"malformed packer SBOM output from file %q: %s\", tmpFileName, err)\n\t}\n\n\tencoder, err := zstd.NewWriter(nil, zstd.WithEncoderLevel(zstd.SpeedBestCompression))\n\tif err != nil {\n\t\treturn fmt.Errorf(\"failed to create zstd encoder: %s\", err)\n\t}\n\tp.CompressedData = encoder.EncodeAll(provisionerOut.RawSBOM, nil)","sourceCodeStart":369,"sourceCodeEnd":405,"githubUrl":"https://github.com/hashicorp/packer/blob/eb36e3c3e48a036f3e8cc94087636ee72e1303c9/packer/provisioner.go#L369-L405","documentation":"Provisioning error in the SBOM hook (Provision): after the wrapped provisioner ran, the temporary SBOM output file could not be reopened with os.Open — likely deleted by the provisioner, a full tmpfs, or permission changes on the temp path.","triggerScenarios":"Provision calls os.Open(tmpFileName) on the freshly created SBOM temp file and receives an error — the file was deleted between creation and open, permissions changed, or the temp dir became inaccessible.","commonSituations":"Cleanup daemons (e.g. systemd-tmpfiles) removing files from TMPDIR mid-build; PACKER_TMP_DIR/TMPDIR pointing at a read-only or removed volume; permission changes by another process; NFS/overlayfs flakiness in containers.","solutions":["Ensure the provisioned script doesn't delete files in its working/temp directory","Check the temp filesystem for space and write permissions"],"exampleFix":"// before\npackerSbom, err := os.Open(tmpFileName)\nif err != nil {\n  return fmt.Errorf(\"failed to open Packer SBOM file %q: %s\", tmpFileName, err)\n}\n// after\npackerSbom, err := os.Open(tmpFileName)\nif err != nil {\n  return fmt.Errorf(\"failed to open Packer SBOM file %q: %w\", tmpFileName, err)\n}","handlingStrategy":"try-catch","validationCode":"// Go: check the temp directory is writable and stable before the build\nimport \"os\"\ntmp := os.TempDir() // or PACKER_TMP_DIR if set\ninfo, err := os.Stat(tmp)\nif err != nil || !info.IsDir() {\n    log.Fatalf(\"temp dir %q unusable: %v\", tmp, err)\n}\nprobe, err := os.CreateTemp(tmp, \"packer-sbom-probe-*\")\nif err != nil {\n    log.Fatalf(\"cannot create files in %q: %v\", tmp, err)\n}\nprobe.Close(); os.Remove(probe.Name())","typeGuard":null,"tryCatchPattern":"if err := p.Provision(ctx, ui, comm, data); err != nil {\n    var pe *os.PathError\n    if errors.As(err, &pe) && errors.Is(pe.Err, os.ErrNotExist) {\n        // temp file vanished: check tmp-cleaners, rerun\n    }\n    return err\n}","preventionTips":["Disable aggressive tmp-cleanup daemons during builds or use a dedicated PACKER_TMP_DIR","Use a local (non-NFS) temp directory","Avoid antivirus tools that scan-and-lock new temp files","Rerun once on transient filesystem races before deeper debugging"],"tags":["go","filesystem","temp-file","sbom"],"backgroundTag":"file-open-failed","analyzedSha":"eb36e3c3e48a036f3e8cc94087636ee72e1303c9","analyzedAt":"2026-09-05T13:20:43.127Z","contentChangedAt":"2026-09-05T13:20:43.127Z","schemaVersion":2},"datasetVersion":"2026-09-12T17:17:11.597Z"}