github.com/nextlinux/gosbom@v0.81.1-0.20230627115839-1ff50c281391/gosbom/pkg/cataloger/rpm/cataloger.go (about) 1 /* 2 Package rpm provides a concrete DBCataloger implementation for RPM "Package" DB files and a FileCataloger for RPM files. 3 */ 4 package rpm 5 6 import ( 7 "database/sql" 8 9 "github.com/nextlinux/gosbom/gosbom/pkg" 10 "github.com/nextlinux/gosbom/gosbom/pkg/cataloger/generic" 11 "github.com/nextlinux/gosbom/internal/log" 12 ) 13 14 // NewRpmDBCataloger returns a new RPM DB cataloger object. 15 func NewRpmDBCataloger() *generic.Cataloger { 16 // check if a sqlite driver is available 17 if !isSqliteDriverAvailable() { 18 log.Warnf("sqlite driver is not available, newer RPM databases might not be cataloged") 19 } 20 21 return generic.NewCataloger("rpm-db-cataloger"). 22 WithParserByGlobs(parseRpmDB, pkg.RpmDBGlob). 23 WithParserByGlobs(parseRpmManifest, pkg.RpmManifestGlob) 24 } 25 26 // NewFileCataloger returns a new RPM file cataloger object. 27 func NewFileCataloger() *generic.Cataloger { 28 return generic.NewCataloger("rpm-file-cataloger"). 29 WithParserByGlobs(parseRpm, "**/*.rpm") 30 } 31 32 func isSqliteDriverAvailable() bool { 33 _, err := sql.Open("sqlite", ":memory:") 34 return err == nil 35 }