github.com/nextlinux/gosbom@v0.81.1-0.20230627115839-1ff50c281391/gosbom/pkg/cataloger/kernel/package.go (about) 1 package kernel 2 3 import ( 4 "strings" 5 6 "github.com/nextlinux/gosbom/gosbom/file" 7 "github.com/nextlinux/gosbom/gosbom/pkg" 8 9 "github.com/anchore/packageurl-go" 10 ) 11 12 const linuxKernelPackageName = "linux-kernel" 13 14 func newLinuxKernelPackage(metadata pkg.LinuxKernelMetadata, archiveLocation file.Location) pkg.Package { 15 p := pkg.Package{ 16 Name: linuxKernelPackageName, 17 Version: metadata.Version, 18 Locations: file.NewLocationSet(archiveLocation.WithAnnotation(pkg.EvidenceAnnotationKey, pkg.PrimaryEvidenceAnnotation)), 19 PURL: packageURL(linuxKernelPackageName, metadata.Version), 20 Type: pkg.LinuxKernelPkg, 21 MetadataType: pkg.LinuxKernelMetadataType, 22 Metadata: metadata, 23 } 24 25 p.SetID() 26 27 return p 28 } 29 30 func newLinuxKernelModulePackage(metadata pkg.LinuxKernelModuleMetadata, kmLocation file.Location) pkg.Package { 31 p := pkg.Package{ 32 Name: metadata.Name, 33 Version: metadata.Version, 34 Locations: file.NewLocationSet(kmLocation.WithAnnotation(pkg.EvidenceAnnotationKey, pkg.PrimaryEvidenceAnnotation)), 35 Licenses: pkg.NewLicenseSet(pkg.NewLicensesFromLocation(kmLocation, metadata.License)...), 36 PURL: packageURL(metadata.Name, metadata.Version), 37 Type: pkg.LinuxKernelModulePkg, 38 MetadataType: pkg.LinuxKernelModuleMetadataType, 39 Metadata: metadata, 40 } 41 42 p.SetID() 43 44 return p 45 } 46 47 // packageURL returns the PURL for the specific Kernel package (see https://github.com/package-url/purl-spec) 48 func packageURL(name, version string) string { 49 var namespace string 50 51 fields := strings.SplitN(name, "/", 2) 52 if len(fields) > 1 { 53 namespace = fields[0] 54 name = fields[1] 55 } 56 57 return packageurl.NewPackageURL( 58 packageurl.TypeGeneric, 59 namespace, 60 name, 61 version, 62 nil, 63 "", 64 ).ToString() 65 }